This commit was generated by cvs2svn to compensate for changes in r1505,
authorichikawa <ichikawa>
Sat, 14 Nov 1998 08:58:21 +0000 (08:58 +0000)
committerichikawa <ichikawa>
Sat, 14 Nov 1998 08:58:21 +0000 (08:58 +0000)
which included commits to RCS files with non-trunk default branches.

84 files changed:
ChangeLog
Makefile [deleted file]
Makefile.in
README.semi [new file with mode: 0644]
lisp/ChangeLog
lisp/Makefile [deleted file]
lisp/Makefile.in
lisp/binhex.el [deleted file]
lisp/dgnushack.el
lisp/gnus-agent.el
lisp/gnus-art.el
lisp/gnus-async.el
lisp/gnus-bcklg.el
lisp/gnus-cache.el
lisp/gnus-demon.el
lisp/gnus-draft.el
lisp/gnus-dup.el
lisp/gnus-eform.el
lisp/gnus-ems.el
lisp/gnus-group.el
lisp/gnus-i18n.el [new file with mode: 0644]
lisp/gnus-int.el
lisp/gnus-kill.el
lisp/gnus-logic.el
lisp/gnus-mailcap.el [deleted file]
lisp/gnus-mh.el
lisp/gnus-msg.el
lisp/gnus-nocem.el
lisp/gnus-range.el
lisp/gnus-salt.el
lisp/gnus-score.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-util.el
lisp/gnus-uu.el
lisp/gnus-win.el
lisp/gnus-xmas.el
lisp/gnus.el
lisp/lpath.el
lisp/message.el
lisp/messagexmas.el
lisp/messcompat.el
lisp/mm-bodies.el [deleted file]
lisp/mm-uu.el [deleted file]
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/nnkiboze.el
lisp/nnmail.el
lisp/nnmbox.el
lisp/nnmh.el
lisp/nnml.el
lisp/nnoo.el
lisp/nnsoup.el
lisp/nnspool.el
lisp/nntp.el
lisp/nnvirtual.el
lisp/pop3-fma.el [new file with mode: 0644]
lisp/pop3.el
lisp/rfc1843.el [deleted file]
lisp/smtp.el [new file with mode: 0644]
lisp/smtpmail.el [new file with mode: 0644]
readme [deleted file]
texi/ChangeLog
texi/Makefile [deleted file]
texi/Makefile.in
texi/TRANSLATION.ja [new file with mode: 0644]
texi/custom.texi [deleted file]
texi/gnus-ja.texi [new file with mode: 0644]
texi/gnus-terms.ja [new file with mode: 0644]
texi/gnus.texi
texi/message.texi
texi/widget.texi [deleted file]

index db57397..ee05b87 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,712 @@
+1998-07-19  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/pop3-fma.el: Change version No to 1.00.
+
+1998-06-30  Keisuke Mori   <ksk@ntts.com>
+
+       * texi/gnus-ja.texi: Add "Scroing".
+
+1998-06-30  Yoshiki Hayashi   <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * texi/gnus-ja.texi: Add "Scoring".
+
+1998-06-30  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * Sync up with Gnus 5.6.22
+       * lisp/gnus.el (gnus-version-number): Update to 6.7.8.
+       * lisp/pop3-fma.el : Enable to get localhost mail spool.
+       
+1998-06-29  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.7.7.
+
+       * lisp/gnus-art.el (gnus-article-prepare): Set up
+       `gnus-article-current-summary' of gnus-article-buffer.
+       (gnus-request-article-this-buffer): Don't set up
+       `gnus-article-current-summary'.
+
+1998-06-27  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.7.6.
+
+1998-06-27  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus-art.el (gnus-mime-preview-quitting-method): Renamed
+       from `mime-preview-quitting-method-for-gnus'.
+
+1998-06-27  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus-sum.el (gnus-summary-preview-mime-message): New
+       implementation.
+
+       * lisp/gnus-art.el (mime-preview-quitting-method-for-gnus): Use
+       `gnus-article-show-summary' is `gnus-show-mime' is not nil.
+
+1998-06-27  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * texi/ChangeLog, texi/gnus.texi, texi/message.texi,
+       lisp/ChangeLog, lisp/gnus.el, lisp/nngateway.el, lisp/nnfolder.el,
+       lisp/message.el, lisp/gnus-sum.el, lisp/gnus-soup.el: Sync up with
+       Gnus 5.6.20.
+
+1998-06-26  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * README, texi/ChangeLog, texi/gnus.texi, texi/message.texi,
+       lisp/ChangeLog, lisp/nnweb.el, lisp/nnmail.el, lisp/nndoc.el,
+       lisp/message.el, lisp/lpath.el, lisp/gnus.el, lisp/gnus-util.el,
+       lisp/gnus-topic.el, lisp/gnus-sum.el, lisp/gnus-score.el,
+       lisp/gnus-group.el, lisp/gnus-ems.el, lisp/gnus-demon.el,
+       lisp/gnus-art.el: Sync up with Gnus 5.6.16.
+
+1998-06-26  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.7.3.
+
+       * lisp/gnus-sum.el (gnus-summary-move-article): Use
+       `gnus-request-article-this-buffer'.
+       (gnus-request-partial-message): Likewise.
+
+       * lisp/gnus-art.el (gnus-article-prepare): Use
+       `gnus-request-article-this-buffer'.
+       (gnus-request-article-this-buffer): Renamed from
+       `gnus-request-original-article'; abolish conventional
+       implementation.
+       - Abolish unused setting for `mime-view-show-summary-method'.
+
+1998-06-26  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * readme, texi/ChangeLog, texi/gnus.texi, texi/message.texi,
+       lisp/ChangeLog, lisp/gnus.el, lisp/nnmail.el, lisp/nnheader.el,
+       lisp/nngateway.el, lisp/nnfolder.el, lisp/nnagent.el,
+       lisp/message.el, lisp/gnus-sum.el, lisp/gnus-score.el,
+       lisp/gnus-salt.el, lisp/gnus-msg.el, lisp/gnus-cus.el,
+       lisp/gnus-cache.el, lisp/gnus-art.el: Sync up with Gnus 5.6.15.
+
+1998-06-24  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * texi/gnus.texi, texi/message.texi, texi/ChangeLog: Sync up with
+       Gnus 5.6.13.
+
+1998-06-14  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+       
+       * Sync up with Gnus 5.6.13.
+       
+1998-06-24  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus-art.el (gnus-article-display-mime-message): Don't
+       `save-excursion'.
+       (gnus-article-prepare): Use `mime-fetch-field' instead of
+       `mime-entity-fetch-field'.
+
+1998-06-19  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus-art.el (gnus-article-display-mime-message): Use
+       `mime-display-message' instead of `mime-view-buffer'.
+       (gnus-article-display-traditional-message): Set
+       `gnus-article-buffer'.
+       (gnus-article-display-message-with-encoded-word): Modify for
+       `gnus-article-display-traditional-message'.
+       (gnus-article-prepare): Use `mime-parse-buffer' and
+       `mime-entity-fetch-field'; don't set gnus-article-buffer.
+
+1998-06-19  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus-sum.el (gnus-summary-move-article): Use
+       `gnus-request-original-article' instead of
+       `gnus-request-article-this-buffer'.
+
+1998-06-19  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * texi/gnus-ja.texi, texi/gnus.texi (Using MIME): Modify
+       description about new display mechanism.
+
+1998-06-19  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.6.0.
+       (gnus-version): Modify for this branch.
+
+       * lisp/gnus-art.el (gnus-article-display-method-for-mime): New
+       variable; abolish `gnus-show-mime-method'.
+       (gnus-article-display-method-for-encoded-word): New variable;
+       abolish `gnus-decode-encoded-word-method'.
+       (gnus-article-display-method-for-traditional): New variable.
+       (gnus-article-display-mime-message): New function; abolish
+       `gnus-article-preview-mime-message'.
+       (gnus-article-display-traditional-message): New function.
+       (gnus-article-display-message-with-encoded-word): New function;
+       abolish `gnus-article-decode-encoded-word'.
+       (gnus-article-prepare): Change display mechanism; use
+       `gnus-request-original-article' instead of
+       `gnus-request-article-this-buffer'.
+       (gnus-request-original-article): New function.
+
+1998-06-22  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.6.0.
+       (gnus-version): Modify for SEMI 1.8.
+
+       * lisp/gnus-sum.el: Modify for interface change in SEMI 1.8 about
+       automatic message/partial combining.
+
+1998-06-19  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.5.0.
+       (gnus-version): Modify for SEMI 1.7.
+
+       * lisp/gnus-sum.el: Rename
+       `mime-method-to-combine-message/partial-pieces' to
+       `mime-combine-message/partial-pieces-automatically'.
+
+       * lisp/gnus-art.el (gnus-article-preview-mime-message): Use
+       `mime-view-buffer'.
+       (gnus-article-decode-encoded-word): Fix DOC-string.
+       (gnus-article-header-presentation-method): New function; abolish
+       `gnus-content-header-filter'.
+       Modify for SEMI 1.7.
+
+1998-06-18  Keisuke Mori   <ksk@ntts.com>
+
+       * texi/gnus-ja.texi: Add "Select Methods".
+
+1998-06-18  Yoshiki Hayashi   <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * texi/gnus-ja.texi: Add "Select Methods".
+
+1998-06-17  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/pop3-fma.el: Small bug fix.
+       
+       * lisp/pop3-fma.el: Delete variable pop3-fma-cypher-key
+       Use base64-encode-string , base64-decode-string instead. 
+       Both change by Yasuo OKABE <okabe@kuis.kyoto-u.ac.jp>
+
+1998-06-13  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/pop3-fma.el: New function pop3-fma-cypher-string
+        New variable pop3-fma-cypher-key
+
+1998-06-07  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus-art.el: Delete setting for
+       `article-de-quoted-unreadable' and
+       `article-mime-decode-quoted-printable' because they have been
+       already abolished.
+
+1998-06-07  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * texi/gnus-ja.texi: Sync up with latest gnus.texi.
+
+       * texi/gnus.texi: Modify for Semi-gnus 6.4.0.
+
+1998-06-06  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-extract-address-components): Add
+       `std11-extract-address-components' as a choice.
+
+1998-06-06  Yoshiki Hayashi   <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * texi/gnus-ja.texi: Add "Composing Messages".
+
+1998-06-04  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus-ems.el (gnus-ems-redefine): Must require 'path-util
+       before call `module-installed-p'.
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.4.0.
+       (gnus-version): Modify for SEMI 1.5.
+
+       * lisp/gnus-art.el: Modify for SEMI 1.5 API.
+
+1998-06-04  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/pop3-fma.el: New file. To handle multiple POP account.
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.3.4.
+       And fix typo 5.6.10 -> 5.6.11.
+       
+1998-06-03  Shuhei KOBAYASHI  <shuhei-k@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.3.3.
+
+       * Sync up with Gnus 5.6.11.
+
+1998-06-03  Keisuke Mori   <ksk@ntts.com>
+
+       * texi/gnus-ja.texi: Add "The Article Buffer".
+
+1998-06-03  Yoshiki Hayashi   <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * texi/gnus-ja.texi: Add "The Summary Buffer".
+
+1998-06-02  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.3.2.
+
+       * Sync up with Gnus 5.6.10.
+
+1998-05-30  Shuhei KOBAYASHI  <shuhei-k@jaist.ac.jp>
+
+       * README.semi: Add description of `shuhei-k' branch.
+
+1998-05-17  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.3.1.
+
+1998-05-17  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus-util.el (gnus-output-to-rmail): Guard as binary.
+
+       * lisp/gnus-util.el (gnus-output-to-mail): Guard as binary.
+
+1998-04-24  Yoshiki Hayashi   <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * texi/gnus-ja.texi: Add "The Active File".
+
+1998-05-04  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.3.0.
+       (gnus-version): Modify for SEMI 1.4.
+
+       * lisp/gnus-sum.el: Use 'mime-add-condition to set up
+       acting-condition.
+
+1998-05-04  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/lpath.el: Must add "flim" instead of "mel" to load-path.
+
+1998-05-03  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.2.5.
+
+       * texi/gnus.texi, lisp/ChangeLog: Sync up with Gnus v5.6.9.
+
+       * lisp/gnus.el, lisp/message.el, lisp/gnus-sum.el,
+       lisp/gnus-msg.el, lisp/gnus-draft.el, lisp/gnus-agent.el: Sync up
+       with Gnus v5.6.9.
+
+1998-04-30  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.2.4.
+
+       * texi/gnus.texi, lisp/ChangeLog: Sync up with Gnus 5.6.7.
+
+       * lisp/gnus.el, lisp/message.el, lisp/gnus-sum.el,
+       lisp/gnus-msg.el, lisp/gnus-cache.el, lisp/gnus-art.el: Sync up
+       with Gnus 5.6.7.
+
+1998-04-28  Shuhei KOBAYASHI  <shuhei-k@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.2.3.
+
+       * Sync up with Gnus 5.6.6.
+
+1998-04-27  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/nnheader.el: Sync up with Gnus 5.6.5.
+
+1998-04-26  Shuhei KOBAYASHI  <shuhei-k@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.2.2.
+
+       * Sync up with Gnus 5.6.5.
+
+       * texi/custom.texi, texi/widget.texi: Removed from Semi-gnus.
+
+1998-04-25  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * README.semi (How to get? (via CVS)): Modify descriptions about
+       TAG.
+
+1998-04-23  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.2.1.
+
+1998-04-23  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/message.el (message-make-forward-subject): Use
+       `eword-decode-unstructured-field-body' for subject.
+
+       * lisp/gnus-msg.el (gnus-summary-mail-forward): Make local
+       variable `default-mime-charset' of `gnus-original-article-buffer'
+       and set up by `default-mime-charset' of `gnus-summary-buffer'.
+
+1998-04-23  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * texi/gnus-ja.texi: Fix typos.
+
+       * texi/gnus.texi: Modify for Semi-gnus.
+
+1998-04-23  Yoshiki Hayashi   <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * texi/gnus-ja.texi: Add "Auto Save".
+
+1998-04-22  Yoshiki Hayashi   <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * texi/gnus-ja.texi: Add "Startup Files".
+
+1998-04-21  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.2.0.
+       (gnus-version): Modify for SEMI 1.3.
+
+       * lisp/gnus-sum.el: Use 'ctree-set-calist-strictly instead of
+       'set-atype to set up for 'mime-acting-condition.
+
+1998-04-21  Yoshiki Hayashi   <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * texi/gnus-ja.texi: Add "Changing Servers".
+
+1998-04-20  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * texi/gnus-ja.texi: Modify styles.
+
+       * texi/gnus.texi: Modify for Semi-gnus (sync up with
+       gnus-ja.texi).
+
+1998-04-20  Yoshiki Hayashi   <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * texi/gnus-ja.texi: Add "New Groups".
+
+1998-04-20  Yoshiki Hayashi   <penny@tb3.so-net.ne.jp>
+
+       * texi/gnus-ja.texi: Modify styles.
+
+1998-04-18  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * texi/gnus-ja.texi: Check and modify for Semi-gnus.
+
+1998-04-18  Yoshiki Hayashi   <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * texi/gnus-ja.texi: New file.
+
+1998-04-19  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.1.3.
+
+1998-04-19  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus-art.el (gnus-following-method): New function; set up
+       for 'mime-view-following-method-alist.
+
+1998-04-18  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * texi/gnus.texi: Add and modify description for Semi-gnus.
+
+1998-04-16  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * texi/gnus.texi: "Gnus 5.6.4" -> "Semi-gnus 6.1.2".
+       (Top): "Gnus" -> "gnus".
+       (Starting Up): "Gnus" -> "gnus".
+
+1998-04-10  Shuhei KOBAYASHI  <shuhei-k@jaist.ac.jp>
+
+       * lisp/ChangeLog, lisp/gnus-agent.el: Sync up with Gnus 5.6.4.
+
+1998-04-08  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.1.2.
+       (gnus-version): Include corresponding SEMI version.
+
+       * lisp/gnus.el, lisp/nnkiboze.el, lisp/message.el,
+       lisp/gnus-sum.el, lisp/gnus-agent.el: Sync up with Gnus 5.6.4.
+
+1998-03-27  Shuhei KOBAYASHI  <shuhei-k@jaist.ac.jp>
+
+       * README.semi: Change descriptions of sending bug report.
+
+1998-03-20  Shuhei KOBAYASHI  <shuhei-k@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.1.1.
+       (gnus-version): Include corresponding SEMI version.
+
+       * Sync up with Gnus 5.6.3.
+
+1998-03-15  Shuhei KOBAYASHI  <shuhei-k@jaist.ac.jp>
+
+       * lisp/gnus-agent.el (gnus-agent-crosspost): Use
+       `nnheader-insert-file-contents'.
+       (gnus-agent-braid-nov): Ditto.
+       (gnus-agent-expire): Ditto.
+       
+       * lisp/gnus-cache.el (gnus-cache-request-article): Ditto.
+       (gnus-cache-retrieve-headers): Ditto.
+       (gnus-cache-change-buffer): Ditto.
+       (gnus-cache-braid-nov): Ditto.
+       
+       * lisp/gnus-sum.el (gnus-summary-import-article): Ditto.
+       
+       * lisp/nnkiboze.el (nnkiboze-retrieve-headers): Ditto.
+
+       * lisp/message.el (message-generate-headers): Fix regexp.
+       (cf. [semi-gnus-ja:107])
+
+1998-03-14  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus-art.el: Add setting for
+       `mime-raw-buffer-coding-system-alist'.
+
+1998-03-13  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus-art.el: Rename `mime-view-quitting-method-for-gnus' ->
+       `mime-preview-quitting-method-for-gnus'.
+
+       * lisp/gnus-art.el: Rename `mime-view-quitting-method-alist' ->
+       `mime-preview-quitting-method-alist'.
+
+       * lisp/gnus-art.el: Rename `mime-view-kill-buffer' ->
+       `mime-preview-kill-buffer'.
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.0.10.
+
+       * lisp/gnus-sum.el: Add code to check latest SEMI.
+       (mime-acting-condition): Separate type and subtype; rename
+       `mime-combine-message/partials-automatically' ->
+       `mime-method-to-combine-message/partial-pieces'.
+
+1998-03-08  Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.0.9.
+
+       * README.semi (How to get?): Add description of daily snapshot.
+       (How to join development): Change mailing list command address.
+
+       * Sync up with Gnus 5.6.2.
+
+1998-03-01  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/gnus-ems.el: Change variable name
+         gnus-bdf-image-file to gnus-mule-bitmap-image-file.
+
+1998-02-28  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.0.8.
+
+       * lisp/gnus.el: Sync up with qgnus-0.34.
+
+1998-02-28  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/message.el: Sync up with qgnus-0.33.
+
+       * lisp/gnus-ems.el (gnus-bdf-image-file): New variable; moved from
+       gnus.el.
+       (gnus-mule-group-startup-message): New function; moved and renamed
+       from `gnus-group-startup-message' of gnus.el.
+
+       * lisp/gnus.el, lisp/gnus-sum.el, lisp/gnus-art.el,
+       lisp/gnus-agent.el: Sync up with qgnus-0.33.
+
+1998-02-28  Tatsuya Ichikawa  <t-ichi@niagara.shiojiri.ne.jp>
+
+       * lisp/gnus.el (gnus-bdf-image-file): New variable.
+       (gnus-mule-group-startup-message): Display bitmap image using
+       bitmap.el running with Emacs 20.
+       
+       * lisp/gnus-agent.el (gnus-agent-fetch-headers): Fix problem when
+       Xref field is not exist.
+
+1998-02-26  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * README.semi (How to join development): Modify for Semi-gnus
+       mailing list.
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.0.7.
+
+       * lisp/gnus.el (gnus-article-display-hook): Delete
+       `gnus-article-de-quoted-unreadable' from options.
+
+       * lisp/gnus-sum.el (gnus-article-make-menu-bar): Delete key for
+       `gnus-article-de-quoted-unreadable'.
+       (gnus-summary-make-menu-bar): Delete menu for
+       `gnus-article-de-quoted-unreadable'.
+
+       * lisp/gnus-art.el (gnus-article-make-menu-bar): Delete menu for
+       `gnus-article-de-quoted-unreadable'.
+
+1998-02-24  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el, lisp/message.el: Sync up with qgnus-0.32.
+
+1998-02-23  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.0.6.
+
+       * lisp/message.el (message-fill-references): Abolish unused local
+       variables.
+
+       * lisp/pop3.el, lisp/message.el, lisp/gnus.el, lisp/gnus-sum.el,
+       lisp/gnus-art.el: Sync up with qgnus-0.31.
+
+       * lisp/gnus.el, lisp/message.el, lisp/gnus-sum.el,
+       lisp/gnus-art.el: Sync up with qgnus-0.30.
+
+1998-02-20  Christophe Broult <christophe.broult@info.unicaen.fr>
+
+       * README.semi (How to get?): The command `update' must come before
+       `-r semi-gnus'. (cf. [tm-en:1559])
+
+1998-02-17  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el: Sync up with qgnus-0.29.
+
+       * lisp/gnus.el, lisp/message.el: Sync up with qgnus-0.28.
+
+       * lisp/message.el: Abolish variable
+       `message-references-generator'.  Abolish function
+       `message-generate-filled-references',
+       `message-generate-folded-references' and
+       `message-generate-unfolded-references'.
+       (message-reply): Don't use `message-references-generator'.
+       (message-followup): Don't use `message-references-generator'.
+
+       (message-fill-references): New function.
+       (message-header-format-alist): Use `message-fill-references' for
+       References.
+
+1998-02-17  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.0.5.
+
+1998-02-17  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus-sum.el: Check SEMI-0.118.2 (Otomaru) or later.
+       (gnus-structured-field-decoder): Use
+       `eword-decode-and-unfold-structured-field'.
+
+       * lisp/gnus-art.el (gnus-article-decode-rfc1522): Use charset
+       conversion option of `eword-decode-header'.
+       (gnus-article-decode-encoded-word): Use charset conversion option
+       of `eword-decode-header'; use `gnus-run-hooks'.
+       (gnus-content-header-filter): Use charset conversion option of
+       `eword-decode-header'.
+
+       * README.semi (How to get?): Should specify "-r semi-gnus".
+
+1998-02-16  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus-art.el (gnus-article-decode-rfc1522): Decode header by
+       localized code.
+
+1998-02-16  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus-msg.el: Delete commented-out function
+       `gnus-inews-insert-mime-headers'.
+
+       * lisp/gnus.el, lisp/message.el, lisp/gnus-sum.el,
+       lisp/gnus-art.el: Sync up with qgnus-0.27.
+
+1998-02-16  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/nnheader.el: Use original.
+
+       * lisp/gnus.el, lisp/pop3.el, lisp/message.el, lisp/gnus-sum.el,
+       lisp/gnus-msg.el, lisp/gnus-draft.el, lisp/gnus-art.el: Sync up
+       with qgnus-0.26.
+
+1998-02-15  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/nnmail.el, lisp/nnmh.el: Use original.
+
+       * lisp/gnus.el, lisp/gnus-draft.el, lisp/gnus-sum.el,
+       lisp/message.el, lisp/gnus-art.el: Sync up with qgnus-0.25.
+
+1998-02-11  Shuhei Kobayashi  <shuhei-k@jaist.ac.jp>
+
+       * texi/message.texi, texi/gnus.texi, texi/ChangeLog,
+       lisp/message.el, lisp/gnus.el, lisp/gnus-uu.el,
+       lisp/gnus-topic.el, lisp/gnus-sum.el, lisp/gnus-start.el,
+       lisp/gnus-score.el, lisp/gnus-group.el, lisp/gnus-art.el,
+       lisp/gnus-agent.el, lisp/ChangeLog: Importing qgnus-0.24
+
+1998-02-10  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus-art.el (gnus-article-prepare): Don't bind coding
+       systems.
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.0.4.
+       (gnus-version): Sync with qgnus-0.23.
+
+       * lisp/pop3.el, lisp/nnmh.el, lisp/nnheader.el, lisp/message.el,
+       lisp/gnus-sum.el, lisp/gnus-msg.el, lisp/gnus-draft.el,
+       lisp/gnus-art.el: Merge qgnus-0.23.
+
+1998-02-09  Shuhei Kobayashi  <shuhei-k@jaist.ac.jp>
+
+       * texi/message.texi, texi/gnus.texi, texi/ChangeLog, lisp/nntp.el,
+       lisp/nnheader.el, lisp/message.el, lisp/gnus.el,
+       lisp/gnus-xmas.el, lisp/gnus-sum.el, lisp/gnus-start.el,
+       lisp/gnus-msg.el, lisp/gnus-group.el, lisp/gnus-draft.el,
+       lisp/gnus-art.el, lisp/gnus-agent.el, lisp/ChangeLog: Importing
+       qgnus-0.23
+
+1998-02-04  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/message.el (message-references-generator): New variable.
+       (message-generate-filled-references): New function.
+       (message-generate-folded-references): New function.
+       (message-generate-unfolded-references): New function.
+       (message-reply): Refer `message-references-generator'.
+       (message-followup): Refer `message-references-generator'.
+
+1998-01-17  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/message.el (message-send-mail-with-sendmail): Guard
+       `coding-system-for-write' by binary.
+       (message-send-mail-with-qmail): Likewise.
+
+1998-01-16  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/lpath.el: Require path-util; add load-path of APEL, MEL and
+       SEMI.
+
+1998-01-12  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/message.el: Require smtp.el when compile.
+
+       * lisp/message.el (message-send-mail-with-smtp): Use
+       `(current-buffer)' instead of `tembuf'; rename
+       `smtp-recipient-address-list' -> `recipient-address-list'.
+
+1998-01-12  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/smtp.el (smtp-deduce-address-list): Don't use
+       `smtp-recipient-address-list' as global variable.
+
+       * lisp/message.el (message-send-mail-with-smtp): Don't use
+       `smtp-recipient-address-list' as global variable.
+
+       * lisp/smtpmail.el (smtpmail-recipient-address-list): New
+       variable; renamed from `smtp-recipient-address-list'.
+       (smtpmail-send-it): Remove `(not (null ...))'.
+       (smtpmail-send-queued-mail): Likewise.
+
+1998-01-12  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/message.el (message-send-mail-with-smtp): Don't generate
+       temporary buffer for message; don't generate and kill
+       `smtp-address-buffer' for `smtp-deduce-address-list'.
+
+       * lisp/smtpmail.el (smtpmail-send-it): Don't generate and kill
+       `smtp-address-buffer' for `smtp-deduce-address-list'.
+
+       * lisp/smtp.el (smtp-deduce-address-list): Bind and generate
+       `smtp-address-buffer' in itself.
+
+1998-01-12  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to version 6.0.3.
+
+1998-01-11  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/smtp.el: New file.
+
+       * lisp/smtpmail.el: Split basic features into smtp.el.
+
+       * lisp/message.el (message-send-mail-function): Add
+       `message-send-mail-with-smtp' as an item.
+       (message-send-mail-with-smtp): New function.
+
+       * ChangeLog: New file.
+
 1998-01-08  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
 
        * lisp/smtpmail.el (smtpmail-via-smtp): Bind
diff --git a/Makefile b/Makefile
deleted file mode 100644 (file)
index 05503f4..0000000
--- a/Makefile
+++ /dev/null
@@ -1,36 +0,0 @@
-EMACS=emacs
-XEMACS=xemacs
-
-all: lick info
-
-lick:
-       cd lisp; $(MAKE) EMACS=$(EMACS) all
-
-# Rule for Lars and nobody else.
-some:
-       cd lisp; $(MAKE) EMACS=$(EMACS) some
-l:
-       cd lisp; $(MAKE) EMACS=$(EMACS) clever
-
-info:
-       cd texi; $(MAKE) EMACS=$(EMACS) all
-
-clean:
-       rm -f */*.orig */*.rej *.orig *.rej
-
-xsome: 
-       cd lisp; $(MAKE) EMACS=$(XEMACS) some
-
-elclean:
-       rm lisp/*.elc
-
-x:
-       make EMACS=xemacs
-
-distclean:
-       make clean
-       rm -r *~
-       for i in lisp texi; do (cd $$i; make distclean); done
-
-osome:
-       make EMACS=emacs-19.34 some
index a91fabc..c6205a8 100644 (file)
@@ -1,50 +1,48 @@
-prefix = @prefix@
-datadir = @datadir@
 lispdir = @lispdir@
 srcdir = @srcdir@
 
 @SET_MAKE@
 EMACS = @EMACS@
-XEMACS = xemacs21
+XEMACS = xemacs
 
 all: lick info
 
 lick:
-       cd lisp && $(MAKE) EMACS="$(EMACS)" lispdir="$(lispdir)" all
+       cd lisp && $(MAKE) EMACS=$(EMACS) lispdir=$(lispdir) all
 
 install:
-       cd lisp && $(MAKE) EMACS="$(EMACS)" lispdir="$(lispdir)" install
-       cd texi && $(MAKE) EMACS="$(EMACS)" install
+       cd lisp && $(MAKE) EMACS=$(EMACS) lispdir=$(lispdir) install
+       cd texi && $(MAKE) EMACS=$(EMACS) install
 
 # Rule for Lars and nobody else.
 some:
-       cd lisp && $(MAKE) EMACS="$(EMACS)" some
+       cd lisp && $(MAKE) EMACS=$(EMACS) some
 l:
-       cd lisp && $(MAKE) EMACS="$(EMACS)" clever
+       cd lisp && $(MAKE) EMACS=$(EMACS) clever
 
 info:
-       cd texi && $(MAKE) EMACS="$(EMACS)" all
+       cd texi && $(MAKE) EMACS=$(EMACS) all
 
 clean:
        rm -f */*.orig */*.rej *.orig *.rej
 
 xsome:
-       cd lisp && $(MAKE) EMACS="$(XEMACS)" some
+       cd lisp && $(MAKE) EMACS=$(XEMACS) some
 
 elclean:
        rm lisp/*.elc
 
 x:
-       make EMACS=xemacs21
+       make EMACS=xemacs
 
 distclean:
        make clean
-       rm -rf *~
+       rm -r *~
        for i in lisp texi; do (cd $$i; make distclean); done
-       rm -f config.log config.status config.cache Makefile
+       rm -f config.log config.status Makefile
 
 osome:
-       make EMACS=xemacs21 some
+       make EMACS=emacs-19.34 some
 
 config.status: $(srcdir)/configure
        $(SHELL) ./config.status --recheck
diff --git a/README.semi b/README.semi
new file mode 100644 (file)
index 0000000..b297fe7
--- /dev/null
@@ -0,0 +1,95 @@
+This package contains Semi-gnus.
+
+What is Semi-gnus?
+==================
+
+  Semi-gnus is a replacement of Gnus with gnus-mime for SEMI.  It has
+all 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 SEMI package, so please get and install SEMI package
+before to install it.
+
+
+How to get? (via CVS)
+=====================
+
+(0) cvs login
+
+    % cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \
+       login
+
+    CVS password: [CR] # NULL string
+
+(1) checkout
+
+    % cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \
+       checkout [-r TAG] gnus
+
+(2) compile
+
+    % cd gnus
+    % make EMACS=<file name of your emacs>
+
+(3) update
+
+    % cvs update [-r TAG]
+
+Major tags are following:
+
+    semi-gnus          assigned to the latest stable version.  It is
+                       very conservative.
+
+    for-semi-N1_N2     assigned to the latest stable version for SEMI 
+                       API N1.N2 (N1 and N2 are natural number).
+                       (e.g. `for-semi-1_3' is for SEMI API 1.3)
+
+    gnus-N1_N2_N3      assigned to gnus(Gnus) N1.N2.N3
+                       (e.g. `gnus-6_2_1' means gnus 6.2.1).
+
+    larsi              Original Gnus
+
+    himi               himi branch
+
+    ichikawa           ichikawa branch
+
+    akr                        akr branch
+
+    shuhei-k           shuhei-k branch
+                       Mail-Followup-To/Mail-Reply-To, gnus-cache fix.
+
+
+How to get? (via ftp)
+=====================
+
+  Semi-daily snapshots are also available from
+
+    ftp://ftp.jaist.ac.jp/pub/GNU/elisp/semi-gnus/
+
+  NOTE: These snapshots are automatically created from our repository
+if something was changed within a day, and will usually not be tested.
+
+
+How to join development
+=======================
+
+  If you have found a bug in Gnus proper, please do `M-x gnus-bug' and
+send a bug report to the Gnus maintainers.
+
+  If you have found a bug in Semi-gnus, or if you're not sure whether it
+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)
+
+Suggestions for Semi-gnus improvements are also welcome.
+
+  Via the Semi-gnus ML, you can report Semi-gnus related bugs, obtain
+the latest release of Semi-gnus, and discuss future enhancements to
+Semi-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)
+
+  In addition, we need developers.  If you would like to develop it,
+please send mail to cvs@chamonix.jaist.ac.jp.
index 7329efd..68e3957 100644 (file)
-Sat Nov 14 05:47:57 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Mon Jun 29 22:49:49 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.44 is released.
+       * gnus.el: Gnus v5.6.22 is released.
 
-1998-11-14 03:59:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Mon Jun 29 21:22:46 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.el (message-format-mime): New function.
+       * gnus-salt.el (gnus-pick-mode-map): Remove gnus-mouse.
 
-       * nndraft.el (nndraft-save-mime-part): New function.
-       (nndraft-get-mime-part): New function.
+       * gnus-sum.el (gnus-dependencies-add-header): `debug' left in.
+       Eh.  Eh.
 
-       * mm-encode.el (mm-default-file-encoding): New function.
-       (mm-content-transfer-encoding): New function.
-       (mm-encode-buffer): New function.
+       * gnus-salt.el (gnus-summary-pick-line-format): Missing %.-
 
-       * message.el: New command.
-       (message-mime-part): New variable.
-       (message-insert-mime-part): New command.
+       * gnus-topic.el (gnus-topic-rename): Fix error message.
 
-       * mm-encode.el (mm-encode-content-transfer-encoding): New
+Sun Jun 28 14:32:08 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-spec.el (gnus-face-face-function): Double quoting removed. 
+
+Sun Jun 28 09:54:52 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Gnus v5.6.21 is released.
+
+Sun Jun 28 08:51:39 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-sum.el (gnus-summary-edit-article-done): Copy the buffer to
+       a temp buffer before replacing.
+
+       * gnus-msg.el (gnus-post-news): Treat broken-reply-to in
+       followups. 
+
+       * gnus-sum.el (gnus-summary-goto-subject): Position point.
+
+Sat Jun 27 09:19:20 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-demon.el (gnus-util): Required.
+
+       * gnus-score.el (gnus-score-body): Message fix.
+
+       * gnus-group.el (gnus-group-highlight-line): Use it.
+
+       * gnus-util.el
+       (gnus-put-text-properties-excluding-characters-with-faces): New
        function. 
 
-       * mm-util.el (mm-content-transfer-encoding-defaults): New
-       variable. 
-       (mm-mime-file-types): Taken from TM.
+Sat Jun 27 08:56:08 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-Sat Nov 14 01:51:06 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus.el: Gnus v5.6.20 is released.
 
-       * gnus.el: Pterodactyl Gnus v0.43 is released.
+Sat Jun 27 08:49:51 1998  Arne Georg Gleditsch  <argggh@ifi.uio.no>
 
-1998-11-07  Karl Kleinpaste  <karl@jprc.com>
+       * gnus-sum.el (gnus-parent-headers): Check better for headers.
 
-       * gnus-cus.el (gnus-score-customize): Add "Extra" element.
-       * gnus-score.el (gnus-score-default-header): Ditto.
-       (gnus-header-index): Ditto.
-       (gnus-summary-increase-score): Ditto, & process "extra" requests.
-       (gnus-summary-header): Handle extra headers.
-       (gnus-summary-score-entry): Ditto, & provide new score element.
-       (gnus-summary-score-effect): Ditto.
-       (gnus-score-string): Avoid "extra" string sort, & modify match in
-       "extra" case.
-       * gnus-sum.el (gnus-make-score-map): Add "extra" element.
+Sat Jun 27 08:45:09 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-11-13 20:30:40  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-check-news-body-syntax): Buggy checksum
+       check. 
 
-       * message.el (message-resend): Bind message-required-mail-headers
-       to nil. 
+Sat Jun 27 07:59:22 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * mm-view.el (mm-inline-text): Bind w3-strict-width. 
+       * gnus.el: Gnus v5.6.19 is released.
 
-       * nngateway.el (require): Require cl.
+Sat Jun 27 07:50:50 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-art.el (gnus-button-alist): Exclude more chars from news:
-       things. 
+       * gnus.el: Gnus v5.6.18 is released.
 
-Wed Nov 11 02:15:06 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+Sat Jun 27 03:18:57 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-agent.el (gnus-agent-fetch-headers): Create directory even
-       when no articles.
+       * gnus-soup.el (gnus-soup-save-areas): Made interactive.
 
-1998-11-13 19:25:10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnfolder.el (nnfolder-request-replace-article): Check all X-From
+       headers.
 
-       * message.el (message-ignored-resent-headers): Remove X-Gnus.
+       * gnus-sum.el (gnus-update-marks): Don't nix out cache lists.  
 
-1998-11-10  Colin Rafferty  <colin@xemacs.org>
+       * nngateway.el (nngateway-mail2news-header-transformation):
+       Changed semantics.
 
-       * gnus-sum.el (gnus-ignored-from-addresses): Only quote
-       user-mail-address if non-nil.
+       * message.el (message-check-news-body-syntax): Don't look at
+       buffer size to see whether text has been added.
 
-1998-11-13 18:50:18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Fri Jun 26 15:46:05 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-util.el (gnus-make-sort-function): Do `reverse'.
-       (gnus-make-sort-function-1): Ditto.
+       * gnus.el: Gnus v5.6.16 is released.
 
-       * gnus-art.el (gnus-mm-display-part): Switch to mm in right
-       window. 
+Fri Jun 26 15:36:25 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-11-12 22:31:58  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-util.el (gnus-delete-assq): Removed.
+       (gnus-delete-assoc): Ditto.
 
-       * mm-util.el (mm-with-unibyte-buffer): Ditto.
+       * gnus.el: Use throughout.
 
-       * binhex.el (binhex-decode-region): Quote.
+       * gnus-util.el (gnus-pull): New macro.
 
-1998-11-10 05:32:28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-06-26  Simon Josefsson  <jas@pdc.kth.se>
 
-       * gnus-art.el (article-decode-charset): Don't downcase charset.
+       * gnus-sum.el (gnus-get-newsgroup-headers): parse Chars: headers
 
-       * gnus-sum.el (gnus-get-newsgroup-headers-xover): Translate CR's.
+Fri Jun 26 13:45:24 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Sun Nov  8 23:17:24 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-sum.el (gnus-update-marks): Use it.
 
-       * gnus.el: Pterodactyl Gnus v0.42 is released.
+       * gnus-util.el (gnus-delete-alist): New function.
 
-Sun Nov  8 02:36:33 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-sum.el (gnus-update-marks): Don't save list of cached
+       articles. 
 
-       * gnus-art.el (gnus-display-mime): Add id for alternative part.
+       * message.el (message-mode-menu): Include kill-buffer.
 
-1998-11-08 02:24:47  Simon Josefsson  <jas@pdc.kth.se>
+       * nnmail.el (nnmail-purge-split-history): Use it.
 
-       * nntp.el (nntp-send-mode-reader): Revert.
+       * gnus-util.el (gnus-delete-if): New function.
 
-Sun Nov  8 00:45:13 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * nnmail.el (nnmail-article-group): Use gnus-remove-duplicates.
 
-       * gnus-agent.el (gnus-agent-fetch-articles): Use with-temp-buffer.
+Fri Jun 26 13:45:09 1998  Richard Stallman  <rms@santafe.edu>
 
-Sat Nov  7 23:07:24 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-util.el (gnus-remove-duplicates): New function.
 
-       * message.el (message-make-date): Fix for negative time zones.
+Fri Jun 26 13:30:42 1998  Kevin Christian  <Kevin.Christian@symbios.com>
 
-Sun Nov  8 01:00:16 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-score.el (gnus-score-string): Do updating of scores after
+       fuzzies. 
 
-       * gnus.el: Pterodactyl Gnus v0.41 is released.
+Fri Jun 26 07:26:03 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-11-08 00:52:38  Hrvoje Niksic  <hniksic@srce.hr>
+       * message.el (message-mode): Don't do the intern dance.
 
-       * mm-decode.el (mm-dissect-multipart): Quote regexp.
+Fri Jun 26 07:13:49 1998  Richard Stallman  <rms@santafe.edu>
 
-1998-10-29  Sudish Joseph  <sj@eng.mindspring.net>
+       * message.el (message-mode): Adaptive fill changes.
 
-       * gnus.el (gnus-short-group-name): When shortening foreign select
-       methods, do not scan for plusses beyond the first colon.
+Fri Jun 26 04:29:44 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-11-07  Mike McEwan  <mike@lotusland.demon.co.uk>
+       * gnus-sum.el (gnus-summary-mode-line-format-alist): Allow article
+       score.
 
-       * gnus-agent.el (gnus-agent-save-group-info): Cater for group info 
-       lines where `group' is the last thing on the line.
+       * gnus-score.el (gnus-score-load-file): Would ignore all score
+       files without un-advanced rules.
 
-1998-11-08 00:35:09  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-ems.el ((fboundp 'split-string)): Use it where it exists. 
 
-       * gnus-art.el (gnus-article-view-part): Do alternative.
-       (gnus-mime-display-alternative): Insert marker.
+Fri Jun 26 04:23:12 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1998-11-07 14:33:46  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el: Gnus v5.6.15 is released.
 
-       * mm-decode.el (mm-dissect-multipart): Quote regexp.
+Fri Jun 26 03:39:32 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * nnmail.el (nnmail-expired-article-p): Protect against bogus
-       dates. 
+       * nnfolder.el (nnfolder-request-replace-article): Delete old
+       delimiter. 
 
-       * gnus-cus.el (gnus-topic): Required.
+       * gnus-msg.el (gnus-summary-reply): Use it.
 
-       * nnheader.el (nnheader-parse-nov): Parse extra.
-       (nnheader-nov-parse-extra): New macro.
+       * message.el (message-reply): Removed parameter.
+       (message-wide-reply): Ditto.
 
-1998-10-31 12:33:22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-msg.el (gnus-msg-treat-broken-reply-to): New function.
 
-       * gnus-art.el (gnus-article-view-part): Internal move.
+       * gnus-art.el (gnus-check-group-server): New function.
+       (gnus-request-article-this-buffer): Don't try to waken the server
+       before needing to.
 
-1998-10-28  Per Abrahamsen  <abraham@dina.kvl.dk>
+Thu Jun 25 10:35:48 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-cus-new.el (gnus-custom-topic): New free variable.
-       (gnus-group-customize): Support editing topic parameters.
+       * gnus-sum.el (gnus-summary-delete-article): Sort the articles
+       before deleting.
 
-1998-10-29 12:09:20  Karl Kleinpaste  <karl@jprc.com>
+       * nngateway.el (nngateway-request-post): Return success.
 
-       * gnus-sum.el (gnus-summary-from-or-to-or-newsgroups): Add
-       indicators. 
+       * nnheader.el (nnheader-insert-file-contents): Bind more hooks.
 
-1998-10-29 11:31:11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-summary-limit-to-age): Reverse logic.
 
-       * gnus-art.el (gnus-mm-display-part): Return.
-       (gnus-article-view-part): Only go if external.
-       (gnus-article-dumbquotes-map): Do 205.
+       * gnus-score.el (gnus-summary-score-entry): Removed interactive
+       spec. 
+       ((gnus-summary-score-map "V" gnus-summary-mode-map)): Removed
+       keystroke. 
 
-       * mm-decode.el (mm-display-part): Return what was done.
+       * gnus-art.el (gnus-article-show-summary): Position point.
 
-       * message.el (message-buffer-naming-style): New variable.
-       (message-generate-new-buffers): Extended.
-       (message-buffer-naming-style): Removed.
-       (message-buffer-name): Use it.
-       (message-do-send-housekeeping): Rename new styling.
+       * gnus-cache.el (gnus-cache-update-article): Change group first.
 
-       * gnus-sum.el (gnus-summary-recenter): Allow
-       gnus-auto-center-summary to be a number.
+       * gnus.el (gnus-short-group-name): Collapse more.
 
-Wed Nov  4 02:24:39 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+Thu Jun 25 08:48:06 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * pop3.el (pop3-open-server): Use "binary" instead of
-       "no-conversion".
+       * gnus.el: Gnus v5.6.14 is released.
 
-Sun Nov  1 01:26:42 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+Thu Jun 25 05:13:31 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-srvr.el (gnus-browse-foreign-server): Set
-       gnus-browse-current-method to the result of gnus-server-to-method.
+       * gnus-sum.el (gnus-rebuild-thread): Accept a line argument.
+       (gnus-rebuild-thread): Would skip around a lot when `P'-ing past
+       the beginning.
 
-Thu Oct 29 01:47:44 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-msg.el (gnus-post-method): Present all known servers if
+       `C-u 0'.
 
-       * gnus-util.el (gnus-pull): Another optional argument.
-       * nnweb.el (nnweb-request-delete-group): Delete from
-       nnweb-group-alist and update active file.
+       * gnus-salt.el (gnus-pick-mode-map): Reinstated keymap.
 
-Thu Oct 29 01:05:08 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-sum.el (gnus-build-sparse-threads): Put the proper date
+       in. 
 
-       * gnus-group.el (gnus-group-make-group): Accept group of new
-       method.
+Wed Jun 24 07:52:30 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-Wed Oct 28 02:19:16 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus.el: Gnus v5.6.13 is released.
 
-       * gnus-agent.el (gnus-agent-fetch-group-1): Update dribble.
+Wed Jun 24 07:47:04 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Tue Oct 27 11:59:31 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-topic.el (gnus-topic-rename): Disallow "nil".
 
-       * mm-view.el (mm-inline-text): Postion of html portion.
-       
-1998-10-29 10:26:54  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Wed Jun 24 07:33:17 1998  Vladimir Alexiev  <vladimir@cs.ualberta.ca>
 
-       * nntp.el (nntp-list-active-group): Waited for short strings.
-       (nntp-send-mode-reader): Ditto.
-       (nntp-open-connection): Ditto.
+       * nnvirtual.el (nnvirtual-update-xref-header): Regexp-quote group
+       name. 
 
-       * gnus-int.el (gnus-request-group-articles): New function.
+Wed Jun 24 06:15:27 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * nntp.el (nntp-request-listgroup): New function.
-       (nntp-request-group-articles): Renamed.
+       * gnus-sum.el (gnus-build-sparse-threads): Give all the sparse
+       articles the date of the current child.  
 
-1998-10-27 10:37:52  Karl Kleinpaste  <karl@jprc.com>
+       * gnus-topic.el (gnus-group-topic-parameters): Didn't compute.
 
-       * nnheader.el (nnheader-parse-nov): Supply extra.
+Wed Jun 24 03:27:44 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1998-10-26 23:03:48  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el: Gnus v5.6.12 is released.
 
-       * gnus-art.el (gnus-button-push): Don't go to
-       gnus-article-buffer. 
+Wed Jun 10 11:06:35 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
 
-       * mm-view.el (mm-inline-image): Add a newline.
+       * message.el (message-mail-other-window): Bind message-this-is-mail.
+       (message-mail-other-frame): Likewise.
+       (message-news-other-window): Bind message-this-is-news.
+       (message-news-other-frame): Likewise.
 
-       * gnus-start.el (gnus-check-first-time-used): Check more.
+1998-06-09  Sam Steingold  <sds@goems.com>
 
-1998-10-26 23:03:29  Francois Felix Ingrand  <felix@laas.fr>
+        * gnus-uu.el (gnus-uu-default-view-rules): make sed kill ^M only
+        at the end of line.
 
-       * gnus-start.el (gnus-check-first-time-used): Check current.
+1998-06-05  Hrvoje Niksic  <hniksic@srce.hr>
 
-1998-10-26 22:07:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnmail.el (nnmail-get-split-group): Don't regexp-quote
+       nnmail-procmail-suffix.
 
-       * mm-util.el (mm-find-charset-region): New function.
+Wed Jun 24 03:04:05 1998  Kim-Minh Kaplan  <kaplan@sky.fr>
 
-       * ietf-drums.el (ietf-drums-narrow-to-header): Work when no header.
+       * gnus-sum.el (gnus-build-get-header): Fix obarray.
 
-       * gnus-art.el (gnus-mime-button-menu): Fix.
+Wed Jun 24 02:49:57 1998  Castor  <castor@my-dejanews.com>
 
-1998-10-26 22:07:43  Michael Welsh Duggan  <md5i@cs.cmu.edu>
+       * nntp.el (nntp-open-ssl-stream): 
 
-       * gnus-art.el (gnus-mime-button-menu): New definition.
+Wed Jun 24 02:31:46 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-10-26 01:46:11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-nov-parse-line): Cleaned up.
+       (gnus-build-all-threads): Put things in the wrong obarray.
 
-       * gnus-art.el (article-decode-charset): Downcase charset.
-       (article-decode-charset): Pass on type.
-       (article-decode-charset): Check nil charsets.
-       (article-remove-cr): Translate CR to LF.
-       (gnus-ignored-mime-types): Default to nil.
+Wed Jun 24 01:43:26 1998  Decklin Foster  <djarum@base.org>
 
-       * nnheader.el (nnheader-insert-nov): Work when not Xref.
+       * nngateway.el (nngateway-mail2news-header-transformation): New
+       function. 
 
-       * gnus-sum.el (gnus-ignored-from-addresses): Default to
-       user-mail-address. 
-       (gnus-nov-parse-extra): Didn't return right thing.
+Wed Jun 24 00:25:45 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-10-25 23:25:27  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-shorten-references): New function.
+       (message-header-format-alist): Use it.
 
-       * gnus-xmas.el: Use compiled-function-p.
+       * gnus-start.el (gnus-always-read-dribble-file): Customized.
 
-Mon Oct 26 14:37:19 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * message.el (message-generate-new-buffers): Dox fox.
 
-       * mm-decode.el (mm-copy-Yo-buffer): Make it works when no header.
+Tue Jun 23 23:58:48 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Sun Oct 25 23:11:44 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-topic.el (gnus-topic-prepare-topic): Respect visible topic
+       param. 
+       (gnus-topic-hierarchical-parameters): New function.
 
-       * gnus.el: Pterodactyl Gnus v0.40 is released.
+1998-06-02  Didier Verna  <verna@inf.enst.fr>
 
-1998-10-25 21:41:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-picon.el (gnus-get-buffer-name): use get-buffer-create
+       instead of get-buffer 
 
-       * gnus-sum.el (gnus-summary-mark-forward): Show thread.
+Wed Jun  3 04:41:45 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-start.el (gnus-check-first-time-used): Ignore dribble. 
+       * nnkiboze.el (nnkiboze-request-delete-group): Delete .newsrc
+       file. 
 
-       * gnus-agent.el (gnus-agent-fetch-group-1): Bind name.
+       * nnmail.el (nnmail-article-group): Nuke looong lines.
 
-       * nnml.el (nnml-possibly-create-directory): Check before making.
+       * gnus-art.el (gnus-button-alist): Buggy default.
 
-1998-10-25 19:43:08  Kai Grossjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+Wed Jun  3 04:03:37 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * nnheader.el (nnheader-insert-nov): Don't infloop.
+       * gnus.el: Gnus v5.6.11 is released.
 
-1998-10-25 19:26:11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Wed Jun  3 03:33:50 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-sum.el (gnus-set-mode-line): Check that the spec has been
-       set up. 
+       * gnus.el: Checked doc string syntax throughout.
 
-1998-10-25 19:22:03  Joerg Lenneis  <lenneis@statrix2.wu-wien.ac.at>
+       * message.el (message-subject-re-regexp): Renamed.
 
-       * nneething.el (nneething-file-name): New definition.
+Wed Jun  3 03:33:05 1998  Simon Josefsson  <jas@pdc.kth.se>
 
-1998-10-25 17:56:23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-ignored-subject-re): New variable.
 
-       * gnus-art.el (gnus-treatment-function-alist): Fix.
-       (gnus-summary-save-in-rmail): Use gnus-output-to-rmail. 
+Wed Jun  3 03:25:13 1998  Sam Steingold  <sds@usa.net>
 
-       * nndoc.el (nndoc-dissect-mime-parts-sub): Recognize first part. 
+       * gnus-msg.el (gnus-bug-create-help-buffer): New variable.
+       (gnus-bug): Use it.
 
-Sun Oct 25 06:23:13 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+1998-05-07  Hrvoje Niksic  <hniksic@srce.hr>
 
-       * gnus.el: Pterodactyl Gnus v0.39 is released.
+       * nnmail.el: (nnmail-get-split-group): Use `regexp-quote'
+       when file name is a part of pattern.
 
-1998-10-25 00:34:39  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnmail.el (nnmail-crosspost-link-function): Ditto.
 
-       * gnus-art.el (gnus-ignored-mime-types): New variable.
-       (gnus-mime-display-single): Use it.
-       (gnus-treatment-function-alist): New variable.
+       * gnus-ems.el: Use `symbol-name' instead of `(format "%s" ...)'.
 
-       * gnus.el (gnus-mime): New group.
+       * gnus-score.el (gnus-score-load-file): Use `regexp-quote'
+       when file name is a part of pattern.
 
-       * gnus-art.el (gnus-mime-display-alternative): Don't destroy
-       things for other parts.
-       (gnus-mime-display-alternative): Place point.
+1998-05-06  Hrvoje Niksic  <hniksic@srce.hr>
 
-       * gnus.el: autoload gnus-uu-post-news.
+       * gnus-cache.el (gnus-cache-generate-active): Use `regexp-quote'
+       when file name is a part of pattern.
 
-       * mailcap.el (mailcap-mailcap-entry-passes-test): Also check
-       needsterm/DISPLAY. 
+Wed Jun  3 03:13:34 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el (mm-display-part): Default to inline text/.*
-       parts. 
+       * nnfolder.el (nnfolder-delete-mail): Changed parameters.
+       (nnfolder-request-replace-article): Rename X-From-Line.
 
-       * mm-bodies.el (mm-decode-content-transfer-encoding): Default to
-       8bit. 
+Wed Jun  3 03:10:04 1998  Dan Christensen  <jdc@chow.mat.jhu.edu>
 
-       * gnus-art.el (gnus-mime-copy-part): Use normal-mode.
-       (gnus-mime-display-single): Inline all text parts.
-       (gnus-article-narrow-to-signature): Removed mime:: stubs.
+       * nnfolder.el (nnfolder-adjust-min-active): Work.
 
-1998-10-24 21:38:37  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Mon Jun  1 05:27:28 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * nnml.el (nnml-possibly-create-directory): Rewrite.
-       (nnml-request-create-group): Change to right server.
+       * gnus-sum.el (gnus-summary-limit-to-age): Reversed time and
+       almost collapsed space!
 
-       * gnus-xmas.el (gnus-xmas-define): Use byte-code-function-p. 
+       * nnmail.el (nnmail-days-to-time): Computed wrong time.
 
-       * gnus-sum.el (gnus-set-mode-line): Use truncate-string-to-width. 
+Mon Jun  1 05:19:46 1998  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
 
-       * gnus.el: rmail-output-to-rmail-file autoload.
+       * gnus-sum.el (gnus-dependencies-add-header): Break loops.
 
-       * gnus-util.el (gnus-output-to-rmail): Didn't work if not in
-       Gnus. 
+Mon Jun  1 05:13:34 1998  Fabrice POPINEAU  <popineau@esemetz.ese-metz.fr>
 
-       * nnheader.el (nnheader-parse-head): Checked wrong variable.
+       * gnus-cache.el (gnus-cache-generate-active): Regexp-quote.
 
-       * gnus-sum.el (gnus-summary-update-mark): Ignore nil'd marks.
+Mon Jun  1 04:31:23 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-Tue Oct 20 23:37:43 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus.el: Gnus v5.6.10 is released.
 
-       * gnus-art.el (gnus-mime-display-mixed): Multipart in
-       mixed part.
+Mon Jun  1 03:25:33 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Tue Oct 20 23:36:43 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-art.el (gnus-button-alist): Recognize bare mailto buttons
+       for Gnus.
 
-       * gnus-sum.el (gnus-summary-exit): Use mm-destroy-parts.
-       
-       * gnus-sum.el (gnus-summary-exit-no-update): Ditto.
+       * nntp.el: Replaced all `message' calls.
 
-Tue Oct 20 16:22:51 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+Mon Jun  1 03:13:46 1998  Wolfgang Rupprecht  <wolfgang@dailyplanet.wsrcc.com>
 
-       * mm-uu.el (mm-uu-dissect): Create pseudo multipart head.
+       * nntp.el (nntp-encode-text): Removed spurious forward-line.
 
-1998-10-24 20:51:53  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat May 23 19:44:43 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-sum.el (gnus-valid-move-group-p): Make sure group has a
-       value. 
+       * gnus-agent.el (gnus-agent-fetch-session): Would infloop if
+       opening failed.
 
-       * gnus-art.el (gnus-article-hidden-text-p): Return nil when not
-       hidden. 
+Tue May 19 04:11:33 1998  Yoshiki Hayashi  <g740685@komaba.ecc.u-tokyo.ac.jp>
 
-       * gnus-spec.el (gnus-update-format-specifications): Use the
-       article mode line spec.
+       * nnheader.el (nnheader-translate-file-chars): Don't change
+       string. 
 
-       * gnus-art.el (gnus-insert-mime-button): Put right type.
-       (gnus-insert-prev-page-button): Ditto.
-       (gnus-insert-next-page-button): Dutti.
+Tue May 19 03:07:45 1998  P. E. Jareth Hein  <jareth@camelot-soft.com>
 
-       * pop3.el: New version installed.
+       * gnus-util.el (gnus-dd-mmm): New version.
 
-Sat Oct 24 16:48:51 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+Tue May 19 03:00:39 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-uu.el (mm-uu-dissect): Delete the begining spurious newline
-       and display last part.
+       * gnus.el: Changed address.
 
-Sat Oct 24 20:31:55 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Tue May 12 06:12:42 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.38 is released.
+       * gnus-agent.el (gnus-agent-expire): Delete more.
 
-1998-10-24 07:54:58  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun May 10 19:08:28 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (article-mime-decode-quoted-printable-buffer):
-       Removed. 
-       (article-de-quoted-unreadable): Narrow to default.
+       * gnus-group.el (gnus-group-read-ephemeral-group): Don't add
+       `address'. 
 
-       * qp.el (quoted-printable-encode-region): Encode before QP-ing.
+Sun May  3 18:01:01 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (article-decode-charset): Decode even when broken
-       MIME. 
+       * nnmail.el (nnmail-within-headers-p): Renamed.
 
-       * gnus-sum.el (gnus-summary-from-or-to-or-newsgroups): Return
-       name. 
+       * message.el (message-cancel-news): If a Sender header doesn't
+       exist, compare From against `message-make-from'.
+
+Sun May  3 15:07:25 1998  Lars Balker Rasmussen  <lbr@image.dk>
+
+       * gnus-agent.el (gnus-agent-save-group-info): Fix
+       re-search-forward params.
+
+Sun May  3 15:04:02 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-agent.el (gnus-agent-expire): Check for the size.
+
+Sat May  2 01:50:20 1998  Dan Christensen  <jdc@chow.mat.jhu.edu>
+
+       * nnfolder.el (nnfolder-goto-article): New version.
+       (nnfolder-read-folder): Fix.
+
+       * nnmail.el (nnmail-within-headers): New function.
+
+Sat May  2 01:36:37 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nnfolder.el (nnfolder-goto-article): Thinkotypo search arguments.
+
+       * nnheader.el (nnheader-find-file-noselect): Also bind
+       `find-file-hooks' to nil.
+
+       * nnmail.el (nnmail-process-unix-mail-format): Don't use
+       `find-file-noselect'. 
+
+       * gnus-group.el (gnus-group-make-menu-bar): Typo.
+
+Fri May  1 21:59:35 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Gnus v5.6.9 is released.
+
+Fri May  1 21:54:30 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nnfolder.el (nnfolder-goto-article): Would infloop.
+
+Fri May  1 19:45:50 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Gnus v5.6.8 is released.
+
+Fri May  1 18:51:21 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nntp.el (nntp-request-newgroups): Use format-time-string.
+
+       * message.el (message-fetch-field): Inhibit point-motion hooks.
+
+Fri May  1 18:33:06 1998  Wes Hardaker  <wjhardaker@ucdavis.edu>
+
+       * gnus-score.el (gnus-adaptive-word-no-group-words): New variable.
+
+Fri May  1 16:56:32 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-msg.el (gnus-copy-article-buffer): Delete headers.
+       * gnus-agent.el (gnus-agent-expire): Put point at the start of the
+       buffer.
+
+       * gnus-soup.el (gnus-soup-parse-areas): Check whether the file
+       exists. 
+
+       * gnus-draft.el (gnus-draft-send): Use meta-information.
+
+       * nnagent.el (nnagent-request-post): Store meta-information.
+
+       * gnus-agent.el (gnus-agent-meta-information-header): New variable.
+       (gnus-agent-insert-meta-information): New function.
+
+Fri May  1 16:43:35 1998  Paul Franklin  <paul@cs.washington.edu>
+
+       * message.el (message-generate-headers): Insert Sender when
+       required. 
+
+Fri May  1 15:28:55 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-util.el (gnus-dd-mmm): Accept "" dates.
+
+       * gnus-cite.el (gnus-article-hide-citation): Don't remove button
+       when hiding.
+
+       * gnus-msg.el (gnus-post-method): Allow ARG to override
+       `current'. 
+
+       * gnus-sum.el (gnus-remove-thread): Remove the dummy root
+       properly. 
+
+       * nnfolder.el (nnfolder-goto-article): New function.
+       (nnfolder-retrieve-headers): Use it.
+       (nnfolder-request-article): Ditto.
+
+Wed Apr 29 22:48:33 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Gnus v5.6.7 is released.
+
+Wed Apr 29 20:54:35 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-sum.el (gnus-summary-update-info): Bind
+       gnuis-newsgroup-scored later.
+       (gnus-summary-prepare-threads): Check some more before inserting
+       dummy roots.
+
+       * gnus-cache.el (gnus-cache-enter-article): Update marks
+       properly. 
+
+       * gnus-xmas.el (gnus-xmas-draft-menu-add): New function.
+
+       * nntp.el (nntp-connection-timeout): Removed.
+
+       * gnus-move.el (gnus-move-group-to-server): Delete nils.
+
+       * nntp.el (nntp-close-server): Close more connections.
 
-       * gnus-cache.el (gnus-cache-possibly-enter-article): Use
-       nnheader. 
+       * gnus-art.el (gnus-button-alist): Accept white space after colons
+       in <URL:news:> things.
 
-       * nnmail.el (nnmail-extra-headers): New variable.
+Wed Apr 29 20:18:45 1998  Kurt Swanson  <kurt@dna.lth.se>
 
-       * nnheader.el (nnheader-insert-nov): Insert extra.
+       * gnus-art.el (article-update-date-lapsed): Bind
+       `deactivate-mark'. 
 
-       * gnus.el (gnus-summary-line-format): Doc fix.
+       * gnus-salt.el (gnus-pick-mode-map): Moved keys around to avoid
+       shadowing. 
 
-       * gnus-sum.el (gnus-get-newsgroup-headers): Parse extra.
-       (gnus-nov-parse-line): Ditto.
-       (gnus-nov-parse-extra): New macro.
-       (gnus-header): New function.
-       (gnus-update-summary-mark-positions): Change.
-       (gnus-ignored-from-addresses): New variable.
-       (gnus-summary-insert-from-or-to): New function.
+       * gnus-art.el (gnus-article-read-summary-keys): New version.
 
-       * gnus.el (gnus-extra-headers): New variable.
+       * gnus-sum.el (gnus-summary-make-menu-bar): New for article mode. 
 
-       * nnheader.el (make-mail-header): Expand.
-       (mail-header-extra): New macro.
-       (mail-header-set-extra): Ditto.
-       (make-full-mail-header): Expand.
+       * gnus-msg.el (gnus-post-method): `current' custom.
 
-Sat Oct 24 07:41:42 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Wed Apr 29 19:04:27 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.37 is released.
+       * gnus-sum.el (gnus-summary-set-local-parameters): Ignore
+       quit-config. 
+       (gnus-select-newsgroup): Use the value of gnus-fetch-old-headers. 
 
-1998-10-24 07:29:11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-post-method): Doc fix.
 
-       * mm-bodies.el (mm-decode-body): Check for multibyticity.
+       * gnus.el (gnus-directory): dox fix.
 
-       * mm-util.el (mm-enable-multibyte): Don't always switch multibyte
-       on. 
+Tue Apr 28 03:32:17 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-10-22  Didier Verna  <verna@inf.enst.fr>
+       * gnus-group.el (gnus-group-timestamp): Really get timestamp.
 
-       * gnus-spec.el (gnus-balloon-face-function): new function
-       (gnus-parse-format): understand the %< %> specifiers
-       (gnus-parse-complex-format): ditto.
+       * gnus.el (gnus-group-parameter-value): Use explicit iteration.
 
-1998-10-24 06:31:33  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Tue Apr 28 03:15:50 1998  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
 
-       * gnus.el: Changed following-char to char-after throughout.
+       * gnus-util.el (gnus-alive-p): Check for binding.
 
-1998-10-22 04:05:55  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Tue Apr 28 03:00:16 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-sum.el (gnus-parent-headers): Don't infloop on nil
+       References. 
+
+       * gnus-art.el (gnus-article-mode): Don't kill local vars.
+
+       * score-mode.el (score-mode-syntax-table): Change syntax.
+
+Mon Apr 27 00:26:01 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Gnus v5.6.6 is released.
+
+Mon Apr 27 00:07:11 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-art.el (gnus-request-article-this-buffer): Viewing pseudos
+       in nneething groups bugged.
+
+       * gnus-sum.el (gnus-summary-prepare-threads): Dummy roots and
+       dormants and stuff.
+
+Sun Apr 26 23:34:40 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-cache.el (gnus-cache-file-name): Use FULL.
+
+       * nnheader.el (nnheader-translate-file-chars): Allow FULL
+       parameter.
+
+       * gnus-cache.el (gnus-cache-file-name): Translate all colons.
+
+Sun Apr 26 19:27:56 1998  Justin Sheehy  <justin@linus.mitre.org>
+
+       * nntp.el (nntp-rlogin-parameters): Doc fix.
+
+Sun Apr 26 19:21:12 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-art.el (gnus-summary-save-in-mail): Not a command.
+
+Sun Apr 26 19:16:03 1998  James Troup  <J.J.Troup@scm.brad.ac.uk>
+
+       * gnus-sum.el (gnus-summary-expire-articles-now): Work.
+
+Sun Apr 26 14:34:06 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-sum.el (gnus-build-sparse-threads): Break loops.
+       (gnus-summary-print-article): Save excursion to try to preserve
+       local/bound variable messup.
+
+       * gnus-salt.el (gnus-tree-read-summary-keys): Put point in article
+       buffer.
 
-       * mm-decode.el (mm-display-external): Protect more and message. 
+       * gnus-undo.el (gnus-undo): New group.
+       (gnus-undo-limit): New variable.
+       (gnus-undo-register-1): Use it.
 
-Wed Oct 21 03:26:30 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-sum.el (gnus-summary-update-info): Don't nix out scores.
 
-       * gnus-xmas.el (gnus-xmas-article-push-button): Go to the
-       position.
+       * gnus-start.el (gnus-active-to-gnus-format): Removed "." from
+       quoting. 
 
-Tue Oct 20 23:37:43 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus.el (gnus-cache-directory): Moved here. 
+       (gnus-predefined-server-alist): Use.
 
-       * gnus-art.el (gnus-mime-display-mixed): Multipart in
-       mixed part.
+       * message.el (message-autosave-directory): Put back in.
+       (message-set-auto-save-file-name): Use if Gnus isn't running.
 
-Tue Oct 20 23:36:43 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-util.el (gnus-alive-p): Moved here.
 
-       * gnus-sum.el (gnus-summary-exit): Use mm-destroy-parts.
-       
-       * gnus-sum.el (gnus-summary-exit-no-update): Ditto.
+       * message.el (message-autosave-directory): Removed.
+       (message-set-auto-save-file-name): Don't use it.
 
-Tue Oct 20 16:22:51 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus.el: Use gnus-buffer-exists-p throughout.
 
-       * mm-uu.el (mm-uu-dissect): Create pseudo multipart head.
+       * gnus-uu.el (gnus-uu-save-article): Use gnus-kill-buffer.
 
-1998-10-21  Hrvoje Niksic  <hniksic@srce.hr>
+       * message.el (message-make-in-reply-to): Check more for strange
+       From lines.
 
-       * mailcap.el (mailcap-save-binary-file): Use unwind-protect.
+       * gnus-art.el (gnus-article-mode): Don't nix out vars.
 
-       * mm-decode.el (mm-display-external): Set undisplayer to mm
-       buffer, not the current buffer; use unwind-protect.
+Sun Apr 26 14:05:40 1998  Frank Bennett  <bennett@rumple.soas.ac.uk>
 
-1998-10-21 00:07:59  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnmail.el (nnmail-move-inbox): Push error'ed mailboxes onto the
+       list. 
 
-       * gnus-sum.el (gnus-summary-exit): Destroy parts.
-       (gnus-summary-exit-no-update): Ditto.
+Sun Apr 26 13:01:53 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-10-20 22:02:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-score.el (gnus-score-save): Use it.
 
-       * mm-decode.el (mm-inline-media-tests): Look for w3.
+       * score-mode.el (score-mode-syntax-table): New table.
 
-       * mailcap.el (mailcap-mime-data): Inline html.
+       * nnmbox.el: Commentary fix.
 
-Tue Oct 20 20:25:03 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Sun Apr 26 12:59:00 1998  Richard Stallman  <rms@santafe.edu>
 
-       * gnus.el: Pterodactyl Gnus v0.36 is released.
+       * message.el (message-mode): New adaptive fill defaults.
 
-1998-10-20 18:13:08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Apr 26 12:50:38 1998  Jim Radford  <radford@robby.caltech.edu>
 
-       * gnus-art.el (article-translate-strings): 
-       (gnus-article-dumbquotes-map): Don't dot.
+       * gnus-start.el (gnus-active-to-gnus-format): Groups that start
+       with dots.
 
-       * pop3.el (pop3-open-server): Set point right.
+1998-04-11  Richard Stallman  <rms@sucrose.gnu.org>
+
+       * gnus/gnus-art.el (gnus-emphasis-alist): Use nth, not caddr.
+
+Sat Apr 25 15:33:57 1998  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
+
+       * gnus-sum.el (gnus-build-sparse-threads): Handle loops.
+
+Sat Apr 25 15:09:54 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.el (gnus-valid-select-methods): nngateway is post-mail.
+
+Fri Apr 24 21:32:14 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Gnus v5.6.5 is released.
+
+Fri Apr 24 21:19:21 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-msg.el (gnus-post-method): Doc fix.
+       (gnus-post-method): Reversed semantics.
+
+1998-04-01  Jan Vroonhof  <vroonhof@math.ethz.ch>
+
+       * gnus-msg.el (gnus-post-method): Customized. Added 'native
+       option. In the function, added support for new value.
+
+Fri Apr 24 20:04:15 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nnmbox.el (nnmbox-request-create-group): New function.
+
+Sun Apr 12 07:55:16 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-agent.el (gnus-agent-save-group-info): Only do those that
+       are covered.
+
+Tue Apr  7 11:26:31 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nntp.el (nntp-authinfo-file): Doc fix.
+
+1998-03-31  Ken Raeburn  <raeburn@cygnus.com>
+
+       * nnml.el (nnml-request-expire-articles): Sort active-articles,
+       then only expire the intersection of that set with the requested
+       articles.
+
+Wed Apr  1 16:01:44 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * message.el (message-supersede): Check Sender.
+       (message-cancel-news): Fix Sender check.
+
+Sun Mar 29 11:54:33 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nnkiboze.el (nnkiboze-generate-group): Would mess up newsrs
+       hashtb. 
+       (nnkiboze-enter-nov): Created bogus Xrefs headers.
+
+       * gnus-agent.el (gnus-agent-save-group-info): New function.
+
+       * gnus-start.el (gnus-get-unread-articles): Use it.
+
+       * message.el (message-expand-group): Allow completion from in the
+       middle of strings.
+       (message-font-lock-keywords): Work when mail-header-separator is
+       "". 
+
+Sun Mar 29 09:56:00 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Gnus v5.6.4 is released.
+
+Sun Mar 29 09:47:58 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nnkiboze.el (nnkiboze-request-delete-group): Would bug out when
+       deleting files.
+
+Sat Mar 28 08:48:31 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nntp.el (nntp-encode-text): Use `nntp-end-of-line'.
+
+Thu Mar 26 15:29:51 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-agent.el (gnus-agent-expire): Check size of history file.
+
+       * message.el (message-mode): Doc fix.
+
+Mon Mar 23 14:21:34 1998  Mike McEwan  <mike@lotusland.demon.co.uk>
+
+       * gnus-score.el (gnus-score-default-type): Doc fix.
+
+Mon Mar 23 14:12:01 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-int.el (gnus-request-body): Do the same as HEAD.
+
+       * gnus-art.el (gnus-article-edit-article-hook): Removed.
+
+Mon Mar 23 14:09:56 1998  jari aalto  <jari.aalto@poboxes.com>
+
+       * gnus-art.el (gnus-article-edit-article-hook): New hook.
+
+1998-03-19  Jan Vroonhof  <vroonhof@math.ethz.ch>
+
+       * nntp.el (nntp-open-rlogin): Wrap in save-excursion
+
+Thu Mar 19 16:43:59 1998  Joe Buehler  <jhpb@hekimian.com>
+
+       * gnus-util.el (gnus-date-iso8601): Use simple string.
+
+Thu Mar 19 15:18:00 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Gnus v5.6.3 is released.
+
+Thu Mar 19 15:09:14 1998  Wes Hardaker  <wjhardaker@ucdavis.edu>
+
+       * gnus-win.el (gnus-delete-windows-in-gnusey-frames): Make sure
+       there are no nil buffers.
+
+1998-03-17  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus-uu.el (gnus-uu-digest-headers): Add `Content-Type' and
+       `Content-Transfer-Encoding'. 
+
+1998-03-18  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * message.el (message-header-lines): Added `:format'.
+
+1998-03-18  Simon Josefsson  <jas@pdc.kth.se>
+
+       * nndoc.el: dummy request-accept-article
+
+Thu Mar 19 14:10:25 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-sum.el (gnus-summary-next-subject): Expand threads.
+
+       * gnus-agent.el (gnus-agent-group-mode-hook,
+       gnus-agent-summary-mode-hook): New variables.
+       (gnus-agent-mode): Run them.
+
+1998-03-14  SL Baur  <steve@altair.xemacs.org>
+
+       * gnus-xmas.el (gnus-xmas-group-startup-message): Tell gnus-start
+       we've already drawn the pretty Gnu graphic.
+
+Thu Mar 19 12:44:12 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-msg.el: Would use nil group names.
+
+       * nntp.el (nntp-send-authinfo): Send authinfo to "force"d
+       servers. 
+
+       * gnus-util.el (gnus-parse-netrc): Accept the "force" token.
+
+       * message.el (message-cancel-news): Compare Sender header, not
+       From header.
+
+Tue Mar 17 15:07:18 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-art.el (article-hide-headers): Fold case.
+
+Sat Mar 14 17:57:35 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-util.el (gnus-horizontal-recenter): New window-end may
+       return nil.
+
+Fri Mar 13 22:12:30 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-agent.el (gnus-agent-fetch-session): Check whether server
+       is up before fetching.
+
+       * gnus-win.el (gnus-window-frame-focus): New variable.
+       (gnus-configure-windows): Use it.
+
+       * gnus-sum.el (gnus-summary-catchup-and-exit): Don't select next
+       when in an ephemeral group.
+
+       * gnus-agent.el (gnus-agent-expire): Message end.
+       (gnus-agent-expire-all): New variable.
+       (gnus-agent-expire): Use it.
+
+Fri Mar 13 22:07:17 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-agent.el (gnus-agent-high-scored-p): Wrong value.
+
+Fri Mar 13 21:10:24 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nnvirtual.el (nnvirtual-request-group): Force updating of info. 
+
+Sun Mar  8 20:46:51 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nnmail.el (nnmail-delete-incoming): Changed default.
+
+Sun Mar  8 14:05:25 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Gnus v5.6.2 is released.
+
+Sun Mar  8 00:35:09 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-picon.el (gnus-get-buffer-name): Look in the assoc for the
+       variable. 
 
-       * mm-decode.el (mm-dissect-multipart): Dissect hierarchically. 
-       (mm-dissect-buffer): Ditto.
-       (mm-destroy-part): Ignore non-handles.
-       (mm-remove-part): Ditto.
-       (mm-destroy-parts): New function.
-       (mm-remove-parts): Ditto.
+       * nntp.el (nntp-wait-for): Check more for dead connections.
 
-       * gnus-art.el (gnus-mm-display-part): Don't move point.
+       * gnus-eform.el (gnus-edit-form-buffer): Moved back here.
 
-Tue Oct 20 02:16:36 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-win.el (gnus-window-to-buffer-helper): Return nil when
+       buffers don't exist.
 
-       * mm-uu.el : New file.
-       
-       * gnus-art.el (gnus-display-mime): Dissect uu stuffs.
-       
-       * mm-bodies.el (mm-decode-content-transfer-encoding): Encoding as
-       a function.
+       * nndraft.el (nndraft-request-restore-buffer): Remove Xref header,
+       not Xrefs.
 
-1998-10-20 00:35:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Mar  8 00:00:04 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * mm-decode.el (mm-display-external): Check before selecting.
+       * gnus.el: Gnus v5.6.1 is released.
 
-Sat Sep 26 02:03:00 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+Sat Mar  7 22:15:46 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-sum.el (gnus-multi-decode-encoded-word-string): Rewrite. 
-       
-       * gnus-sum.el (gnus-decode-encoded-word-methods): New variable.
-       
-       * gnus-sum.el (gnus-decode-encoded-word-methods-cache): New
-       variable.
-       
-       * gnus-sum.el (gnus-encoded-word-method-alist): Deleted.
-       
-       * gnus-art.el (gnus-decode-header-methods): New variable.
+       * gnus.el (gnus-edit-form-buffer): Moved here.
 
-       * gnus-art.el (gnus-decode-header-methods-cache): New variable.
+       * gnus-agent.el (gnus-agent-expire-old): Removed.
+       (gnus-agent-expire-directory): Ditto.
+       (gnus-agent-expire-group): Even more ditto.
 
-       * gnus-art.el (gnus-multi-decode-header): New function.
-       
-Tue Oct 20 00:24:16 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Sat Mar  7 21:59:18 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.35 is released.
+       * gnus.el: Quassia Gnus v0.37 is released.
 
-1998-10-20 00:00:36  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Mar  7 20:10:42 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * uudecode.el (uudecode-decode-region-external): Insert
-       literally. 
+       * gnus-agent.el (gnus-agent-expire-days): New variable.
+       (gnus-agent-expire): New function.
 
-       * gnus-xmas.el (gnus-xmas-mime-button-menu): Moved here.
+Sat Mar  7 17:35:53 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * mm-bodies.el (mm-decode-body): Optional encoding.
+       * gnus.el: Quassia Gnus v0.36 is released.
 
-1998-10-19 23:57:57  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Mar  7 17:29:20 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-ems.el (gnus-mouse-3): New variable.
+       * nntp.el (nntp-wait-for): Reversed logic.
 
-       * binhex.el (binhex-decode-region-external): Don't use -internally.
+Sat Mar  7 17:19:04 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1998-10-16 14:54:02  Simon Josefsson  <jas@pdc.kth.se>
+       * gnus.el: Quassia Gnus v0.35 is released.
 
-       * mailcap.el (mailcap-parse-mailcaps): Only open regular
-       files.
+Sat Mar  7 15:01:57 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-26 22:28:01  Simon Josefsson  <jas@pdc.kth.se>
+       * gnus-picon.el (gnus-picons-x-face-sentinel): Check whether
+       gnus-picons-x-face-file-name exists.
 
-       * gnus-group.el (gnus-add-marked-articles): Request backend update
-       of flags.
+       * gnus-art.el (gnus-article-read-summary-keys): Move window point
+       in the summary buffer.
 
-1998-09-26 19:39:31  Simon Josefsson  <jas@pdc.kth.se>
+       * nndoc.el (nndoc-type-alist): Allow spaces around separator.
 
-       * gnus-sum.el (gnus-update-read-articles): 
-       (gnus-update-marks): Request backend update of mark.
+       * gnus-sum.el (gnus-summary-edit-parameters): Interactive.
 
-1998-09-26 19:33:58  Simon Josefsson  <jas@pdc.kth.se>
+Sat Mar  7 15:00:05 1998  Wes Hardaker  <wjhardaker@ucdavis.edu>
 
-       * gnus.texi (Optional Backend Functions): New item,
-       nnchoke-request-set-mark.
+       * gnus-art.el (gnus-article-prepare): Mark articles as
+       downloadable. 
 
-1998-09-26 16:27:27  Simon Josefsson  <jas@pdc.kth.se>
+Wed Mar  4 22:33:27 1998  Ken Raeburn  <raeburn@cygnus.com>
 
-       * gnus-range.el (gnus-remove-from-range): Don't add stuff in
-          list to range.
+       * gnus-int.el (gnus-get-function): New version, caches symbol
+       names.
 
-1998-10-19 23:45:13  Simon Josefsson  <jas@pdc.kth.se>
+Fri Mar  6 01:10:22 1998  Ken Raeburn  <raeburn@cygnus.com>
 
-       * gnus-sum.el (gnus-summary-exit-no-update): Don't expire.
+       * nnml.el (nnml-article-to-file): Build pathname using
+       expand-file-name.  (Thanks, Colin Rafferty, for catching
+       this.)
 
-1998-10-14  SL Baur  <steve@altair.xemacs.org>
+Sat Feb 28 23:33:40 1998  Ken Raeburn  <raeburn@cygnus.com>
 
-       * gnus-sum.el: Move gnus-save-hidden-threads above where it is
-       first used.
+       * nnml.el (nnml-article-to-file): Don't add extra "/" when
+       building pathname.
 
-1998-10-10  SL Baur  <steve@altair.xemacs.org>
+       * nnheader.el (nnheader-file-to-number): Check value of
+       nnheader-numerical-short-files instead of checking if jka-compr is
+       loaded.
 
-       * mm-view.el: Require mm-decode for macros.
+1998-03-03  Dave Love  <d.love@dl.ac.uk>
 
-       * mm-decode.el (mm-handle-type): Move macro declarations above the
-       place where they are used.
+       * nnheader.el (nnheader-parse-head): Fix in-reply-to code. Return
+       nil consistently if not found.
 
-Sun Oct 18 13:59:07 1998  Kurt Swanson  <ksw@dna.lth.se>
+Sat Mar  7 13:50:44 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-        * gnus-msg.el (gnus-summary-mail-forward): Erase old forward
-        buffer.
+       * nntp.el: Check whether the connection died.
 
-1998-10-19 23:38:11  Katsumi Yamaoka  <yamaoka@ga.sony.co.jp>
+1998-03-01  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
 
-       * nnagent.el (nnagent-open-server): Error message.
+       * gnus.texi (Easy Picons): Removed references to
+       `gnus-group-display-picons'.
+       (Hard Picons): Ditto.
 
-1998-10-19 23:35:08  Joerg Lenneis  <lenneis@statrix2.wu-wien.ac.at>
+Mon Mar  2 16:17:36 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * nnheader.el (nnheader-article-p): Recognize lower-case headers. 
+       * gnus-sum.el (gnus-summary-exit-no-update): Run
+       gnus-summary-prepare-exit-hook here as well.
 
-1998-10-19  Hrvoje Niksic  <hniksic@srce.hr>
+Sat Feb 28 13:35:26 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * score-mode.el (gnus-score-mode-map): Ditto.
+       * nntp.el (nntp-authinforc-file): Changed default.
+       (nntp-authinfo-file): Changed name.
+       (nntp-record-commands): New variable.
+       (nntp-record-command): New function.
 
-       * message.el (message-mode-map): Ditto.
+       * gnus-agent.el (gnus-agent-group-path): Use real name of group. 
 
-       * gnus-uu.el (gnus-uu-post-news): Ditto.
+       * gnus-sum.el (gnus-summary-insert-subject): Don't allow nil
+       articles. 
+       (gnus-summary-read-group): Respect backward movement.
 
-       * gnus-kill.el (gnus-kill-file-mode-map): Ditto.
+1998-03-01  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
 
-       * gnus-eform.el (gnus-edit-form-mode-map): Ditto.
+       * gnus-win.el (gnus-window-to-buffer): change "*Picons*" to
+       `gnus-picons-buffer'.
+       (gnus-window-to-buffer-helper): Support dynamic picon buffer
+       name (i.e a symbol that names a function to be called).
+       (gnus-configure-frame): Use it.
+       (gnus-delete-windows-in-gnusey-frames): Use it.
+       (gnus-all-windows-visible-p): Use it.
+       (gnus-remove-some-windows): Use it.
 
-       * gnus-art.el (gnus-article-edit-mode-map): Use
-       `set-keymap-parent' rather than `copy-keymap'.
+       * gnus-picon.el (gnus-get-buffer-name): Use it.
+       (gnus-picons-kill-buffer): New function.
+       (gnus-picons-setup-buffer): New function.
+       (gnus-picons-set-buffer): Use them.
+       (gnus-picons-display-x-face): Put back the `buf' binding: it is
+       needed when `gnus-picons-display-where' is not set to article.
+       Also move the X-Face to the left, near the address.  It seems more
+       logical.
 
-1998-10-18  Hrvoje Niksic  <hniksic@srce.hr>
+Sat Feb 28 08:27:20 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-art.el (gnus-mime-button-commands): New variable.
-       (gnus-mime-button-map): Initialize it from
-       `gnus-mime-button-commands'.
-       (gnus-mime-button-menu): New function.
-       (gnus-insert-mime-button): Use `gnus-mime-button-map'.
+       * gnus.el: Quassia Gnus v0.34 is released.
 
-1998-10-11  Hrvoje Niksic  <hniksic@srce.hr>
+Sat Feb 28 08:17:37 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * message.el (message-insert-to): Make `nobody' and `poster'
-       synonymous to `never' and `always' in Mail-Copies-To.
-       (message-reply): Ditto.
-       (message-followup): Ditto.
+       * gnus.el: Quassia Gnus v0.33 is released.
 
-1998-10-19 23:17:41  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Feb 28 08:10:27 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mailcap.el (mailcap-mime-data): Save sound.
+       * gnus-picon.el (gnus-picons-display-x-face): `buf' -- unbound
+       var. 
 
-1998-09-24  Hrvoje Niksic  <hniksic@srce.hr>
+Sat Feb 28 08:03:23 1998  François Pinard  <pinard@iro.umontreal.ca>
 
-       * message.el (message-ignored-supersedes-headers): Include
-       `NNTP-Posting-Date'.
+       * gnus: configure'd.
 
-1998-10-19 01:25:27  Jonas Steverud  <d4jonas@dtek.chalmers.se>
+Sat Feb 28 07:43:00 1998  Nelson Jose dos Santos Ferreira  <Nelson.Ferreira@inesc.pt>
 
-       * gnus-art.el (gnus-article-dumbquotes-table): New variable.
+       * nnsoup.el (nnsoup-store-reply): Fix double sep error.
 
-1998-10-19 00:50:22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Feb 28 07:01:17 1998  Lasse Rasinen  <lrasinen@iki.fi>
 
-       * mm-bodies.el (mm-decode-content-transfer-encoding): Use
-       uudecode. 
+       * gnus-start.el (gnus-ask-server-for-new-groups): Message more. 
 
-1998-10-18 18:20:34  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Fri Feb 27 13:26:34 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el (mm-display-external): Don't switch on save.
+       * message.el (message-resend): Allow arbitrary Also's.
 
-1998-10-18 18:14:06  Andy Piper  <andyp@parallax.co.uk>
+1998-02-27  Dave Love  <d.love@dl.ac.uk>
 
-       * nnmail.el (nnmail-movemail-args): New variable.
+       * gnus-sum.el (gnus-simplify-subject-functions): Fix
+       customization, doc.
 
-1998-10-18 00:17:02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-02-25  Dave Love  <d.love@dl.ac.uk>
 
-       * gnus-art.el (article-translate-strings): 
+       * gnus-art.el (gnus-article-x-face-command): Replace leading `{'.
 
-1998-10-17 22:51:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Mon Feb 23 18:26:48 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-article-view-part): Use it.
-       (gnus-mm-display-part): New function.
-       (article-de-quoted-unreadable): Yse mm-default-coding-system.
+       * gnus-agent.el (gnus-plugged): New command and keystroke.
 
-       * mm-decode.el (mm-handle-displayed-p): New function.
+       * gnus-ems.el (gnus-ems-redefine): Define
+       'gnus-summary-set-display-table as a function that takes no
+       params. 
 
-       * gnus-art.el (gnus-mime-copy-part): Create better names.
-       (gnus-mime-button-line-format): Include dots spec.
+       * gnus.el (gnus-interactive): Don't use gnus-sum macros.
+       (gnus-valid-select-methods): Include nnlistserv.
 
-1998-10-15  Matt Pharr  <mmp@graphics.stanford.edu>
+       * gnus.el: Autoloaded things to make byte-comp silent.
 
-      * gnus-msg.el (gnus-summary-mail-forward): Erase contents of old
-      forward buffer first.
+Mon Feb 23 18:06:47 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1998-10-17 21:16:46  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el: Quassia Gnus v0.32 is released.
 
-       * gnus-util.el (gnus-set-window-start): New function.
+Mon Feb 23 17:48:42 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.el (message-send): Don't check changed.
+       * gnus-cite.el (gnus-article-hide-citation-maybe): Wrong
+       interactive specs.
+       (gnus-cite-toggle): Maybe parse.
 
-1998-10-12 15:26:41  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Mon Feb 23 05:26:11 1998  Rui-Tao Dong ~{6-HpLN~}  <rdong@internetmci.com>
 
-       * gnus-art.el (gnus-article-setup-buffer): Set params.
+       * nnweb.el (nnweb-type-definition): Fixed.
 
-       * mm-decode.el (mm-user-display-methods): Inline
-       "message/delivery-status". 
+Sun Feb 22 18:10:53 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-10-11 07:06:38  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-agent.el (gnus-agent-group-path): Translate right chars.
+       (gnus-agent-toggle-plugged): Allow proper closing.
 
-       * message.el (message-auto-save-directory): Rename.
-       (message-mode): Dof fix.
+       * gnus-srvr.el (gnus-browse-read-group): Allow entering
+       non-ephemeral groups.
 
-       * gnus-art.el (gnus-summary-save-in-pipe): Default to "cat".
-       (gnus-summary-save-in-pipe): No, check gnus-last-shell-command. 
+Sun Feb 22 04:21:15 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * nndoc.el (nndoc-mime-parts-type-p): Be a bit more forgiving.
+       * gnus.el: Quassia Gnus v0.31 is released.
 
-       * message.el (message-make-date): Avoid locale.
+Sun Feb 22 02:09:35 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-article-edit-done): Allow update before doing
+       * gnus-sum.el (gnus-summary-highlight): Give undownloaded marks a
+       better face.
+
+       * gnus-score.el (gnus-score-set): Take optional "warn".
+       (gnus-summary-score-entry): Use it.
+
+       * gnus.el: Removed spurious * in defcustoms.
+
+       * gnus-score.el (gnus-score-load-file): Reverse logic.
+
+       * gnus-cite.el (gnus-article-hide-citation): Use markers to make
+       things work when wrapping.
+
+       * gnus-sum.el (gnus-summary-exit): Stop prefetch.
+
+Sat Feb 21 02:12:42 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-sum.el (gnus-get-newsgroup-headers): Buggy regexp.
+
+Sat Feb 21 00:51:22 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Quassia Gnus v0.30 is released.
+
+Sat Feb 21 00:09:14 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-sum.el (gnus-summary-mark-article): Don't do anything if
+       the mark doesn't change.
+
+       * gnus-art.el (gnus-article-prepare): Don't enter article into
        cache. 
 
-       * mm-decode.el (mm-display-inline): Goto point-min.
+       * gnus-sum.el (gnus-summary-reparent-thread): Don't mark as read.
+       (gnus-summary-mark-article): Don't do cache things here.
+
+       * gnus-util.el (gnus-parse-netrc): Skip past macdefs.
+
+Fri Feb 20 22:56:22 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-srvr.el (gnus-browse-unsubscribe-group): Wouldn't allow
+       unsubscription. 
+
+       * gnus-sum.el (gnus-summary-insert-subject): Allow inserting
+       articles outside limits.
+
+       * gnus-start.el (gnus-dribble-enter): Update mode line.
+
+       * gnus-srvr.el (gnus-browse-unsubscribe-group): Allow
+       unsubscription. 
+
+       * gnus-picon.el (gnus-article-display-picons): Check that the
+       extents are live first.
+
+Thu Feb 19 15:13:44 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-group.el (gnus-useful-groups): Include gnus-bug.
+
+Thu Feb 19 02:28:17 1998  Jens-Ulrik Holger Petersen  <petersen@kurims.kyoto-u.ac.jp>
+
+       * gnus.el (gnus-group-history): Defined twice.
+
+Thu Feb 19 01:58:47 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-sum.el (gnus-get-newsgroup-headers): Just use the header
+       value. 
+       (gnus-summary-exit): Set global vars.
+
+Tue Feb 17 07:17:49 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-sum.el (gnus-summary-stop-page-breaking): Mark page as no
+       longer broken.
+       (gnus-summary-exit): Purge the real name.
+
+Tue Feb 17 07:00:43 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Quassia Gnus v0.29 is released.
+
+Tue Feb 17 06:15:03 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nnmail.el (nnmail-purge-split-history): List of alists, not
+       alist. 
+
+Mon Feb 16 20:22:04 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Quassia Gnus v0.28 is released.
+
+1998-02-16  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * message.el (message-dont-send): Make sure the article really is
+       saved. 
+
+       * nnmail.el (nnmail-purge-split-history): Alist; not a list of
+       alists. 
+
+1998-02-16  Hrvoje Niksic  <hniksic@srce.hr>
+
+       * message.el (message-kill-to-signature): Do the right thing when
+       there is no signature.
+
+1998-02-16  Hrvoje Niksic  <hniksic@srce.hr>
+
+       * message.el (message-elide-elipsis): Add type and group.
+       (message-elide-region): Docfix.
+
+1998-02-16  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-util.el (gnus-run-hooks): Use unwind-protect instead of
+       save-excursion. 
+
+1998-02-16  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * nntp.el (nntp-authinforc-file): Customized.
+
+Mon Feb 16 03:18:33 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-nocem.el (gnus-nocem-unwanted-article-p): Don't look if the
+       hashtable doesn't exist.
+
+       * gnus-start.el (gnus-ask-server-for-new-groups): Make sure the
+       killed groups hashtable exists.
+
+Sun Feb 15 23:02:11 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nntp.el (nntp-authinforc-file): Changed name and default.
+       (nntp-send-authinfo): Use it.
+
+Sun Feb 15 19:50:10 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Quassia Gnus v0.27 is released.
+
+Sun Feb 15 19:41:14 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.el (gnus-ephemeral-servers): New variable.
+       * gnus-srvr.el (gnus-server-prepare): Use it.
+       * gnus-group.el (gnus-group-read-ephemeral-group): Ditto.
+
+Sun Feb 15 19:35:11 1998  Kurt Swanson  <kurt@dna.lth.se>
+
+       * gnus-art.el (gnus-article-read-summary-keys): Go to top on
+       some. 
+
+Sun Feb 15 19:26:21 1998  SeokChan LEE  <chan@xfer.kren.nm.kr>
+
+       * message.el (message-ignored-supersedes-headers): Fix.
+
+Sun Feb 15 18:39:15 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-salt.el (gnus-tree-close): Start killing buffer again.
+
+       * gnus-sum.el (gnus-mark-article-as-read): Return t.
+
+       * gnus-art.el (gnus-article-edit-mode): Run text mode hook.
+
+Sun Feb 15 17:31:19 1998  Roland Roberts  <rroberts@muller.com>
+
+       * gnus-sum.el (gnus-nov-parse-line): Would bug out on bogus
+       References headers.
+
+Sun Feb 15 14:23:51 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-art.el (gnus-article-current-summary): New variable.
+       (gnus-article-mode): Make it local.
+
+       * gnus-score.el (gnus-summary-increase-score): Find the right
+       global score file.
+
+       * gnus-start.el (gnus-setup-news): Don't find new newsgroups
+       unless plugged.
+
+       * message.el (message-mode): Set font-lock things before running
+       mode hook.
+
+       * gnus-agent.el (gnus-agent-group-path): Respect long file names. 
+
+Sat Feb 14 21:31:25 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-sum.el (gnus-summary-goto-last-article): Force jumping to
+       articles outside limit.
+
+       * gnus-agent.el (gnus-agent-toggle-plugged): un/plug before hook. 
+
+Sat Feb 14 21:08:03 1998  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
+
+       * gnus-xmas.el (gnus-xmas-article-display-xface): t t would make
+       faces disappear.
+
+Sat Feb 14 20:52:34 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nntp.el (nntp-netrc-file): New variable.
+
+Sat Feb 14 19:28:01 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Quassia Gnus v0.26 is released.
+
+Sat Feb 14 18:40:55 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-agent.el (gnus-agent-directory): Translate file chars. 
+
+       * gnus-sum.el (gnus-summary-print-article): Don't display all
+       headers.
+       (gnus-summary-edit-parameters): New command and keystroke.
+
+       * gnus-group.el (gnus-group-rename-group): Mark dribble.
+
+Sat Feb 14 18:39:45 1998  Fred Oberhauser  <foberhauser@psipenta.de>
+
+       * nnmail.el (nnmail-process-babyl-mail-format): Fix point
+       movement. 
+
+Sat Feb 14 18:31:39 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-article-prepare-display): Not read-only.
+       * gnus.el (gnus-group-get-parameter): Dix fix.
 
-       * mm-decode.el (mm-display-external): Reverse before sorting.
+Sat Feb 14 18:29:12 1998  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
 
-       * gnus-draft.el (gnus-draft-send): Allow mail.
+       * gnus-picon.el: Updated documentation.
 
-1998-10-10 -SL Baur  <steve@altair.xemacs.org>
+Sat Feb 14 18:26:53 1998  Joev Dubach  <dubach@dcepea.harvard.edu>
 
-       * message.el (message-check): Move message-check macro above where 
-       it is first used.
+       * nntp.el (nntp-send-authinfo-from-file): Doc fix.
 
-       * gnus-art.el (article-hide-pgp): Hide the PGP 5/GNUPG Hash: line.
+Sun Jan 11 23:44:12 1998  Ken Raeburn  <raeburn@cygnus.com>
 
-1998-10-11 06:45:37  Lloyd Zusman  <ljz@asfast.com>
+       * nnagent.el (nnagent-request-update-info): New no-op fn.
 
-       * gnus-sum.el (gnus-summary-make-menu-bar): Fix.
+Sat Feb 14 17:41:44 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Sun Oct 11 02:28:40 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-srvr.el (gnus-browse-unsubscribe-group): Wouldn't allow
+       subscription of visited groups.
 
-       * gnus.el: Pterodactyl Gnus v0.34 is released.
+       * gnus-util.el (gnus-run-hooks): New function.
+       Use it everywhere.
 
-1998-10-11 02:15:41  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nntp.el (nntp-authinfo-password): New variable.
+       (nntp-send-authinfo): Cache authinfo password.
 
-       * mm-decode.el (mm-inline-media-tests): delivery-status.
+       * gnus-sum.el (gnus-summary-mark-article-as-unread): Don't do
+       anything if the mark doesn't change.
 
-       * mm-view.el (mm-inline-text): Provide default.
+1998-01-17  Simon Josefsson  <jas@pdc.kth.se>
 
-1998-10-11 01:01:37  Lloyd Zusman  <ljz@asfast.com>
+       * gnus-sum.el (gnus-summary-work-articles): change buffer
+       before looking at marked articles
+       (gnus-summary-work-articles): better check of marked articles
+       
+Sat Feb 14 15:10:36 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mailcap.el (mailcap-possible-viewers): Fix nils.
+       * nntp.el (nntp-send-authinfo): Use new .netrc functionality.
 
-1998-10-11 00:03:37  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-util.el (gnus-netrc-syntax-table): New variable.
+       (gnus-parse-netrc): New function.
+       (gnus-netrc-machine): Ditto.
+       (gnus-netrc-get): Ditto.
 
-       * gnus-art.el (gnus-article-edit-exit): Don't do updates.
-       (article-update-date-lapsed): Record the buffer.
-       (article-update-date-lapsed): Do all windows that display article
-       buffers. 
+       * gnus-draft.el (gnus-draft-make-menu-bar): Added deletion.
 
-       * nnml.el (nnml-generate-nov-databases-1): Ditto.
+       * gnus.el (gnus-expert-user): Dix fox.
 
-       * gnus-score.el (gnus-score-score-files-1): Ignore dotted files. 
+       * nnmail.el (nnmail-article-group): Remove duplicates from split. 
 
-       * gnus-art.el (gnus-insert-mime-button): Mark buttons as
-       annoations. 
+       * message.el (message-check-news-header-syntax): Check more on
+       Message-ID. 
 
-       * gnus-msg.el (gnus-summary-mail-forward): Decode properly.
+       * nnmh.el: Don't call nnmail-activate.
 
-1998-10-10 22:07:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el: User-variabelize all custom vars.
 
-       * gnus-agent.el (gnus-category-add): Change default category to
-       'false. 
+Fri Feb 13 22:40:39 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * nnvirtual.el (nnvirtual-update-read-and-marked): Don't nix out
-       scores. 
+       * gnus.el: Quassia Gnus v0.25 is released.
 
-       * gnus-draft.el (gnus-draft-send): Check server more.
+Fri Feb 13 19:01:19 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-article-view-part): New command and keystroke.
-       (gnus-article-goto-part): New function.
+       * nndoc.el (nndoc-type-alist): Allow blank lines to separate
+       headers from bodies.
 
-       * mm-view.el (mm-inline-text): Insert richtext properly.
+       * gnus-art.el (gnus-article-edit): Restore Date header.
 
-       * gnus-art.el (gnus-insert-mime-button): Store handle in alist. 
+       * gnus-async.el (gnus-asynch-obarray): New variable.
+       (gnus-async-prefetched-article-entry): Use it.
+       (gnus-async-set-buffer): Use it.
 
-1998-10-03 15:04:27  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnmh.el (nnmh-active-number): Create parent dirs.
 
-       * parse-time.el (parse-time-rules): Accept dates far into the past
-       and the future, and parse single-digit numbers as years.
+       * nntp.el (nntp-last-command): New variable.
+       (nntp-handle-authinfo): New function.
 
-1998-10-02 04:46:46  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-summary-exit): Call purging function.
 
-       * mm-decode.el (mm-display-external): Chop off directories.
+Fri Feb 13 18:59:16 1998  François Pinard  <pinard@iro.umontreal.ca>
 
-1998-10-01 07:33:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnmail.el (nnmail-get-new-mail): Don't clear split-history.
+       (nnmail-purge-split-history): New function.
 
-       * uudecode.el (uu-decode-region-external): Use
-       insert-file-contents-literally. 
+Fri Feb 13 18:36:16 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-cache.el (gnus-cache-generate-active): Translate _ to :.
+       * nntp.el (nntp-telnet-shell-prompt): Renamed.
 
-1998-10-01 07:02:11  Shenghuo ZHU  <zsh@cs.rochester.edu>
+Fri Feb 13 18:35:23 1998  Sam Falkner  <samf@channelpoint.com>
 
-       * uudecode.el: New file.
+       * nntp.el (nntp-open-telnet-envuser): New variable.
 
-       * mm-bodies.el (mm-decode-content-transfer-encoding): Do
-       x-uuencode. 
+Fri Feb 13 18:29:23 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-10-01 05:19:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-send-mail-function): Added smtpmail-send-it.
 
-       * gnus-art.el (gnus-mime-display-alternative): Set faces.
+1998-02-11  Dave Love  <d.love@dl.ac.uk>
 
-       * message.el (message-fetch-field): Unfold properly.
+       * gnus-art.el (gnus-button-url): Don't lose in Emacs 20 with
+       browse-url-browser-function an alist, not a function.
+       (gnus-button-embedded-url): Likewise.
 
-       * mm-bodies.el (mm-decode-content-transfer-encoding): Replace CRLF
-       in text/plain.
+Fri Feb 13 17:10:31 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-30 05:47:49  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-cite.el (gnus-cite-localize): New function.
+       (gnus-cite-close): Renamed.
+       (gnus-cite-parse-maybe): Use it.
 
-       * gnus-sum.el (gnus-summary-first-unread-subject): New command.
-       (gnus-auto-select-first): Removed.
-       (gnus-auto-select-first): Extended.
-       (gnus-summary-read-group-1): Use new value.
+       * gnus-sum.el (gnus-summary-move-article): Move back to summary
+       buffer. 
 
-1998-09-29 13:21:06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnfolder.el (nnfolder-request-accept-article): Save excursion.
+       (nnfolder-request-move-article): Ditto.
 
-       * message.el (message-fix-before-sending): Space.
+       * nntp.el (nntp-find-connection): Don't message.
 
-       * nnmail.el (nnmail-find-file): Don't erase.
+Fri Feb 13 14:51:56 1998  MORIOKA Tomohiko  <steve@xemacs.org>
 
-Wed Sep 30 23:49:03 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * message.el (message-send-mail-with-qmail): Fix.
 
-       * gnus-agent.el (gnus-agent-fetch-headers): Do not decode headers.
+1998-02-13  Per Abrahamsen  <abraham@dina.kvl.dk>
 
-Wed Sep 30 23:46:29 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-draft.el (gnus-draft-make-menu-bar): Added missing commands.
 
-       * gnus-soup.el (gnus-soup-add-article): Do not decode headers.
+1998-01-06  Per Abrahamsen  <abraham@dina.kvl.dk>
 
-Wed Sep 30 23:44:08 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus/gnus-cus.el (gnus-score-parameters): Make `files' and
+       `exclude-files' widgets inline.
 
-       * gnus-soup.el (gnus-soup-pack-packet): Pack only if necesary.
+Fri Feb 13 12:46:23 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Sat Sep 26 03:04:18 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-sum.el (gnus-article-mark): Dox dox.
 
-       * mm-util.el (mm-with-unibyte-buffer): Make it work in XEmacs
-       20.4.
+Wed Feb 11 15:05:03 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1998-09-29 11:35:09  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el: Quassia Gnus v0.24 is released.
 
-       * gnus-art.el (gnus-mime-view-all-parts): New command and
+Tue Feb 10 21:59:53 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-agent.el (gnus-agent-fetch-session): Reversed reversal.
+
+       * gnus-topic.el (gnus-topic-rename): Check whether the new name
+       exists. 
+
+Tue Feb 10 21:39:47 1998  dave edmondson  <dme@sco.com>
+
+       * message.el (message-font-lock-keywords): Allow : as a citation
+       ending. 
+
+Tue Feb 10 20:09:02 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * message.el (message-send): Removed dead code.
+
+Mon Feb  9 17:02:09 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * message.el (message-fill-header): Fill to column 990.
+
+       * gnus-score.el (gnus-score-load-file): Exclude all excluded
+       files. 
+
+Mon Feb  9 16:55:41 1998  jari aalto  <jari.aalto@poboxes.com>
+
+       * gnus-art.el (gnus-article-time-format): Extended variable. 
+
+Mon Feb  9 16:27:59 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-art.el (article-make-date-line): Make 8601 Dates.
+       (article-date-iso8601): New command and keystroke.
+
+Sun Feb  8 21:19:15 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * message.el (message-ignored-mail-headers): Remove Xrefs.
+
+       * nndoc.el (nndoc-open-document-hook): New variable.
+
+Sun Feb  8 21:01:33 1998  Istvan Marko  <istvan@cmdmail.amd.com>
+
+       * gnus-agent.el (gnus-unplugged): Typo fix.
+
+Sun Feb  8 18:34:31 1998  Kurt Swanson  <kurt@dna.lth.se>
+
+       * gnus-score.el (gnus-score-thread-simplify): New variable.
+
+Sun Feb  8 18:31:35 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-uu.el (gnus-uu-post-encode-mime): Call mmencode with
+       correct params.
+
+Sun Feb  8 18:13:58 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Quassia Gnus v0.23 is released.
+
+Sun Feb  8 17:20:40 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-group.el (gnus-update-group-mark-positions): Bind `topic'. 
+
+       * message.el (message-expand-group): Added doc string.
+
+       * nntp.el (nntp-wait-for): Don't change limit until after
+       accepting output.
+
+Sun Feb  8 16:44:36 1998  Richard Hoskins  <rmh@interlaced.net>
+
+       * message.el (message-kill-to-signature): Don't kill the
+       delimiter. 
+
+Sun Feb  8 16:15:33 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-sum.el (gnus-summary-prepared-hook): New hook.
+       (gnus-summary-read-group-1): Use it.
+
+       * message.el (message-cite-original-without-signature): New
+       function. 
+       (message-cite-function): Added to custom.
+
+1998-01-13  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus/message.el (message-cite-original): Don't quote signature.
+
+Sun Feb  8 15:50:20 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-group.el (gnus-group-unsubscribe-group): Protest against
+       empty group names.
+
+Mon Feb  2 18:56:22 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-draft.el (gnus-draft-setup): Associate with drafts group.
+
+       * message.el (message-header-format-alist): Fill references.
+
+       * gnus-agent.el (gnus-category-read): Changed default.
+       (gnus-agent-handle-level): New variable.
+       (gnus-agent-fetch-session): Use it.
+
+       * gnus-art.el (article-strip-all-blank-lines): New command and
        keystroke. 
 
-       * mm-decode.el (mm-display-external): Translate slashes.
+Sun Feb  1 18:00:54 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * nnmail.el (nnmail-find-file): Restrict auto-mode-alist.
+       * gnus-msg.el (gnus-inews-reject-message): Removed function.
+       (gnus-sent-message-ids-file): Removed.
+       (gnus-sent-message-ids-length): Ditto.
 
-       * nndraft.el (nndraft-retrieve-headers): Don't copy so much. 
+       * gnus-xmas.el (gnus-xmas-summary-set-display-table): Ditto.
 
-       * mm-decode.el (mm-quote-arg): Quote spaces.
-       (mm-display-external): Quote args.
+       * gnus-sum.el (gnus-simplify-subject-fuzzy): Respect
+       `gnus-simplify-ignored-prefixes'.
+       (gnus-summary-set-display-table): Keep TAB.
 
-1998-09-24 22:27:55  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Thu Jan 15 22:47:38 1998   <Use-Author-Address-Header@[127.1]>
 
-       * mm-decode.el (mm-inlinable-part-p): New function.
+       * gnus-art.el (gnus-request-article-this-buffer): Put it into the
+       backlog. 
 
-1998-09-25 22:28:01  Simon Josefsson  <jas@pdc.kth.se>
+Mon Jan 12 23:30:59 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-util.el (mm-disable-multibyte): New function.
+       * gnus-sum.el (gnus-get-newsgroup-headers): Use the longest ID.
 
-Thu Sep 24 20:28:31 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * nnheader.el (nnheader-parse-head): Ditto.
 
-       * gnus.el: Pterodactyl Gnus v0.33 is released.
+Thu Jan  8 09:47:18 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-24 18:47:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-start.el (gnus-1): Use gnus-alive-p.
 
-       * gnus-art.el (gnus-insert-mime-button): Get buffer size.
+Tue Jan  6 11:53:09 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el (mm-display-external): Don't switch for externals. 
-       (mm-dissect-multipart): Don't include end-sep.
+       * gnus-art.el (gnus-article-prepare): Bind coding systems.
 
-       * mm-util.el (mm-get-coding-system-list): New function.
-       (mm-coding-system-list): New variable.
+Tue Jan  6 07:45:39 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-Thu Sep 24 02:08:10 1998  ZHU Shenghuo  <zsh@cs.rochester.edu>
+       * gnus.el: Quassia Gnus v0.22 is released.
 
-       * gnus-cus.el (gnus-group-parameters): Add charset as a parameter
+Tue Jan  6 07:32:02 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Thu Sep 24 02:05:48 1998  ZHU Shenghuo  <zsh@cs.rochester.edu>
+       * message.el (message-kill-to-signature): Don't use mark.
 
-       * gnus-cus.el (gnus-group-customize): Use variable as cons not as
-       group
+Tue Jan  6 07:30:46 1998  Russ Allbery  <rra@stanford.edu>
 
-Thu Sep 24 01:41:03 1998  ZHU Shenghuo  <zsh@cs.rochester.edu>
+       * message.el (message-kill-to-signature): New command and keystroke.
 
-       * base64.el (base64-run-command-on-region): External base64
-       decoder do not use coding system
+Tue Jan  6 06:39:29 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Thu Sep 24 01:39:44 1998  ZHU Shenghuo  <zsh@cs.rochester.edu>
+       * gnus-sum.el (gnus-summary-print-article): New defaults for
+       headers and stuff.
 
-       * mm-decode.el (mm-interactively-view-part): Typo.
+       * gnus-agent.el (gnus-agent-batch): New command.
 
-Thu Sep 24 01:37:30 1998  ZHU Shenghuo  <zsh@cs.rochester.edu>
+       * nnoo.el (nnoo-execute): Copy vars from parent into child.
+       (nnoo-parent-function): Ditto.
 
-       * mm-decode.el (mm-dissect-multipart): Display last part when the
-       article has no close-delimiter
+       * gnus-draft.el (gnus-draft-setup): Removed message.
 
-Thu Sep 24 01:28:54 1998  ZHU Shenghuo  <zsh@cs.rochester.edu>
+       * gnus-start.el (gnus-read-descriptions-file): Naked muleism.
 
-       * mm-decode.el (mm-dissect-buffer): Display parts which have no
-       content-type.
+Mon Jan  5 05:20:16 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Thu Sep 24 01:23:57 1998  ZHU Shenghuo  <zsh@cs.rochester.edu>
+       * nnml.el (nnml-generate-nov-databases-1): Fix lower bound on
+       empty groups.
 
-       * gnus-art.el (gnus-display-mime): Typo.
+Sun Jan  4 14:38:36 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-Thu Sep 24 02:29:57 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus.el: Quassia Gnus v0.21 is released.
 
-       * gnus.el: Pterodactyl Gnus v0.32 is released.
+Sun Jan  4 14:28:35 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1998-09-24 00:27:11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el: Quassia Gnus v0.20 is released.
 
-       * gnus-kill.el (gnus-batch-score): Protect against errors.
+1997-12-10  Per Abrahamsen  <abraham@dina.kvl.dk>
 
-       * gnus-art.el: Protect against broken headers.
+       * gnus/gnus-msg.el (gnus-inews-insert-mime-headers): Added
+       documentation. 
+       (gnus-inews-insert-mime-headers): Made it work with Emacs MULE.
+       (gnus-inews-insert-mime-headers): Added as option to
+       `message-header-hook'. 
 
-       * mm-decode.el (mm-display-external): Respect needsterm.
-       (mm-display-external): Create buffer for external commands. 
+1997-12-22  Per Abrahamsen  <abraham@dina.kvl.dk>
 
-1998-09-23 22:04:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus/gnus-art.el (gnus-button-alist): Assume msg-id after "in
+       message". 
 
-       * mailcap.el (mailcap-mime-info): Return the proper viewer.
+1997-12-22  Simon Josefsson  <jas@faun.nada.kth.se>
 
-       * mm-decode.el (mm-display-external): Use file name.
+       * nnmail.el (nnmail-get-new-mail): Make nnmail-tmp-directory
 
-1998-09-22  Markus Rost  <markus.rost@mathematik.uni-regensburg.de>
+1997-12-28  Per Abrahamsen  <abraham@dina.kvl.dk>
 
-       * gnus-util.el (gnus-output-to-rmail):  adjust to
-          `rmail-output-to-rmail-file'
+       * gnus/gnus-group.el (gnus-group-fetch-faq): Convert `.' in group
+       name to `/'.
 
-1998-09-23 20:07:00  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Jan  4 13:35:14 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-util.el (gnus-output-to-rmail): Reinstated function.
+       * nndraft.el (nndraft-request-associate-buffer): Open the damn
+       server first.  Sheesh.
 
-       * gnus-sum.el (gnus-select-newsgroup): Set global variables before
-       headers. 
+       * gnus-draft.el (gnus-draft-send): Bind message-send-hook to nil. 
 
-       * gnus-art.el (article-decode-charset): Fold case.
+       * gnus-sum.el (gnus-summary-catchup): Don't nix out downloadable. 
+       (gnus-summary-highlight): Highlight down/un as unread.
 
-1998-09-17 15:49:10  Simon Josefsson  <jas@pdc.kth.se>
+Sun Jan  4 13:27:31 1998  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
 
-        * mailcap.el (mailcap-save-binary-file): Goto point-min.
+       * gnus-start.el (gnus-strip-killed-list): Fix syntax.
 
-1998-09-23 19:48:52  Aaron M. Ucko  <amu@mit.edu>
+Sun Jan  4 13:18:04 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * nnmail.el (nnmail-check-duplication): Enter into duplicate list
-       after being stored.
+       * nnsoup.el (nnsoup-store-reply): Bind mail-header-separator to
+       "". 
 
-Tue Sep 15 16:15:16 1998  Kurt Swanson  <ksw@dna.lth.se>
+       * gnus-xmas.el (gnus-xmas-agent-server-menu-add): New.
 
-       * gnus-salt.el (gnus-pick-setup-message): Return from whence ye
-       come.
+       * nnoo.el (nnoo-change-server): Get the right values.
 
-1998-09-23 19:42:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-01-04  Aki Vehtari  <Aki.Vehtari@hut.fi>
 
-       * gnus-xmas.el (wid-edit): Required.
+       * gnus-art.el (gnus-signature-limit): Add default values for
+       choices suggested by Per Abrahamsen <abraham@dina.kvl.dk>.
+       (gnus-prompt-before-saving): Add :value t for sexp tag.
+       (gnus-split-methods): Add default values for choices.
 
-       * gnus-ems.el (gnus-widget-button-keymap): New variable.
+       * gnus-score.el (gnus-home-score-file): Add non-nil default for
+       function.
+       (gnus-home-adapt-file): Ditto.
 
-Sun Sep 20 00:27:55 1998  ZHU Shenghuo  <zsh@cs.rochester.edu>
+       * gnus-sum.el (gnus-move-split-methods): Add default values for
+       choices.
 
-       * gnus-art.el (gnus-mime-inline-part): remove part if necessary
+       * nnmail.el (nnmail-list-identifiers): Add default values for
+       choices suggested by Per Abrahamsen <abraham@dina.kvl.dk>.
 
-1998-09-23 19:30:52  Matt Armstrong  <matta@geoworks.com>
+Sun Jan  4 11:31:42 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-art.el (article-decode-charset): Narrow to the correct
-       region. 
+       * gnus.el: Quassia Gnus v0.19 is released.
 
-       * mm-bodies.el: Fix autoload.
+Sun Jan  4 10:42:53 1998  Felix Lee  <flee@teleport.com>
 
-1998-09-22 18:35:12  Lee Willis  <lee@gbdirect.co.uk>
+       * nntp.el (nntp-open-rlogin): Use a list of parameters.
 
-       * gnus-art.el (gnus-mime-button-line-format): Doc fix.
+Sun Jan  4 10:25:05 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-22 14:53:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-agent.el (gnus-agent-fetch-groups): New command.
 
-       * rfc2047.el (rfc2047-decode): Use rfc2047-default-charset. 
+       * gnus-sum.el (gnus-summary-print-article): Changed order of
+       parameters.
 
-1998-09-19 13:58:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Jan  4 10:24:07 1998  Michael R. Cook  <mcook@cognex.com>
 
-       * gnus-art.el (gnus-insert-mime-button): Specify keymap.
-       (gnus-article-add-button): Ditto.
+       * gnus-sum.el (gnus-summary-print-article): Use process/prefix.
 
-       * gnus-sum.el (gnus-summary-insert-pseudos): Use mm.
+Sun Jan  4 05:29:38 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-article-prepare-display): Make article mode. 
-       (gnus-article-prepare-display): Bind url-standalone-mode.
+       * gnus-uu.el: Changed spurious defconsts to defvars.
 
-       * mm-decode.el (mm-remove-part): Also delete directory.
-       (mm-display-external): Create a private sub-dir.
+       * nnmail.el (nnmail-get-spool-files): Quote group name.
 
-       * mailcap.el (mailcap-binary-suffixes): New variable.
-       (mailcap-command-p): Use it.
+       * gnus-agent.el (gnus-agent-fetch-group-1): Fetch ticked articles.
+       (gnus-agent-fetch-group-1): Never mind.
 
-1998-09-16 10:38:21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Dec 20 22:33:17 1997  Pete Ware  <ware@cis.ohio-state.edu>
 
-       * nnmbox.el (nnmbox-request-group): Change server.
-       (nnmbox-possibly-change-newsgroup): Enable multibyte.
+       * message.el (message-rename-buffer): Check for nil dirs.
 
-       * message.el (message-encode-message-body): Don't stomp MIME
-       headers. 
+Fri Dec 19 21:45:59 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-sum.el (gnus-summary-edit-article-done): Don't encode
-       unless useful.
-       (gnus-summary-exit): Check for a live article buffer.
-       (gnus-summary-exit-no-update): Ditto.
+       * nnml.el (nnml-request-create-group): Check for files.
 
-       * gnus-int.el (gnus-request-replace-article): Accept no-encode
-       param.
+Fri Dec 19 21:39:43 1997  Hrvoje Niksic  <hniksic@srce.hr>
 
-       * gnus-sum.el (gnus-article-decoded-p): New variable.
+       * message.el (message-mode): Fixed font-lock.
 
-       * mm-decode.el (mm-display-external): Use no-conv.
+Fri Dec 19 21:26:08 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * rfc2047.el (rfc2047-q-encode-region): Bound properly. 
-       (rfc2047-charset-encoding-alist): Use B encoding for koi8-r.
+       * gnus-cache.el (gnus-cache-read-active): Check for empty files. 
 
-       * gnus-art.el (gnus-article-mode-map): Bind button2 to
-       mouse-click. 
+Sun Dec 14 11:46:50 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-15 14:38:02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-uu.el (gnus-uu-save-article): Quote all lines beginning
+       with a dash.
 
-       * gnus-agent.el (gnus-agent-expire): Protect against nil infos.
+1997-12-10  SL Baur  <steve@altair.xemacs.org>
 
-Mon Sep 14 18:55:38 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-start.el (gnus-read-descriptions-file): Really bind and gag 
+       Mule.
 
-       * gnus.el: Pterodactyl Gnus v0.31 is released.
+Fri Dec  5 15:15:05 1997  Danny Siu  <dsiu@adobe.com>
 
-1998-09-14 15:12:59  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nndoc.el (nndoc-babyl-body-begin): quote the regexp for the
+       string "*** EOOH ***" properly.
+       (nndoc-babyl-head-begin): Same as above.
 
-       * gnus-sum.el (gnus-summary-exit): Destroy MIME.
+Sun Dec 14 11:11:22 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el (mm-display-part): Accept no-default.
+       * gnus-uu.el (gnus-uu-pre-uudecode-hook): New hook.
 
-       * gnus-art.el (gnus-insert-mime-button): buffer-size doesn't take
-       a parameter.
+       * gnus-sum.el (gnus-summary-read-group-1): Set mode line after
+       configuring. 
 
-       * gnus-sum.el (gnus-summary-insert-line): Don't exclude faces.
-       (gnus-summary-prepare-threads): Ditto.
+Sun Dec 14 11:03:26 1997  Wes Hardaker  <wjhardaker@ucdavis.edu>
 
-       * gnus.el (gnus-article-mode-map): Make sparse keymap.
+       * gnus-score.el (gnus-adaptive-word-minimum): New variable.
+       (gnus-score-adaptive): Use it.
 
-       * gnus-art.el (gnus-mime-button-line-format-alist): Allow a %d spec.
-       (gnus-mime-button-line-format): Doc fix.
-       (gnus-insert-mime-button): Use it.
-       (gnus-article-add-button): Use widget-convert-button.
+Sun Dec 14 09:19:18 1997  Roland B. Roberts  <roberts@panix.com>
 
-       * gnus.el ((featurep 'gnus-xmas)): Defalias gnus-decode-rfc1522 to
-       ignore.
+       * gnus-group.el: Fixed hardcoded levels.
 
-       * mm-decode.el (mm-alternative-precedence): Ditto.
+Sat Dec  6 17:40:33 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1998-09-14 15:12:49  Conrad Sauerwald  <conrad@stack.nl>
+       * gnus.el: Quassia Gnus v0.18 is released.
 
-       * mm-decode.el (mm-user-automatic-display): Use enriched.
+Sat Dec  6 17:27:04 1997  Kim-Minh Kaplan  <KimMinh.Kaplan@Utopia.EUnet.fr>
 
-1998-09-14 15:09:12  Paul Fisher  <rao@gnu.org>
+       * gnus-picon.el (gnus-picons-remove): Race condition.
 
-       * mm-decode.el (mm-dissect-multipart): Have the part start on the
-       right place.
+Sat Dec  6 17:23:26 1997  Christian von Roques  <roques@scalar.pond.sub.org>
 
-1998-09-14 14:33:34  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-start.el (gnus-read-descriptions-file): Fix
+       enable-multibyte-characters. 
 
-       * gnus-msg.el (gnus-inews-add-send-actions): Mark silently.
+1997-12-05  Dave Love  <d.love@dl.ac.uk>
 
-       * gnus-art.el (article-update-date-lapsed): Only update header if
-       buffer is dispalyed in frame.
-       (gnus-article-prepare-display): New function.
-       (gnus-article-prepare): Use it.
+       * gnus-nocem.el (gnus-nocem-message-wanted-p): Fix paren typpo.
+       (gnus-nocem-issuers): Allow sexp alternative in :type for alists.
 
-1998-09-14 08:16:43  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1997-12-05  Dave Love  <d.love@dl.ac.uk>
 
-       * gnus-art.el (gnus-mime-inline-part): New command and keystroke.
+       * gnus-art.el (gnus-visible-headers): Add X-sent:.
 
-       * mm-view.el (mm-insert-inline): New function.
+Sat Dec  6 17:16:28 1997  Lars Balker Rasmussen  <lbr@mjolner.dk>
 
-       * mm-decode.el (mm-pipe-part): Bugged.
+       * gnus-art.el (article-make-date-line): Don't add extra newlines. 
 
-       * gnus-agent.el (gnus-agent-send-mail): Don't encode.
+1997-11-27  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
 
-       * mm-bodies.el (mm-encode-body): Move over the body.
+       * nnmail.el (nnmail-file-coding-system): Use `raw-text' in
+       default.
 
-       * nnmbox.el (nnmbox-read-mbox): Enable multibyte.
+       * nnheader.el (nnheader-file-coding-system): Use `raw-text' in
+       default.
 
-       * rfc2047.el (rfc2047-q-encode-region): Would bug out.
+Sat Dec  6 17:04:40 1997  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
 
-1998-09-13  François Pinard  <pinard@iro.umontreal.ca>
+       * nnml.el (nnml-parse-head): Out-of-bounds fix.
 
-       * nndoc.el: Make nndoc-dissection-alist simpler for MIME, adjust all
-          related functions.  Handle message/rfc822 parts.  Display subject on
-          multipart summary lines.  Display name on sub-parts when available.
+       * nndraft.el (nndraft-request-associate-buffer): Get proper file
+       name. 
 
-1998-09-14 07:36:38  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
+Sat Dec  6 15:35:37 1997  Gary D. Foster  <Gary.Foster@Corp.Sun.COM>
 
-       * mailcap.el (mailcap-command-p): New version.
+       * gnus-group.el: Added backspace.
 
-1998-09-13  Mike McEwan  <mike@lotusland.demon.co.uk>
+Thu Nov 27 19:56:59 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-agent.el (gnus-agent-expire): Stop expiry barfing on killed
-       groups.
+       * gnus-agent.el (gnus-summary-set-agent-mark): Remove marks
+       properly. 
 
-1998-09-13 18:34:06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1997-11-27  Christoph Wedler  <wedler@fmi.uni-passau.de>
 
-       * message.el (message-make-date): Remove weekday name.
+       * smiley.el (smiley-buffer): Provide `help-echo'.
 
-       * mm-decode.el (mm-dissect-buffer): Protect against broken
-       headers.
+Thu Nov 27 17:33:45 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mailcap.el (mailcap-command-in-path-p): New function.
-       (mailcap-command-p): Renamed.
+       * gnus-util.el (gnus-output-to-rmail): Always save buffer.
 
-1998-09-13 17:58:47  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
+       * nntp.el (nntp-close-server): Don't sleep for me, Argentina.
+       (nntp-request-close): You neither.
 
-       * rfc2047.el (eval): Autoload.
+1997-11-19  Per Abrahamsen  <abraham@dina.kvl.dk>
 
-1998-09-13 12:22:40  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-header-lines): New widget.
+       (message-default-headers): Use it.
+       (message-default-mail-headers): Use it.
+       (message-default-news-headers): Use it.
 
-       * gnus-sum.el (gnus-decode-encoded-word-functions): New variable.
-       (gnus-multi-decode-encoded-word-string): New function.
-       (gnus-encoded-word-method-alist): New variable.
-       (gnus-decode-encoded-word-functions): Removed.
+1997-11-24  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
 
-1998-09-13  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-start.el (gnus-read-descriptions-file): Add missing quote.
 
-       * gnus-int.el (gnus-request-replace-article): Replace
-       message-narrow-to-headers with message-narrow-to-head
+Wed Nov 26 18:19:29 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-13 12:05:41  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnweb.el (nnweb-type-definition): Rescued dejanewsold.
 
-       * drums.el (drums-quote-string): Reversed match.
+       * gnus-mh.el (gnus-summary-save-in-folder): Reverted to old
+       version. 
 
-       * message.el (message-make-date): Use weekday name.
+       * gnus-sum.el (gnus-kill-or-deaden-summary): Save excursion.
 
-Sun Sep 11 10:27:15 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus.el: Only require gnus-load in Emacsen 19.
 
-       * gnus.el: Pterodactyl Gnus v0.30 is released.
+       * gnus-start.el (gnus-setup-news): Always push archive server.
 
-1998-09-13 08:00:41  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-read-header): Would bug out on sparse
+       articles. 
 
-       * gnus-art.el (article-decode-encoded-words): Use it.
-       (gnus-decode-header-function): New variable.
+Wed Nov 26 17:50:41 1997  Kurt Swanson  <kurt@dna.lth.se>
 
-       * gnus-sum.el (gnus-nov-parse-line): Use it.
-       (gnus-decode-encoded-word-function): New variable.
+       * gnus-ems.el (gnus-mule-cite-add-face): Work.
 
-       * gnus-msg.el (gnus-copy-article-buffer): Decode the right
-       buffer.
+Wed Nov 26 17:40:57 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-art.el (gnus-insert-mime-button): Use widget.
-       (gnus-widget-press-button): New function.
-       (gnus-article-prev-button): Removed.
-       (gnus-article-next-button): Ditto.
-       (gnus-article-add-button): Ditto.
+       * gnus.el: Quassia Gnus v0.17 is released.
 
-       * gnus.el (gnus-article-mode-map): Inherit from widget.
-       (gnus-article-mode-map): No, don't.
+Wed Nov 26 16:04:25 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el (mm-dissect-buffer): Store Content-ID things.
-       (mm-content-id-alist): New variable.
-       (mm-get-content-id): New function.
+       * gnus-sum.el (gnus-summary-move-article): Don't work on canceled
+       articles. 
 
-       * gnus-art.el (gnus-request-article-this-buffer): Only decode
-       articles if we are fetching to the article buffer.
+       * gnus-start.el (gnus-subscribe-hierarchical-interactive): Use
+       `read-char-exclusive'. 
 
-1998-09-13 07:58:59  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-sum.el (gnus-summary-mode): Localize
+       gnus-summary-dummy-line-format. 
 
-       * gnus-sum.el (gnus-summary-move-article): Don't decode accepting
-       articles.
+       * nnml.el (nnml-open-nov): Check that the file exists before
+       inserting it. 
+
+       * gnus-art.el (article-date-ut): Insert a newline if needed.
+
+       * gnus-score.el (gnus-score-edit-current-scores): Protect against
+       nil score files.
+
+       * gnus-start.el (gnus-newsrc-parse-options): Be more correct --
+       match only hierarchies.
+       (gnus-gnus-to-quick-newsrc-format): Changed warning.
+
+Wed Nov 26 15:47:40 1997  Greg Klanderman  <greg@alphatech.com>
+
+       * messagexmas.el (message-xmas-maybe-fontify): New definition.
+
+Wed Nov 26 15:43:53 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-13 07:23:28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-start.el (gnus-setup-news): Protect against nil
+       gnus-message-archive-method. 
 
-       * mm-util.el (mm-mime-charset): Try to use safe-charsets.
-       (mm-default-mime-charset): New variable.
+1997-11-26  Christoph Wedler  <wedler@fmi.uni-passau.de>
 
-       * rfc2047.el (rfc2047-dissect-region): Dissect using tspecials.
+       * gnus-art.el (gnus-article-edit-done): Update headers "Lines:",
+       "Content-Length:" and "X-Content-Length:" when present.
 
-       * drums.el (drums-quote-string): Reversed test.
+Wed Nov 26 15:08:17 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-12 14:29:21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnmail.el (nnmail-process-unix-mail-format): Pop to the right
+       buffer on error.
+       (nnmail-process-mmdf-mail-format): Ditto.
 
-       * mm-util.el (mm-insert-rfc822-headers): Possibly not quote
-       string.
+Wed Nov 26 13:54:04 1997  Joe Reiss  <jreiss@sprynet.com>
 
-       * drums.el (drums-quote-string): New function.
+       * gnus-art.el (gnus-summary-save-in-rmail): Return the name of the
+       file.
 
-       * rfc2047.el (rfc2047-encode-message-header): Goto point-min.
-       (rfc2047-b-encode-region): Chop lines.
-       (rfc2047-q-encode-region): Ditto.
+Wed Nov 26 13:50:01 1997  Alastair Burt <alastair.burt@dfki.de>
 
-Sat Sep 12 13:27:15 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * smiley.el: Balloon help, etc.
 
-       * gnus.el: Pterodactyl Gnus v0.29 is released.
+Wed Nov 26 13:45:35 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-12 12:46:30  Istvan Marko  <imarko@pacificnet.net>
+       * gnus-util.el (gnus-kill-all-overlays): Remove check for XEmacs. 
 
-       * mm-decode.el (mm-save-part): Message right.
+1997-09-30  Dave Love  <d.love@dl.ac.uk>
 
-1998-09-12 11:30:01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el: Don't require rmail.
 
-       * drums.el (drums-parse-address): Returned a list instead of a
-       string.
-       (drums-remove-whitespace): Skip comments.
-       (drums-parse-addresses): Didn't work.
+Wed Nov 26 13:37:50 1997  Kurt Swanson  <kurt@dna.lth.se>
 
-Sat Sep 12 09:17:30 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-group.el (gnus-group-setup-buffer): set-buffer.
 
-       * gnus.el: Pterodactyl Gnus v0.28 is released.
+Wed Nov 26 13:31:54 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-12 04:57:25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-score.el (gnus-score-load-file): Don't create empty score
+       files when doing decays.
 
-       * gnus-art.el (gnus-mime-button-map): Use the article keymap as a
-       starting point.
-       (article-decode-encoded-words): Rename.
+Wed Nov 26 13:28:04 1997  Renaud Rioboo  <rioboo@calfor.lip6.fr>
 
-       * message.el (message-narrow-to-headers-or-head): New function.
+       * nnmail.el (nnmail-move-inbox): Only bind default-directory when
+       calling external function.
 
-       * gnus-int.el (gnus-request-accept-article): Narrow to the right
-       region.
+Wed Nov 26 13:03:45 1997  IWAMURO Motonori  <iwa@mmp.fujitsu.co.jp>
 
-       * message.el (message-send-news): Encode body after checking
-       syntax.
+       * gnus-kill.el (gnus-batch-score): Newsrc thinko.
 
-       * gnus-art.el (gnus-mime-button-line-format): Allow descriptions.
+Wed Nov 26 10:31:17 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el (mm-save-part): Use Content-Disposition filename.
+       * nnheader.el (nnheader-parse-head): Would break on Message-ID's
+       that spanned several lines.
 
-       * gnus-art.el (gnus-display-mime): Respect disposition.
+       * gnus-util.el (gnus-date-iso8601): Didn't pick out the date
+       header. 
 
-       * mm-decode.el (mm-preferred-alternative): Respect disposition.
+       * gnus-demon.el (gnus-demon-scan-mail): Clean inboxes.
 
-       * gnus-art.el (article-strip-multiple-blank-lines): Don't delete
-       text with annotations.
+1997-11-25  Christoph Wedler  <wedler@fmi.uni-passau.de>
 
-       * message.el (message-make-date): Fix sign for negative time
-       zones.
+       * gnus-picon.el (gnus-picons-x-face-sentinel): Would bug out in
+       headers with two X-Face lines.
 
-       * mm-view.el (mm-inline-image): Insert a space at the end of the
-       image.
+Wed Nov 26 08:54:26 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mail-parse.el: New file.
+       * gnus-sum.el (gnus-summary-update-info): Would use wrong group
+       name. 
 
-       * rfc2231.el: New file.
+1997-11-26  Hrvoje Niksic  <hniksic@srce.hr>
 
-       * drums.el (drums-content-type-get): Removed.
-       (drums-parse-content-type): Ditto.
+       * gnus-spec.el (gnus-compile): Avoid multiple `c*addr's.
+       (gnus-compile): Require `bytecomp'.
 
-       * mailcap.el (mailcap-mime-data): Use symbols instead of strings.
+1997-11-25  Hrvoje Niksic  <hniksic@srce.hr>
 
-Fri Sep 11 18:23:34 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-util.el (gnus-prin1): Bind `print-readably' to t.
 
-       * gnus.el: Pterodactyl Gnus v0.27 is released.
+       * gnus-xmas.el (gnus-xmas-kill-all-overlays): New function.
+       (gnus-xmas-define): Use it.
 
-1998-09-11 12:42:07  Lars Magne Ingebrigtsen- <larsi@gnus.org>
+       * gnus-art.el (gnus-stop-date-timer): Use `nnheader-cancel-timer'.
 
-       * mm-decode.el (mm-alternative-precedence): New variable.
-       (mm-preferred-alternative): New function.
+       * message.el (message-header-lines): Specify format.
 
-       * gnus-art.el (gnus-mime-copy-part): New command.
+       * gnus-xmas.el (gnus-xmas-move-overlay): Use BUFFER.
+       (gnus-byte-code): Use `indirect-function'.
 
-       * mm-decode.el (mm-get-part): New function.
+       * gnus-cite.el (gnus-cite-add-face): Would assign free variable.
 
-       * mm-view.el: New file.
+Wed Nov 26 08:31:28 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el (mm-dissect-buffer): Downcase cte.
-       (mm-display-part): Default to mailcap-save-binary-file.
+       * gnus-art.el (gnus-stop-date-timer): Cancel instead of delete. 
+       (gnus-start-date-timer): Use the numerical prefix.
 
-Fri Sep 11 12:32:50 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Tue Nov 25 20:03:34 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.26 is released.
+       * gnus-draft.el (gnus-group-send-drafts): Activate group first.
 
-1998-09-11 08:25:33  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Tue Nov 25 19:57:55 1997  Dan Christensen  <jdc@chow.mat.jhu.edu>
 
-       * mm-decode.el (mm-interactively-view-part): New function.
+       * gnus-group.el (gnus-group-process-prefix): Skip topics.
 
-       * gnus-art.el (gnus-mime-view-part): New command.
+Tue Nov 25 19:54:00 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el (mm-last-shell-command): New variable.
+       * gnus-move.el (gnus-move-group-to-server): Protect agains
+       nil-ness. 
 
-       * mailcap.el (mailcap-mime-info): Allow returning all matches.
+Tue Nov 25 19:03:38 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * mm-decode.el (mm-save-part): New function.
+       * gnus.el: Quassia Gnus v0.16 is released.
 
-       * gnus-art.el (article-decode-charset): Protect against buggy
-       content-types.
-       (gnus-mime-pipe-part): New command.
-       (gnus-mime-save-part): New command.
-       (gnus-mime-button-map): New keymap.
-       (gnus-mime-button-line-format): New variable.
-       (gnus-insert-mime-button): New function.
-       (gnus-display-mime): Use it.
+Tue Nov 25 16:05:01 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-util.el (gnus-dd-mmm): Removed length spec.
+       * gnus-sum.el (gnus-read-header): Remove thread entry before
+       rebuilding. 
 
-       * mm-decode.el (mm-inline-text): Decode charsets.
+       * gnus-cite.el (gnus-cite-add-face): Keep track of all overlays.
 
-       * gnus-art.el (gnus-article-save): Comment fix.
+       * gnus-art.el (article-update-date-lapsed): New function.
+       (gnus-start-date-timer): New command.
+       (article-date-ut): Put the face in the right place.
+       (article-date-ut): Would move around.
 
-       * gnus-int.el (gnus-start-news-server): When in batch, don't
-       prompt.
+       * gnus-group.el (gnus-group-read-ephemeral-group): Accept server
+       names. 
 
-       * gnus-cache.el (gnus-cache-possibly-enter-article): Don't
-       decode.
+       * gnus-srvr.el (gnus-browse-foreign-server): Use proper server
+       names. 
 
-       * mm-decode.el (mm-inline-media-tests): Add audio.
-       (mm-inline-audio): New function.
+       * gnus.el (gnus-group-prefixed-name): Give the right result for
+       native groups.
 
-1998-09-11 08:19:22  Katsumi Yamaoka  <yamaoka@ga.sony.co.jp>
+       * nnheader.el (nnheader-directory-files): New function.
 
-       * gnus-art.el (article-make-date-line): Didn't work.
+       * nnmh.el (nnmh-request-list-1): Reversed check.
 
-       * parse-time.el (parse-time-string): One too many nils.
+       * nnfolder.el (nnfolder-delete-mail): Would skip backwards one
+       line too much.
 
-Fri Sep 11 08:09:40 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Tue Nov 25 14:44:02 1997  SeokChan LEE  <chan@xfer.kren.nm.kr>
 
-       * gnus.el: Pterodactyl Gnus v0.25 is released.
+       * message.el (message-ignored-supersedes-headers): Typo.
 
-1998-09-11 07:38:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Mon Nov 24 18:46:37 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-art.el (article-remove-trailing-blank-lines): Don't remove
-       annotations.
+       * gnus.el: Quassia Gnus v0.15 is released.
 
-       * gnus.el ((featurep 'gnus-xmas)): New
-       'gnus-annotation-in-region-p alias.
+Mon Nov 24 18:07:21 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-10 06:20:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-ems.el: Also check major version names.
 
-       * mm-util.el (mm-with-unibyte-buffer): New function.
+1997-10-05  SL Baur  <steve@altair.xemacs.org>
 
-       * gnus-uu.el (gnus-quote-arg-for-sh-or-csh): Renamed.
+       * message.el (require 'rmail): Put guard around.
+       * nnbabyl.el (require 'rmail): Ditto.
 
-       * mm-decode.el (mm-inline-media-tests): New variable.
+Mon Nov 24 17:36:00 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-sum.el (gnus-summary-exit): Destroy handles.
+       * message.el (message-reply): Respect Mail-Copies-To even when
+       `to-address'. 
 
-       * gnus-art.el (gnus-article-mime-handles): New variable.
+Mon Nov 24 17:32:47 1997  Thor Kristoffersen  <thor@unik.no>
 
-       * drums.el (drums-narrow-to-header): New function.
+       * nntp.el (nntp-request-close): Sleep one second.
 
-       * gnus-art.el (article-decode-charset): Use it.
+Mon Nov 24 16:18:19 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * drums.el (drums-content-type-get): New function.
+       * gnus-sum.el (gnus-summary-read-group-1): Update marks when not
+       entering group.
 
-       * mm-util.el (mm-content-type-charset): Removed.
+       * gnus-start.el (gnus-setup-news): Get correct value of archive
+       server. 
 
-       * drums.el (drums-syntax-table): @ is word.
-       (drums-parse-content-type): New function.
+Wed Oct  8 20:29:35 1997  Robert Bihlmeyer  <robbe@orcus.priv.at>
 
-       * parse-time.el (parse-time-rules): Parse "Wed, 29 Apr 98 0:26:01
-       EDT" times.
+       * message.el (message-make-organization): Don't let the
+       environment variable override a user-set organization.
 
-       * gnus-util.el (gnus-date-get-time): Use safe date.
+Mon Nov 24 14:09:00 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-sum.el (gnus-show-mime): Removed.
-       (gnus-summary-toggle-mime): Removed.
+       * nnml.el (nnml-open-nov): Don't use find-file.
 
-       * gnus-art.el (gnus-strict-mime): Removed.
-       (gnus-article-prepare): Don't do MIME.
-       (gnus-decode-encoded-word-method): Removed.
-       (gnus-show-mime-method): Removed.
+       * gnus-sum.el (gnus-last-newsgroup-variables-set): New variable.
+       (gnus-set-global-variables): Don't do to much; gets run off of
+       pre-command-hook. 
+       Got rid of gnus-set-global-variables throughout.
+       (gnus-summary-exit): Update adaptive scoring here.
+       (gnus-summary-isearch-article): Widen.
 
-Thu Sep 10 04:03:29 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * nnml.el (nnml-parse-head): Work in empty buffers.
 
-       * gnus.el: Pterodactyl Gnus v0.24 is released.
+1997-10-14  Hrvoje Niksic  <hniksic@srce.hr>
 
-1998-09-10 01:58:24  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-xmas.el (gnus-xmas-group-startup-message): Check for image
+       formats correctly.
+       (gnus-xmas-modeline-glyph): Ditto.
 
-       * gnus-sum.el (gnus-summary-show-article): Don't decode chars if
-       PREFIX.
+Mon Nov 24 13:58:12 1997  Hrvoje Niksic  <hniksic@srce.hr>
 
-       * parse-time.el (parse-time-rules): Accept times that look like
-       "h:mm".
+       * gnus-spec.el (gnus-compile): Work under XEmacs.
 
-       * message.el (message-make-date): Use zone properly.
+Mon Nov 24 07:15:45 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Autoload gnus-batch.
+       * nnoo.el (nnoo-change-server): Push the right parent packend onto
+       the alist.
 
-       * gnus-art.el (article-de-quoted-unreadable): Do not do
-       gnus-article-decode-rfc1522.
+Sun Nov 23 16:21:41 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-msg.el (gnus-inews-do-gcc): Use it.
+       * gnus.el: Quassia Gnus v0.14 is released.
 
-       * gnus-int.el (gnus-request-accept-article): Accept a no-encode
-       param.
+Sun Nov 23 14:04:07 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.el (message-encode-message-body): Check for us-ascii.
+       * gnus-start.el (gnus-read-descriptions-file): Make sure Mule is
+       bound.  And gagged.
 
-       * gnus-msg.el (gnus-extended-version): Move Gnus version comments
-       to the left.
+       * message.el (message-send-mail-with-mh): Use
+       `mh-new-draft-name'. 
 
-1998-09-09 13:18:13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnfolder.el (nnfolder-read-folder): Save new buffers.
 
-       * gnus-art.el (article-decode-charset): Rename.
+       * gnus-sum.el (gnus-summary-make-menu-bar): Removed "write to
+       file". 
 
-Wed Sep  9 12:25:48 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-util.el (gnus-byte-code): Use indirect-function.
 
-       * gnus.el: Pterodactyl Gnus v0.23 is released.
+       * nntp.el (nntp-open-telnet): Also accept 201.
 
-1998-09-09 12:14:47  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-summary-reparent-thread): Update thread.
 
-       * gnus-util.el (gnus-parent-id): Ditto.
-       (gnus-put-text-property-excluding-newlines): Ditto.
+       * gnus-score.el (gnus-all-score-files): Don't do anything unless
+       GROUP. 
 
-       * gnus-sum.el (gnus-dependencies-add-header): Make into subst.
+       * nnmail.el (nnmail-split-it): Save-excursion.
+       (nnmail-group-pathname): Translate file chars.
 
-1998-09-08  Karl Kleinpaste  <karl@jprc.com>
+Sun Nov 23 13:41:10 1997  Gunnar Horrigmo  <horrigmo@online.no>
 
-       * message.el (message-generate-headers): Generate User-Agent
-       instead of X-Mailer & X-Newsreader.
+       * gnus-sum.el (gnus-summary-exit): Don't skip if group
+       disappeared. 
 
-       * gnus-msg.el (gnus-extended-version): Reformat for USEFOR
-       User-Agent header format.
+Sun Nov 23 13:32:55 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Tue Sep  8 22:38:27 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * nnfolder.el (nnfolder-normalize-buffer): New function.
+       (nnfolder-save-mail): Use it.
+       (nnfolder-request-replace-article): Ditto.
 
-       * gnus.el: Pterodactyl Gnus v0.22 is released.
+1997-11-19  Per Abrahamsen  <abraham@dina.kvl.dk>
 
-1998-09-08 22:36:54  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-header-lines): New widget.
+       (message-default-headers): Use it.
+       (message-default-mail-headers): Use it.
+       (message-default-news-headers): Use it.
 
-       * mm-util.el (mm-multibyte-p): Typo.
+Sun Nov 23 12:44:38 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Tue Sep  8 22:25:53 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-win.el (gnus-remove-some-windows): Also delete dead summary
+       windows.
 
-       * gnus.el: Pterodactyl Gnus v0.21 is released.
+       * gnus-score.el (gnus-score-adaptive): Check whether functions are
+       bound.
 
-1998-09-08  Hrvoje Niksic  <hniksic@srce.hr>
+Sun Nov 23 12:15:00 1997  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
 
-       * gnus-art.el (article-treat-dumbquotes): Handle \224 correctly.
+       * gnus-sum.el (gnus-summary-limit-include-thread): Interactive
+       fix. 
 
-1998-09-08 22:18:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Nov 23 07:06:58 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-util.el (mm-multibyte-p): New function.
+       * gnus-sum.el (gnus-summary-reparent-thread): Insert Message-ID in
+       proper place.
 
-Tue Sep  8 21:43:03 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Sat Nov 22 18:30:33 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.20 is released.
+       * gnus-cus.el (gnus-group-parameters): Add visible.
 
-1998-09-08 11:40:45  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Nov 22 18:19:39 1997  Kim-Minh Kaplan  <kkaplan@lpthe.jussieu.fr>
 
-       * rfc2047.el (rfc2047-decode-region): Only decode when in
-       multibyte.
+       * message.el (message-setup): Add a newline, if necessary.
 
-       * nnheader.el (nnheader-pathname-coding-system): Changed to binary.
+Sat Nov 22 18:04:34 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-int.el (gnus-request-replace-article): Encode.
-       (gnus-request-accept-article): Encode.
+       * gnus-mh.el (gnus-summary-save-in-folder): Fix for default.
 
-       * gnus-art.el (gnus-request-article-this-buffer): Decode charsets
-       here.
+Sat Nov 22 18:01:26 1997  Didier Verna  <verna@inf.enst.fr>
 
-       * gnus.el (gnus-article-display-hook): Take the charset functions
-       out.
+       * gnus-sum.el (gnus-summary-remove-bookmark): Interactive spec. 
 
-       * time-date.el (safe-date-to-time): New function.
+Mon Nov 17 23:50:51 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-util.el (gnus-dd-mmm): Protect against bogus dates.
+       * gnus-art.el (article-display-x-face): Fold case.
 
-Tue Sep  8 07:09:28 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Thu Nov 13 22:57:23 1997  Kenichi Handa  <handa@etl.go.jp>
 
-       * gnus.el: Pterodactyl Gnus v0.19 is released.
+       * gnus/gnus-start.el (gnus-read-descriptions-file): Decode
+       description if necessary.
 
-1998-09-08 04:51:39  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus/nntp.el (nntp-coding-system-for-read): Set default value to
+       binary.
+       (nntp-coding-system-for-write): Likewise.
 
-       * base64.el (base64-encode-region): Accept no-line-break.
+Thu Nov 13 22:30:19 1997  seokchan lee  <chan@xfer.kren.nm.kr>
 
-       * mm-util.el (mm-mime-charset): New function.
+       * message.el (message-ignored-supersedes-headers): Ignore more
+       headers. 
 
-       * gnus-draft.el (gnus-draft-edit-message): Delete article.
+Thu Nov 13 22:28:13 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Tue Sep  8 04:29:23 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * message.el (message-separator-face): Lightened up.
+       (message-header-other-face): Ditto.
 
-       * gnus.el: Pterodactyl Gnus v0.18 is released.
+Thu Nov 13 22:22:11 1997  jari aalto  <jari.aalto@poboxes.com>
 
-1998-09-08 02:21:36  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnmail.el (nnmail-process-mmdf-mail-format): Pop to buffer.
 
-       * message.el (message-send-and-exit): Return t on success.
-       (message-make-date): Make a proper time zone.
+Thu Nov 13 22:09:39 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-draft.el (gnus-draft-send): Only remove article if the
-       sending is successful.
+       * gnus-start.el (gnus-start-draft-setup): Always create group.
 
-       * drums.el (drums-get-comment): Return the last comment.
-       (drums-parse-address): Parse old-style From headers.
+       * gnus-agent.el (gnus-agent-fetch-headers): Translate file chars.
 
-1998-09-07  SL Baur  <steve@altair.xemacs.org>
+Thu Nov  6 20:43:05 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-sum.el (gnus-data-compute-positions): Move below
-       `gnus-save-hidden-threads' so the former is correctly detected as
-       a macro.
+       * gnus.el: Quassia Gnus v0.13 is released.
 
-1998-09-06  Dave Love  <fx@gnu.org>
+Thu Nov  6 20:30:14 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus/nnweb.el (require): Wrap requirement of w3 and url in
-       ignore-errors too, eval'd when compile.  Require w3 stuff at load
-       time for nicer failure if it's not available.
+       * nnlistserv.el: New backend.
 
-1998-09-08 00:38:39  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Thu Nov  6 01:53:51 1997  Stefan Waldherr  <swa@cs.cmu.edu>
 
-       * time-date.el (time-to-seconds): Renamed.
+       * nnweb.el (nnweb-dejanewsold-search): New function.
 
-       * parse-time.el (parse-time-string): Downcase before handling.
-       (parse-time-rules): Times without seconds have 0 seconds.
+Thu Nov  6 01:52:43 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * rfc2047.el (rfc2047-encode-region): New version.
-       (rfc2047-dissect-region): New function.
+       * gnus-topic.el (gnus-topic-change-level): Really delete multiple
+       instances. 
 
-1998-09-07 01:08:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Wed Nov  5 14:04:54 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.el (message-make-date): Use symbolic zone.
+       * gnus-topic.el (gnus-topic-update-topic-line): Possibly fix nil
+       numbers. 
 
-1998-09-06 23:23:06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-summary-show-article): New command and
+       keystroke. 
 
-       * time-date.el (parse-time): Always use parse-time.
+Tue Nov  4 06:29:58 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * parse-time.el (parse-time-syntax): Use vectors.
+       * gnus-score.el (gnus-score-adaptive): Use the home score file.
 
-Sun Sep  6 21:19:26 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Sat Oct 25 05:52:22 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.17 is released.
+       * gnus-art.el (gnus-article-save): Hide headers in the right
+       buffer.
 
-1998-09-06 05:45:17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-picon.el (gnus-picons-xbm-face): New face.
 
-       * time-date.el: Renamed from "date".
+Sat Oct 25 00:39:42 1997  Lars Balker Rasmussen  <lbr@mjolner.dk>
 
-       * gnus.el: Removed all timezone dependencies.
+       * gnus-art.el (gnus-article-fill-paragraph): New command and
+       keystroke. 
 
-       * score-mode.el: Removed.
-       (gnus-score-edit-insert-date): Use date.
+1997-10-16  Colin Rafferty  <craffert@ml.com>
 
-       * date.el (float-to-time): New function.
+       * message.el (message-make-fqdn): Made certain that user-mail is
+                 not nil.
 
-       * nnspool.el (nnspool-seconds-since-epoch): Removed.
+Sat Oct 25 00:18:32 1997  David S. Goldberg  <dsg@linus.mitre.org>
 
-       * date.el (time-to-float): New function.
+       * gnus-art.el (article-hide-boring-headers): Use many-to.
 
-       * message.el (message-make-date): Use format-time-string.
-       (message-make-expires): Use make-date.
+Fri Oct 24 23:48:39 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-xmas.el (gnus-xmas-seconds-since-epoch): Removed.
+       * gnus-picon.el (gnus-picons-display-pairs): Don't add two bars.
+       (gnus-picons-try-face): Set the foreground color on the bar.
+       (gnus-picons-group-exluded-groups): New variable.
+       (gnus-group-display-picons): Use it.
 
-       * gnus-util.el (gnus-dd-mmm): Use date.
-       (gnus-sortable-date): Ditto.
+Mon Oct 13 00:01:35 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.el (message-make-date): Take an optional time.
+       * gnus-agent.el (gnus-agent-group-path): Translate file chars.
+       (gnus-agent-batch-fetch): New command.
+       (gnus-agent-fetch-group): Message.
 
-       * gnus: Applied patches from 5.6.43.
+Sun Oct 12 23:54:55 1997  ISO-2022-JP  <ichikawa@hv.epson.co.jp>
 
-       * date.el (if): Use parse-time.
+       * gnus-agent.el (gnus-agent-article-file-coding-system): New
+       variable. 
 
-       * gnus-score.el (gnus-summary-score-entry): Make into a command
-       again.
+Sun Oct 12 16:46:11 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-group.el (gnus-group-get-new-news-this-group): Only call if
-       gnus-agent.
+       * dgnushack.el (lpath): Reversed.
 
-       * gnus.el (gnus-agent-meta-information-header): Moved here.
+       * gnus-msg.el (gnus-summary-cancel-article): Use sym prefix.
 
-1998-09-05  Mike McEwan  <mike@lotusland.demon.co.uk>
+       * gnus-art.el (article-translate-characters): New function.
+       (article-treat-dumbquotes): New command and keystroke.
 
-       * gnus-agent.el (gnus-agent-scoreable-headers): New variable.
-       (gnus-agent-fetch-group-1): Score article headers using normal
-       group score files if the download score rule of a category/group
-       is `file'.
-       (gnus-agent-fetch-group-1): Don't parse the entire .overview when
-       deciding what articles to download.
-       (gnus-agent-fetch-group-1): Don't push headers through scoring and
-       predicate processing if predicate is `true' or `false'.
+Sun Oct  5 20:09:31 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-06 01:56:02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-art.el (gnus-button-alist): No ' and " in News:.
 
-       * gnus-score.el (gnus-score-load-score-alist): Bind coding system.
+       * gnus-msg.el (gnus-inews-insert-archive-gcc): Comp warn.
 
-       * gnus-art.el (gnus-article-setup-buffer): Enable multibyte.
+Sat Oct  4 00:53:55 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * score-mode.el (score-mode-coding-system): New variable.
-       (gnus-score-edit-exit): Use it.
+       * gnus.el: Quassia Gnus v0.12 is released.
 
-1998-09-04  Jason R Mastaler  <jason@4b.org>
+Sat Oct  4 00:16:39 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * drums.el: Corrected typo.
+       * gnus.el (gnus-plugged): Moved here.
 
-1998-09-05 23:24:43  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
+       * nnmail.el (nnmail-delete-incoming): Changed default to nil.
 
-       * mm-bodies.el (mm-body-encoding): Faster version.
+       * gnus-int.el (gnus-request-scan): Don't do anything if
+       unplugged. 
 
-1998-09-05 22:23:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Fri Oct  3 21:09:19 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-article-decode-charset): Only decode text
-       things.
+       * gnus-art.el (gnus-ignored-headers): Doc fix.
 
-       * message.el (message-output): Use rmail.
+       * gnus-demon.el (gnus-demon-add-nntp-close-connection): New
+       function. 
+       (gnus-demon-nntp-close-connection): Ditto.
 
-       * rfc2047.el (rfc2047-encoded-word-regexp): Allow spaces in the
-       word part.
+       * nntp.el (nntp-last-command-time): New variable.
+       (nntp-retrieve-data): Use it.
 
-       * mm-util.el (mm-charset-to-coding-system): Use
-       rfc2047-default-charset.
-       (mm-known-charsets): New variable.
+       * message.el (message-news-p): Messages with Posted-To aren't
+       news. 
+       (message-mode): Heed message-yank-prefix when filling.
 
-       * message.el (message-caesar-region): Bugged out.
+       * nndraft.el (nndraft-request-restore-buffer): Remove Xrefs and
+       Lines headers.
 
-1998-09-06  Mike McEwan  <mike@lotusland.demon.co.uk>
+       * nntp.el (nntp-encode-text): Encode according to RFC977.
 
-       * gnus-agent.el (gnus-agent-fetch-group-1): Allow lists when
-       specifying `agent-predicate' in a group's parameters.
+Wed Oct  1 18:27:26 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Sat Sep  5 21:55:01 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-msg.el (gnus-inews-insert-archive-gcc): gcc-self didn't
+       work if `gnus-message-archive-method' was nil.
 
-       * gnus.el: Pterodactyl Gnus v0.16 is released.
+       * nnmail.el (nnmail-article-group): Allow \\1 substitution.
 
-1998-09-05 17:30:11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Sep 27 12:57:44 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * nnmail.el (nnmail-expired-article-p): Use predicate.
+       * gnus-salt.el (gnus-pick-mouse-pick-region): Use it.
 
-       * date.el (time-less-p): Renamed.
+       * gnus-xmas.el (gnus-xmas-window-edges): New function.
 
-       * gnus-art.el (gnus-article-decode-charset): Really fetch headers
-       from the headers.
+       * gnus-score.el (gnus-score-edit-current-scores): Don't select
+       window. 
 
-       * rfc2047.el (rfc2047-decode-region): Use the mm decoding
-       functions.
+Sat Sep 27 12:52:31 1997  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
 
-       * gnus-group.el (gnus-group-sort-selected-flat): Didn't work at
-       all.
-       (gnus-group-sort-selected-groups-by-alphabet): Changed interface
-       to all functions.
+       * messcompat.el ((boundp 'mail-mode-hook)): Check.
 
-Sat Sep  5 01:45:52 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Sat Sep 27 09:22:15 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.15 is released.
+       * nndraft.el (nndraft-possibly-change-group): Always open server.
 
-1998-09-05 00:21:22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-summary-pop-article): Force.
 
-       * date.el: New file.
+       * gnus-art.el (gnus-article-prepare): Push the article onto the
+       history. 
 
-       * gnus-util.el (gnus-encode-date): Removed.
-       (gnus-time-less): Ditto.
+       * gnus-sum.el (gnus-summary-pop-article): Pop to the right
+       article. 
 
-       * nnmail.el (nnmail-date-to-time): Removed.
-       (nnmail-time-less): Ditto.
-       (nnmail-days-to-time): Ditto.
-       (nnmail-time-since): Ditto.
+       * gnus-demon.el (gnus-demon-scan-news): Save excursion.
 
-       * drums.el: New file.
+Sat Sep 27 09:06:55 1997  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
 
-1998-09-04 00:25:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-cache.el (gnus-summary-limit-include-cached): New command
+       and keystroke.
 
-       * message.el (message-encode-message-body): Encode headers with
-       body encoding.
+Sat Sep 27 06:45:58 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * rfc2047.el (rfc2047-default-charset): Renamed.
-       (rfc2047-encodable-p): Use it.
+       * gnus-uu.el (gnus-uu-invert-processable): Make interactive.
 
-       * base64.el (mm-util): Required.
+Sat Sep 27 06:43:38 1997  Kim-Minh Kaplan  <kimminh.kaplan@utopia.eunet.fr>
 
-1998-09-03 16:28:30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-picon.el: Doc fixes.
 
-       * gnus-msg.el (gnus-post-method): Peel off real info from opened
-       servers.
+1997-09-23  Hrvoje Niksic  <hniksic@srce.hr>
 
-       * gnus-util.el (gnus-output-to-rmail): Removed.
+       * gnus.el: Removed definition of `custom-face-lookup'.
 
-       * gnus-art.el (gnus-summary-save-in-rmail): Use
-       gnus-output-to-rmailrmail-output-to-rmail-file.
+Sat Sep 27 05:36:11 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * rfc2047.el (rfc2047-decode-region): Fold case.
-       (rfc2047-decode): Use decode-string.
+       * nndraft.el: Would block nnmh.
 
-       * mm-util.el: Provide mm-char-int.
+       * gnus-sum.el (gnus-mark-article-as-unread): Don't allow marking
+       negative articles.
 
-Thu Sep  3 15:23:22 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-group.el (gnus-fetch-group): Use `gnus-no-server'.
 
-       * gnus.el: Pterodactyl Gnus v0.14 is released.
+       * gnus-agent.el (gnus-agent-with-fetch): Moved.
 
-1998-09-03 15:08:30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-nov-read-integer): Really skip to next field.
 
-       * mm-bodies.el (mm-body-encoding): Go through the buffer to make
-       sure we have 7bit.
+Sat Sep 27 04:32:45 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1998-09-02 14:38:18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el: Quassia Gnus v0.11 is released.
 
-       * gnus-msg.el (gnus-post-method): Use opened servers, and remove
-       ducplicates.
-       (gnus-inews-insert-mime-headers): Removed.
+Sat Sep 27 03:50:12 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.el (message-caesar-region): Protect against MULE chars.
+       * message.el (message-send): Post without asking.
+       (message-mode): Modify paragraphs-start and paragraph-separate. 
+       (message-newline-and-reformat): New command and keystroke.
 
-1998-09-02 00:36:23  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
+Thu Sep 25 00:13:41 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-util.el (if): fset the right function.
+       * nnmail.el (nnmail-activate): Init server buffer.
 
-1998-09-02 00:31:53  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Wed Sep 24 04:11:59 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-article-decode-charset): Use real
-       read-coding-system.
+       * gnus-draft.el (gnus-draft-setup): Inexplicable binding problem
+       worked around.
 
-1998-09-01 17:58:40  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnsoup.el (nnsoup-always-save): Renamed.
 
-       * mm-bodies.el (mm-decode-body): Protect against malformed
-       base64.
-       (mm-decode-body): Check that buffer-file-coding-system is
-       non-nil.
+Wed Sep 24 04:11:02 1997  Nelson Jose dos Santos Ferreira  <Nelson.Ferreira@inesc.pt>
 
-Tue Sep  1 10:29:33 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * nnsoup.el (nnsoup-commit-reply-now): New variable.
+       (nnsoup-store-reply): Use it.
 
-       * gnus.el: Pterodactyl Gnus v0.13 is released.
+Wed Sep 24 02:30:44 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-01 09:14:33  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-ems.el (gnus-deactivate-mark): New alias.
 
-       * gnus-util.el (gnus-strip-whitespace): Already defined.
-       Removed.
+Tue Sep 23 07:56:07 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-article-decode-charset): Strip whitespace.
+       * gnus.el: Win-away!
 
-       * gnus-util.el (gnus-strip-whitespace): New function.
+       * gnus-msg.el (gnus-setup-message): Don't trust make-symbol.
 
-       * mm-util.el (mm-content-type-charset): Downcase.
+Tue Sep 23 07:45:11 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1998-08-31 23:04:29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el: Quassia Gnus v0.10 is released.
 
-       * gnus-art.el (gnus-article-decode-charset): Accept a prefix.
-       (gnus-article-decode-charset): Don't fetch all headers.
+Tue Sep 23 01:41:04 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-util.el (mm-read-coding-system): New function.
+       * gnus-sum.el (gnus-read-all-headers): New function.
+       (gnus-select-newsgroup): Use it.
+       (gnus-summary-refer-thread): Ditto.
+       (gnus-refer-thread-limit): New variable.
+       (gnus-summary-refer-thread): Use it.
 
-       * mm-bodies.el (mm-decode-body): Check the right charset.
+       * gnus-nocem.el (gnus-nocem-message-wanted-p): New function.
+       (gnus-nocem-check-article): Use it.
+       (gnus-nocem-issuers): Dox ofx.
 
-       * gnus-sum.el (gnus-summary-mode-line-format): Ditto.
+       * dgnushack.el (dgnushack-compile): Check for cus-edit.
 
-       * gnus-art.el (gnus-article-mode-line-format): Use short group
-       format.
+       * message.el (message-included-forward-headers): Include Mime
+       headers. 
+       (message-send): Allow posting without confirming from Agent.
 
-Mon Aug 31 23:03:13 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Mon Sep 22 05:43:14 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.12 is released.
+       * dgnushack.el (byte-compile-warnings): Don't warn about obsolete
+       variables. 
+
+       * gnus-sum.el (gnus-summary-refer-thread): New command and
+       keystroke. 
+       (gnus-summary-limit-include-thread): New command and keystroke. 
+       (gnus-summary-articles-in-thread): New function.
+       (gnus-articles-in-thread): Renamed.
 
-1998-08-31 22:39:36  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Sep 21 23:54:50 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * mm-bodies.el (mm-decode-body): Don't do charset unless MULE.
+       * gnus.el: Quassia Gnus v0.9 is released.
 
-       * gnus-art.el (gnus-article-decode-charset): Supply cte.
-       (gnus-article-decode-charset): Always run.
+Sun Sep 21 23:38:46 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-bodies.el (mm-decode-body): Decode cte.
+       * gnus.el (gnus-splash-face): ForestGreen everywhere.
 
-Mon Aug 31 22:14:50 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-sum.el (gnus-simplify-subject-fully): Use new variable.
+       (gnus-general-simplify-subject): Ditto.
 
-       * gnus.el: Pterodactyl Gnus v0.11 is released.
+Sun Sep 21 23:34:13 1997  Kurt Swanson  <kurt@dna.lth.se>
 
-1998-08-31 14:27:25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-simplify-subject-functions): New variable.
+       (gnus-simplify-whitespace): New function.
 
-       * message.el (message-encode-message-body): Ditto.
+       * gnus-util.el (gnus-map-function): New function.
 
-       * gnus-art.el (gnus-article-decode-mime-words): New command and
-       keystroke.
-       (gnus-article-decode-charset): Ditto.
-       (gnus-article-decode-charset): Only work under MULE.
+Sun Sep 21 23:22:04 1997  Michelangelo Grigni  <mic@mathcs.emory.edu>
 
-       * mm-util.el (mm-content-type-charset): New function.
+       * gnus-score.el (gnus-score-regexp-bad-p): New function.
 
-       * nnmail.el (nnmail-delete-incoming): Changed to nil.
+Sun Sep 21 00:14:40 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.el (message-send-mail): Insert MIME headers.
-       (message-check-news-body-syntax): Don't warn for escape sequences.
-       (message-check-news-body-syntax): Insert MIME headers.
+       * gnus-score.el (gnus-summary-lower-score): Use sym pref.
+       (gnus-summary-increase-score): Use it.
 
-       * mm-bodies.el (mm-body-encoding): New function.
+       * gnus.el (gnus-current-prefix-symbol): New variable.
+       (gnus-current-prefix-symbols): New variable.
 
-       * message.el (message-encode-message-body): New function.
+       * gnus-score.el (gnus-summary-increase-score): Take symbolic
+       prefix. 
 
-       * mm-bodies.el: New file.
+       * gnus.el (gnus-interactive): Removed.
+       (gnus-interactive): Renamed from gnus-interactive-1.
+       (gnus-symbolic-argument): New command.
 
-       * mm-util.el (mm-narrow-to-head): New function.
+       * gnus-draft.el (gnus-draft-send-message): Disable message
+       checks. 
+       (gnus-draft-send): Ditto.
+       (gnus-draft-setup): Don't save buffer.
 
-       * rfc2047.el (rfc2047-encode): Use it.
+       * dgnushack.el (dgnushack-compile): Warn people about Custom.
 
-       * mm-util.el: Provide mm-encode-coding-region.
+       * gnus-group.el (gnus-group-iterate): Use gensymmed variables.
 
-       * gnus-sum.el (gnus-summary-mode): Enable multibyte.
+       * pop3.el (pop3-md5): `with-temp-buffer' doesn't exist in Emacs
+       19.34. 
 
-       * gnus-util.el (gnus-set-work-buffer): Enable multibyte.
+       * nneething.el (nneething-directory): Defvarred.
 
-       * mm-util.el (mm-enable-multibyte): New function.
+       * message.el: Autoloaded nndraft things.
+       (message-set-auto-save-file-name): Use it.
 
-       * message.el (message-set-work-buffer): Set multibyte.
+       * dgnushack.el (dgnushack-compile): Warn about things.
 
-       * gnus.el (gnus-continuum-version): Be valid forever and ever.
+       * gnus-art.el: Autoload w3-region.
 
-       * gnus-util.el (gnus-point-at-eol): Removed.
-       (gnus-point-at-bol): Ditto.
+       * gnus-vm.el (gnus-summary-save-in-vm): Simplified.
 
-       * base64.el (base64-decode-region): Commented out messaging.
+       * gnus.el: Changed `compiled-function-p' to `byte-code-function-p'
+       throughout.
 
-1998-08-31  Didier Verna  <verna@inf.enst.fr>
+       * gnus-sum.el (gnus-summary-edit-article): Supply additional
+       param. 
 
-       * gnus-msg.el (gnus-group-mail): make it behave like
-       gnus-group-post-news with regards to the prefix (this enables the
-       use of posting styles).
+       * gnus-group.el (gnus-group-iterate): Undo bogus change.
 
-1998-08-31 12:53:32  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-agent.el (gnus-agentize): Just call gnus-open-agent
+       directly. 
 
-       * gnus.el (gnus-article-display-hook): Added
-       gnus-article-decode-rfc1522 to hook.
+       * gnus.el (gnus-interactive): New macro.
+       (gnus-interactive-1): New function.
 
-Mon Aug 31 12:43:46 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-sum.el (gnus-fetch-old-headers): Allow `invisible'.
+       (gnus-cut-thread): Use it.
+       (gnus-cut-threads): Ditto.
+       (gnus-summary-initial-limit): Ditto.
+       (gnus-summary-limit-children): Ditto.
 
-       * gnus.el: Pterodactyl Gnus v0.10 is released.
+       * gnus-art.el (gnus-article-edit-done): Accept a prefix arg.
+       (gnus-boring-article-headers): Allow `long-to' param.
+       (article-hide-boring-headers): Use it.
 
-1998-08-31 11:45:13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-summary-edit-article-done): Accept a
+       no-highlight param.
 
-       * nnfolder.el (nnfolder-delete-mail): Narrow to mail and allow
-       hook to be run.
+       * nntp.el (nntp-rlogin-program): New variable.
+       (nntp-open-rlogin): Use it.
 
-1998-08-30 17:59:07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnvirtual.el (nnvirtual-request-post): New function.
 
-       * rfc2047.el (rfc2047-encodable-p): Use find-charset-region.
+       * gnus-msg.el (gnus-message-group-art): New variable.
 
-       * mm-util.el (mm-charsets-in-region): Removed.
+       * gnus-draft.el (gnus-draft-setup): Don't use message-setup.
 
-       * rfc2047.el: Renamed file.
+       * nndraft.el (nndraft): Allow editing articles.
 
-       * gnus-msg.el (gnus-copy-article-buffer): Multibyte.
+       * gnus-ems.el (gnus-x-splash): Ditto.
 
-       * message.el (message-mode): Set multibyte.
+       * gnus.el (gnus-splash-face): Darker face.
 
-       * mm-util.el (mm-charsets-in-region): Copied here.
+       * gnus-draft.el (gnus-draft-setup): Clobbered variables.
 
-       * gnus-util.el: Removed gnus-truncate-string.
+Sat Sep 20 23:23:49 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-art.el (gnus-article-decode-mime-words): Use 1522.
+       * gnus.el: Quassia Gnus v0.8 is released.
 
-       * rfc1522.el (rfc1522-unencoded-charsets): New variable.
-       (rfc1522-encodable-p): New function.
-       (rfc1522-encode-message-header): Use it.
+Sat Sep 20 20:41:16 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Sun Aug 30 17:46:01 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-start.el (gnus-setup-news-hook): New hook.
 
-       * gnus.el: Pterodactyl Gnus v0.9 is released.
+       * gnus-agent.el (gnus-agentize): Really set up queue group.
+       (gnus-open-agent): Setup queue here.
 
-1998-08-30 16:13:08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Sep 20 20:23:07 1997  Matt Simmons  <simmonmt@acm.org>
 
-       * mm-util.el: Shadow encode-coding-string.
+       * message.el (message-set-auto-save-file-name): Make things work
+       without drafts.
 
-       * base64.el (base64-encode-region): Don't add newline.
+Sat Sep 20 18:32:02 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * rfc1522.el (rfc1522-narrow-to-field): Copied here.
+       * nnmh.el (nnmh-request-list-1): Check for links to ".".
 
-       * mm-util.el: New file.
+       * nndraft.el (nndraft-possibly-change-group): New function.
+
+       * gnus-agent.el (gnus-agent-queue-setup): New function.
+
+Thu Sep 18 04:54:59 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Quassia Gnus v0.7 is released.
+
+Thu Sep 18 03:33:54 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-msg.el (gnus-setup-message): Slap a progn around forms.
+
+       * nndraft.el (nndraft-articles): Make sure directory exists. 
+
+       * message.el (message-mode): Don't delete article.
+
+       * nnmh.el (nnmh-request-accept-article): Don't save when
+       noinsert. 
+
+Wed Sep 17 03:37:59 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * nndraft.el (nndraft-directory): Changed defaults.
+
+       * gnus-agent.el (gnus-agent-fetch-session): Bind command method.
+
+Wed Sep 17 03:28:36 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+
+       * gnus.el: Quassia Gnus v0.6 is released.
+
+1997-08-17  SL Baur  <steve@altair.xemacs.org>
+
+       * dgnushack.el (dgnushack-compile): Ignore .el files beginning
+       with an `=' character.
+
+Wed Sep 17 02:30:04 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus-sum.el (gnus-build-sparse-threads): Allow display of looped
+       References.
+
+       * gnus-agent.el (gnus-agent-fetch-group-1): Separated out into
+       function. 
+
+       * message.el (message-delete-not-region): New command and
+       keystroke. 
 
-       * mm-decode.el: Somewhat depleted.
-       * mm-encode.el: Ditto.
+Tue Sep 16 00:58:26 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * rfc1522.el: New file.
+       * nndraft.el (nndraft-directory): Changed value.
 
-       * mm-util.el (mm-replace-chars-in-string): Copied here.
+       * message.el (message-kill-buffer): Disassociate draft.
+       (message-mode): Use kill hook to disassociate.
+       (message-disassociate-draft): Double-check.
 
-       * mm-encode.el (mm-q-encode-region): New function.
+       * gnus-agent.el (gnus-agentize): Don't set twice.
 
-       * qp.el (quoted-printable-encode-region): Take an optional CLASS
-       param.
+       * gnus-art.el (gnus-article-prepare): Go to the right line before
+       marking. 
 
-       * mm-encode.el (mm-encode-word-region): Downcase.
+       * gnus-start.el: Renamed the drafts group.
 
-Sun Aug 30 15:28:01 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-agent.el (gnus-agent-lib-file): Changed name of directory.
 
-       * gnus.el: Pterodactyl Gnus v0.8 is released.
+       * gnus-draft.el (gnus-draft-mode): Simplify.
 
-1998-08-30 12:23:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Tue Sep 16 00:18:11 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * message.el (message-send-mail): Encode headers.
+       * gnus.el: Quassia Gnus v0.5 is released.
 
-       * qp.el (quoted-printable-encode-region): Encode 8-bit words.
-       (quoted-printable-encode-region): Upcase.
+Mon Sep 15 00:53:50 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.el (message-default-charset): New variable.
+       * gnus-sum.el (gnus-alter-header-function): New variable.
+       (gnus-nov-parse-line): Use it.
+       (gnus-get-newsgroup-headers): Ditto.
 
-       * qp.el (quoted-printable-encode-region): Optional param FOLD.
+       * gnus-draft.el (gnus-group-send-drafts): Don't send when
+       unplugged. 
 
-       * message.el (message-narrow-to-field): Changed name.
+       * gnus-sum.el (gnus-summary-read-group): Don't show-all when
+       skipping groups.
 
-       * mm-encode.el: New file.
+       * gnus-start.el (gnus-start-draft-setup): Changed name.
 
-       * message.el (message-narrow-to-header): New function.
+Mon Sep 15 00:40:09 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-art.el (gnus-article-decode-mime-words): Place point in the
-       right buffer.
+       * gnus.el: Quassia Gnus v0.4 is released.
 
-Sun Aug 30 12:15:54 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Mon Sep 15 00:19:07 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.7 is released.
+       * gnus-sum.el (gnus-summary-goto-article): Accept Message-ID's.
 
-1998-08-30 01:26:12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Sep 14 21:41:35 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Remove autoload for
-       gnus-article-mime-decode-quoted-printable.
+       * gnus-sum.el (gnus-group-make-articles-read): No params.
 
-       * mm-decode.el (mm-charset-to-coding-system): Allow iso-8859-1 to
-       be decoded in non-MULE Emacsen.
+       * nndraft.el (nndraft-status-string): Fix.
 
-       * gnus-xmas.el (gnus-xmas-logo-color-alist): More brown.
+       * gnus-draft.el (gnus-group-send-drafts): New command.
 
-1998-08-29  SL Baur  <steve@altair.xemacs.org>
+       * gnus-sum.el (gnus-compute-read-articles): Separated.
+       (gnus-update-read-articles): Allow computation.
 
-       * gnus-xmas.el (gnus-xmas-logo-color-alist): Try shades of brown.
+       * nndraft.el (nndraft-articles): New function.
 
-1998-08-30 01:04:57  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-send): Disabled test.
 
-       * mm-decode.el: Check for coding-system-list.
+Sun Sep 14 21:17:34 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-Sun Aug 30 00:59:15 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus.el: Quassia Gnus v0.3 is released.
 
-       * gnus.el: Pterodactyl Gnus v0.6 is released.
+Sun Sep 14 01:51:45 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-08-30 00:36:28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-agent.el (gnus-agent-short-article): New variables.
 
-       * nnheader.el (fboundp): Protect code-coding-string.
+       * message.el (message-set-auto-save-file-name): Use drafts.
 
-       * gnus-art.el (gnus-article-mode): Check that set-buffer-multibyte
-       is available.
+       * nndraft.el (nndraft-request-expire-articles): Use it.
 
-Sat Aug 29 23:24:31 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * nnmh.el (nnmh-deletable-article-p): Change.
+       (nnmh-allow-delete-final): New variable.
 
-       * gnus.el: Pterodactyl Gnus v0.5 is released.
+       * gnus-msg.el (gnus-summary-send-draft): Removed.
 
-1998-08-29 22:38:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el (gnus-article-mark-lists): Save unsendable marks.
 
-       * gnus-art.el (gnus-article-mode): Make article buffer multibyte.
-       (gnus-hack-decode-rfc1522): Removed.
+       * gnus-sum.el (gnus-newsgroup-unsendable): New variable.
 
-       * mm-decode.el (mm-charset-coding-system-alist): Check better.
+       * gnus-draft.el: New file.
 
-Sat Aug 29 22:20:39 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-sum.el (gnus-unsendable-mark): New variable.
 
-       * gnus.el: Gnus v0.4 is released.
+       * nndraft.el (nndraft-execute-nnmh-command): Cleanup.
 
-1998-08-29 20:53:29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-send-news): Use `gnus-request-post'.
 
-       * gnus-art.el (gnus-article-decode-mime-words): New command and
-       keystroke.
+       * gnus-agent.el (gnus-agentize): New command.
 
-       * qp.el (quoted-printable-decode-region): Don't use hexl.
+       * gnus-bcklg.el (gnus-backlog-remove-article): Remove the ident
+       from the list.
 
-       * gnus-xmas.el (gnus-xmas-logo-color-style): Changed to dino.
+Sun Sep 14 00:26:47 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-sum.el (gnus-parse-headers-hook): Default to nil.
-       (gnus-structured-field-decoder): Removed.
-       (gnus-unstructured-field-decoder): Ditto.
+       * gnus.el: Quassia Gnus v0.2 is released.
 
-       * mm-decode.el: New file.
+Sun Sep 14 00:24:52 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * qp.el: New file.
+       * gnus-score.el (gnus-score-headers): Make sure the summary buffer
+       exists.
 
-       * gnus-art.el (article-mime-decode-quoted-printable): Removed.
+Sat Sep 13 23:35:28 1997  Greg Stark  <gsstark@mit.edu>
 
-       * gnus-ems.el (fboundp): Removed gnus-split-string.
+       * gnus-ems.el (gnus-x-splash): New function.
 
-       * gnus.el (gnus-splash-face): Doc fix.
+Sat Sep 13 22:46:16 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-ems.el (fboundp): Don't bind mail-file-babyl-p.
+       * gnus-start.el (gnus-1): Use it.
 
-       * gnus-art.el (article-mime-decode-quoted-printable): Don't use
-       hexl.
+       * gnus-ems.el (gnus-decode-coding-string): New alias.
 
-       * nnheader.el (nnheader-temp-write): Removed.
+       * message.el (message-unix-mail-delimiter): Dox fox.
 
-Sat Aug 29 20:34:17 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * nnmh.el (nnmh-request-list-1): Don't use coding system.
 
-       * gnus.el: Gnus v0.3 is released.
+       * gnus-sum.el (gnus-summary-catchup): Reverse logic.
 
-Sat Aug 29 19:32:06 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Sat Sep 13 21:21:38 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus.el: Gnus v0.2 is released.
+       * gnus.el: Quassia Gnus v0.1 is released.
diff --git a/lisp/Makefile b/lisp/Makefile
deleted file mode 100644 (file)
index b949400..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-SHELL = /bin/sh
-EMACS=emacs
-FLAGS=-batch -q -no-site-file -l ./dgnushack.el
-
-total:
-       rm -f *.elc ; $(EMACS) $(FLAGS) -f dgnushack-compile
-
-all:
-       rm -f *.elc ; $(EMACS) $(FLAGS) -f dgnushack-compile
-
-clever:
-       $(EMACS) $(FLAGS) -f dgnushack-compile
-
-some:
-       $(EMACS) $(FLAGS) -f dgnushack-compile
-
-tags:
-       etags *.el
-
-separately:
-       rm -f *.elc ; for i in *.el; do $(EMACS) $(FLAGS) -f batch-byte-compile $$i; done
-
-pot:
-       xpot -drgnus -r`cat ./version` *.el > rgnus.pot
-
-gnus-load.el: 
-       echo ";;; gnus-load.el --- automatically extracted custom dependencies" > gnus-load.el
-       echo ";;" >> gnus-load.el
-       echo ";;; Code:" >> gnus-load.el
-       echo >> gnus-load.el
-       $(EMACS)  $(FLAGS) -l ./dgnushack.el -l cus-edit.el *.el \
-               -f custom-make-dependencies >> gnus-load.el
-       echo >> gnus-load.el
-       echo "(provide 'gnus-load)" >> gnus-load.el
-       echo >> gnus-load.el
-       echo ";;; gnus-load.el ends here" >> gnus-load.el
-
-distclean:
-       rm -f *.orig *.rej *.elc *~
-
index 108c6fa..cd61fdc 100644 (file)
@@ -12,17 +12,19 @@ INSTALL_DATA = @INSTALL_DATA@
 SHELL = /bin/sh
 VPATH = @srcdir@
 
-all total:
+total:
        rm -f *.elc ; $(EMACS) $(FLAGS) -f dgnushack-compile
 
-warn:
-       rm -f *.elc ; $(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"
+all:
+       rm -f *.elc ; $(EMACS) $(FLAGS) -f dgnushack-compile
+
+clever:
+       $(EMACS) $(FLAGS) -f dgnushack-compile
 
-clever some:
+some:
        $(EMACS) $(FLAGS) -f dgnushack-compile
 
 install: clever
-       rm -f dgnushack.elc
        $(SHELL) $(top_srcdir)/mkinstalldirs $(lispdir)
        for p in *.elc; do \
          echo " $(INSTALL_DATA) $$p $(lispdir)/$$p"; \
diff --git a/lisp/binhex.el b/lisp/binhex.el
deleted file mode 100644 (file)
index a8f37a2..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-;;; binhex.el -- elisp native binhex decode
-;; Copyright (c) 1998 by Shenghuo Zhu <zsh@cs.rochester.edu>
-
-;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
-;; Create Date: Oct 1, 1998
-;; $Revision: 1.1.1.2 $
-;; Time-stamp: <Tue Oct  6 23:48:38 EDT 1998 zsh>
-;; Keywords: binhex
-  
-;; 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.
-
-;;; Commentary:
-
-;;; Code:
-
-(if (not (fboundp 'char-int))
-    (fset 'char-int 'identity))
-
-(defvar binhex-decoder-program "hexbin"
-  "*Non-nil value should be a string that names a uu decoder.
-The program should expect to read binhex data on its standard
-input and write the converted data to its standard output.")
-
-(defvar binhex-decoder-switches '("-d")
-  "*List of command line flags passed to the command named by binhex-decoder-program.")
-
-(defconst binhex-alphabet-decoding-alist
-  '(( ?\! . 0) ( ?\" . 1) ( ?\# . 2) ( ?\$ . 3) ( ?\% . 4) ( ?\& . 5)
-    ( ?\' . 6) ( ?\( . 7) ( ?\) . 8) ( ?\* . 9) ( ?\+ . 10) ( ?\, . 11)
-    ( ?\- . 12) ( ?0 . 13) ( ?1 . 14) ( ?2 . 15) ( ?3 . 16) ( ?4 . 17)
-    ( ?5 . 18) ( ?6 . 19) ( ?8 . 20) ( ?9 . 21) ( ?@ . 22) ( ?A . 23)
-    ( ?B . 24) ( ?C . 25) ( ?D . 26) ( ?E . 27) ( ?F . 28) ( ?G . 29)
-    ( ?H . 30) ( ?I . 31) ( ?J . 32) ( ?K . 33) ( ?L . 34) ( ?M . 35)
-    ( ?N . 36) ( ?P . 37) ( ?Q . 38) ( ?R . 39) ( ?S . 40) ( ?T . 41)
-    ( ?U . 42) ( ?V . 43) ( ?X . 44) ( ?Y . 45) ( ?Z . 46) ( ?\[ . 47)
-    ( ?\` . 48) ( ?a . 49) ( ?b . 50) ( ?c . 51) ( ?d . 52) ( ?e . 53)
-    ( ?f . 54) ( ?h . 55) ( ?i . 56) ( ?j . 57) ( ?k . 58) ( ?l . 59)
-    ( ?m . 60) ( ?p . 61) ( ?q . 62) ( ?r . 63)))
-
-(defun binhex-char-map (char)
-  (cdr (assq char binhex-alphabet-decoding-alist)))
-
-;;;###autoload
-(defconst binhex-begin-line
-  "^:...............................................................$")
-(defconst binhex-body-line
-  "^[^:]...............................................................$")
-(defconst binhex-end-line ":$")
-
-(defvar binhex-temporary-file-directory "/tmp/")
-
-(defun binhex-insert-char (char &optional count ignored buffer)
-  (condition-case nil
-      (progn
-       (insert-char char count ignored buffer)
-       (fset 'binhex-insert-char 'insert-char))
-    (wrong-number-of-arguments
-     (fset 'binhex-insert-char 'binhex-xemacs-insert-char)
-     (binhex-insert-char char count ignored buffer))))
-
-(defun binhex-xemacs-insert-char (char &optional count ignored buffer)
-  (if (or (null buffer) (eq buffer (current-buffer)))
-      (insert-char char count)
-    (save-excursion
-      (set-buffer buffer)
-      (insert-char char count))))
-
-(defvar binhex-crc-table
-  [0  4129  8258  12387  16516  20645  24774  28903 
-      33032  37161  41290  45419  49548  53677  57806  61935 
-      4657  528  12915  8786  21173  17044  29431  25302 
-      37689  33560  45947  41818  54205  50076  62463  58334 
-      9314  13379  1056  5121  25830  29895  17572  21637 
-      42346  46411  34088  38153  58862  62927  50604  54669 
-      13907  9842  5649  1584  30423  26358  22165  18100 
-      46939  42874  38681  34616  63455  59390  55197  51132 
-      18628  22757  26758  30887  2112  6241  10242  14371 
-      51660  55789  59790  63919  35144  39273  43274  47403 
-      23285  19156  31415  27286  6769  2640  14899  10770 
-      56317  52188  64447  60318  39801  35672  47931  43802 
-      27814  31879  19684  23749  11298  15363  3168  7233 
-      60846  64911  52716  56781  44330  48395  36200  40265 
-      32407  28342  24277  20212  15891  11826  7761  3696 
-      65439  61374  57309  53244  48923  44858  40793  36728 
-      37256  33193  45514  41451  53516  49453  61774  57711 
-      4224  161  12482  8419  20484  16421  28742  24679 
-      33721  37784  41979  46042  49981  54044  58239  62302 
-      689  4752  8947  13010  16949  21012  25207  29270 
-      46570  42443  38312  34185  62830  58703  54572  50445 
-      13538  9411  5280  1153  29798  25671  21540  17413 
-      42971  47098  34713  38840  59231  63358  50973  55100 
-      9939  14066  1681  5808  26199  30326  17941  22068 
-      55628  51565  63758  59695  39368  35305  47498  43435 
-      22596  18533  30726  26663  6336  2273  14466  10403 
-      52093  56156  60223  64286  35833  39896  43963  48026 
-      19061  23124  27191  31254  2801  6864  10931  14994 
-      64814  60687  56684  52557  48554  44427  40424  36297 
-      31782  27655  23652  19525  15522  11395  7392  3265 
-      61215  65342  53085  57212  44955  49082  36825  40952 
-      28183  32310  20053  24180  11923  16050  3793  7920])
-
-(defun binhex-update-crc (crc char &optional count)
-  (if (null count) (setq count 1))
-  (while (> count 0)
-    (setq crc (logxor (logand (lsh crc 8) 65280) 
-                     (aref binhex-crc-table 
-                           (logxor (logand (lsh crc -8) 255)
-                                   char)))
-         count (1- count)))
-  crc)
-
-(defun binhex-verify-crc (buffer start end)
-  (with-current-buffer buffer
-    (let ((pos start) (crc 0) (last (- end 2)))
-      (while (< pos last)
-       (setq crc (binhex-update-crc crc (char-after pos))
-             pos (1+ pos)))
-      (if (= crc (binhex-string-big-endian (buffer-substring last end)))
-         nil
-       (error "CRC error")))))
-
-(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)))
-           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))
-           i (1+ i)
-           shift (+ shift 8)))
-    ret))
-
-(defun binhex-header (buffer)
-  (with-current-buffer buffer
-    (let ((pos (point-min)) len)
-      (vector 
-       (prog1
-          (setq len (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 pos (1+ pos)))
-       (buffer-substring pos (setq pos (+ pos 4)))
-       (buffer-substring pos (setq pos (+ pos 4)))
-       (binhex-string-big-endian 
-       (buffer-substring pos (setq pos (+ pos 2))))
-       (binhex-string-big-endian 
-       (buffer-substring pos (setq pos (+ pos 4))))
-       (binhex-string-big-endian 
-       (buffer-substring pos (setq pos (+ pos 4))))))))
-
-(defvar binhex-last-char)
-(defvar binhex-repeat)
-
-(defun binhex-push-char (char &optional count ignored buffer)
-  (cond 
-   (binhex-repeat 
-    (if (eq char 0)
-       (binhex-insert-char (setq binhex-last-char 144) 1 
-                           ignored buffer)
-      (binhex-insert-char binhex-last-char (- char 1) 
-                         ignored buffer)
-      (setq binhex-last-char nil))
-    (setq binhex-repeat nil))
-   ((= char 144)
-    (setq binhex-repeat t))
-   (t
-    (binhex-insert-char (setq binhex-last-char char) 1 ignored buffer))))
-
-(defun binhex-decode-region (start end &optional header-only)
-  "Binhex decode region between START and END.
-If HEADER-ONLY is non-nil only decode header and return filename."
-  (interactive "r")
-  (let ((work-buffer nil)
-       (counter 0)
-       (bits 0) (tmp t)
-       (lim 0) inputpos 
-       (non-data-chars " \t\n\r:")
-       file-name-length data-fork-start
-       header
-       binhex-last-char binhex-repeat)
-    (unwind-protect
-       (save-excursion
-         (goto-char start)
-         (when (re-search-forward binhex-begin-line end t)
-           (if (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))
-             (setq work-buffer (generate-new-buffer " *binhex-work*")))
-           (buffer-disable-undo work-buffer)
-           (beginning-of-line)
-           (setq bits 0 counter 0)
-           (while tmp
-             (skip-chars-forward non-data-chars end)
-             (setq inputpos (point))
-             (end-of-line)
-             (setq lim (point))
-             (while (and (< inputpos lim)
-                         (setq tmp (binhex-char-map (char-after inputpos))))
-               (setq bits (+ bits tmp)
-                     counter (1+ counter)
-                     inputpos (1+ inputpos))
-               (cond ((= counter 4)
-                      (binhex-push-char (lsh bits -16) 1 nil work-buffer)
-                      (binhex-push-char (logand (lsh bits -8) 255) 1 nil
-                                        work-buffer)
-                      (binhex-push-char (logand bits 255) 1 nil
-                                        work-buffer)
-                      (setq bits 0 counter 0))
-                     (t (setq bits (lsh bits 6)))))
-             (if (null file-name-length)
-                 (with-current-buffer work-buffer
-                   (setq file-name-length (char-after (point-min))
-                         data-fork-start (+ (point-min)
-                                            file-name-length 22))))
-             (if (and (null header) 
-                      (with-current-buffer work-buffer
-                        (>= (buffer-size) data-fork-start)))
-                 (progn
-                   (binhex-verify-crc work-buffer 
-                                      1 data-fork-start)
-                   (setq header (binhex-header work-buffer))
-                   (if header-only (setq tmp nil counter 0))))
-             (setq tmp (and tmp (not (eq inputpos end)))))
-           (cond
-            ((= counter 3)
-             (binhex-push-char (logand (lsh bits -16) 255) 1 nil 
-                               work-buffer)
-             (binhex-push-char (logand (lsh bits -8) 255) 1 nil
-                               work-buffer))
-            ((= 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)))
-      (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"
-  (interactive "r")
-  (let ((cbuf (current-buffer)) firstline work-buffer status
-       (file-name (concat binhex-temporary-file-directory 
-                          (binhex-decode-region start end t)
-                          ".data")))
-    (save-excursion
-      (goto-char start)
-      (when (re-search-forward binhex-begin-line nil t)
-       (let ((cdir default-directory) default-process-coding-system)
-         (unwind-protect
-             (progn
-               (set-buffer (setq work-buffer 
-                                 (generate-new-buffer " *binhex-work*")))
-               (buffer-disable-undo work-buffer)
-               (insert-buffer-substring cbuf firstline end)
-               (cd binhex-temporary-file-directory)
-               (apply 'call-process-region
-                      (point-min)
-                      (point-max)
-                      binhex-decoder-program 
-                      nil
-                      nil
-                      nil
-                      binhex-decoder-switches))
-           (cd cdir) (set-buffer cbuf)))
-       (if (and file-name (file-exists-p file-name))
-           (progn
-             (goto-char start)
-             (delete-region start end)
-             (let (format-alist)
-               (insert-file-contents-literally file-name)))
-         (error "Can not binhex")))
-      (and work-buffer (kill-buffer work-buffer))
-      (condition-case ()
-         (if file-name (delete-file file-name))
-       (error))
-      )))
-
-(provide 'binhex)
-
-;;; binhex.el ends here
-
-
index c2b4f82..37bdb98 100644 (file)
@@ -30,8 +30,9 @@
 
 (require 'cl)
 (require 'bytecomp)
+(push "~/lisp/custom" load-path)
 (push "." load-path)
-(load "./lpath.el" nil t)
+(load "./lpath.el")
 
 (defalias 'device-sound-enabled-p 'ignore)
 (defalias 'play-sound-file 'ignore)
     (fset 'x-defined-colors 'ignore)
     (fset 'read-color 'ignore)))
 
-(defun dgnushack-compile (&optional warn)
+(setq byte-compile-warnings
+      '(free-vars unresolved callargs redefine))
+
+(defun dgnushack-compile ()
   ;;(setq byte-compile-dynamic t)
-  (unless warn
-    (setq byte-compile-warnings
-         '(free-vars unresolved callargs redefine)))
   (unless (locate-library "cus-edit")
     (error "You do not seem to have Custom installed.
 Fetch it from <URL:http://www.dina.kvl.dk/~abraham/custom/>.
index 5f80f82..7d40b82 100644 (file)
@@ -1,4 +1,4 @@
-;;; gnus-agent.el --- unplugged support for Gnus
+;;; gnus-agent.el --- unplugged support for Semi-gnus
 ;; Copyright (C) 1997,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -27,9 +27,7 @@
 (require 'gnus-cache)
 (require 'nnvirtual)
 (require 'gnus-sum)
-(eval-when-compile
-  (require 'cl)
-  (require 'gnus-score))
+(eval-when-compile (require 'cl))
 
 (defcustom gnus-agent-directory (nnheader-concat gnus-directory "agent/")
   "Where the Gnus agent will store its files."
@@ -79,6 +77,8 @@ If nil, only read articles will be expired."
 
 ;;; Internal variables
 
+(defvar gnus-agent-meta-information-header "X-Gnus-Agent-Meta-Information")
+
 (defvar gnus-agent-history-buffers nil)
 (defvar gnus-agent-buffer-alist nil)
 (defvar gnus-agent-article-alist nil)
@@ -92,14 +92,7 @@ If nil, only read articles will be expired."
 (defvar gnus-agent-spam-hashtb nil)
 (defvar gnus-agent-file-name nil)
 (defvar gnus-agent-send-mail-function nil)
-(defvar gnus-agent-file-coding-system 'no-conversion)
-
-(defconst gnus-agent-scoreable-headers
-  (list
-   "subject" "from" "date" "message-id" 
-   "references" "chars" "lines" "xref")
-  "Headers that are considered when scoring articles
-for download via the Agent.")
+(defvar gnus-agent-article-file-coding-system 'no-conversion)
 
 ;; Dynamic variables
 (defvar gnus-headers)
@@ -114,9 +107,7 @@ for download via the Agent.")
   (gnus-agent-read-servers)
   (gnus-category-read)
   (setq gnus-agent-overview-buffer
-       (gnus-get-buffer-create " *Gnus agent overview*"))
-  (with-current-buffer gnus-agent-overview-buffer
-    (mm-enable-multibyte))
+       (get-buffer-create " *Gnus agent overview*"))
   (add-hook 'gnus-group-mode-hook 'gnus-agent-mode)
   (add-hook 'gnus-summary-mode-hook 'gnus-agent-mode)
   (add-hook 'gnus-server-mode-hook 'gnus-agent-mode))
@@ -136,9 +127,9 @@ for download via the Agent.")
 
 (defun gnus-agent-read-file (file)
   "Load FILE and do a `read' there."
-  (with-temp-buffer
+  (nnheader-temp-write nil
     (ignore-errors
-      (nnheader-insert-file-contents file)
+      (insert-file-contents file)
       (goto-char (point-min))
       (read (current-buffer)))))
 
@@ -212,8 +203,7 @@ for download via the Agent.")
       (push (cons mode (symbol-value (intern (format "gnus-agent-%s-mode-map"
                                                     buffer))))
            minor-mode-map-alist))
-    (when (eq major-mode 'gnus-group-mode)
-      (gnus-agent-toggle-plugged gnus-plugged))
+    (gnus-agent-toggle-plugged gnus-plugged)
     (gnus-run-hooks 'gnus-agent-mode-hook
                    (intern (format "gnus-agent-%s-mode-hook" buffer)))))
 
@@ -343,7 +333,7 @@ agent minor mode in all Gnus buffers."
      (concat "^" (regexp-quote mail-header-separator) "\n"))
     (replace-match "\n")
     (gnus-agent-insert-meta-information 'mail)
-    (gnus-request-accept-article "nndraft:queue" nil t t)))
+    (gnus-request-accept-article "nndraft:queue")))
 
 (defun gnus-agent-insert-meta-information (type &optional method)
   "Insert meta-information into the message that says how it's to be posted.
@@ -436,7 +426,7 @@ be a select method."
 
 (defun gnus-agent-write-servers ()
   "Write the alist of covered servers."
-  (with-temp-file (nnheader-concat gnus-agent-directory "lib/servers")
+  (nnheader-temp-write (nnheader-concat gnus-agent-directory "lib/servers")
     (prin1 gnus-agent-covered-methods (current-buffer))))
 
 ;;;
@@ -526,7 +516,7 @@ the actual number of articles toggled is returned."
     (let* ((gnus-command-method method)
           (file (gnus-agent-lib-file "active")))
       (gnus-make-directory (file-name-directory file))
-      (let ((coding-system-for-write gnus-agent-file-coding-system))
+      (let ((coding-system-for-write gnus-agent-article-file-coding-system))
        (write-region (point-min) (point-max) file nil 'silent))
       (when (file-exists-p (gnus-agent-lib-file "groups"))
        (delete-file (gnus-agent-lib-file "groups"))))))
@@ -535,33 +525,22 @@ the actual number of articles toggled is returned."
   (let* ((gnus-command-method method)
         (file (gnus-agent-lib-file "groups")))
     (gnus-make-directory (file-name-directory file))
-    (let ((coding-system-for-write gnus-agent-file-coding-system))
-      (write-region (point-min) (point-max) file nil 'silent))
+    (write-region (point-min) (point-max) file nil 'silent))
     (when (file-exists-p (gnus-agent-lib-file "active"))
-      (delete-file (gnus-agent-lib-file "active")))))
+      (delete-file (gnus-agent-lib-file "active"))))
 
 (defun gnus-agent-save-group-info (method group active)
   (when (gnus-agent-method-p method)
     (let* ((gnus-command-method method)
-          (file (if nntp-server-list-active-group
-                    (gnus-agent-lib-file "active")
-                  (gnus-agent-lib-file "groups"))))
+          (file (gnus-agent-lib-file "active")))
       (gnus-make-directory (file-name-directory file))
-      (with-temp-file file
-       (when (file-exists-p file)
-         (nnheader-insert-file-contents file))
+      (nnheader-temp-write file
+       (insert-file-contents file)
        (goto-char (point-min))
-       (if nntp-server-list-active-group
-           (progn
-             (when (re-search-forward
-                    (concat "^" (regexp-quote group) " ") nil t)
-               (gnus-delete-line))
-             (insert group " " (number-to-string (cdr active)) " "
-                     (number-to-string (car active)) " y\n"))
-         (when (re-search-forward
-                (concat (regexp-quote group) "\\($\\| \\)") nil t)
-           (gnus-delete-line))
-         (insert-buffer-substring nntp-server-buffer))))))
+       (when (re-search-forward (concat "^" (regexp-quote group) " ") nil t)
+         (gnus-delete-line))
+       (insert group " " (number-to-string (cdr active)) " "
+               (number-to-string (car active)) "\n")))))
 
 (defun gnus-agent-group-path (group)
   "Translate GROUP into a path."
@@ -593,7 +572,7 @@ the actual number of articles toggled is returned."
 (defun gnus-agent-open-history ()
   (save-excursion
     (push (cons (gnus-agent-method)
-               (set-buffer (gnus-get-buffer-create
+               (set-buffer (get-buffer-create
                             (format " *Gnus agent %s history*"
                                     (gnus-agent-method)))))
          gnus-agent-history-buffers)
@@ -608,9 +587,8 @@ the actual number of articles toggled is returned."
   (save-excursion
     (set-buffer gnus-agent-current-history)
     (gnus-make-directory (file-name-directory gnus-agent-file-name))
-    (let ((coding-system-for-write gnus-agent-file-coding-system))
-      (write-region (1+ (point-min)) (point-max)
-                   gnus-agent-file-name nil 'silent))))
+    (write-region (1+ (point-min)) (point-max)
+                 gnus-agent-file-name nil 'silent)))
 
 (defun gnus-agent-close-history ()
   (when (gnus-buffer-live-p gnus-agent-current-history)
@@ -656,7 +634,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))
@@ -666,16 +644,17 @@ the actual number of articles toggled is returned."
       (let ((dir (concat
                  (gnus-agent-directory)
                  (gnus-agent-group-path group) "/"))
-           (date (time-to-days (current-time)))
+           (date (gnus-time-to-day (current-time)))
            (case-fold-search t)
-           pos crosses id elem)
+           pos alists crosses id elem)
        (gnus-make-directory dir)
        (gnus-message 7 "Fetching articles for %s..." group)
        ;; Fetch the articles from the backend.
        (if (gnus-check-backend-function 'retrieve-articles group)
            (setq pos (gnus-retrieve-articles articles group))
-         (with-temp-buffer
-           (let (article)
+         (nnheader-temp-write nil
+           (let ((buf (current-buffer))
+                 article)
              (while (setq article (pop articles))
                (when (gnus-request-article article group)
                  (goto-char (point-max))
@@ -708,7 +687,7 @@ the actual number of articles toggled is returned."
                (setq id "No-Message-ID-in-article")
              (setq id (buffer-substring (match-beginning 1) (match-end 1))))
            (let ((coding-system-for-write
-                  gnus-agent-file-coding-system))
+                  gnus-agent-article-file-coding-system))
              (write-region (point-min) (point-max)
                            (concat dir (number-to-string (caar pos)))
                            nil 'silent))
@@ -735,7 +714,7 @@ the actual number of articles toggled is returned."
              gnus-agent-group-alist))
       (setcdr alist (cons (cons (cdar crosses) t) (cdr alist)))
       (save-excursion
-       (set-buffer (gnus-get-buffer-create (format " *Gnus agent overview %s*"
+       (set-buffer (get-buffer-create (format " *Gnus agent overview %s*"
                                               group)))
        (when (= (point-max) (point-min))
          (push (cons group (current-buffer)) gnus-agent-buffer-alist)
@@ -751,51 +730,58 @@ the actual number of articles toggled is returned."
   (save-excursion
     (while gnus-agent-buffer-alist
       (set-buffer (cdar gnus-agent-buffer-alist))
-      (let ((coding-system-for-write
-            gnus-agent-file-coding-system))
-       (write-region (point-min) (point-max)
-                     (gnus-agent-article-name ".overview"
-                                              (caar gnus-agent-buffer-alist))
-                     nil 'silent))
+      (write-region (point-min) (point-max)
+                   (gnus-agent-article-name ".overview"
+                                            (caar gnus-agent-buffer-alist))
+                    nil 'silent)
       (pop gnus-agent-buffer-alist))
     (while gnus-agent-group-alist
-      (with-temp-file (caar gnus-agent-group-alist)
+      (nnheader-temp-write (caar gnus-agent-group-alist)
        (princ (cdar gnus-agent-group-alist))
        (insert "\n"))
       (pop gnus-agent-group-alist))))
 
-(defun gnus-agent-fetch-headers (group &optional force)
-  (let ((articles (if (gnus-agent-load-alist group)   
-                     (gnus-sorted-intersection
-                      (gnus-list-of-unread-articles group)
-                      (gnus-uncompress-range
-                       (cons (1+ (caar (last gnus-agent-article-alist)))
-                             (cdr (gnus-active group)))))
-                   (gnus-list-of-unread-articles group)))
-       (gnus-decode-encoded-word-function 'identity)
-       (file (gnus-agent-article-name ".overview" group))) 
+(defun gnus-agent-fetch-headers (group articles &optional force)
+  (gnus-agent-load-alist group)
+  ;; Find out what headers we need to retrieve.
+  (when articles
+    (while (and articles
+               (assq (car articles) gnus-agent-article-alist))
+      (pop articles))
+    (let ((arts articles))
+      (while (cdr arts)
+       (if (assq (cadr arts) gnus-agent-article-alist)
+           (setcdr arts (cddr arts))
+         (setq arts (cdr arts)))))
     ;; Fetch them.
-    (gnus-make-directory (nnheader-translate-file-chars
-                         (file-name-directory file)))
     (when articles
       (gnus-message 7 "Fetching headers for %s..." group)
       (save-excursion
-       (set-buffer nntp-server-buffer)
-       (unless (eq 'nov (gnus-retrieve-headers articles group))
-         (nnvirtual-convert-headers))
-       ;; Save these headers for later processing.
-       (copy-to-buffer gnus-agent-overview-buffer (point-min) (point-max))
-       (when (file-exists-p file)
-         (gnus-agent-braid-nov group articles file))
-       (let ((coding-system-for-write
-              gnus-agent-file-coding-system))
-         (write-region (point-min) (point-max) file nil 'silent))
-       (gnus-agent-save-alist group articles nil)
-       (gnus-agent-enter-history
-        "last-header-fetched-for-session"
-        (list (cons group (nth (- (length  articles) 1) articles)))
-        (time-to-days (current-time)))
-       articles))))
+       (set-buffer nntp-server-buffer)
+       (unless (eq 'nov (gnus-retrieve-headers articles group))
+         (nnvirtual-convert-headers))
+       ;;
+       ;; To gnus-agent-expire work fine with no Xref field in .overview 
+       ;; Tatsuya Ichikawa <ichikawa@hv.epson.co.jp>
+       (goto-char (point-min))
+       (while (not (eobp))
+         (goto-char (point-at-eol))
+         (insert "\t")
+         (forward-line 1))
+       ;; Tatsuya Ichikawa <ichikawa@hv.epson.co.jp>
+       ;; To gnus-agent-expire work fine with no Xref field in .overview 
+       ;;
+       ;; Save these headers for later processing.
+       (copy-to-buffer gnus-agent-overview-buffer (point-min) (point-max))
+       (let (file)
+         (when (file-exists-p
+                (setq file (gnus-agent-article-name ".overview" group)))
+           (gnus-agent-braid-nov group articles file))
+         (gnus-make-directory (nnheader-translate-file-chars
+                               (file-name-directory file)))
+         (write-region (point-min) (point-max) file nil 'silent)
+         (gnus-agent-save-alist group articles nil))
+       t))))
 
 (defsubst gnus-agent-copy-nov-line (article)
   (let (b e)
@@ -803,48 +789,47 @@ the actual number of articles toggled is returned."
     (setq b (point))
     (if (eq article (read (current-buffer)))
        (setq e (progn (forward-line 1) (point)))
-      (progn
-       (beginning-of-line)
-       (setq e b)))
+      (setq e b))
     (set-buffer nntp-server-buffer)
     (insert-buffer-substring gnus-agent-overview-buffer b e)))
 
 (defun gnus-agent-braid-nov (group articles file)
-  (set-buffer gnus-agent-overview-buffer)
-  (goto-char (point-min))
-  (set-buffer nntp-server-buffer)
-  (erase-buffer)
-  (nnheader-insert-file-contents file)
-  (goto-char (point-max))
-  (if (or (= (point-min) (point-max))
-         (progn
-           (forward-line -1)
-           (< (read (current-buffer)) (car articles))))
-      ;; We have only headers that are after the older headers,
-      ;; so we just append them.
-      (progn
-       (goto-char (point-max))
-       (insert-buffer-substring gnus-agent-overview-buffer))
-    ;; We do it the hard way.
-    (nnheader-find-nov-line (car articles))
-    (gnus-agent-copy-nov-line (car articles))
-    (pop articles)
-    (while (and articles
-               (not (eobp)))
-      (while (and (not (eobp))
-                 (< (read (current-buffer)) (car articles)))
-       (forward-line 1))
-      (beginning-of-line)
-      (unless (eobp)
-       (gnus-agent-copy-nov-line (car articles))
-       (setq articles (cdr articles))))
-    (when articles
-      (let (b e)
-       (set-buffer gnus-agent-overview-buffer)
-       (setq b (point)
-             e (point-max))
-       (set-buffer nntp-server-buffer)
-       (insert-buffer-substring gnus-agent-overview-buffer b e)))))
+  (let (beg end)
+    (set-buffer gnus-agent-overview-buffer)
+    (goto-char (point-min))
+    (set-buffer nntp-server-buffer)
+    (erase-buffer)
+    (nnheader-insert-file-contents file)
+    (goto-char (point-min))
+    (if (or (= (point-min) (point-max))
+           (progn
+             (forward-line -1)
+             (< (read (current-buffer)) (car articles))))
+       ;; We have only headers that are after the older headers,
+       ;; so we just append them.
+       (progn
+         (goto-char (point-max))
+         (insert-buffer-substring gnus-agent-overview-buffer))
+      ;; We do it the hard way.
+      (nnheader-find-nov-line (car articles))
+      (gnus-agent-copy-nov-line (car articles))
+      (pop articles)
+      (while (and articles
+                 (not (eobp)))
+       (while (and (not (eobp))
+                   (< (read (current-buffer)) (car articles)))
+         (forward-line 1))
+       (beginning-of-line)
+       (unless (eobp)
+         (gnus-agent-copy-nov-line (car articles))
+         (setq articles (cdr articles))))
+      (when articles
+       (let (b e)
+         (set-buffer gnus-agent-overview-buffer)
+         (setq b (point)
+               e (point-max))
+         (set-buffer nntp-server-buffer)
+         (insert-buffer-substring gnus-agent-overview-buffer b e))))))
 
 (defun gnus-agent-load-alist (group &optional dir)
   "Load the article-state alist for GROUP."
@@ -855,10 +840,10 @@ the actual number of articles toggled is returned."
           (gnus-agent-article-name ".agentview" group)))))
 
 (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))
+  "Load the article-state alist for GROUP."
+  (nnheader-temp-write (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))
@@ -903,75 +888,38 @@ the actual number of articles toggled is returned."
 (defun gnus-agent-fetch-group-1 (group method)
   "Fetch GROUP."
   (let ((gnus-command-method method)
-       (gnus-newsgroup-name group)
        gnus-newsgroup-dependencies gnus-newsgroup-headers
        gnus-newsgroup-scored gnus-headers gnus-score
-       gnus-use-cache articles arts
+       gnus-use-cache articles score arts
        category predicate info marks score-param)
     ;; Fetch headers.
     (when (and (or (gnus-active group) (gnus-activate-group group))
-              (setq articles (gnus-agent-fetch-headers group)))
+              (setq articles (gnus-list-of-unread-articles group))
+              (gnus-agent-fetch-headers group articles))
       ;; 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))
       (setq category (gnus-group-category group))
       (setq predicate
            (gnus-get-predicate 
-            (or (gnus-group-get-parameter group 'agent-predicate t)
+            (or (gnus-group-get-parameter group 'agent-predicate)
                 (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.
-       (setq score-param
-             (let ((score-method
-                    (or 
-                     (gnus-group-get-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)))))))
-       (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)
-                              gnus-newsgroup-scored))
-                   gnus-summary-default-score))
-         (when (funcall predicate)
-           (push (mail-header-number gnus-headers)
-                 arts))))
+      (setq score-param
+           (or (gnus-group-get-parameter group 'agent-score)
+               (caddr category)))
+      (when score-param
+       (gnus-score-headers (list (list score-param))))
+      (setq arts nil)
+      (while (setq gnus-headers (pop gnus-newsgroup-headers))
+       (setq gnus-score
+             (or (cdr (assq (mail-header-number gnus-headers)
+                            gnus-newsgroup-scored))
+                 gnus-summary-default-score))
+       (when (funcall predicate)
+         (push (mail-header-number gnus-headers)
+               arts)))
       ;; Fetch the articles.
       (when arts
        (gnus-agent-fetch-articles group arts)))
@@ -982,11 +930,7 @@ the actual number of articles toggled is returned."
       (gnus-agent-fetch-articles
        group (gnus-uncompress-range (cdr arts)))
       (setq marks (delq arts (gnus-info-marks info)))
-      (gnus-info-set-marks info marks)
-      (gnus-dribble-enter
-       (concat "(gnus-group-set-info '"
-              (gnus-prin1-to-string info)
-              ")")))))
+      (gnus-info-set-marks info marks))))
 
 ;;;
 ;;; Agent Category Mode
@@ -1019,8 +963,8 @@ the actual number of articles toggled is returned."
 (defvar gnus-category-buffer "*Agent Category*")
 
 (defvar gnus-category-line-format-alist
-  `((?c gnus-tmp-name ?s)
-    (?g gnus-tmp-groups ?d)))
+  `((?c name ?s)
+    (?g groups ?d)))
 
 (defvar gnus-category-mode-line-format-alist
   `((?u user-defined ?s)))
@@ -1088,7 +1032,7 @@ The following commands are available:
   (gnus-set-default-directory)
   (setq mode-line-process nil)
   (use-local-map gnus-category-mode-map)
-  (buffer-disable-undo)
+  (buffer-disable-undo (current-buffer))
   (setq truncate-lines t)
   (setq buffer-read-only t)
   (gnus-run-hooks 'gnus-category-mode-hook))
@@ -1096,15 +1040,15 @@ The following commands are available:
 (defalias 'gnus-category-position-point 'gnus-goto-colon)
 
 (defun gnus-category-insert-line (category)
-  (let* ((gnus-tmp-name (car category))
-        (gnus-tmp-groups (length (cadddr category))))
+  (let* ((name (car category))
+        (groups (length (cadddr category))))
     (beginning-of-line)
     (gnus-add-text-properties
      (point)
      (prog1 (1+ (point))
        ;; Insert the text.
        (eval gnus-category-line-format-spec))
-     (list 'gnus-category gnus-tmp-name))))
+     (list 'gnus-category name))))
 
 (defun gnus-enter-category-buffer ()
   "Go to the Category buffer."
@@ -1116,7 +1060,8 @@ The following commands are available:
 (defun gnus-category-setup-buffer ()
   (unless (get-buffer gnus-category-buffer)
     (save-excursion
-      (set-buffer (gnus-get-buffer-create gnus-category-buffer))
+      (set-buffer (get-buffer-create gnus-category-buffer))
+      (gnus-add-current-to-buffer-list)
       (gnus-category-mode))))
 
 (defun gnus-category-prepare ()
@@ -1145,7 +1090,7 @@ The following commands are available:
   "Write the category alist."
   (setq gnus-category-predicate-cache nil
        gnus-category-group-cache nil)
-  (with-temp-file (nnheader-concat gnus-agent-directory "lib/categories")
+  (nnheader-temp-write (nnheader-concat gnus-agent-directory "lib/categories")
     (prin1 gnus-category-alist (current-buffer))))
 
 (defun gnus-category-edit-predicate (category)
@@ -1206,7 +1151,7 @@ The following commands are available:
   (interactive "SCategory name: ")
   (when (assq category gnus-category-alist)
     (error "Category %s already exists" category))
-  (push (list category 'false nil nil)
+  (push (list category 'true nil nil)
        gnus-category-alist)
   (gnus-category-write)
   (gnus-category-list))
@@ -1319,14 +1264,14 @@ The following commands are available:
   "Expire all old articles."
   (interactive)
   (let ((methods gnus-agent-covered-methods)
-       (day (- (time-to-days (current-time)) gnus-agent-expire-days))
+       (day (- (gnus-time-to-day (current-time)) gnus-agent-expire-days))
+       (expiry-hashtb (gnus-make-hashtable 1023))
        gnus-command-method sym group articles
        history overview file histories elem art nov-file low info
        unreads marked article)
     (save-excursion
-      (setq overview (gnus-get-buffer-create " *expire overview*"))
+      (setq overview (get-buffer-create " *expire overview*"))
       (while (setq gnus-command-method (pop methods))
-       (let ((expiry-hashtb (gnus-make-hashtable 1023)))
        (gnus-agent-open-history)
        (set-buffer
         (setq gnus-agent-current-history
@@ -1358,19 +1303,19 @@ The following commands are available:
                   info (gnus-get-info group)
                   unreads (ignore-errors (gnus-list-of-unread-articles group))
                   marked (nconc (gnus-uncompress-range
-                                 (cdr (assq 'tick (gnus-info-marks info))))
+                                 (cdr (assq 'ticked (gnus-info-marks info))))
                                 (gnus-uncompress-range
                                  (cdr (assq 'dormant
                                             (gnus-info-marks info)))))
                   nov-file (gnus-agent-article-name ".overview" group))
-            (gnus-agent-load-alist group)
+            (gnus-agent-load-alist group)
             (gnus-message 5 "Expiring articles in %s" group)
             (set-buffer overview)
             (erase-buffer)
             (when (file-exists-p nov-file)
               (nnheader-insert-file-contents nov-file))
             (goto-char (point-min))
-            (setq article 0)
+            (setq article 0)
             (while (setq elem (pop articles))
               (setq article (car elem))
               (when (or (null low)
@@ -1385,7 +1330,7 @@ The following commands are available:
                                 (< art article)))
                   (if (file-exists-p
                        (gnus-agent-article-name
-                        (number-to-string art) group))
+                        (number-to-string article) group))
                       (forward-line 1)
                     ;; Remove old NOV lines that have no articles.
                     (gnus-delete-line)))
@@ -1400,17 +1345,13 @@ The following commands are available:
                   (delete-file file))
                 ;; Schedule the history line for nuking.
                 (push (cdr elem) histories)))
-            (gnus-make-directory (file-name-directory nov-file))
-            (let ((coding-system-for-write
-                   gnus-agent-file-coding-system))
-              (write-region (point-min) (point-max) nov-file nil 'silent))
+            (write-region (point-min) (point-max) nov-file nil 'silent)
             ;; Delete the unwanted entries in the alist.
             (setq gnus-agent-article-alist
                   (sort gnus-agent-article-alist 'car-less-than-car))
             (let* ((alist gnus-agent-article-alist)
                    (prev (cons nil alist))
-                   (first prev)
-                   expired)
+                   (first prev))
               (while (and alist
                           (<= (caar alist) article))
                 (if (or (not (cdar alist))
@@ -1419,36 +1360,11 @@ The following commands are available:
                                (number-to-string
                                 (caar alist))
                                group))))
-                    (progn
-                      (push (caar alist) expired)
-                      (setcdr prev (setq alist (cdr alist))))
+                    (setcdr prev (setq alist (cdr alist)))
                   (setq prev alist
                         alist (cdr alist))))
-              (setq gnus-agent-article-alist (cdr first))
-              (gnus-agent-save-alist group)
-               ;; Mark all articles up to the first article
-              ;; in `gnus-article-alist' as read.
-              (when (and info (caar gnus-agent-article-alist))
-                (setcar (nthcdr 2 info)
-                        (gnus-range-add
-                         (nth 2 info)
-                         (cons 1 (- (caar gnus-agent-article-alist) 1)))))
-              ;; Maybe everything has been expired from `gnus-article-alist'
-              ;; and so the above marking as read could not be conducted,
-              ;; or there are expired article within the range of the alist.
-              (when (and info
-                         expired
-                         (or (not (caar gnus-agent-article-alist))
-                             (> (car expired)
-                                (caar gnus-agent-article-alist))))
-                (setcar (nthcdr 2 info)
-                        (gnus-add-to-range
-                         (nth 2 info)
-                         (nreverse expired))))
-              (gnus-dribble-enter
-               (concat "(gnus-group-set-info '"
-                       (gnus-prin1-to-string info)
-                       ")"))))
+              (setq gnus-agent-article-alist (cdr first)))
+            (gnus-agent-save-alist group))
           expiry-hashtb)
          (set-buffer history)
          (setq histories (nreverse (sort histories '<)))
@@ -1457,7 +1373,7 @@ The following commands are available:
            (gnus-delete-line))
          (gnus-agent-save-history)
          (gnus-agent-close-history))
-       (gnus-message 4 "Expiry...done"))))))
+       (gnus-message 4 "Expiry...done")))))
 
 ;;;###autoload
 (defun gnus-agent-batch ()
index cedbec9..02480f7 100644 (file)
@@ -1,8 +1,9 @@
-;;; gnus-art.el --- article mode commands for Gnus
+;;; gnus-art.el --- article mode commands for Semi-gnus
 ;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: news
+;;         MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Keywords: mail, news, MIME
 
 ;; This file is part of GNU Emacs.
 
 (require 'gnus-spec)
 (require 'gnus-int)
 (require 'browse-url)
-(require 'mm-bodies)
-(require 'mail-parse)
-(require 'mm-decode)
-(require 'mm-view)
-(require 'wid-edit)
-(require 'mm-uu)
+(require 'alist)
+(require 'mime-view)
 
 (defgroup gnus-article nil
   "Article display."
   :group 'gnus-article)
 
 (defcustom gnus-ignored-headers
-  '("^Path:" "^Expires:" "^Date-Received:" "^References:" "^Xref:" "^Lines:"
-    "^Relay-Version:" "^Message-ID:" "^Approved:" "^Sender:" "^Received:"
-    "^X-UIDL:" "^MIME-Version:" "^Return-Path:" "^In-Reply-To:"
-    "^Content-Type:" "^Content-Transfer-Encoding:" "^X-WebTV-Signature:"
-    "^X-MimeOLE:" "^X-MSMail-Priority:" "^X-Priority:" "^X-Loop:"
-    "^X-Authentication-Warning:" "^X-MIME-Autoconverted:" "^X-Face:"
-    "^X-Attribution:" "^X-Originating-IP:" "^Delivered-To:"
-    "^NNTP-[-A-Za-z]+:" "^Distribution:" "^X-no-archive:" "^X-Trace:"
-    "^X-Complaints-To:" "^X-NNTP-Posting-Host:" "^X-Orig.*:"
-    "^Abuse-Reports-To:" "^Cache-Post-Path:" "^X-Article-Creation-Date:"
-    "^X-Poster:" "^X-Mail2News-Path:" "^X-Server-Date:" "^X-Cache:"
-    "^Originator:" "^X-Problems-To:" "^X-Auth-User:" "^X-Post-Time:"
-    "^X-Admin:" "^X-UID:" "^Resent-[-A-Za-z]+:" "^X-Mailing-List:"
-    "^Precedence:" "^Original-[-A-Za-z]+:" "^X-filename:" "^X-Orcpt:"
-    "^Old-Received:" "^X-Pgp-Fingerprint:" "^X-Pgp-Key-Id:"
-    "^X-Pgp-Public-Key-Url:" "^X-Auth:" "^X-From-Line:"
-    "^X-Gnus-Article-Number:" "^X-Majordomo:" "^X-Url:" "^X-Sender:"
-    "^X-Mailing-List:" "^MBOX-Line" "^Priority:" "^X-Pgp" "^X400-[-A-Za-z]+:"
-    "^Status:")
+  '("^Path:" "^Posting-Version:" "^Article-I.D.:" "^Expires:"
+    "^Date-Received:" "^References:" "^Control:" "^Xref:" "^Lines:"
+    "^Posted:" "^Relay-Version:" "^Message-ID:" "^Nf-ID:" "^Nf-From:"
+    "^Approved:" "^Sender:" "^Received:" "^Mail-from:")
   "*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."
@@ -278,6 +260,8 @@ be fed to `format-time-string'."
   :group 'gnus-article-washing)
 
 (eval-and-compile
+  (autoload 'hexl-hex-string-to-integer "hexl")
+  (autoload 'timezone-make-date-arpa-standard "timezone")
   (autoload 'mail-extract-address-components "mail-extr"))
 
 (defcustom gnus-save-all-headers t
@@ -379,6 +363,32 @@ be used as possible file names."
                         (cons :value ("" "") regexp (repeat string))
                         (sexp :value nil))))
 
+(defcustom gnus-strict-mime t
+  "*If nil, MIME-decode even if there is no Mime-Version header."
+  :group 'gnus-article-mime
+  :type 'boolean)
+
+(defcustom gnus-article-display-method-for-mime
+  'gnus-article-display-mime-message
+  "Function to display a MIME message.
+The function is called from the article buffer."
+  :group 'gnus-article-mime
+  :type 'function)
+
+(defcustom gnus-article-display-method-for-encoded-word
+  'gnus-article-display-message-with-encoded-word
+  "*Function to display a message with MIME encoded-words.
+The function is called from the article buffer."
+  :group 'gnus-article-mime
+  :type 'function)
+
+(defcustom gnus-article-display-method-for-traditional
+  'gnus-article-display-traditional-message
+  "*Function to display a traditional message.
+The function is called from the article buffer."
+  :group 'gnus-article-mime
+  :type 'function)
+
 (defcustom gnus-page-delimiter "^\^L"
   "*Regexp describing what to use as article page delimiters.
 The default value is \"^\^L\", which is a form linefeed at the
@@ -386,7 +396,7 @@ beginning of a line."
   :type 'regexp
   :group 'gnus-article-various)
 
-(defcustom gnus-article-mode-line-format "Gnus: %g %S"
+(defcustom gnus-article-mode-line-format "Gnus: %%b %S"
   "*The format specification for the article mode line.
 See `gnus-summary-mode-line-format' for a closer description."
   :type 'string
@@ -446,12 +456,12 @@ Obsolete; use the face `gnus-signature-face' for customizations instead."
 (defface gnus-header-from-face
   '((((class color)
       (background dark))
-     (:foreground "spring green"))
+     (:foreground "spring green" :bold t))
     (((class color)
       (background light))
-     (:foreground "red3"))
+     (:foreground "red3" :bold t))
     (t
-     (:italic t)))
+     (:bold t :italic t)))
   "Face used for displaying from headers."
   :group 'gnus-article-headers
   :group 'gnus-article-highlight)
@@ -459,10 +469,10 @@ Obsolete; use the face `gnus-signature-face' for customizations instead."
 (defface gnus-header-subject-face
   '((((class color)
       (background dark))
-     (:foreground "SeaGreen3"))
+     (:foreground "SeaGreen3" :bold t))
     (((class color)
       (background light))
-     (:foreground "red4"))
+     (:foreground "red4" :bold t))
     (t
      (:bold t :italic t)))
   "Face used for displaying subject headers."
@@ -472,12 +482,12 @@ Obsolete; use the face `gnus-signature-face' for customizations instead."
 (defface gnus-header-newsgroups-face
   '((((class color)
       (background dark))
-     (:foreground "yellow" :italic t))
+     (:foreground "yellow" :bold t :italic t))
     (((class color)
       (background light))
-     (:foreground "MidnightBlue" :italic t))
+     (:foreground "MidnightBlue" :bold t :italic t))
     (t
-     (:italic t)))
+     (:bold t :italic t)))
   "Face used for displaying newsgroups headers."
   :group 'gnus-article-headers
   :group 'gnus-article-highlight)
@@ -533,62 +543,8 @@ displayed by the first non-nil matching CONTENT face."
                               (item :tag "skip" nil)
                               (face :value default)))))
 
-(defcustom gnus-article-decode-hook
-  '(article-decode-charset article-decode-encoded-words)
-  "*Hook run to decode charsets in articles."
-  :group 'gnus-article-headers
-  :type 'hook)
-
-(defcustom gnus-display-mime-function 'gnus-display-mime
-  "Function to display MIME articles."
-  :group 'gnus-article-headers
-  :type 'function)
-
-(defvar gnus-decode-header-function 'mail-decode-encoded-word-region
-  "Function used to decode headers.")
-
-(defvar gnus-article-dumbquotes-map
-  '(("\202" ",")
-    ("\203" "f")
-    ("\204" ",,")
-    ("\205" "...")
-    ("\213" "<")
-    ("\214" "OE")
-    ("\205" "...")
-    ("\221" "`")
-    ("\222" "'")
-    ("\223" "``")
-    ("\224" "''")
-    ("\225" "*")
-    ("\226" "-")
-    ("\227" "-")
-    ("\231" "(TM)")
-    ("\233" ">")
-    ("\234" "oe")
-    ("\264" "'"))
-  "Table for MS-to-Latin1 translation.")
-
-(defcustom gnus-ignored-mime-types nil
-  "List of MIME types that should be ignored by Gnus."
-  :group 'gnus-mime
-  :type '(repeat regexp))
-
-(defcustom gnus-treat-body-highlight-signature t
-  "Highlight the signature."
-  :group 'gnus-article
-  :type '(choice (const :tag "Off" nil)
-                (const :tag "On" t)
-                (const :tag "Last" last)
-                (integer :tag "Less")
-                (sexp :tag "Predicate")))
-
 ;;; Internal variables
 
-(defvar gnus-treatment-function-alist 
-  '((gnus-treat-body-highlight-signature gnus-article-highlight-signature nil)
-    ))
-
-(defvar gnus-article-mime-handle-alist nil)
 (defvar article-lapsed-timer nil)
 (defvar gnus-article-current-summary nil)
 
@@ -632,7 +588,7 @@ Initialized from `text-mode-syntax-table.")
    b e (cons 'article-type (cons type gnus-hidden-properties))))
 
 (defun gnus-article-unhide-text-type (b e type)
-  "Unhide text of TYPE between B and E."
+  "Hide text of TYPE between B and E."
   (remove-text-properties
    b e (cons 'article-type (cons type gnus-hidden-properties)))
   (when (memq 'intangible gnus-hidden-properties)
@@ -711,7 +667,7 @@ always hide."
                             (listp gnus-visible-headers))
                        (mapconcat 'identity gnus-visible-headers "\\|"))))
                (inhibit-point-motion-hooks t)
-               beg)
+               want-list beg)
            ;; First we narrow to just the headers.
            (widen)
            (goto-char (point-min))
@@ -810,7 +766,7 @@ always hide."
             ((eq elem 'date)
              (let ((date (message-fetch-field "date")))
                (when (and date
-                          (< (days-between (current-time-string) date)
+                          (< (gnus-days-between (current-time-string) date)
                              4))
                  (gnus-article-hide-header "date"))))
             ((eq elem 'long-to)
@@ -848,7 +804,7 @@ always hide."
 (defun article-treat-dumbquotes ()
   "Translate M******** sm*rtq**t*s into proper text."
   (interactive)
-  (article-translate-strings gnus-article-dumbquotes-map))
+  (article-translate-characters "\221\222\223\223" "`'\"\""))
 
 (defun article-translate-characters (from to)
   "Translate all characters in the body of the article according to FROM and TO.
@@ -868,19 +824,6 @@ characters to translate to."
          (incf i))
        (translate-region (point) (point-max) x)))))
 
-(defun article-translate-strings (map)
-  "Translate all string in the body of the article according to MAP.
-MAP is an alist where the elements are on the form (\"from\" \"to\")."
-  (save-excursion
-    (goto-char (point-min))
-    (when (search-forward "\n\n" nil t)
-      (let ((buffer-read-only nil)
-           elem)
-       (while (setq elem (pop map))
-         (save-excursion
-           (while (search-forward (car elem) nil t)
-             (replace-match (cadr elem)))))))))
-
 (defun article-treat-overstrike ()
   "Translate overstrikes into bold text."
   (interactive)
@@ -889,7 +832,7 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")."
     (when (search-forward "\n\n" nil t)
       (let ((buffer-read-only nil))
        (while (search-forward "\b" nil t)
-         (let ((next (char-after))
+         (let ((next (following-char))
                (previous (char-after (- (point) 2))))
            ;; We do the boldification/underlining by hiding the
            ;; overstrikes and putting the proper text property
@@ -927,16 +870,13 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")."
          (end-of-line 2))))))
 
 (defun article-remove-cr ()
-  "Translate CRLF pairs into LF, and then CR into LF.."
+  "Remove carriage returns from an article."
   (interactive)
   (save-excursion
     (let ((buffer-read-only nil))
       (goto-char (point-min))
-      (while (search-forward "\r$" nil t)
-       (replace-match "" t t))
-      (goto-char (point-min))
       (while (search-forward "\r" nil t)
-       (replace-match "\n" t t)))))
+       (replace-match "" t t)))))
 
 (defun article-remove-trailing-blank-lines ()
   "Remove all trailing blank lines from the article."
@@ -948,9 +888,7 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")."
        (point)
        (progn
         (while (and (not (bobp))
-                    (looking-at "^[ \t]*$")
-                    (not (gnus-annotation-in-region-p
-                          (point) (gnus-point-at-eol))))
+                    (looking-at "^[ \t]*$"))
           (forward-line -1))
         (forward-line 1)
         (point))))))
@@ -964,13 +902,12 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")."
       (delete-process "article-x-face"))
     (let ((inhibit-point-motion-hooks t)
          (case-fold-search t)
-         from last)
+         from)
       (save-restriction
        (nnheader-narrow-to-headers)
        (setq from (message-fetch-field "from"))
        (goto-char (point-min))
        (while (and gnus-article-x-face-command
-                   (not last)
                    (or force
                        ;; Check whether this face is censored.
                        (not gnus-article-x-face-too-ugly)
@@ -979,12 +916,6 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")."
                                                from))))
                    ;; Has to be present.
                    (re-search-forward "^X-Face: " 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
-         ;; multiple faces really something to encourage?
-         (when (stringp gnus-article-x-face-command)
-           (setq last t))
          ;; We now have the area of the buffer where the X-Face is stored.
          (save-excursion
            (let ((beg (point))
@@ -1005,74 +936,14 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")."
                  (process-send-region "article-x-face" beg end)
                  (process-send-eof "article-x-face"))))))))))
 
-(defun article-decode-mime-words ()
-  "Decode all MIME-encoded words in the article."
-  (interactive)
-  (save-excursion
-    (set-buffer gnus-article-buffer)
-    (let ((inhibit-point-motion-hooks t)
-         buffer-read-only)
-      (mail-decode-encoded-word-region (point-min) (point-max)))))
-
-(defun article-decode-charset (&optional prompt)
-  "Decode charset-encoded text in the article.
-If PROMPT (the prefix), prompt for a coding system to use."
-  (interactive "P")
-  (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))
-            (cte (message-fetch-field "Content-Transfer-Encoding" t))
-            (ctl (and ct (condition-case ()
-                             (mail-header-parse-content-type ct)
-                           (error nil))))
-            (charset (cond
-                      (prompt
-                       (mm-read-coding-system "Charset to decode: "))
-                      (ctl
-                       (mail-content-type-get ctl 'charset))
-                      (gnus-newsgroup-name
-                       (gnus-group-find-parameter
-                        gnus-newsgroup-name 'charset))))
-            buffer-read-only)
-       (goto-char (point-max))
-       (widen)
-       (forward-line 1)
-       (narrow-to-region (point) (point-max))
-       (when (or (not ctl)
-                 (equal (car ctl) "text/plain"))
-         (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."
-  (let ((inhibit-point-motion-hooks t)
-       (buffer-read-only nil))
-    (save-restriction
-      (message-narrow-to-head)
-      (funcall gnus-decode-header-function (point-min) (point-max)))))
-
-(defun article-de-quoted-unreadable (&optional force)
-  "Translate a quoted-printable-encoded article.
-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")))
-      (when (or force
-               (and type (string-match "quoted-printable" (downcase type))))
-       (goto-char (point-min))
-       (search-forward "\n\n" nil 'move)
-       (save-restriction
-         (narrow-to-region (point) (point-max))
-         (quoted-printable-decode-region (point-min) (point-max))
-         (when mm-default-coding-system
-           (mm-decode-body mm-default-coding-system)))))))
+(defun gnus-article-decode-rfc1522 ()
+  "Decode MIME encoded-words in header fields."
+  (let (buffer-read-only)
+    (let ((charset (save-excursion
+                    (set-buffer gnus-summary-buffer)
+                    default-mime-charset)))
+      (eword-decode-header charset)
+      )))
 
 (defun article-hide-pgp (&optional arg)
   "Toggle hiding of any PGP headers and signatures in the current article.
@@ -1087,28 +958,27 @@ always hide."
        (goto-char (point-min))
        ;; Hide the "header".
        (when (search-forward "\n-----BEGIN PGP SIGNED MESSAGE-----\n" nil t)
-         (delete-region (1+ (match-beginning 0)) (match-end 0))
-         ;; PGP 5 and GNU PG add a `Hash: <>' comment, hide that too
-         (when (looking-at "Hash:.*$")
-           (delete-region (point) (1+ (gnus-point-at-eol))))
+         (gnus-article-hide-text-type (1+ (match-beginning 0))
+                                      (match-end 0) 'pgp)
          (setq beg (point))
          ;; Hide the actual signature.
          (and (search-forward "\n-----BEGIN PGP SIGNATURE-----\n" nil t)
               (setq end (1+ (match-beginning 0)))
-              (delete-region
+              (gnus-article-hide-text-type
                end
                (if (search-forward "\n-----END PGP SIGNATURE-----\n" nil t)
                    (match-end 0)
                  ;; Perhaps we shouldn't hide to the end of the buffer
                  ;; if there is no end to the signature?
-                 (point-max))))
+                 (point-max))
+               'pgp))
          ;; Hide "- " PGP quotation markers.
          (when (and beg end)
            (narrow-to-region beg end)
            (goto-char (point-min))
            (while (re-search-forward "^- " nil t)
-             (delete-region
-              (match-beginning 0) (match-end 0)))
+             (gnus-article-hide-text-type
+              (match-beginning 0) (match-end 0) 'pgp))
            (widen))
          (gnus-run-hooks 'gnus-article-hide-pgp-hook))))))
 
@@ -1175,16 +1045,12 @@ always hide."
       (goto-char (point-min))
       (search-forward "\n\n" nil t)
       (while (re-search-forward "^[ \t]+$" nil t)
-       (unless (gnus-annotation-in-region-p
-                (match-beginning 0) (match-end 0))
-         (replace-match "" nil t)))
+       (replace-match "" nil t))
       ;; Then replace multiple empty lines with a single empty line.
       (goto-char (point-min))
       (search-forward "\n\n" nil t)
       (while (re-search-forward "\n\n\n+" nil t)
-       (unless (gnus-annotation-in-region-p
-                (match-beginning 0) (match-end 0))
-         (replace-match "\n\n" t t))))))
+       (replace-match "\n\n" t t)))))
 
 (defun article-strip-leading-space ()
   "Remove all white space from the beginning of the lines in the article."
@@ -1215,32 +1081,42 @@ always hide."
       (while (re-search-forward "^[ \t]*\n" nil t)
        (replace-match "" t t)))))
 
+(defvar mime::preview/content-list)
+(defvar mime::preview-content-info/point-min)
 (defun gnus-article-narrow-to-signature ()
   "Narrow to the signature; return t if a signature is found, else nil."
   (widen)
-  (let ((inhibit-point-motion-hooks t))
-    (when (gnus-article-search-signature)
-      (forward-line 1)
-      ;; Check whether we have some limits to what we consider
-      ;; to be a signature.
-      (let ((limits (if (listp gnus-signature-limit) gnus-signature-limit
-                     (list gnus-signature-limit)))
-           limit limited)
-       (while (setq limit (pop limits))
-         (if (or (and (integerp limit)
-                      (< (- (point-max) (point)) limit))
-                 (and (floatp limit)
-                      (< (count-lines (point) (point-max)) limit))
-                 (and (gnus-functionp limit)
-                      (funcall limit))
-                 (and (stringp limit)
-                      (not (re-search-forward limit nil t))))
-             ()                        ; This limit did not succeed.
-           (setq limited t
-                 limits nil)))
-       (unless limited
-         (narrow-to-region (point) (point-max))
-         t)))))
+  (when (and (boundp 'mime::preview/content-list)
+            mime::preview/content-list)
+    ;; We have a MIMEish article, so we use the MIME data to narrow.
+    (let ((pcinfo (car (last mime::preview/content-list))))
+      (ignore-errors
+       (narrow-to-region
+        (funcall (intern "mime::preview-content-info/point-min") pcinfo)
+        (point-max)))))
+
+  (when (gnus-article-search-signature)
+    (forward-line 1)
+    ;; Check whether we have some limits to what we consider
+    ;; to be a signature.
+    (let ((limits (if (listp gnus-signature-limit) gnus-signature-limit
+                   (list gnus-signature-limit)))
+         limit limited)
+      (while (setq limit (pop limits))
+       (if (or (and (integerp limit)
+                    (< (- (point-max) (point)) limit))
+               (and (floatp limit)
+                    (< (count-lines (point) (point-max)) limit))
+               (and (gnus-functionp limit)
+                    (funcall limit))
+               (and (stringp limit)
+                    (not (re-search-forward limit nil t))))
+           ()                          ; This limit did not succeed.
+         (setq limited t
+               limits nil)))
+      (unless limited
+       (narrow-to-region (point) (point-max))
+       t))))
 
 (defun gnus-article-search-signature ()
   "Search the current buffer for the signature separator.
@@ -1276,7 +1152,7 @@ Put point at the beginning of the signature separator."
           (setq b (point))
         (point-max))
        (setq e (point-max)))
-      (with-temp-buffer
+      (nnheader-temp-write nil
        (insert-buffer-substring gnus-article-buffer b e)
        (require 'url)
        (save-window-excursion
@@ -1317,14 +1193,15 @@ means show, 0 means toggle."
 
 (defun gnus-article-hidden-text-p (type)
   "Say whether the current buffer contains hidden text of type TYPE."
-  (let ((pos (text-property-any (point-min) (point-max) 'article-type type)))
+  (let ((start (point-min))
+       (pos (text-property-any (point-min) (point-max) 'article-type type)))
     (while (and pos
                (not (get-text-property pos 'invisible)))
       (setq pos
            (text-property-any (1+ pos) (point-max) 'article-type type)))
     (if pos
        'hidden
-      nil)))
+      'shown)))
 
 (defun gnus-article-show-hidden-text (type &optional hide)
   "Show all hidden text of type TYPE.
@@ -1398,92 +1275,103 @@ how much time has lapsed since DATE."
 
 (defun article-make-date-line (date type)
   "Return a DATE line of TYPE."
-  (let ((time (condition-case ()
-                 (date-to-time date)
-               (error '(0 0)))))
-    (cond
-     ;; Convert to the local timezone.  We have to slap a
-     ;; `condition-case' round the calls to the timezone
-     ;; functions since they aren't particularly resistant to
-     ;; buggy dates.
-     ((eq type 'local)
-      (let ((tz (car (current-time-zone))))
-       (format "Date: %s %s%04d" (current-time-string time)
-               (if (> tz 0) "+" "-") (abs (/ tz 36)))))
-     ;; Convert to Universal Time.
-     ((eq type 'ut)
-      (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)))))
-                (cond ((< ls 0) (list (1- ms) (+ ls 65536)))
-                      ((> ls 65535) (list (1+ ms) (- ls 65536)))
-                      (t (list ms ls)))))
-             " UT"))
-     ;; Get the original date from the article.
-     ((eq type 'original)
-      (concat "Date: " (if (string-match "\n+$" date)
-                          (substring date 0 (match-beginning 0))
-                        date)))
-     ;; Let the user define the format.
-     ((eq type 'user)
-      (if (gnus-functionp gnus-article-time-format)
-         (funcall gnus-article-time-format time)
-       (concat
-        "Date: "
-        (format-time-string gnus-article-time-format time))))
-     ;; ISO 8601.
-     ((eq type 'iso8601)
+  (cond
+   ;; Convert to the local timezone.  We have to slap a
+   ;; `condition-case' round the calls to the timezone
+   ;; functions since they aren't particularly resistant to
+   ;; buggy dates.
+   ((eq type 'local)
+    (concat "Date: " (condition-case ()
+                        (timezone-make-date-arpa-standard date)
+                      (error date))))
+   ;; Convert to Universal Time.
+   ((eq type 'ut)
+    (concat "Date: "
+           (condition-case ()
+               (timezone-make-date-arpa-standard date nil "UT")
+             (error date))))
+   ;; Get the original date from the article.
+   ((eq type 'original)
+    (concat "Date: " date))
+   ;; Let the user define the format.
+   ((eq type 'user)
+    (if (gnus-functionp gnus-article-time-format)
+       (funcall
+        gnus-article-time-format
+        (ignore-errors
+          (gnus-encode-date
+           (timezone-make-date-arpa-standard
+            date nil "UT"))))
       (concat
        "Date: "
-       (format-time-string "%Y%M%DT%h%m%s" time)))
-     ;; Do an X-Sent lapsed format.
-     ((eq type 'lapsed)
-      ;; If the date is seriously mangled, the timezone functions are
-      ;; liable to bug out, so we ignore all errors.
-      (let* ((now (current-time))
-            (real-time (subtract-time now time))
-            (real-sec (and real-time
-                           (+ (* (float (car real-time)) 65536)
-                              (cadr real-time))))
-            (sec (and real-time (abs real-sec)))
-            num prev)
-       (cond
-        ((null real-time)
-         "X-Sent: Unknown")
-        ((zerop sec)
-         "X-Sent: Now")
-        (t
-         (concat
-          "X-Sent: "
-          ;; This is a bit convoluted, but basically we go
-          ;; through the time units for years, weeks, etc,
-          ;; and divide things to see whether that results
-          ;; in positive answers.
-          (mapconcat
-           (lambda (unit)
-             (if (zerop (setq num (ffloor (/ sec (cdr unit)))))
-                 ;; The (remaining) seconds are too few to
-                 ;; be divided into this time unit.
-                 ""
-               ;; It's big enough, so we output it.
-               (setq sec (- sec (* num (cdr unit))))
-               (prog1
-                   (concat (if prev ", " "") (int-to-string
-                                              (floor num))
-                           " " (symbol-name (car unit))
-                           (if (> num 1) "s" ""))
-                 (setq prev t))))
-           article-time-units "")
-          ;; If dates are odd, then it might appear like the
-          ;; article was sent in the future.
-          (if (> real-sec 0)
-              " ago"
-            " in the future"))))))
-     (t
-      (error "Unknown conversion type: %s" type)))))
+       (format-time-string gnus-article-time-format
+                          (ignore-errors
+                            (gnus-encode-date
+                             (timezone-make-date-arpa-standard
+                              date nil "UT")))))))
+   ;; ISO 8601.
+   ((eq type 'iso8601)
+    (concat
+     "Date: "
+     (format-time-string "%Y%M%DT%h%m%s"
+                        (ignore-errors
+                          (gnus-encode-date
+                           (timezone-make-date-arpa-standard
+                            date nil "UT"))))))
+   ;; Do an X-Sent lapsed format.
+   ((eq type 'lapsed)
+    ;; If the date is seriously mangled, the timezone functions are
+    ;; liable to bug out, so we ignore all errors.
+    (let* ((now (current-time))
+          (real-time
+           (ignore-errors
+             (gnus-time-minus
+              (gnus-encode-date
+               (timezone-make-date-arpa-standard
+                (current-time-string now)
+                (current-time-zone now) "UT"))
+              (gnus-encode-date
+               (timezone-make-date-arpa-standard
+                date nil "UT")))))
+          (real-sec (and real-time
+                         (+ (* (float (car real-time)) 65536)
+                            (cadr real-time))))
+          (sec (and real-time (abs real-sec)))
+          num prev)
+      (cond
+       ((null real-time)
+       "X-Sent: Unknown")
+       ((zerop sec)
+       "X-Sent: Now")
+       (t
+       (concat
+        "X-Sent: "
+        ;; This is a bit convoluted, but basically we go
+        ;; through the time units for years, weeks, etc,
+        ;; and divide things to see whether that results
+        ;; in positive answers.
+        (mapconcat
+         (lambda (unit)
+           (if (zerop (setq num (ffloor (/ sec (cdr unit)))))
+               ;; The (remaining) seconds are too few to
+               ;; be divided into this time unit.
+               ""
+             ;; It's big enough, so we output it.
+             (setq sec (- sec (* num (cdr unit))))
+             (prog1
+                 (concat (if prev ", " "") (int-to-string
+                                            (floor num))
+                         " " (symbol-name (car unit))
+                         (if (> num 1) "s" ""))
+               (setq prev t))))
+         article-time-units "")
+        ;; If dates are odd, then it might appear like the
+        ;; article was sent in the future.
+        (if (> real-sec 0)
+            " ago"
+          " in the future"))))))
+   (t
+    (error "Unknown conversion type: %s" type))))
 
 (defun article-date-local (&optional highlight)
   "Convert the current article date to the local timezone."
@@ -1507,13 +1395,11 @@ function and want to see what the date was before converting."
   (let (deactivate-mark)
     (save-excursion
       (ignore-errors
-       (walk-windows
-        (lambda (w)
-          (set-buffer (window-buffer w))
-          (when (eq major-mode 'gnus-article-mode)
-            (goto-char (point-min))
-            (when (re-search-forward "^X-Sent:" nil t)
-              (article-date-lapsed t)))))))))
+        (when (gnus-buffer-live-p gnus-article-buffer)
+          (set-buffer gnus-article-buffer)
+          (goto-char (point-min))
+          (when (re-search-forward "^X-Sent:" nil t)
+            (article-date-lapsed t)))))))
 
 (defun gnus-start-date-timer (&optional n)
   "Start a timer to update the X-Sent header in the article buffers.
@@ -1523,7 +1409,7 @@ is to run."
   (unless n
     (setq n 1))
   (gnus-stop-date-timer)
-  (setq article-lapsed-timer
+  (setq article-lapsed-timer 
        (nnheader-run-at-time 1 n 'article-update-date-lapsed)))
 
 (defun gnus-stop-date-timer ()
@@ -1599,7 +1485,7 @@ This format is defined by the `gnus-article-time-format' variable."
     (if (not gnus-default-article-saver)
        (error "No default saver is defined")
       ;; !!! Magic!  The saving functions all save
-      ;; `gnus-save-article-buffer' (or so they think), but we
+      ;; `gnus-original-article-buffer' (or so they think), but we
       ;; bind that variable to our save-buffer.
       (set-buffer gnus-article-buffer)
       (let* ((gnus-save-article-buffer save-buffer)
@@ -1733,7 +1619,7 @@ Directory to save to is default to `gnus-article-save-directory'."
        (widen)
        (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)))))
   filename)
 
@@ -1782,8 +1668,7 @@ The directory to save in defaults to `gnus-article-save-directory'."
 (defun gnus-summary-save-in-pipe (&optional command)
   "Pipe this article to subprocess."
   (setq command
-       (cond ((and (eq command 'default)
-                   gnus-last-shell-command)
+       (cond ((eq command 'default)
               gnus-last-shell-command)
              (command command)
              (t (read-string
@@ -1895,8 +1780,6 @@ If variable `gnus-use-long-file-name' is non-nil, it is
      (article-fill . gnus-article-word-wrap)
      article-remove-cr
      article-display-x-face
-     article-de-quoted-unreadable
-     article-mime-decode-quoted-printable
      article-hide-pgp
      article-hide-pem
      article-hide-signature
@@ -1910,9 +1793,6 @@ If variable `gnus-use-long-file-name' is non-nil, it is
      article-date-iso8601
      article-date-original
      article-date-ut
-     article-decode-mime-words
-     article-decode-charset
-     article-decode-encoded-words
      article-date-user
      article-date-lapsed
      article-emphasize
@@ -1925,8 +1805,6 @@ If variable `gnus-use-long-file-name' is non-nil, it is
 
 (put 'gnus-article-mode 'mode-class 'special)
 
-(set-keymap-parent gnus-article-mode-map widget-keymap)
-
 (gnus-define-keys gnus-article-mode-map
   " " gnus-article-goto-next-page
   "\177" gnus-article-goto-prev-page
@@ -1936,6 +1814,10 @@ 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
+  gnus-mouse-2 gnus-article-push-button
+  "\r" gnus-article-press-button
+  "\t" gnus-article-next-button
+  "\M-\t" gnus-article-prev-button
   "e" gnus-article-edit
   "<" beginning-of-buffer
   ">" end-of-buffer
@@ -1961,8 +1843,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
        ["Scroll backwards" gnus-article-goto-prev-page t]
        ["Show summary" gnus-article-show-summary t]
        ["Fetch Message-ID at point" gnus-article-refer-article t]
-       ["Mail to address at point" gnus-article-mail t]
-       ["Send a bug report" gnus-bug t]))
+       ["Mail to address at point" gnus-article-mail t]))
 
     (easy-menu-define
      gnus-article-treatment-menu gnus-article-mode-map ""
@@ -1972,7 +1853,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
        ["Hide citation" gnus-article-hide-citation t]
        ["Treat overstrike" gnus-article-treat-overstrike t]
        ["Remove carriage return" gnus-article-remove-cr t]
-       ["Remove quoted-unreadable" gnus-article-de-quoted-unreadable t]))
+       ))
 
     ;; Note "Commands" menu is defined in gnus-sum.el for consistency
 
@@ -2004,20 +1885,18 @@ commands:
   (setq mode-name "Article")
   (setq major-mode 'gnus-article-mode)
   (make-local-variable 'minor-mode-alist)
+  (unless (assq 'gnus-show-mime minor-mode-alist)
+    (push (list 'gnus-show-mime " MIME") minor-mode-alist))
   (use-local-map gnus-article-mode-map)
   (gnus-update-format-specifications nil 'article-mode)
   (set (make-local-variable 'page-delimiter) gnus-page-delimiter)
-  (make-local-variable 'gnus-page-broken)
-  (make-local-variable 'gnus-button-marker-list)
-  (make-local-variable 'gnus-article-current-summary)
-  (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-page-broken) 
+  (make-local-variable 'gnus-button-marker-list) 
+  (make-local-variable 'gnus-article-current-summary) 
   (gnus-set-default-directory)
-  (buffer-disable-undo)
+  (buffer-disable-undo (current-buffer))
   (setq buffer-read-only t)
   (set-syntax-table gnus-article-mode-syntax-table)
-  (mm-enable-multibyte)
   (gnus-run-hooks 'gnus-article-mode-hook))
 
 (defun gnus-article-setup-buffer ()
@@ -2030,7 +1909,6 @@ commands:
                         (substring name (match-end 0))))))
     (setq gnus-article-buffer name)
     (setq gnus-original-article-buffer original)
-    (setq gnus-article-mime-handle-alist nil)
     ;; This might be a variable local to the summary buffer.
     (unless gnus-single-article-buffer
       (save-excursion
@@ -2040,23 +1918,25 @@ commands:
        (gnus-set-global-variables)))
     ;; Init original article buffer.
     (save-excursion
-      (set-buffer (gnus-get-buffer-create gnus-original-article-buffer))
-      (mm-enable-multibyte)
+      (set-buffer (get-buffer-create gnus-original-article-buffer))
+      (buffer-disable-undo (current-buffer))
       (setq major-mode 'gnus-original-article-mode)
+      (gnus-add-current-to-buffer-list)
       (make-local-variable 'gnus-original-article))
     (if (get-buffer name)
        (save-excursion
          (set-buffer name)
-         (buffer-disable-undo)
+         (buffer-disable-undo (current-buffer))
          (setq buffer-read-only t)
+         (gnus-add-current-to-buffer-list)
          (unless (eq major-mode 'gnus-article-mode)
            (gnus-article-mode))
          (current-buffer))
       (save-excursion
-       (set-buffer (gnus-get-buffer-create name))
+       (set-buffer (get-buffer-create name))
+       (gnus-add-current-to-buffer-list)
        (gnus-article-mode)
        (make-local-variable 'gnus-summary-buffer)
-       (gnus-summary-set-local-parameters gnus-newsgroup-name)
        (current-buffer)))))
 
 ;; Set article window start at LINE, where LINE is the number of lines
@@ -2074,6 +1954,50 @@ commands:
        (forward-line line)
        (point)))))
 
+;;; @@ article filters
+;;;
+
+(defun gnus-article-display-mime-message ()
+  "Article display method for MIME message."
+  (make-local-variable 'mime-button-mother-dispatcher)
+  (setq mime-button-mother-dispatcher
+       (function gnus-article-push-button))
+  (let ((default-mime-charset
+         (save-excursion
+           (set-buffer gnus-summary-buffer)
+           default-mime-charset))
+       )
+    (mime-display-message mime-message-structure
+                         gnus-article-buffer nil gnus-article-mode-map)
+    )
+  (run-hooks 'gnus-mime-article-prepare-hook)
+  )
+
+(defun gnus-article-display-traditional-message ()
+  "Article display method for traditional message."
+  (set-buffer gnus-article-buffer)
+  (let (buffer-read-only)
+    (erase-buffer)
+    (insert-buffer-substring gnus-original-article-buffer)
+    ))
+
+(defun gnus-article-display-message-with-encoded-word ()
+  "Article display method for message with encoded-words."
+  (let ((charset (save-excursion
+                  (set-buffer gnus-summary-buffer)
+                  default-mime-charset)))
+    (gnus-article-display-traditional-message)
+    (let (buffer-read-only)
+      (eword-decode-header charset)
+      (goto-char (point-min))
+      (if (search-forward "\n\n" nil t)
+         (decode-mime-charset-region (match-end 0) (point-max) charset))
+      )
+    (mime-maybe-hide-echo-buffer)
+    )
+  (gnus-run-hooks 'gnus-mime-article-prepare-hook)
+  )
+
 (defun gnus-article-prepare (article &optional all-headers header)
   "Prepare ARTICLE in article mode buffer.
 ARTICLE should either be an article number or a Message-ID.
@@ -2086,12 +2010,12 @@ If ALL-HEADERS is non-nil, no headers are hidden."
     (setq gnus-summary-buffer (current-buffer))
     (let* ((gnus-article (if header (mail-header-number header) article))
           (summary-buffer (current-buffer))
-          (gnus-tmp-internal-hook gnus-article-internal-prepare-hook)
+          (internal-hook gnus-article-internal-prepare-hook)
           (group gnus-newsgroup-name)
           result)
       (save-excursion
        (gnus-article-setup-buffer)
-       (set-buffer gnus-article-buffer)
+       (set-buffer gnus-original-article-buffer)
        ;; Deactivate active regions.
        (when (and (boundp 'transient-mark-mode)
                   transient-mark-mode)
@@ -2113,10 +2037,9 @@ 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
+                   (gnus-error 1 
                     "No such article (may have expired or been canceled)")))))
-         (if (or (eq result 'pseudo)
-                 (eq result 'nneething))
+         (if (or (eq result 'pseudo) (eq result 'nneething))
              (progn
                (save-excursion
                  (set-buffer summary-buffer)
@@ -2149,12 +2072,7 @@ If ALL-HEADERS is non-nil, no headers are hidden."
                (unless (vectorp gnus-current-headers)
                  (setq gnus-current-headers nil))
                (gnus-summary-goto-subject gnus-current-article)
-               (when (gnus-summary-show-thread)
-                 ;; If the summary buffer really was folded, the
-                 ;; previous goto may not actually have gone to
-                 ;; the right article, but the thread root instead.
-                 ;; So we go again.
-                 (gnus-summary-goto-subject gnus-current-article))
+               (gnus-summary-show-thread)
                (gnus-run-hooks 'gnus-mark-article-hook)
                (gnus-set-mode-line 'summary)
                (when (gnus-visual-p 'article-highlight 'highlight)
@@ -2167,7 +2085,25 @@ If ALL-HEADERS is non-nil, no headers are hidden."
                      (or all-headers gnus-show-all-headers))))
            (when (or (numberp article)
                      (stringp article))
-             (gnus-article-prepare-display)
+             (let ((method
+                    (if gnus-show-mime
+                        (progn
+                          (mime-parse-buffer)
+                          (if (or (not gnus-strict-mime)
+                                  (mime-fetch-field "MIME-Version"))
+                              gnus-article-display-method-for-mime
+                            gnus-article-display-method-for-encoded-word))
+                      gnus-article-display-method-for-traditional)))
+               ;; Hooks for getting information from the article.
+               ;; This hook must be called before being narrowed.
+               (gnus-run-hooks 'internal-hook)
+               (gnus-run-hooks 'gnus-article-prepare-hook)
+               ;; Display message.
+               (funcall method)
+               ;; Associate this article with the current summary buffer.
+               (setq gnus-article-current-summary summary-buffer)
+               ;; Perform the article display hooks.
+               (gnus-run-hooks 'gnus-article-display-hook))
              ;; Do page break.
              (goto-char (point-min))
              (setq gnus-page-broken
@@ -2177,350 +2113,8 @@ If ALL-HEADERS is non-nil, no headers are hidden."
            (gnus-set-mode-line 'article)
            (gnus-configure-windows 'article)
            (goto-char (point-min))
-           (search-forward "\n\n" nil t)
-           (set-window-point (get-buffer-window (current-buffer)) (point))
            t))))))
 
-(defun gnus-article-prepare-display ()
-  "Make the current buffer look like a nice article."
-  ;; Hooks for getting information from the article.
-  ;; This hook must be called before being narrowed.
-  (let ((gnus-article-buffer (current-buffer))
-       buffer-read-only)
-    (unless (eq major-mode 'gnus-article-mode)
-      (gnus-article-mode))
-    (setq buffer-read-only nil)
-    (gnus-run-hooks 'gnus-tmp-internal-hook)
-    (gnus-run-hooks 'gnus-article-prepare-hook)
-    (when gnus-display-mime-function
-      (let ((url-standalone-mode (not gnus-plugged)))
-       (funcall gnus-display-mime-function)))
-    ;; Perform the article display hooks.
-    (gnus-run-hooks 'gnus-article-display-hook)))
-
-;;;
-;;; Gnus MIME viewing functions
-;;;
-
-(defvar gnus-mime-button-line-format "%{%([%p. %t%d%n]%)%}%e\n"
-  "The following specs can be used:
-%t  The MIME type
-%n  The `name' parameter
-%d  The description, if any
-%l  The length of the encoded part
-%p  The part identifier
-%e  Dots if the part isn't displayed")
-
-(defvar gnus-mime-button-line-format-alist
-  '((?t gnus-tmp-type ?s)
-    (?n gnus-tmp-name ?s)
-    (?d gnus-tmp-description ?s)
-    (?p gnus-tmp-id ?s)
-    (?l gnus-tmp-length ?d)
-    (?e gnus-tmp-dots ?s)))
-
-(defvar gnus-mime-button-commands
-  '((gnus-article-press-button "\r"    "Toggle Display")
-    ;(gnus-mime-view-part      "\M-\r" "View Interactively...")
-    (gnus-mime-view-part       "v"     "View Interactively...")
-    (gnus-mime-save-part       "o"     "Save...")
-    (gnus-mime-copy-part       "c"     "View In Buffer")
-    (gnus-mime-inline-part     "i"     "View Inline")
-    (gnus-mime-pipe-part       "|"     "Pipe To Command...")))
-
-(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-mouse-3 'gnus-mime-button-menu)
-  (mapcar (lambda (c)
-           (define-key gnus-mime-button-map (cadr c) (car c)))
-         gnus-mime-button-commands))
-
-(defun gnus-mime-button-menu (event)
-  "Construct a context-sensitive menu of MIME commands."
-  (interactive "e")
-  (let ((response (x-popup-menu 
-                  t `("MIME Part" 
-                      ("" ,@(mapcar (lambda (c)
-                                      (cons (caddr c) (car c)))
-                                    gnus-mime-button-commands)))))
-        (pos (event-start event)))
-    (when response
-      (set-buffer (window-buffer (posn-window pos)))
-      (goto-char (posn-point pos))
-      (funcall response))))
-
-(defun gnus-mime-view-all-parts ()
-  "View all the MIME parts."
-  (interactive)
-  (let ((handles gnus-article-mime-handles))
-    (while handles
-      (mm-display-part (pop handles)))))
-
-(defun gnus-mime-save-part ()
-  "Save the MIME part under point."
-  (interactive)
-  (let ((data (get-text-property (point) 'gnus-data)))
-    (mm-save-part data)))
-
-(defun gnus-mime-pipe-part ()
-  "Pipe the MIME part under point to a process."
-  (interactive)
-  (let ((data (get-text-property (point) 'gnus-data)))
-    (mm-pipe-part data)))
-
-(defun gnus-mime-view-part ()
-  "Interactively choose a view method for the MIME part under point."
-  (interactive)
-  (let ((data (get-text-property (point) 'gnus-data))
-       (url-standalone-mode (not gnus-plugged)))
-    (mm-interactively-view-part data)))
-
-(defun gnus-mime-copy-part ()
-  "Put the the MIME part under point into a new buffer."
-  (interactive)
-  (let* ((handle (get-text-property (point) 'gnus-data))
-        (contents (mm-get-part handle))
-        (buffer (generate-new-buffer
-                      (file-name-nondirectory
-                       (or
-                        (mail-content-type-get (mm-handle-type handle) 'name)
-                        (mail-content-type-get (mm-handle-type handle)
-                                               'filename)
-                        "*decoded*")))))
-    (switch-to-buffer buffer)
-    (insert contents)
-    (normal-mode)
-    (goto-char (point-min))))
-
-(defun gnus-mime-inline-part ()
-  "Insert the MIME part under point into the current buffer."
-  (interactive)
-  (let* ((data (get-text-property (point) 'gnus-data))
-        (contents (mm-get-part data))
-        (url-standalone-mode (not gnus-plugged))
-        (b (point))
-        buffer-read-only)
-    (if (mm-handle-undisplayer data)
-       (mm-remove-part data)
-      (forward-line 2)
-      (mm-insert-inline data contents)
-      (goto-char b))))
-
-(defun gnus-article-view-part (n)
-  "View MIME part N, which is the numerical prefix."
-  (interactive "p")
-  (save-current-buffer
-    (set-buffer gnus-article-buffer)
-    (when (> n (length gnus-article-mime-handle-alist))
-      (error "No such part"))
-    (let ((handle (cdr (assq n gnus-article-mime-handle-alist))))
-      (gnus-article-goto-part n)
-      (if (equal (car handle) "multipart/alternative")
-         (gnus-article-press-button)
-       (when (eq (gnus-mm-display-part handle) 'internal)
-         (gnus-set-window-start))))))
-
-(defun gnus-mm-display-part (handle)
-  "Display HANDLE and fix MIME button."
-  (let ((id (get-text-property (point) 'gnus-part))
-       (point (point))
-       buffer-read-only)
-    (delete-region (gnus-point-at-bol) (progn (forward-line 1) (point)))
-    (gnus-insert-mime-button
-     handle id (list (not (mm-handle-displayed-p handle))))
-    (prog1
-       (let ((window (selected-window)))
-         (save-excursion
-           (unwind-protect
-               (progn
-                 (select-window (get-buffer-window (current-buffer) t))
-                 (mm-display-part handle))
-             (select-window window))))
-      (goto-char point))))
-
-(defun gnus-article-goto-part (n)
-  "Go to MIME part N."
-  (goto-char (text-property-any (point-min) (point-max) 'gnus-part n)))
-
-(defun gnus-insert-mime-button (handle gnus-tmp-id &optional displayed)
-  (let ((gnus-tmp-name (mail-content-type-get (mm-handle-type handle) 'name))
-       (gnus-tmp-type (car (mm-handle-type handle)))
-       (gnus-tmp-description (mm-handle-description handle))
-       (gnus-tmp-dots
-        (if (if displayed (car displayed)
-              (mm-handle-displayed-p handle))
-            "" "..."))
-       (gnus-tmp-length (save-excursion
-                          (set-buffer (mm-handle-buffer handle))
-                          (buffer-size)))
-       b e)
-    (setq gnus-tmp-name
-         (if gnus-tmp-name
-             (concat " (" gnus-tmp-name ")")
-           ""))
-    (setq gnus-tmp-description
-         (if gnus-tmp-description
-             (concat " (" gnus-tmp-description ")")
-           ""))
-    (setq b (point))
-    (gnus-eval-format
-     gnus-mime-button-line-format gnus-mime-button-line-format-alist
-     `(local-map ,gnus-mime-button-map
-                keymap ,gnus-mime-button-map
-                gnus-callback gnus-mm-display-part
-                gnus-part ,gnus-tmp-id
-                article-type annotation
-                gnus-data ,handle))
-    (setq e (point))
-    (widget-convert-button 'link b e :action 'gnus-widget-press-button
-                          :button-keymap gnus-mime-button-map)))
-
-(defun gnus-widget-press-button (elems el)
-  (goto-char (widget-get elems :from))
-  (let ((url-standalone-mode (not gnus-plugged)))
-    (gnus-article-press-button)))
-
-(defun gnus-display-mime (&optional ihandles)
-  "Insert MIME buttons in the buffer."
-  (let* ((handles (or ihandles (mm-dissect-buffer) (mm-uu-dissect)))
-        handle name type b e display)
-    (when handles
-      (unless ihandles
-       ;; Top-level call; we clean up.
-       (mm-destroy-parts gnus-article-mime-handles)
-       (setq gnus-article-mime-handles handles
-             gnus-article-mime-handle-alist nil)
-       (goto-char (point-min))
-       (search-forward "\n\n" nil t)
-       (delete-region (point) (point-max)))
-      (if (stringp (car handles))
-         (if (equal (car handles) "multipart/alternative")
-             (let ((id (1+ (length gnus-article-mime-handle-alist))))
-               (push (cons id handles) gnus-article-mime-handle-alist)
-               (gnus-mime-display-alternative (cdr handles) nil nil id))
-           (gnus-mime-display-mixed (cdr handles)))
-       (gnus-mime-display-single handles)))))
-
-(defun gnus-mime-display-mixed (handles)
-  (let (handle)
-    (while (setq handle (pop handles))
-      (if (stringp (car handle))
-         (if (equal (car handle) "multipart/alternative")
-             (let ((id (1+ (length gnus-article-mime-handle-alist))))
-               (push (cons id handle) gnus-article-mime-handle-alist)
-               (gnus-mime-display-alternative (cdr handle) nil nil id))
-           (gnus-mime-display-mixed (cdr handle)))
-       (gnus-mime-display-single handle)))))
-
-(defun gnus-mime-display-single (handle)
-  (let ((type (car (mm-handle-type handle)))
-       (ignored gnus-ignored-mime-types)
-       display text)
-    (catch 'ignored
-      (progn
-       (while ignored
-         (when (string-match (pop ignored) type)
-           (throw 'ignored nil)))
-       (if (and (mm-automatic-display-p type)
-                  (mm-inlinable-part-p type)
-                  (or (not (mm-handle-disposition handle))
-                      (equal (car (mm-handle-disposition handle))
-                             "inline")))
-           (setq display t)
-         (when (equal (car (split-string type "/"))
-                      "text")
-           (setq text t)))
-       (let ((id (1+ (length gnus-article-mime-handle-alist))))
-         (push (cons id handle) gnus-article-mime-handle-alist)
-         (gnus-insert-mime-button handle id (list (or display text))))
-       (insert "\n\n")
-       (cond
-        (display
-         (forward-line -2)
-         (mm-display-part handle t)
-         (goto-char (point-max)))
-        (text
-         (forward-line -2)
-         (insert "\n")
-         (mm-insert-inline handle (mm-get-part handle))
-         (goto-char (point-max))))))))
-
-(defun gnus-mime-display-alternative (handles &optional preferred ibegend id)
-  (let* ((preferred (mm-preferred-alternative handles preferred))
-        (ihandles handles)
-        (point (point))
-        handle buffer-read-only from props begend not-pref)
-    (save-restriction
-      (when ibegend
-       (narrow-to-region (car ibegend) (cdr ibegend))
-       (delete-region (point-min) (point-max))
-       (mm-remove-parts handles))
-      (setq begend (list (point-marker)))
-      ;; Do the toggle.
-      (unless (setq not-pref (cadr (member preferred ihandles)))
-       (setq not-pref (car ihandles)))
-      (gnus-add-text-properties
-       (setq from (point))
-       (progn
-        (insert (format "%d.  " id))
-        (point))
-       `(gnus-callback
-        (lambda (handles)
-          (gnus-mime-display-alternative
-           ',ihandles ,(if (stringp (car not-pref))
-                           (car not-pref)
-                         (car (mm-handle-type not-pref)))
-           ',begend ,id))
-        local-map ,gnus-mime-button-map
-        ,gnus-mouse-face-prop ,gnus-article-mouse-face
-        face ,gnus-article-button-face
-        keymap ,gnus-mime-button-map
-        gnus-part ,id
-        gnus-data ,handle))
-      (widget-convert-button 'link from (point)
-                            :action 'gnus-widget-press-button
-                            :button-keymap gnus-widget-button-keymap)
-      ;; Do the handles
-      (while (setq handle (pop handles))
-       (gnus-add-text-properties
-        (setq from (point))
-        (progn
-          (insert (format "[%c] %-18s"
-                          (if (equal handle preferred) ?* ? )
-                          (if (stringp (car handle))
-                              (car handle)
-                            (car (mm-handle-type handle)))))
-          (point))
-        `(gnus-callback
-          (lambda (handles)
-            (gnus-mime-display-alternative
-             ',ihandles ,(if (stringp (car handle))
-                             (car handle)
-                           (car (mm-handle-type handle)))
-             ',begend ,id))
-          local-map ,gnus-mime-button-map
-          ,gnus-mouse-face-prop ,gnus-article-mouse-face
-          face ,gnus-article-button-face
-          keymap ,gnus-mime-button-map
-          gnus-part ,id
-          gnus-data ,handle))
-       (widget-convert-button 'link from (point)
-                              :action 'gnus-widget-press-button
-                              :button-keymap gnus-widget-button-keymap)
-       (insert "  "))
-      (insert "\n\n")
-      (when preferred
-       (if (stringp (car preferred))
-           (gnus-display-mime preferred)
-         (mm-display-part preferred)
-         (goto-char (point-max))
-         (setcdr begend (point-marker)))))
-    (when ibegend
-      (goto-char point))))
-
 (defun gnus-article-wash-status ()
   "Return a string which display status of article washing."
   (save-excursion
@@ -2532,18 +2126,18 @@ If ALL-HEADERS is non-nil, no headers are hidden."
          (pem (gnus-article-hidden-text-p 'pem))
          (signature (gnus-article-hidden-text-p 'signature))
          (overstrike (gnus-article-hidden-text-p 'overstrike))
-         (emphasis (gnus-article-hidden-text-p 'emphasis)))
-      (format "%c%c%c%c%c%c"
+         (emphasis (gnus-article-hidden-text-p 'emphasis))
+         (mime gnus-show-mime))
+      (format "%c%c%c%c%c%c%c"
              (if cite ?c ? )
              (if (or headers boring) ?h ? )
              (if (or pgp pem) ?p ? )
              (if signature ?s ? )
              (if overstrike ?o ? )
+             (if mime ?m ? )
              (if emphasis ?e ? )))))
 
-(fset 'gnus-article-hide-headers-if-wanted 'gnus-article-maybe-hide-headers)
-
-(defun gnus-article-maybe-hide-headers ()
+(defun gnus-article-hide-headers-if-wanted ()
   "Hide unwanted headers if `gnus-have-all-headers' is nil.
 Provided for backwards compatibility."
   (or (save-excursion (set-buffer gnus-summary-buffer) gnus-have-all-headers)
@@ -2555,7 +2149,7 @@ Provided for backwards compatibility."
 (defun gnus-output-to-file (file-name)
   "Append the current article to a file named FILE-NAME."
   (let ((artbuf (current-buffer)))
-    (with-temp-buffer
+    (nnheader-temp-write nil
       (insert-buffer-substring artbuf)
       ;; Append newline at end of the buffer as separator, and then
       ;; save it to file.
@@ -2792,7 +2386,7 @@ If given a prefix, show the hidden text instead."
   (gnus-article-hide-signature arg))
 
 (defun gnus-article-maybe-highlight ()
-  "Do some article highlighting if article highlighting is requested."
+  "Do some article highlighting if `article-visual' is non-nil."
   (when (gnus-visual-p 'article-highlight 'highlight)
     (gnus-article-highlight-some)))
 
@@ -2805,7 +2399,7 @@ If given a prefix, show the hidden text instead."
 
 (defun gnus-request-article-this-buffer (article group)
   "Get an article and insert it into this buffer."
-  (let (do-update-line sparse-header)
+  (let (do-update-line)
     (prog1
        (save-excursion
          (erase-buffer)
@@ -2839,7 +2433,7 @@ If given a prefix, show the hidden text instead."
                    (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)))
+                     (gnus-read-header article))
                    (setq gnus-newsgroup-sparse
                          (delq article gnus-newsgroup-sparse)))
                   ((vectorp header)
@@ -2854,11 +2448,8 @@ If given a prefix, show the hidden text instead."
                               gnus-newsgroup-name)))
                  (when (and (eq (car method) 'nneething)
                             (vectorp header))
-                   (let ((dir (concat
-                               (file-name-as-directory
-                                (or (cadr (assq 'nneething-address method))
-                                    (nth 1 method)))
-                               (mail-header-subject header))))
+                   (let ((dir (concat (file-name-as-directory (nth 1 method))
+                                      (mail-header-subject header))))
                      (when (file-directory-p dir)
                        (setq article 'nneething)
                        (gnus-group-enter-directory dir))))))))
@@ -2874,15 +2465,6 @@ If given a prefix, show the hidden text instead."
                            (assq article gnus-newsgroup-reads)))
                     gnus-canceled-mark))
            nil)
-          ;; We first check `gnus-original-article-buffer'.
-          ((and (get-buffer gnus-original-article-buffer)
-                (numberp article)
-                (save-excursion
-                  (set-buffer gnus-original-article-buffer)
-                  (and (equal (car gnus-original-article) group)
-                       (eq (cdr gnus-original-article) article))))
-           (insert-buffer-substring gnus-original-article-buffer)
-           'article)
           ;; Check the backlog.
           ((and gnus-keep-backlog
                 (gnus-backlog-request-article group article (current-buffer)))
@@ -2916,38 +2498,13 @@ If given a prefix, show the hidden text instead."
           ;; It was a pseudo.
           (t article)))
 
-      ;; Associate this article with the current summary buffer.
-      (setq gnus-article-current-summary gnus-summary-buffer)
-
-      ;; Take the article from the original article buffer
-      ;; and place it in the buffer it's supposed to be in.
-      (when (and (get-buffer gnus-article-buffer)
-                (equal (buffer-name (current-buffer))
-                       (buffer-name (get-buffer gnus-article-buffer))))
-       (save-excursion
-         (if (get-buffer gnus-original-article-buffer)
-             (set-buffer gnus-original-article-buffer)
-           (set-buffer (gnus-get-buffer-create gnus-original-article-buffer))
-           (buffer-disable-undo)
-           (setq major-mode 'gnus-original-article-mode)
-           (setq buffer-read-only t))
-         (let (buffer-read-only)
-           (erase-buffer)
-           (insert-buffer-substring gnus-article-buffer))
-         (setq gnus-original-article (cons group article)))
-
-       ;; Decode charsets.
-       (run-hooks 'gnus-article-decode-hook)
-       ;; Mark article as decoded or not.
-       (setq gnus-article-decoded-p gnus-article-decode-hook))
-
       ;; Update sparse articles.
       (when (and do-update-line
                 (or (numberp article)
                     (stringp article)))
        (let ((buf (current-buffer)))
          (set-buffer gnus-summary-buffer)
-         (gnus-summary-update-article do-update-line sparse-header)
+         (gnus-summary-update-article do-update-line)
          (gnus-summary-goto-subject do-update-line nil t)
          (set-window-point (get-buffer-window (current-buffer) t)
                            (point))
@@ -2966,10 +2523,8 @@ If given a prefix, show the hidden text instead."
 
 (defvar gnus-article-edit-mode-map nil)
 
-;; Should we be using derived.el for this?
 (unless gnus-article-edit-mode-map
-  (setq gnus-article-edit-mode-map (make-sparse-keymap))
-  (set-keymap-parent gnus-article-edit-mode-map text-mode-map)
+  (setq gnus-article-edit-mode-map (copy-keymap text-mode-map))
 
   (gnus-define-keys gnus-article-edit-mode-map
     "\C-c\C-c" gnus-article-edit-done
@@ -3016,7 +2571,6 @@ groups."
   (let ((winconf (current-window-configuration)))
     (set-buffer gnus-article-buffer)
     (gnus-article-edit-mode)
-    (gnus-article-delete-text-of-type 'annotation)
     (gnus-set-text-properties (point-min) (point-max) nil)
     (gnus-configure-windows 'edit-article)
     (setq gnus-article-edit-done-function exit-func)
@@ -3055,19 +2609,7 @@ groups."
     (save-excursion
       (set-buffer buf)
       (let ((buffer-read-only nil))
-       (funcall func arg))
-      ;; 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)))
-      ;; Flush original article as well.
-      (save-excursion
-       (when (get-buffer gnus-original-article-buffer)
-         (set-buffer gnus-original-article-buffer)
-         (setq gnus-original-article nil)))
-      (when gnus-use-cache
-       (gnus-cache-update-article
-        (car gnus-article-current) (cdr gnus-article-current))))
+       (funcall func arg)))
     (set-buffer buf)
     (set-window-start (get-buffer-window buf) start)
     (set-window-point (get-buffer-window buf) (point))))
@@ -3084,12 +2626,25 @@ groups."
     (insert buf)
     (let ((winconf gnus-prev-winconf))
       (gnus-article-mode)
+      ;; The cache and backlog have to be flushed somewhat.
+      (when gnus-use-cache
+       (gnus-cache-update-article
+        (car gnus-article-current) (cdr gnus-article-current)))
+      (when gnus-keep-backlog
+       (gnus-backlog-remove-article
+        (car gnus-article-current) (cdr gnus-article-current)))
+      ;; Flush original article as well.
+      (save-excursion
+       (when (get-buffer gnus-original-article-buffer)
+         (set-buffer gnus-original-article-buffer)
+         (setq gnus-original-article nil)))
       (set-window-configuration winconf)
       ;; Tippy-toe some to make sure that point remains where it was.
-      (save-current-buffer
+      (let ((buf (current-buffer)))
        (set-buffer curbuf)
        (set-window-start (get-buffer-window (current-buffer)) window-start)
-       (goto-char p)))))
+       (goto-char p)
+       (set-buffer buf)))))
 
 (defun gnus-article-edit-full-stops ()
   "Interactively repair spacing at end of sentences."
@@ -3114,9 +2669,9 @@ groups."
   :type 'regexp)
 
 (defcustom gnus-button-alist
-  `(("<\\(url:[>\n\t ]*?\\)?news:[>\n\t ]*\\([^>\n\t ]*@[^)!;:,>\n\t ]*\\)>"
-     0 t gnus-button-message-id 2)
-    ("\\bnews:\\([^>\n\t ]*@[^>)!;:,\n\t ]*\\)" 0 t gnus-button-message-id 1)
+  `(("<\\(url:[>\n\t ]*?\\)?news:[>\n\t ]*\\([^>\n\t ]*@[^>\n\t ]*\\)>" 0 t
+     gnus-button-message-id 2)
+    ("\\bnews:\\([^>\n\t ]*@[^>\n\t ]*\\)" 0 t gnus-button-message-id 1)
     ("\\(\\b<\\(url:[>\n\t ]*\\)?news:[>\n\t ]*\\(//\\)?\\([^>\n\t ]*\\)>\\)"
      1 t
      gnus-button-fetch-group 4)
@@ -3124,7 +2679,7 @@ groups."
     ("\\bin\\( +article\\| +message\\)? +\\(<\\([^\n @<>]+@[^\n @<>]+\\)>\\)" 2
      t gnus-button-message-id 3)
     ("\\(<URL: *\\)mailto: *\\([^> \n\t]+\\)>" 0 t gnus-url-mailto 2)
-    ("mailto:\\([-a-zA-Z.@_+0-9%]+\\)" 0 t gnus-url-mailto 1)
+    ("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)
@@ -3200,7 +2755,6 @@ call it with the value of the `gnus-data' text property."
   (let* ((pos (posn-point (event-start event)))
          (data (get-text-property pos 'gnus-data))
         (fun (get-text-property pos 'gnus-callback)))
-    (goto-char pos)
     (when fun
       (funcall fun data))))
 
@@ -3214,6 +2768,40 @@ call it with the value of the `gnus-data' text property."
     (when fun
       (funcall fun data))))
 
+(defun gnus-article-prev-button (n)
+  "Move point to N buttons backward.
+If N is negative, move forward instead."
+  (interactive "p")
+  (gnus-article-next-button (- n)))
+
+(defun gnus-article-next-button (n)
+  "Move point to N buttons forward.
+If N is negative, move backward instead."
+  (interactive "p")
+  (let ((function (if (< n 0) 'previous-single-property-change
+                   'next-single-property-change))
+       (inhibit-point-motion-hooks t)
+       (backward (< n 0))
+       (limit (if (< n 0) (point-min) (point-max))))
+    (setq n (abs n))
+    (while (and (not (= limit (point)))
+               (> n 0))
+      ;; Skip past the current button.
+      (when (get-text-property (point) 'gnus-callback)
+       (goto-char (funcall function (point) 'gnus-callback nil limit)))
+      ;; Go to the next (or previous) button.
+      (gnus-goto-char (funcall function (point) 'gnus-callback nil limit))
+      ;; Put point at the start of the button.
+      (when (and backward (not (get-text-property (point) 'gnus-callback)))
+       (goto-char (funcall function (point) 'gnus-callback nil limit)))
+      ;; Skip past intangible buttons.
+      (when (get-text-property (point) 'intangible)
+       (incf n))
+      (decf n))
+    (unless (zerop n)
+      (gnus-message 5 "No more buttons"))
+    n))
+
 (defun gnus-article-highlight (&optional force)
   "Highlight current article.
 This function calls `gnus-article-highlight-headers',
@@ -3396,9 +2984,7 @@ 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))))
-  (widget-convert-button 'link from to :action 'gnus-widget-press-button
-                        :button-keymap gnus-widget-button-keymap))
+         (and data (list 'gnus-data data)))))
 
 ;;; Internal functions:
 
@@ -3430,6 +3016,7 @@ specified by `gnus-button-alist'."
 (defun gnus-button-push (marker)
   ;; Push button starting at MARKER.
   (save-excursion
+    (set-buffer gnus-article-buffer)
     (goto-char marker)
     (let* ((entry (gnus-button-entry))
           (inhibit-point-motion-hooks t)
@@ -3474,7 +3061,7 @@ specified by `gnus-button-alist'."
 
 (defun gnus-url-parse-query-string (query &optional downcase)
   (let (retval pairs cur key val)
-    (setq pairs (split-string query "&"))
+    (setq pairs (gnus-split-string query "&"))
     (while pairs
       (setq cur (car pairs)
             pairs (cdr pairs))
@@ -3526,7 +3113,7 @@ forbidden in URL encoding."
   ;; Send mail to someone
   (when (string-match "mailto:/*\\(.*\\)" url)
     (setq url (substring url (match-beginning 1) nil)))
-  (let (to args subject func)
+  (let (to args source-url subject func)
     (if (string-match (regexp-quote "?") url)
         (setq to (gnus-url-unhex-string (substring url 0 (match-beginning 0)))
               args (gnus-url-parse-query-string
@@ -3585,8 +3172,7 @@ forbidden in URL encoding."
     (gnus-eval-format
      gnus-prev-page-line-format nil
      `(gnus-prev t local-map ,gnus-prev-page-map
-                gnus-callback gnus-article-button-prev-page
-                article-type annotation))))
+                gnus-callback gnus-article-button-prev-page))))
 
 (defvar gnus-next-page-map nil)
 (unless gnus-next-page-map
@@ -3614,10 +3200,9 @@ forbidden in URL encoding."
 (defun gnus-insert-next-page-button ()
   (let ((buffer-read-only nil))
     (gnus-eval-format gnus-next-page-line-format nil
-                     `(gnus-next
-                       t local-map ,gnus-next-page-map
-                       gnus-callback gnus-article-button-next-page
-                       article-type annotation))))
+                     `(gnus-next t local-map ,gnus-next-page-map
+                                 gnus-callback
+                                 gnus-article-button-next-page))))
 
 (defun gnus-article-button-next-page (arg)
   "Go to the next page."
@@ -3635,43 +3220,47 @@ forbidden in URL encoding."
     (gnus-article-prev-page)
     (select-window win)))
 
-(defvar gnus-decode-header-methods
-  '(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
-(REGEXP . FUNCTION), FUNCTION will be only apply to thes newsgroups
-whose names match REGEXP.
-
-For example: 
-((\"chinese\" . gnus-decode-encoded-word-region-by-guess)
- mail-decode-encoded-word-region 
- (\"chinese\" . rfc1843-decode-region))
-")
-
-(defvar gnus-decode-header-methods-cache nil)
-
-(defun gnus-multi-decode-header (start end)
-  "Apply the functions from `gnus-encoded-word-methods' that match."
-  (unless (and gnus-decode-header-methods-cache
-              (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))))))
-         gnus-decode-header-methods))
-  (let ((xlist gnus-decode-header-methods-cache))
-    (pop xlist)
-    (save-restriction
-      (narrow-to-region start end)
-      (while xlist
-       (funcall (pop xlist) (point-min) (point-max))))))
+
+;;; @ for mime-view
+;;;
+
+(defun gnus-article-header-presentation-method (entity situation)
+  (mime-insert-decoded-header entity nil nil default-mime-charset)
+  )
+
+(set-alist 'mime-header-presentation-method-alist
+          'gnus-original-article-mode
+          #'gnus-article-header-presentation-method)
+
+(defun gnus-mime-preview-quitting-method ()
+  (if gnus-show-mime
+      (gnus-article-show-summary)
+    (mime-preview-kill-buffer)
+    (delete-other-windows)
+    (gnus-article-show-summary)
+    (gnus-summary-select-article nil t)
+    ))
+
+(set-alist 'mime-raw-representation-type-alist
+          'gnus-original-article-mode 'binary)
+
+(set-alist 'mime-preview-quitting-method-alist
+          'gnus-original-article-mode #'gnus-mime-preview-quitting-method)
+
+(defun gnus-following-method (buf)
+  (set-buffer buf)
+  (message-followup)
+  (message-yank-original)
+  (kill-buffer buf)
+  (goto-char (point-min))
+  )
+
+(set-alist 'mime-preview-following-method-alist
+          'gnus-original-article-mode #'gnus-following-method)
+
+
+;;; @ end
+;;;
 
 (gnus-ems-redefine)
 
index 870192f..8da43cc 100644 (file)
@@ -213,13 +213,11 @@ 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-asynch-obarray)
-                      ,mark (set-marker (make-marker) (point-max))
-                      ,group ,article)
-                gnus-async-article-alist))))
+         (push (list ',(intern (format "%s-%d" group article)
+                               gnus-asynch-obarray)
+                     ,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))
index 51c6e7f..d9934e5 100644 (file)
   "Return the backlog buffer."
   (or (get-buffer gnus-backlog-buffer)
       (save-excursion
-       (set-buffer (gnus-get-buffer-create gnus-backlog-buffer))
-       (buffer-disable-undo)
+       (set-buffer (get-buffer-create gnus-backlog-buffer))
+       (buffer-disable-undo (current-buffer))
        (setq buffer-read-only t)
+       (gnus-add-current-to-buffer-list)
        (get-buffer gnus-backlog-buffer))))
 
 (defun gnus-backlog-setup ()
index 56d16b1..21e3c50 100644 (file)
   :group 'gnus-cache
   :type '(set (const ticked) (const dormant) (const unread) (const read)))
 
-(defcustom gnus-cacheable-groups nil
-  "*Groups that match this regexp will be cached.
-
-If you only want to cache your nntp groups, you could set this
-variable to \"^nntp\".
-
-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))
-
 (defcustom gnus-uncacheable-groups nil
   "*Groups that match this regexp will not be cached.
 
 If you want to avoid caching your nnml groups, you could set this
-variable to \"^nnml\".
-
-If a group matches both gnus-cacheable-groups and gnus-uncacheable-groups
-it's not cached."
+variable to \"^nnml\"."
   :group 'gnus-cache
   :type '(choice (const :tag "off" nil)
                 regexp))
 
-(defvar gnus-cache-overview-coding-system 'raw-text
-  "Coding system used on Gnus cache files.")
-
 \f
 
 ;;; Internal variables.
@@ -124,9 +106,7 @@ it's not cached."
          (set-buffer buffer)
          (if (> (buffer-size) 0)
              ;; Non-empty overview, write it to a file.
-             (let ((coding-system-for-write
-                    gnus-cache-overview-coding-system))
-               (gnus-write-buffer overview-file))
+             (gnus-write-buffer overview-file)
            ;; Empty overview file, remove it
            (when (file-exists-p overview-file)
              (delete-file overview-file))
@@ -155,13 +135,11 @@ it's not cached."
              headers (copy-sequence headers))
        (mail-header-set-number headers (cdr result))))
     (let ((number (mail-header-number headers))
-         file)
+         file dir)
       (when (and number
                 (> number 0)           ; Reffed article.
                 (or force
-                     (and (or (not gnus-cacheable-groups)
-                              (string-match gnus-cacheable-groups group))
-                          (or (not gnus-uncacheable-groups)
+                    (and (or (not gnus-uncacheable-groups)
                              (not (string-match
                                    gnus-uncacheable-groups group)))
                          (gnus-cache-member-of-class
@@ -169,14 +147,13 @@ it's not cached."
                 (not (file-exists-p (setq file (gnus-cache-file-name
                                                 group number)))))
        ;; Possibly create the cache directory.
-       (gnus-make-directory (file-name-directory file))
+       (gnus-make-directory (setq dir (file-name-directory file)))
        ;; Save the article in the cache.
        (if (file-exists-p file)
            t                           ; The article already is saved.
          (save-excursion
            (set-buffer nntp-server-buffer)
-           (let ((gnus-use-cache nil)
-                 (gnus-article-decode-hook nil))
+           (let ((gnus-use-cache nil))
              (gnus-request-article-this-buffer number group))
            (when (> (buffer-size) 0)
              (gnus-write-buffer file)
@@ -201,7 +178,17 @@ it's not cached."
                    (beginning-of-line))
                (forward-line 1))
              (beginning-of-line)
-             (nnheader-insert-nov headers)
+             ;; [number subject from date id references chars lines xref]
+             (insert (format "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n"
+                             (mail-header-number headers)
+                             (mail-header-subject headers)
+                             (mail-header-from headers)
+                             (mail-header-date headers)
+                             (mail-header-id headers)
+                             (or (mail-header-references headers) "")
+                             (or (mail-header-chars headers) "")
+                             (or (mail-header-lines headers) "")
+                             (or (mail-header-xref headers) "")))
              ;; Update the active info.
              (set-buffer gnus-summary-buffer)
              (gnus-cache-update-active group number)
@@ -255,7 +242,7 @@ it's not cached."
     (when (file-exists-p file)
       (erase-buffer)
       (gnus-kill-all-overlays)
-      (insert-file-contents file)
+      (nnheader-insert-file-contents file)
       t)))
 
 (defun gnus-cache-possibly-alter-active (group active)
@@ -301,7 +288,7 @@ it's not cached."
            ;; unsuccessful), so we use the cached headers exclusively.
            (set-buffer nntp-server-buffer)
            (erase-buffer)
-           (insert-file-contents cache-file)
+           (nnheader-insert-file-contents cache-file)
            'nov)
           ((eq type 'nov)
            ;; We have both cached and uncached NOV headers, so we
@@ -360,7 +347,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 gnus-newsgroup-cached)
        (gnus-verbose (max 6 gnus-verbose)))
     (unless cached
       (gnus-message 3 "No cached articles for this group"))
@@ -384,8 +371,8 @@ Returns the list of articles removed."
     (save-excursion
       (setq gnus-cache-buffer
            (cons group
-                 (set-buffer (gnus-get-buffer-create
-                              " *gnus-cache-overview*"))))
+                 (set-buffer (get-buffer-create " *gnus-cache-overview*"))))
+      (buffer-disable-undo (current-buffer))
       ;; Insert the contents of this group's cache overview.
       (erase-buffer)
       (let ((file (gnus-cache-file-name group ".overview")))
@@ -472,13 +459,14 @@ Returns the list of articles removed."
       articles)))
 
 (defun gnus-cache-braid-nov (group cached &optional file)
-  (let ((cache-buf (gnus-get-buffer-create " *gnus-cache*"))
+  (let ((cache-buf (get-buffer-create " *gnus-cache*"))
        beg end)
     (gnus-cache-save-buffers)
     (save-excursion
       (set-buffer cache-buf)
+      (buffer-disable-undo (current-buffer))
       (erase-buffer)
-      (insert-file-contents (or file (gnus-cache-file-name group ".overview")))
+      (nnheader-insert-file-contents (or file (gnus-cache-file-name group ".overview")))
       (goto-char (point-min))
       (insert "\n")
       (goto-char (point-min)))
@@ -503,9 +491,10 @@ Returns the list of articles removed."
     (kill-buffer cache-buf)))
 
 (defun gnus-cache-braid-heads (group cached)
-  (let ((cache-buf (gnus-get-buffer-create " *gnus-cache*")))
+  (let ((cache-buf (get-buffer-create " *gnus-cache*")))
     (save-excursion
       (set-buffer cache-buf)
+      (buffer-disable-undo (current-buffer))
       (erase-buffer))
     (set-buffer nntp-server-buffer)
     (goto-char (point-min))
@@ -520,7 +509,7 @@ Returns the list of articles removed."
       (save-excursion
        (set-buffer cache-buf)
        (erase-buffer)
-       (insert-file-contents (gnus-cache-file-name group (car cached)))
+       (nnheader-insert-file-contents (gnus-cache-file-name group (car cached)))
        (goto-char (point-min))
        (insert "220 ")
        (princ (car cached) (current-buffer))
@@ -571,7 +560,7 @@ $ emacs -batch -l ~/.emacs -l gnus -f gnus-jog-cache"
     ;; We simply read the active file.
     (save-excursion
       (gnus-set-work-buffer)
-      (insert-file-contents gnus-cache-active-file)
+      (nnheader-insert-file-contents gnus-cache-active-file)
       (gnus-active-to-gnus-format
        nil (setq gnus-cache-active-hashtb
                 (gnus-make-hashtable
@@ -583,7 +572,7 @@ $ emacs -batch -l ~/.emacs -l gnus -f gnus-jog-cache"
   (when (or force
            (and gnus-cache-active-hashtb
                 gnus-cache-active-altered))
-    (with-temp-file gnus-cache-active-file
+    (nnheader-temp-write gnus-cache-active-file
       (mapatoms
        (lambda (sym)
         (when (and sym (boundp sym))
@@ -630,8 +619,6 @@ If LOW, update the lower bound instead."
     (when top
       (gnus-message 5 "Generating the cache active file...")
       (setq gnus-cache-active-hashtb (gnus-make-hashtable 123)))
-    (when (string-match "^\\(nn[^_]+\\)_" group)
-      (setq group (replace-match "\\1:" t t group)))
     ;; Separate articles from all other files and directories.
     (while files
       (if (string-match "^[0-9]+$" (file-name-nondirectory (car files)))
index d239dda..0015a90 100644 (file)
@@ -82,6 +82,10 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's."
 (defvar gnus-inhibit-demon nil
   "*If non-nil, no daemonic function will be run.")
 
+(eval-and-compile
+  (autoload 'timezone-parse-date "timezone")
+  (autoload 'timezone-make-arpa-date "timezone"))
+
 ;;; Functions.
 
 (defun gnus-demon-add-handler (function time idle)
@@ -151,9 +155,9 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's."
       time
     (let* ((now (current-time))
            ;; obtain NOW as discrete components -- make a vector for speed
-           (nowParts (decode-time now))
+           (nowParts (apply 'vector (decode-time now)))
            ;; obtain THEN as discrete components
-           (thenParts (parse-time-string time))
+           (thenParts (timezone-parse-time time))
            (thenHour (string-to-int (elt thenParts 0)))
            (thenMin (string-to-int (elt thenParts 1)))
            ;; convert time as elements into number of seconds since EPOCH.
@@ -264,7 +268,8 @@ minutes, the connection is closed."
 
 (defun gnus-demon-nntp-close-connection ()
   (save-window-excursion
-    (when (time-less-p '(0 300) (time-since nntp-last-command-time))
+    (when (nnmail-time-less '(0 300)
+                           (nnmail-time-since nntp-last-command-time))
       (nntp-close-server))))
 
 (defun gnus-demon-add-scanmail ()
index 27b4ad6..fce8744 100644 (file)
@@ -1,8 +1,9 @@
-;;; gnus-draft.el --- draft message support for Gnus
+;;; gnus-draft.el --- draft message support for Semi-gnus
 ;; Copyright (C) 1997,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: news
+;;         MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Keywords: mail, news, MIME, offline
 
 ;; This file is part of GNU Emacs.
 
   (let ((article (gnus-summary-article-number)))
     (gnus-summary-mark-as-read article gnus-canceled-mark)
     (gnus-draft-setup article gnus-newsgroup-name)
-    (set-buffer-modified-p t)
-    (save-buffer)
-    (let ((gnus-verbose-backends nil))
-      (gnus-request-expire-articles (list article) gnus-newsgroup-name t))
     (push
      `((lambda ()
         (when (gnus-buffer-exists-p ,gnus-summary-buffer)
        (message-remove-header gnus-agent-meta-information-header)))
     ;; Then we send it.  If we have no meta-information, we just send
     ;; it and let Message figure out how.
-    (when (and (or (null method)
-                  (gnus-server-opened method)
-                  (gnus-open-server method))
-              (if type
-                  (let ((message-this-is-news (eq type 'news))
-                        (message-this-is-mail (eq type 'mail))
-                        (gnus-post-method method)
-                        (message-post-method method))
-                    (message-send-and-exit))
-                (message-send-and-exit)))
-      (let ((gnus-verbose-backends nil))
-       (gnus-request-expire-articles
-        (list article) (or group "nndraft:queue") t)))))
+    (if type
+       (let ((message-this-is-news (eq type 'news))
+             (message-this-is-mail (eq type 'mail))
+             (gnus-post-method method)
+             (message-post-method method))
+         (message-send-and-exit))
+      (message-send-and-exit))))
 
 (defun gnus-draft-send-all-messages ()
   "Send all the sendable drafts."
 
 ;;; Utility functions
 
+(defcustom gnus-draft-decoding-function
+  (function
+   (lambda ()
+     (mime-edit-decode-buffer nil)
+     (eword-decode-header)
+     ))
+  "*Function called to decode the message from network representation."
+  :group 'gnus-agent
+  :type 'function)
+
 ;;;!!!If this is byte-compiled, it fails miserably.
 ;;;!!!This is because `gnus-setup-message' uses uninterned symbols.
 ;;;!!!This has been fixed in recent versions of Emacs and XEmacs,
       (if (not (gnus-request-restore-buffer article group))
          (error "Couldn't restore the article")
        ;; Insert the separator.
+       (funcall gnus-draft-decoding-function)
        (goto-char (point-min))
        (search-forward "\n\n")
        (forward-char -1)
index b289639..6958f02 100644 (file)
@@ -98,7 +98,7 @@ seen in the same session."
   "Save the duplicate suppression list."
   (when (and gnus-save-duplicate-list
             gnus-dup-list-dirty)
-    (with-temp-file gnus-duplicate-file
+    (nnheader-temp-write gnus-duplicate-file
       (gnus-prin1 `(setq gnus-dup-list ',gnus-dup-list))))
   (setq gnus-dup-list-dirty nil))
 
index dff64d7..ff35a42 100644 (file)
@@ -53,8 +53,7 @@
 
 (defvar gnus-edit-form-mode-map nil)
 (unless gnus-edit-form-mode-map
-  (setq gnus-edit-form-mode-map (make-sparse-keymap))
-  (set-keymap-parent gnus-edit-form-mode-map emacs-lisp-mode-map)
+  (setq gnus-edit-form-mode-map (copy-keymap emacs-lisp-mode-map))
   (gnus-define-keys gnus-edit-form-mode-map
     "\C-c\C-c" gnus-edit-form-done
     "\C-c\C-k" gnus-edit-form-exit))
@@ -89,8 +88,9 @@ It is a slightly enhanced emacs-lisp-mode.
 Call EXIT-FUNC on exit.  Display DOCUMENTATION in the beginning
 of the buffer."
   (let ((winconf (current-window-configuration)))
-    (set-buffer (gnus-get-buffer-create gnus-edit-form-buffer))
+    (set-buffer (get-buffer-create gnus-edit-form-buffer))
     (gnus-configure-windows 'edit-form)
+    (gnus-add-current-to-buffer-list)
     (gnus-edit-form-mode)
     (setq gnus-prev-winconf winconf)
     (setq gnus-edit-form-done-function exit-func)
index 2438b31..7328093 100644 (file)
@@ -1,7 +1,8 @@
-;;; gnus-ems.el --- functions for making Gnus work under different Emacsen
+;;; gnus-ems.el --- functions for making Semi-gnus work under different Emacsen
 ;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;;         Tatsuya Ichikawa <t-ichi@niagara.shiojiri.ne.jp>
 ;; Keywords: news
 
 ;; This file is part of GNU Emacs.
@@ -33,9 +34,7 @@
   "Non-nil if running under XEmacs.")
 
 (defvar gnus-mouse-2 [mouse-2])
-(defvar gnus-mouse-3 [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
          (< emacs-major-version 20))
@@ -47,6 +46,9 @@
   (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))
+
 ;;; Mule functions.
 
 (defun gnus-mule-cite-add-face (number prefix face)
            (valstr (if (numberp val)
                        (int-to-string val) val)))
        (if (> (length valstr) (, max-width))
-          (truncate-string-to-width valstr (, max-width))
+          (truncate-string valstr (, max-width))
         valstr))))
 
+(defvar gnus-mule-bitmap-image-file nil)
+(defun gnus-mule-group-startup-message (&optional x y)
+  "Insert startup message in current buffer."
+  ;; Insert the message.
+  (erase-buffer)
+  (insert
+   (if (featurep 'bitmap)
+     (format "              %s
+
+"
+            "" (if (and (stringp gnus-mule-bitmap-image-file)
+                        (file-exists-p gnus-mule-bitmap-image-file))
+                   (insert-file gnus-mule-bitmap-image-file)))
+     (format "              %s
+          _    ___ _             _
+          _ ___ __ ___  __    _ ___
+          __   _     ___    __  ___
+              _           ___     _
+             _  _ __             _
+             ___   __            _
+                   __           _
+                    _      _   _
+                   _      _    _
+                      _  _    _
+                  __  ___
+                 _   _ _     _
+                _   _
+              _    _
+             _    _
+            _
+          __
+
+"
+            "")))
+  ;; And then hack it.
+  (gnus-indent-rigidly (point-min) (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))
+  (setq mode-line-buffer-identification (concat " " gnus-version))
+  (setq gnus-simple-splash t)
+  (set-buffer-modified-p t))
+
+(defun gnus-encode-coding-string (string system)
+  string)
+
+(defun gnus-decode-coding-string (string system)
+  string)
+
 (eval-and-compile
   (if (string-match "XEmacs\\|Lucid" emacs-version)
       nil
    ((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))))
 
       (while funcs
        (unless (fboundp (car funcs))
          (fset (car funcs) 'gnus-dummy-func))
-       (setq funcs (cdr funcs)))))))
+       (setq funcs (cdr funcs))))))
+  (unless (fboundp 'file-regular-p)
+    (defun file-regular-p (file)
+      (and (not (file-directory-p file))
+          (not (file-symlink-p file))
+          (file-exists-p file))))
+  (unless (fboundp 'face-list)
+    (defun face-list (&rest args))))
 
 (eval-and-compile
   (let ((case-fold-search t))
     ;; `emacs-version'. In this case, implementation for XEmacs/mule
     ;; may be able to share between XEmacs and XEmacs/mule.
 
+    (defalias 'gnus-truncate-string 'truncate-string)
+
     (defvar gnus-summary-display-table nil
       "Display table used in summary mode buffers.")
     (fset 'gnus-cite-add-face 'gnus-mule-cite-add-face)
     (fset 'gnus-max-width-function 'gnus-mule-max-width-function)
     (fset 'gnus-summary-set-display-table (lambda ()))
-    
+    (fset 'gnus-encode-coding-string 'encode-coding-string)
+    (fset 'gnus-decode-coding-string 'decode-coding-string)
+
+    (when window-system
+      (require 'path-util)
+      (if (module-installed-p 'bitmap)
+         (fset 'gnus-group-startup-message 'gnus-mule-group-startup-message)
+       ))
+
     (when (boundp 'gnus-check-before-posting)
       (setq gnus-check-before-posting
            (delq 'long-lines
          (format "%4d: %-20s"
                  gnus-tmp-lines
                  (if (> (length gnus-tmp-name) 20)
-                     (truncate-string-to-width gnus-tmp-name 20)
+                     (truncate-string gnus-tmp-name 20)
                    gnus-tmp-name))
          gnus-tmp-closing-bracket)
         (point))
 (defun gnus-add-minor-mode (mode name map)
   (if (fboundp 'add-minor-mode)
       (add-minor-mode mode name map)
-    (set (make-local-variable mode) t)
     (unless (assq mode minor-mode-alist)
       (push `(,mode ,name) minor-mode-alist))
     (unless (assq mode minor-mode-map-alist)
   (let ((dir (nnheader-find-etc-directory "gnus"))
        pixmap file height beg i)
     (save-excursion
-      (switch-to-buffer (gnus-get-buffer-create gnus-group-buffer))
+      (switch-to-buffer (get-buffer-create gnus-group-buffer))
       (let ((buffer-read-only nil))
        (erase-buffer)
        (when (and dir
                   (file-exists-p (setq file (concat dir "x-splash"))))
-         (with-temp-buffer
+         (nnheader-temp-write nil
            (insert-file-contents file)
            (goto-char (point-min))
            (ignore-errors
            (make-face 'gnus-splash))
          (setq height (/ (car pixmap) (frame-char-height))
                width (/ (cadr pixmap) (frame-char-width)))
-         (set-face-foreground 'gnus-splash "Brown")
+         (set-face-foreground 'gnus-splash "ForestGreen")
          (set-face-stipple 'gnus-splash pixmap)
          (insert-char ?\n (* (/ (window-height) 2 height) height))
          (setq i height)
          (goto-char (point-min))
          (sit-for 0))))))
 
+(if (fboundp 'split-string)
+    (fset 'gnus-split-string 'split-string)
+  (defun gnus-split-string (string pattern)
+    "Return a list of substrings of STRING which are separated by PATTERN."
+    (let (parts (start 0))
+      (while (string-match pattern string start)
+       (setq parts (cons (substring string start (match-beginning 0)) parts)
+             start (match-end 0)))
+      (nreverse (cons (substring string start) parts)))))
+
 (provide 'gnus-ems)
 
 ;; Local Variables:
index fcbcea5..3d9fc88 100644 (file)
@@ -35,7 +35,6 @@
 (require 'gnus-range)
 (require 'gnus-win)
 (require 'gnus-undo)
-(require 'time-date)
 
 (defcustom gnus-group-archive-directory
   "*ftp@ftp.hpc.uh.edu:/pub/emacs/ding-list/"
@@ -299,18 +298,6 @@ variable."
      gnus-group-news-3-empty-face)
     ((and (not mailp) (eq level 3)) .
      gnus-group-news-3-face)
-    ((and (= unread 0) (not mailp) (eq level 4)) .
-     gnus-group-news-4-empty-face)
-    ((and (not mailp) (eq level 4)) .
-     gnus-group-news-4-face)
-    ((and (= unread 0) (not mailp) (eq level 5)) .
-     gnus-group-news-5-empty-face)
-    ((and (not mailp) (eq level 5)) .
-     gnus-group-news-5-face)
-    ((and (= unread 0) (not mailp) (eq level 6)) .
-     gnus-group-news-6-empty-face)
-    ((and (not mailp) (eq level 6)) .
-     gnus-group-news-6-face)
     ((and (= unread 0) (not mailp)) .
      gnus-group-news-low-empty-face)
     ((and (not mailp)) .
@@ -743,7 +730,6 @@ ticked: The number of ticked articles."
        ["Read manual" gnus-info-find-node t]
        ["Flush score cache" gnus-score-flush-cache t]
        ["Toggle topics" gnus-topic-mode t]
-       ["Send a bug report" gnus-bug t]
        ["Exit from Gnus" gnus-group-exit t]
        ["Exit without saving" gnus-group-quit t]))
 
@@ -776,7 +762,7 @@ The following commands are available:
   (gnus-group-set-mode-line)
   (setq mode-line-process nil)
   (use-local-map gnus-group-mode-map)
-  (buffer-disable-undo)
+  (buffer-disable-undo (current-buffer))
   (setq truncate-lines t)
   (setq buffer-read-only t)
   (gnus-set-default-directory)
@@ -786,8 +772,6 @@ The following commands are available:
   (add-hook 'post-command-hook 'gnus-clear-inboxes-moved nil t)
   (when gnus-use-undo
     (gnus-undo-mode 1))
-  (when gnus-slave
-    (gnus-slave-mode))
   (gnus-run-hooks 'gnus-group-mode-hook))
 
 (defun gnus-update-group-mark-positions ()
@@ -831,8 +815,9 @@ The following commands are available:
     (or level gnus-group-default-list-level gnus-level-subscribed))))
 
 (defun gnus-group-setup-buffer ()
-  (set-buffer (gnus-get-buffer-create gnus-group-buffer))
+  (set-buffer (get-buffer-create gnus-group-buffer))
   (unless (eq major-mode 'gnus-group-mode)
+    (gnus-add-current-to-buffer-list)
     (gnus-group-mode)
     (when gnus-carpal
       (gnus-carpal-setup-buffer 'group))))
@@ -1165,8 +1150,7 @@ already."
            found buffer-read-only)
        ;; Enter the current status into the dribble buffer.
        (let ((entry (gnus-gethash group gnus-newsrc-hashtb)))
-         (when (and entry
-                    (not (gnus-ephemeral-group-p group)))
+         (when (and entry (not (gnus-ephemeral-group-p group)))
            (gnus-dribble-enter
             (concat "(gnus-group-set-info '"
                     (gnus-prin1-to-string (nth 2 entry))
@@ -1340,7 +1324,7 @@ If FIRST-TOO, the current line is also eligible as a target."
        (beginning-of-line)
        (forward-char (or (cdr (assq 'process gnus-group-mark-positions)) 2))
        (subst-char-in-region
-        (point) (1+ (point)) (char-after)
+        (point) (1+ (point)) (following-char)
         (if unmark
             (progn
               (setq gnus-group-marked (delete group gnus-group-marked))
@@ -1487,12 +1471,12 @@ and with point over the group in question."
            (save-selected-window
              (save-excursion
                (funcall ,function ,group)))))))))
-
+  
 (put 'gnus-group-iterate 'lisp-indent-function 1)
 
 ;; Selecting groups.
 
-(defun gnus-group-read-group (&optional all no-article group select-articles)
+(defun gnus-group-read-group (&optional all no-article group)
   "Read news in this newsgroup.
 If the prefix argument ALL is non-nil, already read articles become
 readable.  IF ALL is a number, fetch this number of articles.  If the
@@ -1523,7 +1507,7 @@ group."
                                          (cdr (assq 'tick marked)))
                                  (gnus-range-length
                                   (cdr (assq 'dormant marked)))))))
-     no-article nil no-display nil select-articles)))
+     no-article nil no-display)))
 
 (defun gnus-group-select-group (&optional all)
   "Select this newsgroup.
@@ -1569,6 +1553,10 @@ be permanent."
         gnus-summary-mode-hook gnus-select-group-hook
         (group (gnus-group-group-name))
         (method (gnus-find-method-for-group group)))
+    (setq method
+         `(,(car method) ,(concat (cadr method) "-ephemeral")
+           (,(intern (format "%s-address" (car method))) ,(cadr method))
+           ,@(cddr method)))
     (gnus-group-read-ephemeral-group
      (gnus-group-prefixed-name group method) method)))
 
@@ -1581,41 +1569,30 @@ Returns whether the fetching was successful or not."
     (gnus-no-server))
   (gnus-group-read-group nil nil group))
 
-;;;###autoload
-(defun gnus-fetch-group-other-frame (group)
-  "Pop up a frame and enter GROUP."
-  (interactive "P")
-  (let ((window (get-buffer-window gnus-group-buffer)))
-    (cond (window
-          (select-frame (window-frame window)))
-         ((= (length (frame-list)) 1)
-          (select-frame (make-frame)))
-         (t
-          (other-frame 1))))
-  (gnus-fetch-group group))
-
 (defvar gnus-ephemeral-group-server 0)
 
 ;; Enter a group that is not in the group buffer.  Non-nil is returned
 ;; if selection was successful.
 (defun gnus-group-read-ephemeral-group (group method &optional activate
-                                             quit-config request-only
-                                             select-articles)
+                                             quit-config request-only)
   "Read GROUP from METHOD as an ephemeral group.
 If ACTIVATE, request the group first.
 If QUIT-CONFIG, use that window configuration when exiting from the
 ephemeral group.
 If REQUEST-ONLY, don't actually read the group; just request it.
-If SELECT-ARTICLES, only select those articles.
 
 Return the name of the group is selection was successful."
   ;; Transform the select method into a unique server.
   (when (stringp method)
     (setq method (gnus-server-to-method method)))
-  (setq method
-       `(,(car method) ,(concat (cadr method) "-ephemeral")
-         (,(intern (format "%s-address" (car method))) ,(cadr method))
-         ,@(cddr method)))
+;;;  (let ((saddr (intern (format "%s-address" (car method)))))
+;;;    (setq method (gnus-copy-sequence method))
+;;;    (require (car method))
+;;;    (when (boundp saddr)
+;;;      (unless (assq saddr method)
+;;;    (nconc method `((,saddr ,(cadr method))))
+;;;    (setf (cadr method) (format "%s-%d" (cadr method)
+;;;                                (incf gnus-ephemeral-group-server))))))
   (let ((group (if (gnus-group-foreign-p group) group
                 (gnus-group-prefixed-name group method))))
     (gnus-sethash
@@ -1639,7 +1616,7 @@ Return the name of the group is selection was successful."
     (if request-only
        group
       (condition-case ()
-         (when (gnus-group-read-group t t group select-articles)
+         (when (gnus-group-read-group t t group)
            group)
        ;;(error nil)
        (quit nil)))))
@@ -1814,8 +1791,6 @@ ADDRESS."
     (gnus-read-group "Group name: ")
     (gnus-read-method "From method: ")))
 
-  (when (stringp method)
-    (setq method (or (gnus-server-to-method method) method)))
   (let* ((meth (when (and method
                          (not (gnus-server-equal method gnus-select-method)))
                 (if address (list (intern method) address)
@@ -1928,8 +1903,6 @@ and NEW-NAME will be prompted for."
        (gnus-set-active new-name (gnus-active group))
        (gnus-message 6 "Renaming group %s to %s...done" group new-name)
        new-name)
-    (setq gnus-killed-list (delete group gnus-killed-list))
-    (gnus-set-active group nil)
     (gnus-dribble-touch)
     (gnus-group-position-point)))
 
@@ -2009,7 +1982,6 @@ and NEW-NAME will be prompted for."
     (gnus-group-position-point)))
 
 (defun gnus-group-make-useful-group (group method)
-  "Create one of the groups described in `gnus-useful-groups'."
   (interactive
    (let ((entry (assoc (completing-read "Create group: " gnus-useful-groups
                                        nil t)
@@ -2025,7 +1997,8 @@ and NEW-NAME will be prompted for."
   "Create the Gnus documentation group."
   (interactive)
   (let ((name (gnus-group-prefixed-name "gnus-help" '(nndoc "gnus-help")))
-       (file (nnheader-find-etc-directory "gnus-tut.txt" t)))
+       (file (nnheader-find-etc-directory "gnus-tut.txt" t))
+       dir)
     (when (gnus-gethash name gnus-newsrc-hashtb)
       (error "Documentation group already exists"))
     (if (not file)
@@ -2168,7 +2141,7 @@ score file entries for articles to include in the group."
        (push (cons header regexps) scores))
       scores)))
   (gnus-group-make-group group "nnkiboze" address)
-  (with-temp-file (gnus-score-file-name (concat "nnkiboze:" group))
+  (nnheader-temp-write (gnus-score-file-name (concat "nnkiboze:" group))
     (let (emacs-lisp-mode-hook)
       (pp scores (current-buffer)))))
 
@@ -2313,52 +2286,46 @@ If REVERSE, sort in reverse order."
     ;; Go through all the infos and replace the old entries
     ;; with the new infos.
     (while infos
-      (setcar (car entries) (pop infos))
+      (setcar entries (pop infos))
       (pop entries))
     ;; Update the hashtable.
     (gnus-make-hashtable-from-newsrc-alist)))
 
-(defun gnus-group-sort-selected-groups-by-alphabet (&optional n reverse)
+(defun gnus-group-sort-selected-groups-by-alphabet (&optional reverse)
   "Sort the group buffer alphabetically by group name.
-Obeys the process/prefix convention.  If REVERSE (the symbolic prefix),
-sort in reverse order."
-  (interactive (gnus-interactive "P\ny"))
-  (gnus-group-sort-selected-groups n 'gnus-group-sort-by-alphabet reverse))
+If REVERSE, sort in reverse order."
+  (interactive "P")
+  (gnus-group-sort-selected-groups 'gnus-group-sort-by-alphabet reverse))
 
-(defun gnus-group-sort-selected-groups-by-unread (&optional n reverse)
+(defun gnus-group-sort-selected-groups-by-unread (&optional reverse)
   "Sort the group buffer by number of unread articles.
-Obeys the process/prefix convention.  If REVERSE (the symbolic prefix),
-sort in reverse order."
-  (interactive (gnus-interactive "P\ny"))
-  (gnus-group-sort-selected-groups n 'gnus-group-sort-by-unread reverse))
+If REVERSE, sort in reverse order."
+  (interactive "P")
+  (gnus-group-sort-selected-groups 'gnus-group-sort-by-unread reverse))
 
-(defun gnus-group-sort-selected-groups-by-level (&optional n reverse)
+(defun gnus-group-sort-selected-groups-by-level (&optional reverse)
   "Sort the group buffer by group level.
-Obeys the process/prefix convention.  If REVERSE (the symbolic prefix),
-sort in reverse order."
-  (interactive (gnus-interactive "P\ny"))
-  (gnus-group-sort-selected-groups n 'gnus-group-sort-by-level reverse))
+If REVERSE, sort in reverse order."
+  (interactive "P")
+  (gnus-group-sort-selected-groups 'gnus-group-sort-by-level reverse))
 
-(defun gnus-group-sort-selected-groups-by-score (&optional n reverse)
+(defun gnus-group-sort-selected-groups-by-score (&optional reverse)
   "Sort the group buffer by group score.
-Obeys the process/prefix convention.  If REVERSE (the symbolic prefix),
-sort in reverse order."
-  (interactive (gnus-interactive "P\ny"))
-  (gnus-group-sort-selected-groups n 'gnus-group-sort-by-score reverse))
+If REVERSE, sort in reverse order."
+  (interactive "P")
+  (gnus-group-sort-selected-groups 'gnus-group-sort-by-score reverse))
 
-(defun gnus-group-sort-selected-groups-by-rank (&optional n reverse)
+(defun gnus-group-sort-selected-groups-by-rank (&optional reverse)
   "Sort the group buffer by group rank.
-Obeys the process/prefix convention.  If REVERSE (the symbolic prefix),
-sort in reverse order."
-  (interactive (gnus-interactive "P\ny"))
-  (gnus-group-sort-selected-groups n 'gnus-group-sort-by-rank reverse))
+If REVERSE, sort in reverse order."
+  (interactive "P")
+  (gnus-group-sort-selected-groups 'gnus-group-sort-by-rank reverse))
 
-(defun gnus-group-sort-selected-groups-by-method (&optional n reverse)
+(defun gnus-group-sort-selected-groups-by-method (&optional reverse)
   "Sort the group buffer alphabetically by backend name.
-Obeys the process/prefix convention.  If REVERSE (the symbolic prefix),
-sort in reverse order."
-  (interactive (gnus-interactive "P\ny"))
-  (gnus-group-sort-selected-groups n 'gnus-group-sort-by-method reverse))
+If REVERSE, sort in reverse order."
+  (interactive "P")
+  (gnus-group-sort-selected-groups 'gnus-group-sort-by-method reverse))
 
 ;;; Sorting predicates.
 
@@ -2424,7 +2391,7 @@ sort in reverse order."
        (when (gnus-group-native-p (gnus-info-group info))
          (gnus-info-clear-data info)))
       (gnus-get-unread-articles)
-      (gnus-dribble-touch)
+      (gnus-dribble-enter "")
       (when (gnus-y-or-n-p
             "Move the cache away to avoid problems in the future? ")
        (call-interactively 'gnus-cache-move-cache)))))
@@ -2948,20 +2915,17 @@ 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)
     (while (setq group (pop groups))
       (gnus-group-remove-mark group)
       ;; Bypass any previous denials from the server.
-      (gnus-remove-denial (setq method (gnus-find-method-for-group group)))
+      (gnus-remove-denial (gnus-find-method-for-group group))
       (if (gnus-activate-group group (if dont-scan nil 'scan))
          (progn
            (gnus-get-unread-articles-in-group
             (gnus-get-info group) (gnus-active group) t)
            (unless (gnus-virtual-group-p group)
              (gnus-close-group group))
-           (when gnus-agent
-             (gnus-agent-save-group-info
-              method (gnus-group-real-name group) (gnus-active group)))
            (gnus-group-update-group group))
        (if (eq (gnus-server-status (gnus-find-method-for-group group))
                'denied)
@@ -2995,6 +2959,8 @@ to use."
     (while (and (not found)
                (setq dir (pop dirs)))
       (let ((name (gnus-group-real-name group)))
+       (while (string-match "\\." name)
+         (setq name (replace-match "/" t t name)))
        (setq file (concat (file-name-as-directory dir) name)))
       (if (not (file-exists-p file))
          (gnus-message 1 "No such file: %s" file)
@@ -3060,7 +3026,6 @@ to use."
      (lambda (group)
        (and (symbol-name group)
            (string-match regexp (symbol-name group))
-           (symbol-value group)
            (push (symbol-name group) groups)))
      gnus-active-hashtb)
     ;; Also go through all descriptions that are known to Gnus.
@@ -3076,7 +3041,7 @@ to use."
       ;; Print out all the groups.
       (save-excursion
        (pop-to-buffer "*Gnus Help*")
-       (buffer-disable-undo)
+       (buffer-disable-undo (current-buffer))
        (erase-buffer)
        (setq groups (sort groups 'string<))
        (while groups
@@ -3161,14 +3126,12 @@ group."
 (defun gnus-group-find-new-groups (&optional arg)
   "Search for new groups and add them.
 Each new group will be treated with `gnus-subscribe-newsgroup-method.'
-With 1 C-u, use the `ask-server' method to query the server for new
-groups.
-With 2 C-u's, use most complete method possible to query the server
-for new groups, and subscribe the new groups as zombies."
-  (interactive "p")
-  (gnus-find-new-newsgroups (or arg 1))
+If ARG (the prefix), use the `ask-server' method to query
+the server for new groups."
+  (interactive "P")
+  (gnus-find-new-newsgroups arg)
   (gnus-group-list-groups))
-
+  
 (defun gnus-group-edit-global-kill (&optional article group)
   "Edit the global kill file.
 If GROUP, edit that local kill file instead."
@@ -3198,13 +3161,16 @@ The hook gnus-suspend-gnus-hook is called before actually suspending."
   (interactive)
   (gnus-run-hooks 'gnus-suspend-gnus-hook)
   ;; Kill Gnus buffers except for group mode buffer.
-  (let ((group-buf (get-buffer gnus-group-buffer)))
-    (mapcar (lambda (buf)
-             (unless (member buf (list group-buf gnus-dribble-buffer))
-               (kill-buffer buf)))
-           (gnus-buffers))
+  (let* ((group-buf (get-buffer gnus-group-buffer))
+        ;; Do this on a separate list in case the user does a ^G before we finish
+        (gnus-buffer-list
+         (delete group-buf (delete gnus-dribble-buffer
+                                   (append gnus-buffer-list nil)))))
+    (while gnus-buffer-list
+      (gnus-kill-buffer (pop gnus-buffer-list)))
     (gnus-kill-gnus-frames)
     (when group-buf
+      (setq gnus-buffer-list (list group-buf))
       (bury-buffer group-buf)
       (delete-windows-on group-buf t))))
 
@@ -3348,26 +3314,27 @@ 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)))
+       (uncompressed '(score bookmark killed))
        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))))))
@@ -3393,7 +3360,7 @@ or `gnus-group-catchup-group-hook'."
   "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)))
-         (delta (subtract-time (current-time) time)))
+         (delta (gnus-time-minus (current-time) time)))
     (+ (* (nth 0 delta) 65536.0)
        (nth 1 delta))))
 
diff --git a/lisp/gnus-i18n.el b/lisp/gnus-i18n.el
new file mode 100644 (file)
index 0000000..3737fb9
--- /dev/null
@@ -0,0 +1,95 @@
+;;; gnus-i18n.el --- Internationalization for Gnus
+
+;; Copyright (C) 1996,1997 Free Software Foundation, Inc.
+
+;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Created: 1997/11/27
+;; Keywords: internationalization, news, mail
+
+;; This file is not part of GNU Emacs yet.
+
+;; 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.
+
+;;; Code:
+
+;;; @ newsgroup default charset
+;;;
+
+(defvar gnus-newsgroup-default-charset-alist
+  '(("^\\(fj\\|tnn\\|japan\\)\\."      . iso-2022-jp-2)
+    ("^han\\."                         . euc-kr)
+    ("^relcom\\."                      . koi8-r)
+    ("^alt\\.chinese\\.text\\.big5"    . cn-big5)
+    ("^hk\\(star\\)?\\."               . cn-big5)
+    ("^tw\\."                          . cn-big5)
+    ("^alt\\.chinese"                  . hz-gb-2312)
+    )
+  "Alist of newsgroup patterns vs. corresponding default MIME charset.
+Each element looks like (REGEXP . SYMBOL).  REGEXP is pattern for
+newsgroup name.  SYMBOL is MIME charset or coding-system.")
+
+(defun gnus-set-newsgroup-default-charset (newsgroup charset)
+  "Set CHARSET for the NEWSGROUP as default MIME charset."
+  (let* ((ng-regexp (concat "^" (regexp-quote newsgroup) "\\($\\|\\.\\)"))
+        (pair (assoc ng-regexp gnus-newsgroup-default-charset-alist))
+        )
+    (if pair
+       (setcdr pair charset)
+      (setq gnus-newsgroup-default-charset-alist
+           (cons (cons ng-regexp charset)
+                 gnus-newsgroup-default-charset-alist))
+      )))
+
+
+;;; @ localization
+;;;
+
+(defun gnus-set-summary-default-charset ()
+  "Set up `default-mime-charset' of summary buffer.
+It is specified by variable `gnus-newsgroup-default-charset-alist'
+\(cf. function `gnus-set-newsgroup-default-charset')."
+  (if (buffer-live-p gnus-summary-buffer)
+      (let ((charset
+            (catch 'found
+              (let ((group
+                     (save-excursion
+                       (set-buffer gnus-summary-buffer)
+                       gnus-newsgroup-name))
+                    (alist gnus-newsgroup-default-charset-alist))
+                (while alist
+                  (let ((pair (car alist)))
+                    (if (string-match (car pair) group)
+                        (throw 'found (cdr pair))
+                      ))
+                  (setq alist (cdr alist)))
+                ))))
+       (when charset
+         (save-excursion
+           (set-buffer gnus-summary-buffer)
+           (make-local-variable 'default-mime-charset)
+           (setq default-mime-charset charset)
+           )
+         (make-local-variable 'default-mime-charset)
+         (setq default-mime-charset charset)
+         ))))
+
+
+;;; @ end
+;;;
+
+(provide 'gnus-i18n)
+
+;;; gnus-i18n.el ends here
index 4ba7f40..3246bb4 100644 (file)
@@ -91,7 +91,6 @@ If CONFIRM is non-nil, the user will be asked for an NNTP server."
        ;; gnus-open-server-hook might have opened it
        (gnus-server-opened gnus-select-method)
        (gnus-open-server gnus-select-method)
-       gnus-batch-mode
        (gnus-y-or-n-p
        (format
         "%s (%s) open error: '%s'.  Continue? "
@@ -150,13 +149,10 @@ If it is down, start it up (again)."
                 (cdr method-fnlist-elt))))
     ;; Maybe complain if there is no function.
     (unless (fboundp func)
-      (unless (car method)
-       (error "Trying to require a method that doesn't exist"))
       (require (car method))
-      (when (not (fboundp func))
-       (if noerror
-           (setq func nil)
-         (error "No such function: %s" func))))
+      (when (and (not (fboundp func))
+                (not noerror))
+       (error "No such function: %s" func)))
     func))
 
 \f
@@ -269,14 +265,6 @@ this group uses will be queried."
       (funcall (gnus-get-function gnus-command-method func)
               (gnus-group-real-name group) (nth 1 gnus-command-method)))))
 
-(defun gnus-request-group-articles (group)
-  "Request a list of existing articles in GROUP."
-  (let ((gnus-command-method (gnus-find-method-for-group group))
-       (func 'request-group-articles))
-    (when (gnus-check-backend-function func group)
-      (funcall (gnus-get-function gnus-command-method func)
-              (gnus-group-real-name group) (nth 1 gnus-command-method)))))
-
 (defun gnus-close-group (group)
   "Request the GROUP be closed."
   (let ((gnus-command-method (inline (gnus-find-method-for-group group))))
@@ -316,18 +304,8 @@ If FETCH-OLD, retrieve all headers (or some subset thereof) in the group."
       (funcall (gnus-get-function gnus-command-method 'request-type)
               (gnus-group-real-name group) article))))
 
-(defun gnus-request-set-mark (group action)
-  "Set marks on articles in the backend."
-  (let ((gnus-command-method (gnus-find-method-for-group group)))
-    (if (not (gnus-check-backend-function
-             'request-set-mark (car gnus-command-method)))
-       action
-      (funcall (gnus-get-function gnus-command-method 'request-set-mark)
-              (gnus-group-real-name group) action
-              (nth 1 gnus-command-method)))))
-
 (defun gnus-request-update-mark (group article mark)
-  "Allow the backend to change the mark the user tries to put on an article."
+  "Return the type (`post' or `mail') of GROUP (and ARTICLE)."
   (let ((gnus-command-method (gnus-find-method-for-group group)))
     (if (not (gnus-check-backend-function
              'request-update-mark (car gnus-command-method)))
@@ -442,8 +420,7 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
             article (gnus-group-real-name group)
             (nth 1 gnus-command-method) accept-function last)))
 
-(defun gnus-request-accept-article (group &optional gnus-command-method last
-                                         no-encode)
+(defun gnus-request-accept-article (group &optional gnus-command-method last)
   ;; Make sure there's a newline at the end of the article.
   (when (stringp gnus-command-method)
     (setq gnus-command-method (gnus-server-to-method gnus-command-method)))
@@ -453,11 +430,6 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
   (goto-char (point-max))
   (unless (bolp)
     (insert "\n"))
-  (unless no-encode
-    (save-restriction
-      (message-narrow-to-head)
-      (mail-encode-encoded-word-buffer))
-    (message-encode-message-body))
   (let ((func (car (or gnus-command-method
                       (gnus-find-method-for-group group)))))
     (funcall (intern (format "%s-request-accept-article" func))
@@ -465,12 +437,7 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
             (cadr gnus-command-method)
             last)))
 
-(defun gnus-request-replace-article (article group buffer &optional no-encode)
-  (unless no-encode
-    (save-restriction
-      (message-narrow-to-head)
-      (mail-encode-encoded-word-buffer))
-    (message-encode-message-body))
+(defun gnus-request-replace-article (article group buffer)
   (let ((func (car (gnus-group-name-to-method group))))
     (funcall (intern (format "%s-request-replace-article" func))
             article (gnus-group-real-name group) buffer)))
index 2e3b064..40d94d4 100644 (file)
@@ -406,6 +406,7 @@ Returns the number of articles marked as read."
                ()
              (gnus-message 6 "Processing kill file %s..." (car kill-files))
              (find-file (car kill-files))
+             (gnus-add-current-to-buffer-list)
              (goto-char (point-min))
 
              (if (consp (ignore-errors (read (current-buffer))))
@@ -429,7 +430,7 @@ Returns the number of articles marked as read."
 (defun gnus-score-insert-help (string alist idx)
   (save-excursion
     (pop-to-buffer "*Score Help*")
-    (buffer-disable-undo)
+    (buffer-disable-undo (current-buffer))
     (erase-buffer)
     (insert string ":\n\n")
     (while alist
@@ -468,9 +469,9 @@ Returns the number of articles marked as read."
           (?h . "")
           (?f . "from")
           (?: . "subject")))
-       ;;(com-to-com
-       ;; '((?m . " ")
-       ;;   (?j . "X")))
+       (com-to-com
+        '((?m . " ")
+          (?j . "X")))
        pattern modifier commands)
     (while (not (eobp))
       (if (not (looking-at "[ \t]*/\\([^/]*\\)/\\([ahfcH]\\)?:\\([a-z=:]*\\)"))
@@ -524,7 +525,7 @@ COMMAND must be a lisp expression or a string representing a key sequence."
                  ;; It's on the form (regexp . date).
                  (if (zerop (gnus-execute field (car kill-list)
                                           command nil (not all)))
-                     (when (> (days-between date (cdr kill-list))
+                     (when (> (gnus-days-between date (cdr kill-list))
                               gnus-kill-expiry-days)
                        (setq regexp nil))
                    (setcdr kill-list date))
@@ -535,7 +536,7 @@ COMMAND must be a lisp expression or a string representing a key sequence."
                        (setq kdate (cdr kill))
                        (if (zerop (gnus-execute
                                    field (car kill) command nil (not all)))
-                           (when (> (days-between date kdate)
+                           (when (> (gnus-days-between date kdate)
                                     gnus-kill-expiry-days)
                              ;; Time limit has been exceeded, so we
                              ;; remove the match.
@@ -565,8 +566,8 @@ COMMAND must be a lisp expression or a string representing a key sequence."
               (not (consp (cdadr (nth 2 object))))))
       (concat "\n" (gnus-prin1-to-string object))
     (save-excursion
-      (set-buffer (gnus-get-buffer-create "*Gnus PP*"))
-      (buffer-disable-undo)
+      (set-buffer (get-buffer-create "*Gnus PP*"))
+      (buffer-disable-undo (current-buffer))
       (erase-buffer)
       (insert (format "\n(%S %S\n  '(" (nth 0 object) (nth 1 object)))
       (let ((klist (cadr (nth 2 object)))
@@ -702,9 +703,7 @@ Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score"
                 (and (car entry)
                      (or (eq (car entry) t)
                          (not (zerop (car entry))))))
-       (condition-case ()
-           (gnus-summary-read-group group nil t nil t)
-         (error nil))
+       (gnus-summary-read-group group nil t nil t)
        (when (eq (current-buffer) (get-buffer gnus-summary-buffer))
          (gnus-summary-exit))))
     ;; Exit Emacs.
index 2c5517a..f2913f1 100644 (file)
     (funcall type match (or (aref gnus-advanced-headers index) 0))))
 
 (defun gnus-advanced-date (index match type)
-  (let ((date (apply 'encode-time (parse-time-string
-                                  (aref gnus-advanced-headers index))))
-       (match (apply 'encode-time (parse-time-string match))))
+  (let ((date (encode-time (parse-time-string
+                           (aref gnus-advanced-headers index))))
+       (match (encode-time (parse-time-string match))))
     (cond
      ((eq type 'at)
       (equal date match))
      ((eq type 'before)
-      (time-less-p match date))
+      (gnus-time-less match date))
      ((eq type 'after)
-      (time-less-p date match))
+      (gnus-time-less date match))
      (t
       (error "No such date score type: %s" type)))))
 
diff --git a/lisp/gnus-mailcap.el b/lisp/gnus-mailcap.el
deleted file mode 100644 (file)
index 6e85b13..0000000
+++ /dev/null
@@ -1,851 +0,0 @@
-;;; mailcap.el --- Functions for displaying MIME parts
-;; Copyright (C) 1998 Free Software Foundation, Inc.
-
-;; Author: William M. Perry <wmperry@aventail.com>
-;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: news, 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:
-
-;;; Code:
-
-(eval-and-compile
-  (require 'cl))
-(require 'mail-parse)
-
-(defvar mailcap-parse-args-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 ?} ")" table)
-    table)
-  "A syntax table for parsing sgml attributes.")
-
-(defvar mailcap-mime-data
-  '(("application"
-     ("x-x509-ca-cert"
-      (viewer . ssl-view-site-cert)
-      (test . (fboundp 'ssl-view-site-cert))
-      (type . "application/x-x509-ca-cert"))
-     ("x-x509-user-cert"
-      (viewer . ssl-view-user-cert)
-      (test . (fboundp 'ssl-view-user-cert))
-      (type . "application/x-x509-user-cert"))
-     ("octet-stream"
-      (viewer . mailcap-save-binary-file)
-      (type ."application/octet-stream"))
-     ("dvi"
-      (viewer . "open %s")
-      (type   . "application/dvi")
-      (test   . (eq (mm-device-type) 'ns)))
-     ("dvi"
-      (viewer . "xdvi %s")
-      (test   . (eq (mm-device-type) 'x))
-      ("needsx11")
-      (type   . "application/dvi"))
-     ("dvi"
-      (viewer . "dvitty %s")
-      (test   . (not (getenv "DISPLAY")))
-      (type   . "application/dvi"))
-     ("emacs-lisp"
-      (viewer . mailcap-maybe-eval)
-      (type   . "application/emacs-lisp"))
-     ("x-tar"
-      (viewer . mailcap-save-binary-file)
-      (type   . "application/x-tar"))
-     ("x-latex"
-      (viewer . tex-mode)
-      (test   . (fboundp 'tex-mode))
-      (type   . "application/x-latex"))
-     ("x-tex"
-      (viewer . tex-mode)
-      (test   . (fboundp 'tex-mode))
-      (type   . "application/x-tex"))
-     ("latex"
-      (viewer . tex-mode)
-      (test   . (fboundp 'tex-mode))
-      (type   . "application/latex"))
-     ("tex"
-      (viewer . tex-mode)
-      (test   . (fboundp 'tex-mode))
-      (type   . "application/tex"))
-     ("texinfo"
-      (viewer . texinfo-mode)
-      (test   . (fboundp 'texinfo-mode))
-      (type   . "application/tex"))
-     ("zip"
-      (viewer . mailcap-save-binary-file)
-      (type   . "application/zip")
-      ("copiousoutput"))
-     ("pdf"
-      (viewer . "acroread %s")
-      (type   . "application/pdf"))
-     ("postscript"
-      (viewer . "open %s")
-      (type   . "application/postscript")
-      (test   . (eq (mm-device-type) 'ns)))
-     ("postscript"
-      (viewer . "ghostview %s")
-      (type . "application/postscript")
-      (test   . (eq (mm-device-type) 'x))
-      ("needsx11"))
-     ("postscript"
-      (viewer . "ps2ascii %s")
-      (type . "application/postscript")
-      (test . (not (getenv "DISPLAY")))
-      ("copiousoutput")))
-    ("audio"
-     ("x-mpeg"
-      (viewer . "maplay %s")
-      (type   . "audio/x-mpeg"))
-     (".*"
-      (viewer . mailcap-save-binary-file)
-      (test   . (or (featurep 'nas-sound)
-                     (featurep 'native-sound)))
-      (type   . "audio/*"))
-     (".*"
-      (viewer . "showaudio")
-      (type   . "audio/*")))
-    ("message"
-     ("rfc-*822"
-      (viewer . gnus-article-prepare-display)
-      (test   . (and (featurep 'gnus)
-                    (gnus-alive-p)))
-      (type   . "message/rfc-822"))
-     ("rfc-*822"
-      (viewer . vm-mode)
-      (test   . (fboundp 'vm-mode))
-      (type   . "message/rfc-822"))
-     ("rfc-*822"
-      (viewer . w3-mode)
-      (test   . (fboundp 'w3-mode))
-      (type   . "message/rfc-822"))
-     ("rfc-*822"
-      (viewer . view-mode)
-      (test   . (fboundp 'view-mode))
-      (type   . "message/rfc-822"))
-     ("rfc-*822"
-      (viewer . fundamental-mode)
-      (type   . "message/rfc-822")))
-    ("image"
-     ("x-xwd"
-      (viewer  . "xwud -in %s")
-      (type    . "image/x-xwd")
-      ("compose" . "xwd -frame > %s")
-      (test    . (eq (mm-device-type) 'x))
-      ("needsx11"))
-     ("x11-dump"
-      (viewer . "xwud -in %s")
-      (type . "image/x-xwd")
-      ("compose" . "xwd -frame > %s")
-      (test   . (eq (mm-device-type) 'x))
-      ("needsx11"))
-     ("windowdump"
-      (viewer . "xwud -in %s")
-      (type . "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)))
-     (".*"
-      (viewer . "xv -perfect %s")
-      (type . "image/*")
-      (test   . (eq (mm-device-type) 'x))
-      ("needsx11")))
-    ("text"
-     ("plain"
-      (viewer  . w3-mode)
-      (test    . (fboundp 'w3-mode))
-      (type    . "text/plain"))
-     ("plain"
-      (viewer  . view-mode)
-      (test    . (fboundp 'view-mode))
-      (type    . "text/plain"))
-     ("plain"
-      (viewer  . fundamental-mode)
-      (type    . "text/plain"))
-     ("enriched"
-      (viewer . enriched-decode-region)
-      (test   . (fboundp 'enriched-decode))
-      (type   . "text/enriched"))
-     ("html"
-      (viewer . mm-w3-prepare-buffer)
-      (test   . (fboundp 'w3-prepare-buffer))
-      (type   . "text/html")))
-    ("video"
-     ("mpeg"
-      (viewer . "mpeg_play %s")
-      (type   . "video/mpeg")
-      (test   . (eq (mm-device-type) 'x))
-      ("needsx11")))
-    ("x-world"
-     ("x-vrml"
-      (viewer  . "webspace -remote %s -URL %u")
-      (type    . "x-world/x-vrml")
-      ("description"
-       "VRML document")))
-    ("archive"
-     ("tar"
-      (viewer . tar-mode)
-      (type . "archive/tar")
-      (test . (fboundp 'tar-mode)))))
-     "*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)
-
-Which looks like:
------------------
- ((\"application\"
-   (\"postscript\" . <info>))
-  (\"text\"
-   (\"plain\" . <info>)))
-
-Where <info> is another assoc list of the various information
-related to the mailcap RFC.  This is keyed on the lowercase
-attribute name (viewer, test, etc).  This looks like:
- ((viewer . viewerinfo)
-  (test   . testinfo)
-  (xxxx   . \"string\"))
-
-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 (or (getenv "TMPDIR") "/tmp")
-  "*Where temporary files go.")
-
-;;;
-;;; 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
-      (let ((file (read-file-name
-                  "Filename to save as: "
-                  (or mailcap-download-directory "~/")))
-           (require-final-newline nil))
-       (write-region (point-min) (point-max) file))
-    (kill-buffer (current-buffer))))
-
-(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)))
-
-;;;
-;;; The mailcap parser
-;;;
-
-(defun mailcap-replace-regexp (regexp to-string)
-  ;; Quiet replace-regexp.
-  (goto-char (point-min))
-  (while (re-search-forward regexp nil t)
-    (replace-match to-string t nil)))
-
-(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."
-  (interactive (list nil t))
-  (when (or (not mailcap-parsed-p)
-           force)
-    (cond
-     (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")
-                           ";")))
-     (t (setq path (mapconcat 'expand-file-name
-                             '("~/.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))
-                            ";"
-                          ":"))))
-         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)))
-       (setq fnames (cdr fnames))))
-    (setq mailcap-parsed-p t)))
-
-(defun mailcap-parse-mailcap (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
-       viewer                          ; How to view this mime type
-       info                            ; Misc info about this mime type
-       )
-    (with-temp-buffer
-      (insert-file-contents fname)
-      (set-syntax-table mailcap-parse-args-syntax-table)
-      (mailcap-replace-regexp "#.*" "")        ; Remove all comments
-      (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")
-       (setq save-pos (point)
-             info nil)
-       (skip-chars-forward "^/;")
-       (downcase-region save-pos (point))
-       (setq major (buffer-substring save-pos (point)))
-       (skip-chars-forward "/ \t\n")
-       (setq save-pos (point))
-       (skip-chars-forward "^;")
-       (downcase-region save-pos (point))
-       (setq minor
-             (cond
-              ((eq ?* (or (char-after save-pos) 0)) ".*")
-              ((= (point) save-pos) ".*")
-              (t (buffer-substring save-pos (point)))))
-       (skip-chars-forward "; \t\n")
-       ;;; 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)
-       (skip-chars-forward "; \t\n")
-       (setq save-pos (point))
-       (skip-chars-forward "^;\n")
-       (if (eq (or (char-after save-pos) 0) ?')
-           (setq viewer (progn
-                          (narrow-to-region (1+ save-pos) (point))
-                          (goto-char (point-min))
-                          (prog1
-                              (read (current-buffer))
-                            (goto-char (point-max))
-                            (widen))))
-         (setq viewer (buffer-substring save-pos (point))))
-       (setq save-pos (point))
-       (end-of-line)
-       (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)))))
-
-(defun mailcap-parse-mailcap-extras (st nd)
-  ;; Grab all the extra stuff from a mailcap entry
-  (let (
-       name                            ; From name=
-       value                           ; its value
-       results                         ; Assoc list of results
-       name-pos                        ; Start of XXXX= position
-       val-pos                         ; Start of value position
-       done                            ; Found end of \'d ;s?
-       )
-    (save-restriction
-      (narrow-to-region st nd)
-      (goto-char (point-min))
-      (skip-chars-forward " \n\t;")
-      (while (not (eobp))
-       (setq done nil)
-       (skip-chars-forward " \";\n\t")
-       (setq name-pos (point))
-       (skip-chars-forward "^ \n\t=")
-       (downcase-region name-pos (point))
-       (setq name (buffer-substring name-pos (point)))
-       (skip-chars-forward " \t\n")
-       (if (not (eq (or (char-after (point)) 0) ?=)) ; There is no value
-           (setq value nil)
-         (skip-chars-forward " \t\n=")
-         (setq val-pos (point))
-         (if (memq (char-after val-pos) '(?\" ?'))
-             (progn
-               (setq val-pos (1+ val-pos))
-               (condition-case nil
-                   (progn
-                     (forward-sexp 1)
-                     (backward-char 1))
-                 (error (goto-char (point-max)))))
-           (while (not done)
-             (skip-chars-forward "^;")
-             (if (eq (or (char-after (1- (point))) 0) ?\\ )
-                 (progn
-                   (subst-char-in-region (1- (point)) (point) ?\\ ? )
-                   (skip-chars-forward ";"))
-               (setq done t))))
-         (setq value (buffer-substring val-pos (point))))
-       (setq results (cons (cons name value) results)))
-      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
-       )
-    (setq status (and test (split-string (cdr test) " ")))
-    (if (and (or (assoc "needsterm" info)
-                (assoc "needsx11" info))
-            (not (getenv "DISPLAY")))
-       (setq status nil)
-      (cond
-       ((and (equal (nth 0 status) "test")
-            (equal (nth 1 status) "-n")
-            (or (equal (nth 2 status) "$DISPLAY")
-                (equal (nth 2 status) "\"$DISPLAY\"")))
-       (setq status (if (getenv "DISPLAY") t nil)))
-       ((and (equal (nth 0 status) "test")
-            (equal (nth 1 status) "-z")
-            (or (equal (nth 2 status) "$DISPLAY")
-                (equal (nth 2 status) "\"$DISPLAY\"")))
-       (setq status (if (getenv "DISPLAY") nil t)))
-       (test nil)
-       (t nil)))
-    (and test (listp test) (setcdr test status))))
-
-;;;
-;;; The action routines.
-;;;
-
-(defun mailcap-possible-viewers (major 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))
-       (setq wildcard (cons (cdr (car major)) wildcard))))
-      (setq major (cdr major)))
-    (nconc (nreverse exact) (nreverse wildcard))))
-
-(defun mailcap-unescape-mime-test (test type-info)
-  (let (save-pos save-chr subst)
-    (cond
-     ((symbolp test) test)
-     ((and (listp test) (symbolp (car test))) test)
-     ((or (stringp test)
-         (and (listp test) (stringp (car test))
-              (setq test (mapconcat 'identity test " "))))
-      (with-temp-buffer
-       (insert test)
-       (goto-char (point-min))
-       (while (not (eobp))
-         (skip-chars-forward "^%")
-         (if (/= (- (point)
-                    (progn (skip-chars-backward "\\\\")
-                           (point)))
-                 0)                    ; It is an escaped %
-             (progn
-               (delete-char 1)
-               (skip-chars-forward "%."))
-           (setq save-pos (point))
-           (skip-chars-forward "%")
-           (setq save-chr (char-after (point)))
-           (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)
-             (delete-region save-pos (progn (forward-char 1) (point)))
-             (insert "\"\""))
-            ((= save-chr ?{)
-             (forward-char 1)
-             (skip-chars-forward "^}")
-             (downcase-region (+ 2 save-pos) (point))
-             (setq subst (buffer-substring (+ 2 save-pos) (point)))
-             (delete-region save-pos (1+ (point)))
-             (insert (or (cdr (assoc subst type-info)) "\"\"")))
-            (t nil))))
-       (buffer-string)))
-     (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).
-  (let* ((test-info (assq 'test viewer-info))
-        (test (cdr test-info))
-        (otest test)
-        (viewer (cdr (assoc 'viewer viewer-info)))
-        (default-directory (expand-file-name "~/"))
-        status parsed-test cache result)
-    (if (setq cache (assoc test mailcap-viewer-test-cache))
-       (cadr cache)
-      (setq
-       result
-       (cond
-       ((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))
-        (funcall test type-info))
-       ((and (symbolp test)            ; Lisp variable as test
-             (boundp test))
-        (symbol-value test))
-       ((and (listp test)              ; List to be eval'd
-             (symbolp (car test)))
-        (eval test))
-       (t
-        (setq test (mailcap-unescape-mime-test test type-info)
-              test (list shell-file-name nil nil nil
-                         shell-command-switch test)
-              status (apply 'call-process test))
-        (= 0 status))))
-      (push (list otest result) mailcap-viewer-test-cache)
-      result)))
-
-(defun mailcap-add-mailcap-entry (major minor info)
-  (let ((old-major (assoc major mailcap-mime-data)))
-    (if (null old-major)               ; New major area
-       (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)))))))))
-
-;;;
-;;; The main whabbo
-;;;
-
-(defun mailcap-viewer-lessp (x 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)) ""))))
-       (y-lisp (not (stringp (or (cdr-safe (assq 'viewer y)) "")))))
-    (cond
-     ((and x-lisp (not y-lisp))
-      t)
-     ((and (not y-lisp) x-wild (not y-wild))
-      t)
-     ((and (not x-wild) y-wild)
-      t)
-     (t nil))))
-
-(defun mailcap-mime-info (string &optional request)
-  "Get the MIME viewer command for STRING, return nil if none found.
-Expects a complete content-type header line as its argument.
-
-Second argument REQUEST specifies what information to return.  If it is
-nil or the empty string, the viewer (second field of the mailcap
-entry) will be returned.  If it is a string, then the mailcap field
-corresponding to that string will be returned (print, description,
-whatever).  If a number, then all the information for this specific
-viewer is returned.  If `all', then all possible viewers for
-this type is returned."
-  (let (
-       major                           ; Major encoding (text, etc)
-       minor                           ; Minor encoding (html, etc)
-       info                            ; Other info
-       save-pos                        ; Misc. position during parse
-       major-info                      ; (assoc major mailcap-mime-data)
-       minor-info                      ; (assoc minor major-info)
-       test                            ; current test proc.
-       viewers                         ; Possible viewers
-       passed                          ; Viewers that passed the test
-       viewer                          ; The one and only viewer
-       ctl)
-    (save-excursion
-      (setq ctl (mail-header-parse-content-type (or string "text/plain")))
-      (setq major (split-string (car ctl) "/"))
-      (setq minor (cadr major)
-           major (car major))
-      (when (setq major-info (cdr (assoc major mailcap-mime-data)))
-       (when (setq viewers (mailcap-possible-viewers major-info minor))
-         (setq info (mapcar (lambda (a) (cons (symbol-name (car a))
-                                              (cdr a)))
-                            (cdr ctl)))
-         (while viewers
-           (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 viewer (car passed))))
-      (when (and (stringp (cdr (assq 'viewer viewer)))
-                passed)
-       (setq viewer (car passed)))
-      (cond
-       ((and (null viewer) (not (equal major "default")) request)
-       (mailcap-mime-info "default" request))
-       ((or (null request) (equal request ""))
-       (mailcap-unescape-mime-test (cdr (assq 'viewer viewer)) info))
-       ((stringp request)
-       (if (or (eq request 'test) (eq request 'viewer))
-           (mailcap-unescape-mime-test
-            (cdr-safe (assoc request viewer)) info)))
-       ((eq request 'all)
-       passed)
-       (t
-       ;; MUST make a copy *sigh*, else we modify mailcap-mime-data
-       (setq viewer (copy-tree viewer))
-       (let ((view (assq 'viewer viewer))
-             (test (assq 'test viewer)))
-         (if view (setcdr view (mailcap-unescape-mime-test (cdr view) info)))
-         (if test (setcdr test (mailcap-unescape-mime-test (cdr test) info))))
-       viewer)))))
-
-;;;
-;;; Experimental MIME-types parsing
-;;;
-
-(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")
-    (".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/x-pixmap")
-    (".xwd"      . "image/windowdump")
-    (".zip"      . "application/zip")
-    (".ai"       . "application/postscript")
-    (".jpe"      . "image/jpeg")
-    (".jpeg"     . "image/jpeg"))
-  "*An assoc list of file extensions and the MIME content-types they
-correspond to.")
-
-(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)))))
-
-(defun mailcap-parse-mimetype-file (fname)
-  ;; Parse out a mime-types file
-  (let (type                           ; The MIME type for this line
-       extns                           ; The extensions for this line
-       save-pos                        ; Misc. saved buffer positions
-       )
-    (with-temp-buffer
-      (insert-file-contents fname)
-      (mailcap-replace-regexp "#.*" "")
-      (mailcap-replace-regexp "\n+" "\n")
-      (mailcap-replace-regexp "[ \t]+$" "")
-      (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")
-       (setq save-pos (point))
-       (skip-chars-forward "^ \t")
-       (downcase-region save-pos (point))
-       (setq type (buffer-substring save-pos (point)))
-       (while (not (eolp))
-         (skip-chars-forward " \t")
-         (setq save-pos (point))
-         (skip-chars-forward "^ \t\n")
-         (setq extns (cons (buffer-substring save-pos (point)) extns)))
-       (while extns
-         (setq mailcap-mime-extensions
-               (cons
-                (cons (if (= (string-to-char (car extns)) ?.)
-                          (car extns)
-                        (concat "." (car extns))) type)
-                mailcap-mime-extensions)
-               extns (cdr extns)))))))
-
-(defun mailcap-extension-to-mime (extn)
-  "Return the MIME content type of the file extensions EXTN."
-  (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))))))))
-
-(provide 'mailcap)
-
-;;; mailcap.el ends here
index fa01f5a..3960408 100644 (file)
@@ -64,7 +64,7 @@ Optional argument FOLDER specifies folder name."
                   (funcall gnus-folder-save-name gnus-newsgroup-name
                            gnus-current-headers gnus-newsgroup-last-folder)
                   t))))
-       (errbuf (gnus-get-buffer-create " *Gnus rcvstore*"))
+       (errbuf (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
index 09a3f47..0c830cb 100644 (file)
@@ -1,9 +1,10 @@
-;;; gnus-msg.el --- mail and post interface for Gnus
+;;; gnus-msg.el --- mail and post interface for Semi-gnus
 ;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
-;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: news
+;;        Lars Magne Ingebrigtsen <larsi@gnus.org>
+;;         MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Keywords: mail, news, MIME
 
 ;; This file is part of GNU Emacs.
 
@@ -97,22 +98,8 @@ the second with the current group name.")
 (defvar gnus-bug-create-help-buffer t
   "*Should we create the *Gnus Help Bug* buffer?")
 
-(defvar gnus-posting-styles nil
-  "*Alist of styles to use when posting.")
-
-(defvar gnus-posting-style-alist
-  '((organization . message-user-organization)
-    (signature . message-signature)
-    (signature-file . message-signature-file)
-    (address . user-mail-address)
-    (name . user-full-name))
-  "*Mapping from style parameters to variables.")
-
 ;;; Internal variables.
 
-(defvar gnus-inhibit-posting-styles nil
-  "Inhibit the use of posting styles.")
-
 (defvar gnus-message-buffer "*Mail Gnus*")
 (defvar gnus-article-copy nil)
 (defvar gnus-last-posting-server nil)
@@ -188,11 +175,9 @@ Thank you for your help in stamping out bugs.
           (,article (and gnus-article-reply (gnus-summary-article-number)))
           (,group gnus-newsgroup-name)
           (message-header-setup-hook
-           (copy-sequence message-header-setup-hook))
-          (message-mode-hook (copy-sequence message-mode-hook)))
+           (copy-sequence message-header-setup-hook)))
        (add-hook 'message-header-setup-hook 'gnus-inews-insert-gcc)
        (add-hook 'message-header-setup-hook 'gnus-inews-insert-archive-gcc)
-       (add-hook 'message-mode-hook 'gnus-configure-posting-styles)
        (unwind-protect
           (progn
             ,@forms)
@@ -202,7 +187,6 @@ Thank you for your help in stamping out bugs.
              (cons ,group ,article))
         (make-local-variable 'gnus-newsgroup-name)
         (gnus-run-hooks 'gnus-message-setup-hook))
-       (gnus-add-buffer)
        (gnus-configure-windows ,config t)
        (set-buffer-modified-p nil))))
 
@@ -228,20 +212,11 @@ Thank you for your help in stamping out bugs.
 
 ;;; Post news commands of Gnus group mode and summary mode
 
-(defun gnus-group-mail (&optional arg)
-  "Start composing a mail.
-If ARG, use the group under the point to find a posting style.
-If ARG is 1, prompt for a group name to find the posting style."
-  (interactive "P")
-  (let ((gnus-newsgroup-name
-        (if arg
-            (if (= 1 (prefix-numeric-value arg))
-                (completing-read "Use posting style of group: "
-                                 gnus-active-hashtb nil
-                                 (gnus-read-active-file-p))
-              (gnus-group-group-name))
-          "")))
-    (gnus-setup-message 'message (message-mail))))
+(defun gnus-group-mail ()
+  "Start composing a mail."
+  (interactive)
+  (gnus-setup-message 'message
+    (message-mail)))
 
 (defun gnus-group-post-news (&optional arg)
   "Start composing a news message.
@@ -328,8 +303,10 @@ post using the current select method."
        article)
     (while (setq article (pop articles))
       (when (gnus-summary-select-article t nil nil article)
-       (when (gnus-eval-in-buffer-window gnus-original-article-buffer
-               (message-cancel-news))
+       (when (gnus-eval-in-buffer-window gnus-article-buffer
+               (save-excursion
+                 (set-buffer gnus-original-article-buffer)
+                 (message-cancel-news)))
          (gnus-summary-mark-as-read article gnus-canceled-mark)
          (gnus-cache-remove-article 1))
        (gnus-article-hide-headers-if-wanted))
@@ -361,12 +338,12 @@ header line with the old Message-ID."
   ;; this copy is in the buffer gnus-article-copy.
   ;; if ARTICLE-BUFFER is nil, gnus-article-buffer is used
   ;; this buffer should be passed to all mail/news reply/post routines.
-  (setq gnus-article-copy (gnus-get-buffer-create " *gnus article copy*"))
-  (save-excursion
-    (set-buffer gnus-article-copy)
-    (mm-enable-multibyte))
+  (setq gnus-article-copy (get-buffer-create " *gnus article copy*"))
+  (buffer-disable-undo gnus-article-copy)
+  (or (memq gnus-article-copy gnus-buffer-list)
+      (push gnus-article-copy gnus-buffer-list))
   (let ((article-buffer (or article-buffer gnus-article-buffer))
-       end beg)
+       end beg contents)
     (if (not (and (get-buffer article-buffer)
                  (gnus-buffer-exists-p article-buffer)))
        (error "Can't find any article buffer")
@@ -395,10 +372,10 @@ header line with the old Message-ID."
          ;; Delete the headers from the displayed articles.
          (set-buffer gnus-article-copy)
          (delete-region (goto-char (point-min))
-                        (or (search-forward "\n\n" nil t) (point-max)))
+                        (or (search-forward "\n\n" nil t) (point)))
          ;; Insert the original article headers.
          (insert-buffer-substring gnus-original-article-buffer beg end)
-         (article-decode-encoded-words)))
+         (gnus-article-decode-rfc1522)))
       gnus-article-copy)))
 
 (defun gnus-post-news (post &optional group header article-buffer yank subject
@@ -494,16 +471,14 @@ If SILENT, don't prompt the user."
                   (list gnus-post-method)))
               gnus-secondary-select-methods
               (mapcar 'cdr gnus-server-alist)
-              (mapcar 'car gnus-opened-servers)
               (list gnus-select-method)
               (list group-method)))
             method-alist post-methods method)
        ;; Weed out all mail methods.
        (while methods
          (setq method (gnus-server-get-method "" (pop methods)))
-         (when (and (or (gnus-method-option-p method 'post)
-                        (gnus-method-option-p method 'post-mail))
-                    (not (member method post-methods)))
+         (when (or (gnus-method-option-p method 'post)
+                   (gnus-method-option-p method 'post-mail))
            (push method post-methods)))
        ;; Create a name-method alist.
        (setq method-alist
@@ -525,42 +500,26 @@ If SILENT, don't prompt the user."
          method-alist))))
      ;; Override normal method.
      ((and (eq gnus-post-method 'current)
-          (not (eq (car group-method) 'nndraft))
           (not arg))
-      group-method)
-     ((and gnus-post-method
-          (not (eq gnus-post-method 'current)))
+      group-method) 
+     (gnus-post-method
       gnus-post-method)
      ;; Use the normal select method.
      (t gnus-select-method))))
 
 \f
 
-;; Dummies to avoid byte-compile warning.
+;; Dummy to avoid byte-compile warning.
 (defvar nnspool-rejected-article-hook)
 (defvar xemacs-codename)
 
+;;; Since the X-Newsreader/X-Mailer are ``vanity'' headers, they might
+;;; as well include the Emacs version as well.
+;;; The following function works with later GNU Emacs, and XEmacs.
 (defun gnus-extended-version ()
-  "Stringified Gnus version and Emacs version."
+  "Stringified gnus version."
   (interactive)
-  (concat
-   "Gnus/" (prin1-to-string (gnus-continuum-version gnus-version) t)
-   " (" gnus-version ")"
-   " "
-   (cond
-    ((string-match "^\\([0-9]+\\.[0-9]+\\)\\.[.0-9]+$" emacs-version)
-     (concat "Emacs/" (match-string 1 emacs-version)))
-    ((string-match "\\([A-Z]*[Mm][Aa][Cc][Ss]\\)[^(]*\\(\\((beta.*)\\|'\\)\\)?"
-                  emacs-version)
-     (concat (match-string 1 emacs-version)
-            (format "/%d.%d" emacs-major-version emacs-minor-version)
-            (if (match-beginning 3)
-                (match-string 3 emacs-version)
-              "")
-            (if (boundp 'xemacs-codename)
-                (concat " (" xemacs-codename ")")
-              "")))
-    (t emacs-version))))
+  gnus-version)
 
 \f
 ;;;
@@ -615,17 +574,14 @@ If FULL-HEADERS (the prefix), include full headers when forwarding."
   (interactive "P")
   (gnus-setup-message 'forward
     (gnus-summary-select-article)
-    (let (text)
-      (save-excursion
-       (set-buffer gnus-original-article-buffer)
-       (setq text (buffer-string)))
-      (set-buffer (gnus-get-buffer-create " *Gnus forward*"))
-      (erase-buffer)
-      (insert text)
-      (run-hooks 'gnus-article-decode-hook)
-      (let ((message-included-forward-headers
-            (if full-headers "" message-included-forward-headers)))
-       (message-forward post)))))
+    (let ((charset default-mime-charset))
+      (set-buffer gnus-original-article-buffer)
+      (make-local-variable 'default-mime-charset)
+      (setq default-mime-charset charset)
+      )
+    (let ((message-included-forward-headers
+          (if full-headers "" message-included-forward-headers)))
+      (message-forward post))))
 
 (defun gnus-summary-resend-message (address n)
   "Resend the current article to ADDRESS."
@@ -675,8 +631,7 @@ The current group name will be inserted at \"%s\".")
        (gnus-summary-select-article)
        (set-buffer gnus-original-article-buffer)
        (if (and (<= (length (message-tokenize-header
-                             (setq newsgroups
-                                   (mail-fetch-field "newsgroups"))
+                             (setq newsgroups (mail-fetch-field "newsgroups"))
                              ", "))
                     1)
                 (or (not (setq followup-to (mail-fetch-field "followup-to")))
@@ -838,7 +793,8 @@ The source file has to be in the Emacs load path."
     (sit-for 0)
     ;; Go through all the files looking for non-default values for variables.
     (save-excursion
-      (set-buffer (gnus-get-buffer-create " *gnus bug info*"))
+      (set-buffer (get-buffer-create " *gnus bug info*"))
+      (buffer-disable-undo (current-buffer))
       (while files
        (erase-buffer)
        (when (and (setq file (locate-library (pop files)))
@@ -916,7 +872,7 @@ this is a reply."
       (save-restriction
        (message-narrow-to-headers)
        (let ((gcc (or gcc (mail-fetch-field "gcc" nil t)))
-             (cur (current-buffer))
+             (coding-system-for-write 'raw-text)
              groups group method)
          (when gcc
            (message-remove-header "gcc")
@@ -944,13 +900,14 @@ this is a reply."
                (gnus-request-create-group group method))
              (save-excursion
                (nnheader-set-temp-buffer " *acc*")
-               (insert-buffer-substring cur)
+               (insert-buffer-substring message-encoding-buffer)
+               (gnus-run-hooks 'gnus-before-do-gcc-hook)
                (goto-char (point-min))
                (when (re-search-forward
                       (concat "^" (regexp-quote mail-header-separator) "$")
                       nil t)
                  (replace-match "" t t ))
-               (unless (gnus-request-accept-article group method t t)
+               (unless (gnus-request-accept-article group method t)
                  (gnus-message 1 "Couldn't store article in group %s: %s"
                                group (gnus-status-message method))
                  (sit-for 2))
@@ -981,7 +938,7 @@ this is a reply."
          (and gnus-newsgroup-name
               (gnus-group-find-parameter
                gnus-newsgroup-name 'gcc-self)))
-        result
+        result 
         (groups
          (cond
           ((null gnus-message-archive-method)
@@ -1047,89 +1004,6 @@ this is a reply."
                (insert " ")))
            (insert "\n")))))))
 
-;;; Posting styles.
-
-(defvar gnus-message-style-insertions nil)
-
-(defun gnus-configure-posting-styles ()
-  "Configure posting styles according to `gnus-posting-styles'."
-  (unless gnus-inhibit-posting-styles
-    (let ((styles gnus-posting-styles)
-         (gnus-newsgroup-name (or gnus-newsgroup-name ""))
-         style match variable attribute value value-value)
-      (make-local-variable 'gnus-message-style-insertions)
-      ;; Go through all styles and look for matches.
-      (while styles
-       (setq style (pop styles)
-             match (pop style))
-       (when (cond ((stringp match)
-                    ;; Regexp string match on the group name.
-                    (string-match match gnus-newsgroup-name))
-                   ((or (symbolp match)
-                        (gnus-functionp match))
-                    (cond ((gnus-functionp match)
-                           ;; Function to be called.
-                           (funcall match))
-                          ((boundp match)
-                           ;; Variable to be checked.
-                           (symbol-value match))))
-                   ((listp match)
-                    ;; This is a form to be evaled.
-                    (eval match)))
-         ;; We have a match, so we set the variables.
-         (while style
-           (setq attribute (pop style)
-                 value (cadr attribute)
-                 variable nil)
-           ;; We find the variable that is to be modified.
-           (if (and (not (stringp (car attribute)))
-                    (not (eq 'body (car attribute)))
-                    (not (setq variable
-                               (cdr (assq (car attribute)
-                                          gnus-posting-style-alist)))))
-               (message "Couldn't find attribute %s" (car attribute))
-             ;; We get the value.
-             (setq value-value
-                   (cond ((stringp value)
-                          value)
-                         ((or (symbolp value)
-                              (gnus-functionp value))
-                          (cond ((gnus-functionp value)
-                                 (funcall value))
-                                ((boundp value)
-                                 (symbol-value value))))
-                         ((listp value)
-                          (eval value))))
-             (if variable
-                 ;; This is an ordinary variable.
-                 (set (make-local-variable variable) value-value)
-               ;; This is either a body or a header to be inserted in the
-               ;; message.
-               (when value-value
-                 (let ((attr (car attribute)))
-                   (make-local-variable 'message-setup-hook)
-                   (if (eq 'body attr)
-                       (add-hook 'message-setup-hook
-                                 `(lambda ()
-                                    (save-excursion
-                                      (message-goto-body)
-                                      (insert ,value-value))))
-                     (add-hook 'message-setup-hook
-                               'gnus-message-insert-stylings)
-                     (push (cons (if (stringp attr) attr
-                                   (symbol-name attr))
-                                 value-value)
-                           gnus-message-style-insertions))))))))))))
-
-(defun gnus-message-insert-stylings ()
-  (let (val)
-    (save-excursion
-      (message-goto-eoh)
-      (while (setq val (pop gnus-message-style-insertions))
-       (when (cdr val)
-         (insert (car val) ": " (cdr val) "\n"))
-       (gnus-pull (car val) gnus-message-style-insertions)))))
-
 ;;; Allow redefinition of functions.
 
 (gnus-ems-redefine)
index 8659779..d678531 100644 (file)
@@ -146,7 +146,7 @@ matches an previously scanned and verified nocem message."
          (save-excursion
            (let ((dependencies (make-vector 10 nil))
                  headers header)
-             (with-temp-buffer
+             (nnheader-temp-write nil
                (setq headers
                      (if (eq 'nov
                              (gnus-retrieve-headers
@@ -190,9 +190,9 @@ matches an previously scanned and verified nocem message."
   (let ((date (mail-header-date header))
        issuer b e type)
     (when (or (not date)
-             (time-less-p
-              (time-since (date-to-time date))
-              (days-to-time gnus-nocem-expiry-wait)))
+             (nnmail-time-less
+              (nnmail-time-since (nnmail-date-to-time date))
+              (nnmail-days-to-time gnus-nocem-expiry-wait)))
       (gnus-request-article-this-buffer (mail-header-number header) group)
       (goto-char (point-min))
       (when (re-search-forward "-----BEGIN PGP MESSAGE-----" nil t)
@@ -271,7 +271,7 @@ matches an previously scanned and verified nocem message."
                              gnus-nocem-real-group-hashtb)
            ;; Valid group.
            (beginning-of-line)
-           (while (eq (char-after) ?\t)
+           (while (= (following-char) ?\t)
              (forward-line -1))
            (setq id (buffer-substring (point) (1- (search-forward "\t"))))
            (unless (gnus-gethash id gnus-nocem-hashtb)
@@ -279,7 +279,7 @@ matches an previously scanned and verified nocem message."
              (gnus-sethash id t gnus-nocem-hashtb)
              (push id ncm))
            (forward-line 1)
-           (while (eq (char-after) ?\t)
+           (while (= (following-char) ?\t)
              (forward-line 1))))))
       (when ncm
        (setq gnus-nocem-touched-alist t)
@@ -302,13 +302,13 @@ matches an previously scanned and verified nocem message."
   "Save the NoCeM cache."
   (when (and gnus-nocem-alist
             gnus-nocem-touched-alist)
-    (with-temp-file (gnus-nocem-cache-file)
+    (nnheader-temp-write (gnus-nocem-cache-file)
       (gnus-prin1 `(setq gnus-nocem-alist ',gnus-nocem-alist)))
     (setq gnus-nocem-touched-alist nil)))
 
 (defun gnus-nocem-save-active ()
   "Save the NoCeM active file."
-  (with-temp-file (gnus-nocem-active-file)
+  (nnheader-temp-write (gnus-nocem-active-file)
     (gnus-prin1 `(setq gnus-nocem-active ',gnus-nocem-active))))
 
 (defun gnus-nocem-alist-to-hashtb ()
@@ -316,11 +316,11 @@ matches an previously scanned and verified nocem message."
   (let* ((alist gnus-nocem-alist)
         (pprev (cons nil alist))
         (prev pprev)
-        (expiry (days-to-time gnus-nocem-expiry-wait))
+        (expiry (nnmail-days-to-time gnus-nocem-expiry-wait))
         entry)
     (setq gnus-nocem-hashtb (gnus-make-hashtable (* (length alist) 51)))
     (while (setq entry (car alist))
-      (if (not (time-less-p (time-since (car entry)) expiry))
+      (if (not (nnmail-time-less (nnmail-time-since (car entry)) expiry))
          ;; This entry has expired, so we remove it.
          (setcdr prev (cdr alist))
        (setq prev alist)
index 895505e..799e883 100644 (file)
@@ -55,7 +55,7 @@
     list1))
 
 (defun gnus-sorted-complement (list1 list2)
-  "Return a list of elements that are in LIST1 or LIST2 but not both.
+  "Return a list of elements of LIST1 that do not appear in LIST2.
 Both lists have to be sorted over <."
   (let (out)
     (if (or (null list1) (null list2))
@@ -229,7 +229,7 @@ Note: LIST has to be sorted over `<'."
 Note: LIST has to be sorted over `<'."
   ;; !!! This function shouldn't look like this, but I've got a headache.
   (gnus-compress-sequence
-   (gnus-set-difference
+   (gnus-sorted-complement
     (gnus-uncompress-range ranges) list)))
 
 (defun gnus-member-of-range (number ranges)
index b50341d..c8280b2 100644 (file)
@@ -73,10 +73,21 @@ It accepts the same format specs that `gnus-summary-line-format' does."
 
   (gnus-define-keys gnus-pick-mode-map
     " " gnus-pick-next-page
-    "u" gnus-pick-unmark-article-or-thread
-    "." gnus-pick-article-or-thread
+    "u" gnus-summary-unmark-as-processable
+    "." gnus-pick-article
     gnus-down-mouse-2 gnus-pick-mouse-pick-region
     "\r" gnus-pick-start-reading
+    "t" gnus-uu-mark-thread
+    "T" gnus-uu-unmark-thread
+    "U" gnus-summary-unmark-all-processable
+    "v" gnus-uu-mark-over
+    "r" gnus-uu-mark-region
+    "R" gnus-uu-unmark-region
+    "e" gnus-uu-mark-by-regexp
+    "E" gnus-uu-mark-by-regexp
+    "b" gnus-uu-mark-buffer
+    "B" gnus-uu-unmark-buffer
+    "X" gnus-pick-start-reading
     ))
 
 (defun gnus-pick-make-menu-bar ()
@@ -131,8 +142,7 @@ It accepts the same format specs that `gnus-summary-line-format' does."
               (set-buffer gnus-summary-buffer)
               gnus-pick-mode))
     (message-add-action
-     '(gnus-configure-windows ,gnus-current-window-configuration t)
-     'send 'exit 'postpone 'kill)))
+     '(gnus-configure-windows 'pick t) 'send 'exit 'postpone 'kill)))
 
 (defvar gnus-pick-line-number 1)
 (defun gnus-pick-line-number ()
@@ -162,48 +172,21 @@ If given a prefix, mark all unpicked articles as read."
            (gnus-summary-next-group)))
       (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."
-  (let (pos)
-    (save-excursion
-      (goto-char (point-min))
-      (when (zerop (forward-line (1- (prefix-numeric-value arg))))
-       (setq pos (point))))
-    (if (not pos)
-       (gnus-error 2 "No such line: %s" arg)
-      (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
-    (gnus-pick-goto-article arg))
+    (let (pos)
+      (save-excursion
+       (goto-char (point-min))
+       (when (zerop (forward-line (1- (prefix-numeric-value arg))))
+         (setq pos (point))))
+      (if (not pos)
+         (gnus-error 2 "No such line: %s" arg)
+       (goto-char pos))))
   (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.
-Otherwise pick the article on the current line.
-If ARG, pick the article/thread on that line instead."
-  (interactive "P")
-  (when arg
-    (gnus-pick-goto-article arg))
-  (if gnus-thread-hide-subtree
-      (gnus-uu-mark-thread)
-    (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.
-Otherwise unmark the article on current line.
-If ARG, unmark thread/article on that line instead."
-  (interactive "P")
-  (when arg
-    (gnus-pick-goto-article arg))
-  (if gnus-thread-hide-subtree
-      (gnus-uu-unmark-thread)
-    (gnus-summary-unmark-as-processable 1)))
-  
 (defun gnus-pick-mouse-pick (e)
   (interactive "e")
   (mouse-set-point e)
@@ -220,6 +203,7 @@ This must be bound to a button-down mouse event."
         (start-point (posn-point start-posn))
          (start-line (1+ (count-lines 1 start-point)))
         (start-window (posn-window start-posn))
+        (start-frame (window-frame start-window))
         (bounds (gnus-window-edges start-window))
         (top (nth 1 bounds))
         (bottom (if (window-minibuffer-p start-window)
@@ -239,48 +223,50 @@ This must be bound to a button-down mouse event."
     ;; end-of-range is used only in the single-click case.
     ;; It is the place where the drag has reached so far
     ;; (but not outside the window where the drag started).
-    (let (event end end-point (end-of-range (point)))
+    (let (event end end-point last-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 (read-event))
+               (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))
+          (when end-point
+            (setq last-end-point end-point))
+
+          (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.
@@ -377,8 +363,7 @@ This must be bound to a button-down mouse event."
   "If non-nil, minimize the tree buffer window.
 If a number, never let the tree buffer grow taller than that number of
 lines."
-  :type '(choice boolean
-                integer)
+  :type 'boolean
   :group 'gnus-summary-tree)
 
 (defcustom gnus-selected-tree-face 'modeline
@@ -469,7 +454,7 @@ Two predefined functions are available:
   (setq mode-name "Tree")
   (setq major-mode 'gnus-tree-mode)
   (use-local-map gnus-tree-mode-map)
-  (buffer-disable-undo)
+  (buffer-disable-undo (current-buffer))
   (setq buffer-read-only t)
   (setq truncate-lines t)
   (save-excursion
@@ -520,14 +505,12 @@ Two predefined functions are available:
 
 (defun gnus-tree-article-region (article)
   "Return a cons with BEG and END of the article region."
-  (let ((pos (text-property-any
-             (point-min) (point-max) 'gnus-number article)))
+  (let ((pos (text-property-any (point-min) (point-max) 'gnus-number article)))
     (when pos
       (cons pos (next-single-property-change pos 'gnus-number)))))
 
 (defun gnus-tree-goto-article (article)
-  (let ((pos (text-property-any
-             (point-min) (point-max) 'gnus-number article)))
+  (let ((pos (text-property-any (point-min) (point-max) 'gnus-number article)))
     (when pos
       (goto-char pos))))
 
@@ -557,8 +540,9 @@ Two predefined functions are available:
 (defun gnus-get-tree-buffer ()
   "Return the tree buffer properly initialized."
   (save-excursion
-    (set-buffer (gnus-get-buffer-create gnus-tree-buffer))
+    (set-buffer (get-buffer-create gnus-tree-buffer))
     (unless (eq major-mode 'gnus-tree-mode)
+      (gnus-add-current-to-buffer-list)
       (gnus-tree-mode))
     (current-buffer)))
 
@@ -705,7 +689,7 @@ Two predefined functions are available:
          (while (progn
                   (forward-line -1)
                   (forward-char col)
-                  (eq (char-after) ? ))
+                  (= (following-char) ? ))
            (delete-char 1)
            (insert (caddr gnus-tree-parent-child-edges)))
          (goto-char beg)))
@@ -762,8 +746,7 @@ Two predefined functions are available:
          (setq beg (point))
          (forward-char -1)
          ;; Draw "-" lines leftwards.
-         (while (and (> (point) 1)
-                     (eq (char-after (1- (point))) ? ))
+         (while (= (char-after (1- (point))) ? )
            (delete-char -1)
            (insert (car gnus-tree-parent-child-edges))
            (forward-char -1))
@@ -970,7 +953,7 @@ The following commands are available:
   (setq mode-name "Gnus Carpal")
   (setq mode-line-process nil)
   (use-local-map gnus-carpal-mode-map)
-  (buffer-disable-undo)
+  (buffer-disable-undo (current-buffer))
   (setq buffer-read-only t)
   (make-local-variable 'gnus-carpal-attached-buffer)
   (gnus-run-hooks 'gnus-carpal-mode-hook))
@@ -980,10 +963,11 @@ The following commands are available:
     (if (get-buffer buffer)
        ()
       (save-excursion
-       (set-buffer (gnus-get-buffer-create buffer))
+       (set-buffer (get-buffer-create buffer))
        (gnus-carpal-mode)
        (setq gnus-carpal-attached-buffer
              (intern (format "gnus-%s-buffer" type)))
+       (gnus-add-current-to-buffer-list)
        (let ((buttons (symbol-value
                        (intern (format "gnus-carpal-%s-buffer-buttons"
                                        type))))
index 64824b2..68f9c69 100644 (file)
@@ -308,7 +308,6 @@ Should be one of the following symbols.
  i: message-id
  t: references
  x: xref
- e: `extra' (non-standard overview)
  l: lines
  d: date
  f: followup
@@ -322,7 +321,6 @@ If nil, the user will be asked for a header."
                 (const :tag "message-id" i)
                 (const :tag "references" t)
                 (const :tag "xref" x)
-                (const :tag "extra" e)
                 (const :tag "lines" l)
                 (const :tag "date" d)
                 (const :tag "followup" f)
@@ -446,7 +444,6 @@ of the last successful match.")
     ("chars" 6 gnus-score-integer)
     ("lines" 7 gnus-score-integer)
     ("xref" 8 gnus-score-string)
-    ("extra" 9 gnus-score-string)
     ("head" -1 gnus-score-body)
     ("body" -1 gnus-score-body)
     ("all" -1 gnus-score-body)
@@ -503,13 +500,12 @@ used as score."
            (?b "body" "" nil body-string)
            (?h "head" "" nil body-string)
            (?i "message-id" nil t string)
-           (?r "references" "message-id" nil string)
+           (?t "references" "message-id" nil string)
            (?x "xref" nil nil string)
-           (?e "extra" nil nil string)
            (?l "lines" nil nil number)
            (?d "date" nil nil date)
            (?f "followup" nil nil string)
-           (?t "thread" "message-id" nil string)))
+           (?T "thread" nil nil string)))
         (char-to-type
          '((?s s "substring" string)
            (?e e "exact string" string)
@@ -534,7 +530,7 @@ used as score."
                     (aref (symbol-name gnus-score-default-type) 0)))
         (pchar (and gnus-score-default-duration
                     (aref (symbol-name gnus-score-default-duration) 0)))
-        entry temporary type match extra)
+        entry temporary type match)
 
     (unwind-protect
        (progn
@@ -595,7 +591,7 @@ used as score."
            ;; It was a majuscule, so we end reading and use the default.
            (if mimic (message "%c %c %c" prefix hchar tchar)
              (message ""))
-           (setq pchar (or pchar ?t)))
+           (setq pchar (or pchar ?p)))
 
          ;; We continue reading.
          (while (not pchar)
@@ -626,26 +622,9 @@ used as score."
       ;; Always kill the score help buffer.
       (gnus-score-kill-help-buffer))
 
-    ;; If scoring an extra (non-standard overview) header,
-    ;; we must find out which header is in question.
-    (setq extra
-         (and gnus-extra-headers
-              (equal (nth 1 entry) "extra")
-              (intern                                  ; need symbol
-               (gnus-completing-read
-                (symbol-name (car gnus-extra-headers)) ; default response
-                "Score extra header:"                  ; prompt
-                (mapcar (lambda (x)                    ; completion list
-                          (cons (symbol-name x) x))
-                        gnus-extra-headers)
-                nil                                    ; no completion limit
-                t))))                                  ; require match
-    ;; extra is now nil or a symbol.
-
     ;; We have all the data, so we enter this score.
     (setq match (if (string= (nth 2 entry) "") ""
-                 (gnus-summary-header (or (nth 2 entry) (nth 1 entry))
-                                      nil extra)))
+                 (gnus-summary-header (or (nth 2 entry) (nth 1 entry)))))
 
     ;; Modify the match, perhaps.
     (cond
@@ -681,9 +660,7 @@ used as score."
      (if (eq temporary 'perm)          ; Temp
         nil
        temporary)
-     (not (nth 3 entry))               ; Prompt
-     nil                               ; not silent 
-     extra)                            ; non-standard overview.
+     (not (nth 3 entry)))              ; Prompt
 
     (when (eq symp 'a)
       ;; We change the score file back to the previous one.
@@ -694,8 +671,8 @@ used as score."
 (defun gnus-score-insert-help (string alist idx)
   (setq gnus-score-help-winconf (current-window-configuration))
   (save-excursion
-    (set-buffer (gnus-get-buffer-create "*Score Help*"))
-    (buffer-disable-undo)
+    (set-buffer (get-buffer-create "*Score Help*"))
+    (buffer-disable-undo (current-buffer))
     (delete-windows-on (current-buffer))
     (erase-buffer)
     (insert string ":\n\n")
@@ -732,16 +709,14 @@ used as score."
       (shrink-window-if-larger-than-buffer))
     (select-window (get-buffer-window gnus-summary-buffer))))
 
-(defun gnus-summary-header (header &optional no-err extra)
+(defun gnus-summary-header (header &optional no-err)
   ;; Return HEADER for current articles, or error.
   (let ((article (gnus-summary-article-number))
        headers)
     (if article
        (if (and (setq headers (gnus-summary-article-header article))
                 (vectorp headers))
-           (if extra                   ; `header' must be "extra"
-               (or (cdr (assq extra (mail-header-extra headers))) "")
-             (aref headers (nth 1 (assoc header gnus-header-index))))
+           (aref headers (nth 1 (assoc header gnus-header-index)))
          (if no-err
              nil
            (error "Pseudo-articles can't be scored")))
@@ -767,8 +742,7 @@ used as score."
                  (gnus-newsgroup-score-alist)))))
 
 (defun gnus-summary-score-entry (header match type score date
-                                       &optional prompt silent extra)
-  (interactive)
+                                       &optional prompt silent)
   "Enter score file entry.
 HEADER is the header being scored.
 MATCH is the string we are looking for.
@@ -776,8 +750,7 @@ TYPE is the match type: substring, regexp, exact, fuzzy.
 SCORE is the score to add.
 DATE is the expire date, or nil for no expire, or 'now for immediate expire.
 If optional argument `PROMPT' is non-nil, allow user to edit match.
-If optional argument `SILENT' is nil, show effect of score entry.
-If optional argument `EXTRA' is non-nil, it's a non-standard overview header."
+If optional argument `SILENT' is nil, show effect of score entry."
   ;; Regexp is the default type.
   (when (eq type t)
     (setq type 'r))
@@ -818,17 +791,12 @@ If optional argument `EXTRA' is non-nil, it's a non-standard overview header."
            elem)
        (setq new
              (cond
-              (extra
-               (list match score
-                     (and date (if (numberp date) date
-                                 (date-to-day date)))
-                     type (symbol-name extra)))
               (type
                (list match score
                      (and date (if (numberp date) date
-                                 (date-to-day date)))
+                                 (gnus-day-number date)))
                      type))
-              (date (list match score (date-to-day date)))
+              (date (list match score (gnus-day-number date)))
               (score (list match score))
               (t (list match))))
        ;; We see whether we can collapse some score entries.
@@ -853,19 +821,18 @@ If optional argument `EXTRA' is non-nil, it's a non-standard overview header."
       (if (and (>= (nth 1 (assoc header gnus-header-index)) 0)
               (eq (nth 2 (assoc header gnus-header-index))
                   'gnus-score-string))
-         (gnus-summary-score-effect header match type score extra)
+         (gnus-summary-score-effect header match type score)
        (gnus-summary-rescore)))
 
     ;; Return the new scoring rule.
     new))
 
-(defun gnus-summary-score-effect (header match type score extra)
+(defun gnus-summary-score-effect (header match type score)
   "Simulate the effect of a score file entry.
 HEADER is the header being scored.
 MATCH is the string we are looking for.
 TYPE is the score type.
-SCORE is the score to add.
-EXTRA is the possible non-standard header."
+SCORE is the score to add."
   (interactive (list (completing-read "Header: "
                                      gnus-header-index
                                      (lambda (x) (fboundp (nth 2 x)))
@@ -886,7 +853,7 @@ EXTRA is the possible non-standard header."
                        (t
                         (regexp-quote match)))))
       (while (not (eobp))
-       (let ((content (gnus-summary-header header 'noerr extra))
+       (let ((content (gnus-summary-header header 'noerr))
              (case-fold-search t))
          (and content
               (when (if (eq type 'f)
@@ -1154,7 +1121,7 @@ EXTRA is the possible non-standard header."
                 (or (not decay)
                     (gnus-decay-scores alist decay)))
        (gnus-score-set 'touched '(t) alist)
-       (gnus-score-set 'decay (list (time-to-days (current-time))) alist))
+       (gnus-score-set 'decay (list (gnus-time-to-day (current-time)))))
       ;; We do not respect eval and files atoms from global score
       ;; files.
       (when (and files (not global))
@@ -1235,9 +1202,9 @@ EXTRA is the possible non-standard header."
        ;; Couldn't read file.
        (setq gnus-score-alist nil)
       ;; Read file.
-      (with-temp-buffer
-       (let ((coding-system-for-write score-mode-coding-system))
-         (insert-file-contents file))
+      (save-excursion
+       (gnus-set-work-buffer)
+       (insert-file-contents file)
        (goto-char (point-min))
        ;; Only do the loading if the score file isn't empty.
        (when (save-excursion (re-search-forward "[()0-9a-zA-Z]" nil t))
@@ -1246,16 +1213,10 @@ EXTRA is the possible non-standard header."
                    (read (current-buffer))
                  (error
                   (gnus-error 3.2 "Problem with score file %s" file))))))
-      (cond
-       ((and alist
-            (atom alist))
-       ;; Bogus score file.
-       (error "Invalid syntax with score file %s" file))
-       ((eq (car alist) 'setq)
-       ;; This is an old-style score file.
-       (setq gnus-score-alist (gnus-score-transform-old-to-new alist)))
-       (t
-       (setq gnus-score-alist alist)))
+      (if (eq (car alist) 'setq)
+         ;; This is an old-style score file.
+         (setq gnus-score-alist (gnus-score-transform-old-to-new alist))
+       (setq gnus-score-alist alist))
       ;; Check the syntax of the score file.
       (setq gnus-score-alist
            (gnus-score-check-syntax gnus-score-alist file)))))
@@ -1323,7 +1284,7 @@ EXTRA is the possible non-standard header."
              (setcar scor
                      (list (caar scor) (nth 2 (car scor))
                            (and (nth 3 (car scor))
-                                (date-to-day (nth 3 (car scor))))
+                                (gnus-day-number (nth 3 (car scor))))
                            (if (nth 1 (car scor)) 'r 's)))
              (setq scor (cdr scor))))
        (push (if (not (listp (cdr entry)))
@@ -1370,8 +1331,7 @@ EXTRA is the possible non-standard header."
              (delete-file file)
            ;; There are scores, so we write the file.
            (when (file-writable-p file)
-             (let ((coding-system-for-write score-mode-coding-system))
-               (gnus-write-buffer file))
+             (gnus-write-buffer file)
              (when gnus-score-after-write-file-function
                (funcall gnus-score-after-write-file-function file)))))
        (and gnus-score-uncacheable-files
@@ -1419,7 +1379,7 @@ EXTRA is the possible non-standard header."
       (when (and gnus-summary-default-score
                 scores)
        (let* ((entries gnus-header-index)
-              (now (date-to-day (current-time-string)))
+              (now (gnus-day-number (current-time-string)))
               (expire (and gnus-score-expiry-days
                            (- now gnus-score-expiry-days)))
               (headers gnus-newsgroup-headers)
@@ -1437,8 +1397,8 @@ EXTRA is the possible non-standard header."
                          gnus-scores-articles))))
 
          (save-excursion
-           (set-buffer (gnus-get-buffer-create "*Headers*"))
-           (buffer-disable-undo)
+           (set-buffer (get-buffer-create "*Headers*"))
+           (buffer-disable-undo (current-buffer))
            (when (gnus-buffer-live-p gnus-summary-buffer)
              (message-clone-locals gnus-summary-buffer))
 
@@ -1898,23 +1858,12 @@ EXTRA is the possible non-standard header."
     ;; and U is the number of unique headers.  It is assumed (but
     ;; untested) this will be a net win because of the large constant
     ;; factor involved with string matching.
-    (setq gnus-scores-articles
-         ;; We cannot string-sort the extra headers list.  *sigh*
-         (if (= gnus-score-index 9)
-             gnus-scores-articles
-           (sort gnus-scores-articles 'gnus-score-string<))
+    (setq gnus-scores-articles (sort gnus-scores-articles 'gnus-score-string<)
          articles gnus-scores-articles)
 
     (erase-buffer)
     (while (setq art (pop articles))
       (setq this (aref (car art) gnus-score-index))
-
-      ;; If we're working with non-standard headers, we are stuck
-      ;; 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.
-
       (if simplify
          (setq this (gnus-map-function gnus-simplify-subject-functions this)))
       (if (equal last this)
@@ -1945,7 +1894,6 @@ EXTRA is the possible non-standard header."
               (type (or (nth 3 kill) 's))
               (score (or (nth 1 kill) gnus-score-interactive-default-score))
               (date (nth 2 kill))
-              (extra (nth 4 kill))     ; non-standard header; string.
               (found nil)
               (mt (aref (symbol-name type) 0))
               (case-fold-search (not (memq mt '(?R ?S ?E ?F))))
@@ -1961,12 +1909,6 @@ EXTRA is the possible non-standard header."
                      ((or (= dmt ?e) (= dmt ?s) (= dmt ?f)) 'search-forward)
                      ((= dmt ?w) nil)
                      (t (error "Illegal match type: %s" type)))))
-
-         ;; Evil hackery to make match usable in non-standard headers.
-         (when extra
-           (setq match (concat "[ (](" extra " \\. \"[^)]*" match "[^(]*\")[ )]")
-                 search-func 're-search-forward))      ; XXX danger?!?
-
          (cond
           ;; Fuzzy matches.  We save these for later.
           ((= dmt ?f)
@@ -2261,9 +2203,9 @@ EXTRA is the possible non-standard header."
     ;; Perform adaptive word scoring.
     (when (and (listp gnus-newsgroup-adaptive)
               (memq 'word gnus-newsgroup-adaptive))
-      (with-temp-buffer
+      (nnheader-temp-write nil
        (let* ((hashtb (gnus-make-hashtable 1000))
-              (date (date-to-day (current-time-string)))
+              (date (gnus-day-number (current-time-string)))
               (data gnus-newsgroup-data)
               (syntab (syntax-table))
               word d score val)
@@ -2341,6 +2283,7 @@ EXTRA is the possible non-standard header."
           1 "No score rules apply to the current article (default score %d)."
           gnus-summary-default-score)
        (set-buffer "*Score Trace*")
+       (gnus-add-current-to-buffer-list)
        (while trace
          (insert (format "%S  ->  %s\n" (cdar trace)
                          (if (caar trace)
@@ -2386,6 +2329,7 @@ EXTRA is the possible non-standard header."
       (while rules
        (insert (format "%-5d: %s\n" (caar rules) (cdar rules)))
        (pop rules))
+      (gnus-add-current-to-buffer-list)
       (goto-char (point-min))
       (gnus-configure-windows 'score-words))))
 
@@ -2523,8 +2467,8 @@ EXTRA is the possible non-standard header."
        seen out file)
     (while (setq file (pop files))
       (cond
-       ;; Ignore files that start with a dot.
-       ((string-match "^\\." (file-name-nondirectory file))
+       ;; Ignore "." and "..".
+       ((member (file-name-nondirectory file) '("." ".."))
        nil)
        ;; Add subtrees of directory to also be searched.
        ((and (file-directory-p file)
@@ -2556,8 +2500,8 @@ GROUP using BNews sys file syntax."
         (trans (cdr (assq ?: nnheader-file-name-translation-alist)))
         ofiles not-match regexp)
     (save-excursion
-      (set-buffer (gnus-get-buffer-create "*gnus score files*"))
-      (buffer-disable-undo)
+      (set-buffer (get-buffer-create "*gnus score files*"))
+      (buffer-disable-undo (current-buffer))
       ;; Go through all score file names and create regexp with them
       ;; as the source.
       (while sfiles
@@ -2677,7 +2621,7 @@ Destroys the current buffer."
 
 (defun gnus-sort-score-files (files)
   "Sort FILES so that the most general files come first."
-  (with-temp-buffer
+  (nnheader-temp-write nil
     (let ((alist
           (mapcar
            (lambda (file)
@@ -2848,8 +2792,8 @@ If ADAPT, return the home adaptive file instead."
              (funcall elem group))
             ;; Regexp-file cons
             ((consp elem)
-             (when (string-match (gnus-globalify-regexp (car elem)) group)
-               (replace-match (cadr elem) t nil group ))))))
+             (when (string-match (car elem) group)
+               (cadr elem))))))
     (when found
       (nnheader-concat gnus-kill-files-directory found))))
 
@@ -2869,10 +2813,6 @@ If ADAPT, return the home adaptive file instead."
     (concat group (if (gnus-use-long-file-name 'not-score) "." "/")
            gnus-adaptive-file-suffix)))
 
-(defun gnus-current-home-score-file (group)
-  "Return the \"current\" regular score file."
-  (car (nreverse (gnus-score-find-alist group))))
-
 ;;;
 ;;; Score decays
 ;;;
@@ -2889,7 +2829,7 @@ If ADAPT, return the home adaptive file instead."
 
 (defun gnus-decay-scores (alist day)
   "Decay non-permanent scores in ALIST."
-  (let ((times (- (time-to-days (current-time)) day))
+  (let ((times (- (gnus-time-to-day (current-time)) day))
        kill entry updated score n)
     (unless (zerop times)              ;Done decays today already?
       (while (setq entry (pop alist))
index 4e32484..be089bf 100644 (file)
@@ -133,44 +133,45 @@ If N is nil and any articles have been marked with the process mark,
 move those articles instead."
   (interactive "P")
   (let* ((articles (gnus-summary-work-articles n))
-        (tmp-buf (gnus-get-buffer-create "*soup work*"))
+        (tmp-buf (get-buffer-create "*soup work*"))
         (area (gnus-soup-area gnus-newsgroup-name))
         (prefix (gnus-soup-area-prefix area))
         headers)
     (buffer-disable-undo tmp-buf)
     (save-excursion
       (while articles
+       ;; Find the header of the article.
+       (set-buffer gnus-summary-buffer)
+       (when (setq headers (gnus-summary-article-header (car articles)))
          ;; Put the article in a buffer.
-       (set-buffer tmp-buf)
-       (when (gnus-request-article-this-buffer
-              (car articles) gnus-newsgroup-name)
-         (setq headers (nnheader-parse-head t))
-         (save-restriction
-           (message-narrow-to-head)
-           (message-remove-header gnus-soup-ignored-headers t))
-         (gnus-soup-store gnus-soup-directory prefix headers
-                          gnus-soup-encoding-type
-                          gnus-soup-index-type)
-         (gnus-soup-area-set-number
-          area (1+ (or (gnus-soup-area-number area) 0))))
+         (set-buffer tmp-buf)
+         (when (gnus-request-article-this-buffer
+                (car articles) gnus-newsgroup-name)
+           (save-restriction
+             (message-narrow-to-head)
+             (message-remove-header gnus-soup-ignored-headers t))
+           (gnus-soup-store gnus-soup-directory prefix headers
+                            gnus-soup-encoding-type
+                            gnus-soup-index-type)
+           (gnus-soup-area-set-number
+            area (1+ (or (gnus-soup-area-number area) 0)))))
        ;; Mark article as read.
        (set-buffer gnus-summary-buffer)
        (gnus-summary-remove-process-mark (car articles))
        (gnus-summary-mark-as-read (car articles) gnus-souped-mark)
        (setq articles (cdr articles)))
       (kill-buffer tmp-buf))
-    (gnus-soup-save-areas)
-    (gnus-set-mode-line 'summary)))
+    (gnus-soup-save-areas)))
 
 (defun gnus-soup-pack-packet ()
   "Make a SOUP packet from the SOUP areas."
   (interactive)
   (gnus-soup-read-areas)
-  (if (file-exists-p gnus-soup-directory)
-      (if (directory-files gnus-soup-directory nil "\\.MSG$")
-         (gnus-soup-pack gnus-soup-directory gnus-soup-packer)
-       (message "No files to pack."))
-    (message "No such directory: %s" gnus-soup-directory)))
+  (unless (file-exists-p gnus-soup-directory)
+    (message "No such directory: %s" gnus-soup-directory))
+  (when (null (directory-files gnus-soup-directory nil "\\.MSG$"))
+    (message "No files to pack."))
+  (gnus-soup-pack gnus-soup-directory gnus-soup-packer))
 
 (defun gnus-group-brew-soup (n)
   "Make a soup packet from the current group.
@@ -203,9 +204,7 @@ for matching on group names.
 For instance, if you want to brew on all the nnml groups, as well as
 groups with \"emacs\" in the name, you could say something like:
 
-$ emacs -batch -f gnus-batch-brew-soup ^nnml \".*emacs.*\"
-
-Note -- this function hasn't been implemented yet."
+$ emacs -batch -f gnus-batch-brew-soup ^nnml \".*emacs.*\""
   (interactive)
   nil)
 
@@ -372,7 +371,7 @@ though the two last may be nil if they are missing."
     (when (file-exists-p file)
       (save-excursion
        (set-buffer (nnheader-find-file-noselect file 'force))
-       (buffer-disable-undo)
+       (buffer-disable-undo (current-buffer))
        (goto-char (point-min))
        (while (not (eobp))
          (push (vector (gnus-soup-field)
@@ -395,7 +394,7 @@ file.  The vector contain three strings, [prefix name encoding]."
   (let (replies)
     (save-excursion
       (set-buffer (nnheader-find-file-noselect file))
-      (buffer-disable-undo)
+      (buffer-disable-undo (current-buffer))
       (goto-char (point-min))
       (while (not (eobp))
        (push (vector (gnus-soup-field) (gnus-soup-field)
@@ -420,7 +419,7 @@ file.  The vector contain three strings, [prefix name encoding]."
   "Write the AREAS file."
   (interactive)
   (when gnus-soup-areas
-    (with-temp-file (concat gnus-soup-directory "AREAS")
+    (nnheader-temp-write (concat gnus-soup-directory "AREAS")
       (let ((areas gnus-soup-areas)
            area)
        (while (setq area (pop areas))
@@ -441,7 +440,7 @@ file.  The vector contain three strings, [prefix name encoding]."
 
 (defun gnus-soup-write-replies (dir areas)
   "Write a REPLIES file in DIR containing AREAS."
-  (with-temp-file (concat dir "REPLIES")
+  (nnheader-temp-write (concat dir "REPLIES")
     (let (area)
       (while (setq area (pop areas))
        (insert (format "%s\t%s\t%s\n"
@@ -510,7 +509,7 @@ Return whether the unpacking was successful."
                                 ".MSG"))
               (msg-buf (and (file-exists-p msg-file)
                             (nnheader-find-file-noselect msg-file)))
-              (tmp-buf (gnus-get-buffer-create " *soup send*"))
+              (tmp-buf (get-buffer-create " *soup send*"))
               beg end)
          (cond
           ((/= (gnus-soup-encoding-format
index 0cd6ed1..23215fb 100644 (file)
                  (gnus-parse-format
                   new-format
                   (symbol-value
-                   (intern (format "gnus-%s-line-format-alist" type)))
+                   (intern (format "gnus-%s-line-format-alist"
+                                   (if (eq type 'article-mode)
+                                       'summary-mode type))))
                   (not (string-match "mode$" (symbol-name type))))))
          ;; Enter the new format spec into the list.
          (if entry
     (point) (progn ,@form (point))
     '(gnus-face t face ,(symbol-value (intern (format "gnus-face-%d" type))))))
 
-(defun gnus-balloon-face-function (form type)
-  `(gnus-put-text-property 
-    (point) (progn ,@form (point))
-    'balloon-help
-    ,(intern (format "gnus-balloon-face-%d" type))))
-
 (defun gnus-tilde-max-form (el max-width)
   "Return a form that limits EL to MAX-WIDTH."
   (let ((max (abs max-width)))
   ;; SPEC-ALIST and returns a list that can be eval'ed to return the
   ;; string.  If the FORMAT string contains the specifiers %( and %)
   ;; the text between them will have the mouse-face text property.
-  ;; If the FORMAT string contains the specifiers %< and %>, the text between
-  ;; them will have the balloon-help text property.
   (if (string-match
-       "\\`\\(.*\\)%[0-9]?[{(<]\\(.*\\)%[0-9]?[})>]\\(.*\n?\\)\\'"
+       "\\`\\(.*\\)%[0-9]?[{(]\\(.*\\)%[0-9]?[})]\\(.*\n?\\)\\'"
        format)
       (gnus-parse-complex-format format spec-alist)
     ;; This is a simple format.
       (replace-match "\\\"" nil t))
     (goto-char (point-min))
     (insert "(\"")
-    (while (re-search-forward "%\\([0-9]+\\)?\\([{}()<>]\\)" nil t)
+    (while (re-search-forward "%\\([0-9]+\\)?\\([{}()]\\)" nil t)
       (let ((number (if (match-beginning 1)
                        (match-string 1) "0"))
            (delim (aref (match-string 2) 0)))
        (if (or (= delim ?\()
-               (= delim ?\{)
-               (= delim ?\<))
-           (replace-match (concat "\"(" 
-                                  (cond ((= delim ?\() "mouse")
-                                        ((= delim ?\{) "face")
-                                        (t "balloon"))
+               (= delim ?\{))
+           (replace-match (concat "\"(" (if (= delim ?\() "mouse" "face")
                                   " " number " \""))
          (replace-match "\")\""))))
     (goto-char (point-max))
             (t
              nil)))
        ;; User-defined spec -- find the spec name.
-       (when (eq (setq spec (char-after)) ?u)
+       (when (= (setq spec (following-char)) ?u)
          (forward-char 1)
-         (setq user-defined (char-after)))
+         (setq user-defined (following-char)))
        (forward-char 1)
        (delete-region spec-beg (point))
 
@@ -529,14 +519,14 @@ If PROPS, insert the result."
                       (not (eq 'byte-code (car form)))
                       ;; Under XEmacs, it's (funcall #<compiled-function ...>)
                       (not (and (eq 'funcall (car form))
-                                (byte-code-function-p (cadr form)))))
+                                (compiled-function-p (cadr form)))))
              (fset 'gnus-tmp-func `(lambda () ,form))
              (byte-compile 'gnus-tmp-func)
              (setcar (cddr entry) (gnus-byte-code 'gnus-tmp-func))))))
 
       (push (cons 'version emacs-version) gnus-format-specs)
       ;; Mark the .newsrc.eld file as "dirty".
-      (gnus-dribble-touch)
+      (gnus-dribble-enter " ")
       (gnus-message 7 "Compiling user specs...done"))))
 
 (defun gnus-set-format (type &optional insertable)
index 0f492e8..24e9bfd 100644 (file)
@@ -59,15 +59,15 @@ The following specs are understood:
 (defvar gnus-inserted-opened-servers nil)
 
 (defvar gnus-server-line-format-alist
-  `((?h gnus-tmp-how ?s)
-    (?n gnus-tmp-name ?s)
-    (?w gnus-tmp-where ?s)
-    (?s gnus-tmp-status ?s)))
+  `((?h how ?s)
+    (?n name ?s)
+    (?w where ?s)
+    (?s status ?s)))
 
 (defvar gnus-server-mode-line-format-alist
-  `((?S gnus-tmp-news-server ?s)
-    (?M gnus-tmp-news-method ?s)
-    (?u gnus-tmp-user-defined ?s)))
+  `((?S news-server ?s)
+    (?M news-method ?s)
+    (?u user-defined ?s)))
 
 (defvar gnus-server-line-format-spec nil)
 (defvar gnus-server-mode-line-format-spec nil)
@@ -161,16 +161,16 @@ The following commands are available:
   (gnus-set-default-directory)
   (setq mode-line-process nil)
   (use-local-map gnus-server-mode-map)
-  (buffer-disable-undo)
+  (buffer-disable-undo (current-buffer))
   (setq truncate-lines t)
   (setq buffer-read-only t)
   (gnus-run-hooks 'gnus-server-mode-hook))
 
-(defun gnus-server-insert-server-line (gnus-tmp-name method)
-  (let* ((gnus-tmp-how (car method))
-        (gnus-tmp-where (nth 1 method))
+(defun gnus-server-insert-server-line (name method)
+  (let* ((how (car method))
+        (where (nth 1 method))
         (elem (assoc method gnus-opened-servers))
-        (gnus-tmp-status (cond ((eq (nth 1 elem) 'denied)
+        (status (cond ((eq (nth 1 elem) 'denied)
                        "(denied)")
                       ((or (gnus-server-opened method)
                            (eq (nth 1 elem) 'ok))
@@ -183,7 +183,7 @@ The following commands are available:
      (prog1 (1+ (point))
        ;; Insert the text.
        (eval gnus-server-line-format-spec))
-     (list 'gnus-server (intern gnus-tmp-name)))))
+     (list 'gnus-server (intern name)))))
 
 (defun gnus-enter-server-buffer ()
   "Set up the server buffer."
@@ -195,7 +195,7 @@ The following commands are available:
   "Initialize the server buffer."
   (unless (get-buffer gnus-server-buffer)
     (save-excursion
-      (set-buffer (gnus-get-buffer-create gnus-server-buffer))
+      (set-buffer (get-buffer-create gnus-server-buffer))
       (gnus-server-mode)
       (when gnus-carpal
        (gnus-carpal-setup-buffer 'server)))))
@@ -287,7 +287,7 @@ The following commands are available:
       (error "No server on the current line")))
   (unless (assoc server gnus-server-alist)
     (error "Read-only server %s" server))
-  (gnus-dribble-touch)
+  (gnus-dribble-enter "")
   (let ((buffer-read-only nil))
     (gnus-delete-line))
   (push (assoc server gnus-server-alist) gnus-server-killed-servers)
@@ -466,12 +466,9 @@ The following commands are available:
 (defun gnus-server-scan-server (server)
   "Request a scan from the current server."
   (interactive (list (gnus-server-server-name)))
-  (let ((method (gnus-server-to-method server)))
-    (if (not (gnus-get-function method 'request-scan))
-       (error "Server %s can't scan" (car method))
-      (gnus-message 3 "Scanning %s..." server)
-      (gnus-request-scan nil method)
-      (gnus-message 3 "Scanning %s...done" server))))
+  (gnus-message 3 "Scanning %s...done" server)
+  (gnus-request-scan nil (gnus-server-to-method server))
+  (gnus-message 3 "Scanning %s...done" server))
 
 (defun gnus-server-read-server (server)
   "Browse a server."
@@ -537,7 +534,7 @@ The following commands are available:
      '("Browse"
        ["Subscribe" gnus-browse-unsubscribe-current-group t]
        ["Read" gnus-browse-read-group t]
-       ["Select" gnus-browse-select-group t]
+       ["Select" gnus-browse-read-group t]
        ["Next" gnus-browse-next-group t]
        ["Prev" gnus-browse-next-group t]
        ["Exit" gnus-browse-exit t]))
@@ -550,9 +547,9 @@ The following commands are available:
 
 (defun gnus-browse-foreign-server (server &optional return-buffer)
   "Browse the server SERVER."
-  (setq gnus-browse-current-method (gnus-server-to-method server))
+  (setq gnus-browse-current-method server)
   (setq gnus-browse-return-buffer return-buffer)
-  (let* ((method gnus-browse-current-method)
+  (let* ((method (gnus-server-to-method server))
         (gnus-select-method method)
         groups group)
     (gnus-message 5 "Connecting to %s..." (nth 1 method))
@@ -571,11 +568,12 @@ The following commands are available:
        1 "Couldn't request list: %s" (gnus-status-message method))
       nil)
      (t
-      (gnus-get-buffer-create gnus-browse-buffer)
+      (get-buffer-create gnus-browse-buffer)
+      (gnus-add-current-to-buffer-list)
       (when gnus-carpal
        (gnus-carpal-setup-buffer 'browse))
       (gnus-configure-windows 'browse)
-      (buffer-disable-undo)
+      (buffer-disable-undo (current-buffer))
       (let ((buffer-read-only nil))
        (erase-buffer))
       (gnus-browse-mode)
@@ -592,11 +590,9 @@ The following commands are available:
          (while (re-search-forward
                  "\\(^[^ \t]+\\)[ \t]+[0-9]+[ \t]+[0-9]+" nil t)
            (goto-char (match-end 1))
-           (condition-case ()
-               (push (cons (match-string 1)
-                           (max 0 (- (1+ (read cur)) (read cur))))
-                     groups)
-             (error nil)))))
+           (push (cons (match-string 1)
+                       (max 0 (- (1+ (read cur)) (read cur))))
+                 groups))))
       (setq groups (sort groups
                         (lambda (l1 l2)
                           (string< (car l1) (car l2)))))
@@ -636,7 +632,7 @@ buffer.
   (setq mode-name "Browse Server")
   (setq mode-line-process nil)
   (use-local-map gnus-browse-mode-map)
-  (buffer-disable-undo)
+  (buffer-disable-undo (current-buffer))
   (setq truncate-lines t)
   (gnus-set-default-directory)
   (setq buffer-read-only t)
@@ -706,7 +702,7 @@ buffer.
     (save-excursion
       (beginning-of-line)
       ;; If this group it killed, then we want to subscribe it.
-      (when (eq (char-after) ?K)
+      (when (= (following-char) ?K)
        (setq sub t))
       (setq group (gnus-browse-group-name))
       (when (and sub
index c7f1f8e..29b6b04 100644 (file)
@@ -254,6 +254,8 @@ for your decision; `gnus-subscribe-killed' kills all new groups;
                (function-item gnus-subscribe-zombies)
                function))
 
+;; Suggested by a bug report by Hallvard B Furuseth.
+;; <h.b.furuseth@usit.uio.no>.
 (defcustom gnus-subscribe-options-newsgroup-method
   'gnus-subscribe-alphabetically
   "*This function is called to subscribe newsgroups mentioned on \"options -n\" lines.
@@ -386,9 +388,6 @@ Can be used to turn version control on or off."
   :group 'gnus-newsrc
   :type 'boolean)
 
-(defvar gnus-startup-file-coding-system 'binary
-  "*Coding system for startup file.")
-
 ;;; Internal variables
 
 (defvar gnus-newsrc-file-version nil)
@@ -427,9 +426,7 @@ Can be used to turn version control on or off."
                   (file-exists-p (concat file ".el"))
                   (file-exists-p (concat file ".elc")))
               (condition-case var
-                  (let ((coding-system-for-read
-                         gnus-startup-file-coding-system))
-                    (load file nil t))
+                  (load file nil t)
                 (error
                  (error "Error in %s: %s" file var)))))))))
 
@@ -584,7 +581,6 @@ the first newsgroup."
 (defvar gnus-newsgroup-unreads)
 (defvar nnoo-state-alist)
 (defvar gnus-current-select-method)
-
 (defun gnus-clear-system ()
   "Clear all variables and buffers."
   ;; Clear Gnus variables.
@@ -628,9 +624,8 @@ the first newsgroup."
     (kill-buffer (get-file-buffer (gnus-newsgroup-kill-file nil))))
   (gnus-kill-buffer nntp-server-buffer)
   ;; Kill Gnus buffers.
-  (let ((buffers (gnus-buffers)))
-    (when buffers
-      (mapcar 'kill-buffer buffers)))
+  (while gnus-buffer-list
+    (gnus-kill-buffer (pop gnus-buffer-list)))
   ;; Remove Gnus frames.
   (gnus-kill-gnus-frames))
 
@@ -662,8 +657,8 @@ prompt the user for the name of an NNTP server to use."
              (> arg 0)
              (max (car gnus-group-list-mode) arg))))
 
-    (gnus-clear-system)
     (gnus-splash)
+    (gnus-clear-system)
     (gnus-run-hooks 'gnus-before-startup-hook)
     (nnheader-init-server-buffer)
     (setq gnus-slave slave)
@@ -780,12 +775,13 @@ prompt the user for the name of an NNTP server to use."
   (let ((dribble-file (gnus-dribble-file-name)))
     (save-excursion
       (set-buffer (setq gnus-dribble-buffer
-                       (gnus-get-buffer-create
+                       (get-buffer-create
                         (file-name-nondirectory dribble-file))))
+      (gnus-add-current-to-buffer-list)
       (erase-buffer)
       (setq buffer-file-name dribble-file)
       (auto-save-mode t)
-      (buffer-disable-undo)
+      (buffer-disable-undo (current-buffer))
       (bury-buffer (current-buffer))
       (set-buffer-modified-p nil)
       (let ((auto (make-auto-save-file-name))
@@ -941,25 +937,13 @@ If LEVEL is non-nil, the news will be set up at level LEVEL."
   "Search for new newsgroups and add them.
 Each new newsgroup will be treated with `gnus-subscribe-newsgroup-method.'
 The `-n' option line from .newsrc is respected.
-
-With 1 C-u, use the `ask-server' method to query the server for new
-groups.
-With 2 C-u's, use most complete method possible to query the server
-for new groups, and subscribe the new groups as zombies."
-  (interactive "p")
-  (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))))
+If ARG (the prefix), use the `ask-server' method to query the server
+for new groups."
+  (interactive "P")
+  (let ((check (if (or (and arg (not (listp gnus-check-new-newsgroups)))
+                      (null gnus-read-active-file)
+                      (eq gnus-read-active-file 'some))
+                  'ask-server gnus-check-new-newsgroups)))
     (unless (gnus-check-first-time-used)
       (if (or (consp check)
              (eq check 'ask-server))
@@ -1052,13 +1036,13 @@ for new groups, and subscribe the new groups as zombies."
     ;; Go through both primary and secondary select methods and
     ;; request new newsgroups.
     (while (setq method (gnus-server-get-method nil (pop methods)))
-      (setq new-newsgroups nil
-           gnus-override-subscribe-method method)
+      (setq new-newsgroups nil)
+      (setq gnus-override-subscribe-method method)
       (when (and (gnus-check-server method)
                 (gnus-request-newgroups date method))
        (save-excursion
-         (setq got-new t
-               hashtb (gnus-make-hashtable 100))
+         (setq got-new t)
+         (setq hashtb (gnus-make-hashtable 100))
          (set-buffer nntp-server-buffer)
          ;; Enter all the new groups into a hashtable.
          (gnus-active-to-gnus-format method hashtb 'ignore))
@@ -1103,16 +1087,11 @@ for new groups, and subscribe the new groups as zombies."
     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))))
+  (if (or (> (length gnus-newsrc-alist) 1)
+         (file-exists-p gnus-startup-file)
+         (file-exists-p (concat gnus-startup-file ".el"))
+         (file-exists-p (concat gnus-startup-file ".eld")))
+      nil
     (gnus-message 6 "First time user; subscribing you to default groups")
     (unless (gnus-read-active-file-p)
       (let ((gnus-read-active-file t))
@@ -1142,9 +1121,7 @@ for new groups, and subscribe the new groups as zombies."
            (gnus-group-change-level
             (car groups) gnus-level-default-subscribed gnus-level-killed))
          (setq groups (cdr groups)))
-       (save-excursion
-         (set-buffer gnus-group-buffer)
-         (gnus-group-make-help-group))
+       (gnus-group-make-help-group)
        (when gnus-novice-user
          (gnus-message 7 "`A k' to list killed groups"))))))
 
@@ -1509,7 +1486,7 @@ newsgroup."
          (when (<= (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)
+           (when (and gnus-agent gnus-plugged)
              (gnus-agent-save-group-info
               method (gnus-group-real-name group) active))
            (unless (inline (gnus-virtual-group-p group))
@@ -1710,6 +1687,7 @@ newsgroup."
                (gnus-message 5 "%sdone" mesg))))))
        (setq methods (cdr methods))))))
 
+
 (defun gnus-ignored-newsgroups-has-to-p ()
   "Non-nil iff gnus-ignored-newsgroups includes \"^to\\\\.\" as an element."
   ;; note this regexp is the same as:
@@ -1776,13 +1754,13 @@ newsgroup."
                       (progn
                         (skip-chars-forward " \t")
                         (not
-                         (or (eq (char-after) ?=)
-                             (eq (char-after) ?x)
-                             (eq (char-after) ?j)))))
+                         (or (= (following-char) ?=)
+                             (= (following-char) ?x)
+                             (= (following-char) ?j)))))
                  (progn
                    (set group (cons min max))
                    ;; if group is moderated, stick in moderation table
-                   (when (eq (char-after) ?m)
+                   (when (= (following-char) ?m)
                      (unless gnus-moderated-hashtb
                        (setq gnus-moderated-hashtb (gnus-make-hashtable)))
                      (gnus-sethash (symbol-name group) t
@@ -1840,7 +1818,7 @@ newsgroup."
       (let (min max group)
        (while (not (eobp))
          (condition-case ()
-             (when (eq (char-after) ?2)
+             (when (= (following-char) ?2)
                (read cur) (read cur)
                (setq min (read cur)
                      max (read cur))
@@ -1881,7 +1859,7 @@ If FORCE is non-nil, the .newsrc file is read."
        (save-excursion
          (gnus-message 5 "Reading %s..." newsrc-file)
          (set-buffer (nnheader-find-file-noselect newsrc-file))
-         (buffer-disable-undo)
+         (buffer-disable-undo (current-buffer))
          (gnus-newsrc-to-gnus-format)
          (kill-buffer (current-buffer))
          (gnus-message 5 "Reading %s...done" newsrc-file)))
@@ -1921,8 +1899,7 @@ If FORCE is non-nil, the .newsrc file is read."
     (gnus-message 5 "Reading %s..." ding-file)
     (let (gnus-newsrc-assoc)
       (condition-case nil
-         (let ((coding-system-for-read gnus-startup-file-coding-system))
-           (load ding-file t t t))
+         (load ding-file t t t)
        (error
         (ding)
         (unless (gnus-yes-or-no-p
@@ -2057,7 +2034,7 @@ If FORCE is non-nil, the .newsrc file is read."
        (unless (boundp symbol)
          (set symbol nil))
        ;; It was a group name.
-       (setq subscribed (eq (char-after) ?:)
+       (setq subscribed (= (following-char) ?:)
              group (symbol-name symbol)
              reads nil)
        (if (eolp)
@@ -2081,7 +2058,7 @@ If FORCE is non-nil, the .newsrc file is read."
                           (read buf)))
              (widen)
              ;; If the next character is a dash, then this is a range.
-             (if (eq (char-after) ?-)
+             (if (= (following-char) ?-)
                  (progn
                    ;; We read the upper bound of the range.
                    (forward-char 1)
@@ -2103,8 +2080,8 @@ If FORCE is non-nil, the .newsrc file is read."
                (push num1 reads))
              ;; If the next char in ?\n, then we have reached the end
              ;; of the line and return nil.
-             (not (eq (char-after) ?\n)))
-            ((eq (char-after) ?\n)
+             (/= (following-char) ?\n))
+            ((= (following-char) ?\n)
              ;; End of line, so we end.
              nil)
             (t
@@ -2230,7 +2207,7 @@ If FORCE is non-nil, the .newsrc file is read."
                  (gnus-point-at-eol)))
        ;; Search for all "words"...
        (while (re-search-forward "[^ \t,\n]+" eol t)
-         (if (eq (char-after (match-beginning 0)) ?!)
+         (if (= (char-after (match-beginning 0)) ?!)
              ;; If the word begins with a bang (!), this is a "not"
              ;; spec.  We put this spec (minus the bang) and the
              ;; symbol `ignore' into the list.
@@ -2272,19 +2249,19 @@ If FORCE is non-nil, the .newsrc file is read."
            (gnus-gnus-to-newsrc-format)
            (gnus-message 8 "Saving %s...done" gnus-current-startup-file))
          ;; Save .newsrc.eld.
-         (set-buffer (gnus-get-buffer-create " *Gnus-newsrc*"))
+         (set-buffer (get-buffer-create " *Gnus-newsrc*"))
          (make-local-variable 'version-control)
          (setq version-control 'never)
          (setq buffer-file-name
                (concat gnus-current-startup-file ".eld"))
          (setq default-directory (file-name-directory buffer-file-name))
-         (buffer-disable-undo)
+         (gnus-add-current-to-buffer-list)
+         (buffer-disable-undo (current-buffer))
          (erase-buffer)
          (gnus-message 5 "Saving %s.eld..." gnus-current-startup-file)
          (gnus-gnus-to-quick-newsrc-format)
          (gnus-run-hooks 'gnus-save-quick-newsrc-hook)
-         (let ((coding-system-for-write gnus-startup-file-coding-system))
-           (save-buffer))
+         (save-buffer)
          (kill-buffer (current-buffer))
          (gnus-message
           5 "Saving %s.eld...done" gnus-current-startup-file))
@@ -2342,7 +2319,7 @@ If FORCE is non-nil, the .newsrc file is read."
          info ranges range method)
       (setq buffer-file-name gnus-current-startup-file)
       (setq default-directory (file-name-directory buffer-file-name))
-      (buffer-disable-undo)
+      (buffer-disable-undo (current-buffer))
       (erase-buffer)
       ;; Write options.
       (when gnus-newsrc-options
@@ -2394,13 +2371,6 @@ If FORCE is non-nil, the .newsrc file is read."
 ;;; Slave functions.
 ;;;
 
-(defvar gnus-slave-mode nil)
-
-(defun gnus-slave-mode ()
-  "Minor mode for slave Gnusae."
-  (gnus-add-minor-mode 'gnus-slave-mode " Slave" (make-sparse-keymap))
-  (gnus-run-hooks 'gnus-slave-mode-hook))
-
 (defun gnus-slave-save-newsrc ()
   (save-excursion
     (set-buffer gnus-dribble-buffer)
@@ -2427,7 +2397,8 @@ If FORCE is non-nil, the .newsrc file is read."
        ()                              ; There are no slave files to read.
       (gnus-message 7 "Reading slave newsrcs...")
       (save-excursion
-       (set-buffer (gnus-get-buffer-create " *gnus slave*"))
+       (set-buffer (get-buffer-create " *gnus slave*"))
+       (buffer-disable-undo (current-buffer))
        (setq slave-files
              (sort (mapcar (lambda (file)
                              (list (nth 5 (file-attributes file)) file))
@@ -2533,8 +2504,8 @@ If FORCE is non-nil, the .newsrc file is read."
                          enable-multibyte-characters
                          (fboundp 'gnus-mule-get-coding-system)
                          (gnus-mule-get-coding-system (symbol-name group)))))
-               (when coding
-                 (setq str (mm-decode-coding-string str (car coding))))
+               (if coding
+                   (setq str (gnus-decode-coding-string str (car coding))))
                (set group str)))
            (forward-line 1))))
       (gnus-message 5 "Reading descriptions file...done")
index 06c6cdf..0a20c92 100644 (file)
@@ -1,8 +1,9 @@
-;;; gnus-sum.el --- summary mode commands for Gnus
+;;; gnus-sum.el --- summary mode commands for Semi-gnus
 ;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: news
+;;         MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Keywords: mail, news, MIME
 
 ;; This file is part of GNU Emacs.
 
 (require 'gnus-range)
 (require 'gnus-int)
 (require 'gnus-undo)
-(require 'gnus-util)
-(require 'mm-decode)
+(require 'mime-view)
+
 (autoload 'gnus-summary-limit-include-cached "gnus-cache" nil t)
+(autoload 'gnus-set-summary-default-charset "gnus-i18n" nil t)
 
 (defcustom gnus-kill-summary-on-exit t
   "*If non-nil, kill the summary buffer when you exit from it.
@@ -219,10 +221,10 @@ to expose hidden threads."
   :group 'gnus-thread
   :type 'boolean)
 
-(defcustom gnus-thread-ignore-subject t
-  "*If non-nil, which is the default, ignore subjects and do all threading based on the Reference header.
-If nil, articles that have different subjects from their parents will
-start separate threads."
+(defcustom gnus-thread-ignore-subject nil
+  "*If non-nil, ignore subjects and do all threading based on the Reference header.
+If nil, which is the default, articles that have different subjects
+from their parents will start separate threads."
   :group 'gnus-thread
   :type 'boolean)
 
@@ -253,12 +255,8 @@ equal will be included."
 (defcustom gnus-auto-select-first t
   "*If nil, don't select the first unread article when entering a group.
 If this variable is `best', select the highest-scored unread article
-in the group.  If t, select the first unread article.
-
-This variable can also be a function to place point on a likely
-subject line.  Useful values include `gnus-summary-first-unread-subject', 
-`gnus-summary-first-unread-article' and 
-`gnus-summary-best-unread-article'.
+in the group.  If neither nil nor `best', select the first unread
+article.
 
 If you want to prevent automatic selection of the first unread article
 in some newsgroups, set the variable to nil in
@@ -266,10 +264,7 @@ in some newsgroups, set the variable to nil in
   :group 'gnus-group-select
   :type '(choice (const :tag "none" nil)
                 (const best)
-                (sexp :menu-tag "first" t)
-                (function-item gnus-summary-first-unread-subject)
-                (function-item gnus-summary-first-unread-article)
-                (function-item gnus-summary-best-unread-article)))
+                (sexp :menu-tag "first" t)))
 
 (defcustom gnus-auto-select-next t
   "*If non-nil, offer to go to the next group from the end of the previous.
@@ -290,9 +285,7 @@ will go to the next group without confirmation."
                 (sexp :menu-tag "on" t)))
 
 (defcustom gnus-auto-select-same nil
-  "*If non-nil, select the next article with the same subject.
-If there are no more articles with the same subject, go to
-the first unread article."
+  "*If non-nil, select the next article with the same subject."
   :group 'gnus-summary-maneuvering
   :type 'boolean)
 
@@ -310,7 +303,6 @@ and non-`vertical', do both horizontal and vertical recentering."
   :group 'gnus-summary-maneuvering
   :type '(choice (const :tag "none" nil)
                 (const vertical)
-                (integer :tag "height")
                 (sexp :menu-tag "both" t)))
 
 (defcustom gnus-show-all-headers nil
@@ -323,7 +315,7 @@ and non-`vertical', do both horizontal and vertical recentering."
   "*If non-nil, ignore articles with identical Message-ID headers."
   :group 'gnus-summary
   :type 'boolean)
-
+  
 (defcustom gnus-single-article-buffer t
   "*If non-nil, display all articles in the same buffer.
 If nil, each group will get its own article buffer."
@@ -337,6 +329,13 @@ variable."
   :group 'gnus-article-various
   :type 'boolean)
 
+(defcustom gnus-show-mime t
+  "*If non-nil, do mime processing of articles.
+The articles will simply be fed to the function given by
+`gnus-show-mime-method'."
+  :group 'gnus-article-mime
+  :type 'boolean)
+
 (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."
@@ -506,7 +505,7 @@ with some simple extensions.
   :group 'gnus-threading
   :type 'string)
 
-(defcustom gnus-summary-mode-line-format "Gnus: %g [%A] %Z"
+(defcustom gnus-summary-mode-line-format "Gnus: %%b [%A] %Z"
   "*The format specification for the summary mode line.
 It works along the same lines as a normal formatting string,
 with some simple extensions:
@@ -665,7 +664,24 @@ is not run if `gnus-visual' is nil."
   :group 'gnus-summary-visual
   :type 'hook)
 
-(defcustom gnus-parse-headers-hook nil
+(defcustom gnus-structured-field-decoder
+  #'eword-decode-and-unfold-structured-field
+  "Function to decode non-ASCII characters in structured field for summary."
+  :group 'gnus-various
+  :type 'function)
+
+(defcustom gnus-unstructured-field-decoder
+  (function
+   (lambda (string)
+     (eword-decode-unstructured-field-body
+      (std11-unfold-string string) 'must-unfold)
+     ))
+  "Function to decode non-ASCII characters in unstructured field for summary."
+  :group 'gnus-various
+  :type 'function)
+
+(defcustom gnus-parse-headers-hook
+  '(gnus-set-summary-default-charset)
   "*A hook called before parsing the headers."
   :group 'gnus-various
   :type 'hook)
@@ -770,24 +786,8 @@ mark:    The articles mark."
 The function is called with one parameter, the article header vector,
 which it may alter in any way.")
 
-(defvar gnus-decode-encoded-word-function 'mail-decode-encoded-word-string
-  "Variable that says which function should be used to decode a string with encoded words.")
-
-(defcustom gnus-extra-headers nil
-  "*Extra headers to parse."
-  :group 'gnus-summary
-  :type '(repeat symbol))
-
-(defcustom gnus-ignored-from-addresses
-  (and user-mail-address (regexp-quote user-mail-address))
-  "*Regexp of From headers that may be suppressed in favor of To headers."
-  :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)
 
@@ -844,7 +844,6 @@ which it may alter in any way.")
     (?l (bbb-grouplens-score gnus-tmp-header) ?s)
     (?V (gnus-thread-total-score (and (boundp 'thread) (car thread))) ?d)
     (?U gnus-tmp-unread ?c)
-    (?f (gnus-summary-from-or-to-or-newsgroups gnus-tmp-header) ?s)
     (?t (gnus-summary-number-of-articles-in-thread
         (and (boundp 'thread) (car thread)) gnus-tmp-level)
        ?d)
@@ -1008,45 +1007,6 @@ variable (string, integer, character, etc).")
 ;; Byte-compiler warning.
 (defvar gnus-article-mode-map)
 
-;; MIME stuff.
-
-(defvar gnus-decode-encoded-word-methods
-  '(mail-decode-encoded-word-string)
-  "List of methods used to decode encoded words.
-
-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.
-
-For example: 
-((\"chinese\" . gnus-decode-encoded-word-string-by-guess)
- mail-decode-encoded-word-string 
- (\"chinese\" . rfc1843-decode-string))
-")
-
-(defvar gnus-decode-encoded-word-methods-cache nil)
-
-(defun gnus-multi-decode-encoded-word-string (string)
-  "Apply the functions from `gnus-encoded-word-methods' that match."
-  (unless (and gnus-decode-encoded-word-methods-cache
-              (eq gnus-newsgroup-name 
-                  (car gnus-decode-encoded-word-methods-cache)))
-    (setq gnus-decode-encoded-word-methods-cache (list gnus-newsgroup-name))
-    (mapc '(lambda (x) 
-            (if (symbolp x)
-                (nconc gnus-decode-encoded-word-methods-cache (list x))
-              (if (and gnus-newsgroup-name 
-                       (string-match (car x) gnus-newsgroup-name))
-                  (nconc gnus-decode-encoded-word-methods-cache 
-                         (list (cdr x))))))
-         gnus-decode-encoded-word-methods))
-  (let ((xlist gnus-decode-encoded-word-methods-cache))
-    (pop xlist)
-    (while xlist
-      (setq string (funcall (pop xlist) string))))
-  string)
-
 ;; Subject simplification.
 
 (defun gnus-simplify-whitespace (str)
@@ -1189,7 +1149,7 @@ increase the score of each group you read."
     [delete] gnus-summary-prev-page
     [backspace] gnus-summary-prev-page
     "\r" gnus-summary-scroll-up
-    "\M-\r" gnus-summary-scroll-down
+    "\e\r" gnus-summary-scroll-down
     "n" gnus-summary-next-unread-article
     "p" gnus-summary-prev-unread-article
     "N" gnus-summary-next-article
@@ -1246,6 +1206,7 @@ increase the score of each group you read."
     "\M-g" gnus-summary-rescan-group
     "w" gnus-summary-stop-page-breaking
     "\C-c\C-r" gnus-summary-caesar-message
+    "\M-t" gnus-summary-toggle-mime
     "f" gnus-summary-followup
     "F" gnus-summary-followup-with-original
     "C" gnus-summary-cancel-article
@@ -1270,6 +1231,7 @@ increase the score of each group you read."
     "t" gnus-article-hide-headers
     "g" gnus-summary-show-article
     "l" gnus-summary-goto-last-article
+    "v" gnus-summary-preview-mime-message
     "\C-c\C-v\C-v" gnus-uu-decode-uu-view
     "\C-d" gnus-summary-enter-digest-group
     "\M-\C-d" gnus-summary-read-document
@@ -1283,7 +1245,6 @@ increase the score of each group you read."
     "L" gnus-summary-lower-score
     "\M-i" gnus-symbolic-argument
     "h" gnus-summary-select-article-buffer
-    "b" gnus-article-view-part
     
     "V" gnus-summary-score-map
     "X" gnus-uu-extract-map
@@ -1395,7 +1356,6 @@ increase the score of each group you read."
     [delete] gnus-summary-prev-page
     "p" gnus-summary-prev-page
     "\r" gnus-summary-scroll-up
-    "\M-\r" gnus-summary-scroll-down
     "<" gnus-summary-beginning-of-article
     ">" gnus-summary-end-of-article
     "b" gnus-summary-beginning-of-article
@@ -1415,12 +1375,12 @@ increase the score of each group you read."
     "e" gnus-article-emphasize
     "w" gnus-article-fill-cited-article
     "c" gnus-article-remove-cr
-    "q" gnus-article-de-quoted-unreadable
     "f" gnus-article-display-x-face
     "l" gnus-summary-stop-page-breaking
     "r" gnus-summary-caesar-message
     "t" gnus-article-hide-headers
     "v" gnus-summary-verbose-headers
+    "m" gnus-summary-toggle-mime
     "h" gnus-article-treat-html
     "d" gnus-article-treat-dumbquotes)
 
@@ -1430,7 +1390,6 @@ increase the score of each group you read."
     "b" gnus-article-hide-boring-headers
     "s" gnus-article-hide-signature
     "c" gnus-article-hide-citation
-    "C" gnus-article-hide-citation-in-followups
     "p" gnus-article-hide-pgp
     "P" gnus-article-hide-pem
     "\C-c" gnus-article-hide-citation-maybe)
@@ -1441,12 +1400,6 @@ increase the score of each group you read."
     "c" gnus-article-highlight-citation
     "s" gnus-article-highlight-signature)
 
-  (gnus-define-keys (gnus-summary-wash-mime-map "M" gnus-summary-wash-map)
-    "w" gnus-article-decode-mime-words
-    "c" gnus-article-decode-charset
-    "v" gnus-mime-view-all-parts
-    "b" gnus-article-view-part)
-
   (gnus-define-keys (gnus-summary-wash-time-map "T" gnus-summary-wash-map)
     "z" gnus-article-date-ut
     "u" gnus-article-date-ut
@@ -1482,7 +1435,6 @@ increase the score of each group you read."
     "c" gnus-summary-copy-article
     "B" gnus-summary-crosspost-article
     "q" gnus-summary-respool-query
-    "t" gnus-summary-respool-trace
     "i" gnus-summary-import-article
     "p" gnus-summary-article-posted-p)
 
@@ -1546,11 +1498,6 @@ increase the score of each group you read."
               ["Headers" gnus-article-highlight-headers t]
               ["Signature" gnus-article-highlight-signature t]
               ["Citation" gnus-article-highlight-citation t])
-            ("MIME"
-             ["Words" gnus-article-decode-mime-words t]
-             ["Charset" gnus-article-decode-charset t]
-             ["QP" gnus-article-de-quoted-unreadable t]
-             ["View all" gnus-mime-view-all-parts t])
              ("Date"
               ["Local" gnus-article-date-local t]
               ["ISO8601" gnus-article-date-iso8601 t]
@@ -1572,13 +1519,13 @@ increase the score of each group you read."
               ["Word wrap" gnus-article-fill-cited-article t]
               ["CR" gnus-article-remove-cr t]
               ["Show X-Face" gnus-article-display-x-face t]
-              ["Quoted-Printable" gnus-article-de-quoted-unreadable t]
               ["UnHTMLize" gnus-article-treat-html t]
               ["Rot 13" gnus-summary-caesar-message t]
               ["Unix pipe" gnus-summary-pipe-message t]
               ["Add buttons" gnus-article-add-buttons t]
               ["Add buttons to head" gnus-article-add-buttons-to-head t]
               ["Stop page breaking" gnus-summary-stop-page-breaking t]
+              ["Toggle MIME" gnus-summary-toggle-mime t]
               ["Verbose header" gnus-summary-verbose-headers t]
               ["Toggle header" gnus-summary-toggle-header t])
              ("Output"
@@ -1609,7 +1556,6 @@ increase the score of each group you read."
                (gnus-check-backend-function
                 'request-expire-articles gnus-newsgroup-name)]
               ["Query respool" gnus-summary-respool-query t]
-             ["Trace respool" gnus-summary-respool-trace t]
               ["Delete expirable articles" gnus-summary-expire-articles-now
                (gnus-check-backend-function
                 'request-expire-articles gnus-newsgroup-name)])
@@ -1793,10 +1739,9 @@ increase the score of each group you read."
        ["Edit local kill file" gnus-summary-edit-local-kill t]
        ["Edit main kill file" gnus-summary-edit-global-kill t]
        ["Edit group parameters" gnus-summary-edit-parameters t]
-       ["Send a bug report" gnus-bug t]
        ("Exit"
        ["Catchup and exit" gnus-summary-catchup-and-exit t]
-       ["Catchup all and exit" gnus-summary-catchup-all-and-exit t]
+       ["Catchup all and exit" gnus-summary-catchup-and-exit t]
        ["Catchup and goto next" gnus-summary-catchup-and-goto-next-group t]
        ["Exit group" gnus-summary-exit t]
        ["Exit group without updating" gnus-summary-exit-no-update t]
@@ -1823,7 +1768,6 @@ increase the score of each group you read."
                     ("article body" "body" string)
                     ("article head" "head" string)
                     ("xref" "xref" string)
-                    ("extra header" "extra" string)
                     ("lines" "lines" number)
                     ("followups to author" "followup" string)))
          (types '((number ("less than" <)
@@ -1925,7 +1869,7 @@ The following commands are available:
   (setq mode-name "Summary")
   (make-local-variable 'minor-mode-alist)
   (use-local-map gnus-summary-mode-map)
-  (buffer-disable-undo)
+  (buffer-disable-undo (current-buffer))
   (setq buffer-read-only t)            ;Disable modification
   (setq truncate-lines t)
   (setq selective-display t)
@@ -1943,7 +1887,6 @@ 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)
-  (mm-enable-multibyte)
   (gnus-update-format-specifications nil 'summary 'summary-mode 'summary-dummy)
   (gnus-update-summary-mark-positions))
 
@@ -2037,26 +1980,21 @@ The following commands are available:
   (when list
     (let ((data (and after-article (gnus-data-find-list after-article)))
          (ilist list))
-      (if (not (or data
-                  after-article))
-         (let ((odata gnus-newsgroup-data))
-           (setq gnus-newsgroup-data (nconc list gnus-newsgroup-data))
+      (or data (not after-article) (error "No such article: %d" after-article))
+      ;; Find the last element in the list to be spliced into the main
+      ;; list.
+      (while (cdr list)
+       (setq list (cdr list)))
+      (if (not data)
+         (progn
+           (setcdr list gnus-newsgroup-data)
+           (setq gnus-newsgroup-data ilist)
            (when offset
-             (gnus-data-update-list odata offset)))
-       ;; Find the last element in the list to be spliced into the main
-       ;; list.
-       (while (cdr list)
-         (setq list (cdr list)))
-       (if (not data)
-           (progn
-             (setcdr list gnus-newsgroup-data)
-             (setq gnus-newsgroup-data ilist)
-             (when offset
-               (gnus-data-update-list (cdr list) offset)))
-         (setcdr list (cdr data))
-         (setcdr data ilist)
-         (when offset
-           (gnus-data-update-list (cdr list) offset))))
+             (gnus-data-update-list (cdr list) offset)))
+       (setcdr list (cdr data))
+       (setcdr data ilist)
+       (when offset
+         (gnus-data-update-list (cdr list) offset)))
       (setq gnus-newsgroup-data-reverse nil))))
 
 (defun gnus-data-remove (article &optional offset)
@@ -2085,11 +2023,21 @@ The following commands are available:
 
 (defun gnus-data-update-list (data offset)
   "Add OFFSET to the POS of all data entries in DATA."
-  (setq gnus-newsgroup-data-reverse nil)
   (while data
     (setcar (nthcdr 2 (car data)) (+ offset (nth 2 (car data))))
     (setq data (cdr data))))
 
+(defun gnus-data-compute-positions ()
+  "Compute the positions of all articles."
+  (let ((data gnus-newsgroup-data)
+       pos)
+    (while data
+      (when (setq pos (text-property-any
+                      (point-min) (point-max)
+                      'gnus-number (gnus-data-number (car data))))
+       (gnus-data-set-pos (car data) (+ pos 3)))
+      (setq data (cdr data)))))
+
 (defun gnus-summary-article-pseudo-p (article)
   "Say whether this article is a pseudo article or not."
   (not (vectorp (gnus-data-header (gnus-data-find article)))))
@@ -2257,21 +2205,6 @@ marks of articles."
             ,@forms)
         (gnus-restore-hidden-threads-configuration ,config)))))
 
-(defun gnus-data-compute-positions ()
-  "Compute the positions of all articles."
-  (setq gnus-newsgroup-data-reverse nil)
-  (let ((data gnus-newsgroup-data))
-    (save-excursion
-      (gnus-save-hidden-threads
-       (gnus-summary-show-all-threads)
-       (goto-char (point-min))
-       (while data
-         (while (get-text-property (point) 'gnus-intangible)
-           (forward-line 1))
-         (gnus-data-set-pos (car data) (+ (point) 3))
-         (setq data (cdr data))
-         (forward-line 1))))))
-
 (defun gnus-hidden-threads-configuration ()
   "Return the current hidden threads configuration."
   (save-excursion
@@ -2287,7 +2220,7 @@ marks of articles."
     (while (setq point (pop config))
       (when (and (< point (point-max))
                 (goto-char point)
-                (eq (char-after) ?\n))
+                (= (following-char) ?\n))
        (subst-char-in-region point (1+ point) ?\n ?\r)))))
 
 ;; Various summary mode internalish functions.
@@ -2332,7 +2265,8 @@ marks of articles."
          (setq gnus-summary-buffer (current-buffer))
          (not gnus-newsgroup-prepared))
       ;; Fix by Sudish Joseph <joseph@cis.ohio-state.edu>
-      (setq gnus-summary-buffer (set-buffer (gnus-get-buffer-create buffer)))
+      (setq gnus-summary-buffer (set-buffer (get-buffer-create buffer)))
+      (gnus-add-current-to-buffer-list)
       (gnus-summary-mode group)
       (when gnus-carpal
        (gnus-carpal-setup-buffer 'summary))
@@ -2391,7 +2325,7 @@ marks of articles."
 (defun gnus-summary-last-article-p (&optional article)
   "Return whether ARTICLE is the last article in the buffer."
   (if (not (setq article (or article (gnus-summary-article-number))))
-      t                                        ; All non-existent numbers are the last article.  :-)
+      t                ; All non-existent numbers are the last article.  :-)
     (not (cdr (gnus-data-find-list article)))))
 
 (defun gnus-make-thread-indent-array ()
@@ -2415,13 +2349,13 @@ marks of articles."
          (gnus-score-over-mark 130)
          (gnus-download-mark 131)
          (spec gnus-summary-line-format-spec)
-         gnus-visual pos)
+         thread gnus-visual pos)
       (save-excursion
        (gnus-set-work-buffer)
        (let ((gnus-summary-line-format-spec spec)
              (gnus-newsgroup-downloadable '((0 . t))))
          (gnus-summary-insert-line
-          [0 "" "" "" "" "" 0 0 "" nil]  0 nil 128 t nil "" nil 1)
+          [0 "" "" "" "" "" 0 0 ""]  0 nil 128 t nil "" nil 1)
          (goto-char (point-min))
          (setq pos (list (cons 'unread (and (search-forward "\200" nil t)
                                             (- (point) 2)))))
@@ -2445,29 +2379,6 @@ marks of articles."
    (point) (progn (eval gnus-summary-dummy-line-format-spec) (point))
    (list 'gnus-number gnus-tmp-number 'gnus-intangible gnus-tmp-number)))
 
-(defun gnus-summary-from-or-to-or-newsgroups (header)
-  (let ((to (cdr (assq 'To (mail-header-extra header))))
-       (newsgroups (cdr (assq 'Newsgroups (mail-header-extra header)))))
-    (cond
-     ((and to
-          gnus-ignored-from-addresses
-          (string-match gnus-ignored-from-addresses
-                        (mail-header-from header)))
-      (concat "-> "
-             (or (car (funcall gnus-extract-address-components
-                               (funcall
-                                gnus-decode-encoded-word-function to)))
-                 (funcall gnus-decode-encoded-word-function to))))
-     ((and newsgroups
-          gnus-ignored-from-addresses
-          (string-match gnus-ignored-from-addresses
-                        (mail-header-from header)))
-      (concat "=> " newsgroups))
-     (t
-      (or (car (funcall gnus-extract-address-components
-                       (mail-header-from header)))
-         (mail-header-from header))))))
-
 (defun gnus-summary-insert-line (gnus-tmp-header
                                 gnus-tmp-level gnus-tmp-current
                                 gnus-tmp-unread gnus-tmp-replied
@@ -2514,7 +2425,7 @@ marks of articles."
       (setq gnus-tmp-name gnus-tmp-from))
     (unless (numberp gnus-tmp-lines)
       (setq gnus-tmp-lines 0))
-    (gnus-put-text-property
+    (gnus-put-text-property-excluding-characters-with-faces
      (point)
      (progn (eval gnus-summary-line-format-spec) (point))
      'gnus-number gnus-tmp-number)
@@ -2600,8 +2511,7 @@ the thread are to be displayed."
             (set (car elem) (eval (nth 1 elem))))))))
 
 (defun gnus-summary-read-group (group &optional show-all no-article
-                                     kill-buffer no-display backward
-                                     select-articles)
+                                     kill-buffer no-display backward)
   "Start reading news in newsgroup GROUP.
 If SHOW-ALL is non-nil, already read articles are also listed.
 If NO-ARTICLE is non-nil, no article is selected initially.
@@ -2612,10 +2522,8 @@ If NO-DISPLAY, don't generate a summary buffer."
                            (let ((gnus-auto-select-next nil))
                              (or (gnus-summary-read-group-1
                                   group show-all no-article
-                                  kill-buffer no-display
-                                  select-articles)
-                                 (setq show-all nil
-                                       select-articles nil)))))
+                                  kill-buffer no-display)
+                                 (setq show-all nil)))))
                (eq gnus-auto-select-next 'quietly))
       (set-buffer gnus-group-buffer)
       ;; The entry function called above goes to the next
@@ -2629,8 +2537,7 @@ If NO-DISPLAY, don't generate a summary buffer."
     result))
 
 (defun gnus-summary-read-group-1 (group show-all no-article
-                                       kill-buffer no-display
-                                       &optional select-articles)
+                                       kill-buffer no-display)
   ;; Killed foreign groups can't be entered.
   (when (and (not (gnus-group-native-p group))
             (not (gnus-gethash group gnus-newsrc-hashtb)))
@@ -2638,8 +2545,7 @@ If NO-DISPLAY, don't generate a summary buffer."
   (gnus-message 5 "Retrieving newsgroup: %s..." group)
   (let* ((new-group (gnus-summary-setup-buffer group))
         (quit-config (gnus-group-quit-config group))
-        (did-select (and new-group (gnus-select-newsgroup
-                                    group show-all select-articles))))
+        (did-select (and new-group (gnus-select-newsgroup group show-all))))
     (cond
      ;; This summary buffer exists already, so we just select it.
      ((not new-group)
@@ -2754,21 +2660,16 @@ If NO-DISPLAY, don't generate a summary buffer."
                 (not no-display)
                 gnus-newsgroup-unreads
                 gnus-auto-select-first)
-           (progn
-             (gnus-configure-windows 'summary)
-             (cond
-              ((eq gnus-auto-select-first 'best)
-               (gnus-summary-best-unread-article))
-              ((eq gnus-auto-select-first t)
-               (gnus-summary-first-unread-article))
-              ((gnus-functionp gnus-auto-select-first)
-               (funcall gnus-auto-select-first))))
+           (unless (if (eq gnus-auto-select-first 'best)
+                       (gnus-summary-best-unread-article)
+                     (gnus-summary-first-unread-article))
+             (gnus-configure-windows 'summary))
          ;; Don't select any articles, just move point to the first
          ;; article in the group.
          (goto-char (point-min))
          (gnus-summary-position-point)
          (gnus-configure-windows 'summary 'force)
-         (gnus-set-mode-line 'summary))
+         (gnus-set-mode-line 'summary))        
        (when (get-buffer-window gnus-group-buffer t)
          ;; Gotta use windows, because recenter does weird stuff if
          ;; the current buffer ain't the displayed window.
@@ -2968,7 +2869,7 @@ If NO-DISPLAY, don't generate a summary buffer."
     threads))
 
 ;; Build the thread tree.
-(defsubst gnus-dependencies-add-header (header dependencies force-new)
+(defun gnus-dependencies-add-header (header dependencies force-new)
   "Enter HEADER into the DEPENDENCIES table if it is not already there.
 
 If FORCE-NEW is not nil, enter HEADER into the DEPENDENCIES table even
@@ -3047,9 +2948,8 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
 
 (defun gnus-build-sparse-threads ()
   (let ((headers gnus-newsgroup-headers)
-       (gnus-summary-ignore-duplicates t)
        header references generation relations
-       subject child end new-child date)
+       cthread subject child end pthread relation new-child date)
     ;; First we create an alist of generations/relations, where
     ;; generations is how much we trust the relation, and the relation
     ;; is parent/child.
@@ -3066,14 +2966,12 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
                generation 0)
          (while (search-backward ">" nil t)
            (setq end (1+ (point)))
-           (when (search-backward "<" nil t)
-             (setq new-child (buffer-substring (point) end))
-             (push (list (incf generation)
-                         child (setq child new-child)
-                         subject date)
-                   relations)))
-         (when child
-           (push (list (1+ generation) child nil subject) relations))
+           (if (search-backward "<" nil t)
+               (push (list (incf generation)
+                           child (setq child new-child)
+                           subject date)
+                     relations)))
+         (push (list (1+ generation) child nil subject) relations)
          (erase-buffer)))
       (kill-buffer (current-buffer)))
     ;; Sort over trustworthiness.
@@ -3082,7 +2980,7 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
        (when (gnus-dependencies-add-header
              (make-full-mail-header
               gnus-reffed-article-number
-              (nth 3 relation) "" (or (nth 4 relation) "")
+              (nth 3 relation) "" (nth 4 relation)
               (nth 1 relation)
               (or (nth 2 relation) "") 0 0 "")
              gnus-newsgroup-dependencies nil)
@@ -3114,9 +3012,12 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
             (setq heads nil)))))
      gnus-newsgroup-dependencies)))
 
+;; The following macros and functions were written by Felix Lee
+;; <flee@cse.psu.edu>.
+
 (defmacro gnus-nov-read-integer ()
   '(prog1
-       (if (eq (char-after) ?\t)
+       (if (= (following-char) ?\t)
           0
         (let ((num (ignore-errors (read buffer))))
           (if (numberp num) num 0)))
@@ -3129,16 +3030,6 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
 (defmacro gnus-nov-field ()
   '(buffer-substring (point) (if (gnus-nov-skip-field) (1- (point)) eol)))
 
-(defmacro gnus-nov-parse-extra ()
-  '(let (out string)
-     (while (not (memq (char-after) '(?\n nil)))
-       (setq string (gnus-nov-field))
-       (when (string-match "^\\([^ :]+\\): " string)
-        (push (cons (intern (match-string 1 string))
-                    (substring string (match-end 0)))
-              out)))
-     out))
-
 ;; This function has to be called with point after the article number
 ;; on the beginning of the line.
 (defsubst gnus-nov-parse-line (number dependencies &optional force-new)
@@ -3156,19 +3047,18 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
          (setq header
                (make-full-mail-header
                 number                 ; number
-                (funcall gnus-decode-encoded-word-function
-                         (gnus-nov-field)) ; subject
-                (funcall gnus-decode-encoded-word-function
-                         (gnus-nov-field)) ; from
+                (funcall
+                 gnus-unstructured-field-decoder (gnus-nov-field)) ; subject
+                (funcall
+                 gnus-structured-field-decoder (gnus-nov-field)) ; from
                 (gnus-nov-field)       ; date
                 (or (gnus-nov-field)
                     (nnheader-generate-fake-message-id)) ; id
                 (gnus-nov-field)       ; refs
                 (gnus-nov-read-integer) ; chars
                 (gnus-nov-read-integer) ; lines
-                (unless (eq (char-after) ?\n)
-                  (gnus-nov-field))    ; misc
-                (gnus-nov-parse-extra)))) ; extra
+                (unless (= (following-char) ?\n)
+                  (gnus-nov-field))))) ; misc
 
       (widen))
 
@@ -3215,7 +3105,7 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
   "Read all the headers."
   (let ((gnus-summary-ignore-duplicates t)
        (dependencies gnus-newsgroup-dependencies)
-       header article)
+       found header article)
     (save-excursion
       (set-buffer nntp-server-buffer)
       (let ((case-fold-search nil))
@@ -3226,16 +3116,14 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
                  header (gnus-nov-parse-line
                          article dependencies)))
          (when header
-           (save-excursion
-             (set-buffer gnus-summary-buffer)
-             (push header gnus-newsgroup-headers)
-             (if (memq (setq article (mail-header-number header))
-                       gnus-newsgroup-unselected)
-                 (progn
-                   (push article gnus-newsgroup-unreads)
-                   (setq gnus-newsgroup-unselected
-                         (delq article gnus-newsgroup-unselected)))
-               (push article gnus-newsgroup-ancient)))
+           (push header gnus-newsgroup-headers)
+           (if (memq (setq article (mail-header-number header))
+                     gnus-newsgroup-unselected)
+               (progn
+                 (push article gnus-newsgroup-unreads)
+                 (setq gnus-newsgroup-unselected
+                       (delq article gnus-newsgroup-unselected)))
+             (push article gnus-newsgroup-ancient))
            (forward-line 1)))))))
 
 (defun gnus-summary-update-article-line (article header)
@@ -3283,7 +3171,7 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
 (defun gnus-summary-update-article (article &optional iheader)
   "Update ARTICLE in the summary buffer."
   (set-buffer gnus-summary-buffer)
-  (let* ((header (gnus-summary-article-header article))
+  (let* ((header (or iheader (gnus-summary-article-header article)))
         (id (mail-header-id header))
         (data (gnus-data-find article))
         (thread (gnus-id-to-thread id))
@@ -3296,13 +3184,16 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
                  references))
               "none")))
         (buffer-read-only nil)
-        (old (car thread)))
+        (old (car thread))
+        (number (mail-header-number header))
+        pos)
     (when thread
+      ;; !!! Should this be in or not?
       (unless iheader
-       (setcar thread nil)
-       (when parent
-         (delq thread parent)))
-      (if (gnus-summary-insert-subject id header)
+       (setcar thread nil))
+      (when parent
+       (delq thread parent))
+      (if (gnus-summary-insert-subject id header iheader)
          ;; Set the (possibly) new article number in the data structure.
          (gnus-data-set-number data (gnus-id-to-article id))
        (setcar thread old)
@@ -3354,11 +3245,10 @@ If LINE, insert the rebuilt thread starting on line LINE."
       ;;!!! then we want to insert at the beginning of the buffer.
       ;;!!! That happens to be true with Gnus now, but that may
       ;;!!! change in the future.  Perhaps.
-      (gnus-data-enter-list
-       (if line nil current) data (- (point) old-pos))
-      (setq gnus-newsgroup-threads
-           (nconc threads gnus-newsgroup-threads))
-      (gnus-data-compute-positions))))
+      (gnus-data-enter-list (if line nil current) data (- (point) old-pos))
+      (setq gnus-newsgroup-threads (nconc threads gnus-newsgroup-threads))
+      (when line
+       (gnus-data-compute-positions)))))
 
 (defun gnus-number-to-header (number)
   "Return the header for article NUMBER."
@@ -3434,8 +3324,9 @@ If LINE, insert the rebuilt thread starting on line LINE."
   "Remove the thread that has ID in it."
   (let (headers thread last-id)
     ;; First go up in this thread until we find the root.
-    (setq last-id (gnus-root-id id)
-         headers (message-flatten-list (gnus-id-to-thread last-id)))
+    (setq last-id (gnus-root-id id))
+    (setq headers (list (car (gnus-id-to-thread last-id))
+                       (caadr (gnus-id-to-thread last-id))))
     ;; We have now found the real root of this thread. It might have
     ;; been gathered into some loose thread, so we have to search
     ;; through the threads to find the thread we wanted.
@@ -3485,7 +3376,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)
@@ -3508,10 +3398,10 @@ If LINE, insert the rebuilt thread starting on line LINE."
   "Sort THREADS."
   (if (not gnus-thread-sort-functions)
       threads
-    (gnus-message 8 "Sorting threads...")
+    (gnus-message 7 "Sorting threads...")
     (prog1
        (sort threads (gnus-make-sort-function gnus-thread-sort-functions))
-      (gnus-message 8 "Sorting threads...done"))))
+      (gnus-message 7 "Sorting threads...done"))))
 
 (defun gnus-sort-articles (articles)
   "Sort ARTICLES."
@@ -3583,7 +3473,7 @@ If LINE, insert the rebuilt thread starting on line LINE."
 
 (defsubst gnus-article-sort-by-date (h1 h2)
   "Sort articles by root article date."
-  (time-less-p
+  (gnus-time-less
    (gnus-date-get-time (mail-header-date h1))
    (gnus-date-get-time (mail-header-date h2))))
 
@@ -3644,12 +3534,6 @@ Unscored articles will be counted as having a score of zero."
 (defvar gnus-tmp-root-expunged nil)
 (defvar gnus-tmp-dummy-line nil)
 
-(defvar gnus-tmp-header)
-(defun gnus-extra-header (type &optional header)
-  "Return the extra header of TYPE."
-  (or (cdr (assq type (mail-header-extra (or header gnus-tmp-header))))
-      ""))
-
 (defun gnus-summary-prepare-threads (threads)
   "Prepare summary buffer from THREADS and indentation LEVEL.
 THREADS is either a list of `(PARENT [(CHILD1 [(GRANDCHILD ...]...) ...])'
@@ -3877,7 +3761,7 @@ or a straight list of headers."
              (setq gnus-tmp-name gnus-tmp-from))
            (unless (numberp gnus-tmp-lines)
              (setq gnus-tmp-lines 0))
-           (gnus-put-text-property
+           (gnus-put-text-property-excluding-characters-with-faces
             (point)
             (progn (eval gnus-summary-line-format-spec) (point))
             'gnus-number number)
@@ -3931,14 +3815,13 @@ or a straight list of headers."
         (cdr (assq number gnus-newsgroup-scored))
         (memq number gnus-newsgroup-processable))))))
 
-(defun gnus-select-newsgroup (group &optional read-all select-articles)
+(defun gnus-select-newsgroup (group &optional read-all)
   "Select newsgroup GROUP.
-If READ-ALL is non-nil, all articles in the group are selected.
-If SELECT-ARTICLES, only select those articles from GROUP."
+If READ-ALL is non-nil, all articles in the group are selected."
   (let* ((entry (gnus-gethash group gnus-newsrc-hashtb))
         ;;!!! Dirty hack; should be removed.
         (gnus-summary-ignore-duplicates
-         (if (eq (car (gnus-find-method-for-group group)) 'nnvirtual)
+         (if (eq (car (gnus-find-method-for-group group)) 'nnvirtual)
              t
            gnus-summary-ignore-duplicates))
         (info (nth 2 entry))
@@ -3983,13 +3866,10 @@ If SELECT-ARTICLES, only select those articles from GROUP."
     (setq gnus-newsgroup-processable nil)
 
     (gnus-update-read-articles group gnus-newsgroup-unreads)
+    (unless (gnus-ephemeral-group-p gnus-newsgroup-name)
+      (gnus-group-update-group group))
 
-    (if (setq articles select-articles)
-       (setq gnus-newsgroup-unselected
-             (gnus-sorted-intersection
-              gnus-newsgroup-unreads
-              (gnus-sorted-complement gnus-newsgroup-unreads articles)))
-      (setq articles (gnus-articles-to-read group read-all)))
+    (setq articles (gnus-articles-to-read group read-all))
 
     (cond
      ((null articles)
@@ -4000,7 +3880,6 @@ If SELECT-ARTICLES, only select those articles from GROUP."
       ;; Init the dependencies hash table.
       (setq gnus-newsgroup-dependencies
            (gnus-make-hashtable (length articles)))
-      (gnus-set-global-variables)
       ;; Retrieve the headers and read them in.
       (gnus-message 5 "Fetching headers for %s..." gnus-newsgroup-name)
       (setq gnus-newsgroup-headers
@@ -4040,15 +3919,15 @@ If SELECT-ARTICLES, only select those articles from GROUP."
       ;; Removed marked articles that do not exist.
       (gnus-update-missing-marks
        (gnus-sorted-complement fetched-articles articles))
+      ;; Let the Gnus agent mark articles as read.
+      (when gnus-agent
+       (gnus-agent-get-undownloaded-list))
       ;; We might want to build some more threads first.
       (when (and gnus-fetch-old-headers
                 (eq gnus-headers-retrieved-by 'nov))
        (if (eq gnus-fetch-old-headers 'invisible)
            (gnus-build-all-threads)
          (gnus-build-old-threads)))
-      ;; Let the Gnus agent mark articles as read.
-      (when gnus-agent
-       (gnus-agent-get-undownloaded-list))
       ;; Check whether auto-expire is to be done in this group.
       (setq gnus-newsgroup-auto-expire
            (gnus-group-auto-expirable-p group))
@@ -4211,7 +4090,7 @@ If SELECT-ARTICLES, only select those articles from GROUP."
   (let ((types gnus-article-mark-lists)
        (info (gnus-get-info gnus-newsgroup-name))
        (uncompressed '(score bookmark killed))
-       type list newmarked symbol delta-marks)
+       type list newmarked symbol)
     (when info
       ;; Add all marks lists that are non-nil to the list of marks lists.
       (while (setq type (pop types))
@@ -4260,9 +4139,7 @@ If SELECT-ARTICLES, only select those articles from GROUP."
   "This function sets 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)
-            (symbol-value
-             (intern (format "gnus-%s-mode-line-format-spec" where))))
+  (when (memq where gnus-updated-mode-lines)
     (let (mode-string)
       (save-excursion
        ;; We evaluate this in the summary buffer since these
@@ -4312,7 +4189,7 @@ If WHERE is `summary', the summary mode line format will be used."
          ;; We might have to chop a bit of the string off...
          (when (> (length mode-string) max-len)
            (setq mode-string
-                 (concat (truncate-string-to-width mode-string (- max-len 3))
+                 (concat (gnus-truncate-string mode-string (- max-len 3))
                          "...")))
          ;; Pad the mode string a bit.
          (setq mode-string (format (format "%%-%ds" max-len) mode-string))))
@@ -4418,7 +4295,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
       ;; Then we add the read articles to the range.
       (gnus-add-to-range
        ninfo (setq articles (sort articles '<))))))
-
+  
 (defun gnus-group-make-articles-read (group articles)
   "Update the info of GROUP to say that ARTICLES are read."
   (let* ((num 0)
@@ -4476,7 +4353,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
         (or dependencies
             (save-excursion (set-buffer gnus-summary-buffer)
                             gnus-newsgroup-dependencies)))
-       headers id end ref)
+       headers id id-dep ref-dep end ref)
     (save-excursion
       (set-buffer nntp-server-buffer)
       ;; Translate all TAB characters into SPACE characters.
@@ -4512,15 +4389,15 @@ The resulting hash table is returned, or nil if no Xrefs were found."
            (progn
              (goto-char p)
              (if (search-forward "\nsubject: " nil t)
-                 (funcall gnus-decode-encoded-word-function
-                          (nnheader-header-value))
+                 (funcall
+                  gnus-unstructured-field-decoder (nnheader-header-value))
                "(none)"))
            ;; From.
            (progn
              (goto-char p)
              (if (search-forward "\nfrom: " nil t)
-                 (funcall gnus-decode-encoded-word-function
-                          (nnheader-header-value))
+                 (funcall
+                  gnus-structured-field-decoder (nnheader-header-value))
                "(nobody)"))
            ;; Date.
            (progn
@@ -4569,8 +4446,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
                        (setq ref2 (substring in-reply-to (match-beginning 0)
                                              (match-end 0)))
                        (when (> (length ref2) (length ref))
-                         (setq ref ref2)))
-                     ref)
+                         (setq ref ref2))))
                  (setq ref nil))))
            ;; Chars.
            (progn
@@ -4590,19 +4466,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
            (progn
              (goto-char p)
              (and (search-forward "\nxref: " nil t)
-                  (nnheader-header-value)))
-           ;; Extra.
-           (when gnus-extra-headers
-             (let ((extra gnus-extra-headers)
-                   out)
-               (while extra
-                 (goto-char p)
-                 (when (search-forward
-                        (concat "\n" (symbol-name (car extra)) ": ") nil t)
-                   (push (cons (car extra) (nnheader-header-value))
-                         out))
-                 (pop extra))
-               out))))
+                  (nnheader-header-value)))))
          (when (equal id ref)
            (setq ref nil))
 
@@ -4633,9 +4497,6 @@ list of headers that match SEQUENCE (see `nntp-retrieve-headers')."
        number headers header)
     (save-excursion
       (set-buffer nntp-server-buffer)
-      (goto-char (point-min))
-      (while (search-forward "\r" nil t)
-       (replace-match " " t t))
       ;; Allow the user to mangle the headers before parsing them.
       (gnus-run-hooks 'gnus-parse-headers-hook)
       (goto-char (point-min))
@@ -4689,7 +4550,7 @@ This is meant to be called in `gnus-article-internal-prepare-hook'."
          (save-restriction
            (nnheader-narrow-to-headers)
            (goto-char (point-min))
-           (when (or (and (eq (downcase (char-after)) ?x)
+           (when (or (and (eq (downcase (following-char)) ?x)
                           (looking-at "Xref:"))
                      (search-forward "\nXref:" nil t))
              (goto-char (1+ (match-end 0)))
@@ -4704,14 +4565,14 @@ the subject line on."
   (let* ((line (and (numberp old-header) old-header))
         (old-header (and (vectorp old-header) old-header))
         (header (cond ((and old-header use-old-header)
-                       old-header)
-                      ((and (numberp id)
-                            (gnus-number-to-header id))
-                       (gnus-number-to-header id))
-                      (t
-                       (gnus-read-header id))))
-        (number (and (numberp id) id))
-        d)
+                      old-header)
+                     ((and (numberp id)
+                           (gnus-number-to-header id))
+                      (gnus-number-to-header id))
+                     (t
+                      (gnus-read-header id))))
+       (number (and (numberp id) id))
+       pos d)
     (when header
       ;; Rebuild the thread that this article is part of and go to the
       ;; article we have fetched.
@@ -4781,7 +4642,7 @@ current article will be taken into consideration."
       (let ((max (max (point) (mark)))
            articles article)
        (save-excursion
-         (goto-char (min (min (point) (mark))))
+         (goto-char (min (point) (mark)))
          (while
              (and
               (push (setq article (gnus-summary-article-number)) articles)
@@ -4798,19 +4659,6 @@ current article will be taken into consideration."
       ;; Just return the current article.
       (list (gnus-summary-article-number))))))
 
-(defmacro gnus-summary-iterate (arg &rest forms)
-  "Iterate over the process/prefixed articles and do FORMS.
-ARG is the interactive prefix given to the command.  FORMS will be
-executed with point over the summary line of the articles."
-  (let ((articles (make-symbol "gnus-summary-iterate-articles")))
-    `(let ((,articles (gnus-summary-work-articles ,arg)))
-       (while ,articles
-        (gnus-summary-goto-subject (car ,articles))
-        ,@forms))))
-
-(put 'gnus-summary-iterate 'lisp-indent-function 1)
-(put 'gnus-summary-iterate 'edebug-form-spec '(form body))
-
 (defun gnus-summary-save-process-mark ()
   "Push the current set of process marked articles on the stack."
   (interactive)
@@ -4953,9 +4801,7 @@ displayed, no centering will be performed."
   ;; Recenter only when requested.  Suggested by popovich@park.cs.columbia.edu.
   (let* ((top (cond ((< (window-height) 4) 0)
                    ((< (window-height) 7) 1)
-                   (t (if (numberp gnus-auto-center-summary)
-                          gnus-auto-center-summary
-                        2))))
+                   (t 2)))
         (height (1- (window-height)))
         (bottom (save-excursion (goto-char (point-max))
                                 (forward-line (- height))
@@ -5011,12 +4857,12 @@ displayed, no centering will be performed."
       ;; first unread article is the article after the last read
       ;; article.  Sounds logical, doesn't it?
       (if (not (listp (cdr read)))
-         (setq first (max (car active) (1+ (cdr read))))
+         (setq first (1+ (cdr read)))
        ;; `read' is a list of ranges.
        (when (/= (setq nlast (or (and (numberp (car read)) (car read))
                                  (caar read)))
                  1)
-         (setq first (car active)))
+         (setq first 1))
        (while read
          (when first
            (while (< first nlast)
@@ -5137,7 +4983,7 @@ The prefix argument ALL means to select all articles."
          (gnus-update-read-articles
           group (append gnus-newsgroup-unreads gnus-newsgroup-unselected))
          ;; Set the current article marks.
-         (let ((gnus-newsgroup-scored
+         (let ((gnus-newsgroup-scored 
                 (if (and (not gnus-save-score)
                          (not non-destructive))
                     nil
@@ -5212,10 +5058,6 @@ gnus-exit-group-hook is called with no arguments if that value is non-nil."
     (setq group-point (point))
     (if temporary
        nil                             ;Nothing to do.
-      (when (gnus-buffer-live-p gnus-article-buffer)
-       (save-excursion
-         (set-buffer gnus-article-buffer)
-         (mm-destroy-parts gnus-article-mime-handles)))
       ;; If we have several article buffers, we kill them at exit.
       (unless gnus-single-article-buffer
        (gnus-kill-buffer gnus-article-buffer)
@@ -5240,12 +5082,12 @@ gnus-exit-group-hook is called with no arguments if that value is non-nil."
          (gnus-kill-buffer buf)))
       (setq gnus-current-select-method gnus-select-method)
       (pop-to-buffer gnus-group-buffer)
+      ;; Clear the current group name.
       (if (not quit-config)
          (progn
            (goto-char group-point)
            (gnus-configure-windows 'group 'force))
        (gnus-handle-ephemeral-exit quit-config))
-      ;; Clear the current group name.
       (unless quit-config
        (setq gnus-newsgroup-name nil)))))
 
@@ -5259,12 +5101,7 @@ gnus-exit-group-hook is called with no arguments if that value is non-nil."
              gnus-expert-user
              (gnus-y-or-n-p "Discard changes to this group and exit? "))
       (gnus-async-halt-prefetch)
-      (gnus-run-hooks (delq 'gnus-summary-expire-articles 
-                           (copy-list gnus-summary-prepare-exit-hook)))
-      (when (gnus-buffer-live-p gnus-article-buffer)
-       (save-excursion
-         (set-buffer gnus-article-buffer)
-         (mm-destroy-parts gnus-article-mime-handles)))
+      (gnus-run-hooks 'gnus-summary-prepare-exit-hook)
       ;; If we have several article buffers, we kill them at exit.
       (unless gnus-single-article-buffer
        (gnus-kill-buffer gnus-article-buffer)
@@ -5326,6 +5163,23 @@ The state which existed when entering the ephemeral is reset."
       (gnus-summary-recenter)
       (gnus-summary-position-point))))
 
+(defun gnus-summary-preview-mime-message (arg)
+  "MIME decode and play this message."
+  (interactive "P")
+  (or gnus-show-mime
+      (let ((gnus-break-pages nil)
+           (gnus-show-mime t))
+       (gnus-summary-select-article t t)
+       ))
+  (select-window (get-buffer-window gnus-article-buffer))
+  )
+
+(defun gnus-summary-scroll-down ()
+  "Scroll down one line current article."
+  (interactive)
+  (gnus-summary-scroll-up -1)
+  )
+
 ;;; Dead summaries.
 
 (defvar gnus-dead-summary-mode-map nil)
@@ -5895,12 +5749,6 @@ Argument LINES specifies lines to be scrolled up (or down if negative)."
   (gnus-summary-recenter)
   (gnus-summary-position-point))
 
-(defun gnus-summary-scroll-down (lines)
-  "Scroll down (or up) one line current article.
-Argument LINES specifies lines to be scrolled down (or up if negative)."
-  (interactive "p")
-  (gnus-summary-scroll-up (- lines)))
-
 (defun gnus-summary-next-same-subject ()
   "Select next article which has the same subject as current one."
   (interactive)
@@ -5932,25 +5780,15 @@ Return nil if there are no unread articles."
        (gnus-summary-display-article (gnus-summary-article-number)))
     (gnus-summary-position-point)))
 
-(defun gnus-summary-first-unread-subject ()
-  "Place the point on the subject line of the first unread article.
-Return nil if there are no unread articles."
-  (interactive)
-  (prog1
-      (when (gnus-summary-first-subject t)
-       (gnus-summary-show-thread)
-       (gnus-summary-first-subject t))
-    (gnus-summary-position-point)))
-
 (defun gnus-summary-first-article ()
   "Select the first article.
 Return nil if there are no articles."
   (interactive)
   (prog1
       (when (gnus-summary-first-subject)
-       (gnus-summary-show-thread)
-       (gnus-summary-first-subject)
-       (gnus-summary-display-article (gnus-summary-article-number)))
+      (gnus-summary-show-thread)
+      (gnus-summary-first-subject)
+      (gnus-summary-display-article (gnus-summary-article-number)))
     (gnus-summary-position-point)))
 
 (defun gnus-summary-best-unread-article ()
@@ -6075,13 +5913,13 @@ articles that are younger than AGE days."
   (interactive "nTime in days: \nP")
   (prog1
       (let ((data gnus-newsgroup-data)
-           (cutoff (days-to-time age))
+           (cutoff (nnmail-days-to-time age))
            articles d date is-younger)
        (while (setq d (pop data))
          (when (and (vectorp (gnus-data-header d))
                     (setq date (mail-header-date (gnus-data-header d))))
-           (setq is-younger (time-less-p
-                             (time-since (date-to-time date))
+           (setq is-younger (nnmail-time-less
+                             (nnmail-time-since (nnmail-date-to-time date))
                              cutoff))
            (when (if younger-p
                      is-younger
@@ -6221,8 +6059,7 @@ If ALL, mark even excluded ticked and dormants as read."
                    '<)
                   (sort gnus-newsgroup-limit '<)))
        article)
-    (setq gnus-newsgroup-unreads
-         (gnus-intersection gnus-newsgroup-unreads gnus-newsgroup-limit))
+    (setq gnus-newsgroup-unreads gnus-newsgroup-limit)
     (if all
        (setq gnus-newsgroup-dormant nil
              gnus-newsgroup-marked nil
@@ -6270,7 +6107,6 @@ If ALL, mark even excluded ticked and dormants as read."
       ;; after the current one.
       (goto-char (point-max))
       (gnus-summary-find-prev))
-    (gnus-set-mode-line 'summary)
     ;; We return how many articles were removed from the summary
     ;; buffer as a result of the new limit.
     (- total (length gnus-newsgroup-data))))
@@ -6286,7 +6122,7 @@ If ALL, mark even excluded ticked and dormants as read."
 (defsubst gnus-cut-thread (thread)
   "Go forwards in the thread until we find an article that we want to display."
   (when (or (eq gnus-fetch-old-headers 'some)
-           (eq gnus-fetch-old-headers 'invisible)
+           (eq gnus-fetch-old-headers 'invisible)          
            (eq gnus-build-sparse-threads 'some)
            (eq gnus-build-sparse-threads 'more))
     ;; Deal with old-fetched headers and sparse threads.
@@ -6520,7 +6356,8 @@ of what's specified by the `gnus-refer-thread-limit' variable."
   (interactive "P")
   (let ((id (mail-header-id (gnus-summary-article-header)))
        (limit (if limit (prefix-numeric-value limit)
-                gnus-refer-thread-limit)))
+                gnus-refer-thread-limit))
+       fmethod root)
     ;; We want to fetch LIMIT *old* headers, but we also have to
     ;; re-fetch all the headers in the current buffer, because many of
     ;; them may be undisplayed.  So we adjust LIMIT.
@@ -6555,7 +6392,8 @@ or `gnus-select-method', no matter what backend the article comes from."
                        (gnus-summary-article-sparse-p
                         (mail-header-number header))
                        (memq (mail-header-number header)
-                             gnus-newsgroup-limit))))
+                             gnus-newsgroup-limit)))
+          h)
       (cond
        ;; If the article is present in the buffer we just go to it.
        ((and header
@@ -6654,7 +6492,7 @@ Obeys the standard process/prefix convention."
       (gnus-summary-remove-process-mark article)
       (when (gnus-summary-display-article article)
        (save-excursion
-         (with-temp-buffer
+         (nnheader-temp-write nil
            (insert-buffer-substring gnus-original-article-buffer)
            ;; Remove some headers that may lead nndoc to make
            ;; the wrong guess.
@@ -6734,7 +6572,6 @@ Optional argument BACKWARD means do search for backward.
   ;; 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)
   (let ((gnus-select-article-hook nil) ;Disable hook.
        (gnus-article-display-hook nil)
        (gnus-mark-article-hook nil)    ;Inhibit marking as read.
@@ -6742,7 +6579,6 @@ Optional argument BACKWARD means do search for backward.
        (gnus-xmas-force-redisplay nil) ;Inhibit XEmacs redisplay.
        (gnus-use-trees nil)            ;Inhibit updating tree buffer.
        (sum (current-buffer))
-       (gnus-display-mime-function nil)
        (found nil)
        point)
     (gnus-save-hidden-threads
@@ -6890,14 +6726,14 @@ to save in."
              (set-buffer buffer)
              (gnus-article-delete-invisible-text)
              (let ((ps-left-header
-                    (list
+                    (list 
                      (concat "("
                              (mail-header-subject gnus-current-headers) ")")
                      (concat "("
                              (mail-header-from gnus-current-headers) ")")))
-                   (ps-right-header
-                    (list
-                     "/pagenumberstring load"
+                   (ps-right-header 
+                    (list 
+                     "/pagenumberstring load" 
                      (concat "("
                              (mail-header-date gnus-current-headers) ")"))))
                (gnus-run-hooks 'gnus-ps-print-hook)
@@ -6917,9 +6753,8 @@ article massaging functions being run."
     (let ((gnus-have-all-headers t)
          gnus-article-display-hook
          gnus-article-prepare-hook
-         gnus-article-decode-hook
-         gnus-display-mime-function
          gnus-break-pages
+         gnus-show-mime
          gnus-visual)
       (gnus-summary-select-article nil 'force)))
   (gnus-summary-goto-subject gnus-current-article)
@@ -6970,6 +6805,15 @@ If ARG is a negative number, hide the unwanted header lines."
   (interactive)
   (gnus-article-show-all-headers))
 
+(defun gnus-summary-toggle-mime (&optional arg)
+  "Toggle MIME processing.
+If ARG is a positive number, turn MIME processing on."
+  (interactive "P")
+  (setq gnus-show-mime
+       (if (null arg) (not gnus-show-mime)
+         (> (prefix-numeric-value arg) 0)))
+  (gnus-summary-select-article t 'force))
+
 (defun gnus-summary-caesar-message (&optional arg)
   "Caesar rotate the current article by 13.
 The numerical prefix specifies how many places to rotate each letter
@@ -7081,7 +6925,7 @@ and `request-accept' functions."
           (set-buffer copy-buf)
           (when (gnus-request-article-this-buffer article gnus-newsgroup-name)
             (gnus-request-accept-article
-             to-newsgroup select-method (not articles) t))))
+             to-newsgroup select-method (not articles)))))
        ;; Crosspost the article.
        ((eq action 'crosspost)
         (let ((xref (message-tokenize-header
@@ -7121,10 +6965,15 @@ and `request-accept' functions."
        (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))
-              (entry
-               (gnus-gethash pto-group gnus-newsrc-hashtb))
+       (let* ((entry
+               (or
+                (gnus-gethash (car art-group) gnus-newsrc-hashtb)
+                (gnus-gethash
+                 (gnus-group-prefixed-name
+                  (car art-group)
+                  (or select-method
+                      (gnus-find-method-for-group to-newsgroup)))
+                 gnus-newsrc-hashtb)))
               (info (nth 2 entry))
               (to-group (gnus-info-group info)))
          ;; Update the group that has been moved to.
@@ -7195,7 +7044,7 @@ and `request-accept' functions."
 
        ;;;!!!Why is this necessary?
        (set-buffer gnus-summary-buffer)
-
+       
        (gnus-summary-goto-subject article)
        (when (eq action 'move)
          (gnus-summary-mark-article article gnus-canceled-mark))))
@@ -7228,7 +7077,7 @@ re-spool using this method."
 (defcustom gnus-summary-respool-default-method nil
   "Default method for respooling an article.
 If nil, use to the current newsgroup method."
-  :type '(choice (gnus-select-method :value (nnml ""))
+  :type `(choice (gnus-select-method :value (nnml ""))
                 (const nil))
   :group 'gnus-summary-mail)
 
@@ -7288,9 +7137,10 @@ latter case, they will be copied into the relevant groups."
        (not (file-regular-p file))
        (error "Can't read %s" file))
     (save-excursion
-      (set-buffer (gnus-get-buffer-create " *import file*"))
+      (set-buffer (get-buffer-create " *import file*"))
+      (buffer-disable-undo (current-buffer))
       (erase-buffer)
-      (insert-file-contents file)
+      (nnheader-insert-file-contents file)
       (goto-char (point-min))
       (unless (nnheader-article-p)
        ;; This doesn't look like an article, so we fudge some headers.
@@ -7298,7 +7148,10 @@ latter case, they will be copied into the relevant groups."
              lines (count-lines (point-min) (point-max)))
        (insert "From: " (read-string "From: ") "\n"
                "Subject: " (read-string "Subject: ") "\n"
-               "Date: " (message-make-date (nth 5 atts))
+               "Date: " (timezone-make-date-arpa-standard
+                         (current-time-string (nth 5 atts))
+                         (current-time-zone now)
+                         (current-time-zone now))
                "\n"
                "Message-ID: " (message-make-message-id) "\n"
                "Lines: " (int-to-string lines) "\n"
@@ -7449,13 +7302,12 @@ groups."
   (interactive)
   ;; Replace the article.
   (let ((buf (current-buffer)))
-    (with-temp-buffer
+    (nnheader-temp-write nil
       (insert-buffer buf)
       (if (and (not read-only)
               (not (gnus-request-replace-article
                     (cdr gnus-article-current) (car gnus-article-current)
-                    (current-buffer)
-                    (not gnus-article-decoded-p))))
+                    (current-buffer))))
          (error "Couldn't replace article")
        ;; Update the summary buffer.
        (if (and references
@@ -7468,7 +7320,7 @@ groups."
                (message-narrow-to-head)
                (let ((head (buffer-string))
                      header)
-                 (with-temp-buffer
+                 (nnheader-temp-write nil
                    (insert (format "211 %d Article retrieved.\n"
                                    (cdr gnus-article-current)))
                    (insert head)
@@ -7516,7 +7368,7 @@ groups."
 
 ;;; Respooling
 
-(defun gnus-summary-respool-query (&optional silent trace)
+(defun gnus-summary-respool-query (&optional silent)
   "Query where the respool algorithm would put this article."
   (interactive)
   (let (gnus-mark-article-hook)
@@ -7525,7 +7377,7 @@ groups."
       (set-buffer gnus-original-article-buffer)
       (save-restriction
        (message-narrow-to-head)
-       (let ((groups (nnmail-article-group 'identity trace)))
+       (let ((groups (nnmail-article-group 'identity)))
          (unless silent
            (if groups
                (message "This message would go to %s"
@@ -7533,12 +7385,6 @@ groups."
              (message "This message would go to no groups"))
            groups))))))
 
-(defun gnus-summary-respool-trace ()
-  "Trace where the respool algorithm would put this article.
-Display a buffer showing all fancy splitting patterns which matched."
-  (interactive)
-  (gnus-summary-respool-query nil t))
-
 ;; Summary marking commands.
 
 (defun gnus-summary-kill-same-subject-and-select (&optional unmark)
@@ -7656,7 +7502,7 @@ the actual number of articles marked is returned."
   "Mark ARTICLE replied and update the summary line."
   (push article gnus-newsgroup-replied)
   (let ((buffer-read-only nil))
-    (when (gnus-summary-goto-subject article nil t)
+    (when (gnus-summary-goto-subject article)
       (gnus-summary-update-secondary-mark article))))
 
 (defun gnus-summary-set-bookmark (article)
@@ -7715,7 +7561,6 @@ the actual number of articles marked is returned."
              (delq article gnus-newsgroup-processable)))
   (when (gnus-summary-goto-subject article)
     (gnus-summary-show-thread)
-    (gnus-summary-goto-subject article)
     (gnus-summary-update-secondary-mark article)))
 
 (defun gnus-summary-remove-process-mark (article)
@@ -7723,7 +7568,6 @@ the actual number of articles marked is returned."
   (setq gnus-newsgroup-processable (delq article gnus-newsgroup-processable))
   (when (gnus-summary-goto-subject article)
     (gnus-summary-show-thread)
-    (gnus-summary-goto-subject article)
     (gnus-summary-update-secondary-mark article)))
 
 (defun gnus-summary-set-saved-mark (article)
@@ -7738,7 +7582,6 @@ 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."
   (interactive "p")
-  (gnus-summary-show-thread)
   (let ((backward (< n 0))
        (gnus-summary-goto-unread
         (and gnus-summary-goto-unread
@@ -7782,8 +7625,6 @@ returned."
                   (= mark gnus-read-mark) (= mark gnus-souped-mark)
                   (= mark gnus-duplicate-mark)))
       (setq mark gnus-expirable-mark)
-      ;; Let the backend know about the mark change.
-      (setq mark (gnus-request-update-mark gnus-newsgroup-name article mark))
       (push article gnus-newsgroup-expirable))
     ;; Set the mark in the buffer.
     (gnus-summary-update-mark mark 'unread)
@@ -7793,8 +7634,6 @@ returned."
   "Mark the current article quickly as unread with MARK."
   (let* ((article (gnus-summary-article-number))
         (old-mark (gnus-summary-article-mark article)))
-    ;; Allow the backend to change the mark.
-    (setq mark (gnus-request-update-mark gnus-newsgroup-name article mark))
     (if (eq mark old-mark)
        t
       (if (<= article 0)
@@ -7850,8 +7689,6 @@ marked."
   (let* ((mark (or mark gnus-del-mark))
         (article (or article (gnus-summary-article-number)))
         (old-mark (gnus-summary-article-mark article)))
-    ;; Allow the backend to change the mark.
-    (setq mark (gnus-request-update-mark gnus-newsgroup-name article mark))
     (if (eq mark old-mark)
        t
       (unless article
@@ -7901,19 +7738,19 @@ marked."
   (let ((forward (cdr (assq type gnus-summary-mark-positions)))
         (buffer-read-only nil))
     (re-search-backward "[\n\r]" (gnus-point-at-bol) 'move-to-limit)
-    (when forward
-      (when (looking-at "\r")
-       (incf forward))
-      (when (<= (+ forward (point)) (point-max))
-       ;; Go to the right position on the line.
-       (goto-char (+ forward (point)))
-       ;; Replace the old mark with the new mark.
-       (subst-char-in-region (point) (1+ (point)) (char-after) mark)
-       ;; Optionally update the marks by some user rule.
-       (when (eq type 'unread)
-         (gnus-data-set-mark
-          (gnus-data-find (gnus-summary-article-number)) mark)
-         (gnus-summary-update-line (eq mark gnus-unread-mark)))))))
+    (when (looking-at "\r")
+      (incf forward))
+    (when (and forward
+               (<= (+ forward (point)) (point-max)))
+      ;; Go to the right position on the line.
+      (goto-char (+ forward (point)))
+      ;; Replace the old mark with the new mark.
+      (subst-char-in-region (point) (1+ (point)) (following-char) mark)
+      ;; Optionally update the marks by some user rule.
+      (when (eq type 'unread)
+        (gnus-data-set-mark
+         (gnus-data-find (gnus-summary-article-number)) mark)
+        (gnus-summary-update-line (eq mark gnus-unread-mark))))))
 
 (defun gnus-mark-article-as-read (article &optional mark)
   "Enter ARTICLE in the pertinent lists and remove it from others."
@@ -8289,7 +8126,7 @@ is non-nil or the Subject: of both articles are the same."
          (gnus-summary-select-article t t nil current-article))
        (set-buffer gnus-original-article-buffer)
        (let ((buf (format "%s" (buffer-string))))
-         (with-temp-buffer
+         (nnheader-temp-write nil
            (insert buf)
            (goto-char (point-min))
            (if (re-search-forward "^References: " nil t)
@@ -8632,7 +8469,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")
-  (let ((gnus-default-article-saver 'rmail-output-to-rmail-file))
+  (let ((gnus-default-article-saver 'gnus-summary-save-in-rmail))
     (gnus-summary-save-article arg)))
 
 (defun gnus-summary-save-article-file (&optional arg)
@@ -8669,7 +8506,8 @@ save those articles instead."
   "Pipe the current article through PROGRAM."
   (interactive "sProgram: ")
   (gnus-summary-select-article)
-  (let ((mail-header-separator ""))
+  (let ((mail-header-separator "")
+        (art-buf (get-buffer gnus-article-buffer)))
     (gnus-eval-in-buffer-window gnus-article-buffer
       (save-restriction
         (widen)
@@ -8717,7 +8555,6 @@ save those articles instead."
 (defun gnus-valid-move-group-p (group)
   (and (boundp group)
        (symbol-name group)
-       (symbol-value group)
        (memq 'respool
             (assoc (symbol-name
                     (car (gnus-find-method-for-group
@@ -8808,7 +8645,7 @@ save those articles instead."
                                (lambda (f)
                                  (if (equal f " ")
                                      f
-                                   (mm-quote-arg f)))
+                                   (gnus-quote-arg-for-sh-or-csh f)))
                                files " ")))))
          (setq ps (cdr ps)))))
     (if (and gnus-view-pseudos (not not-view))
@@ -9052,9 +8889,8 @@ save those articles instead."
        (setq unread (cdr unread)))
       (when (<= prev (cdr active))
        (push (cons prev (cdr active)) read))
-      (setq read (if (> (length read) 1) (nreverse read) read))
       (if compute
-         read
+         (if (> (length read) 1) (nreverse read) read)
        (save-excursion
          (set-buffer gnus-group-buffer)
          (gnus-undo-register
@@ -9064,7 +8900,8 @@ save those articles instead."
               (gnus-get-unread-articles-in-group ',info (gnus-active ,group))
               (gnus-group-update-group ,group t))))
        ;; Enter this list into the group info.
-       (gnus-info-set-read info read)
+       (gnus-info-set-read
+        info (if (> (length read) 1) (nreverse read) read))
        ;; Set the number of unread articles in gnus-newsrc-hashtb.
        (gnus-get-unread-articles-in-group info (gnus-active group))
        t))))
@@ -9097,6 +8934,38 @@ save those articles instead."
           (gnus-summary-exit))
         buffers)))))
 
+
+;;; @ for mime-partial
+;;;
+
+(defun gnus-request-partial-message ()
+  (save-excursion
+    (let ((number (gnus-summary-article-number))
+         (group gnus-newsgroup-name)
+         (mother gnus-article-buffer))
+      (set-buffer (get-buffer-create " *Partial Article*"))
+      (erase-buffer)
+      (setq mime-preview-buffer mother)
+      (gnus-request-article-this-buffer number group)
+      (mime-parse-buffer)
+      )))
+
+(autoload 'mime-combine-message/partial-pieces-automatically
+  "mime-partial"
+  "Internal method to combine message/partial messages automatically.")
+
+(mime-add-condition
+ 'action '((type . message)(subtype . partial)
+          (major-mode . gnus-original-article-mode)
+          (method . mime-combine-message/partial-pieces-automatically)
+          (summary-buffer-exp . gnus-summary-buffer)
+          (request-partial-message-method . gnus-request-partial-message)
+          ))
+
+
+;;; @ end
+;;;
+
 (gnus-ems-redefine)
 
 (provide 'gnus-sum)
index c3dd816..6880f63 100644 (file)
@@ -74,7 +74,6 @@ with some simple extensions.
 
 (defvar gnus-topic-active-topology nil)
 (defvar gnus-topic-active-alist nil)
-(defvar gnus-topic-unreads nil)
 
 (defvar gnus-topology-checked-p nil
   "Whether the topology has been checked in this session.")
@@ -110,7 +109,9 @@ with some simple extensions.
 
 (defun gnus-topic-unread (topic)
   "Return the number of unread articles in TOPIC."
-  (or (cdr (assoc topic gnus-topic-unreads))
+  (or (save-excursion
+       (and (gnus-topic-goto-topic topic)
+            (gnus-group-topic-unread)))
       0))
 
 (defun gnus-group-topic-p ()
@@ -444,8 +445,7 @@ articles in the topic and its subtopics."
        (if (stringp entry)
            ;; Dead groups.
            (gnus-group-insert-group-line
-            entry (if (member entry gnus-zombie-list)
-                      gnus-level-zombie gnus-level-killed)
+            entry (if (member entry gnus-zombie-list) gnus-level-zombie gnus-level-killed)
             nil (- (1+ (cdr (setq active (gnus-active entry))))
                    (car active))
             nil)
@@ -472,7 +472,6 @@ articles in the topic and its subtopics."
        (car type) visiblep
        (not (eq (nth 2 type) 'hidden))
        level all-entries unread))
-    (gnus-topic-update-unreads (car type) unread)
     (goto-char end)
     unread))
 
@@ -529,7 +528,6 @@ articles in the topic and its subtopics."
         (number-of-groups (length entries))
         (active-topic (eq gnus-topic-alist gnus-topic-active-alist))
         gnus-tmp-header)
-    (gnus-topic-update-unreads name unread)
     (beginning-of-line)
     ;; Insert the text.
     (gnus-add-text-properties
@@ -542,11 +540,6 @@ articles in the topic and its subtopics."
           '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)
-                                gnus-topic-unreads))
-  (push (cons topic unreads) gnus-topic-unreads))
-
 (defun gnus-topic-update-topics-containing-group (group)
   "Update all topics that have GROUP as a member."
   (when (and (eq major-mode 'gnus-group-mode)
@@ -628,7 +621,7 @@ articles in the topic and its subtopics."
         (parent (gnus-topic-parent-topic topic-name))
         (all-entries entries)
         (unread 0)
-        old-unread entry new-unread)
+        old-unread entry)
     (when (gnus-topic-goto-topic (car type))
       ;; Tally all the groups that belong in this topic.
       (if reads
@@ -644,14 +637,11 @@ articles in the topic and its subtopics."
        (car type) (gnus-topic-visible-p)
        (not (eq (nth 2 type) 'hidden))
        (gnus-group-topic-level) all-entries unread)
-      (gnus-delete-line)
-      (forward-line -1)
-      (setq new-unread (gnus-group-topic-unread)))
+      (gnus-delete-line))
     (when parent
       (forward-line -1)
       (gnus-topic-update-topic-line
-       parent
-       (- (or old-unread 0) (or new-unread 0))))
+       parent (- (or old-unread 0) (or (gnus-group-topic-unread) 0))))
     unread))
 
 (defun gnus-topic-group-indentation ()
@@ -914,10 +904,6 @@ articles in the topic and its subtopics."
     "Gp" gnus-topic-edit-parameters
     "#" gnus-topic-mark-topic
     "\M-#" gnus-topic-unmark-topic
-    [tab] gnus-topic-indent
-    [(meta tab)] gnus-topic-unindent
-    "\C-i" gnus-topic-indent
-    "\M-\C-i" gnus-topic-unindent
     gnus-mouse-2 gnus-mouse-pick-topic)
 
   ;; Define a new submap.
@@ -937,7 +923,7 @@ articles in the topic and its subtopics."
     "r" gnus-topic-rename
     "\177" gnus-topic-delete
     [delete] gnus-topic-delete
-    "H" gnus-topic-toggle-display-empty-topics)
+    "h" gnus-topic-toggle-display-empty-topics)
 
   (gnus-define-keys (gnus-topic-sort-map "S" gnus-group-topic-map)
     "s" gnus-topic-sort-groups
@@ -987,6 +973,7 @@ articles in the topic and its subtopics."
        (gnus-topic-make-menu-bar))
       (gnus-set-format 'topic t)
       (gnus-add-minor-mode 'gnus-topic-mode " Topic" gnus-topic-mode-map)
+      (add-hook 'gnus-summary-exit-hook 'gnus-topic-update-topic)
       (add-hook 'gnus-group-catchup-group-hook 'gnus-topic-update-topic)
       (set (make-local-variable 'gnus-group-prepare-function)
           'gnus-group-prepare-topics)
index 29052c6..82e7f94 100644 (file)
@@ -1,8 +1,8 @@
-;;; gnus-util.el --- utility functions for Gnus
+;;; gnus-util.el --- utility functions for Semi-gnus
 ;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: news
+;; Keywords: mail, news, MIME
 
 ;; This file is part of GNU Emacs.
 
 (require 'custom)
 (eval-when-compile (require 'cl))
 (require 'nnheader)
+(require 'timezone)
 (require 'message)
-(require 'time-date)
 
 (eval-and-compile
+  (autoload 'nnmail-date-to-time "nnmail")
   (autoload 'rmail-insert-rmail-file-header "rmail")
   (autoload 'rmail-count-new-messages "rmail")
   (autoload 'rmail-show-message "rmail"))
@@ -74,6 +75,9 @@
         (set symbol nil))
      symbol))
 
+(defun gnus-truncate-string (str width)
+  (substring str 0 width))
+
 ;; Added by Geoffrey T. Dairiki <dairiki@u.washington.edu>.  A safe way
 ;; to limit the length of a string.  This function is necessary since
 ;; `(substr "abc" 0 30)' pukes with "Args out of range".
      (when (gnus-buffer-exists-p buf)
        (kill-buffer buf))))
 
-(fset 'gnus-point-at-bol
-      (if (fboundp 'point-at-bol)
-         'point-at-bol
-       'line-beginning-position))
-
-(fset 'gnus-point-at-eol
-      (if (fboundp 'point-at-eol)
-         'point-at-eol
-       'line-end-position))
+(if (fboundp 'point-at-bol)
+    (fset 'gnus-point-at-bol 'point-at-bol)
+  (defun gnus-point-at-bol ()
+    "Return point at the beginning of the line."
+    (let ((p (point)))
+      (beginning-of-line)
+      (prog1
+         (point)
+       (goto-char p)))))
+
+(if (fboundp 'point-at-eol)
+    (fset 'gnus-point-at-eol 'point-at-eol)
+  (defun gnus-point-at-eol ()
+    "Return point at the end of the line."
+    (let ((p (point)))
+      (end-of-line)
+      (prog1
+         (point)
+       (goto-char p)))))
 
 (defun gnus-delete-first (elt list)
   "Delete by side effect the first occurrence of ELT as a member of LIST."
 
 ;;; Time functions.
 
+(defun gnus-days-between (date1 date2)
+  ;; Return the number of days between date1 and date2.
+  (- (gnus-day-number date1) (gnus-day-number date2)))
+
+(defun gnus-day-number (date)
+  (let ((dat (mapcar (lambda (s) (and s (string-to-int s)) )
+                    (timezone-parse-date date))))
+    (timezone-absolute-from-gregorian
+     (nth 1 dat) (nth 2 dat) (car dat))))
+
+(defun gnus-time-to-day (time)
+  "Convert TIME to day number."
+  (let ((tim (decode-time time)))
+    (timezone-absolute-from-gregorian
+     (nth 4 tim) (nth 3 tim) (nth 5 tim))))
+
+(defun gnus-encode-date (date)
+  "Convert DATE to internal time."
+  (let* ((parse (timezone-parse-date date))
+        (date (mapcar (lambda (d) (and d (string-to-int d))) parse))
+        (time (mapcar 'string-to-int (timezone-parse-time (aref parse 3)))))
+    (encode-time (caddr time) (cadr time) (car time)
+                (caddr date) (cadr date) (car date)
+                (* 60 (timezone-zone-to-minute (nth 4 date))))))
+
+(defun gnus-time-minus (t1 t2)
+  "Subtract two internal times."
+  (let ((borrow (< (cadr t1) (cadr t2))))
+    (list (- (car t1) (car t2) (if borrow 1 0))
+         (- (+ (if borrow 65536 0) (cadr t1)) (cadr t2)))))
+
+(defun gnus-time-less (t1 t2)
+  "Say whether time T1 is less than time T2."
+  (or (< (car t1) (car t2))
+      (and (= (car t1) (car t2))
+          (< (nth 1 t1) (nth 1 t2)))))
+
 (defun gnus-file-newer-than (file date)
   (let ((fdate (nth 5 (file-attributes file))))
     (or (> (car fdate) (car date))
 
 (defun gnus-dd-mmm (messy-date)
   "Return a string like DD-MMM from a big messy string."
-  (format-time-string "%d-%b" (safe-date-to-time messy-date)))
+  (let ((datevec (ignore-errors (timezone-parse-date messy-date))))
+    (if (or (not datevec)
+           (string-equal "0" (aref datevec 1)))
+       "??-???"
+      (format "%2s-%s"
+             (condition-case ()
+                 ;; Make sure leading zeroes are stripped.
+                 (number-to-string (string-to-number (aref datevec 2)))
+               (error "??"))
+             (capitalize
+              (or (car
+                   (nth (1- (string-to-number (aref datevec 1)))
+                        timezone-months-assoc))
+                  "???"))))))
 
 (defmacro gnus-date-get-time (date)
   "Convert DATE string to Emacs time.
@@ -302,7 +366,7 @@ Cache the result as a text property stored in DATE."
         '(0 0)
        (or (get-text-property 0 'gnus-time d)
           ;; or compute the value...
-          (let ((time (safe-date-to-time d)))
+          (let ((time (nnmail-date-to-time d)))
             ;; and store it back in the string.
             (put-text-property 0 1 'gnus-time time d)
             time)))))
@@ -386,7 +450,7 @@ jabbering all the time."
            ids))
     (nreverse ids)))
 
-(defsubst gnus-parent-id (references &optional n)
+(defun gnus-parent-id (references &optional n)
   "Return the last Message-ID in REFERENCES.
 If N, return the Nth ancestor instead."
   (when references
@@ -433,8 +497,20 @@ If N, return the Nth ancestor instead."
     (cons (and (numberp event) event) event)))
 
 (defun gnus-sortable-date (date)
-  "Make string suitable for sorting from DATE."
-  (gnus-time-iso8601 (date-to-time date)))
+  "Make sortable string by string-lessp from DATE.
+Timezone package is used."
+  (condition-case ()
+      (progn
+       (setq date (inline (timezone-fix-time
+                           date nil
+                           (aref (inline (timezone-parse-date date)) 4))))
+       (inline
+         (timezone-make-sortable-date
+          (aref date 0) (aref date 1) (aref date 2)
+          (inline
+            (timezone-make-time-string
+             (aref date 3) (aref date 4) (aref date 5))))))
+    (error "")))
 
 (defun gnus-copy-file (file &optional to)
   "Copy FILE to TO."
@@ -464,9 +540,9 @@ If N, return the Nth ancestor instead."
       (progn
        (set-buffer gnus-work-buffer)
        (erase-buffer))
-    (set-buffer (gnus-get-buffer-create gnus-work-buffer))
+    (set-buffer (get-buffer-create gnus-work-buffer))
     (kill-all-local-variables)
-    (mm-enable-multibyte)))
+    (buffer-disable-undo (current-buffer))))
 
 (defmacro gnus-group-real-name (group)
   "Find the real name of a foreign newsgroup."
@@ -478,35 +554,21 @@ If N, return the Nth ancestor instead."
 (defun gnus-make-sort-function (funs)
   "Return a composite sort condition based on the functions in FUNC."
   (cond
-   ;; Just a simple function.
-   ((gnus-functionp funs) funs)
-   ;; No functions at all.
+   ((not (listp funs)) funs)
    ((null funs) funs)
-   ;; A list of functions.
-   ((or (cdr funs)
-       (listp (car funs)))
+   ((cdr funs)
     `(lambda (t1 t2)
        ,(gnus-make-sort-function-1 (reverse funs))))
-   ;; A list containing just one function.
    (t
     (car funs))))
 
 (defun gnus-make-sort-function-1 (funs)
   "Return a composite sort condition based on the functions in FUNC."
-  (let ((function (car funs))
-       (first 't1)
-       (last 't2))
-    (when (consp function)
-      (if (eq (car function) 'not)
-         (setq function (cadr function)
-               first 't2
-               last 't1)
-       (error "Invalid sort spec: %s" function)))
-    (if (cdr funs)
-       `(or (,function ,first ,last)
-            (and (not (,function ,last ,first))
-                 ,(gnus-make-sort-function-1 (cdr funs))))
-      `(,function ,first ,last))))
+  (if (cdr funs)
+      `(or (,(car funs) t1 t2)
+          (and (not (,(car funs) t2 t1))
+               ,(gnus-make-sort-function-1 (cdr funs))))
+    `(,(car funs) t1 t2)))
 
 (defun gnus-turn-off-edit-menu (type)
   "Turn off edit menu in `gnus-TYPE-mode-map'."
@@ -518,7 +580,6 @@ If N, return the Nth ancestor instead."
 Bind `print-quoted' and `print-readably' to t while printing."
   (let ((print-quoted t)
        (print-readably t)
-       (print-escape-multibyte nil)
        print-level print-length)
     (prin1 form (current-buffer))))
 
@@ -553,7 +614,7 @@ Bind `print-quoted' and `print-readably' to t while printing."
     (setq string (replace-match "" t t string)))
   string)
 
-(defsubst gnus-put-text-property-excluding-newlines (beg end prop val)
+(defun gnus-put-text-property-excluding-newlines (beg end prop val)
   "The same as `put-text-property', but don't put this prop on any newlines in the region."
   (save-match-data
     (save-excursion
@@ -661,7 +722,8 @@ with potentially long computations."
   (setq filename (expand-file-name filename))
   (setq rmail-default-rmail-file filename)
   (let ((artbuf (current-buffer))
-       (tmpbuf (get-buffer-create " *Gnus-output*")))
+       (tmpbuf (get-buffer-create " *Gnus-output*"))
+       (coding-system-for-write 'binary))
     (save-excursion
       (or (get-file-buffer filename)
          (file-exists-p filename)
@@ -697,12 +759,9 @@ with potentially long computations."
            (when msg
              (goto-char (point-min))
              (widen)
-             (search-backward "\n\^_")
-             (narrow-to-region (point) (point-max))
-             (rmail-count-new-messages t)
-             (when (rmail-summary-exists)
-               (rmail-select-summary
-                (rmail-update-summary)))
+             (search-backward "\^_")
+             (narrow-to-region (point) (point-max))
+             (goto-char (1+ (point-min)))
              (rmail-count-new-messages t)
              (rmail-show-message msg))
            (save-buffer)))))
@@ -723,7 +782,8 @@ with potentially long computations."
            (let ((file-buffer (create-file-buffer filename)))
              (save-excursion
                (set-buffer file-buffer)
-               (let ((require-final-newline nil))
+               (let ((require-final-newline nil)
+                     (coding-system-for-write 'binary))
                  (gnus-write-buffer filename)))
              (kill-buffer file-buffer))
          (error "Output file does not exist")))
@@ -741,7 +801,8 @@ with potentially long computations."
       ;; Decide whether to append to a file or to an Emacs buffer.
       (let ((outbuf (get-file-buffer filename)))
        (if (not outbuf)
-           (let ((buffer-read-only nil))
+           (let ((buffer-read-only nil)
+                 (coding-system-for-write 'binary))
              (save-excursion
                (goto-char (point-max))
                (forward-char -2)
@@ -776,7 +837,8 @@ with potentially long computations."
 (defun gnus-map-function (funs arg)
   "Applies the result of the first function in FUNS to the second, and so on.
 ARG is passed to the first function."
-  (let ((myfuns funs))
+  (let ((myfuns funs)
+        (myarg arg))
     (while myfuns
       (setq arg (funcall (pop myfuns) arg)))
     arg))
@@ -794,7 +856,6 @@ ARG is passed to the first function."
 
 (defvar gnus-netrc-syntax-table
   (let ((table (copy-syntax-table text-mode-syntax-table)))
-    (modify-syntax-entry ?@ "w" table)
     (modify-syntax-entry ?- "w" table)
     (modify-syntax-entry ?_ "w" table)
     (modify-syntax-entry ?! "w" table)
@@ -817,59 +878,50 @@ ARG is passed to the first function."
                      "password" "account" "macdef" "force"))
            alist elem result pair)
        (nnheader-set-temp-buffer " *netrc*")
-       (unwind-protect
-           (progn
-             (set-syntax-table gnus-netrc-syntax-table)
-             (insert-file-contents file)
-             (goto-char (point-min))
-             ;; Go through the file, line by line.
-             (while (not (eobp))
-               (narrow-to-region (point) (gnus-point-at-eol))
-               ;; For each line, get the tokens and values.
-               (while (not (eobp))
-                 (skip-chars-forward "\t ")
-                 (unless (eobp)
-                   (setq elem (buffer-substring
-                               (point) (progn (forward-sexp 1) (point))))
-                   (cond
-                    ((equal elem "macdef")
-                     ;; We skip past the macro definition.
-                     (widen)
-                     (while (and (zerop (forward-line 1))
-                                 (looking-at "$")))
-                     (narrow-to-region (point) (point)))
-                    ((member elem tokens)
-                     ;; Tokens that don't have a following value are ignored,
-                     ;; except "default".
-                     (when (and pair (or (cdr pair)
-                                         (equal (car pair) "default")))
-                       (push pair alist))
-                     (setq pair (list elem)))
-                    (t
-                     ;; Values that haven't got a preceding token are ignored.
-                     (when pair
-                       (setcdr pair elem)
-                       (push pair alist)
-                       (setq pair nil))))))
-               (if alist
-                   (push (nreverse alist) result))
-               (setq alist nil
-                     pair nil)
+       (set-syntax-table gnus-netrc-syntax-table)
+       (insert-file-contents file)
+       (goto-char (point-min))
+       ;; Go through the file, line by line.
+       (while (not (eobp))
+         (narrow-to-region (point) (gnus-point-at-eol))
+         ;; For each line, get the tokens and values.
+         (while (not (eobp))
+           (skip-chars-forward "\t ")
+           (unless (eobp)
+             (setq elem (buffer-substring
+                         (point) (progn (forward-sexp 1) (point))))
+             (cond
+              ((equal elem "macdef")
+               ;; We skip past the macro definition.
                (widen)
-               (forward-line 1))
-             (nreverse result))
-         (kill-buffer " *netrc*"))))))
+               (while (and (zerop (forward-line 1))
+                           (looking-at "$")))
+               (narrow-to-region (point) (point)))
+              ((member elem tokens)
+               ;; Tokens that don't have a following value are ignored.
+               (when (and pair (cdr pair))
+                 (push pair alist))
+               (setq pair (list elem)))
+              (t
+               ;; Values that haven't got a preceding token are ignored.
+               (when pair
+                 (setcdr pair elem)
+                 (push pair alist)
+                 (setq pair nil))))))
+         (push alist result)
+         (setq alist nil
+               pair nil)
+         (widen)
+         (forward-line 1))
+       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)))
-      (pop list))
-    (car (or list
-            (progn (while (and rest (not (assoc "default" (car rest))))
-                     (pop rest))
-                   rest)))))
+  "Return the netrc values from LIST for MACHINE."
+  (while (and list
+             (not (equal (cdr (assoc "machine" (car list))) machine)))
+    (pop list))
+  (when list
+    (car list)))
 
 (defun gnus-netrc-get (alist type)
   "Return the value of token TYPE from ALIST."
@@ -877,7 +929,6 @@ ARG is passed to the first function."
 
 ;;; Various
 
-(defvar gnus-group-buffer) ; Compiler directive
 (defun gnus-alive-p ()
   "Say whether Gnus is running or not."
   (and (boundp 'gnus-group-buffer)
@@ -898,7 +949,7 @@ ARG is passed to the first function."
   "Delete elements from LIST that satisfy PREDICATE."
   (let (out)
     (while list
-      (unless (funcall predicate (car list))
+      (when (funcall predicate (car list))
        (push (car list) out))
       (pop list))
     (nreverse out)))
@@ -910,24 +961,11 @@ ARG is passed to the first function."
       (setq alist (delq entry alist)))
     alist))
 
-(defmacro gnus-pull (key alist &optional assoc-p)
+(defmacro gnus-pull (key alist)
   "Modify ALIST to be without KEY."
   (unless (symbolp alist)
     (error "Not a symbol: %s" alist))
-  (let ((fun (if assoc-p 'assoc 'assq)))
-    `(setq ,alist (delq (,fun ,key ,alist) ,alist))))
-
-(defun gnus-globalify-regexp (re)
-  "Returns a regexp that matches a whole line, iff RE matches a part of it."
-  (concat (unless (string-match "^\\^" re) "^.*")
-         re
-         (unless (string-match "\\$$" re) ".*$")))
-
-(defun gnus-set-window-start (&optional point)
-  "Set the window start to POINT, or (point) if nil."
-  (let ((win (get-buffer-window (current-buffer) t)))
-    (when win
-      (set-window-start win (or point (point))))))
+  `(setq ,alist (delq (assq ,key ,alist) ,alist)))
 
 (provide 'gnus-util)
 
index 19f07a2..3a0bf91 100644 (file)
@@ -32,7 +32,6 @@
 (require 'gnus-art)
 (require 'message)
 (require 'gnus-msg)
-(require 'mm-decode)
 
 (defgroup gnus-extract nil
   "Extracting encoded files."
@@ -514,12 +513,12 @@ 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)
+       buf subject from newsgroups)
     (gnus-setup-message 'forward
       (setq gnus-uu-digest-from-subject nil)
       (gnus-uu-decode-save n file)
-      (setq buf (switch-to-buffer
-                (gnus-get-buffer-create " *gnus-uu-forward*")))
+      (setq buf (switch-to-buffer (get-buffer-create " *gnus-uu-forward*")))
+      (gnus-add-current-to-buffer-list)
       (erase-buffer)
       (insert-file file)
       (let ((fs gnus-uu-digest-from-subject))
@@ -639,7 +638,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
   "Invert the list of process-marked articles."
   (interactive)
   (let ((data gnus-newsgroup-data)
-       number)
+       d number)
     (save-excursion
       (while data
        (if (memq (setq number (gnus-data-number (pop data)))
@@ -829,16 +828,16 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
                  (mail-header-subject header))
            gnus-uu-digest-from-subject))
     (let ((name (file-name-nondirectory gnus-uu-saved-article-name))
+         (delim (concat "^" (make-string 30 ?-) "$"))
          beg subj headers headline sorthead body end-string state)
       (if (or (eq in-state 'first)
              (eq in-state 'first-and-last))
          (progn
            (setq state (list 'begin))
+           (save-excursion (set-buffer (get-buffer-create "*gnus-uu-body*"))
+                           (erase-buffer))
            (save-excursion
-             (set-buffer (gnus-get-buffer-create "*gnus-uu-body*"))
-             (erase-buffer))
-           (save-excursion
-             (set-buffer (gnus-get-buffer-create "*gnus-uu-pre*"))
+             (set-buffer (get-buffer-create "*gnus-uu-pre*"))
              (erase-buffer)
              (insert (format
                       "Date: %s\nFrom: %s\nSubject: %s Digest\n\nTopics:\n"
@@ -971,7 +970,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
        (if (not (re-search-forward gnus-uu-postscript-end-string nil t))
            (setq state (list 'wrong-type))
          (setq end-char (point))
-         (set-buffer (gnus-get-buffer-create gnus-uu-output-buffer-name))
+         (set-buffer (get-buffer-create gnus-uu-output-buffer-name))
          (insert-buffer-substring process-buffer start-char end-char)
          (setq file-name (concat gnus-uu-work-dir
                                  (cdr gnus-article-current) ".ps"))
@@ -1021,36 +1020,45 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
 
 (defun gnus-uu-reginize-string (string)
   ;; Takes a string and puts a \ in front of every special character;
-  ;; replaces the last thing that looks like "2/3" with "[0-9]+/3"
-  ;; or, if it can't find something like that, tries "2 of 3", then
-  ;; finally just replaces the next to last number with "[0-9]+".
-  (save-excursion
-    (set-buffer (gnus-get-buffer-create gnus-uu-output-buffer-name))
-    (buffer-disable-undo)
-    (erase-buffer)
-    (insert (regexp-quote string))
+  ;; ignores any leading "version numbers" thingies that they use in
+  ;; the comp.binaries groups, and either replaces anything that looks
+  ;; like "2/3" with "[0-9]+/[0-9]+" or, if it can't find something
+  ;; like that, replaces the last two numbers with "[0-9]+".  This, in
+  ;; my experience, should get most postings of a series.
+  (let ((count 2)
+       (vernum "v[0-9]+[a-z][0-9]+:")
+       beg)
+    (save-excursion
+      (set-buffer (get-buffer-create gnus-uu-output-buffer-name))
+      (buffer-disable-undo (current-buffer))
+      (erase-buffer)
+      (insert (regexp-quote string))
+      (setq beg 1)
 
-    (setq case-fold-search nil)
+      (setq case-fold-search nil)
+      (goto-char (point-min))
+      (when (looking-at vernum)
+       (replace-match vernum t t)
+       (setq beg (length vernum)))
 
-    (end-of-line)
-    (if (re-search-backward "\\([^0-9]\\)[0-9]+/\\([0-9]+\\)" nil t)
-       (replace-match "\\1[0-9]+/\\2")
+      (goto-char beg)
+      (if (re-search-forward "[ \t]*[0-9]+/[0-9]+" nil t)
+         (replace-match " [0-9]+/[0-9]+")
 
-      (end-of-line)
-      (if (re-search-backward "\\([^0-9]\\)[0-9]+[ \t]*of[ \t]*\\([0-9]+\\)"
-                             nil t)
-         (replace-match "\\1[0-9]+ of \\2")
+       (goto-char beg)
+       (if (re-search-forward "[0-9]+[ \t]*of[ \t]*[0-9]+" nil t)
+           (replace-match "[0-9]+ of [0-9]+")
 
-       (end-of-line)
-       (if (re-search-backward "\\([^0-9]\\)[0-9]+\\([^0-9]+\\)[0-9]+"
-                               nil t)
-           (replace-match "\\1[0-9]+\\2[0-9]+" t nil nil nil))))
+         (end-of-line)
+          (if (re-search-backward "\\([^0-9]\\)[0-9]+\\([^0-9]+\\)[0-9]+"
+                                  nil t)
+              (replace-match "\\1[0-9]+\\2[0-9]+" t nil nil nil))))
 
-    (goto-char 1)
-    (while (re-search-forward "[ \t]+" nil t)
-      (replace-match "[ \t]+" t t))
+      (goto-char beg)
+      (while (re-search-forward "[ \t]+" nil t)
+       (replace-match "[ \t]*" t t))
 
-    (buffer-substring 1 (point-max))))
+      (buffer-substring 1 (point-max)))))
 
 (defun gnus-uu-get-list-of-articles (n)
   ;; If N is non-nil, the article numbers of the N next articles
@@ -1090,7 +1098,8 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
                     (gnus-uu-reginize-string (gnus-summary-article-subject))))
        list-of-subjects)
     (save-excursion
-      (when subject
+      (if (not subject)
+         ()
        ;; Collect all subjects matching subject.
        (let ((case-fold-search t)
              (data gnus-newsgroup-data)
@@ -1125,8 +1134,8 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
   (let ((out-list string-list)
        string)
     (save-excursion
-      (set-buffer (gnus-get-buffer-create gnus-uu-output-buffer-name))
-      (buffer-disable-undo)
+      (set-buffer (get-buffer-create gnus-uu-output-buffer-name))
+      (buffer-disable-undo (current-buffer))
       (while string-list
        (erase-buffer)
        (insert (caar string-list))
@@ -1212,121 +1221,119 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
                    (not (memq 'end process-state))))
 
       (setq article (pop articles))
-      (when (vectorp (gnus-summary-article-header article))
-       (push article article-series)
+      (push article article-series)
 
-       (unless articles
-         (if (eq state 'first)
-             (setq state 'first-and-last)
-           (setq state 'last)))
+      (unless articles
+       (if (eq state 'first)
+           (setq state 'first-and-last)
+         (setq state 'last)))
 
-       (let ((part (gnus-uu-part-number article)))
-         (gnus-message 6 "Getting article %d%s..."
-                       article (if (string= part "") "" (concat ", " part))))
-       (gnus-summary-display-article article)
+      (let ((part (gnus-uu-part-number article)))
+       (gnus-message 6 "Getting article %d%s..."
+                     article (if (string= part "") "" (concat ", " part))))
+      (gnus-summary-display-article article)
 
-       ;; Push the article to the processing function.
-       (save-excursion
-         (set-buffer gnus-original-article-buffer)
-         (let ((buffer-read-only nil))
-           (save-excursion
-             (set-buffer gnus-summary-buffer)
-             (setq process-state
-                   (funcall process-function
-                            gnus-original-article-buffer state)))))
-
-       (gnus-summary-remove-process-mark article)
-
-       ;; If this is the beginning of a decoded file, we push it
-       ;; on to a list.
-       (when (or (memq 'begin process-state)
-                 (and (or (eq state 'first)
-                          (eq state 'first-and-last))
-                      (memq 'ok process-state)))
-         (when has-been-begin
-           ;; If there is a `result-file' here, that means that the
-           ;; file was unsuccessfully decoded, so we delete it.
-           (when (and result-file
-                      (file-exists-p result-file)
-                      (not gnus-uu-be-dangerous)
-                      (or (eq gnus-uu-be-dangerous t)
-                          (gnus-y-or-n-p
-                           (format "Delete unsuccessfully decoded file %s"
-                                   result-file))))
-             (delete-file result-file)))
-         (when (memq 'begin process-state)
-           (setq result-file (car process-state)))
-         (setq has-been-begin t))
-
-       ;; Check whether we have decoded one complete file.
-       (when (memq 'end process-state)
-         (setq article-series nil)
-         (setq has-been-begin nil)
-         (if (stringp result-file)
-             (setq files (list result-file))
-           (setq files result-file))
-         (setq result-file (car files))
-         (while files
-           (push (list (cons 'name (pop files))
-                       (cons 'article article))
-                 result-files))
-         ;; Allow user-defined functions to be run on this file.
-         (when gnus-uu-grabbed-file-functions
-           (let ((funcs gnus-uu-grabbed-file-functions))
-             (unless (listp funcs)
-               (setq funcs (list funcs)))
-             (while funcs
-               (funcall (pop funcs) result-file))))
-         (setq result-file nil)
-         ;; Check whether we have decoded enough articles.
-         (and limit (= (length result-files) limit)
-              (setq articles nil)))
-
-       ;; If this is the last article to be decoded, and
-       ;; we still haven't reached the end, then we delete
-       ;; the partially decoded file.
-       (and (or (eq state 'last) (eq state 'first-and-last))
-            (not (memq 'end process-state))
-            result-file
-            (file-exists-p result-file)
-            (not gnus-uu-be-dangerous)
-            (or (eq gnus-uu-be-dangerous t)
-                (gnus-y-or-n-p
-                 (format "Delete incomplete file %s? " result-file)))
-            (delete-file result-file))
-
-       ;; If this was a file of the wrong sort, then
-       (when (and (or (memq 'wrong-type process-state)
-                      (memq 'error process-state))
-                  gnus-uu-unmark-articles-not-decoded)
-         (gnus-summary-tick-article article t))
-
-       ;; Set the new series state.
-       (if (and (not has-been-begin)
-                (not sloppy)
-                (or (memq 'end process-state)
-                    (memq 'middle process-state)))
-           (progn
-             (setq process-state (list 'error))
-             (gnus-message 2 "No begin part at the beginning")
-             (sleep-for 2))
-         (setq state 'middle)))
-
-      ;; When there are no result-files, then something must be wrong.
-      (if result-files
-         (message "")
-       (cond
-        ((not has-been-begin)
-         (gnus-message 2 "Wrong type file"))
-        ((memq 'error process-state)
-         (gnus-message 2 "An error occurred during decoding"))
-        ((not (or (memq 'ok process-state)
-                  (memq 'end process-state)))
-         (gnus-message 2 "End of articles reached before end of file")))
-       ;; Make unsuccessfully decoded articles unread.
-       (when gnus-uu-unmark-articles-not-decoded
-         (while article-series
-           (gnus-summary-tick-article (pop article-series) t)))))
+      ;; Push the article to the processing function.
+      (save-excursion
+       (set-buffer gnus-original-article-buffer)
+       (let ((buffer-read-only nil))
+         (save-excursion
+           (set-buffer gnus-summary-buffer)
+           (setq process-state
+                 (funcall process-function
+                          gnus-original-article-buffer state)))))
+
+      (gnus-summary-remove-process-mark article)
+
+      ;; If this is the beginning of a decoded file, we push it
+      ;; on to a list.
+      (when (or (memq 'begin process-state)
+               (and (or (eq state 'first)
+                        (eq state 'first-and-last))
+                    (memq 'ok process-state)))
+       (when has-been-begin
+         ;; If there is a `result-file' here, that means that the
+         ;; file was unsuccessfully decoded, so we delete it.
+         (when (and result-file
+                    (file-exists-p result-file)
+                    (not gnus-uu-be-dangerous)
+                    (or (eq gnus-uu-be-dangerous t)
+                        (gnus-y-or-n-p
+                         (format "Delete unsuccessfully decoded file %s"
+                                 result-file))))
+           (delete-file result-file)))
+       (when (memq 'begin process-state)
+         (setq result-file (car process-state)))
+       (setq has-been-begin t))
+
+      ;; Check whether we have decoded one complete file.
+      (when (memq 'end process-state)
+       (setq article-series nil)
+       (setq has-been-begin nil)
+       (if (stringp result-file)
+           (setq files (list result-file))
+         (setq files result-file))
+       (setq result-file (car files))
+       (while files
+         (push (list (cons 'name (pop files))
+                     (cons 'article article))
+               result-files))
+       ;; Allow user-defined functions to be run on this file.
+       (when gnus-uu-grabbed-file-functions
+         (let ((funcs gnus-uu-grabbed-file-functions))
+           (unless (listp funcs)
+             (setq funcs (list funcs)))
+           (while funcs
+             (funcall (pop funcs) result-file))))
+       (setq result-file nil)
+       ;; Check whether we have decoded enough articles.
+       (and limit (= (length result-files) limit)
+            (setq articles nil)))
+
+      ;; If this is the last article to be decoded, and
+      ;; we still haven't reached the end, then we delete
+      ;; the partially decoded file.
+      (and (or (eq state 'last) (eq state 'first-and-last))
+          (not (memq 'end process-state))
+          result-file
+          (file-exists-p result-file)
+          (not gnus-uu-be-dangerous)
+          (or (eq gnus-uu-be-dangerous t)
+              (gnus-y-or-n-p (format "Delete incomplete file %s? " result-file)))
+          (delete-file result-file))
+
+      ;; If this was a file of the wrong sort, then
+      (when (and (or (memq 'wrong-type process-state)
+                    (memq 'error process-state))
+                gnus-uu-unmark-articles-not-decoded)
+       (gnus-summary-tick-article article t))
+
+      ;; Set the new series state.
+      (if (and (not has-been-begin)
+              (not sloppy)
+              (or (memq 'end process-state)
+                  (memq 'middle process-state)))
+         (progn
+           (setq process-state (list 'error))
+           (gnus-message 2 "No begin part at the beginning")
+           (sleep-for 2))
+       (setq state 'middle)))
+
+    ;; When there are no result-files, then something must be wrong.
+    (if result-files
+       (message "")
+      (cond
+       ((not has-been-begin)
+       (gnus-message 2 "Wrong type file"))
+       ((memq 'error process-state)
+       (gnus-message 2 "An error occurred during decoding"))
+       ((not (or (memq 'ok process-state)
+                (memq 'end process-state)))
+       (gnus-message 2 "End of articles reached before end of file")))
+      ;; Make unsuccessfully decoded articles unread.
+      (when gnus-uu-unmark-articles-not-decoded
+       (while article-series
+         (gnus-summary-tick-article (pop article-series) t))))
 
     result-files))
 
@@ -1350,18 +1357,11 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
 
 (defun gnus-uu-part-number (article)
   (let* ((header (gnus-summary-article-header article))
-        (subject (and header (mail-header-subject header)))
-        (part nil))
-    (if subject
-       (while (string-match "[0-9]+/[0-9]+\\|[0-9]+[ \t]+of[ \t]+[0-9]+"
-                            subject)
-         (setq part (match-string 0 subject))
-         (setq subject (substring subject (match-end 0)))))
-    (or part
-       (while (string-match "\\([0-9]+\\)[^0-9]+\\([0-9]+\\)" subject)
-         (setq part (match-string 0 subject))
-         (setq subject (substring subject (match-end 0)))))
-    (or part "")))
+        (subject (and header (mail-header-subject header))))
+    (if (and subject
+            (string-match "[0-9]+ */[0-9]+\\|[0-9]+ * of *[0-9]+" subject))
+       (match-string 0 subject)
+      "")))
 
 (defun gnus-uu-uudecode-sentinel (process event)
   (delete-process (get-process process)))
@@ -1419,7 +1419,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
                  (setq gnus-uu-uudecode-process
                        (start-process
                         "*uudecode*"
-                        (gnus-get-buffer-create gnus-uu-output-buffer-name)
+                        (get-buffer-create gnus-uu-output-buffer-name)
                         shell-file-name shell-command-switch
                         (format "cd %s %s uudecode" gnus-uu-work-dir
                                 gnus-shell-command-separator))))
@@ -1485,7 +1485,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
        (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
+        (get-buffer-create gnus-uu-output-buffer-name) nil
         shell-command-switch
         (concat "cd " gnus-uu-work-dir " "
                 gnus-shell-command-separator  " sh"))))
@@ -1548,13 +1548,13 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
     (setq command (format "cd %s ; %s" dir (gnus-uu-command action file-path)))
 
     (save-excursion
-      (set-buffer (gnus-get-buffer-create gnus-uu-output-buffer-name))
+      (set-buffer (get-buffer-create gnus-uu-output-buffer-name))
       (erase-buffer))
 
     (gnus-message 5 "Unpacking: %s..." (gnus-uu-command action file-path))
 
     (if (= 0 (call-process shell-file-name nil
-                          (gnus-get-buffer-create gnus-uu-output-buffer-name)
+                          (get-buffer-create gnus-uu-output-buffer-name)
                           nil shell-command-switch command))
        (message "")
       (gnus-message 2 "Error during unpacking of archive")
@@ -1696,11 +1696,23 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
     (when (setq buf (get-buffer gnus-uu-output-buffer-name))
       (kill-buffer buf))))
 
+(defun gnus-quote-arg-for-sh-or-csh (arg)
+  (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)))))))
+
 ;; Inputs an action and a filename and returns a full command, making sure
 ;; that the filename will be treated as a single argument when the shell
 ;; executes the command.
 (defun gnus-uu-command (action file)
-  (let ((quoted-file (mm-quote-arg file)))
+  (let ((quoted-file (gnus-quote-arg-for-sh-or-csh file)))
     (if (string-match "%s" action)
        (format action quoted-file)
       (concat action " " quoted-file))))
@@ -1796,9 +1808,7 @@ is t."
 
   (gnus-summary-post-news)
 
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map (current-local-map))
-    (use-local-map map))
+  (use-local-map (copy-keymap (current-local-map)))
   (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)
@@ -1902,7 +1912,7 @@ If no file has been included, the user will be asked for a file."
     (unwind-protect
        (if (save-excursion
              (set-buffer (setq uubuf
-                               (gnus-get-buffer-create uuencode-buffer-name)))
+                               (get-buffer-create uuencode-buffer-name)))
              (erase-buffer)
              (funcall gnus-uu-post-encode-method file-path file-name))
            (insert-buffer-substring uubuf)
@@ -1917,7 +1927,7 @@ If no file has been included, the user will be asked for a file."
        (top-string "[ cut here %s (%s %d/%d) %s gnus-uu ]")
        (separator (concat mail-header-separator "\n\n"))
        uubuf length parts header i end beg
-       beg-line minlen post-buf whole-len beg-binary end-binary)
+       beg-line minlen buf post-buf whole-len beg-binary end-binary)
 
     (setq post-buf (current-buffer))
 
@@ -1935,7 +1945,7 @@ If no file has been included, the user will be asked for a file."
     (setq end-binary (point-max))
 
     (save-excursion
-      (set-buffer (setq uubuf (gnus-get-buffer-create encoded-buffer-name)))
+      (set-buffer (setq uubuf (get-buffer-create encoded-buffer-name)))
       (erase-buffer)
       (insert-buffer-substring post-buf beg-binary end-binary)
       (goto-char (point-min))
@@ -1967,7 +1977,7 @@ If no file has been included, the user will be asked for a file."
       (setq i 1)
       (setq beg 1)
       (while (not (> i parts))
-       (set-buffer (gnus-get-buffer-create send-buffer-name))
+       (set-buffer (get-buffer-create send-buffer-name))
        (erase-buffer)
        (insert header)
        (when (and threaded gnus-uu-post-message-id)
index c41fbae..5c4eb52 100644 (file)
      (vertical 1.0
               (summary 0.5 point)
               ("*Score Words*" 1.0)))
-    (split-trace
-     (vertical 1.0
-              (summary 0.5 point)
-              ("*Split Trace*" 1.0)))
     (category
      (vertical 1.0
               (category 1.0)))
@@ -189,7 +185,6 @@ See the Gnus manual for an explanation of the syntax used.")
     (picons . gnus-picons-buffer-name)
     (tree . gnus-tree-buffer)
     (score-trace . "*Score Trace*")
-    (split-trace . "*Split Trace*")
     (info . gnus-info-buffer)
     (category . gnus-category-buffer)
     (article-copy . gnus-article-copy)
@@ -319,7 +314,7 @@ See the Gnus manual for an explanation of the syntax used.")
                          (t (cdr (assq type gnus-window-to-buffer))))))
        (unless buffer
          (error "Illegal buffer type: %s" type))
-       (switch-to-buffer (gnus-get-buffer-create
+       (switch-to-buffer (get-buffer-create
                           (gnus-window-to-buffer-helper buffer)))
        (when (memq 'frame-focus split)
          (setq gnus-window-frame-focus window))
@@ -453,7 +448,13 @@ See the Gnus manual for an explanation of the syntax used.")
 
 (defun gnus-delete-windows-in-gnusey-frames ()
   "Do a `delete-other-windows' in all frames that have Gnus windows."
-  (let ((buffers (gnus-buffers)))
+  (let ((buffers
+        (mapcar
+         (lambda (elem)
+           (let ((buf (gnus-window-to-buffer-helper (cdr elem))))
+             (if (not (null buf))
+                 (get-buffer buf))))
+         gnus-window-to-buffer)))
     (mapcar
      (lambda (frame)
        (unless (eq (cdr (assq 'minibuffer
@@ -517,22 +518,39 @@ should have point."
   (nth 1 (window-edges window)))
 
 (defun gnus-remove-some-windows ()
-  (let ((buffers (gnus-buffers))
+  (let ((buffers gnus-window-to-buffer)
        buf bufs lowest-buf lowest)
     (save-excursion
       ;; Remove windows on all known Gnus buffers.
-      (while (setq buf (pop buffers))
-       (when (get-buffer-window buf)
-         (push buf bufs)
-         (pop-to-buffer buf)
-         (when (or (not lowest)
-                   (< (gnus-window-top-edge) lowest))
-           (setq lowest (gnus-window-top-edge)
-                 lowest-buf buf))))
+      (while buffers
+       (and (setq buf (gnus-window-to-buffer-helper (cdar buffers)))
+            (get-buffer-window buf)
+            (progn
+              (push buf bufs)
+              (pop-to-buffer buf)
+              (when (or (not lowest)
+                        (< (gnus-window-top-edge) lowest))
+                (setq lowest (gnus-window-top-edge))
+                (setq lowest-buf buf))))
+       (setq buffers (cdr buffers)))
+      ;; Remove windows on *all* summary buffers.
+      (walk-windows
+       (lambda (win)
+        (let ((buf (window-buffer win)))
+          (when (string-match  "^\\*\\(Dead \\)?Summary" (buffer-name buf))
+            (push buf bufs)
+            (pop-to-buffer buf)
+            (when (or (not lowest)
+                      (< (gnus-window-top-edge) lowest))
+              (setq lowest-buf buf)
+              (setq lowest (gnus-window-top-edge)))))))
       (when lowest-buf
        (pop-to-buffer lowest-buf)
        (switch-to-buffer nntp-server-buffer))
-      (mapcar (lambda (b) (delete-windows-on b t)) bufs))))
+      (while bufs
+       (when (not (eq (car bufs) lowest-buf))
+         (delete-windows-on (car bufs)))
+       (setq bufs (cdr bufs))))))
 
 (provide 'gnus-win)
 
index b323db1..9d3d239 100644 (file)
@@ -28,7 +28,6 @@
 (require 'text-props)
 (defvar menu-bar-mode (featurep 'menubar))
 (require 'messagexmas)
-(require 'wid-edit)
 
 (defgroup gnus-xmas nil
   "XEmacsoid support for Gnus"
@@ -42,8 +41,6 @@ automatically."
                 directory)
   :group 'gnus-xmas)
 
-;;(format "%02x%02x%02x" 114 66 20) "724214"
-
 (defvar gnus-xmas-logo-color-alist
   '((flame "#cc3300" "#ff2200")
     (pine "#c0cc93" "#f8ffb8")
@@ -55,18 +52,16 @@ automatically."
     (grape "#b264cc" "#cf7df")
     (labia "#cc64c2" "#fd7dff")
     (berry "#cc6485" "#ff7db5")
-    (dino "#724214" "#1e3f03")
     (neutral "#b4b4b4" "#878787")
     (september "#bf9900" "#ffcc00"))
   "Color alist used for the Gnus logo.")
 
-(defcustom gnus-xmas-logo-color-style 'dino
+(defcustom gnus-xmas-logo-color-style 'moss
   "*Color styles used for the Gnus logo."
   :type '(choice (const flame) (const pine) (const moss)
                 (const irish) (const sky) (const tin)
                 (const velvet) (const grape) (const labia)
-                (const berry) (const neutral) (const september)
-                (const dino))
+                (const berry) (const neutral) (const september))
   :group 'gnus-xmas)
 
 (defvar gnus-xmas-logo-colors
@@ -95,6 +90,7 @@ asynchronously.        The compressed face will be piped to this command."
 (defvar gnus-active-hashtb)
 (defvar gnus-article-buffer)
 (defvar gnus-auto-center-summary)
+(defvar gnus-buffer-list)
 (defvar gnus-current-headers)
 (defvar gnus-level-killed)
 (defvar gnus-level-zombie)
@@ -246,7 +242,6 @@ call it with the value of the `gnus-data' text property."
   (let* ((pos (event-closest-point event))
         (data (get-text-property pos 'gnus-data))
         (fun (get-text-property pos 'gnus-callback)))
-    (goto-char pos)
     (when fun
       (funcall fun data))))
 
@@ -259,6 +254,21 @@ call it with the value of the `gnus-data' text property."
                 (delete-extent extent)
                 nil)))
 
+;; Fixed by Christopher Davis <ckd@loiosh.kei.com>.
+(defun gnus-xmas-article-add-button (from to fun &optional data)
+  "Create a button between FROM and TO with callback FUN and data DATA."
+  (when gnus-article-button-face
+    (gnus-overlay-put (gnus-make-overlay from to)
+                     'face gnus-article-button-face))
+  (gnus-add-text-properties
+   from to
+   (nconc
+    (and gnus-article-mouse-face
+        (list 'mouse-face gnus-article-mouse-face))
+    (list 'gnus-callback fun)
+    (and data (list 'gnus-data data))
+    (list 'highlight t))))
+
 (defun gnus-xmas-window-top-edge (&optional window)
   (nth 1 (window-pixel-edges window)))
 
@@ -385,10 +395,26 @@ call it with the value of the `gnus-data' text property."
               (event-to-character event))
          event)))
 
+(defun gnus-xmas-seconds-since-epoch (date)
+  "Return a floating point number that says how many seconds have lapsed between Jan 1 12:00:00 1970 and DATE."
+  (let* ((tdate (mapcar (lambda (ti) (and ti (string-to-int ti)))
+                       (timezone-parse-date date)))
+        (ttime (mapcar (lambda (ti) (and ti (string-to-int ti)))
+                       (timezone-parse-time
+                        (aref (timezone-parse-date date) 3))))
+        (edate (mapcar (lambda (ti) (and ti (string-to-int ti)))
+                       (timezone-parse-date "Jan 1 12:00:00 1970")))
+        (tday (- (timezone-absolute-from-gregorian
+                  (nth 1 tdate) (nth 2 tdate) (nth 0 tdate))
+                 (timezone-absolute-from-gregorian
+                  (nth 1 edate) (nth 2 edate) (nth 0 edate)))))
+    (+ (nth 2 ttime)
+       (* (nth 1 ttime) 60)
+       (* (float (nth 0 ttime)) 60 60)
+       (* (float tday) 60 60 24))))
+
 (defun gnus-xmas-define ()
   (setq gnus-mouse-2 [button2])
-  (setq gnus-mouse-3 [button3])
-  (setq gnus-widget-button-keymap widget-button-keymap)
 
   (unless (memq 'underline (face-list))
     (and (fboundp 'make-face)
@@ -431,6 +457,16 @@ call it with the value of the `gnus-data' text property."
 
   (defvar gnus-mouse-face-prop 'highlight)
 
+  (unless (fboundp 'encode-time)
+    (defun encode-time (sec minute hour day month year &optional zone)
+      (let ((seconds
+            (gnus-xmas-seconds-since-epoch
+             (timezone-make-arpa-date
+              year month day (timezone-make-time-string hour minute sec)
+              zone))))
+       (list (floor (/ seconds (expt 2 16)))
+             (round (mod seconds (expt 2 16)))))))
+
   (defun gnus-byte-code (func)
     "Return a form that can be `eval'ed based on FUNC."
     (let ((fval (indirect-function func)))
@@ -452,6 +488,7 @@ call it with the value of the `gnus-data' text property."
   (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-article-add-button 'gnus-xmas-article-add-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)
@@ -464,9 +501,7 @@ call it with the value of the `gnus-data' text property."
        '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)
-  
+
   (add-hook 'gnus-group-mode-hook 'gnus-xmas-group-menu-add)
   (add-hook 'gnus-summary-mode-hook 'gnus-xmas-summary-menu-add)
   (add-hook 'gnus-article-mode-hook 'gnus-xmas-article-menu-add)
@@ -792,20 +827,6 @@ XEmacs compatibility workaround."
   (when (eq (device-type) 'x)
     (gnus-splash)))
 
-(defun gnus-xmas-annotation-in-region-p (b e)
-  (map-extents (lambda (e u) t) nil b e nil nil 'mm t))
-
-(defun gnus-xmas-mime-button-menu (event)
-  "Construct a context-sensitive menu of MIME commands."
-  (interactive "e")
-  (let ((response (get-popup-menu-response
-                  `("MIME Part"
-                    ,@(mapcar (lambda (c) `[,(caddr c) ,(car c) t])
-                              gnus-mime-button-commands)))))
-    (set-buffer (event-buffer event))
-    (goto-char (event-point event))
-    (funcall (event-function response) (event-object response))))
-
 (provide 'gnus-xmas)
 
 ;;; gnus-xmas.el ends here
index a2ca37b..f7e0495 100644 (file)
@@ -245,20 +245,18 @@ is restarted, and sometimes reloaded."
   :link '(custom-manual "(gnus)Various Various")
   :group 'gnus)
 
-(defgroup gnus-mime nil
-  "Variables for controlling the Gnus MIME interface."
-  :group 'gnus)
-
 (defgroup gnus-exit nil
   "Exiting gnus."
   :link '(custom-manual "(gnus)Exiting Gnus")
   :group 'gnus)
 
-(defconst gnus-version-number "0.44"
-  "Version number for this version of Gnus.")
+(defconst gnus-version-number "6.7.8"
+  "Version number for this version of gnus.")
 
-(defconst gnus-version (format "Pterodactyl Gnus v%s" gnus-version-number)
-  "Version string for this version of Gnus.")
+(defconst gnus-version
+  (format "Semi-gnus %s (based on Gnus 5.6.22; for SEMI 1.8/FLIM 1.7)"
+          gnus-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.
@@ -272,6 +270,8 @@ be set in `.emacs' instead."
   :group 'gnus-start
   :type 'boolean)
 
+;;; Kludges to help the transition from the old `custom.el'.
+
 (unless (featurep 'gnus-xmas)
   (defalias 'gnus-make-overlay 'make-overlay)
   (defalias 'gnus-delete-overlay 'delete-overlay)
@@ -291,9 +291,7 @@ be set in `.emacs' instead."
   (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-annotation-in-region-p 'ignore)
-  (defalias 'gnus-decode-rfc1522 'ignore))
+  (defalias 'gnus-key-press-event-p 'numberp))
 
 ;; We define these group faces here to avoid the display
 ;; update forced when creating new faces.
@@ -364,72 +362,6 @@ be set in `.emacs' instead."
      ()))
   "Level 3 empty newsgroup face.")
 
-(defface gnus-group-news-4-face
-  '((((class color)
-      (background dark))
-     (:bold t))
-    (((class color)
-      (background light))
-     (:bold t))
-    (t
-     ()))
-  "Level 4 newsgroup face.")
-
-(defface gnus-group-news-4-empty-face
-  '((((class color)
-      (background dark))
-     ())
-    (((class color)
-      (background light))
-     ())
-    (t
-     ()))
-  "Level 4 empty newsgroup face.")
-
-(defface gnus-group-news-5-face
-  '((((class color)
-      (background dark))
-     (:bold t))
-    (((class color)
-      (background light))
-     (:bold t))
-    (t
-     ()))
-  "Level 5 newsgroup face.")
-
-(defface gnus-group-news-5-empty-face
-  '((((class color)
-      (background dark))
-     ())
-    (((class color)
-      (background light))
-     ())
-    (t
-     ()))
-  "Level 5 empty newsgroup face.")
-
-(defface gnus-group-news-6-face
-  '((((class color)
-      (background dark))
-     (:bold t))
-    (((class color)
-      (background light))
-     (:bold t))
-    (t
-     ()))
-  "Level 6 newsgroup face.")
-
-(defface gnus-group-news-6-empty-face
-  '((((class color)
-      (background dark))
-     ())
-    (((class color)
-      (background light))
-     ())
-    (t
-     ()))
-  "Level 6 empty newsgroup face.")
-
 (defface gnus-group-news-low-face
   '((((class color)
       (background dark))
@@ -670,33 +602,6 @@ be set in `.emacs' instead."
   "Face used for normal interest read articles.")
 
 
-;;;
-;;; Gnus buffers
-;;;
-
-(defvar gnus-buffers nil)
-
-(defun gnus-get-buffer-create (name)
-  "Do the same as `get-buffer-create', but store the created buffer."
-  (or (get-buffer name)
-      (car (push (get-buffer-create name) gnus-buffers))))
-
-(defun gnus-add-buffer ()
-  "Add the current buffer to the list of Gnus buffers."
-  (push (current-buffer) gnus-buffers))
-
-(defun gnus-buffers ()
-  "Return a list of live Gnus buffers."
-  (while (and gnus-buffers
-             (not (buffer-name (car gnus-buffers))))
-    (pop gnus-buffers))
-  (let ((buffers gnus-buffers))
-    (while (cdr buffers)
-      (if (buffer-name (cadr buffers))
-         (pop buffers)
-       (setcdr buffers (cddr buffers)))))
-  gnus-buffers)
-
 ;;; Splash screen.
 
 (defvar gnus-group-buffer "*Group*")
@@ -707,17 +612,17 @@ be set in `.emacs' instead."
 (defface gnus-splash-face
   '((((class color)
       (background dark))
-     (:foreground "Brown"))
+     (:foreground "ForestGreen"))
     (((class color)
       (background light))
-     (:foreground "Brown"))
+     (:foreground "ForestGreen"))
     (t
      ()))
-  "Face of the splash screen.")
+  "Level 1 newsgroup face.")
 
 (defun gnus-splash ()
   (save-excursion
-    (switch-to-buffer (gnus-get-buffer-create gnus-group-buffer))
+    (switch-to-buffer (get-buffer-create gnus-group-buffer))
     (let ((buffer-read-only nil))
       (erase-buffer)
       (unless gnus-inhibit-startup-message
@@ -785,10 +690,9 @@ be set in `.emacs' instead."
 
 (eval-when (load)
   (let ((command (format "%s" this-command)))
-    (if (and (string-match "gnus" command)
-            (not (string-match "gnus-other-frame" command)))
-       (gnus-splash)
-      (gnus-get-buffer-create gnus-group-buffer))))
+    (when (and (string-match "gnus" command)
+              (not (string-match "gnus-other-frame" command)))
+      (gnus-splash))))
 
 ;;; Do the rest.
 
@@ -851,7 +755,8 @@ used to 899, you would say something along these lines:
   (or (getenv "NNTPSERVER")
       (and (file-readable-p gnus-nntpserver-file)
           (save-excursion
-            (set-buffer (gnus-get-buffer-create " *gnus nntp*"))
+            (set-buffer (get-buffer-create " *gnus nntp*"))
+            (buffer-disable-undo (current-buffer))
             (insert-file-contents gnus-nntpserver-file)
             (let ((name (buffer-string)))
               (prog1
@@ -935,7 +840,6 @@ that case, just return a fully prefixed name of the group --
 \"nnml+private:mail.misc\", for instance."
   :group 'gnus-message
   :type '(choice (const :tag "none" nil)
-                sexp
                 string))
 
 (defcustom gnus-secondary-servers nil
@@ -1205,6 +1109,7 @@ slower."
   :group 'gnus-summary-format
   :type '(radio (function-item gnus-extract-address-components)
                (function-item mail-extract-address-components)
+               (function-item std11-extract-address-components)
                (function :tag "Other")))
 
 (defcustom gnus-carpal nil
@@ -1438,10 +1343,10 @@ want."
             gnus-article-emphasize
             gnus-article-fill-cited-article
             gnus-article-remove-cr
-            gnus-article-de-quoted-unreadable
             gnus-summary-stop-page-breaking
             ;; gnus-summary-caesar-message
             ;; gnus-summary-verbose-headers
+            gnus-summary-toggle-mime
             gnus-article-hide
             gnus-article-hide-headers
             gnus-article-hide-boring-headers
@@ -1476,7 +1381,6 @@ want."
 \f
 ;;; Internal variables
 
-(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*")
 (defvar gnus-newsgroup-name nil)
@@ -1517,11 +1421,11 @@ want."
 
 (defvar gnus-predefined-server-alist
   `(("cache"
-     nnspool "cache"
-     (nnspool-spool-directory ,gnus-cache-directory)
-     (nnspool-nov-directory ,gnus-cache-directory)
-     (nnspool-active-file
-      ,(nnheader-concat gnus-cache-directory "active"))))
+     (nnspool "cache"
+             (nnspool-spool-directory gnus-cache-directory)
+             (nnspool-nov-directory gnus-cache-directory)
+             (nnspool-active-file
+              (nnheader-concat gnus-cache-directory "active")))))
   "List of predefined (convenience) servers.")
 
 (defvar gnus-topic-indentation "") ;; Obsolete variable.
@@ -1552,6 +1456,7 @@ want."
   '((gnus-group-mode "(gnus)The Group Buffer")
     (gnus-summary-mode "(gnus)The Summary Buffer")
     (gnus-article-mode "(gnus)The Article Buffer")
+    (mime/viewer-mode "(gnus)The Article Buffer")
     (gnus-server-mode "(gnus)The Server Buffer")
     (gnus-browse-mode "(gnus)Browse Foreign Server")
     (gnus-tree-mode "(gnus)Tree Display"))
@@ -1562,6 +1467,9 @@ want."
 (defvar gnus-article-buffer "*Article*")
 (defvar gnus-server-buffer "*Server*")
 
+(defvar gnus-buffer-list nil
+  "Gnus buffers that should be killed on exit.")
+
 (defvar gnus-slave nil
   "Whether this Gnus is a slave or not.")
 
@@ -1635,18 +1543,19 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
        (if (eq (nth 1 package) ':interactive)
            (cdddr package)
          (cdr package)))))
-   '(("metamail" metamail-buffer)
-     ("info" Info-goto-node)
+   '(("info" Info-goto-node)
+     ("hexl" hexl-hex-string-to-integer)
      ("pp" pp pp-to-string pp-eval-expression)
-     ("qp" quoted-printable-decode-region quoted-printable-decode-string)
      ("ps-print" ps-print-preprint)
      ("mail-extr" mail-extract-address-components)
      ("browse-url" browse-url)
      ("message" :interactive t
       message-send-and-exit message-yank-original)
-     ("nnmail" nnmail-split-fancy nnmail-article-group)
+     ("nnmail" nnmail-split-fancy nnmail-article-group nnmail-date-to-time)
      ("nnvirtual" nnvirtual-catchup-group nnvirtual-convert-headers)
-     ("rmailout" rmail-output rmail-output-to-rmail-file)
+     ("timezone" timezone-make-date-arpa-standard timezone-fix-time
+      timezone-make-sortable-date timezone-make-time-string)
+     ("rmailout" rmail-output)
      ("rmail" rmail-insert-rmail-file-header rmail-count-new-messages
       rmail-show-message)
      ("gnus-audio" :interactive t gnus-audio-play)
@@ -1678,7 +1587,7 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
       gnus-article-hide-citation-in-followups)
      ("gnus-kill" gnus-kill gnus-apply-kill-file-internal
       gnus-kill-file-edit-file gnus-kill-file-raise-followups-to-author
-      gnus-execute gnus-expunge gnus-batch-kill gnus-batch-score)
+      gnus-execute gnus-expunge)
      ("gnus-cache" gnus-cache-possibly-enter-article gnus-cache-save-buffers
       gnus-cache-possibly-remove-articles gnus-cache-request-article
       gnus-cache-retrieve-headers gnus-cache-possibly-alter-active
@@ -1715,9 +1624,8 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
       gnus-uu-decode-binhex gnus-uu-decode-uu-view
       gnus-uu-decode-uu-and-save-view gnus-uu-decode-unshar-view
       gnus-uu-decode-unshar-and-save-view gnus-uu-decode-save-view
-      gnus-uu-decode-binhex-view gnus-uu-unmark-thread
-      gnus-uu-mark-over gnus-uu-post-news)
-     ("gnus-uu" gnus-uu-delete-work-dir gnus-uu-unmark-thread)
+      gnus-uu-decode-binhex-view)
+     ("gnus-uu" gnus-uu-delete-work-dir gnus-quote-arg-for-sh-or-csh)
      ("gnus-msg" (gnus-summary-send-map keymap)
       gnus-article-mail gnus-copy-article-buffer gnus-extended-version)
      ("gnus-msg" :interactive t
@@ -1727,11 +1635,7 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
       gnus-post-news gnus-summary-reply gnus-summary-reply-with-original
       gnus-summary-mail-forward gnus-summary-mail-other-window
       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-bug)
      ("gnus-picon" :interactive t gnus-article-display-picons
       gnus-group-display-picons gnus-picons-article-display-x-face
       gnus-picons-display-x-face)
@@ -1759,24 +1663,23 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
       gnus-article-next-page gnus-article-prev-page
       gnus-request-article-this-buffer gnus-article-mode
       gnus-article-setup-buffer gnus-narrow-to-page
-      gnus-article-delete-invisible-text)
+      gnus-article-delete-invisible-text gnus-hack-decode-rfc1522)
      ("gnus-art" :interactive t
       gnus-article-hide-headers gnus-article-hide-boring-headers
       gnus-article-treat-overstrike gnus-article-word-wrap
       gnus-article-remove-cr gnus-article-remove-trailing-blank-lines
-      gnus-article-display-x-face gnus-article-de-quoted-unreadable
-      gnus-article-hide-pgp
+      gnus-article-display-x-face
+      gnus-article-mime-decode-quoted-printable gnus-article-hide-pgp
       gnus-article-hide-pem gnus-article-hide-signature
       gnus-article-strip-leading-blank-lines gnus-article-date-local
       gnus-article-date-original gnus-article-date-lapsed
       gnus-article-show-all-headers
       gnus-article-edit-mode gnus-article-edit-article
-      gnus-article-edit-done gnus-article-decode-encoded-words
-      gnus-start-date-timer gnus-stop-date-timer
-      gnus-mime-view-all-parts)
+      gnus-article-edit-done gnus-decode-rfc1522 article-decode-rfc1522
+      gnus-start-date-timer gnus-stop-date-timer)
      ("gnus-int" gnus-request-type)
      ("gnus-start" gnus-newsrc-parse-options gnus-1 gnus-no-server-1
-      gnus-dribble-enter gnus-read-init-file gnus-dribble-touch)
+      gnus-dribble-enter gnus-read-init-file)
      ("gnus-dup" gnus-dup-suppress-articles gnus-dup-unsuppress-article
       gnus-dup-enter-articles)
      ("gnus-range" gnus-copy-sequence)
@@ -1814,7 +1717,6 @@ with some simple extensions.
 %a   Extracted name of the poster (string)
 %A   Extracted address of the poster (string)
 %F   Contents of the From: header (string)
-%f   Contents of the From: or To: headers (string)
 %x   Contents of the Xref: header (string)
 %D   Date of the article (string)
 %d   Date of the article (string) in DD-MMM format
@@ -1875,7 +1777,7 @@ This restriction may disappear in later versions of Gnus."
       (define-key keymap (pop keys) 'undefined))))
 
 (defvar gnus-article-mode-map
-  (let ((keymap (make-sparse-keymap)))
+  (let ((keymap (make-keymap)))
     (gnus-suppress-keymap keymap)
     keymap))
 (defvar gnus-summary-mode-map
@@ -2029,7 +1931,6 @@ This restriction may disappear in later versions of Gnus."
 ;;; Gnus Utility Functions
 ;;;
 
-
 (defmacro gnus-string-or (&rest strings)
   "Return the first element of STRINGS that is a non-blank string.
 STRINGS will be evaluated in normal `or' order."
@@ -2044,39 +1945,52 @@ STRINGS will be evaluated in normal `or' order."
        (setq strings nil)))
     string))
 
+;; Add the current buffer to the list of buffers to be killed on exit.
+(defun gnus-add-current-to-buffer-list ()
+  (or (memq (current-buffer) gnus-buffer-list)
+      (push (current-buffer) gnus-buffer-list)))
+
 (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)))
+  (let ((methods gnus-valid-select-methods)
+       (mess gnus-version)
+       meth)
+    ;; Go through all the legal select methods and add their version
+    ;; numbers to the total version string.  Only the backends that are
+    ;; currently in use will have their message numbers taken into
+    ;; consideration.
+    (while methods
+      (setq meth (intern (concat (caar methods) "-version")))
+      (and (boundp meth)
+          (stringp (symbol-value meth))
+          (setq mess (concat mess "; " (symbol-value meth))))
+      (setq methods (cdr methods)))
+    (if arg
+       (insert (message mess))
+      (message mess))))
 
 (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)
+    (let* ((alpha (and (match-beginning 1) (match-string 1 version)))
+          (number (match-string 2 version))
+          major minor least)
+      (string-match "\\([0-9]\\)\\.\\([0-9]+\\)\\.?\\([0-9]+\\)?" number)
+      (setq major (string-to-number (match-string 1 number)))
+      (setq minor (string-to-number (match-string 2 number)))
+      (setq 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
-                             (- (mm-char-int (aref (downcase alpha) 0))
-                                (mm-char-int ?t))))
-                       -0.01))
+                  (cond
+                   ((member alpha '("(ding)" "d")) "4.99")
+                   ((member alpha '("September" "s")) "5.01")
+                   ((member alpha '("Red" "r")) "5.03"))
                   minor least)
         (format "%d.%02d%02d" major minor least))))))
 
@@ -2119,7 +2033,7 @@ g -- Group name."
        (setq prompt (match-string 1 string)))
       (setq i (match-end 0))
       ;; We basically emulate just about everything that
-      ;; `interactive' does, but add the specs listed above.
+      ;; `interactive' does, but adds the "g" and "G" specs.
       (push
        (cond
        ((= c ?a)
@@ -2260,14 +2174,7 @@ 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.
-          (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))))))
+          (eq (gnus-request-type group article) 'news))))
 
 ;; Returns a list of writable groups.
 (defun gnus-writable-groups ()
@@ -2336,11 +2243,9 @@ that that variable is buffer-local to the summary buffers."
         (gnus-server-to-method method))
        ((equal method gnus-select-method)
         gnus-select-method)
-       ((and (stringp (car method))
-             group)
+       ((and (stringp (car method)) group)
         (gnus-server-extend-method group method))
-       ((and method
-             (not group)
+       ((and method (not group)
              (equal (cadr method) ""))
         method)
        (t
@@ -2585,18 +2490,22 @@ just the host name."
     ;; separate foreign select method from group name and collapse.
     ;; if method contains a server, collapse to non-domain server name,
     ;; otherwise collapse to select method
-    (let* ((colon  (string-match ":" group))
-          (server (and colon (substring group 0 colon)))
-          (plus   (and server (string-match "+" server))))
-      (when server
-       (cond (plus
-              (setq foreign (substring server (+ 1 plus)
-                                       (string-match "\\." server))
-                    group (substring group (+ 1 colon))))
-              (t
-               (setq foreign server
-                     group (substring group (+ 1 colon)))))
-       (setq foreign (concat foreign ":"))))
+    (when (string-match ":" group)
+      (cond ((string-match "+" group)
+            (let* ((plus (string-match "+" group))
+                   (colon (string-match ":" group (or plus 0)))
+                   (dot (string-match "\\." group)))
+              (setq foreign (concat
+                             (substring group (+ 1 plus)
+                                        (cond ((null dot) colon)
+                                              ((< colon dot) colon)
+                                              ((< dot colon) dot)))
+                             ":")
+                    group (substring group (+ 1 colon)))))
+           (t
+            (let* ((colon (string-match ":" group)))
+              (setq foreign (concat (substring group 0 (+ 1 colon)))
+                    group (substring group (+ 1 colon)))))))
     ;; collapse group name leaving LEVELS uncollapsed elements
     (while group
       (if (and (string-match "\\." group) (> levels 0))
@@ -2768,14 +2677,11 @@ Disallow illegal group names."
 (defun gnus-read-method (prompt)
   "Prompt the user for a method.
 Allow completion over sensible values."
-  (let* ((servers
-         (append gnus-valid-select-methods
-                 gnus-predefined-server-alist
-                 gnus-server-alist))
-        (method
-         (completing-read
-          prompt servers
-          nil t nil 'gnus-method-history)))
+  (let ((method
+        (completing-read
+         prompt (append gnus-valid-select-methods gnus-predefined-server-alist
+                        gnus-server-alist)
+         nil t nil 'gnus-method-history)))
     (cond
      ((equal method "")
       (setq method gnus-select-method))
@@ -2785,7 +2691,7 @@ Allow completion over sensible values."
                      (assoc method gnus-valid-select-methods))
                (read-string "Address: ")
              "")))
-     ((assoc method servers)
+     ((assoc method gnus-server-alist)
       method)
      (t
       (list (intern method) "")))))
index 110cb42..c8ee274 100644 (file)
@@ -2,6 +2,12 @@
 
 (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))
                     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 
+                    set-face-stipple mail-abbrevs-setup char-int
                     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
-                    mm-copy-tree url-view-url w3-prepare-buffer
-                    set-buffer-multibyte
-                    find-non-ascii-charset-region char-charset
-                    mule-write-region-no-coding-system
-                    find-charset-region 
-                    find-coding-systems-region get-charset-property
-                    coding-system-get w3-region
-                    rmail-summary-exists rmail-select-summary
-                    rmail-update-summary
-                    ))
+                    decode-coding-string mail-aliases-setup))
       (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
                    mail-mode-hook enable-multibyte-characters
-                   adaptive-fill-first-line-regexp adaptive-fill-regexp
-                   url-current-mime-headers buffer-file-coding-system)))
+                   adaptive-fill-first-line-regexp adaptive-fill-regexp)))
   (maybe-bind '(mail-mode-hook
                enable-multibyte-characters browse-url-browser-function
-               adaptive-fill-first-line-regexp adaptive-fill-regexp
-               url-current-mime-headers))
+               adaptive-fill-first-line-regexp adaptive-fill-regexp))
   (maybe-fbind '(color-instance-rgb-components
                 make-color-instance color-instance-name specifier-instance
                 device-type device-class get-popup-menu-response event-object
                 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
-                mm-copy-tree url-view-url w3-prepare-buffer
-                mule-write-region-no-coding-system char-int
-                annotationp delete-annotation make-image-specifier
-                make-annotation 
-                w3-do-setup w3-region
-                rmail-summary-exists rmail-select-summary rmail-update-summary
-                )))
+                mail-aliases-setup)))
 
 (setq load-path (cons "." load-path))
 (require 'custom)
index 3696495..f761af0 100644 (file)
@@ -2,7 +2,8 @@
 ;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: mail, news
+;;         MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Keywords: mail, news, MIME
 
 ;; This file is part of GNU Emacs.
 
 
 ;;; Code:
 
-(eval-when-compile (require 'cl))
+(eval-when-compile
+  (require 'cl)
+  (require 'smtp)
+  )
 
 (require 'mailheader)
 (require 'nnheader)
+(require 'timezone)
 (require 'easymenu)
 (require 'custom)
 (if (string-match "XEmacs\\|Lucid" emacs-version)
     (require 'mail-abbrevs)
   (require 'mailabbrev))
-(require 'mail-parse)
-(require 'mm-bodies)
-(require 'mm-encode)
+(require 'mime-edit)
 
 (defgroup message '((user-mail-address custom-variable)
                    (user-full-name custom-variable))
@@ -124,6 +127,11 @@ mailbox format."
                (function :tag "Other"))
   :group 'message-sending)
 
+(defcustom message-encode-function 'message-maybe-encode
+  "*A function called to encode messages."
+  :group 'message-sending
+  :type 'function)
+
 (defcustom message-courtesy-message
   "The following message is a courtesy copy of an article\nthat has been posted to %s as well.\n\n"
   "*This is inserted at the start of a mailed copy of a posted message.
@@ -174,11 +182,11 @@ shorten-followup-to existing-newsgroups buffer-file-name unchanged."
 (defcustom message-required-news-headers
   '(From Newsgroups Subject Date Message-ID
         (optional . Organization) Lines
-        (optional . User-Agent))
+        (optional . X-Newsreader))
   "*Headers to be generated or prompted for when posting an article.
 RFC977 and RFC1036 require From, Date, Newsgroups, Subject,
 Message-ID.  Organization, Lines, In-Reply-To, Expires, and
-User-Agent are optional.  If don't you want message to insert some
+X-Newsreader are optional.  If don't you want message to insert some
 header, remove it from this list."
   :group 'message-news
   :group 'message-headers
@@ -186,10 +194,10 @@ header, remove it from this list."
 
 (defcustom message-required-mail-headers
   '(From Subject Date (optional . In-Reply-To) Message-ID Lines
-        (optional . User-Agent))
+        (optional . X-Mailer))
   "*Headers to be generated or prompted for when mailing a message.
 RFC822 required that From, Date, To, Subject and Message-ID be
-included.  Organization, Lines and User-Agent are optional."
+included.  Organization, Lines and X-Mailer are optional."
   :group 'message-mail
   :group 'message-headers
   :type '(repeat sexp))
@@ -212,7 +220,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:\\|^NNTP-Posting-Date:\\|^X-Trace:\\|^X-Complaints-To:"
+(defcustom message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-Complaints-To:\\|Return-Path:\\|^Supersedes:"
   "*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."
@@ -242,15 +250,14 @@ nil means let mailer mail back a message to report errors."
   :group 'message-mail
   :type 'boolean)
 
-(defcustom message-generate-new-buffers 'unique
+(defcustom message-generate-new-buffers t
   "*Non-nil means that a new message buffer will be created whenever `message-setup' is called.
 If this is a function, call that function with three parameters:  The type,
 the to address and the group name.  (Any of these may be nil.)  The function
 should return the new buffer name."
   :group 'message-buffers
   :type '(choice (const :tag "off" nil)
-                (const :tag "unique" unique)
-                (const :tag "unsuniqueent" unsent)
+                (const :tag "on" t)
                 (function fun)))
 
 (defcustom message-kill-buffer-on-exit nil
@@ -278,13 +285,13 @@ If t, use `message-user-organization-file'."
   :group 'message-headers)
 
 (defcustom message-forward-start-separator
-  "------- Start of forwarded message -------\n"
+  (concat (mime-make-tag "message" "rfc822") "\n")
   "*Delimiter inserted before forwarded messages."
   :group 'message-forwarding
   :type 'string)
 
 (defcustom message-forward-end-separator
-  "------- End of forwarded message -------\n"
+  ""
   "*Delimiter inserted after forwarded messages."
   :group 'message-forwarding
   :type 'string)
@@ -300,28 +307,7 @@ If t, use `message-user-organization-file'."
   :group 'message-forwarding
   :type 'regexp)
 
-(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.
-The subject generated by the previous function is passed into each
-successive function.
-
-The provided functions are:
-
-* message-forward-subject-author-subject (Source of article (author or
-      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)))
-
-(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
-  :type 'boolean)
-
-(defcustom message-ignored-resent-headers "^Return-receipt\\|^X-Gnus"
+(defcustom message-ignored-resent-headers "^Return-receipt"
   "*All headers that match this regexp will be deleted when resending a message."
   :group 'message-interface
   :type 'regexp)
@@ -345,16 +331,17 @@ variable `mail-header-separator'.
 
 Legal values include `message-send-mail-with-sendmail' (the default),
 `message-send-mail-with-mh', `message-send-mail-with-qmail' and
-`smtpmail-send-it'."
+`message-send-mail-with-smtp'."
   :type '(radio (function-item message-send-mail-with-sendmail)
                (function-item message-send-mail-with-mh)
                (function-item message-send-mail-with-qmail)
-               (function-item smtpmail-send-it)
+               (function-item message-send-mail-with-smtp)
                (function :tag "Other"))
   :group 'message-sending
   :group 'message-mail)
 
-(defcustom message-send-news-function 'message-send-news
+;; 1997-09-29 by MORIOKA Tomohiko
+(defcustom message-send-news-function 'message-send-news-with-gnus
   "Function to call to send the current buffer as news.
 The headers should be delimited by a line whose contents match the
 variable `mail-header-separator'."
@@ -421,7 +408,6 @@ might set this variable to '(\"-f\" \"you@some.where\")."
 (defvar gnus-select-method)
 (defcustom message-post-method
   (cond ((and (boundp 'gnus-post-method)
-             (listp gnus-post-method)
              gnus-post-method)
         gnus-post-method)
        ((boundp 'gnus-select-method)
@@ -441,7 +427,8 @@ variable isn't used."
   :group 'message-headers
   :type 'boolean)
 
-(defcustom message-setup-hook nil
+(defcustom message-setup-hook
+  '(message-maybe-setup-default-charset turn-on-mime-edit)
   "Normal hook, run each time a new outgoing message is initialized.
 The function `message-setup' runs this hook."
   :group 'message-various
@@ -459,7 +446,7 @@ the signature is inserted."
   :group 'message-various
   :type 'hook)
 
-(defcustom message-header-hook nil
+(defcustom message-header-hook '(eword-encode-header)
   "Hook run in a message mode buffer narrowed to the headers."
   :group 'message-various
   :type 'hook)
@@ -489,12 +476,16 @@ Used by `message-yank-original' via `message-yank-cite'."
   :type 'integer)
 
 ;;;###autoload
-(defcustom message-cite-function 'message-cite-original
+(defcustom message-cite-function
+  (if (and (boundp 'mail-citation-hook)
+          mail-citation-hook)
+      mail-citation-hook
+    'message-cite-original)
   "*Function for citing an original message.
-Predefined functions include `message-cite-original' and
-`message-cite-original-without-signature'.
-Note that `message-cite-original' uses `mail-citation-hook' if that is non-nil."
+Pre-defined functions include `message-cite-original' and
+`message-cite-original-without-signature'."
   :type '(radio (function-item message-cite-original)
+               (function-item message-cite-original-without-signature)
                (function-item sc-cite-original)
                (function :tag "Other"))
   :group 'message-insertion)
@@ -647,20 +638,13 @@ the prefix.")
 The default is `abbrev', which uses mailabbrev.  nil switches
 mail aliases off.")
 
-(defcustom message-auto-save-directory
+(defcustom message-autosave-directory
   (nnheader-concat message-directory "drafts/")
-  "*Directory where Message auto-saves buffers if Gnus isn't running.
-If nil, Message won't auto-save."
+  "*Directory where Message autosaves buffers if Gnus isn't running.
+If nil, Message won't autosave."
   :group 'message-buffers
   :type 'directory)
 
-(defcustom message-buffer-naming-style 'unique
-  "*The way new message buffers are named.
-Valid valued are `unique' and `unsent'."
-  :group 'message-buffers
-  :type '(choice (const :tag "unique" unique)
-                (const :tag "unsent" unsent)))
-
 ;;; Internal variables.
 ;;; Well, not really internal.
 
@@ -853,17 +837,12 @@ The cdr of ech entry is a function for applying the face to a region.")
   :group 'message-various
   :type 'hook)
 
-(defvar message-send-coding-system 'binary
-  "Coding system to encode outgoing mail.")
-
 ;;; Internal variables.
 
-(defvar message-default-charset nil)
 (defvar message-buffer-list nil)
 (defvar message-this-is-news nil)
 (defvar message-this-is-mail nil)
 (defvar message-draft-article nil)
-(defvar message-mime-part nil)
 
 ;; Byte-compiler warning
 (defvar gnus-active-hashtb)
@@ -949,7 +928,8 @@ The cdr of ech entry is a function for applying the face to a region.")
     (Expires)
     (Message-ID)
     (References . message-shorten-references)
-    (User-Agent))
+    (X-Mailer)
+    (X-Newsreader))
   "Alist used for formatting headers.")
 
 (eval-and-compile
@@ -959,6 +939,7 @@ The cdr of ech entry is a function for applying the face to a region.")
   (autoload 'gnus-point-at-eol "gnus-util")
   (autoload 'gnus-point-at-bol "gnus-util")
   (autoload 'gnus-output-to-mail "gnus-util")
+  (autoload 'gnus-output-to-rmail "gnus-util")
   (autoload 'mail-abbrev-in-expansion-header-p "mailabbrev")
   (autoload 'nndraft-request-associate-buffer "nndraft")
   (autoload 'nndraft-request-expire-articles "nndraft")
@@ -1006,12 +987,12 @@ The cdr of ech entry is a function for applying the face to a region.")
                               (not paren))))
                 (push (buffer-substring beg (point)) elems)
                 (setq beg (match-end 0)))
-               ((eq (char-after) ?\")
+               ((= (following-char) ?\")
                 (setq quoted (not quoted)))
-               ((and (eq (char-after) ?\()
+               ((and (= (following-char) ?\()
                      (not quoted))
                 (setq paren t))
-               ((and (eq (char-after) ?\))
+               ((and (= (following-char) ?\))
                      (not quoted))
                 (setq paren nil))))
        (nreverse elems)))))
@@ -1021,7 +1002,7 @@ The cdr of ech entry is a function for applying the face to a region.")
   (when (and (file-exists-p file)
             (file-readable-p file)
             (file-regular-p file))
-    (with-temp-buffer
+    (nnheader-temp-write nil
       (nnheader-insert-file-contents file)
       (goto-char (point-min))
       (looking-at message-unix-mail-delimiter))))
@@ -1031,23 +1012,7 @@ The cdr of ech entry is a function for applying the face to a region.")
   (let* ((inhibit-point-motion-hooks 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)))
-      value)))
-
-(defun message-narrow-to-field ()
-  "Narrow the buffer to the header on the current line."
-  (beginning-of-line)
-  (narrow-to-region
-   (point)
-   (progn
-     (forward-line 1)
-     (if (re-search-forward "^[^ \n\t]" nil t)
-        (progn
-          (beginning-of-line)
-          (point))
-       (point-max))))
-  (goto-char (point-min)))
+      (nnheader-replace-chars-in-string value ?\n ? ))))
 
 (defun message-add-header (&rest headers)
   "Add the HEADERS to the message header, skipping those already present."
@@ -1077,7 +1042,7 @@ The cdr of ech entry is a function for applying the face to a region.")
        (erase-buffer))
     (set-buffer (get-buffer-create " *message work*"))
     (kill-all-local-variables)
-    (mm-enable-multibyte)))
+    (buffer-disable-undo (current-buffer))))
 
 (defun message-functionp (form)
   "Return non-nil if FORM is funcallable."
@@ -1137,8 +1102,7 @@ Return the number of headers removed."
   (goto-char (point-min)))
 
 (defun message-narrow-to-head ()
-  "Narrow the buffer to the head of the message.
-Point is left at the beginning of the narrowed-to region."
+  "Narrow the buffer to the head of the message."
   (widen)
   (narrow-to-region
    (goto-char (point-min))
@@ -1147,21 +1111,6 @@ Point is left at the beginning of the narrowed-to region."
      (point-max)))
   (goto-char (point-min)))
 
-(defun message-narrow-to-headers-or-head ()
-  "Narrow the buffer to the head of the message."
-  (widen)
-  (narrow-to-region
-   (goto-char (point-min))
-   (cond
-    ((re-search-forward
-      (concat "^" (regexp-quote mail-header-separator) "\n") nil t)
-     (match-beginning 0))
-    ((search-forward "\n\n" nil t)
-     (1- (point)))
-    (t
-     (point-max))))
-  (goto-char (point-min)))
-
 (defun message-news-p ()
   "Say whether the current buffer contains a news message."
   (and (not message-this-is-mail)
@@ -1236,8 +1185,7 @@ Point is left at the beginning of the narrowed-to region."
 (defvar message-mode-map nil)
 
 (unless message-mode-map
-  (setq message-mode-map (make-keymap))
-  (set-keymap-parent message-mode-map text-mode-map)
+  (setq message-mode-map (copy-keymap text-mode-map))
   (define-key message-mode-map "\C-c?" 'describe-mode)
 
   (define-key message-mode-map "\C-c\C-f\C-t" 'message-goto-to)
@@ -1274,8 +1222,6 @@ Point is left at the beginning of the narrowed-to region."
   (define-key message-mode-map "\C-c\C-z" 'message-kill-to-signature)
   (define-key message-mode-map "\M-\r" 'message-newline-and-reformat)
 
-  (define-key message-mode-map "\C-c\C-a" 'message-insert-mime-part)
-
   (define-key message-mode-map "\t" 'message-tab))
 
 (easy-menu-define
@@ -1339,12 +1285,12 @@ C-c C-w  message-insert-signature (insert `message-signature-file' file).
 C-c C-y  message-yank-original (insert current message, if any).
 C-c C-q  message-fill-yanked-message (fill what was yanked).
 C-c C-e  message-elide-region (elide the text between point and mark).
-C-c C-v  message-delete-not-region (remove the text outside the region).
 C-c C-z  message-kill-to-signature (kill the text up to the signature).
 C-c C-r  message-caesar-buffer-body (rot13 the message body)."
   (interactive)
   (kill-all-local-variables)
-  (set (make-local-variable 'message-reply-buffer) nil)
+  (make-local-variable 'message-reply-buffer)
+  (setq message-reply-buffer nil)
   (make-local-variable 'message-send-actions) 
   (make-local-variable 'message-exit-actions) 
   (make-local-variable 'message-kill-actions)
@@ -1386,9 +1332,10 @@ C-c C-r  message-caesar-buffer-body (rot13 the message body)."
   (make-local-variable 'message-newsreader)
   (make-local-variable 'message-mailer)
   (make-local-variable 'message-post-method)
-  (set (make-local-variable 'message-sent-message-via) nil)
-  (set (make-local-variable 'message-checksum) nil)
-  (set (make-local-variable 'message-mime-part) 0)
+  (make-local-variable 'message-sent-message-via)
+  (setq message-sent-message-via nil)
+  (make-local-variable 'message-checksum)
+  (setq message-checksum nil)
   ;;(when (fboundp 'mail-hist-define-keys)
   ;;  (mail-hist-define-keys))
   (when (string-match "XEmacs\\|Lucid" emacs-version)
@@ -1413,7 +1360,6 @@ C-c C-r  message-caesar-buffer-body (rot13 the message body)."
   (setq adaptive-fill-first-line-regexp
        (concat "[ \t]*[-a-z0-9A-Z]*>+[ \t]*\\|"
                adaptive-fill-first-line-regexp))
-  (mm-enable-multibyte)
   (run-hooks 'text-mode-hook 'message-mode-hook))
 
 \f
@@ -1486,22 +1432,13 @@ C-c C-r  message-caesar-buffer-body (rot13 the message body)."
   (goto-char (point-min))
   (search-forward (concat "\n" mail-header-separator "\n") nil t))
 
-(defun message-goto-eoh ()
-  "Move point to the end of the headers."
-  (interactive)
-  (message-goto-body)
-  (forward-line -2))
-
 (defun message-goto-signature ()
-  "Move point to the beginning of the message signature.
-If there is no signature in the article, go to the end and
-return nil."
+  "Move point to the beginning of the message signature."
   (interactive)
   (goto-char (point-min))
   (if (re-search-forward message-signature-separator nil t)
       (forward-line 1)
-    (goto-char (point-max))
-    nil))
+    (goto-char (point-max))))
 
 \f
 
@@ -1514,8 +1451,7 @@ With the prefix argument FORCE, insert the header anyway."
   (let ((co (message-fetch-reply-field "mail-copies-to")))
     (when (and (null force)
               co
-              (or (equal (downcase co) "never")
-                  (equal (downcase co) "nobody")))
+              (equal (downcase co) "never"))
       (error "The user has requested not to have copies sent via mail")))
   (when (and (message-position-on-field "To")
             (mail-fetch-field "to")
@@ -1542,17 +1478,16 @@ With the prefix argument FORCE, insert the header anyway."
   (interactive "r")
   (save-excursion
     (goto-char end)
-    (delete-region (point) (if (not (message-goto-signature))
-                              (point)
-                            (forward-line -2)
-                            (point)))
+    (delete-region (point) (progn (message-goto-signature)
+                                 (forward-line -2)
+                                 (point)))
     (insert "\n")
     (goto-char beg)
     (delete-region beg (progn (message-goto-body)
                              (forward-line 2)
                              (point))))
-  (when (message-goto-signature)
-    (forward-line -2)))
+  (message-goto-signature)
+  (forward-line -2))
 
 (defun message-kill-to-signature ()
   "Deletes all text up to the signature."
@@ -1650,10 +1585,9 @@ text was killed."
     ;; 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))))
+      (subst-char-in-region
+       b (1+ b) (char-after b)
+       (aref message-caesar-translation-table (char-after b)))
       (incf b))))
 
 (defun message-make-caesar-translation-table (n)
@@ -1811,11 +1745,6 @@ prefix, and don't delete any headers."
             (list message-indent-citation-function)))))
     (goto-char end)
     (when (re-search-backward "^-- $" start t)
-      ;; Also peel off any blank lines before the signature.
-      (forward-line -1)
-      (while (looking-at "^[ \t]*$")
-       (forward-line -1))
-      (forward-line 1)
       (delete-region (point) end))
     (goto-char start)
     (while functions
@@ -1825,25 +1754,21 @@ prefix, and don't delete any headers."
        (insert "\n"))
       (funcall message-citation-line-function))))
 
-(defvar mail-citation-hook) ;Compiler directive
 (defun message-cite-original ()
   "Cite function in the standard Message manner."
-  (if (and (boundp 'mail-citation-hook)
-          mail-citation-hook)
-      (run-hooks 'mail-citation-hook)
-    (let ((start (point))
-         (functions
-          (when message-indent-citation-function
-            (if (listp message-indent-citation-function)
-                message-indent-citation-function
-              (list message-indent-citation-function)))))
-      (goto-char start)
-      (while functions
-       (funcall (pop functions)))
-      (when message-citation-line-function
-       (unless (bolp)
-         (insert "\n"))
-       (funcall message-citation-line-function)))))
+  (let ((start (point))
+       (functions
+        (when message-indent-citation-function
+          (if (listp message-indent-citation-function)
+              message-indent-citation-function
+            (list message-indent-citation-function)))))
+    (goto-char start)
+    (while functions
+      (funcall (pop functions)))
+    (when message-citation-line-function
+      (unless (bolp)
+       (insert "\n"))
+      (funcall message-citation-line-function))))
 
 (defun message-insert-citation-line ()
   "Function that inserts a simple citation line."
@@ -1918,8 +1843,7 @@ The text will also be indented the normal way."
        (bury-buffer buf)
        (when (eq buf (current-buffer))
          (message-bury buf)))
-      (message-do-actions actions)
-      t)))
+      (message-do-actions actions))))
 
 (defun message-dont-send ()
   "Don't send the message you have been editing."
@@ -1957,42 +1881,55 @@ or error messages, and inform user.
 Otherwise any failure is reported in a message back to
 the user from the mailer."
   (interactive "P")
-  ;; Make it possible to undo the coming changes.
-  (undo-boundary)
-  (let ((inhibit-read-only t))
-    (put-text-property (point-min) (point-max) 'read-only nil))
-  (message-fix-before-sending)
-  (run-hooks 'message-send-hook)
-  (message "Sending...")
-  (let ((alist message-send-method-alist)
-       (success t)
-       elem sent)
-    (while (and success
-               (setq elem (pop alist)))
-      (when (and (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 (and success sent)
-      (message-do-fcc)
-      ;;(when (fboundp 'mail-hist-put-headers-into-history)
-      ;; (mail-hist-put-headers-into-history))
-      (run-hooks 'message-sent-hook)
-      (message "Sending...done")
-      ;; Mark the buffer as unmodified and delete auto-save.
-      (set-buffer-modified-p nil)
-      (delete-auto-save-file-if-necessary t)
-      (message-disassociate-draft)
-      ;; Delete other mail buffers and stuff.
-      (message-do-send-housekeeping)
-      (message-do-actions message-send-actions)
-      ;; Return success.
-      t)))
+  ;; Disabled test.
+  (when (or (buffer-modified-p)
+           (message-check-element 'unchanged)
+           (y-or-n-p "No changes in the buffer; really send? "))
+    ;; Make it possible to undo the coming changes.
+    (undo-boundary)
+    (let ((inhibit-read-only t))
+      (put-text-property (point-min) (point-max) 'read-only nil))
+    (message-fix-before-sending)
+    (run-hooks 'message-send-hook)
+    (message "Sending...")
+    (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)
+      (save-excursion
+       (set-buffer message-encoding-buffer)
+       (erase-buffer)
+       (insert-buffer message-edit-buffer)
+       (funcall message-encode-function)
+       (while (and success
+                   (setq elem (pop alist)))
+         (when (and (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 (and success sent)
+       (message-do-fcc)
+       ;;(when (fboundp 'mail-hist-put-headers-into-history)
+       ;; (mail-hist-put-headers-into-history))
+       (run-hooks 'message-sent-hook)
+       (message "Sending...done")
+       ;; Mark the buffer as unmodified and delete autosave.
+       (set-buffer-modified-p nil)
+       (delete-auto-save-file-if-necessary t)
+       (message-disassociate-draft)
+       ;; Delete other mail buffers and stuff.
+       (message-do-send-housekeeping)
+       (message-do-actions message-send-actions)
+       ;; Return success.
+       t))))
 
 (defun message-send-via-mail (arg)
   "Send the current message via mail."
@@ -2000,29 +1937,14 @@ the user from the mailer."
 
 (defun message-send-via-news (arg)
   "Send the current message via news."
-  (funcall message-send-news-function arg))
-
-(defmacro message-check (type &rest forms)
-  "Eval FORMS if TYPE is to be checked."
-  `(or (message-check-element ,type)
-       (save-excursion
-        ,@forms)))
-
-(put 'message-check 'lisp-indent-function 1)
-(put 'message-check 'edebug-form-spec '(form body))
+  (message-send-news arg))
 
 (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.
   (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")))))
+    (insert "\n")))
 
 (defun message-add-action (action &rest types)
   "Add ACTION to be performed when doing an exit of type TYPES."
@@ -2049,27 +1971,20 @@ the user from the mailer."
   (require 'mail-utils)
   (let ((tembuf (message-generate-new-buffer-clone-locals " message temp"))
        (case-fold-search nil)
-       (news (message-news-p))
-       (mailbuf (current-buffer)))
+       (news (message-news-p)))
     (save-restriction
       (message-narrow-to-headers)
       ;; Insert some headers.
       (let ((message-deletable-headers
             (if news nil message-deletable-headers)))
        (message-generate-headers message-required-mail-headers))
-      (mail-encode-encoded-word-buffer)
       ;; Let the user do all of the above.
       (run-hooks 'message-header-hook))
-    (message-encode-message-body)
     (unwind-protect
        (save-excursion
          (set-buffer tembuf)
          (erase-buffer)
-         ;; Avoid copying text props.
-         (insert (format
-                  "%s" (save-excursion
-                         (set-buffer mailbuf)
-                         (buffer-string))))
+         (insert-buffer message-encoding-buffer)
          ;; Remove some headers.
          (save-restriction
            (message-narrow-to-headers)
@@ -2083,9 +1998,15 @@ the user from the mailer."
                     (or (message-fetch-field "cc")
                         (message-fetch-field "to")))
            (message-insert-courtesy-copy))
+         (mime-edit-maybe-split-and-send
+          (function
+           (lambda ()
+             (interactive)
+             (funcall message-send-mail-function)
+             )))
          (funcall message-send-mail-function))
       (kill-buffer tembuf))
-    (set-buffer mailbuf)
+    (set-buffer message-edit-buffer)
     (push 'mail message-sent-message-via)))
 
 (defun message-send-mail-with-sendmail ()
@@ -2116,7 +2037,7 @@ the user from the mailer."
          (set-buffer errbuf)
          (erase-buffer))))
     (let ((default-directory "/")
-         (coding-system-for-write message-send-coding-system))
+         (coding-system-for-write 'binary))
       (apply 'call-process-region
             (append (list (point-min) (point-max)
                           (if (boundp 'sendmail-program)
@@ -2164,7 +2085,7 @@ to find out how to use this."
   (run-hooks 'message-send-mail-hook)
   ;; send the message
   (case
-      (let ((coding-system-for-write message-send-coding-system))
+      (let ((coding-system-for-write 'binary))
        (apply
         'call-process-region 1 (point-max) message-qmail-inject-program
         nil nil nil
@@ -2212,13 +2133,151 @@ to find out how to use this."
     ;; Pass it on to mh.
     (mh-send-letter)))
 
+(defun message-send-mail-with-smtp ()
+  "Send the prepared message buffer with SMTP."
+  (require 'smtp)
+  (let ((errbuf (if mail-interactive
+                   (generate-new-buffer " smtp errors")
+                 0))
+       (case-fold-search nil)
+       resend-to-addresses
+       delimline)
+    (unwind-protect
+       (save-excursion
+         (goto-char (point-max))
+         ;; require one newline at the end.
+         (or (= (preceding-char) ?\n)
+             (insert ?\n))
+         ;; Change header-delimiter to be what sendmail expects.
+         (goto-char (point-min))
+         (re-search-forward
+          (concat "^" (regexp-quote mail-header-separator) "\n"))
+         (replace-match "\n")
+         (backward-char 1)
+         (setq delimline (point-marker))
+         (run-hooks 'message-send-mail-hook)
+         ;; (sendmail-synch-aliases)
+          ;; (if mail-aliases
+          ;;     (expand-mail-aliases (point-min) delimline))
+         (goto-char (point-min))
+         ;; ignore any blank lines in the header
+         (while (and (re-search-forward "\n\n\n*" delimline t)
+                     (< (point) delimline))
+           (replace-match "\n"))
+         (let ((case-fold-search t))
+           (goto-char (point-min))
+           (goto-char (point-min))
+           (while (re-search-forward "^Resent-to:" delimline t)
+             (setq resend-to-addresses
+                   (save-restriction
+                     (narrow-to-region (point)
+                                       (save-excursion
+                                         (end-of-line)
+                                         (point)))
+                     (append (mail-parse-comma-list)
+                             resend-to-addresses))))
+;;; Apparently this causes a duplicate Sender.
+;;;        ;; If the From is different than current user, insert Sender.
+;;;        (goto-char (point-min))
+;;;        (and (re-search-forward "^From:"  delimline t)
+;;;             (progn
+;;;               (require 'mail-utils)
+;;;               (not (string-equal
+;;;                     (mail-strip-quoted-names
+;;;                      (save-restriction
+;;;                        (narrow-to-region (point-min) delimline)
+;;;                        (mail-fetch-field "From")))
+;;;                     (user-login-name))))
+;;;             (progn
+;;;               (forward-line 1)
+;;;               (insert "Sender: " (user-login-name) "\n")))
+           ;; Don't send out a blank subject line
+           (goto-char (point-min))
+           (if (re-search-forward "^Subject:[ \t]*\n" delimline t)
+               (replace-match ""))
+           ;; Put the "From:" field in unless for some odd reason
+           ;; they put one in themselves.
+           (goto-char (point-min))
+           (if (not (re-search-forward "^From:" delimline t))
+               (let* ((login user-mail-address)
+                      (fullname (user-full-name)))
+                 (cond ((eq mail-from-style 'angles)
+                        (insert "From: " fullname)
+                        (let ((fullname-start (+ (point-min) 6))
+                              (fullname-end (point-marker)))
+                          (goto-char fullname-start)
+                          ;; Look for a character that cannot appear unquoted
+                          ;; according to RFC 822.
+                          (if (re-search-forward "[^- !#-'*+/-9=?A-Z^-~]"
+                                                 fullname-end 1)
+                              (progn
+                                ;; Quote fullname, escaping specials.
+                                (goto-char fullname-start)
+                                (insert "\"")
+                                (while (re-search-forward "[\"\\]"
+                                                          fullname-end 1)
+                                  (replace-match "\\\\\\&" t))
+                                (insert "\""))))
+                        (insert " <" login ">\n"))
+                       ((eq mail-from-style 'parens)
+                        (insert "From: " login " (")
+                        (let ((fullname-start (point)))
+                          (insert fullname)
+                          (let ((fullname-end (point-marker)))
+                            (goto-char fullname-start)
+                            ;; RFC 822 says \ and nonmatching parentheses
+                            ;; must be escaped in comments.
+                            ;; Escape every instance of ()\ ...
+                            (while (re-search-forward "[()\\]" fullname-end 1)
+                              (replace-match "\\\\\\&" t))
+                            ;; ... then undo escaping of matching parentheses,
+                            ;; including matching nested parentheses.
+                            (goto-char fullname-start)
+                            (while (re-search-forward 
+                                    "\\(\\=\\|[^\\]\\(\\\\\\\\\\)*\\)\\\\(\\(\\([^\\]\\|\\\\\\\\\\)*\\)\\\\)"
+                                    fullname-end 1)
+                              (replace-match "\\1(\\3)" t)
+                              (goto-char fullname-start))))
+                        (insert ")\n"))
+                       ((null mail-from-style)
+                        (insert "From: " login "\n")))))
+           ;; Insert an extra newline if we need it to work around
+           ;; Sun's bug that swallows newlines.
+           (goto-char (1+ delimline))
+           (if (eval mail-mailer-swallows-blank-line)
+               (newline))
+           ;; Find and handle any FCC fields.
+           (goto-char (point-min))
+           (if (re-search-forward "^FCC:" delimline t)
+               (mail-do-fcc delimline))
+           (if mail-interactive
+               (save-excursion
+                 (set-buffer errbuf)
+                 (erase-buffer))))
+         ;;
+         ;;
+         ;;
+         (let ((recipient-address-list
+                (or resend-to-addresses
+                    (smtp-deduce-address-list (current-buffer)
+                                              (point-min) delimline))))
+           (smtp-do-bcc delimline)
+           
+           (if recipient-address-list
+               (if (not (smtp-via-smtp recipient-address-list
+                                       (current-buffer)))
+                   (error "Sending failed; SMTP protocol error"))
+             (error "Sending failed; no recipients"))
+           ))
+      (if (bufferp errbuf)
+         (kill-buffer errbuf)))))
+
 (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))
-       (messbuf (current-buffer))
        (message-syntax-checks
         (if arg
             (cons '(existing-newsgroups . disabled)
@@ -2229,23 +2288,19 @@ to find out how to use this."
       (message-narrow-to-headers)
       ;; Insert some headers.
       (message-generate-headers message-required-news-headers)
-      (mail-encode-encoded-word-buffer)
       ;; Let the user do all of the above.
       (run-hooks 'message-header-hook))
     (message-cleanup-headers)
     (if (not (message-check-news-syntax))
-       nil
-      (message-encode-message-body)
+       (progn
+         ;;(message "Posting not performed")
+         nil)
       (unwind-protect
          (save-excursion
            (set-buffer tembuf)
-           (buffer-disable-undo)
+           (buffer-disable-undo (current-buffer))
            (erase-buffer)
-           ;; Avoid copying text props.
-           (insert (format
-                    "%s" (save-excursion
-                           (set-buffer messbuf)
-                           (buffer-string))))
+           (insert-buffer message-encoding-buffer)
            ;; Remove some headers.
            (save-restriction
              (message-narrow-to-headers)
@@ -2255,34 +2310,61 @@ to find out how to use this."
            ;; require one newline at the end.
            (or (= (preceding-char) ?\n)
                (insert ?\n))
-           (let ((case-fold-search t))
-             ;; Remove the delimiter.
-             (goto-char (point-min))
-             (re-search-forward
-              (concat "^" (regexp-quote mail-header-separator) "\n"))
-             (replace-match "\n")
-             (backward-char 1))
-           (run-hooks 'message-send-news-hook)
-           ;;(require (car method))
-           ;;(funcall (intern (format "%s-open-server" (car method)))
-           ;;(cadr method) (cddr method))
-           ;;(setq result
-           ;;    (funcall (intern (format "%s-request-post" (car method)))
-           ;;             (cadr method)))
-           (gnus-open-server method)
-           (setq result (gnus-request-post method)))
+           (mime-edit-maybe-split-and-send
+            (function
+             (lambda ()
+               (interactive)
+               (save-restriction
+                 (std11-narrow-to-header mail-header-separator)
+                 (goto-char (point-min))
+                 (when (re-search-forward "^Message-Id:" nil t)
+                   (delete-region (match-end 0)(std11-field-end))
+                   (insert (concat " " (message-make-message-id)))
+                   ))
+               (funcall message-send-news-function method)
+               )))
+           (setq result (funcall message-send-news-function method)))
        (kill-buffer tembuf))
-      (set-buffer messbuf)
+      (set-buffer message-edit-buffer)
       (if result
          (push 'news message-sent-message-via)
        (message "Couldn't send message via news: %s"
                 (nnheader-get-report (car method)))
        nil))))
 
+;; 1997-09-29 by MORIOKA Tomohiko
+(defun message-send-news-with-gnus (method)
+  (let ((case-fold-search t))
+    ;; Remove the delimiter.
+    (goto-char (point-min))
+    (re-search-forward
+     (concat "^" (regexp-quote mail-header-separator) "\n"))
+    (replace-match "\n")
+    (backward-char 1)
+    (run-hooks 'message-send-news-hook)
+    ;;(require (car method))
+    ;;(funcall (intern (format "%s-open-server" (car method)))
+    ;;(cadr method) (cddr method))
+    ;;(setq result
+    ;;   (funcall (intern (format "%s-request-post" (car method)))
+    ;;            (cadr method)))
+    (gnus-open-server method)
+    (gnus-request-post method)
+    ))
+
 ;;;
 ;;; Header generation & syntax checking.
 ;;;
 
+(defmacro message-check (type &rest forms)
+  "Eval FORMS if TYPE is to be checked."
+  `(or (message-check-element ,type)
+       (save-excursion
+        ,@forms)))
+
+(put 'message-check 'lisp-indent-function 1)
+(put 'message-check 'edebug-form-spec '(form body))
+
 (defun message-check-element (type)
   "Returns non-nil if this type is not to be checked."
   (if (eq message-syntax-checks 'dont-check-for-anything-just-trust-me)
@@ -2303,7 +2385,9 @@ to find out how to use this."
           (message-narrow-to-headers)
           (message-check-news-header-syntax)))
        ;; Check the body.
-       (message-check-news-body-syntax)))))
+       (save-excursion
+        (set-buffer message-edit-buffer)
+        (message-check-news-body-syntax))))))
 
 (defun message-check-news-header-syntax ()
   (and
@@ -2515,7 +2599,7 @@ to find out how to use this."
           (y-or-n-p "Empty article.  Really post? "))))
    ;; Check for control characters.
    (message-check 'control-chars
-     (if (re-search-forward "[\000-\007\013\015-\032\034-\037\200-\237]" nil t)
+     (if (re-search-forward "[\000-\007\013\015-\037\200-\237]" nil t)
         (y-or-n-p
          "The article contains control characters.  Really post? ")
        t))
@@ -2556,24 +2640,26 @@ to find out how to use this."
       (while (not (eobp))
        (when (not (looking-at "[ \t\n]"))
          (setq sum (logxor (ash sum 1) (if (natnump sum) 0 1)
-                           (char-after))))
+                           (following-char))))
        (forward-char 1)))
     sum))
 
 (defun message-do-fcc ()
   "Process Fcc headers in the current buffer."
   (let ((case-fold-search t)
-       (buf (current-buffer))
+       (coding-system-for-write 'raw-text)
        list file)
     (save-excursion
       (set-buffer (get-buffer-create " *message temp*"))
+      (buffer-disable-undo (current-buffer))
       (erase-buffer)
-      (insert-buffer-substring buf)
+      (insert-buffer-substring message-encoding-buffer)
       (save-restriction
        (message-narrow-to-headers)
        (while (setq file (message-fetch-field "fcc"))
          (push file list)
          (message-remove-header "fcc" nil t)))
+      (run-hooks 'message-header-hook 'message-before-do-fcc-hook)
       (goto-char (point-min))
       (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$"))
       (replace-match "" t t)
@@ -2603,7 +2689,7 @@ to find out how to use this."
   "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 ()
@@ -2638,24 +2724,11 @@ to find out how to use this."
        (when (re-search-forward ",+$" nil t)
          (replace-match "" t t))))))
 
-(defun message-make-date (&optional now)
-  "Make a valid data header.
-If NOW, use that time instead."
-  (let* ((now (or now (current-time)))
-        (zone (nth 8 (decode-time now)))
-        (sign "+"))
-    (when (< zone 0)
-      (setq sign "-")
-      (setq zone (- zone)))
-    (concat
-     (format-time-string "%d" now)
-     ;; The month name of the %b spec is locale-specific.  Pfff.
-     (format " %s "
-            (capitalize (car (rassoc (nth 4 (decode-time now))
-                                     parse-time-months))))
-     (format-time-string "%Y %H:%M:%S " now)
-     ;; We do all of this because XEmacs doesn't have the %z spec.
-     (format "%s%02d%02d" sign (/ zone 3600) (% zone 3600)))))
+(defun message-make-date ()
+  "Make a valid data header."
+  (let ((now (current-time)))
+    (timezone-make-date-arpa-standard
+     (current-time-string now) (current-time-zone now))))
 
 (defun message-make-message-id ()
   "Make a unique Message-ID."
@@ -2780,7 +2853,9 @@ If NOW, use that time instead."
     ;; Add the future to current.
     (setcar current (+ (car current) (round (/ future (expt 2 16)))))
     (setcar (cdr current) (+ (nth 1 current) (% (round future) (expt 2 16))))
-    (message-make-date current)))
+    ;; Return the date in the future in UT.
+    (timezone-make-date-arpa-standard
+     (current-time-string current) (current-time-zone current) '(0 "UT"))))
 
 (defun message-make-path ()
   "Return uucp path."
@@ -2918,7 +2993,9 @@ Headers already prepared in the buffer are not modified."
           (To nil)
           (Distribution (message-make-distribution))
           (Lines (message-make-lines))
-          (User-Agent message-newsreader)
+          (X-Newsreader message-newsreader)
+          (X-Mailer (and (not (message-fetch-field "X-Newsreader"))
+                         message-mailer))
           (Expires (message-make-expires))
           (case-fold-search t)
           header value elem)
@@ -2946,18 +3023,12 @@ Headers already prepared in the buffer are not modified."
              (setq header (car elem)))
          (setq header elem))
        (when (or (not (re-search-forward
-                       (concat "^"
-                               (regexp-quote
-                                (downcase
-                                 (if (stringp header)
-                                     header
-                                   (symbol-name header))))
-                               ":")
+                       (concat "^" (downcase (symbol-name header)) ":")
                        nil t))
                  (progn
                    ;; The header was found.  We insert a space after the
                    ;; colon, if there is none.
-                   (if (/= (char-after) ? ) (insert " ") (forward-char 1))
+                   (if (/= (following-char) ? ) (insert " ") (forward-char 1))
                    ;; Find out whether the header is empty...
                    (looking-at "[ \t]*$")))
          ;; So we find out what value we should insert.
@@ -2994,8 +3065,7 @@ Headers already prepared in the buffer are not modified."
                  (progn
                    ;; This header didn't exist, so we insert it.
                    (goto-char (point-max))
-                   (insert (if (stringp header) header (symbol-name header))
-                           ": " value "\n")
+                   (insert (symbol-name header) ": " value "\n")
                    (forward-line -1))
                ;; The value of this header was empty, so we clear
                ;; totally and insert the new value.
@@ -3066,7 +3136,7 @@ Headers already prepared in the buffer are not modified."
       (goto-char (point-min))
       (while (not (eobp))
        (skip-chars-forward "^,\"" (point-max))
-       (if (or (eq (char-after) ?,)
+       (if (or (= (following-char) ?,)
                (eobp))
            (when (not quoted)
              (if (and (> (current-column) 78)
@@ -3084,6 +3154,13 @@ Headers already prepared in the buffer are not modified."
     (widen)
     (forward-line 1)))
 
+(defun message-fill-references (header value)
+  (insert (capitalize (symbol-name header))
+         ": "
+         (std11-fill-msg-id-list-string
+          (if (consp value) (car value) value))
+         "\n"))
+
 (defun message-fill-header (header value)
   (let ((begin (point))
        (fill-column 990)
@@ -3110,7 +3187,7 @@ Headers already prepared in the buffer are not modified."
   (let ((max 988)
        (cut 4)
        refs)
-    (with-temp-buffer
+    (nnheader-temp-write nil
       (insert references)
       (goto-char (point-min))
       (while (re-search-forward "<[^>]+>" nil t)
@@ -3131,7 +3208,7 @@ Headers already prepared in the buffer are not modified."
     (search-backward ":" )
     (widen)
     (forward-char 1)
-    (if (eq (char-after) ? )
+    (if (= (following-char) ? )
        (forward-char 1)
       (insert " ")))
    (t
@@ -3150,7 +3227,7 @@ Headers already prepared in the buffer are not modified."
    ((message-functionp message-generate-new-buffers)
     (funcall message-generate-new-buffers type to group))
    ;; Generate a new buffer name The Message Way.
-   ((eq message-generate-new-buffers 'unique)
+   (message-generate-new-buffers
     (generate-new-buffer-name
      (concat "*" type
             (if to
@@ -3160,16 +3237,6 @@ Headers already prepared in the buffer are not modified."
               "")
             (if (and group (not (string= group ""))) (concat " on " group) "")
             "*")))
-   ((eq message-generate-new-buffers 'unsent)
-    (generate-new-buffer-name
-     (concat "*unsent " type
-            (if to
-                (concat " to "
-                        (or (car (mail-extract-address-components to))
-                            to) "")
-              "")
-            (if (and group (not (string= group ""))) (concat " on " group) "")
-            "*")))
    ;; Use standard name.
    (t
     (format "*%s message*" type))))
@@ -3185,9 +3252,9 @@ Headers already prepared in the buffer are not modified."
                     (not (y-or-n-p
                           "Message already being composed; erase? ")))
            (error "Message being composed")))
-      (set-buffer (pop-to-buffer name)))
-    (erase-buffer)
-    (message-mode)))
+      (set-buffer (pop-to-buffer name))))
+  (erase-buffer)
+  (message-mode))
 
 (defun message-do-send-housekeeping ()
   "Kill old message buffers."
@@ -3205,7 +3272,7 @@ Headers already prepared in the buffer are not modified."
   ;; Rename the buffer.
   (if message-send-rename-function
       (funcall message-send-rename-function)
-    (when (string-match "\\`\\*\\(unsent \\)?" (buffer-name))
+    (when (string-match "\\`\\*" (buffer-name))
       (rename-buffer
        (concat "*sent " (substring (buffer-name) (match-end 0))) t)))
   ;; Push the current buffer onto the list.
@@ -3276,12 +3343,12 @@ Headers already prepared in the buffer are not modified."
 
 (defun message-set-auto-save-file-name ()
   "Associate the message buffer with a file in the drafts directory."
-  (when message-auto-save-directory
+  (when message-autosave-directory
     (if (gnus-alive-p)
        (setq message-draft-article
              (nndraft-request-associate-buffer "drafts"))
       (setq buffer-file-name (expand-file-name "*message*"
-                                              message-auto-save-directory))
+                                              message-autosave-directory))
       (setq buffer-auto-save-file-name (make-auto-save-file-name)))
     (clear-visited-file-modtime)))
 
@@ -3301,8 +3368,7 @@ Headers already prepared in the buffer are not modified."
 (defun message-mail (&optional to subject
                               other-headers continue switch-function
                               yank-action send-actions)
-  "Start editing a mail message to be sent.
-OTHER-HEADERS is an alist of header/value pairs."
+  "Start editing a mail message to be sent."
   (interactive)
   (let ((message-this-is-mail t))
     (message-pop-to-buffer (message-buffer-name "mail" to))
@@ -3363,12 +3429,10 @@ OTHER-HEADERS is an alist of header/value pairs."
 
       ;; Handle special values of Mail-Copies-To.
       (when mct
-       (cond ((or (equal (downcase mct) "never")
-                  (equal (downcase mct) "nobody"))
+       (cond ((equal (downcase mct) "never")
               (setq never-mct t)
               (setq mct nil))
-             ((or (equal (downcase mct) "always")
-                  (equal (downcase mct) "poster"))
+             ((equal (downcase mct) "always")
               (setq mct (or reply-to from)))))
 
       (unless follow-to
@@ -3535,10 +3599,8 @@ responses here are directed to other newsgroups."))
             `((References . ,(concat (or references "") (and references " ")
                                      (or message-id "")))))
        ,@(when (and mct
-                   (not (or (equal (downcase mct) "never")
-                            (equal (downcase mct) "nobody"))))
-          (list (cons 'Cc (if (or (equal (downcase mct) "always")
-                                  (equal (downcase mct) "poster"))
+                   (not (equal (downcase mct) "never")))
+          (list (cons 'Cc (if (equal (downcase mct) "always")
                               (or reply-to from "")
                             mct)))))
 
@@ -3566,17 +3628,18 @@ responses here are directed to other newsgroups."))
                message-id (message-fetch-field "message-id" t)
                distribution (message-fetch-field "distribution")))
        ;; Make sure that this article was written by the user.
-       (unless (or (and sender
-                        (string-equal
-                         (downcase sender)
-                         (downcase (message-make-sender))))
-                   (string-equal
-                    (downcase (cadr (mail-extract-address-components from)))
-                    (downcase (cadr (mail-extract-address-components
-                                     (message-make-from))))))
+       (unless (or (and sender
+                        (string-equal
+                         (downcase sender)
+                         (downcase (message-make-sender))))
+                   (string-equal
+                    (downcase (cadr (mail-extract-address-components from)))
+                    (downcase (cadr (mail-extract-address-components
+                                     (message-make-from))))))
          (error "This article is not yours"))
        ;; Make control message.
        (setq buf (set-buffer (get-buffer-create " *message cancel*")))
+       (buffer-disable-undo (current-buffer))
        (erase-buffer)
        (insert "Newsgroups: " newsgroups "\n"
                "From: " (message-make-from) "\n"
@@ -3589,8 +3652,10 @@ responses here are directed to other newsgroups."))
                message-cancel-message)
        (message "Canceling your article...")
        (if (let ((message-syntax-checks
-                  'dont-check-for-anything-just-trust-me))
-             (funcall message-send-news-function))
+                  '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)))))
 
@@ -3600,18 +3665,13 @@ responses here are directed to other newsgroups."))
 This is done simply by taking the old article and adding a Supersedes
 header line with the old Message-ID."
   (interactive)
-  (let ((cur (current-buffer))
-       (sender (message-fetch-field "sender"))
-       (from (message-fetch-field "from")))
+  (let ((cur (current-buffer)))
     ;; Check whether the user owns the article that is to be superseded.
-    (unless (or (and sender
-                    (string-equal
-                     (downcase sender)
-                     (downcase (message-make-sender))))
-               (string-equal
-                (downcase (cadr (mail-extract-address-components from)))
-                (downcase (cadr (mail-extract-address-components
-                                 (message-make-from))))))
+    (unless (string-equal
+            (downcase (or (message-fetch-field "sender")
+                          (cadr (mail-extract-address-components
+                                 (message-fetch-field "from")))))
+            (downcase (message-make-sender)))
       (error "This article is not yours"))
     ;; Get a normal message buffer.
     (message-pop-to-buffer (message-buffer-name "supersede"))
@@ -3647,79 +3707,19 @@ header line with the old Message-ID."
             (insert-file-contents file-name nil)))
          (t (error "message-recover cancelled")))))
 
-;;; Washing Subject:
-
-(defun message-wash-subject (subject)
-  "Remove junk like \"Re:\", \"(fwd)\", etc. that was added to the subject by previous forwarders, replyers, etc."
-  (with-temp-buffer
-    (insert-string subject)
-    (goto-char (point-min))
-    ;; strip Re/Fwd stuff off the beginning
-    (while (re-search-forward
-           "\\([Rr][Ee]:\\|[Ff][Ww][Dd]\\(\\[[0-9]*\\]\\)?:\\|[Ff][Ww]:\\)" nil t)
-      (replace-match ""))
-
-    ;; and gnus-style forwards [foo@bar.com] subject
-    (goto-char (point-min))
-    (while (re-search-forward "\\[[^ \t]*\\(@\\|\\.\\)[^ \t]*\\]" nil t)
-      (replace-match ""))
-
-    ;; and off the end
-    (goto-char (point-max))
-    (while (re-search-backward "([Ff][Ww][Dd])" nil t)
-      (replace-match ""))
-
-    ;; and finally, any whitespace that was left-over
-    (goto-char (point-min))
-    (while (re-search-forward "^[ \t]+" nil t)
-      (replace-match ""))
-    (goto-char (point-max))
-    (while (re-search-backward "[ \t]+$" nil t)
-      (replace-match ""))
-
-    (buffer-string)))
-    
 ;;; Forwarding messages.
 
-(defun message-forward-subject-author-subject (subject)
-  "Generate a subject for a forwarded message.
-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)")
-         "] " subject))
-
-(defun message-forward-subject-fwd (subject)
-  "Generate a subject for a forwarded message.
-The form is: Fwd: Subject, where Subject is the original subject of
-the message."
-  (concat "Fwd: " subject))
-
 (defun message-make-forward-subject ()
   "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 (if message-wash-forwarded-subjects
-                        (message-wash-subject
-                         (or (message-fetch-field "Subject") ""))
-                      (or (message-fetch-field "Subject") ""))))
-       ;; Make sure funcs is a list.
-       (and funcs
-            (not (listp funcs))
-            (setq funcs (list funcs)))
-       ;; Apply funcs in order, passing subject generated by previous
-       ;; func to the next one.
-       (while funcs
-         (when (message-functionp (car funcs))
-           (setq subject (funcall (car funcs) subject)))
-         (setq funcs (cdr funcs)))
-       subject))))
+      (concat "[" (or (message-fetch-field
+                      (if (message-news-p) "newsgroups" "from"))
+                     "(nowhere)")
+             "] " (or (eword-decode-unstructured-field-body
+                       (message-fetch-field "Subject") ""))))))
 
 ;;;###autoload
 (defun message-forward (&optional news)
@@ -3767,8 +3767,12 @@ Optional NEWS will use news to forward instead of mail."
          beg)
       ;; We first set up a normal mail buffer.
       (set-buffer (get-buffer-create " *message resend*"))
+      (buffer-disable-undo (current-buffer))
       (erase-buffer)
-      (message-setup `((To . ,address)))
+      ;; avoid to turn-on-mime-edit
+      (let (message-setup-hook)
+       (message-setup `((To . ,address)))
+       )
       ;; Insert our usual headers.
       (message-generate-headers '(From Date To))
       (message-narrow-to-headers)
@@ -3799,7 +3803,8 @@ Optional NEWS will use news to forward instead of mail."
       (when (looking-at "From ")
        (replace-match "X-From-Line: "))
       ;; Send it.
-      (let (message-required-mail-headers)
+      (let ((message-encoding-buffer (current-buffer))
+           (message-edit-buffer (current-buffer)))
        (message-send-mail))
       (kill-buffer (current-buffer)))
     (message "Resending message to %s...done" address)))
@@ -3920,7 +3925,7 @@ which specify the range to operate on."
       (goto-char (min start end))
       (while (< (point) end1)
        (or (looking-at "[_\^@- ]")
-           (insert (char-after) "\b"))
+           (insert (following-char) "\b"))
        (forward-char 1)))))
 
 ;;;###autoload
@@ -3934,7 +3939,7 @@ which specify the range to operate on."
       (move-marker end1 (max start end))
       (goto-char (min start end))
       (while (re-search-forward "\b" end1 t)
-       (if (eq (char-after) (char-after (- (point) 2)))
+       (if (eq (following-char) (char-after (- (point) 2)))
            (delete-char -2))))))
 
 (defalias 'message-exchange-point-and-mark 'exchange-point-and-mark)
@@ -3975,6 +3980,7 @@ Do a `tab-to-tab-stop' if not in those headers."
                                            (point))))
         (hashtb (and (boundp 'gnus-active-hashtb) gnus-active-hashtb))
         (completions (all-completions string hashtb))
+        (cur (current-buffer))
         comp)
     (delete-region b (point))
     (cond
@@ -3993,7 +3999,7 @@ Do a `tab-to-tab-stop' if not in those headers."
          (message "No matching groups")
        (save-selected-window
          (pop-to-buffer "*Completions*")
-         (buffer-disable-undo)
+         (buffer-disable-undo (current-buffer))
          (let ((buffer-read-only nil))
            (erase-buffer)
            (let ((standard-output (current-buffer)))
@@ -4055,6 +4061,47 @@ regexp varstr."
                (cdr local)))))
      locals)))
 
+
+;;; @ for MIME Edit mode
+;;;
+
+(defun message-maybe-setup-default-charset ()
+  (let ((charset
+        (and (boundp 'gnus-summary-buffer)
+              (buffer-live-p gnus-summary-buffer)
+             (save-excursion
+               (set-buffer gnus-summary-buffer)
+               default-mime-charset))))
+    (if charset
+       (progn
+         (make-local-variable 'default-mime-charset)
+         (setq default-mime-charset charset)
+         ))))
+
+(defun message-maybe-encode ()
+  (when message-mime-mode
+    (run-hooks 'mime-edit-translate-hook)
+    (if (catch 'mime-edit-error
+         (save-excursion
+           (mime-edit-translate-body)
+           ))
+       (error "Translation error!")
+      )
+    (end-of-invisible)
+    (run-hooks 'mime-edit-exit-hook)
+    ))
+
+(defun message-mime-insert-article (&optional message)
+  (interactive)
+  (let ((message-cite-function 'mime-edit-inserted-message-filter)
+        (message-reply-buffer gnus-original-article-buffer)
+       )
+    (message-yank-original nil)
+    ))
+
+(set-alist 'mime-edit-message-inserter-alist
+          'message-mode (function message-mime-insert-article))
+
 ;;; Miscellaneous functions
 
 ;; stolen (and renamed) from nnheader.el
@@ -4070,85 +4117,6 @@ regexp varstr."
       (setq idx (1+ idx)))
     string))
 
-;;;
-;;; MIME functions
-;;;
-
-(defun message-encode-message-body ()
-  "Examine the message body, encode it, and add the requisite headers."
-  (message-format-mime)
-  (when (featurep 'mule)
-    (let (old-headers)
-      (save-excursion
-       (save-restriction
-         (message-narrow-to-headers-or-head)
-         (unless (setq old-headers (message-fetch-field "mime-version"))
-           (message-remove-header
-            "^Content-Transfer-Encoding:\\|^Content-Type:\\|^Mime-Version:"
-            t))
-         (goto-char (point-max))
-         (widen)
-         (narrow-to-region (point) (point-max))
-         (let* ((charset (mm-encode-body))
-                (encoding (mm-body-encoding)))
-           (when (consp charset)
-             (error "Can't encode messages with multiple charsets (yet)"))
-           (widen)
-           (message-narrow-to-headers-or-head)
-           (goto-char (point-max))
-           (setq charset (or charset
-                             (mm-mule-charset-to-mime-charset 'ascii)))
-           ;; We don't insert MIME headers if they only say the default.
-           (when (and (not old-headers)
-                      (not (and (eq charset 'us-ascii)
-                                (eq encoding '7bit))))
-             (mm-insert-rfc822-headers charset encoding))
-           (mm-encode-body)))))))
-
-(defun message-insert-mime-part (file type)
-  "Insert a multipart/alternative part into the buffer."
-  (interactive
-   (let* ((file (read-file-name "Insert file: " nil nil t))
-         (type (mm-default-file-encoding file)))
-     (setq mime-type
-          (read-string (format "MIME type for %s: " file) (car type)))
-     (unless (equal mime-type (car type))
-       (setq type (list mime-type)))
-     (list file type)))
-
-  (insert (format "-*[%s %d]*-\n" (car type) (incf message-mime-part)))
-  (let ((current buffer-file-name)
-       (part message-mime-part))
-    (mm-with-unibyte-buffer
-      (insert-file file)
-      (mm-insert-headers type (mm-encode-buffer type) file)
-      (nndraft-save-mime-part current part))))
-
-(defun message-format-mime ()
-  "Insert all the MIME parts."
-  (when (not (zerop message-mime-part))
-    (message-narrow-to-headers)
-    (goto-char (point-max))
-    (let ((boundary (mm-insert-multipart-headers))
-         (current buffer-file-name))
-      (widen)
-      (forward-line 1)
-      (insert "This is a MIME message.  If you are reading this -- *phphthth*.\n\n")
-      (insert "--" boundary "\n\n")
-      (while (re-search-forward
-             "-\\*\\[\\([-a-z/A-Z0-9]+\\) \\([0-9]+\\)\\]\\*-" nil t)
-       (let ((part (string-to-number (match-string 2))))
-         (delete-region (match-beginning 0) (match-end 0))
-         (insert "\n--" boundary "\n")
-         (narrow-to-region (point) (point))
-         (nndraft-get-mime-part current part)
-         (goto-char (point-max))
-         (widen)
-         (insert "\n--" boundary "\n\n")
-         ))
-      (goto-char (point-max))
-      (insert "\n--" boundary "--\n"))))
-    
 (run-hooks 'message-load-hook)
 
 (provide 'message)
index 52619dd..7e3edd3 100644 (file)
@@ -100,8 +100,8 @@ If it is non-nil, it must be a toolbar.  The five legal values are
   "Create a rot table with offset N."
   (let ((i -1)
        (table (make-string 256 0))
-       (a (mm-char-int ?a))
-       (A (mm-char-int ?A)))
+       (a (char-int ?a))
+       (A (char-int ?A)))
     (while (< (incf i) 256)
       (aset table i i))
     (concat
index 153f76d..337ab6f 100644 (file)
@@ -82,11 +82,6 @@ these lines.")
 (defvar message-send-hook mail-send-hook
   "Hook run before sending messages.")
 
-(defvar message-send-mail-function send-mail-function
-  "Function to call to send the current buffer as mail.
-The headers should be delimited by a line whose contents match the
-variable `mail-header-separator'.")
-
 (provide 'messcompat)
 
 ;;; messcompat.el ends here
diff --git a/lisp/mm-bodies.el b/lisp/mm-bodies.el
deleted file mode 100644 (file)
index d4e05f0..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-;;; mm-bodies.el --- Functions for decoding MIME things
-;; Copyright (C) 1998 Free Software Foundation, Inc.
-
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
-;; 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-and-compile
-  (or (fboundp  'base64-decode-region)
-      (require 'base64)))
-
-(require 'mm-util)
-(require 'rfc2047)
-(require 'qp)
-(require 'uudecode)
-
-(defun mm-encode-body ()
-  "Encode a body.
-Should be called narrowed to the body that is to be encoded.
-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."
-  (save-excursion
-    (goto-char (point-min))
-    (let ((charsets
-          (delq 'ascii (mm-find-charset-region (point-min) (point-max))))
-         charset)
-      (cond
-       ;; No encoding.
-       ((null charsets)
-       nil)
-       ;; Too many charsets.
-       ((> (length charsets) 1)
-       charsets)
-       ;; We encode.
-       (t
-       (let ((mime-charset 
-              (mm-mime-charset (car charsets) (point-min) (point-max)))
-             start)
-         (when (or t
-                   ;; We always decode.
-                   (not (mm-coding-system-equal
-                         mime-charset buffer-file-coding-system)))
-           (while (not (eobp))
-             (if (eq (char-charset (char-after)) 'ascii)
-                 (when start
-                   (save-restriction
-                     (narrow-to-region start (point))
-                     (mm-encode-coding-region start (point) mime-charset)
-                     (goto-char (point-max)))
-                   (setq start nil))
-               (unless start
-                 (setq start (point))))
-             (forward-char 1))
-           (when start
-             (mm-encode-coding-region start (point) mime-charset)
-             (setq start nil)))
-         mime-charset))))))
-
-(defun mm-body-encoding ()
-  "Return the encoding of the current buffer."
-  (if (and  
-       (null (delq 'ascii (find-charset-region (point-min) (point-max))))
-       ;;;!!!The following is necessary because the function
-       ;;;!!!above seems to return the wrong result under Emacs 20.3.
-       ;;;!!!Sometimes.
-       (save-excursion
-        (goto-char (point-min))
-        (skip-chars-forward "\0-\177")
-        (eobp)))
-      '7bit
-    '8bit))
-
-;;;
-;;; Functions for decoding
-;;;
-
-(defun mm-decode-content-transfer-encoding (encoding &optional type)
-  (cond
-   ((eq encoding 'quoted-printable)
-    (quoted-printable-decode-region (point-min) (point-max)))
-   ((eq encoding 'base64)
-    (prog1
-       (condition-case ()
-           (base64-decode-region (point-min) (point-max))
-         (error nil))
-      (when (equal type "text/plain")
-       (goto-char (point-min))
-       (while (search-forward "\r\n" nil t)
-         (replace-match "\n" t t)))))
-   ((memq encoding '(7bit 8bit binary))
-    )
-   ((null encoding)
-    )
-   ((eq encoding 'x-uuencode)
-    (condition-case ()
-       (uudecode-decode-region (point-min) (point-max))
-      (error nil)))
-   ((functionp encoding)
-    (condition-case ()
-       (funcall encoding (point-min) (point-max))
-      (error nil)))
-   (t
-    (message "Unknown encoding %s; defaulting to 8bit" encoding))))
-
-(defun mm-decode-body (charset &optional encoding type)
-  "Decode the current article that has been encoded with ENCODING.
-The characters in CHARSET should then be decoded."
-  (setq charset (or charset rfc2047-default-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))
-                  buffer-file-coding-system
-                  enable-multibyte-characters
-                  (or (not (eq mule-charset 'ascii))
-                      (setq mule-charset rfc2047-default-charset)))
-         (mm-decode-coding-region (point-min) (point-max) mule-charset))))))
-
-(provide 'mm-bodies)
-
-;; mm-bodies.el ends here
diff --git a/lisp/mm-uu.el b/lisp/mm-uu.el
deleted file mode 100644 (file)
index 1746f3d..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-;;; mm-uu.el -- Return uu stuffs as mm handles
-;; Copyright (c) 1998 by Shenghuo Zhu <zsh@cs.rochester.edu>
-
-;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
-;; $Revision: 1.1.1.2 $
-;; Keywords: news postscript uudecode binhex shar
-  
-;; 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.
-
-;;; Commentary:
-;;
-
-;;; Code:
-
-(eval-and-compile
-  (autoload 'binhex-decode-region "binhex")
-  (autoload 'binhex-decode-region-external "binhex")
-  (autoload 'uudecode-decode-region "uudecode")
-  (autoload 'uudecode-decode-region-external "uudecode"))
-
-(defun mm-uu-copy-to-buffer (from to)
-  "Copy the contents of the current buffer to a fresh buffer."
-  (save-excursion
-    (let ((obuf (current-buffer)))
-      (set-buffer (generate-new-buffer " *mm-uu*"))
-      (insert-buffer-substring obuf from to)
-      (current-buffer))))
-
-;;; postscript
-
-(defconst mm-uu-postscript-begin-line "^%!PS-")
-(defconst mm-uu-postscript-end-line "^%%EOF$")
-
-(defconst mm-uu-uu-begin-line "^begin[ \t]+[0-7][0-7][0-7][ \t]+\\(.*\\)$")
-(defconst mm-uu-uu-end-line "^end[ \t]*$")
-(defvar mm-uu-decode-function 'uudecode-decode-region)
-
-(defconst mm-uu-binhex-begin-line
-  "^:...............................................................$")
-(defconst mm-uu-binhex-end-line ":$")
-(defvar mm-uu-binhex-decode-function 'binhex-decode-region)
-
-(defconst mm-uu-shar-begin-line "^#! */bin/sh")
-(defconst mm-uu-shar-end-line "^exit 0")
-
-(defvar mm-uu-begin-line 
-  (concat mm-uu-postscript-begin-line "\\|"
-         mm-uu-uu-begin-line "\\|"
-         mm-uu-binhex-begin-line "\\|"
-         mm-uu-shar-begin-line))
-
-(defvar mm-uu-identifier-alist
-  '((?% . postscript) (?b . uu) (?: . binhex) (?# . shar)))
-
-;;;### autoload
-
-(defun mm-uu-dissect ()
-  "Dissect the current buffer and return a list of uu handles."
-  (save-excursion
-    (save-restriction
-      (mail-narrow-to-head)
-      (goto-char (point-max)))
-    (forward-line)
-    (let ((text-start (point)) start-char end-char 
-         type file-name end-line result)
-      (while (re-search-forward mm-uu-begin-line nil t)
-       (beginning-of-line)
-       (setq start-char (point))
-       (forward-line) ;; in case of failure
-       (setq type (cdr (assq (aref (match-string 0) 0) 
-                             mm-uu-identifier-alist)))
-       (setq file-name 
-             (if (eq type 'uu)
-                 (and (match-string 1)
-                      (let ((nnheader-file-name-translation-alist
-                             '((?/ . ?,) (? . ?_) (?* . ?_) (?$ . ?_))))
-                        (nnheader-translate-file-chars (match-string 1))))))
-       (setq end-line (symbol-value 
-                       (intern (concat "mm-uu-" (symbol-name type) 
-                                      "-end-line"))))
-       (when (re-search-forward end-line nil t)
-         (forward-line)
-         (setq end-char (point))
-         (when (or (not (eq type 'binhex))
-                   (setq file-name 
-                         (condition-case nil
-                             (binhex-decode-region start-char end-char t)
-                           (error nil))))
-           (if (> start-char text-start)
-               (push
-                (list (mm-uu-copy-to-buffer text-start start-char) 
-                      '("text/plain") nil nil nil nil) 
-                result))
-           (push 
-            (cond
-             ((eq type 'postscript)
-              (list (mm-uu-copy-to-buffer start-char end-char) 
-                    '("application/postscript") nil nil nil nil))
-             ((eq type 'uu)
-              (list (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"))
-                    mm-uu-decode-function nil 
-                    (if (and file-name (not (equal file-name "")))
-                        (list "attachment" (cons 'filename file-name)))
-                  file-name))
-             ((eq type 'binhex)
-              (list (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"))
-                    mm-uu-binhex-decode-function nil 
-                    (if (and file-name (not (equal file-name "")))
-                        (list "attachment" (cons 'filename file-name)))
-                    file-name))
-             ((eq type 'shar)
-              (list (mm-uu-copy-to-buffer start-char end-char) 
-                    '("application/x-shar") nil nil nil nil))) 
-            result)
-           (setq text-start end-char))))
-      (when result
-       (if (> (point-max) (1+ text-start))
-           (push
-            (list (mm-uu-copy-to-buffer text-start (point-max)) 
-                  '("text/plain") nil nil nil nil) 
-            result))
-       (setq result (cons "multipart/mixed" (nreverse result))))
-      result)))
-
-(provide 'mm-uu)
-
-;;; mm-uu.el ends here
index 15fa72c..b42ddf9 100644 (file)
@@ -73,8 +73,7 @@
             (ftp-error (setq err (format "%s" arg)))))
       (nnagent-close-server)
       (nnheader-report
-       'nnagent (or err
-                   (format "No such file or directory: %s" dir))))
+       'nnagent (or err "No such file or directory: %s" dir)))
      ((not (file-directory-p (file-truename dir)))
       (nnagent-close-server)
       (nnheader-report 'nnagent "Not a directory: %s" dir))
      (t nil))))
 
 (defun nnagent-request-type (group article)
-  (unless (stringp article)
-    (let ((gnus-plugged t))
-      (if (not (gnus-check-backend-function
-               'request-type (car gnus-command-method)))
-         'unknown
-       (funcall (gnus-get-function gnus-command-method 'request-type)
-                (gnus-group-real-name group) article)))))
+  (let ((gnus-plugged t))
+    (if (not (gnus-check-backend-function
+             'request-type (car gnus-command-method)))
+       'unknown
+      (funcall (gnus-get-function gnus-command-method 'request-type)
+              (gnus-group-real-name group) article))))
 
 (deffoo nnagent-request-newgroups (date server)
   nil)
 
 (deffoo nnagent-request-post (&optional server)
   (gnus-agent-insert-meta-information 'news gnus-command-method)
-  (gnus-request-accept-article "nndraft:queue" nil t t))
+  (gnus-request-accept-article "nndraft:queue"))
 
 ;; Use nnml functions for just about everything.
 (nnoo-import nnagent
index 8bdae37..def1e0c 100644 (file)
            start end number)
        (set-buffer (setq nnbabyl-mbox-buffer
                          (nnheader-find-file-noselect
-                          nnbabyl-mbox-file nil t)))
+                          nnbabyl-mbox-file nil 'raw)))
        ;; Save previous buffer mode.
        (setq nnbabyl-previous-buffer-mode
              (cons (cons (point-min) (point-max))
                    major-mode))
 
-       (buffer-disable-undo)
+       (buffer-disable-undo (current-buffer))
        (widen)
        (setq buffer-read-only nil)
        (fundamental-mode)
index 17f5359..0a0f3ef 100644 (file)
@@ -70,6 +70,7 @@
   (autoload 'cancel-timer "timer")
   (autoload 'telnet "telnet" nil t)
   (autoload 'telnet-send-input "telnet" nil t)
+  (autoload 'timezone-parse-date "timezone")
   (autoload 'gnus-declare-backend "gnus-start"))
 
 ;; Declare nndb as derived from nntp
@@ -180,7 +181,8 @@ article was posted to nndb")
                   msg))
        (if (nnmail-expired-article-p
             group
-            (date-to-time (substring msg (match-beginning 1) (match-end 1)))
+            (gnus-encode-date
+             (substring msg (match-beginning 1) (match-end 1)))
             force)
            (progn
              (setq delete-list (concat delete-list " " (int-to-string art)))
index a3b5eae..d9e5c56 100644 (file)
 
 (nnoo-map-functions nndir
   (nnml-retrieve-headers 0 nndir-current-group 0 0)
-  (nnml-request-article 0 nndir-current-group 0 0)
+  (nnmh-request-article 0 nndir-current-group 0 0)
   (nnmh-request-group nndir-current-group 0 0)
   (nnml-close-group nndir-current-group 0)
-  (nnml-request-list (nnoo-current-server 'nndir) nndir-directory)
-  (nnml-request-newsgroups (nnoo-current-server 'nndir) nndir-directory))
+  (nnmh-request-list (nnoo-current-server 'nndir) nndir-directory)
+  (nnmh-request-newsgroups (nnoo-current-server 'nndir) nndir-directory))
 
 (provide 'nndir)
 
index be026de..c32f50f 100644 (file)
@@ -38,7 +38,7 @@
 (defvoo nndoc-article-type 'guess
   "*Type of the file.
 One of `mbox', `babyl', `digest', `news', `rnews', `mmdf', `forward',
-`rfc934', `rfc822-forward', `mime-digest', `mime-parts', `standard-digest',
+`rfc934', `rfc822-forward', `mime-digest', `standard-digest',
 `slack-digest', `clari-briefs' or `guess'.")
 
 (defvoo nndoc-post-type 'mail
@@ -87,9 +87,6 @@ from the document.")
      (body-end . "")
      (file-end . "")
      (subtype digest guess))
-    (mime-parts
-     (generate-head-function . nndoc-generate-mime-parts-head)
-     (article-transform-function . nndoc-transform-mime-parts))
     (standard-digest
      (first-article . ,(concat "^" (make-string 70 ?-) "\n *\n+"))
      (article-begin . ,(concat "^\n" (make-string 30 ?-) "\n *\n+"))
@@ -131,8 +128,10 @@ from the document.")
      (subtype nil))))
 
 \f
+
 (defvoo nndoc-file-begin nil)
 (defvoo nndoc-first-article nil)
+(defvoo nndoc-article-end nil)
 (defvoo nndoc-article-begin nil)
 (defvoo nndoc-head-begin nil)
 (defvoo nndoc-head-end nil)
@@ -142,14 +141,6 @@ from the document.")
 (defvoo nndoc-body-begin-function nil)
 (defvoo nndoc-head-begin-function nil)
 (defvoo nndoc-body-end nil)
-;; nndoc-dissection-alist is a list of sublists.  Each sublist holds the
-;; following items.  ARTICLE act as the association key and is an ordinal
-;; starting at 1.  HEAD-BEGIN [0], HEAD-END [1], BODY-BEGIN [2] and BODY-END
-;; [3] are positions in the `nndoc' buffer.  LINE-COUNT [4] is a count of
-;; lines in the body.  For MIME dissections only, ARTICLE-INSERT [5] and
-;; SUMMARY-INSERT [6] give headers to insert for full article or summary line
-;; generation, respectively.  Other headers usually follow directly from the
-;; buffer.  Value `nil' means no insert.
 (defvoo nndoc-dissection-alist nil)
 (defvoo nndoc-prepare-body-function nil)
 (defvoo nndoc-generate-head-function nil)
@@ -188,7 +179,7 @@ from the document.")
                (insert-buffer-substring
                 nndoc-current-buffer (car entry) (nth 1 entry)))
              (goto-char (point-max))
-             (unless (eq (char-after (1- (point))) ?\n)
+             (unless (= (char-after (1- (point))) ?\n)
                (insert "\n"))
              (insert (format "Lines: %d\n" (nth 4 entry)))
              (insert ".\n")))
@@ -290,7 +281,7 @@ from the document.")
       (setq nndoc-dissection-alist nil)
       (save-excursion
        (set-buffer nndoc-current-buffer)
-       (mm-enable-multibyte)
+       (buffer-disable-undo (current-buffer))
        (erase-buffer)
        (if (stringp nndoc-address)
            (nnheader-insert-file-contents nndoc-address)
@@ -302,9 +293,7 @@ from the document.")
       (save-excursion
        (set-buffer nndoc-current-buffer)
        (nndoc-set-delims)
-       (if (eq nndoc-article-type 'mime-parts)
-           (nndoc-dissect-mime-parts)
-         (nndoc-dissect-buffer))))
+       (nndoc-dissect-buffer)))
     (unless nndoc-current-buffer
       (nndoc-close-server))
     ;; Return whether we managed to select a file.
@@ -318,8 +307,7 @@ from the document.")
   "Set the nndoc delimiter variables according to the type of the document."
   (let ((vars '(nndoc-file-begin
                nndoc-first-article
-               nndoc-article-begin-function
-               nndoc-head-begin nndoc-head-end
+               nndoc-article-end nndoc-head-begin nndoc-head-end
                nndoc-file-end nndoc-article-begin
                nndoc-body-begin nndoc-body-end-function nndoc-body-end
                nndoc-prepare-body-function nndoc-article-transform-function
@@ -448,33 +436,6 @@ from the document.")
 (defun nndoc-rfc822-forward-body-end-function ()
   (goto-char (point-max)))
 
-(defun nndoc-mime-parts-type-p ()
-  (let ((case-fold-search t)
-       (limit (search-forward "\n\n" nil t)))
-    (goto-char (point-min))
-    (when (and limit
-               (re-search-forward
-                (concat "\
-^Content-Type:[ \t]*multipart/[a-z]+ *;\\(.*;\\)*"
-                        "[ \t\n]*[ \t]boundary=\"?[^\"\n]*[^\" \t\n]")
-          limit t))
-      t)))
-
-(defun nndoc-transform-mime-parts (article)
-  (let* ((entry (cdr (assq article nndoc-dissection-alist)))
-        (headers (nth 5 entry)))
-    (when headers
-    (goto-char (point-min))
-      (insert headers))))
-
-(defun nndoc-generate-mime-parts-head (article)
-  (let* ((entry (cdr (assq article nndoc-dissection-alist)))
-        (headers (nth 6 entry)))
-    (when headers
-      (insert headers))
-    (insert-buffer-substring
-     nndoc-current-buffer (car entry) (nth 1 entry))))
-
 (defun nndoc-clari-briefs-type-p ()
   (when (let ((case-fold-search nil))
          (re-search-forward "^\t[^a-z]+ ([^a-z]+) --" nil t))
@@ -512,7 +473,7 @@ from the document.")
     (when (and
           (re-search-forward
            (concat "^Content-Type: *multipart/digest;[ \t\n]*[ \t]"
-                   "boundary=\"?\\([^\"\n]*[^\" \t\n]\\)")
+                   "boundary=\"\\([^\"\n]*[^\" \t\n]\\)\"")
            nil t)
           (match-beginning 1))
       (setq boundary-id (match-string 1)
@@ -611,7 +572,7 @@ from the document.")
               (funcall nndoc-head-begin-function))
              (nndoc-head-begin
               (nndoc-search nndoc-head-begin)))
-       (if (or (eobp)
+       (if (or (>= (point) (point-max))
                (and nndoc-file-end
                     (looking-at nndoc-file-end)))
            (goto-char (point-max))
@@ -648,139 +609,6 @@ from the document.")
   (while (re-search-forward "^- -"nil t)
     (replace-match "-" t t)))
 
-;; Against compiler warnings.
-(defvar nndoc-mime-split-ordinal)
-
-(defun nndoc-dissect-mime-parts ()
-  "Go through a MIME composite article and partition it into sub-articles.
-When a MIME entity contains sub-entities, dissection produces one article for
-the header of this entity, and one article per sub-entity."
-  (setq nndoc-dissection-alist nil
-       nndoc-mime-split-ordinal 0)
-  (save-excursion
-    (set-buffer nndoc-current-buffer)
-    (nndoc-dissect-mime-parts-sub (point-min) (point-max) nil nil nil)))
-
-(defun nndoc-dissect-mime-parts-sub (head-begin body-end article-insert
-                                               position parent)
-  "Dissect an entity, within a composite MIME message.
-The complete message or MIME entity extends from HEAD-BEGIN to BODY-END.
-ARTICLE-INSERT should be added at beginning for generating a full article.
-The string POSITION holds a dotted decimal representation of the article
-position in the hierarchical structure, it is nil for the outer entity.
-PARENT is the message-ID of the parent summary line, or nil for none."
-  (let ((case-fold-search t)
-       (message-id (nnmail-message-id))
-       head-end body-begin summary-insert message-rfc822 multipart-any
-       subject content-type type subtype boundary-regexp)
-      ;; Gracefully handle a missing body.
-      (goto-char head-begin)
-      (if (search-forward "\n\n" body-end t)
-         (setq head-end (1- (point))
-               body-begin (point))
-      (setq head-end body-end
-           body-begin body-end))
-    (narrow-to-region head-begin head-end)
-      ;; Save MIME attributes.
-      (goto-char head-begin)
-    (setq content-type (message-fetch-field "Content-Type"))
-    (when content-type
-      (when (string-match "^ *\\([^ \t\n/;]+\\)/\\([^ \t\n/;]+\\)" content-type)
-       (setq type (downcase (match-string 1 content-type))
-             subtype (downcase (match-string 2 content-type))
-             message-rfc822 (and (string= type "message")
-                                 (string= subtype "rfc822"))
-             multipart-any (string= type "multipart")))
-      (when (string-match ";[ \t\n]*name=\\([^ \t\n;]+\\)" content-type)
-       (setq subject (match-string 1 content-type)))
-      (when (string-match "boundary=\"?\\([^\"\n]*[^\" \t\n]\\)" content-type)
-       (setq boundary-regexp (concat "^--"
-                                     (regexp-quote
-                                      (match-string 1 content-type))
-                                     "\\(--\\)?[ \t]*\n"))))
-    (unless subject
-      (when (or multipart-any (not article-insert))
-       (setq subject (message-fetch-field "Subject"))))
-    (unless type
-       (setq type "text"
-             subtype "plain"))
-    ;; Prepare the article and summary inserts.
-    (unless article-insert
-      (setq article-insert (buffer-substring (point-min) (point-max))
-           head-end head-begin))
-    (setq summary-insert article-insert)
-    ;; - summary Subject.
-    (setq summary-insert
-         (let ((line (concat "Subject: <" position
-                             (and position multipart-any ".")
-                             (and multipart-any "*")
-                             (and (or position multipart-any) " ")
-                           (cond ((string= subtype "plain") type)
-                                 ((string= subtype "basic") type)
-                                   (t subtype))
-                             ">"
-                             (and subject " ")
-                             subject
-                             "\n")))
-           (if (string-match "Subject:.*\n\\([ \t].*\n\\)*" summary-insert)
-               (replace-match line t t summary-insert)
-             (concat summary-insert line))))
-    ;; - summary Message-ID.
-    (setq summary-insert
-         (let ((line (concat "Message-ID: " message-id "\n")))
-           (if (string-match "Message-ID:.*\n\\([ \t].*\n\\)*" summary-insert)
-               (replace-match line t t summary-insert)
-             (concat summary-insert line))))
-    ;; - summary References.
-    (when parent
-      (setq summary-insert
-           (let ((line (concat "References: " parent "\n")))
-             (if (string-match "References:.*\n\\([ \t].*\n\\)*"
-                               summary-insert)
-                 (replace-match line t t summary-insert)
-               (concat summary-insert line)))))
-      ;; Generate dissection information for this entity.
-      (push (list (incf nndoc-mime-split-ordinal)
-                 head-begin head-end body-begin body-end
-                 (count-lines body-begin body-end)
-               article-insert summary-insert)
-           nndoc-dissection-alist)
-      ;; Recurse for all sub-entities, if any.
-    (widen)
-    (cond
-     (message-rfc822
-      (save-excursion
-       (nndoc-dissect-mime-parts-sub body-begin body-end nil
-                                     position message-id)))
-     ((and multipart-any boundary-regexp)
-      (let ((part-counter 0)
-           part-begin part-end eof-flag)
-       (while (string-match "\
-^\\(Lines\\|Content-\\(Type\\|Transfer-Encoding\\)\\):.*\n\\([ \t].*\n\\)*"
-                            article-insert)
-         (setq article-insert (replace-match "" t t article-insert)))
-       (let ((case-fold-search nil))
-         (goto-char body-begin)
-         (setq eof-flag (not (re-search-forward boundary-regexp body-end t)))
-         (while (not eof-flag)
-           (setq part-begin (point))
-           (cond ((re-search-forward boundary-regexp body-end t)
-                  (or (not (match-string 1))
-                      (string= (match-string 1) "")
-                      (setq eof-flag t))
-                  (forward-line -1)
-                  (setq part-end (point))
-                  (forward-line 1))
-                 (t (setq part-end body-end
-                          eof-flag t)))
-           (save-excursion
-             (nndoc-dissect-mime-parts-sub
-              part-begin part-end article-insert
-              (concat position
-                      (and position ".")
-                      (format "%d" (incf part-counter)))
-              message-id)))))))))
-
 ;;;###autoload
 (defun nndoc-add-type (definition &optional position)
   "Add document DEFINITION to the list of nndoc document definitions.
index 1c10613..f7182a5 100644 (file)
   (save-excursion
     (set-buffer nntp-server-buffer)
     (erase-buffer)
-    (let* (article)
+    (let* ((buf (get-buffer-create " *draft headers*"))
+          article)
+      (set-buffer buf)
+      (buffer-disable-undo (current-buffer))
+      (erase-buffer)
       ;; We don't support fetching by Message-ID.
       (if (stringp (car articles))
          'headers
        (while articles
-         (narrow-to-region (point) (point))
+         (set-buffer buf)
          (when (nndraft-request-article
                 (setq article (pop articles)) group server (current-buffer))
            (goto-char (point-min))
                (forward-line -1)
              (goto-char (point-max)))
            (delete-region (point) (point-max))
-           (goto-char (point-min))
-           (insert (format "221 %d Article retrieved.\n" article))
-           (widen)
+           (set-buffer nntp-server-buffer)
            (goto-char (point-max))
+           (insert (format "221 %d Article retrieved.\n" article))
+           (insert-buffer-substring buf)
            (insert ".\n")))
 
        (nnheader-fold-continuation-lines)
   (when (nndraft-request-article article group server (current-buffer))
     (message-remove-header "xref")
     (message-remove-header "lines")
+    (let ((gnus-verbose-backends nil))
+      (nndraft-request-expire-articles (list article) group server t))
     t))
 
 (deffoo nndraft-request-update-info (group info &optional server)
   (let ((gnus-verbose-backends nil)
        (buf (current-buffer))
         article file)
-    (with-temp-buffer
+    (nnheader-temp-write nil
       (insert-buffer buf)
       (setq article (nndraft-request-accept-article
-                    group (nnoo-current-server 'nndraft) t 'noinsert)
-           file (nndraft-article-filename article)))
-    (setq buffer-file-name (expand-file-name file)
-         buffer-auto-save-file-name (make-auto-save-file-name))
+                    group (nnoo-current-server 'nndraft) t 'noinsert))
+      (setq file (nndraft-article-filename article)))
+    (setq buffer-file-name (expand-file-name file))
+    (setq buffer-auto-save-file-name (make-auto-save-file-name))
     (clear-visited-file-modtime)
     article))
 
-(defun nndraft-save-mime-part (file part)
-  "Save MIME PART belonging to the FILE."
-  (write-region (point-min) (point-max)
-               (format "%s.%d" file part)))
-
-(defun nndraft-get-mime-part (file part)
-  "Save MIME PART belonging to the FILE."
-  (insert-file-contents (format "%s.%d" file part)))
-
 (deffoo nndraft-request-expire-articles (articles group &optional server force)
   (nndraft-possibly-change-group group)
   (let* ((nnmh-allow-delete-final t)
index 8048849..97f5d2f 100644 (file)
@@ -64,10 +64,12 @@ If this variable is nil, no files will be excluded.")
 (defvoo nneething-map nil)
 (defvoo nneething-read-only nil)
 (defvoo nneething-active nil)
-(defvoo nneething-address nil)
+(defvoo nneething-directory nil)
 
 \f
 
+(autoload 'gnus-encode-coding-string "gnus-ems")
+
 ;;; Interface functions.
 
 (nnoo-define-basics nneething)
@@ -156,8 +158,8 @@ If this variable is nil, no files will be excluded.")
   (nnheader-init-server-buffer)
   (if (nneething-server-opened server)
       t
-    (unless (assq 'nneething-address defs)
-      (setq defs (append defs (list (list 'nneething-address server)))))
+    (unless (assq 'nneething-directory defs)
+      (setq defs (append defs (list (list 'nneething-directory server)))))
     (nnoo-change-server 'nneething server defs)))
 
 \f
@@ -183,9 +185,9 @@ If this variable is nil, no files will be excluded.")
 
 (defun nneething-create-mapping ()
   ;; Read nneething-active and nneething-map.
-  (when (file-exists-p nneething-address)
+  (when (file-exists-p nneething-directory)
     (let ((map-file (nneething-map-file))
-         (files (directory-files nneething-address))
+         (files (directory-files nneething-directory))
          touched map-files)
       (when (file-exists-p map-file)
        (ignore-errors
@@ -241,7 +243,7 @@ If this variable is nil, no files will be excluded.")
        (setq files (cdr files)))
       (when (and touched
                 (not nneething-read-only))
-       (with-temp-file map-file
+       (nnheader-temp-write map-file
          (insert "(setq nneething-map '")
          (gnus-prin1 nneething-map)
          (insert ")\n(setq nneething-active '")
@@ -314,7 +316,7 @@ If this variable is nil, no files will be excluded.")
   (save-excursion
     (set-buffer (get-buffer-create nneething-work-buffer))
     (setq case-fold-search nil)
-    (buffer-disable-undo)
+    (buffer-disable-undo (current-buffer))
     (erase-buffer)
     (cond
      ((not (file-exists-p file))
@@ -342,13 +344,10 @@ If this variable is nil, no files will be excluded.")
 
 (defun nneething-file-name (article)
   "Return the file name of ARTICLE."
-  (let ((dir (file-name-as-directory nneething-address))
-        fname)
-    (if (numberp article)
-       (if (setq fname (cadr (assq article nneething-map)))
-           (concat dir fname)
-         (make-temp-name (concat dir "nneething")))
-      (concat dir article))))
+  (concat (file-name-as-directory nneething-directory)
+         (if (numberp article)
+             (cadr (assq article nneething-map))
+           article)))
 
 (provide 'nneething)
 
index 5d0d80f..db9666b 100644 (file)
@@ -328,6 +328,7 @@ time saver for large mailboxes.")
        (nnfolder-request-article article group server)
        (save-excursion
         (set-buffer buf)
+        (buffer-disable-undo (current-buffer))
         (erase-buffer)
         (insert-buffer-substring nntp-server-buffer)
         (goto-char (point-min))
@@ -510,20 +511,17 @@ Returns t if successful, nil otherwise."
   "Delete the message that point is in.
 If optional argument LEAVE-DELIM is t, then mailbox delimiter is not
 deleted.  Point is left where the deleted region was."
-  (save-restriction
-    (narrow-to-region
-     (save-excursion
-       (forward-line 1)                        ; in case point is at beginning of message already
-       (nnmail-search-unix-mail-delim-backward)
-       (if leave-delim (progn (forward-line 1) (point))
-        (point)))
-     (progn
-       (forward-line 1)
-       (if (nnmail-search-unix-mail-delim)
-          (point)
-        (point-max))))
-    (run-hooks 'nnfolder-delete-mail-hook)
-    (delete-region (point-min) (point-max))))
+  (delete-region
+   (save-excursion
+     (forward-line 1) ; in case point is at beginning of message already
+     (nnmail-search-unix-mail-delim-backward)
+     (if leave-delim (progn (forward-line 1) (point))
+       (point)))
+   (progn
+     (forward-line 1)
+     (if (nnmail-search-unix-mail-delim)
+        (point)
+       (point-max)))))
 
 (defun nnfolder-possibly-change-group (group &optional server dont-check)
   ;; Change servers.
@@ -704,7 +702,7 @@ deleted.  Point is left where the deleted region was."
              (minid (lsh -1 -1))
              maxid start end newscantime
              buffer-read-only)
-         (buffer-disable-undo)
+         (buffer-disable-undo (current-buffer))
          (setq maxid (cdr active))
          (goto-char (point-min))
 
@@ -799,8 +797,7 @@ deleted.  Point is left where the deleted region was."
 
 (defun nnfolder-group-pathname (group)
   "Make pathname for GROUP."
-  (setq group
-       (mm-encode-coding-string group nnmail-pathname-coding-system))
+  (setq group (gnus-encode-coding-string group nnmail-pathname-coding-system))
   (let ((dir (file-name-as-directory (expand-file-name nnfolder-directory))))
     ;; If this file exists, we use it directly.
     (if (or nnmail-use-long-file-names
index 51e20ad..2139885 100644 (file)
@@ -25,7 +25,6 @@
 
 ;;; Code:
 
-(eval-when-compile (require 'cl))
 (require 'nnoo)
 (require 'message)
 
@@ -55,7 +54,7 @@ parameter -- the gateway address.")
            (nngateway-open-server server))
     ;; Rewrite the header.
     (let ((buf (current-buffer)))
-      (with-temp-buffer
+      (nnheader-temp-write nil
        (insert-buffer-substring buf)
        (message-narrow-to-head)
        (funcall nngateway-header-transformation nngateway-address)
index 5f685a3..e0de0a4 100644 (file)
@@ -40,7 +40,6 @@
 (eval-when-compile (require 'cl))
 
 (require 'mail-utils)
-(require 'mm-util)
 
 (defvar nnheader-max-head-length 4096
   "*Max length of the head of articles.")
@@ -62,7 +61,8 @@ on your system, you could say something like:
  (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 'gnus-buffer-live-p "gnus-util")
+ (autoload 'gnus-encode-coding-string "gnus-ems"))
 
 ;;; Header access macros.
 
@@ -140,23 +140,14 @@ on your system, you could say something like:
   "Set article xref of HEADER to xref."
   `(aset ,header 8 ,xref))
 
-(defmacro mail-header-extra (header)
-  "Return the extra headers in HEADER."
-  `(aref ,header 9))
-
-(defmacro mail-header-set-extra (header extra)
-  "Set the extra headers in HEADER to EXTRA."
-  `(aset ,header 9 ',extra))
-
 (defun make-mail-header (&optional init)
   "Create a new mail header structure initialized with INIT."
-  (make-vector 10 init))
+  (make-vector 9 init))
 
 (defun make-full-mail-header (&optional number subject from date id
-                                       references chars lines xref
-                                       extra)
+                                       references chars lines xref)
   "Create a new mail header structure initialized with the parameters given."
-  (vector number subject from date id references chars lines xref extra))
+  (vector number subject from date id references chars lines xref))
 
 ;; fake message-ids: generation and detection
 
@@ -266,20 +257,7 @@ on your system, you could say something like:
           (progn
             (goto-char p)
             (and (search-forward "\nxref: " nil t)
-                 (nnheader-header-value)))
-          
-          ;; Extra.
-          (when nnmail-extra-headers
-            (let ((extra nnmail-extra-headers)
-                  out)
-              (while extra
-                (goto-char p)
-                (when (search-forward
-                       (concat "\n" (symbol-name (car extra)) ": ") nil t)
-                  (push (cons (car extra) (nnheader-header-value))
-                        out))
-                (pop extra))
-              out))))
+                 (nnheader-header-value)))))
       (when naked
        (goto-char (point-min))
        (delete-char 1)))))
@@ -292,21 +270,13 @@ on your system, you could say something like:
 
 (defmacro nnheader-nov-read-integer ()
   '(prog1
-       (if (eq (char-after) ?\t)
+       (if (= (following-char) ?\t)
           0
         (let ((num (ignore-errors (read (current-buffer)))))
           (if (numberp num) num 0)))
      (or (eobp) (forward-char 1))))
 
-(defmacro nnheader-nov-parse-extra ()
-  '(let (out string)
-     (while (not (memq (char-after) '(?\n nil)))
-       (setq string (nnheader-nov-field))
-       (when (string-match "^\\([^ :]+\\): " string)
-        (push (cons (intern (match-string 1 string))
-                    (substring string (match-end 0)))
-              out)))
-     out))
+;; (defvar nnheader-none-counter 0)
 
 (defun nnheader-parse-nov ()
   (let ((eol (gnus-point-at-eol)))
@@ -320,10 +290,10 @@ on your system, you could say something like:
      (nnheader-nov-field)              ; refs
      (nnheader-nov-read-integer)       ; chars
      (nnheader-nov-read-integer)       ; lines
-     (if (eq (char-after) ?\n)
+     (if (= (following-char) ?\n)
         nil
        (nnheader-nov-field))           ; misc
-     (nnheader-nov-parse-extra))))     ; extra
+     )))
 
 (defun nnheader-insert-nov (header)
   (princ (mail-header-number header) (current-buffer))
@@ -341,16 +311,7 @@ on your system, you could say something like:
   (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 "Xref: " (mail-header-xref header) "\t"))
   (insert "\n"))
 
 (defun nnheader-insert-article-line (article)
@@ -438,8 +399,8 @@ the line could be found."
   (save-excursion
     (unless (gnus-buffer-live-p nntp-server-buffer)
       (setq nntp-server-buffer (get-buffer-create " *nntpd*")))
-    (mm-enable-multibyte)
     (set-buffer nntp-server-buffer)
+    (buffer-disable-undo (current-buffer))
     (erase-buffer)
     (kill-all-local-variables)
     (setq case-fold-search t)          ;Should ignore case.
@@ -485,7 +446,7 @@ the line could be found."
       nil
     (narrow-to-region (point-min) (1- (point)))
     (goto-char (point-min))
-    (while (looking-at "[a-zA-Z][^ \t]+:.*\n\\([ \t].*\n\\)*\\|From .*\n")
+    (while (looking-at "[A-Z][^ \t]+:.*\n\\([ \t].*\n\\)*\\|From .*\n")
       (goto-char (match-end 0)))
     (prog1
        (eobp)
@@ -533,11 +494,57 @@ the line could be found."
 (defun nnheader-set-temp-buffer (name &optional noerase)
   "Set-buffer to an empty (possibly new) buffer called NAME with undo disabled."
   (set-buffer (get-buffer-create name))
-  (buffer-disable-undo)
+  (buffer-disable-undo (current-buffer))
   (unless noerase
     (erase-buffer))
   (current-buffer))
 
+(defmacro nnheader-temp-write (file &rest forms)
+  "Create a new buffer, evaluate FORMS there, and write the buffer to FILE.
+Return the value of FORMS.
+If FILE is nil, just evaluate FORMS and don't save anything.
+If FILE is t, return the buffer contents as a string."
+  (let ((temp-file (make-symbol "temp-file"))
+       (temp-buffer (make-symbol "temp-buffer"))
+       (temp-results (make-symbol "temp-results")))
+    `(save-excursion
+       (let* ((,temp-file ,file)
+             (default-major-mode 'fundamental-mode)
+             (,temp-buffer
+              (set-buffer
+               (get-buffer-create
+                (generate-new-buffer-name " *nnheader temp*"))))
+             ,temp-results)
+        (unwind-protect
+            (progn
+              (setq ,temp-results (progn ,@forms))
+              (cond
+               ;; Don't save anything.
+               ((null ,temp-file)
+                ,temp-results)
+               ;; Return the buffer contents.
+               ((eq ,temp-file t)
+                (set-buffer ,temp-buffer)
+                (buffer-string))
+               ;; Save a file.
+               (t
+                (set-buffer ,temp-buffer)
+                ;; Make sure the directory where this file is
+                ;; to be saved exists.
+                (when (not (file-directory-p
+                            (file-name-directory ,temp-file)))
+                  (make-directory (file-name-directory ,temp-file) t))
+                ;; Save the file.
+                (write-region (point-min) (point-max)
+                              ,temp-file nil 'nomesg)
+                ,temp-results)))
+          ;; Kill the buffer.
+          (when (buffer-name ,temp-buffer)
+            (kill-buffer ,temp-buffer)))))))
+
+(put 'nnheader-temp-write 'lisp-indent-function 1)
+(put 'nnheader-temp-write 'edebug-form-spec '(form body))
+
 (defvar jka-compr-compression-info-list)
 (defvar nnheader-numerical-files
   (if (boundp 'jka-compr-compression-info-list)
@@ -682,7 +689,7 @@ without formatting."
   (or (not (numberp gnus-verbose-backends))
       (<= level gnus-verbose-backends)))
 
-(defvar nnheader-pathname-coding-system 'binary
+(defvar nnheader-pathname-coding-system 'iso-8859-1
   "*Coding system for pathname.")
 
 (defun nnheader-group-pathname (group dir &optional file)
@@ -694,7 +701,7 @@ without formatting."
         (concat dir group "/")
        ;; If not, we translate dots into slashes.
        (concat dir
-              (mm-encode-coding-string
+              (gnus-encode-coding-string
                (nnheader-replace-chars-in-string group ?. ?/)
                nnheader-pathname-coding-system)
               "/")))
@@ -754,7 +761,7 @@ If FILE, find the \".../etc/PACKAGE\" file instead."
       (when (string-match (car ange-ftp-path-format) path)
        (ange-ftp-re-read-dir path)))))
 
-(defvar nnheader-file-coding-system 'no-conversion
+(defvar nnheader-file-coding-system 'raw-text
   "Coding system used in file backends of Gnus.")
 
 (defun nnheader-insert-file-contents (filename &optional visit beg end replace)
@@ -816,6 +823,8 @@ find-file-hooks, etc.
   `(let ((new (generate-new-buffer " *nnheader replace*"))
         (cur (current-buffer))
         (start (point-min)))
+     (set-buffer new)
+     (buffer-disable-undo (current-buffer))
      (set-buffer cur)
      (goto-char (point-min))
      (while (,(if regexp 're-search-forward 'search-forward)
index b3e8f7d..b122d3e 100644 (file)
   ;; 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)
+    (nnheader-temp-write (nnkiboze-nov-file-name)
       (let ((cur (current-buffer)))
        (nnheader-insert-file-contents (nnkiboze-nov-file-name))
        (goto-char (point-min))
@@ -230,9 +230,9 @@ 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
+    (nnheader-temp-write nov-file
       (when (file-exists-p nov-file)
-       (insert-file-contents 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.
@@ -318,7 +318,7 @@ Finds out what articles are to be part of the nnkiboze groups."
        (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
+    (nnheader-temp-write newsrc-file
       (insert "(setq nnkiboze-newsrc '")
       (gnus-prin1 nnkiboze-newsrc)
       (insert ")\n")))
@@ -331,8 +331,10 @@ Finds out what articles are to be part of the nnkiboze groups."
   (save-excursion
     (set-buffer buffer)
     (goto-char (point-max))
-    (let ((prefix (gnus-group-real-prefix group))
+    (let ((xref (mail-header-xref header))
+         (prefix (gnus-group-real-prefix group))
          (oheader (copy-sequence header))
+         (first t)
          article)
       (if (zerop (forward-line -1))
          (progn
index c852ad8..e761868 100644 (file)
 (eval-when-compile (require 'cl))
 
 (require 'nnheader)
+(require 'timezone)
 (require 'message)
 (require 'custom)
-(require 'gnus-util)
 
 (eval-and-compile
   (autoload 'gnus-error "gnus-util")
-  (autoload 'gnus-buffer-live-p "gnus-util"))
+  (autoload 'gnus-buffer-live-p "gnus-util")
+  (autoload 'gnus-encode-coding-string "gnus-ems"))
 
 (defgroup nnmail nil
   "Reading mail with Gnus."
@@ -180,8 +181,7 @@ used as incoming mailboxes.
 If this variable is a directory (i. e., it's name ends with a \"/\"),
 treat all files in that directory as incoming spool files."
   :group 'nnmail-files
-  :type '(choice (file :tag "File")
-                (repeat :tag "Files" file)))
+  :type 'file)
 
 (defcustom nnmail-crash-box "~/.gnus-crash-box"
   "File where Gnus will store mail while processing it."
@@ -241,13 +241,6 @@ to be moved to."
   :group 'nnmail-retrieve
   :type 'string)
 
-(defcustom nnmail-movemail-args nil
-  "*Extra arguments to give to `nnmail-movemail-program'  to move mail from the inbox.
-The default is nil"
-  :group 'nnmail-files
-  :group 'nnmail-retrieve
-  :type 'string)
-
 (defcustom nnmail-pop-password-required nil
   "*Non-nil if a password is required when reading mail using POP."
   :group 'nnmail-retrieve
@@ -414,7 +407,7 @@ Example:
   :group 'nnmail-split
   :type '(repeat (cons :format "%v" symbol regexp)))
 
-(defcustom nnmail-delete-incoming nil
+(defcustom nnmail-delete-incoming t
   "*If non-nil, the mail backends will delete incoming files after
 splitting."
   :group 'nnmail-retrieve
@@ -449,11 +442,6 @@ parameter.  It should return nil, `warn' or `delete'."
                 (const warn)
                 (const delete)))
 
-(defcustom nnmail-extra-headers nil
-  "*Extra headers to parse."
-  :group 'nnmail
-  :type '(repeat symbol))
-
 ;;; Internal variables.
 
 (defvar nnmail-split-history nil
@@ -480,9 +468,6 @@ parameter.  It should return nil, `warn' or `delete'."
 
 (defvar nnmail-internal-password nil)
 
-(defvar nnmail-split-tracing nil)
-(defvar nnmail-split-trace nil)
-
 \f
 
 (defconst nnmail-version "nnmail 1.0"
@@ -493,19 +478,18 @@ parameter.  It should return nil, `warn' or `delete'."
 (defun nnmail-request-post (&optional server)
   (mail-send-and-exit nil))
 
-(defvar nnmail-file-coding-system 'binary
+(defvar nnmail-file-coding-system 'raw-text
   "Coding system used in nnmail.")
 
 (defun nnmail-find-file (file)
   "Insert FILE in server buffer safely."
   (set-buffer nntp-server-buffer)
-  (delete-region (point-min) (point-max))
+  (erase-buffer)
   (let ((format-alist nil)
         (after-insert-file-functions nil))
     (condition-case ()
        (let ((coding-system-for-read nnmail-file-coding-system)
-             (auto-mode-alist (nnheader-auto-mode-alist))
-             (pathname-coding-system nnmail-file-coding-system))
+             (pathname-coding-system 'binary))
          (insert-file-contents file)
          t)
       (file-error nil))))
@@ -525,12 +509,54 @@ parameter.  It should return nil, `warn' or `delete'."
         (concat dir group "/")
        ;; If not, we translate dots into slashes.
        (concat dir
-              (mm-encode-coding-string
+              (gnus-encode-coding-string
                (nnheader-replace-chars-in-string group ?. ?/)
                nnmail-pathname-coding-system)
               "/")))
    (or file "")))
 
+(defun nnmail-date-to-time (date)
+  "Convert DATE into time."
+  (condition-case ()
+      (let* ((d1 (timezone-parse-date date))
+            (t1 (timezone-parse-time (aref d1 3))))
+       (apply 'encode-time
+              (mapcar (lambda (el)
+                        (and el (string-to-number el)))
+                      (list
+                       (aref t1 2) (aref t1 1) (aref t1 0)
+                       (aref d1 2) (aref d1 1) (aref d1 0)
+                       (number-to-string
+                        (* 60 (timezone-zone-to-minute (aref d1 4))))))))
+    ;; If we get an error, then we just return a 0 time.
+    (error (list 0 0))))
+
+(defun nnmail-time-less (t1 t2)
+  "Say whether time T1 is less than time T2."
+  (or (< (car t1) (car t2))
+      (and (= (car t1) (car t2))
+          (< (nth 1 t1) (nth 1 t2)))))
+
+(defun nnmail-days-to-time (days)
+  "Convert DAYS into time."
+  (let* ((seconds (* 1.0 days 60 60 24))
+        (rest (expt 2 16))
+        (ms (condition-case nil (floor (/ seconds rest))
+              (range-error (expt 2 16)))))
+    (list ms (condition-case nil (round (- seconds (* ms rest)))
+              (range-error (expt 2 16))))))
+
+(defun nnmail-time-since (time)
+  "Return the time since TIME, which is either an internal time or a date."
+  (when (stringp time)
+    ;; Convert date strings to internal time.
+    (setq time (nnmail-date-to-time time)))
+  (let* ((current (current-time))
+        (rest (when (< (nth 1 current) (nth 1 time))
+                (expt 2 16))))
+    (list (- (+ (car current) (if rest -1 0)) (car time))
+         (- (+ (or rest 0) (nth 1 current)) (nth 1 time)))))
+
 ;; Function rewritten from rmail.el.
 (defun nnmail-move-inbox (inbox)
   "Move INBOX to `nnmail-crash-box'."
@@ -609,9 +635,7 @@ parameter.  It should return nil, `warn' or `delete'."
                              nnmail-movemail-program exec-directory)
                             nil errors nil inbox tofile)
                            (when nnmail-internal-password
-                             (list nnmail-internal-password))
-                           (when nnmail-movemail-args
-                             nnmail-movemail-args))))))
+                             (list nnmail-internal-password)))))))
                (push inbox nnmail-moved-inboxes)
                (if (and (not (buffer-modified-p errors))
                         (zerop result))
@@ -631,9 +655,6 @@ parameter.  It should return nil, `warn' or `delete'."
                            (set-file-modes
                             tofile nnmail-default-file-modes))))
                    ;; Probably a real error.
-                   ;; We nix out the password in case the error
-                   ;; was because of a wrong password being given.
-                   (setq nnmail-internal-password nil)
                    (subst-char-in-region (point-min) (point-max) ?\n ?\  )
                    (goto-char (point-max))
                    (skip-chars-backward " \t")
@@ -669,14 +690,15 @@ nn*-request-list should have been called before calling this function."
              group-assoc)))
     group-assoc))
 
-(defvar nnmail-active-file-coding-system 'binary
+(defvar nnmail-active-file-coding-system
+  'iso-8859-1
   "*Coding system for active file.")
 
 (defun nnmail-save-active (group-assoc file-name)
   "Save GROUP-ASSOC in ACTIVE-FILE."
   (let ((coding-system-for-write nnmail-active-file-coding-system))
     (when file-name
-      (with-temp-file file-name
+      (nnheader-temp-write file-name
        (nnmail-generate-active group-assoc)))))
 
 (defun nnmail-generate-active (alist)
@@ -808,7 +830,7 @@ is a spool.  If not using procmail, return GROUP."
          (when (and (or (bobp)
                         (save-excursion
                           (forward-line -1)
-                          (eq (char-after) ?\n)))
+                          (= (following-char) ?\n)))
                     (save-excursion
                       (forward-line 1)
                       (while (looking-at ">From \\|From ")
@@ -837,7 +859,7 @@ is a spool.  If not using procmail, return GROUP."
          (when (and (or (bobp)
                         (save-excursion
                           (forward-line -1)
-                          (eq (char-after) ?\n)))
+                          (= (following-char) ?\n)))
                     (save-excursion
                       (forward-line 1)
                       (while (looking-at ">From \\|From ")
@@ -1001,6 +1023,7 @@ FUNC will be called with the buffer narrowed to each mail."
     (save-excursion
       ;; Insert the incoming file.
       (set-buffer (get-buffer-create " *nnmail incoming*"))
+      (buffer-disable-undo (current-buffer))
       (erase-buffer)
       (nnheader-insert-file-contents incoming)
       (unless (zerop (buffer-size))
@@ -1020,7 +1043,7 @@ FUNC will be called with the buffer narrowed to each mail."
        (funcall exit-func))
       (kill-buffer (current-buffer)))))
 
-(defun nnmail-article-group (func &optional trace)
+(defun nnmail-article-group (func)
   "Look at the headers and return an alist of groups that match.
 FUNC will be called with the group name to determine the article number."
   (let ((methods nnmail-split-methods)
@@ -1059,8 +1082,6 @@ FUNC will be called with the group name to determine the article number."
        ;; Allow washing.
        (goto-char (point-min))
        (run-hooks 'nnmail-split-hook)
-       (when (setq nnmail-split-tracing trace)
-         (setq nnmail-split-trace nil))
        (if (and (symbolp nnmail-split-methods)
                 (fboundp nnmail-split-methods))
            (let ((split
@@ -1109,7 +1130,8 @@ FUNC will be called with the group name to determine the article number."
                       ;; group twice.
                       (not (assoc (car method) group-art)))
                  (push (cons (if regrepp
-                                 (nnmail-expand-newtext (car method))
+                                 (replace-match
+                                  (car method) nil nil (car method))
                                (car method))
                              (funcall func (car method)))
                        group-art))
@@ -1119,18 +1141,6 @@ FUNC will be called with the group name to determine the article number."
                (setq group-art
                      (list (cons (car method)
                                  (funcall func (car method)))))))))
-       ;; Produce a trace if non-empty.
-       (when (and trace nnmail-split-trace)
-         (let ((trace (nreverse nnmail-split-trace))
-               (restore (current-buffer)))
-           (nnheader-set-temp-buffer "*Split Trace*")
-           (gnus-add-buffer)
-           (while trace
-             (insert (car trace) "\n")
-             (setq trace (cdr trace)))
-           (goto-char (point-min))
-           (gnus-configure-windows 'split-trace)
-           (set-buffer restore)))
        ;; See whether the split methods returned `junk'.
        (if (equal group-art '(junk))
            nil
@@ -1171,9 +1181,8 @@ Return the number of characters in the body."
       (insert (format "Xref: %s" (system-name)))
       (while group-alist
        (insert (format " %s:%d"
-                       (mm-encode-coding-string
-                        (caar group-alist)
-                        nnmail-pathname-coding-system)
+                       (gnus-encode-coding-string (caar group-alist)
+                                             nnmail-pathname-coding-system)
                        (cdar group-alist)))
        (setq group-alist (cdr group-alist)))
       (insert "\n"))))
@@ -1228,87 +1237,81 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
 
 (defun nnmail-split-it (split)
   ;; Return a list of groups matching SPLIT.
-  (let (cached-pair)
-    (cond
-     ;; nil split
-     ((null split)
-      nil)
-
-     ;; A group name.  Do the \& and \N subs into the string.
-     ((stringp split)
-      (when nnmail-split-tracing
-       (push (format "\"%s\"" split) nnmail-split-trace))
-      (list (nnmail-expand-newtext split)))
-
-     ;; Junk the message.
-     ((eq split 'junk)
-      (when nnmail-split-tracing
-       (push "junk" nnmail-split-trace))
-      (list 'junk))
-
-     ;; Builtin & operation.
-     ((eq (car split) '&)
-      (apply 'nconc (mapcar 'nnmail-split-it (cdr split))))
-
-     ;; Builtin | operation.
-     ((eq (car split) '|)
-      (let (done)
-       (while (and (not done) (cdr split))
-         (setq split (cdr split)
-               done (nnmail-split-it (car split))))
-       done))
-
-     ;; Builtin : operation.
-     ((eq (car split) ':)
-      (nnmail-split-it (save-excursion (eval (cdr split)))))
-
-     ;; Check the cache for the regexp for this split.
-     ((setq cached-pair (assq split nnmail-split-cache))
-      (goto-char (point-max))
-      ;; FIX FIX FIX problem with re-search-backward is that if you have
-      ;; a split: (from "foo-\\(bar\\|baz\\)@gnus.org "mail.foo.\\1")
-      ;; and someone mails a message with 'To: foo-bar@gnus.org' and
-      ;; 'CC: foo-baz@gnus.org', we'll pick 'mail.foo.baz' as the group
-      ;; if the cc line is a later header, even though the other choice
-      ;; is probably better.  Also, this routine won't do a crosspost
-      ;; when there are two different matches.
-      ;; I guess you could just make this more determined, and it could
-      ;; look for still more matches prior to this one, and recurse
-      ;; on each of the multiple matches hit.  Of course, then you'd
-      ;; want to make sure that nnmail-article-group or nnmail-split-fancy
-      ;; removed duplicates, since there might be more of those.
-      ;; I guess we could also remove duplicates in the & split case, since
-      ;; that's the only thing that can introduce them.
-      (when (re-search-backward (cdr cached-pair) nil t)
-       (when nnmail-split-tracing
-         (push (cdr cached-pair) nnmail-split-trace))
-       ;; Someone might want to do a \N sub on this match, so get the
-       ;; correct match positions.
-       (goto-char (match-end 0))
-       (let ((value (nth 1 split)))
-         (re-search-backward (if (symbolp value)
-                                 (cdr (assq value nnmail-split-abbrev-alist))
-                               value)
-                             (match-end 1)))
-       (nnmail-split-it (nth 2 split))))
-
-     ;; Not in cache, compute a regexp for the field/value pair.
-     (t
-      (let* ((field (nth 0 split))
-            (value (nth 1 split))
-            (regexp (concat "^\\(\\("
-                            (if (symbolp field)
-                                (cdr (assq field nnmail-split-abbrev-alist))
-                              field)
-                            "\\):.*\\)\\<\\("
-                            (if (symbolp value)
-                                (cdr (assq value nnmail-split-abbrev-alist))
-                              value)
-                            "\\)\\>")))
-       (push (cons split regexp) nnmail-split-cache)
-       ;; Now that it's in the cache, just call nnmail-split-it again
-       ;; on the same split, which will find it immediately in the cache.
-       (nnmail-split-it split))))))
+  (cond
+   ;; nil split
+   ((null split)
+    nil)
+
+   ;; A group name.  Do the \& and \N subs into the string.
+   ((stringp split)
+    (list (nnmail-expand-newtext split)))
+
+   ;; Junk the message.
+   ((eq split 'junk)
+    (list 'junk))
+
+   ;; Builtin & operation.
+   ((eq (car split) '&)
+    (apply 'nconc (mapcar 'nnmail-split-it (cdr split))))
+
+   ;; Builtin | operation.
+   ((eq (car split) '|)
+    (let (done)
+      (while (and (not done) (cdr split))
+       (setq split (cdr split)
+             done (nnmail-split-it (car split))))
+      done))
+
+   ;; Builtin : operation.
+   ((eq (car split) ':)
+    (nnmail-split-it (save-excursion (eval (cdr split)))))
+
+   ;; Check the cache for the regexp for this split.
+   ;; FIX FIX FIX could avoid calling assq twice here
+   ((assq split nnmail-split-cache)
+    (goto-char (point-max))
+    ;; FIX FIX FIX problem with re-search-backward is that if you have
+    ;; a split: (from "foo-\\(bar\\|baz\\)@gnus.org "mail.foo.\\1")
+    ;; and someone mails a message with 'To: foo-bar@gnus.org' and
+    ;; 'CC: foo-baz@gnus.org', we'll pick 'mail.foo.baz' as the group
+    ;; if the cc line is a later header, even though the other choice
+    ;; is probably better.  Also, this routine won't do a crosspost
+    ;; when there are two different matches.
+    ;; I guess you could just make this more determined, and it could
+    ;; look for still more matches prior to this one, and recurse
+    ;; on each of the multiple matches hit.  Of course, then you'd
+    ;; want to make sure that nnmail-article-group or nnmail-split-fancy
+    ;; removed duplicates, since there might be more of those.
+    ;; I guess we could also remove duplicates in the & split case, since
+    ;; that's the only thing that can introduce them.
+    (when (re-search-backward (cdr (assq split nnmail-split-cache)) nil t)
+      ;; Someone might want to do a \N sub on this match, so get the
+      ;; correct match positions.
+      (goto-char (match-end 0))
+      (let ((value (nth 1 split)))
+       (re-search-backward (if (symbolp value)
+                               (cdr (assq value nnmail-split-abbrev-alist))
+                             value)
+                           (match-end 1)))
+      (nnmail-split-it (nth 2 split))))
+
+   ;; Not in cache, compute a regexp for the field/value pair.
+   (t
+    (let* ((field (nth 0 split))
+          (value (nth 1 split))
+          (regexp (concat "^\\(\\("
+                          (if (symbolp field)
+                              (cdr (assq field nnmail-split-abbrev-alist))
+                            field)
+                          "\\):.*\\)\\<\\("
+                          (if (symbolp value)
+                              (cdr (assq value nnmail-split-abbrev-alist))
+                            value)
+                          "\\)\\>")))
+      (push (cons split regexp) nnmail-split-cache)
+      ;; Now that it's in the cache, just call nnmail-split-it again
+      ;; on the same split, which will find it immediately in the cache.
+      (nnmail-split-it split)))))
 
 (defun nnmail-expand-newtext (newtext)
   (let ((len (length newtext))
@@ -1322,14 +1325,14 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
       (unless (= beg pos)
        (push (substring newtext beg pos) expanded))
       (when (< pos len)
-       ;; We hit a \; expand it.
-       (setq did-expand t
-             pos (1+ pos)
-             c (aref newtext pos))
+       ;; we hit a \, expand it.
+       (setq did-expand t)
+       (setq pos (1+ pos))
+       (setq c (aref newtext pos))
        (if (not (or (= c ?\&)
                     (and (>= c ?1)
                          (<= c ?9))))
-           ;; \ followed by some character we don't expand.
+           ;; \ followed by some character we don't expand
            (push (char-to-string c) expanded)
          ;; \& or \N
          (if (= c ?\&)
@@ -1454,6 +1457,7 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
       (set-buffer
        (setq nnmail-cache-buffer
             (get-buffer-create " *nnmail message-id cache*")))
+      (buffer-disable-undo (current-buffer))
       (when (file-exists-p nnmail-message-id-cache-file)
        (nnheader-insert-file-contents nnmail-message-id-cache-file))
       (set-buffer-modified-p nil)
@@ -1521,9 +1525,9 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
     ;; Let the backend save the article (or not).
     (cond
      ((not duplication)
+      (nnmail-cache-insert message-id)
       (funcall func (setq group-art
-                         (nreverse (nnmail-article-group artnum-func))))
-      (nnmail-cache-insert message-id))
+                         (nreverse (nnmail-article-group artnum-func)))))
      ((eq action 'delete)
       (setq group-art nil))
      ((eq action 'warn)
@@ -1640,11 +1644,9 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
             ;; This is an ange-ftp group, and we don't have any dates.
             nil)
            ((numberp days)
-            (setq days (days-to-time days))
+            (setq days (nnmail-days-to-time days))
             ;; Compare the time with the current time.
-            (condition-case ()
-                (time-less-p days (time-since time))
-              (error nil)))))))
+            (nnmail-time-less days (nnmail-time-since time)))))))
 
 (defvar nnmail-read-passwd nil)
 (defun nnmail-read-passwd (prompt &rest args)
@@ -1709,11 +1711,11 @@ If ARGS, PROMPT is used as an argument to `format'."
        (goto-char (point-min))
        (while (re-search-forward "[^ \t=]+" nil t)
          (setq name (match-string 0))
-         (if (not (eq (char-after) ?=))
+         (if (not (= (following-char) ?=))
              ;; Implied "yes".
              (setq value "yes")
            (forward-char 1)
-           (if (not (eq (char-after) ?\"))
+           (if (not (= (following-char) ?\"))
                (if (not (looking-at "[^ \t]"))
                    ;; Implied "no".
                    (setq value "no")
@@ -1753,7 +1755,8 @@ If ARGS, PROMPT is used as an argument to `format'."
 
 (defun nnmail-purge-split-history (group)
   "Remove all instances of GROUP from `nnmail-split-history'."
-  (let ((history nnmail-split-history))
+  (let ((history nnmail-split-history)
+       prev)
     (while history
       (setcar history (gnus-delete-if (lambda (e) (string= (car e) group))
                                      (car history)))
@@ -1776,11 +1779,7 @@ If ARGS, PROMPT is used as an argument to `format'."
 (defun nnmail-pop3-movemail (inbox crashbox)
   "Function to move mail from INBOX on a pop3 server to file CRASHBOX."
   (let ((pop3-maildrop
-         (substring inbox (match-end (string-match "^po:" inbox))))
-       (pop3-password
-        (or nnmail-pop-password
-            (nnmail-read-passwd
-             (format "Password for %s: " inbox)))))
+         (substring inbox (match-end (string-match "^po:" inbox)))))
     (pop3-movemail crashbox)))
 
 (defun nnmail-within-headers-p ()
index 13fc297..1f05d1d 100644 (file)
            (nnmbox-article-group-number)))))))
 
 (deffoo nnmbox-request-group (group &optional server dont-check)
-  (nnmbox-possibly-change-newsgroup nil server)
   (let ((active (cadr (assoc group nnmbox-group-alist))))
     (cond
      ((or (null active)
      (nnmbox-request-article article group server)
      (save-excursion
        (set-buffer buf)
+       (buffer-disable-undo (current-buffer))
        (erase-buffer)
        (insert-buffer-substring nntp-server-buffer)
        (goto-char (point-min))
     (save-excursion
       (set-buffer (setq nnmbox-mbox-buffer
                        (nnheader-find-file-noselect
-                        nnmbox-mbox-file nil t)))
-      (mm-enable-multibyte)
-      (buffer-disable-undo)))
+                        nnmbox-mbox-file nil 'raw)))
+      (buffer-disable-undo (current-buffer))))
   (when (not nnmbox-group-alist)
     (nnmail-activate 'nnmbox))
   (if newsgroup
            start end number)
        (set-buffer (setq nnmbox-mbox-buffer
                          (nnheader-find-file-noselect
-                          nnmbox-mbox-file nil t)))
-       (mm-enable-multibyte)
-       (buffer-disable-undo)
+                          nnmbox-mbox-file nil 'raw)))
+       (buffer-disable-undo (current-buffer))
 
        ;; Go through the group alist and compare against
        ;; the mbox file.
index 769d865..c359e95 100644 (file)
                                (expand-file-name nnmh-toplev))))
               dir)
              (nnheader-replace-chars-in-string
-              (mm-decode-coding-string (substring dir (match-end 0))
-                                       nnmail-pathname-coding-system)
+              (gnus-decode-coding-string (substring dir (match-end 0))
+                                         nnmail-pathname-coding-system)
               ?/ ?.))
            (apply 'max files)
            (apply 'min files)))))))
 (deffoo nnmh-request-expire-articles (articles newsgroup
                                               &optional server force)
   (nnmh-possibly-change-directory newsgroup server)
-  (let* ((is-old t)
+  (let* ((active-articles
+         (mapcar
+          (function
+           (lambda (name)
+             (string-to-int name)))
+          (directory-files nnmh-current-directory nil "^[0-9]+$" t)))
+        (is-old t)
         article rest mod-time)
     (nnheader-init-server-buffer)
 
     (setq articles (sort articles (lambda (art1 art2)
                                    (> (car art1) (car art2)))))
     ;; Finally write this list back to the .nnmh-articles file.
-    (with-temp-file nnmh-file
+    (nnheader-temp-write nnmh-file
       (insert ";; Gnus article active file for " group "\n\n")
       (insert "(setq nnmh-newsgroup-articles '")
       (gnus-prin1 articles)
index 4e847bf..e7a1df9 100644 (file)
@@ -225,7 +225,6 @@ all.  This may very well take some time.")
   t)
 
 (deffoo nnml-request-create-group (group &optional server args)
-  (nnml-possibly-change-directory nil server)
   (nnmail-activate 'nnml)
   (cond
    ((assoc group nnml-group-alist)
@@ -250,8 +249,9 @@ 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)) 
-      (nnmail-find-file nnml-active-file))
+         (pathname-coding-system 'binary)) ; for XEmacs/mule
+      (nnmail-find-file nnml-active-file)
+      )
     (setq nnml-group-alist (nnmail-get-active))
     t))
 
@@ -469,7 +469,7 @@ all.  This may very well take some time.")
      ((not (file-exists-p file))
       (nnheader-report 'nnml "File %s does not exist" file))
      (t
-      (with-temp-file file
+      (nnheader-temp-write file
        (nnheader-insert-file-contents file)
        (nnmail-replace-status name value))
       t))))
@@ -503,6 +503,7 @@ all.  This may very well take some time.")
 (defun nnml-find-group-number (id)
   (save-excursion
     (set-buffer (get-buffer-create " *nnml id*"))
+    (buffer-disable-undo (current-buffer))
     (let ((alist nnml-group-alist)
          number)
       ;; We want to look through all .overview files, but we want to
@@ -575,10 +576,15 @@ all.  This may very well take some time.")
       (file-exists-p nnml-current-directory))))
 
 (defun nnml-possibly-create-directory (group)
-  (let ((dir (nnmail-group-pathname group nnml-directory)))
-    (unless (file-exists-p dir)
-      (make-directory (directory-file-name dir) t)
-      (nnheader-message 5 "Creating mail directory %s" dir))))
+  (let (dir dirs)
+    (setq dir (nnmail-group-pathname group nnml-directory))
+    (while (not (file-directory-p dir))
+      (push dir dirs)
+      (setq dir (file-name-directory (directory-file-name dir))))
+    (while dirs
+      (make-directory (directory-file-name (car dirs)))
+      (nnheader-message 5 "Creating mail directory %s" (car dirs))
+      (setq dirs (cdr dirs)))))
 
 (defun nnml-save-mail (group-art)
   "Called narrowed to an article."
@@ -727,7 +733,7 @@ all.  This may very well take some time.")
     (let ((dirs (directory-files dir t nil t))
          dir)
       (while (setq dir (pop dirs))
-       (when (and (not (string-match "^\\." (file-name-nondirectory dir)))
+       (when (and (not (member (file-name-nondirectory dir) '("." "..")))
                   (file-directory-p dir))
          (nnml-generate-nov-databases-1 dir seen))))
     ;; Do this directory.
@@ -767,7 +773,7 @@ all.  This may very well take some time.")
     (save-excursion
       ;; Init the nov buffer.
       (set-buffer nov-buffer)
-      (buffer-disable-undo)
+      (buffer-disable-undo (current-buffer))
       (erase-buffer)
       (set-buffer nntp-server-buffer)
       ;; Delete the old NOV file.
index d676f0c..9c27786 100644 (file)
                        (cdr (assq pbackend (nnoo-parents backend))))
     (prog1
        (apply function args)
-      ;; Copy the changed variables back into the child.
-      (let ((vars (cdr (assq pbackend (nnoo-parents backend)))))
-       (while vars
-         (set (cadar vars) (symbol-value (caar vars)))
-         (setq vars (cdr vars)))))))
+    ;; Copy the changed variables back into the child.
+    (let ((vars (cdr (assq pbackend (nnoo-parents backend)))))
+      (while vars
+       (set (cadar vars) (symbol-value (caar vars)))
+       (setq vars (cdr vars)))))))
 
 (defun nnoo-execute (backend function &rest args)
   "Execute FUNCTION on behalf of BACKEND."
index 4931808..e764150 100644 (file)
@@ -376,7 +376,7 @@ backend for the messages.")
             (or force
                 nnsoup-group-alist-touched))
     (setq nnsoup-group-alist-touched nil)
-    (with-temp-file nnsoup-active-file
+    (nnheader-temp-write nnsoup-active-file
       (gnus-prin1 `(setq nnsoup-group-alist ',nnsoup-group-alist))
       (insert "\n")
       (gnus-prin1 `(setq nnsoup-current-prefix ,nnsoup-current-prefix))
@@ -530,7 +530,7 @@ backend for the messages.")
        (when (file-exists-p (concat nnsoup-directory file))
          (save-excursion               ; Load the file.
            (set-buffer (get-buffer-create buffer-name))
-           (buffer-disable-undo)
+           (buffer-disable-undo (current-buffer))
            (push (cons nnsoup-current-group (current-buffer)) nnsoup-buffers)
            (nnheader-insert-file-contents (concat nnsoup-directory file))
            (current-buffer))))))
@@ -752,6 +752,7 @@ backend for the messages.")
                                 (string-to-int (match-string 1 f2)))))))
        active group lines ident elem min)
     (set-buffer (get-buffer-create " *nnsoup work*"))
+    (buffer-disable-undo (current-buffer))
     (while files
       (nnheader-message 5 "Doing %s..." (car files))
       (erase-buffer)
index dd3d89c..6914f78 100644 (file)
@@ -28,6 +28,7 @@
 
 (require 'nnheader)
 (require 'nntp)
+(require 'timezone)
 (require 'nnoo)
 (eval-when-compile (require 'cl))
 
@@ -279,7 +280,7 @@ there.")
        (while (and (not (looking-at
                          "\\([^ ]+\\) +\\([0-9]+\\)[0-9][0-9][0-9] "))
                    (zerop (forward-line -1))))
-       (let ((seconds (time-to-seconds (date-to-time date)))
+       (let ((seconds (nnspool-seconds-since-epoch date))
              groups)
          ;; Go through lines and add the latest groups to a list.
          (while (and (looking-at "\\([^ ]+\\) +[0-9]+ ")
@@ -419,6 +420,7 @@ there.")
 (defun nnspool-find-id (id)
   (save-excursion
     (set-buffer (get-buffer-create " *nnspool work*"))
+    (buffer-disable-undo (current-buffer))
     (erase-buffer)
     (ignore-errors
       (call-process "grep" nil t nil (regexp-quote id) nnspool-history-file))
@@ -451,6 +453,18 @@ there.")
   "Find the path for GROUP."
   (nnheader-group-pathname group nnspool-spool-directory article))
 
+(defun nnspool-seconds-since-epoch (date)
+  (let* ((tdate (mapcar (lambda (ti) (and ti (string-to-int ti)))
+                       (timezone-parse-date date)))
+        (ttime (mapcar (lambda (ti) (and ti (string-to-int ti)))
+                       (timezone-parse-time
+                        (aref (timezone-parse-date date) 3))))
+        (unix (encode-time (nth 2 ttime) (nth 1 ttime) (nth 0 ttime)
+                           (nth 2 tdate) (nth 1 tdate) (nth 0 tdate)
+                           (nth 4 tdate))))
+    (+ (* (car unix) 65536.0)
+       (cadr unix))))
+
 (provide 'nnspool)
 
 ;;; nnspool.el ends here
index d9972ef..67eafb7 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nntp.el --- nntp access for Gnus
-;;; Copyright (C) 1987-90,92-98 Free Software Foundation, Inc.
+;;; Copyright (C) 1987-90,92-97 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
 
 (nnoo-declare nntp)
 
+(eval-and-compile
+  (unless (fboundp 'open-network-stream)
+    (require 'tcp)))
+
 (eval-when-compile (require 'cl))
 
 (defvoo nntp-address nil
 (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
-server spawn an nnrpd server.")
+server spawn an nnrpd server.  Another useful function to put in this
+hook might be `nntp-send-authinfo', which will prompt for a password
+to allow posting from the server.  Note that this is only necessary to
+do on servers that use strict access control.")
 
 (defvoo nntp-authinfo-function 'nntp-send-authinfo
-  "Function used to send AUTHINFO to the server.
-It is called with no parameters.")
+  "Function used to send AUTHINFO to the server.")
 
 (defvoo nntp-server-action-alist
   '(("nntpd 1\\.5\\.11t"
@@ -175,10 +181,6 @@ server there that you can connect to.  See also
 
 \f
 
-(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.")
-
 ;;; Internal variables.
 
 (defvar nntp-record-commands nil
@@ -195,7 +197,6 @@ If this variable is nil, which is the default, no timers are set.")
 (defvoo nntp-last-command-time nil)
 (defvoo nntp-last-command nil)
 (defvoo nntp-authinfo-password nil)
-(defvoo nntp-authinfo-user nil)
 
 (defvar nntp-connection-list nil)
 
@@ -233,10 +234,8 @@ If this variable is nil, which is the default, no timers are set.")
   (save-excursion
     (set-buffer (get-buffer-create "*nntp-log*"))
     (goto-char (point-max))
-    (let ((time (current-time)))
-      (insert (format-time-string "%Y%m%dT%H%M%S" time)
-             "." (format "%03d" (/ (nth 2 time) 1000))
-             " " nntp-address " " string "\n"))))
+    (insert (format-time-string "%Y%m%dT%H%M%S" (current-time))
+           " " nntp-address " " string "\n")))
 
 (defsubst nntp-wait-for (process wait-for buffer &optional decode discard)
   "Wait for WAIT-FOR to arrive from PROCESS."
@@ -270,9 +269,9 @@ If this variable is nil, which is the default, no timers are set.")
          (nntp-decode-text (not decode))
          (unless discard
            (save-excursion
-             (set-buffer buffer)
-             (goto-char (point-max))
-             (insert-buffer-substring (process-buffer process))
+             (set-buffer buffer)
+             (goto-char (point-max))
+             (insert-buffer-substring (process-buffer process))
              ;; Nix out "nntp reading...." message.
              (when nntp-have-messaged
                (setq nntp-have-messaged nil)
@@ -393,22 +392,18 @@ If this variable is nil, which is the default, no timers are set.")
 (nnoo-define-basics nntp)
 
 (defsubst nntp-next-result-arrived-p ()
-  (cond
-   ;; A result that starts with a 2xx code is terminated by
-   ;; a line with only a "." on it.
-   ((eq (char-after) ?2)
-    (if (re-search-forward "\n\\.\r?\n" nil t)
-       t
-      nil))
-   ;; A result that starts with a 3xx or 4xx code is terminated
-   ;; by a newline.
-   ((looking-at "[34]")
-    (if (search-forward "\n" nil t)
-       t
-      nil))
-   ;; No result here.
-   (t
-    nil)))
+  (let ((point (point)))
+    (cond
+     ((eq (following-char) ?2)
+      (if (re-search-forward "\n\\.\r?\n" nil t)
+         t
+       (goto-char point)
+       nil))
+     ((looking-at "[34]")
+      (forward-line 1)
+      t)
+     (t
+      nil))))
 
 (deffoo nntp-retrieve-headers (articles &optional group server fetch-old)
   "Retrieve the headers of ARTICLES."
@@ -545,7 +540,7 @@ If this variable is nil, which is the default, no timers are set.")
          (nntp-inhibit-erase t)
          (map (apply 'vector articles))
          (point 1)
-         article)
+         article alist)
       (set-buffer buf)
       (erase-buffer)
       ;; Send ARTICLE command.
@@ -585,7 +580,7 @@ If this variable is nil, which is the default, no timers are set.")
           (nnheader-message 6 "NNTP: Receiving articles...done"))
       
       ;; Now we have all the responses.  We go through the results,
-      ;; wash it and copy it over to the server buffer.
+      ;; washes it and copies it over to the server buffer.
       (set-buffer nntp-server-buffer)
       (erase-buffer)
       (setq last-point (point-min))
@@ -614,14 +609,9 @@ If this variable is nil, which is the default, no timers are set.")
           (setq nntp-server-list-active-group t)))))
 
 (deffoo nntp-list-active-group (group &optional server)
-  "Return the active info on GROUP (which can be a regexp)."
+  "Return the active info on GROUP (which can be a regexp."
   (nntp-possibly-change-group nil server)
-  (nntp-send-command "^\\.*\r?\n" "LIST ACTIVE" group))
-
-(deffoo nntp-request-group-articles (group &optional server)
-  "Return the list of existing articles in GROUP."
-  (nntp-possibly-change-group nil server)
-  (nntp-send-command "^\\.*\r?\n" "LISTGROUP" group))
+  (nntp-send-command "^.*\r?\n" "LIST ACTIVE" group))
 
 (deffoo nntp-request-article (article &optional group server buffer command)
   (nntp-possibly-change-group group server)
@@ -689,10 +679,6 @@ If this variable is nil, which is the default, no timers are set.")
        (ignore-errors
          (nntp-send-string process "QUIT")
          (unless (eq nntp-open-connection-function 'nntp-open-network-stream)
-           ;; Ok, this is evil, but when using telnet and stuff
-           ;; as the connection method, it's important that the
-           ;; QUIT command actually is sent out before we kill
-           ;; the process.  
            (sleep-for 1))))
       (when (buffer-name (process-buffer process))
        (kill-buffer (process-buffer process)))
@@ -729,7 +715,7 @@ If this variable is nil, which is the default, no timers are set.")
     (prog1
        (nntp-send-command
         "^\\.\r?\n" "NEWGROUPS"
-        (format-time-string "%y%m%d %H%M%S" (date-to-time date)))
+        (format-time-string "%y%m%d %H%M%S" (nnmail-date-to-time date)))
       (nntp-decode-text))))
 
 (deffoo nntp-request-post (&optional server)
@@ -750,46 +736,39 @@ If this variable is nil, which is the default, no timers are set.")
 This function is supposed to be called from `nntp-server-opened-hook'.
 It will make innd servers spawn an nnrpd process to allow actual article
 reading."
-  (nntp-send-command "^.*\n" "MODE READER"))
+  (nntp-send-command "^.*\r?\n" "MODE READER"))
 
 (defun nntp-send-authinfo (&optional send-if-force)
   "Send the AUTHINFO to the nntp server.
 It will look in the \"~/.authinfo\" file for matching entries.  If
 nothing suitable is found there, it will prompt for a user name
-and a password.
-
-If SEND-IF-FORCE, only send authinfo to the server if the
-.authinfo file has the FORCE token."
+and a password."
   (let* ((list (gnus-parse-netrc nntp-authinfo-file))
         (alist (gnus-netrc-machine list nntp-address))
         (force (gnus-netrc-get alist "force"))
-        (user (or (gnus-netrc-get alist "login") nntp-authinfo-user))
+        (user (gnus-netrc-get alist "login"))
         (passwd (gnus-netrc-get alist "password")))
     (when (or (not send-if-force)
              force)
-      (unless user
-       (setq user (read-string (format "NNTP (%s) user name: " nntp-address))
-             nntp-authinfo-user user))
-      (unless (member user '(nil ""))
-       (nntp-send-command "^3.*\r?\n" "AUTHINFO USER" user)
-       (when t                         ;???Should check if AUTHINFO succeeded
+      (nntp-send-command
+       "^3.*\r?\n" "AUTHINFO USER"
+       (or user (read-string (format "NNTP (%s) user name: " nntp-address))))
       (nntp-send-command
        "^2.*\r?\n" "AUTHINFO PASS"
        (or passwd
           nntp-authinfo-password
           (setq nntp-authinfo-password
-                    (nnmail-read-passwd (format "NNTP (%s@%s) password: "
-                                                user nntp-address))))))))))
+                (nnmail-read-passwd (format "NNTP (%s) password: "
+                                            nntp-address))))))))
 
 (defun nntp-send-nosy-authinfo ()
   "Send the AUTHINFO to the nntp server."
-  (let ((user (read-string (format "NNTP (%s) user name: " nntp-address))))
-    (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"
-                          (nnmail-read-passwd "NNTP (%s@%s) password: "
-                                              user nntp-address))))))
+  (nntp-send-command
+   "^3.*\r?\n" "AUTHINFO USER"
+   (read-string (format "NNTP (%s) user name: " nntp-address)))
+  (nntp-send-command
+   "^2.*\r?\n" "AUTHINFO PASS"
+   (nnmail-read-passwd "NNTP (%s) password: " nntp-address)))
 
 (defun nntp-send-authinfo-from-file ()
   "Send the AUTHINFO to the nntp server.
@@ -797,7 +776,7 @@ If SEND-IF-FORCE, only send authinfo to the server if the
 The authinfo login name is taken from the user's login name and the
 password contained in '~/.nntp-authinfo'."
   (when (file-exists-p "~/.nntp-authinfo")
-    (with-temp-buffer
+    (nnheader-temp-write nil
       (insert-file-contents "~/.nntp-authinfo")
       (goto-char (point-min))
       (nntp-send-command "^3.*\r?\n" "AUTHINFO USER" (user-login-name))
@@ -826,7 +805,7 @@ password contained in '~/.nntp-authinfo'."
       (format " *server %s %s %s*"
              nntp-address nntp-port-number
              (gnus-buffer-exists-p buffer))))
-    (mm-enable-multibyte)
+    (buffer-disable-undo (current-buffer))
     (set (make-local-variable 'after-change-functions) nil)
     (set (make-local-variable 'nntp-process-wait-for) nil)
     (set (make-local-variable 'nntp-process-callback) nil)
@@ -839,24 +818,13 @@ password contained in '~/.nntp-authinfo'."
   "Open a connection to PORT on ADDRESS delivering output to BUFFER."
   (run-hooks 'nntp-prepare-server-hook)
   (let* ((pbuffer (nntp-make-process-buffer buffer))
-        (timer 
-         (and nntp-connection-timeout 
-              (nnheader-run-at-time
-               nntp-connection-timeout nil
-               `(lambda ()
-                  (when (buffer-name ,pbuffer)
-                    (kill-buffer ,pbuffer))))))
         (process
          (condition-case ()
-             (let ((coding-system-for-read nntp-coding-system-for-read)
-                    (coding-system-for-write nntp-coding-system-for-write))
+             (let ((coding-system-for-read nntp-coding-system-for-read))
                (funcall nntp-open-connection-function pbuffer))
            (error nil)
            (quit nil))))
-    (when timer 
-      (nnheader-cancel-timer timer))
-    (when (and (buffer-name pbuffer)
-              process)
+    (when process
       (process-kill-without-query process)
       (nntp-wait-for process "^.*\n" buffer nil t)
       (if (memq (process-status process) '(open run))
@@ -1020,7 +988,10 @@ password contained in '~/.nntp-authinfo'."
     (while (not (eobp))
       (end-of-line)
       (delete-char 1)
-      (insert nntp-end-of-line))))
+      (insert nntp-end-of-line))
+    (forward-char -1)
+    (unless (eq (char-after (1- (point))) ?\r)
+      (insert "\r"))))
 
 (defun nntp-retrieve-headers-with-xover (articles &optional fetch-old)
   (set-buffer nntp-server-buffer)
@@ -1116,6 +1087,7 @@ password contained in '~/.nntp-authinfo'."
          (delete-char -1))
        (goto-char (point-min))
        (delete-matching-lines "^\\.$\\|^[1-5][0-9][0-9] ")
+       ;;(copy-to-buffer nntp-server-buffer (point-min) (point-max))
        t))))
 
   nntp-server-xover)
index b1d4119..d83356d 100644 (file)
@@ -43,7 +43,7 @@
 
 (nnoo-declare nnvirtual)
 
-(defvoo nnvirtual-always-rescan t
+(defvoo nnvirtual-always-rescan nil
   "*If non-nil, always scan groups for unread articles when entering a group.
 If this variable is nil (which is the default) and you read articles
 in a component group after the virtual group has been activated, the
@@ -259,14 +259,12 @@ to virtual article number.")
     (setq nnvirtual-current-group nil)
     (nnheader-report 'nnvirtual "No component groups in %s" group))
    (t
-    (setq nnvirtual-current-group group)
     (when (or (not dont-check)
              nnvirtual-always-rescan)
       (nnvirtual-create-mapping)
       (when nnvirtual-always-rescan
-       (nnvirtual-request-update-info
-        (nnvirtual-current-group)
-        (gnus-get-info (nnvirtual-current-group)))))
+       (nnvirtual-request-update-info group (gnus-get-info group))))
+    (setq nnvirtual-current-group group)
     (nnheader-insert "211 %d 1 %d %s\n"
                     nnvirtual-mapping-len nnvirtual-mapping-len group))))
 
@@ -274,12 +272,9 @@ to virtual article number.")
 (deffoo nnvirtual-request-type (group &optional article)
   (if (not article)
       'unknown
-    (if (numberp article)
-       (let ((mart (nnvirtual-map-article article)))
-         (if mart
-             (gnus-request-type (car mart) (cdr mart))))
-      (gnus-request-type
-       nnvirtual-last-accessed-component-group nil))))
+    (let ((mart (nnvirtual-map-article article)))
+      (when mart
+       (gnus-request-type (car mart) (cdr mart))))))
 
 (deffoo nnvirtual-request-update-mark (group article mark)
   (let* ((nart (nnvirtual-map-article article))
@@ -385,7 +380,7 @@ to virtual article number.")
     (insert "\t"))
 
   ;; Remove any spaces at the beginning of the Xref field.
-  (while (eq (char-after (1- (point))) ? )
+  (while (= (char-after (1- (point))) ? )
     (forward-char -1)
     (delete-char 1))
 
@@ -417,7 +412,7 @@ to virtual article number.")
 
   ;; Ensure a trailing \t.
   (end-of-line)
-  (or (eq (char-after (1- (point))) ?\t)
+  (or (= (char-after (1- (point))) ?\t)
       (insert ?\t)))
 
 
@@ -436,21 +431,17 @@ If UPDATE-P is not nil, call gnus-group-update-group on the components."
                        (nnvirtual-partition-sequence
                         (gnus-list-of-unread-articles
                          (nnvirtual-current-group)))))
-         (type-marks
-          (delq nil
-                (mapcar (lambda (ml)
-                          (if (eq (car ml) 'score)
-                              nil
-                            (cons (car ml)
-                                  (nnvirtual-partition-sequence (cdr ml)))))
-                        (gnus-info-marks (gnus-get-info
-                                          (nnvirtual-current-group))))))
+         (type-marks (mapcar (lambda (ml)
+                               (cons (car ml)
+                                     (nnvirtual-partition-sequence (cdr ml))))
+                             (gnus-info-marks (gnus-get-info
+                                               (nnvirtual-current-group)))))
          mark type groups carticles info entry)
 
       ;; Ok, atomically move all of the (un)read info, clear any old
       ;; marks, and move all of the current marks.  This way if someone
       ;; hits C-g, you won't leave the component groups in a half-way state.
-      (progn
+      (gnus-atomic-progn
        ;; move (un)read
        (let ((gnus-newsgroup-active nil)) ;workaround guns-update-read-articles
          (while (setq entry (pop unreads))
@@ -461,11 +452,7 @@ If UPDATE-P is not nil, call gnus-group-update-group on the components."
        (while groups
          (when (and (setq info (gnus-get-info (pop groups)))
                     (gnus-info-marks info))
-           (gnus-info-set-marks
-            info
-            (if (assq 'score (gnus-info-marks info))
-                (list (assq 'score (gnus-info-marks info)))
-              nil))))
+           (gnus-info-set-marks info nil)))
 
        ;; Ok, currently type-marks is an assq list with keys of a mark type,
        ;; with data of an assq list with keys of component group names
diff --git a/lisp/pop3-fma.el b/lisp/pop3-fma.el
new file mode 100644 (file)
index 0000000..1dbad4c
--- /dev/null
@@ -0,0 +1,311 @@
+;; pop3-fma.el.el --- POP3 for Multiple Account for Gnus.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc. , Tatsuya Ichikawa
+;;                                                           Yasuo Okabe
+;; Author: Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
+;;         Yasuo OKABE <okabe@kuis.kyoto-u.ac.jp>
+;; Version: 1.00
+;; Keywords: mail , gnus , pop3
+;;
+;; SPECIAL THANKS
+;;    Keiichi Suzuki <kei-suzu@mail.wbs.or.jp>
+;;    Katsumi Yamaoka <yamaoka@jpl.org>
+;;
+;; This file is not 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.
+;;
+;; This file store pop3 password in variable "pop3-fma-password".
+;; Please take care by yourself to treat pop3 password.
+;;
+;; How to use.
+;;
+;; add your .emacs following codes.
+;;
+;;  (require 'pop3-fma)
+;;  (setq pop3-fma-spool-file-alist
+;;        '(
+;;         "po:username0@mailhost0.your.domain0"
+;;         "po:username1@mailhost1.your.domain1"
+;;                         :
+;;                         :
+;;        ))
+;;
+;; Variables
+;;
+;;  pop3-fma-spool-file-alist      ... Spool file alist of POP3 protocol
+;;  pop3-fma-movemail-type         ... Type of movemail program.
+;;                                         'lisp or 'exe
+;;                                         'lisp use pop3.el
+;;                                         'exe use movemail
+;;  pop3-fma-movemail-arguments    ... List of options of movemail program.
+;;
+;;; Code:
+
+(require 'cl)
+(require 'custom)
+
+(unless (and (condition-case ()
+                (require 'custom)
+              (file-error nil))
+            (fboundp 'defgroup)
+            (fboundp 'defcustom))
+  (require 'backquote)
+  (defmacro defgroup (&rest args))
+  (defmacro defcustom (symbol value &optional doc &rest args)
+    (` (defvar (, symbol) (, value) (, doc))))
+  )
+
+(unless (and (fboundp 'pop3-fma-encode-string)
+            (fboundp 'pop3-fma-decode-string))
+  (require 'mel-b)
+  (fset 'pop3-fma-encode-string 'base64-encode-string)
+  (fset 'pop3-fma-decode-string 'base64-decode-string))
+
+(defgroup pop3-fma nil
+  "Multile POP3 account utility for Gnus."
+  :prefix "pop3-fma-"
+  :group 'mail
+  :group 'news)
+
+(defconst pop3-fma-version-number "1.00")
+(defconst pop3-fma-codename
+;;  "Feel the wind"            ; 0.10
+;;  "My home town"             ; 0.11
+;;  "On the road"              ; 0.12
+;;  "Rock'n Roll city"         ; 0.13
+;;  "Money"                    ; 0.20
+;;  "Still 19"                 ; 0.21
+  "J boy"                      ; 1.00
+;;  "Blood line"               ; 0.xx
+;;  "Star ring"                        ; 0.xx
+;;  "Goodbye Game"             ; 0.xx
+  )
+(defconst pop3-fma-version (format "Multiple POP3 account utiliy for Gnus v%s - \"%s\""
+                                      pop3-fma-version-number
+                                      pop3-fma-codename))
+
+(defcustom pop3-fma-spool-file-alist nil
+  "*Spool file to get mail using pop3 protocol.
+You should specify this variable like
+ '(
+   \"po:user1@mailhost1\"
+   \"po:user2@mailhost2\"
+  )"
+  :group 'pop3-fma
+  :type 'alist)
+
+(defcustom pop3-fma-local-spool-file-alist nil
+  "*List of Local spool file to get mail."
+  :group 'pop3-fma
+  :type 'alist)
+
+(defcustom pop3-fma-movemail-type 'lisp
+  "*Type of movemail program.
+Lisp means `nnmail-movemail-program' is lisp function.
+ Exe means `nnmail-movemail-program' is external program.
+ Please do not use exe if you do not use Meadow."
+  :group 'pop3-fma
+  :type '(choice (const lisp)
+                (const exe)))
+
+(defcustom pop3-fma-movemail-arguments '("-pf")
+  "*Options for movemail."
+  :group 'pop3-fma
+  :type '(repeat (string :tag "Argument")))
+
+;;; Internal variables.
+(defvar pop3-fma-password nil
+  "*POP3 password , user , mailhost information for Gnus.")
+
+(defvar pop3-fma-movemail-program "movemail.exe"
+  "*External program name your movemail.
+Please do not set this valiable non-nil if you do not use Meadow.")
+
+;; Temporary variable
+(defvar hdr nil)
+(defvar passwd nil)
+(defvar str nil)
+(defvar pop3-fma-movemail-options pop3-fma-movemail-arguments)
+(defvar spool nil)
+
+(defun pop3-fma-init-message-hook ()
+  (add-hook 'message-send-hook 'pop3-fma-message-add-header))
+
+(eval-after-load "message"
+  '(pop3-fma-init-message-hook))
+
+(add-hook 'gnus-after-exiting-gnus-hook
+         '(lambda () (setq pop3-fma-password nil)))
+(add-hook 'gnus-before-startup-hook 'pop3-fma-set-pop3-password)
+
+;;
+;;
+;; Gnus POP3 additional utility...
+;;
+(defun pop3-fma-movemail (inbox crashbox)
+  "Function to move mail from INBOX on a pop3 server to file CRASHBOX."
+  (if (string-match "^po:" inbox)
+      (progn
+       (let ((pop3-maildrop
+              (substring inbox (match-end (string-match "^po:" inbox))
+                         (- (match-end (string-match "^.*@" inbox)) 1)))
+             (pop3-mailhost
+              (substring inbox (match-end (string-match "^.*@" inbox)))))
+         (let ((pop3-password
+                (pop3-fma-read-passwd pop3-mailhost)))
+           (message "Checking new mail user %s at %s..." pop3-maildrop pop3-mailhost)
+           (if (and (eq system-type 'windows-nt)
+                    (eq pop3-fma-movemail-type 'exe))
+               (progn
+                 (setenv "MAILHOST" pop3-mailhost)
+                 (if (and (not (memq pop3-password pop3-fma-movemail-arguments))
+                          (not (memq (concat "po:" pop3-maildrop) pop3-fma-movemail-arguments)))
+                     (progn
+                       (setq pop3-fma-movemail-arguments nil)
+                       (setq pop3-fma-movemail-arguments
+                             (append pop3-fma-movemail-options
+                                     (list
+                                      (concat "po:" pop3-maildrop)
+                                      crashbox
+                                      pop3-password)))))
+                 (apply 'call-process (concat
+                                       exec-directory
+                                       pop3-fma-movemail-program)
+                        nil nil nil
+                        pop3-fma-movemail-arguments))
+             (pop3-movemail crashbox)))))
+    (message "Checking new mail at %s ... " inbox)
+    (call-process (concat exec-directory pop3-fma-movemail-program)
+                 nil
+                 nil
+                 nil
+                 inbox
+                 crashbox)
+    (message "Checking new mail at %s ... done." inbox)))
+;;
+;;
+(defun pop3-fma-read-passwd (mailhost)
+  (setq passwd (nth 2 (assoc mailhost pop3-fma-password)))
+  (pop3-fma-decode-string passwd))
+
+(setq pop3-read-passwd 'pop3-fma-read-passwd)
+;;
+;; Set multiple pop3 server's password
+(defun pop3-fma-store-password (passwd)
+  (interactive
+   (list (pop3-fma-read-noecho
+         (format "POP Password for %s at %s: " pop3-maildrop pop3-mailhost) t)))
+  (if (not (assoc pop3-mailhost pop3-fma-password))
+      (setq pop3-fma-password
+           (append pop3-fma-password
+                   (list
+                    (list
+                     pop3-mailhost
+                     pop3-maildrop
+                     (pop3-fma-encode-string passwd)))))                     
+    (setcar (cdr (cdr (assoc pop3-mailhost pop3-fma-password)))
+           (pop3-fma-encode-string passwd)))
+  (message "POP password registered.")
+  (pop3-fma-encode-string passwd))
+;;
+;;;###autoload
+(defun pop3-fma-set-pop3-password()
+  (interactive)
+  (mapcar
+   (lambda (x)
+     (let ((pop3-maildrop
+           (substring x (match-end (string-match "^po:" x))
+                      (- (match-end (string-match "^.*@" x)) 1)))
+          (pop3-mailhost
+           (substring x (match-end (string-match "^.*@" x)))))
+       (call-interactively 'pop3-fma-store-password)))
+   pop3-fma-spool-file-alist)
+  (setq nnmail-movemail-program 'pop3-fma-movemail)
+;;  (setq nnmail-spool-file pop3-fma-spool-file-alist))
+  (setq nnmail-spool-file (append
+                          pop3-fma-local-spool-file-alist
+                          pop3-fma-spool-file-alist)))
+;;
+(defun pop3-fma-read-noecho (prompt &optional stars)
+  "Read a single line of text from user without echoing, and return it.
+Argument PROMPT ."
+  (let ((ans "")
+       (c 0)
+       (echo-keystrokes 0)
+       (cursor-in-echo-area t)
+       (log-message-max-size 0)
+       message-log-max done msg truncate)
+    (while (not done)
+      (if (or (not stars) (string-equal "" ans))
+         (setq msg prompt)
+       (setq msg (concat prompt (make-string (length ans) ?*)))
+       (setq truncate
+             (1+ (- (length msg) (window-width (minibuffer-window)))))
+       (and (> truncate 0)
+            (setq msg (concat "$" (substring msg (1+ truncate))))))
+      (message msg)
+      (setq c (read-char-exclusive))
+      (cond ((= c ?\C-g)
+            (setq quit-flag t
+                  done t))
+           ((or (= c ?\r) (= c ?\n) (= c ?\e))
+            (setq done t))
+           ((= c ?\C-u)
+            (setq ans ""))
+           ((and (/= c ?\b) (/= c ?\177))
+            (setq ans (concat ans (char-to-string c))))
+           ((> (length ans) 0)
+            (setq ans (substring ans 0 -1)))))
+    (if quit-flag
+       (prog1
+           (setq quit-flag nil)
+         (message "Quit")
+         (beep t))
+      (message "")
+      ans)))
+;;
+;;
+(defun pop3-fma-message-add-header ()
+  (if (message-mail-p)
+      (pop3-fma-add-custom-header "X-Ya-Pop3:" pop3-fma-version)))
+  
+;;
+;; Add your custom header.
+;;
+(defun pop3-fma-add-custom-header (header string)
+  (let ((delimline
+        (progn (goto-char (point-min))
+               (re-search-forward
+                (concat "^" (regexp-quote mail-header-separator) "\n"))
+               (point-marker))))
+    (goto-char (point-min))
+    (or (re-search-forward (concat "^" header) delimline t)
+       (progn
+         (goto-char delimline)
+         (forward-line -1)
+         (beginning-of-line)
+         (setq hdr (concat header " "))
+         (setq str (concat hdr string))
+         (setq hdr (concat str "\n"))
+         (insert-string hdr)))))
+;;
+(provide 'pop3-fma)
+;;
+;; pop3-fma.el ends here.
index 3d5cdf5..1bfd8ec 100644 (file)
@@ -1,10 +1,10 @@
 ;;; pop3.el --- Post Office Protocol (RFC 1460) interface
 
-;; Copyright (C) 1996,1997,1998 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Richard L. Pieri <ratinox@peorth.gweep.net>
 ;; Keywords: mail, pop3
-;; Version: 1.3m
+;; Version: 1.3l+
 
 ;; This file is part of GNU Emacs.
 
@@ -37,7 +37,7 @@
 (require 'mail-utils)
 (provide 'pop3)
 
-(defconst pop3-version "1.3m")
+(defconst pop3-version "1.3l+")
 
 (defvar pop3-maildrop (or (user-login-name) (getenv "LOGNAME") (getenv "USER") nil)
   "*POP3 maildrop.")
@@ -60,6 +60,9 @@ values are 'apop.")
   "Timestamp returned when initially connected to the POP server.
 Used for APOP authentication.")
 
+(defvar pop3-movemail-file-coding-system 'binary
+  "Crashbox made by pop3-movemail with this coding system.")
+
 (defvar pop3-read-point nil)
 (defvar pop3-debug nil)
 
@@ -91,7 +94,8 @@ Used for APOP authentication.")
       (pop3-retr process n crashbuf)
       (save-excursion
        (set-buffer crashbuf)
-       (append-to-file (point-min) (point-max) crashbox)
+       (let ((coding-system-for-write pop3-movemail-file-coding-system))
+         (append-to-file (point-min) (point-max) crashbox))
        (set-buffer (process-buffer process))
        (while (> (buffer-size) 5000)
          (goto-char (point-min))
@@ -112,9 +116,7 @@ Returns the process associated with the connection."
   (let ((process-buffer
         (get-buffer-create (format "trace of POP session to %s" mailhost)))
        (process)
-       (coding-system-for-read 'binary)   ;; because FSF Emacs 20 and
-       (coding-system-for-write 'binary)  ;; XEmacs 20/1 are st00pid 
-    )
+       (coding-system-for-read 'binary))
     (save-excursion
       (set-buffer process-buffer)
       (erase-buffer)
@@ -126,8 +128,7 @@ Returns the process associated with the connection."
       (setq pop3-timestamp
            (substring response (or (string-match "<" response) 0)
                       (+ 1 (or (string-match ">" response) -1)))))
-    process
-    ))
+    process))
 
 ;; Support functions
 
diff --git a/lisp/rfc1843.el b/lisp/rfc1843.el
deleted file mode 100644 (file)
index b9a3015..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-;;; rfc1843.el --- HZ (rfc1843) decoding
-;; Copyright (c) 1998 by Shenghuo Zhu <zsh@cs.rochester.edu>
-
-;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
-;; $Revision: 1.1.1.1 $
-;; Keywords: news HZ 
-;; Time-stamp: <Tue Oct  6 23:48:49 EDT 1998 zsh>
-  
-;; 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.
-
-;;; Commentary:
-
-;; Usage:
-;; (require 'rfc1843)
-;; (rfc1843-gnus-setup)
-;;
-;; Test:
-;; (rfc1843-decode-string  "~{<:Ky2;S{#,NpJ)l6HK!#~}")
-
-;;; Code:
-
-(require 'mm-util)
-
-(defvar rfc1843-word-regexp 
-  "~\\({\\([\041-\167][\041-\176]\\| \\)+\\(~}\\|$\\)")
-
-(defvar rfc1843-word-regexp-strictly
-      "~\\({\\([\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-\175][\041-\176]\\)+\\)\\(~}\\|$\\)")
-
-(defcustom rfc1843-decode-loosely nil
-  "Loosely check HZ encoding if non-nil.
-When it is set non-nil, only buffers or strings with strictly 
-HZ-encoded are decoded."
-  :type 'boolean
-  :group 'gnus)
-
-(defcustom rfc1843-decode-hzp t
-  "HZ+ decoding support if non-nil.
-HZ+ specification (also known as HZP) is to provide a standardized
-7-bit representation of mixed Big5, GB, and ASCII text for convenient
-e-mail transmission, news posting, etc. 
-The document of HZ+ 0.78 specification can be found at
-ftp://ftp.math.psu.edu/pub/simpson/chinese/hzp/hzp.doc"
-  :type 'boolean
-  :group 'gnus)
-
-(defcustom rfc1843-newsgroups-regexp "chinese\\|hz"
-  "Regexp of newsgroups in which might be HZ encoded."
-  :type 'string
-  :group 'gnus)
-
-(defun rfc1843-decode-region (from to)
-  "Decode HZ in the region between FROM and TO."
-  (interactive "r")
-  (let (str firstc)
-    (save-excursion
-      (goto-char from)
-      (if (or rfc1843-decode-loosely 
-             (re-search-forward (if rfc1843-decode-hzp 
-                                    rfc1843-hzp-word-regexp-strictly 
-                                  rfc1843-word-regexp-strictly) to t))
-         (save-restriction 
-           (narrow-to-region from to)
-           (goto-char (point-min))
-           (while (re-search-forward (if rfc1843-decode-hzp
-                                         rfc1843-hzp-word-regexp
-                                       rfc1843-word-regexp) (point-max) t)  
-             (setq str (match-string 1))
-             (setq firstc (aref str 0)) 
-             (insert (mm-decode-coding-string 
-                      (rfc1843-decode
-                       (prog1 
-                           (substring str 1)
-                         (delete-region (match-beginning 0) (match-end 0)))
-                       firstc)
-                      (if (eq firstc ?{) 'cn-gb-2312 'cn-big5))))
-           (goto-char (point-min))
-           (while (search-forward "~" (point-max) t)  
-             (cond ((eq (char-after) ?\n)
-                    (delete-char -1)
-                    (delete-char 1))
-                 ((eq (char-after) ?~)
-                  (delete-char 1)))))))))
-
-(defun rfc1843-decode-string (string)
-  "Decode HZ STRING and return the results."
-  (let ((m (mm-multibyte-p)))
-    (with-temp-buffer
-      (when m
-       (mm-enable-multibyte))
-      (insert string)
-      (inline
-       (rfc1843-decode-region (point-min) (point-max)))
-      (buffer-string))))
-
-(defun rfc1843-decode (word &optional firstc)
-  "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))
-         (if (eq (setq v (aref s i)) ? ) nil
-           (aset s i (+ 128 v))))
-      (while (< (incf i) (length s))
-       (if (eq (setq v (aref s i)) ? ) nil
-         (setq v (+ (* 94 v) (aref s (1+ i)) -3135))
-         (aset s i (+ (/ v 157) (if (eq firstc ?<) 201 161)))
-         (setq v (% v 157))
-         (aset s (incf i) (+ v (if (< v 63) 64 98))))))
-    s))
-
-(defun rfc1843-decode-article-body ()
-   "Decode HZ encoded text in the article body."
-   (if (string-match (concat "\\<\\(" rfc1843-newsgroups-regexp "\\)\\>")
-                    gnus-newsgroup-name)
-       (save-excursion
-        (save-restriction
-          (message-narrow-to-head)     
-          (goto-char (point-max))
-          (widen)
-          (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)
-
-(defun rfc1843-gnus-setup ()
-  "Setup HZ decoding for Gnus."
-  (require 'gnus-art)
-  (require 'gnus-sum)
-  (add-hook 'gnus-article-decode-hook 'rfc1843-decode-article-body t)
-  (setq gnus-decode-encoded-word-function 
-       'gnus-multi-decode-encoded-word-string
-       gnus-decode-header-function 
-       'gnus-multi-decode-header
-       gnus-decode-encoded-word-methods 
-       (nconc gnus-decode-encoded-word-methods 
-              (list 
-               (cons (concat "\\<\\(" rfc1843-newsgroups-regexp "\\)\\>") 
-                     'rfc1843-decode-string)))
-       gnus-decode-header-methods 
-       (nconc gnus-decode-header-methods 
-              (list 
-               (cons (concat "\\<\\(" rfc1843-newsgroups-regexp "\\)\\>") 
-                     'rfc1843-decode-region)))))
-
-(provide 'rfc1843)
-
-;;; rfc1843.el ends here
diff --git a/lisp/smtp.el b/lisp/smtp.el
new file mode 100644 (file)
index 0000000..7dde447
--- /dev/null
@@ -0,0 +1,457 @@
+;;; smtp.el --- basic functions to send mail with SMTP server
+
+;; Copyright (C) 1995, 1996, 1998 Free Software Foundation, Inc.
+
+;; Author: Tomoji Kagatani <kagatani@rbc.ncl.omron.co.jp>
+;; ESMTP support: Simon Leinen <simon@switch.ch>
+;; Keywords: SMTP, 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.
+
+;;; Code:
+
+(defgroup smtp nil
+  "SMTP protocol for sending mail."
+  :group 'mail)
+
+(defcustom smtp-default-server nil
+  "*Specify default SMTP server."
+  :type '(choice (const nil) string)
+  :group 'smtp)
+
+(defcustom smtp-server 
+  (or (getenv "SMTPSERVER") smtp-default-server)
+  "*The name of the host running SMTP server."
+  :type '(choice (const nil) string)
+  :group 'smtp)
+
+(defcustom smtp-service 25
+  "*SMTP service port number. smtp or 25 ."
+  :type 'integer
+  :group 'smtp)
+
+(defcustom smtp-local-domain nil
+  "*Local domain name without a host name.
+If the function (system-name) returns the full internet address,
+don't define this value."
+  :type '(choice (const nil) string)
+  :group 'smtp)
+
+(defcustom smtp-debug-info nil
+  "*smtp debug info printout. messages and process buffer."
+  :type 'boolean
+  :group 'smtp)
+
+(defcustom smtp-coding-system 'binary
+  "*Coding-system for SMTP output."
+  :type 'coding-system
+  :group 'smtp)
+
+
+(defun smtp-fqdn ()
+  (if smtp-local-domain
+      (concat (system-name) "." smtp-local-domain)
+    (system-name)))
+
+(defun smtp-via-smtp (recipient smtp-text-buffer)
+  (let ((process nil)
+       (host smtp-server)
+       (port smtp-service)
+       response-code
+       greeting
+       process-buffer
+       (supported-extensions '())
+       (coding-system-for-read smtp-coding-system)
+       (coding-system-for-write smtp-coding-system))
+    (unwind-protect
+       (catch 'done
+         ;; get or create the trace buffer
+         (setq process-buffer
+               (get-buffer-create
+                (format "*trace of SMTP session to %s*" host)))
+
+         ;; clear the trace buffer of old output
+         (save-excursion
+           (set-buffer process-buffer)
+           (erase-buffer))
+
+         ;; open the connection to the server
+         (setq process (open-network-stream "SMTP" process-buffer host port))
+         (and (null process) (throw 'done nil))
+
+         ;; set the send-filter
+         (set-process-filter process 'smtp-process-filter)
+
+         (save-excursion
+           (set-buffer process-buffer)
+           (make-local-variable 'smtp-read-point)
+           (setq smtp-read-point (point-min))
+
+           (if (or (null (car (setq greeting (smtp-read-response process))))
+                   (not (integerp (car greeting)))
+                   (>= (car greeting) 400))
+               (throw 'done nil)
+             )
+
+           ;; EHLO
+           (smtp-send-command process (format "EHLO %s" (smtp-fqdn)))
+
+           (if (or (null (car (setq response-code (smtp-read-response process))))
+                   (not (integerp (car response-code)))
+                   (>= (car response-code) 400))
+               (progn
+                 ;; HELO
+                 (smtp-send-command process (format "HELO %s" (smtp-fqdn)))
+
+                 (if (or (null (car (setq response-code (smtp-read-response process))))
+                         (not (integerp (car response-code)))
+                         (>= (car response-code) 400))
+                     (throw 'done nil)))
+             (let ((extension-lines (cdr (cdr response-code))))
+               (while extension-lines
+                 (let ((name (intern (downcase (substring (car extension-lines) 4)))))
+                   (and name
+                        (cond ((memq name '(verb xvrb 8bitmime onex xone
+                                                 expn size dsn etrn
+                                                 help xusr))
+                               (setq supported-extensions
+                                     (cons name supported-extensions)))
+                              (t (message "unknown extension %s"
+                                          name)))))
+                 (setq extension-lines (cdr extension-lines)))))
+
+           (if (or (member 'onex supported-extensions)
+                   (member 'xone supported-extensions))
+               (progn
+                 (smtp-send-command process (format "ONEX"))
+                 (if (or (null (car (setq response-code (smtp-read-response process))))
+                         (not (integerp (car response-code)))
+                         (>= (car response-code) 400))
+                     (throw 'done nil))))
+
+           (if (and smtp-debug-info
+                    (or (member 'verb supported-extensions)
+                        (member 'xvrb supported-extensions)))
+               (progn
+                 (smtp-send-command process (format "VERB"))
+                 (if (or (null (car (setq response-code (smtp-read-response process))))
+                         (not (integerp (car response-code)))
+                         (>= (car response-code) 400))
+                     (throw 'done nil))))
+
+           (if (member 'xusr supported-extensions)
+               (progn
+                 (smtp-send-command process (format "XUSR"))
+                 (if (or (null (car (setq response-code (smtp-read-response process))))
+                         (not (integerp (car response-code)))
+                         (>= (car response-code) 400))
+                     (throw 'done nil))))
+
+           ;; MAIL FROM: <sender>
+           (let ((size-part
+                  (if (member 'size supported-extensions)
+                      (format " SIZE=%d"
+                              (save-excursion
+                                (set-buffer smtp-text-buffer)
+                                ;; size estimate:
+                                (+ (- (point-max) (point-min))
+                                   ;; Add one byte for each change-of-line
+                                   ;; because or CR-LF representation:
+                                   (count-lines (point-min) (point-max))
+                                   ;; For some reason, an empty line is
+                                   ;; added to the message.  Maybe this
+                                   ;; is a bug, but it can't hurt to add
+                                   ;; those two bytes anyway:
+                                   2)))
+                    ""))
+                 (body-part
+                  (if (member '8bitmime supported-extensions)
+                      ;; FIXME:
+                      ;; Code should be added here that transforms
+                      ;; the contents of the message buffer into
+                      ;; something the receiving SMTP can handle.
+                      ;; For a receiver that supports 8BITMIME, this
+                      ;; may mean converting BINARY to BASE64, or
+                      ;; adding Content-Transfer-Encoding and the
+                      ;; other MIME headers.  The code should also
+                      ;; return an indication of what encoding the
+                      ;; message buffer is now, i.e. ASCII or
+                      ;; 8BITMIME.
+                      (if nil
+                          " BODY=8BITMIME"
+                        "")
+                    "")))
+;            (smtp-send-command process (format "MAIL FROM:%s@%s" (user-login-name) (smtp-fqdn)))
+             (smtp-send-command process (format "MAIL FROM: <%s>%s%s"
+                                                    user-mail-address
+                                                    size-part
+                                                    body-part))
+
+             (if (or (null (car (setq response-code (smtp-read-response process))))
+                     (not (integerp (car response-code)))
+                     (>= (car response-code) 400))
+                 (throw 'done nil)
+               ))
+           
+           ;; RCPT TO: <recipient>
+           (let ((n 0))
+             (while (not (null (nth n recipient)))
+               (smtp-send-command process (format "RCPT TO: <%s>" (nth n recipient)))
+               (setq n (1+ n))
+
+               (setq response-code (smtp-read-response process))
+               (if (or (null (car response-code))
+                       (not (integerp (car response-code)))
+                       (>= (car response-code) 400))
+                   (throw 'done nil)
+                 )
+               ))
+           
+           ;; DATA
+           (smtp-send-command process "DATA")
+
+           (if (or (null (car (setq response-code (smtp-read-response process))))
+                   (not (integerp (car response-code)))
+                   (>= (car response-code) 400))
+               (throw 'done nil)
+             )
+
+           ;; Mail contents
+           (smtp-send-data process smtp-text-buffer)
+
+           ;;DATA end "."
+           (smtp-send-command process ".")
+
+           (if (or (null (car (setq response-code (smtp-read-response process))))
+                   (not (integerp (car response-code)))
+                   (>= (car response-code) 400))
+               (throw 'done nil)
+             )
+
+           ;;QUIT
+;          (smtp-send-command process "QUIT")
+;          (and (null (car (smtp-read-response process)))
+;               (throw 'done nil))
+           t ))
+      (if process
+         (save-excursion
+           (set-buffer (process-buffer process))
+           (smtp-send-command process "QUIT")
+           (smtp-read-response process)
+
+;          (if (or (null (car (setq response-code (smtp-read-response process))))
+;                  (not (integerp (car response-code)))
+;                  (>= (car response-code) 400))
+;              (throw 'done nil)
+;            )
+           (delete-process process))))))
+
+(defun smtp-process-filter (process output)
+  (save-excursion
+    (set-buffer (process-buffer process))
+    (goto-char (point-max))
+    (insert output)))
+
+(defun smtp-read-response (process)
+  (let ((case-fold-search nil)
+       (response-strings nil)
+       (response-continue t)
+       (return-value '(nil ()))
+       match-end)
+
+    (while response-continue
+      (goto-char smtp-read-point)
+      (while (not (search-forward "\r\n" nil t))
+       (accept-process-output process)
+       (goto-char smtp-read-point))
+
+      (setq match-end (point))
+      (setq response-strings
+           (cons (buffer-substring smtp-read-point (- match-end 2))
+                 response-strings))
+       
+      (goto-char smtp-read-point)
+      (if (looking-at "[0-9]+ ")
+         (let ((begin (match-beginning 0))
+               (end (match-end 0)))
+           (if smtp-debug-info
+               (message "%s" (car response-strings)))
+
+           (setq smtp-read-point match-end)
+
+           ;; ignore lines that start with "0"
+           (if (looking-at "0[0-9]+ ")
+               nil
+             (setq response-continue nil)
+             (setq return-value
+                   (cons (string-to-int 
+                          (buffer-substring begin end)) 
+                         (nreverse response-strings)))))
+       
+       (if (looking-at "[0-9]+-")
+           (progn (if smtp-debug-info
+                    (message "%s" (car response-strings)))
+                  (setq smtp-read-point match-end)
+                  (setq response-continue t))
+         (progn
+           (setq smtp-read-point match-end)
+           (setq response-continue nil)
+           (setq return-value 
+                 (cons nil (nreverse response-strings)))
+           )
+         )))
+    (setq smtp-read-point match-end)
+    return-value))
+
+(defun smtp-send-command (process command)
+  (goto-char (point-max))
+  (if (= (aref command 0) ?P)
+      (insert "PASS <omitted>\r\n")
+    (insert command "\r\n"))
+  (setq smtp-read-point (point))
+  (process-send-string process command)
+  (process-send-string process "\r\n"))
+
+(defun smtp-send-data-1 (process data)
+  (goto-char (point-max))
+
+  (if smtp-debug-info
+      (insert data "\r\n"))
+
+  (setq smtp-read-point (point))
+  ;; Escape "." at start of a line
+  (if (eq (string-to-char data) ?.)
+      (process-send-string process "."))
+  (process-send-string process data)
+  (process-send-string process "\r\n")
+  )
+
+(defun smtp-send-data (process buffer)
+  (let
+      ((data-continue t)
+       (sending-data nil)
+       this-line
+       this-line-end)
+
+    (save-excursion
+      (set-buffer buffer)
+      (goto-char (point-min)))
+
+    (while data-continue
+      (save-excursion
+       (set-buffer buffer)
+       (beginning-of-line)
+       (setq this-line (point))
+       (end-of-line)
+       (setq this-line-end (point))
+       (setq sending-data nil)
+       (setq sending-data (buffer-substring this-line this-line-end))
+       (if (/= (forward-line 1) 0)
+           (setq data-continue nil)))
+
+      (smtp-send-data-1 process sending-data)
+      )
+    )
+  )
+
+(defun smtp-deduce-address-list (smtp-text-buffer header-start header-end)
+  "Get address list suitable for smtp RCPT TO: <address>."
+  (require 'mail-utils)  ;; pick up mail-strip-quoted-names
+  (let ((case-fold-search t)
+       (simple-address-list "")
+       this-line
+       this-line-end
+       addr-regexp
+       (smtp-address-buffer (generate-new-buffer " *smtp-mail*")))
+    (unwind-protect
+       (save-excursion
+         ;;
+         (set-buffer smtp-address-buffer)
+         (erase-buffer)
+         (insert-buffer-substring smtp-text-buffer
+                                  header-start header-end)
+         (goto-char (point-min))
+         ;; RESENT-* fields should stop processing of regular fields.
+         (save-excursion
+           (if (re-search-forward "^RESENT-TO:" header-end t)
+               (setq addr-regexp
+                     "^\\(RESENT-TO:\\|RESENT-CC:\\|RESENT-BCC:\\)")
+             (setq addr-regexp  "^\\(TO:\\|CC:\\|BCC:\\)")))
+
+         (while (re-search-forward addr-regexp header-end t)
+           (replace-match "")
+           (setq this-line (match-beginning 0))
+           (forward-line 1)
+           ;; get any continuation lines
+           (while (and (looking-at "^[ \t]+") (< (point) header-end))
+             (forward-line 1))
+           (setq this-line-end (point-marker))
+           (setq simple-address-list
+                 (concat simple-address-list " "
+                         (mail-strip-quoted-names
+                          (buffer-substring this-line this-line-end))))
+           )
+         (erase-buffer)
+         (insert-string " ")
+         (insert-string simple-address-list)
+         (insert-string "\n")
+         ;; newline --> blank
+         (subst-char-in-region (point-min) (point-max) 10 ?  t)
+         ;; comma   --> blank
+         (subst-char-in-region (point-min) (point-max) ?, ?  t)
+         ;; tab     --> blank
+         (subst-char-in-region (point-min) (point-max)  9 ?  t)
+
+         (goto-char (point-min))
+         ;; tidyness in case hook is not robust when it looks at this
+         (while (re-search-forward "[ \t]+" header-end t) (replace-match " "))
+
+         (goto-char (point-min))
+         (let (recipient-address-list)
+           (while (re-search-forward " \\([^ ]+\\) " (point-max) t)
+             (backward-char 1)
+             (setq recipient-address-list
+                   (cons (buffer-substring (match-beginning 1) (match-end 1))
+                         recipient-address-list))
+             )
+           recipient-address-list)
+         )
+      (kill-buffer smtp-address-buffer))
+    ))
+
+(defun smtp-do-bcc (header-end)
+  "Delete BCC: and their continuation lines from the header area.
+There may be multiple BCC: lines, and each may have arbitrarily
+many continuation lines."
+  (let ((case-fold-search t))
+    (save-excursion
+      (goto-char (point-min))
+      ;; iterate over all BCC: lines
+      (while (re-search-forward "^BCC:" header-end t)
+       (delete-region (match-beginning 0) (progn (forward-line 1) (point)))
+       ;; get rid of any continuation lines
+       (while (and (looking-at "^[ \t].*\n") (< (point) header-end))
+         (replace-match ""))
+       )
+      ) ;; save-excursion
+    ) ;; let
+  )
+
+(provide 'smtp)
+
+;;; smtp.el ends here
diff --git a/lisp/smtpmail.el b/lisp/smtpmail.el
new file mode 100644 (file)
index 0000000..77a5947
--- /dev/null
@@ -0,0 +1,285 @@
+;;; smtpmail.el --- simple SMTP protocol (RFC 821) for sending mail
+
+;; Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+
+;; Author: Tomoji Kagatani <kagatani@rbc.ncl.omron.co.jp>
+;; Maintainer: Brian D. Carlstrom <bdc@ai.mit.edu>
+;; ESMTP support: Simon Leinen <simon@switch.ch>
+;; 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:
+
+;; Send Mail to smtp host from smtpmail temp buffer.
+
+;; Please add these lines in your .emacs(_emacs).
+;;
+;;(setq send-mail-function 'smtpmail-send-it)
+;;(setq smtp-default-server "YOUR SMTP HOST")
+;;(setq smtp-service "smtp")
+;;(setq smtp-local-domain "YOUR DOMAIN NAME")
+;;(setq smtp-debug-info t)
+;;(autoload 'smtpmail-send-it "smtpmail")
+;;(setq user-full-name "YOUR NAME HERE")
+
+;; To queue mail, set smtpmail-queue-mail to t and use 
+;; smtpmail-send-queued-mail to send.
+
+
+;;; Code:
+
+(require 'smtp)
+(require 'sendmail)
+(require 'time-stamp)
+
+;;;
+
+(defcustom smtpmail-queue-mail nil 
+  "*Specify if mail is queued (if t) or sent immediately (if nil).
+If queued, it is stored in the directory `smtpmail-queue-dir'
+and sent with `smtpmail-send-queued-mail'."
+  :type 'boolean
+  :group 'smtp)
+
+(defcustom smtpmail-queue-dir "~/Mail/queued-mail/"
+  "*Directory where `smtpmail.el' stores queued mail."
+  :type 'directory
+  :group 'smtp)
+
+(defvar smtpmail-queue-index-file "index"
+  "File name of queued mail index,
+This is relative to `smtpmail-queue-dir'.")
+
+(defvar smtpmail-queue-index (concat smtpmail-queue-dir
+                                    smtpmail-queue-index-file))
+
+(defvar smtpmail-recipient-address-list nil)
+
+
+;;;
+;;;
+;;;
+
+(defun smtpmail-send-it ()
+  (require 'mail-utils)
+  (let ((errbuf (if mail-interactive
+                   (generate-new-buffer " smtpmail errors")
+                 0))
+       (tembuf (generate-new-buffer " smtpmail temp"))
+       (case-fold-search nil)
+       resend-to-addresses
+       delimline
+       (mailbuf (current-buffer)))
+    (unwind-protect
+       (save-excursion
+         (set-buffer tembuf)
+         (erase-buffer)
+         (insert-buffer-substring mailbuf)
+         (goto-char (point-max))
+         ;; require one newline at the end.
+         (or (= (preceding-char) ?\n)
+             (insert ?\n))
+         ;; Change header-delimiter to be what sendmail expects.
+         (goto-char (point-min))
+         (re-search-forward
+           (concat "^" (regexp-quote mail-header-separator) "\n"))
+         (replace-match "\n")
+         (backward-char 1)
+         (setq delimline (point-marker))
+;;       (sendmail-synch-aliases)
+         (if mail-aliases
+             (expand-mail-aliases (point-min) delimline))
+         (goto-char (point-min))
+         ;; ignore any blank lines in the header
+         (while (and (re-search-forward "\n\n\n*" delimline t)
+                     (< (point) delimline))
+           (replace-match "\n"))
+         (let ((case-fold-search t))
+           (goto-char (point-min))
+           (goto-char (point-min))
+           (while (re-search-forward "^Resent-to:" delimline t)
+             (setq resend-to-addresses
+                   (save-restriction
+                     (narrow-to-region (point)
+                                       (save-excursion
+                                         (end-of-line)
+                                         (point)))
+                     (append (mail-parse-comma-list)
+                             resend-to-addresses))))
+;;; Apparently this causes a duplicate Sender.
+;;;        ;; If the From is different than current user, insert Sender.
+;;;        (goto-char (point-min))
+;;;        (and (re-search-forward "^From:"  delimline t)
+;;;             (progn
+;;;               (require 'mail-utils)
+;;;               (not (string-equal
+;;;                     (mail-strip-quoted-names
+;;;                      (save-restriction
+;;;                        (narrow-to-region (point-min) delimline)
+;;;                        (mail-fetch-field "From")))
+;;;                     (user-login-name))))
+;;;             (progn
+;;;               (forward-line 1)
+;;;               (insert "Sender: " (user-login-name) "\n")))
+           ;; Don't send out a blank subject line
+           (goto-char (point-min))
+           (if (re-search-forward "^Subject:[ \t]*\n" delimline t)
+               (replace-match ""))
+           ;; Put the "From:" field in unless for some odd reason
+           ;; they put one in themselves.
+           (goto-char (point-min))
+           (if (not (re-search-forward "^From:" delimline t))
+               (let* ((login user-mail-address)
+                      (fullname (user-full-name)))
+                 (cond ((eq mail-from-style 'angles)
+                        (insert "From: " fullname)
+                        (let ((fullname-start (+ (point-min) 6))
+                              (fullname-end (point-marker)))
+                          (goto-char fullname-start)
+                          ;; Look for a character that cannot appear unquoted
+                          ;; according to RFC 822.
+                          (if (re-search-forward "[^- !#-'*+/-9=?A-Z^-~]"
+                                                 fullname-end 1)
+                              (progn
+                                ;; Quote fullname, escaping specials.
+                                (goto-char fullname-start)
+                                (insert "\"")
+                                (while (re-search-forward "[\"\\]"
+                                                          fullname-end 1)
+                                  (replace-match "\\\\\\&" t))
+                                (insert "\""))))
+                        (insert " <" login ">\n"))
+                       ((eq mail-from-style 'parens)
+                        (insert "From: " login " (")
+                        (let ((fullname-start (point)))
+                          (insert fullname)
+                          (let ((fullname-end (point-marker)))
+                            (goto-char fullname-start)
+                            ;; RFC 822 says \ and nonmatching parentheses
+                            ;; must be escaped in comments.
+                            ;; Escape every instance of ()\ ...
+                            (while (re-search-forward "[()\\]" fullname-end 1)
+                              (replace-match "\\\\\\&" t))
+                            ;; ... then undo escaping of matching parentheses,
+                            ;; including matching nested parentheses.
+                            (goto-char fullname-start)
+                            (while (re-search-forward 
+                                    "\\(\\=\\|[^\\]\\(\\\\\\\\\\)*\\)\\\\(\\(\\([^\\]\\|\\\\\\\\\\)*\\)\\\\)"
+                                    fullname-end 1)
+                              (replace-match "\\1(\\3)" t)
+                              (goto-char fullname-start))))
+                        (insert ")\n"))
+                       ((null mail-from-style)
+                        (insert "From: " login "\n")))))
+           ;; Insert an extra newline if we need it to work around
+           ;; Sun's bug that swallows newlines.
+           (goto-char (1+ delimline))
+           (if (eval mail-mailer-swallows-blank-line)
+               (newline))
+           ;; Find and handle any FCC fields.
+           (goto-char (point-min))
+           (if (re-search-forward "^FCC:" delimline t)
+               (mail-do-fcc delimline))
+           (if mail-interactive
+               (save-excursion
+                 (set-buffer errbuf)
+                 (erase-buffer))))
+         ;;
+         ;;
+         ;;
+         (setq smtpmail-recipient-address-list
+               (or resend-to-addresses
+                   (smtp-deduce-address-list tembuf (point-min) delimline)))
+
+         (smtp-do-bcc delimline)
+         ; Send or queue
+         (if (not smtpmail-queue-mail)
+             (if smtpmail-recipient-address-list
+                 (if (not (smtp-via-smtp
+                           smtpmail-recipient-address-list tembuf))
+                     (error "Sending failed; SMTP protocol error"))
+               (error "Sending failed; no recipients"))
+           (let* ((file-data (concat 
+                              smtpmail-queue-dir
+                              (time-stamp-strftime 
+                               "%02y%02m%02d-%02H%02M%02S")))
+                  (file-elisp (concat file-data ".el"))
+                  (buffer-data (create-file-buffer file-data))
+                  (buffer-elisp (create-file-buffer file-elisp))
+                  (buffer-scratch "*queue-mail*"))
+             (save-excursion
+               (set-buffer buffer-data)
+               (erase-buffer)
+               (insert-buffer tembuf)
+               (write-file file-data)
+               (set-buffer buffer-elisp)
+               (erase-buffer)
+               (insert (concat
+                        "(setq smtpmail-recipient-address-list '"
+                        (prin1-to-string smtpmail-recipient-address-list)
+                        ")\n"))                    
+               (write-file file-elisp)
+               (set-buffer (generate-new-buffer buffer-scratch))
+               (insert (concat file-data "\n"))
+               (append-to-file (point-min) 
+                               (point-max) 
+                               smtpmail-queue-index)
+               )
+             (kill-buffer buffer-scratch)
+             (kill-buffer buffer-data)
+             (kill-buffer buffer-elisp))))
+      (kill-buffer tembuf)
+      (if (bufferp errbuf)
+         (kill-buffer errbuf)))))
+
+(defun smtpmail-send-queued-mail ()
+  "Send mail that was queued as a result of setting `smtpmail-queue-mail'."
+  (interactive)
+  ;;; Get index, get first mail, send it, get second mail, etc...
+  (let ((buffer-index (find-file-noselect smtpmail-queue-index))
+       (file-msg "")
+       (tembuf nil))
+    (save-excursion
+      (set-buffer buffer-index)
+      (beginning-of-buffer)
+      (while (not (eobp))
+       (setq file-msg (buffer-substring (point) (save-excursion
+                                                  (end-of-line)
+                                                  (point))))
+       (load file-msg)
+       (setq tembuf (find-file-noselect file-msg))
+       (if smtpmail-recipient-address-list
+           (if (not (smtp-via-smtp smtpmail-recipient-address-list tembuf))
+               (error "Sending failed; SMTP protocol error"))
+         (error "Sending failed; no recipients"))  
+       (delete-file file-msg)
+       (delete-file (concat file-msg ".el"))
+       (kill-buffer tembuf)
+       (kill-line 1))      
+      (set-buffer buffer-index)
+      (save-buffer smtpmail-queue-index)
+      (kill-buffer buffer-index)
+      )))
+
+
+;;;
+
+(provide 'smtpmail)
+
+;;; smtpmail.el ends here
diff --git a/readme b/readme
deleted file mode 100644 (file)
index e3064ef..0000000
--- a/readme
+++ /dev/null
@@ -1,52 +0,0 @@
-This package contains a beta version of Gnus.  The lisp directory
-contains the source lisp files, and the texi directory contains a
-draft of the Gnus info pages.
-
-To use Gnus you first have to unpack the files, which you've obviously
-done, because you are reading this.
-
-You should definitely byte-compile the source files. To do that, you
-can simply say "./configure; make" in this directory.  If you are
-using XEmacs, you *must* say "make EMACS=xemacs".  In that case you
-may also want to pull down the package of nice glyphs from
-<URL:http://www.gnus.org/etc.tar.gz>.  It should be installed
-into the "gnus-5.4.53/etc" directory.
-
-Then you have to tell Emacs where Gnus is. You might put something
-like
-
-   (setq load-path (cons (expand-file-name "~/gnus-5.4.53/lisp") load-path))
-
-in your .emacs file, or wherever you keep such things.  
-
-To enable reading the Gnus manual, you could say something like:
-
-  (setq Info-default-directory-list 
-        (cons "~/gnus-5.4.53/texi" Info-default-directory-list))
-
-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 19.33 or
-XEmacs 19.14.  So you definitely need a new Emacs.
-
-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
-backtraces, or, better yet, find out why Gnus does something wrong,
-fix it, and send me the diffs. :-)
-
-There are four main things I want your help and input on:
-
-1) Startup. Does everything go smoothly, and why not?
-
-2) Any errors while you read news normally?
-
-3) Any errors if you do anything abnormal?
-
-4) Features you do not like, or do like, but would like to tweak a
-   bit, and features you would like to see.
-
-Send any comments and all your bug fixes/complaints to
-`bugs@gnus.org'. 
index ac7acc7..980c667 100644 (file)
-1998-11-07 17:18:07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Mon Jun 29 21:46:13 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Gnus Reference Guide): Renamed.
+       * gnus.texi (Article Keymap): Typo.
 
-1998-10-26 22:03:08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Jun 28 17:41:10 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Article Washing): Fix.
-       (MIME Commands): Change.
+       * gnus.texi (Formatting Fonts): Typo fix.
 
-1998-10-25 01:51:56  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Jun 27 04:37:14 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Headers): Addition.
+       * gnus.texi (Mail-To-News Gateways): Addition.
+       (Mail-To-News Gateways): Typo.
 
-1998-10-24 08:37:12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Fri Jun 26 13:33:00 1998  Yoshiki Hayashi  <g740685@komaba.ecc.u-tokyo.ac.jp>
 
-       * gnus.texi (Summary Buffer Lines): Addition.
-       (To): New.
-       (To): Addition.
+       * gnus.texi (Summary Buffer Lines): Typo fix.
 
-1998-10-15 18:15:34  Simon Josefsson  <jas@pdc.kth.se>
+Fri Jun 26 05:53:22 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Group Info): Must be list of ranges.
+       * gnus.texi (Score File Format): Addition.
+       (Mode Line Formatting): New.
+       (Summary Buffer Mode Line): Addition.
 
-1998-10-19 01:27:26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Thu Jun 25 11:24:14 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Summary Score Commands): Deletia.
+
+Wed Jun 24 00:37:32 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Auto Save): Addition.
+       (Mail-To-News Gateways): Addition.
+       (NNTP): Addition.
+
+Wed Jun  3 03:30:47 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * message.texi (Message Headers): Addition.
+
+       * gnus.texi (Compatibility): Addition.
+
+Tue May 19 02:44:31 1998  Mike Pullen  <mpullen@midwest.net>
+
+       * gnus.texi.orig: Typo fixes.
+
+Wed Apr 29 21:52:28 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Key Index): Untabified.
+       (Group Parameters): Fix.
+
+Sun Apr 26 15:32:45 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Summary Post Commands): Ref to Message.
+
+       * message.texi (Various Message Variables): Deletia.
+
+Fri Apr 24 16:00:40 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Unread Articles): Typo.
+       (Summary Buffer Lines): Fix.
+       (Foreign Groups): Addition.
+       (Posting Server): Addition.
+
+Sat Mar 28 08:57:46 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Example Methods): Addition.
+
+Thu Mar 26 15:47:54 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Limiting): Mention `/ *'.
+
+Thu Mar 19 13:02:20 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (NNTP): Addition.
+       Removed spurious white space.
+
+Fri Mar 13 21:05:47 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Quassia Gnus): Fix.
+       (Agent Expiry): Addition.
+
+Sun Mar  8 13:56:37 1998  James Troup  <J.J.Troup@scm.brad.ac.uk>
+
+       * gnus.texi (Group Highlighting): Removed old example.
+
+Sun Mar  8 00:19:24 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Group Info): Fix ".".
+
+Sat Mar  7 17:09:49 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi: Took direntries out again, since makeinfo doesn't
+       understand them.
+       (Agent Expiry): New.
+       (Quassia Gnus): New.
+
+Sat Mar  7 16:14:10 1998  Dan Christensen  <jdc@chow.mat.jhu.edu>
+
+       * gnus.texi (Group Parameters): Mention add-to-list.
+
+Sat Feb 28 14:21:12 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (NNTP): Addition.
+
+1998-03-01  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
+
+       * gnus.texi (Easy Picons): Removed references to
+       `gnus-group-display-picons'.
+       (Hard Picons): Ditto.
+
+1998-03-01  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
+
+       * gnus.texi (Easy Picons): Removed references to
+       `gnus-group-display-picons'.
+       (Hard Picons): Ditto.
+
+Mon Feb 23 18:05:09 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi: Direntry not handled by Emacs 19.34.
+
+1998-02-21  SL Baur  <steve@altair.xemacs.org>
+
+       * gnus.texi: Add a direntry field.
+       * message.texi: Ditto.  (Data taken from Emacs 20.2 info/dir).
+
+Sun Feb 22 03:24:43 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Score File Format): Addition.
+
+1998-02-18  Jason R Mastaler  <jason@4b.org>
+
+       * gnus.texi: Corrected typo.
+
+Thu Feb 19 02:20:29 1998  Francois Felix Ingrand  <felix@laas.fr>
+
+       * gnus.texi (Sorting): Fix order of args.
+
+Sun Feb 15 23:04:02 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (NNTP): Change.
+
+Sat Feb 14 17:46:33 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Virtual Groups): Fix.
+       (NNTP): Addition.
+       (Really Various Summary Commands): Addition.
+
+Fri Feb 13 18:23:19 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Mail Group Commands): Typo.
+       (NNTP): Addition.
+       (Mail and Procmail): Addition.
+
+Mon Feb  9 16:30:30 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Article Date): Addition.
+
+Sun Feb  8 16:28:35 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Newest Features): Addition.
+
+Mon Feb  2 19:21:43 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Agent Variables): Addition.
+
+Sun Feb  1 18:08:45 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Using MIME): Addition.
+
+Tue Jan  6 07:22:41 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Batching Agents): New.
+
+1998-01-04  Christoph Wedler  <wedler@fmi.uni-passau.de>
+
+       * gnus.texi (Newest Features): Delete spaces after @end example.
+       In XEmacs, `texinfo-format-buffer' would bug out.
+
+Sun Jan  4 12:04:45 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Conformity): Removed GNKSA.
+
+Sun Dec 14 11:06:23 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Adaptive Scoring): Addition.
+
+1997-11-26  SL Baur  <steve@altair.xemacs.org>
+
+       * message.texi (Insertion): Fix typo.
+       (Responses): Ditto.
+       (Reply): Ditto.
+
+Wed Nov 26 12:57:00 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * message.texi (Insertion): Addition.
+
+Wed Nov 26 12:55:15 1997  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
+
+       * message.texi (Insertion): Addition.
+
+Wed Nov 26 12:36:08 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * message.texi (Responses): New.
+       (Appendices): New.
+
+       * gnus.texi (Group Info): Fix.
+
+Tue Nov 25 17:53:55 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Article Date): Addition.
+
+Mon Nov 24 16:01:20 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Faces & Fonts): New.
+
+Mon Oct 13 00:08:06 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Agent Commands): Addition.
+
+Sun Oct 12 16:50:23 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
        * gnus.texi (Article Washing): Addition.
+       (Group Highlighting): New.
+       (Canceling and Superseding): Addition.
+
+Wed Oct  1 18:37:55 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Startup Files): Addition.
+
+Sat Sep 27 09:37:17 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * message.texi (Sending Variables): Fix.
+
+       * gnus.texi (Choosing Commands): Addition.
+
+Sat Sep 27 05:56:44 1997  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
+
+       * gnus.texi: Various fixes.
+
+Sat Sep 27 04:24:41 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * message.texi (Various Commands): Addition.
+
+Wed Sep 24 02:38:21 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Example Setup): Wrong info.
+       (SOUP Groups): Addition.
+       (Contributors): Addition.
+
+1997-09-22  SL Baur  <steve@altair.xemacs.org>
+
+       * gnus.texi (Finding the Parent): Fix typo.
+       (NoCeM): Fix typos.
+
+Tue Sep 23 07:05:48 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (NoCeM): Addition.
+       (Finding the Parent): Addition.
+
+Mon Sep 22 06:13:00 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Filling In Threads): Addition.
+       (Finding the Parent): Addition.
+
+Sun Sep 21 04:35:56 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (NNTP): Addition.
+       (Hiding Headers): Addition.
+       (Symbolic Prefixes): New.
+       (Extended Interactive): New.
+       (Summary Score Commands): Addition.
+
+Sat Sep 20 20:53:43 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Startup Variables): Addition.
+
+1997-09-16  SL Baur  <steve@altair.xemacs.org>
+
+       * gnus.texi: Correct typo.
+
+Wed Sep 17 02:32:56 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Customizing Threading): Broken up into five nodes. 
+       (Article Washing): Addition.
+
+       * message.texi (Various Commands): Add.
+
+Tue Sep 16 04:04:03 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Example Setup): New.
+
+Mon Sep 15 23:10:05 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Customizing Threading): Addition.
+
+Sun Sep 14 21:59:07 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Outgoing Messages): New.
+       (Score File Format): Note.
+       (Subscription Methods): Fix.
+       (Starting Up): Fix.
+       (Threading): Add.
+
+Sat Jul 19 23:02:03 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Followups To Yourself): \\(_-_\\)?
+
+Sat Jul 12 16:29:35 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Picon Configuration): Moved Picons to under XEmacs. 
+       (Smileys): New section.
+
+Fri Jul 11 11:58:20 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (NNTP): Addition.
+
+Tue Jun 17 23:52:17 1997  Justin Sheehy  <dworkin@ccs.neu.edu>
+
+       * gnus.texi (Group Parameters): Addition.
+
+Sun May 25 14:40:17 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Expiring Mail): Addition.
+
+Sat May 24 05:26:17 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Score File Format): Update.
+
+Tue May 20 21:56:03 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Document Server Internals): Typo.
+
+Sun May 18 05:59:24 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Topic Commands): Addition.
+
+Sun May 11 20:09:24 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Article Hiding): Change.
+
+Thu May  8 23:48:36 1997  James Troup  <J.J.Troup@comp.brad.ac.uk>
+
+       * gnus.texi (Saving Articles): Typo.
+
+Wed May  7 19:00:48 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Saving Articles): Addition.
+
+Wed May  7 19:00:43 1997  Mark Boyns  <boyns@sdsu.edu>
+
+       * gnus.texi (Saving Articles): Addition.
+
+Thu May  1 14:06:57 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Score File Format): Fix.
+
+Sun Apr 27 11:11:43 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (NNTP): Addition.
+
+Sat Apr 12 16:51:32 1997  Robert Bihlmeyer  <robbe@orcus.priv.at>
+
+       * gnus.texi (Thwarting Email Spam): Addition.
+
+Tue Apr 15 16:11:38 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * message.texi (Various Message Variables): Addition.
+
+       * gnus.texi (Thwarting Email Spam): Addition.
+
+Sat Apr 12 00:26:47 1997  Francois Felix Ingrand  <felix@laas.fr>
+
+       * gnus.texi (NoCeM): Addition.
+
+Thu Apr 10 21:25:14 1997  Hrvoje Niksic  <hniksic@srce.hr>
+
+       * gnus.texi (Emacs/XEmacs Code): Addition.
+
+Thu Apr 10 20:45:47 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Group Information): Fix.
+
+Wed Apr  2 11:48:44 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Sorting): Use total score.
+
+Tue Apr  1 11:44:57 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Subscription Methods): Addition.
+       (Group Info): Addition.
+       (Gnus Utility Functions): New.
+       (Thwarting Email Spam): Addition.
+
+Mon Mar 31 16:15:54 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * message.texi (Various Message Variables): Addition.
+
+Sun Mar 23 02:16:19 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Thwarting Email Spam): New.
+       (Unavailable Servers): Fix.
+
+Wed Mar 19 15:45:17 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Various Summary Stuff): Addition.
+       (Mail Backend Variables): Addition.
+
+Tue Mar 18 14:43:32 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Article Washing): Not addition.
+
+Mon Mar 17 16:15:54 1997  Philippe Schnoebelen  <Philippe.Schnoebelen@lsv.ens-cachan.fr>
+
+       * Makefile (install): Install properly.
 
-1998-10-18 00:20:58  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Fri Mar 14 21:00:33 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Changing Servers): Addition.
+       * gnus.texi (Group Parameters): Addition.
+       (Expiring Mail): Addition.
 
-1998-10-17 21:34:57  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Wed Mar 12 06:57:14 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Windows Configuration): Addition.
+       * gnus.texi (Various Various): Addition.
 
-1998-10-01 07:55:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Mar  8 03:41:47 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Splitting Mail): Fix.
-       (Washing Mail): Fix.
+       * gnus.texi (Group Parameters): Added example.
+       (Duplicates): Fix.
 
-1998-09-30 05:54:45  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Fri Mar  7 10:49:43 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * Makefile: New "install" target.
+
+Thu Mar  6 08:01:37 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Mail and Procmail): Fix.
+
+Sun Mar  2 02:08:40 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Startup Files): Addition.
+       (Score File Format): Fix.
+
+Fri Feb 28 23:23:31 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Archived Messages): Clarify.
+       (Fuzzy Matching): New.
+
+Mon Feb 24 23:41:57 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * message.texi (Compatibility): New.
+
+Thu Feb 20 03:29:17 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Foreign Groups): Addition.
+
+Wed Feb 19 02:57:51 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Server Variables): New.
+
+Sun Feb 16 15:43:34 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Mail Backend Variables): Fix.
+
+       * message.texi (Various Message Variables): Addition.
+
+Mon Feb 10 07:18:16 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Article Commands): Addition.
+
+Mon Feb  3 19:59:10 1997  Paul Franklin  <paul@cs.washington.edu>
+
+       * gnus-group.el (gnus-group-edit-group): Allow editing of bad
+       groups.
+
+Wed Feb  5 02:00:46 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * message.texi (Mail Variables): Change.
+
+Tue Feb  4 02:33:31 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * message.texi (Mail Aliases): New.
+
+       * gnus.texi (Splitting Mail): Addition.
+
+Mon Feb  3 07:31:47 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Mode Lines): Addition.
+
+Mon Jan 27 17:51:29 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Highlighting and Menus): Removed
+       `gnus-display-type'. 
+
+Sat Jan 25 08:09:30 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (The Active File): Addition.
+
+Fri Jan 24 05:07:28 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Summary Mail Commands): Addition.
+       (Required Backend Functions): Deletia.
+       (Article Washing): Addition.
+       (Summary Mail Commands): Addition.
+
+Mon Jan 20 22:19:40 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Followups To Yourself): Fix.
+
+Fri Jan 17 00:55:51 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (NoCeM): Update.
+
+Wed Jan 15 02:23:03 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Mail Group Commands): Fix.
+
+Tue Jan  7 09:36:36 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Summary Buffer Lines): Correction.
+
+Mon Jan  6 22:49:12 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (NoCeM): Addition.
+
+Fri Jan  3 18:13:02 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * message.texi (Various Commands): Addition.
+
+Thu Jan  2 16:12:27 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Optional Backend Functions): Fix.
+
+Mon Dec 16 13:53:28 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Exiting the Summary Buffer): Update.
+
+Fri Dec 13 01:04:41 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Limiting): Addition.
+
+Sat Dec  7 21:10:23 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Example Methods): Addition.
+
+Fri Dec  6 12:38:14 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Group Parameters): Update.
+
+1996-11-30  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Terminology): Addition.
+
+Wed Nov 27 03:13:05 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
        * gnus.texi (Selecting a Group): Addition.
 
-1998-09-13 08:58:56  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Tue Nov 26 12:42:47 1996  Martin Buchholz  <mrb@eng.sun.com>
+
+       * message.texi: Typo fixes and stuff.
+
+Thu Nov 21 17:45:57 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Canceling and Superseding): Fix.
+
+Wed Nov 20 15:42:36 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (New Groups): Addition.
+       (Summary Sorting): Addition.
+
+Tue Nov 19 20:54:16 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * dir (File): Updated.
+       * gnus.texi (Scanning New Messages): Addition.
 
-1998-09-12 08:53:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Nov  9 06:04:22 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * emacs-mime.texi: New file.
+       * gnus.texi (Group Parameters): Addition.
+
+Fri Nov  8 04:01:06 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Article Fontisizing): New.
+       (Fancy Mail Splitting): Addition.
+       (Summary Post Commands): Addition.
+       (Mail Spool): Addition.
+       (Server Commands): Addition.
+       (Fancy Mail Splitting): Addition.
+
+Wed Nov  6 06:39:44 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
        * gnus.texi (Misc Article): Addition.
+       (Emacsen): Updated.
+
+Wed Nov  6 03:52:05 1996  C. R. Oldham  <cro@nca.asu.edu>
+
+       * Makefile (.texi.dvi): Fix rule.
+
+Tue Nov  5 10:45:39 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Other Decode Variables): Addition.
+       (Mail-like Backends): New.
+
+Tue Nov  5 06:41:46 1996  Hrvoje Niksic  <hniksic@srce.hr>
+
+       * gnus.texi (Score File Format): Added warning.
+
+Mon Oct 28 15:50:08 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Startup Variables): Addition.
+
+Fri Oct 25 09:04:59 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Summary Mail Commands): Addition.
+
+Wed Oct 23 08:28:29 1996  Hrvoje Niksic  <hniksic@srce.hr>
+
+       * gnus.texi (Fancy Mail Splitting): Removed trailing garbage. 
+
+Tue Oct 22 07:36:02 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Converting Kill Files): New.
+
+Sat Oct 19 07:17:28 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Saving Articles): Addition.
+
+       * message.texi (Various Message Variables): Addition.
+
+Thu Oct 17 06:53:04 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
 
-1998-09-11 08:52:50  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.texi (Contributors): Added names.
 
-       * gnus.texi (Group Score Commands): Fix.
-       (Saving Articles): Fix.
-       (Agent Expiry): Fix.
-       (Using MIME): Change.
+Fri Oct 11 12:38:59 1996  Lars Magne Ingebrigtsen  <larsi@ylfing.ifi.uio.no>
 
-1998-09-10 03:19:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.texi (Adaptive Scoring): Addition.
 
-       * gnus.texi (Windows Configuration): Addition.
+Tue Oct  8 13:16:41 1996  Lars Magne Ingebrigtsen  <larsi@ylfing.ifi.uio.no>
 
-1998-09-06  Mike McEwan  <mike@lotusland.demon.co.uk>
+       * Makefile (all): Make custom.
 
-       * gnus.texi (Category Syntax): Added doc about agent categories
-       and download scoring.
+Wed Oct  2 01:32:49 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
 
-1998-09-05 17:36:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.texi (Group Timestamps): New.
 
-       * gnus.texi (Sorting Groups): Change.
-       (Various Summary Stuff): Addition.
+Tue Oct  1 01:34:45 1996  Lars Magne Ingebrigtsen  <larsi@hrym.ifi.uio.no>
 
-1998-09-04 00:40:07  David S. Goldberg  <dsg@mitre.org>
+       * gnus.texi (Expiring Mail): Addition.
+       (Group Line Specification): Addition.
 
-       * gnus.texi (Article Hiding): Verify.
+Sat Sep 28 21:36:40 1996  Lars Magne Ingebrigtsen  <larsi@ylfing.ifi.uio.no>
 
-1998-08-31 11:46:57  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.texi (Foreign Groups): Addition.
 
-       * gnus.texi (Mail Folders): Addition.
+Mon Sep 23 22:17:44 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (The Summary Buffer): Addition.
+
+Mon Sep 23 18:25:38 1996  Lars Magne Ingebrigtsen  <larsi@ylfing.ifi.uio.no>
+
+       * gnus.texi (Thread Commands): Correction.
+       (Group Information): Correction.
+
+Sat Sep 21 08:11:43 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (New Groups): Split into three nodes.
+       (Group Parameters): Shortened.
+       (Browse Foreign Server): Corrected.
+
+Thu Sep 19 18:45:15 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Mail and Procmail): Addition.
+
+Wed Sep 18 07:33:11 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Other Marks): Edited.
+       (The Manual): New.
+       (Contributors): Updated.
+       (Asynchronous Fetching): Addition.
+       (New Features): Split.
+       ((ding) Gnus): Renamed.
+       (September Gnus): New.
+       (Red Gnus): New,
+       (Undo): New.
+
+Thu Sep 12 23:55:53 1996  Lars Magne Ingebrigtsen  <larsi@hrym.ifi.uio.no>
+
+       * gnus.texi (Archived Messages): Fix.
+
+Sat Sep  7 12:14:23 1996  Lars Magne Ingebrigtsen  <larsi@hymir.ifi.uio.no>
+
+       * gnus.texi (Various Various): Addition.
+
+Fri Sep  6 07:57:26 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Startup Files): Addition.
+       (Splitting Mail): Addition.
+       (Sorting Groups): Addition.
+       (Topic Sorting): New.
+       (Really Various Summary Commands): Deletia.
+       (Summary Generation Commands): New.
+       (Setting Process Marks): Addition.
+
+Thu Sep  5 07:34:27 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Terminology): Addition.
+       (Web Searches): Fix.
+       (Windows Configuration): Addition.
+
+Sun Sep  1 11:07:09 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (XEmacs Enhancements): New.
+
+Sat Aug 31 02:55:50 1996  Lars Magne Ingebrigtsen  <larsi@ylfing.ifi.uio.no>
+
+       * gnus.texi (Washing Mail): Addition.
+
+Fri Aug 30 09:10:17 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Washing Mail): New.
+       (Fancy Mail Splitting): Change.
+
+Fri Aug 30 00:21:59 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Foreign Groups): Change.
+
+Thu Aug 29 23:51:45 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Daemons): Addition.
+
+Thu Aug 29 02:09:24 1996  François Pinard  <pinard@progiciels-bpi.ca>
+
+       * gnus.texi (Web Searches): Typo.
+
+Wed Aug 28 08:21:36 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Server Commands): Addition.
+       (Really Various Summary Commands): Addition.
+
+Mon Aug 26 18:29:23 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Optional Backend Functions): Deletia.
+       (Asynchronous Fetching): Deletia and addition.
+
+Sun Aug 25 23:39:03 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi: Include the version number.
+
+Sun Aug 25 21:31:33 1996  Lars Magne Ingebrigtsen  <larsi@ylfing.ifi.uio.no>
+
+       * gnus.texi (Really Various Summary Commands): Addition.
+
+Sat Aug 17 22:24:34 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Startup Files): Addition.
+       (Anything Groups): Addition.
+
+Thu Aug 22 17:27:31 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Adaptive Scoring): Addition.
+       (Adaptive Scoring): Addition.
+
+Mon Aug 19 00:30:07 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Fancy Mail Splitting): Addition.
+       (Splitting Mail): Addition.
        (Group Parameters): Addition.
-       (MIME Commands): New.
+       (Topic Variables): Addition.
+       (Mail Group Commands): Addition.
+       (Group Information): Addition.
+       (Article Washing): Addition.
 
-1998-08-27 07:29:17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Aug 18 18:06:49 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
 
-       * gnus.texi (Mail Folders): Addition.
+       * gnus.texi (Web Searches): Change and addition.
+
+Sat Aug 17 22:24:34 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Startup Files): Addition.
+       (Anything Groups): Addition.
+
+Thu Aug 15 17:59:12 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Followups To Yourself): Addition.
+       (Setting Process Marks): Addition.
+       (Process/Prefix): Addition.
+       (Startup Files): Addition.
+       (Mail-To-News Gateways): New.
+
+Wed Aug 14 15:02:14 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Home Score File): Fix.
+       (Various Various): New.
+
+Tue Aug 13 10:38:47 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Error Messaging): New.
+       (Mail Backend Variables): Fix.
+       (Foreign Groups): Added references.
+       (Sorting Groups): Addition.
+
+Sun Aug 11 02:52:37 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (User-Defined Specs): Correction.
+       (Unavailable Servers): Addition.
+       (Moderation): New.
+       (Summary Mail Commands): Addition.
+       (Crosspost Handling): Addition.
+
+Sat Aug 10 00:13:39 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Summary Buffer Lines): Correction.
+       (Top): Name fix.
+       (Compilation ): Addition.
+       (Group Parameters): Addition.
+       (Troubleshooting): Addition.
+
+Fri Aug  9 07:17:59 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Selecting a Group): Addition.
+       (Score Decays): New.
+       (Score File Format): Addition.
+       (Changing Servers): Addition.
+       (Selecting a Group): Addition.
+       (Really Various Summary Commands): Addition.
+
+Thu Aug  8 05:39:31 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Read Articles): Addition.
+       (Foreign Groups): Addition.
+       (User-Defined Specs): Separated.
+       (Formatting Fonts): Ditto.
+       (Advanced Formatting): New.
+       (Formatting Basics): Addition.
+       (Formatting Variables): Split.
+
+Wed Aug  7 22:00:56 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Hooking New Backends Into Gnus): New node.
+
+Wed Aug  7 01:02:08 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Setting Marks): Addition.
+       (Formatting Variables): Addition.
+
+Mon Aug  5 20:20:42 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Formatting Variables): Addition.
+
+Sun Aug  4 07:15:28 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Score File Format): Addition.
+       (Adaptive Scoring): Addition.
+
+Sat Aug  3 17:35:36 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Group Parameters): Addition.
+       (Home Score File): New.
+       (Topic Parameters): New.
+
+Wed Jul 31 15:34:12 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (are): Fix.
+
+Wed Jul 31 15:32:57 1996  David S. Goldberg  <dsg@linus.mitre.org>
+
+       * gnus.texi (buffer-name): Addition.
+
+Fri Aug  2 00:32:39 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Pick and Read): Addition.
+       (Article Hiding): Addition.
+       (Article Signature): Made into own node.
+
+Thu Aug  1 00:25:41 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * message.texi (Wide Reply): Addition.
+       (Bouncing): Addition.
+
+       * gnus.texi (Crosspost Handling): Made into own node.
+       (Duplicate Suppression): New.
+       (Document Server Internals): New.
+       (Changing Servers): New.
+
+Wed Jul 31 15:37:44 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi: Fix
+
+Mon Jul 29 10:12:24 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Misc Article): Addition.
+       (Advanced Scoring Tips): New.
+       (Advanced Scoring Example): New.
+       (Advanced Scoring Syntax): New.
+       (Advanced Scoring): New.
 
diff --git a/texi/Makefile b/texi/Makefile
deleted file mode 100644 (file)
index ea5ef8f..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-TEXI2DVI=texi2dvi
-EMACS=emacs
-MAKEINFO=$(EMACS) -batch -q -no-site-file
-INFOSWI=-l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer
-XINFOSWI=-l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer
-LATEX=latex
-DVIPS=dvips
-PERL=perl
-INFODIR=/usr/local/info
-
-all: gnus message
-
-most: texi2latex.elc latex latexps
-
-.SUFFIXES: .texi .dvi .ps
-
-.texi:
-       $(MAKEINFO) -eval '(find-file "$<")' $(XINFOSWI)
-
-dvi: gnus.dvi message.dvi
-
-.texi.dvi :
-       $(PERL) -n -e 'print unless (/\@iflatex/ .. /\@end iflatex/)' $< > gnustmp.texi
-       $(TEXI2DVI) gnustmp.texi
-       cp gnustmp.dvi $*.dvi
-       rm gnustmp.*
-
-refcard.dvi: refcard.tex gnuslogo.refcard gnusref.tex
-       $(LATEX) 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
-
-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")'
-
-latex: gnus.texi texi2latex.elc
-       $(EMACS) -batch -q -no-site-file gnus.texi -l ./texi2latex.elc -f latexi-translate
-
-latexps: 
-       make texi2latex.elc
-       rm -f gnus.aux
-       egrep -v "label.*Index|chapter.*Index" gnus.latexi > gnus.tmplatexi1
-       $(LATEX) gnus.tmplatexi1
-       ./splitindex
-       makeindex -o gnus.kind gnus.kidx
-       makeindex -o gnus.cind gnus.cidx
-       makeindex -o gnus.gind gnus.gidx
-       sed 's/\\char 5E\\relax {}/\\symbol{"5E}/' < gnus.kind > gnus.tmpkind
-       mv gnus.tmpkind gnus.kind
-       egrep -v "end{document}" gnus.tmplatexi1 > gnus.tmplatexi
-       cat postamble.tex >> gnus.tmplatexi
-       $(LATEX) gnus.tmplatexi 
-       $(LATEX) gnus.tmplatexi 
-       $(DVIPS) -f gnus.dvi > gnus.ps
-
-pss:   
-       make latex
-       make latexps
-
-psout:
-       make latex
-       make latexboth
-       make out
-
-latexboth: 
-       rm -f gnus-manual-a4.ps.gz gnus-manual-standard.ps.gz 
-       make latexps
-       mv /local/tmp/larsi/gnus.ps /local/tmp/larsi/gnus-manual-a4.ps
-       gzip /local/tmp/larsi/gnus-manual-a4.ps 
-       sed 's/,a4paper//' gnus.latexi > gnus-standard.latexi 
-       mv gnus-standard.latexi gnus.latexi
-       make latexps
-       mv /local/tmp/larsi/gnus.ps /local/tmp/larsi/gnus-manual-standard.ps 
-       gzip /local/tmp/larsi/gnus-manual-standard.ps 
-
-out:
-       cp /local/tmp/larsi/gnus-manual-standard.ps.gz \
-       /local/tmp/larsi/gnus-manual-a4.ps.gz \
-       /local/ftp/pub/emacs/gnus/manual
-       mv /local/tmp/larsi/gnus-manual-standard.ps.gz \
-       /local/tmp/larsi/gnus-manual-a4.ps.gz \
-       /hom/larsi/www_docs/www.gnus.org/documents
-
-veryclean:
-       make clean
-       rm -f gnus.dvi gnus.ps
-
-distclean:
-       make clean
-       rm -f *.orig *.rej *.elc *~ gnus gnus-[0-9] gnus-[0-9][0-9]
-       rm -f message message-[0-9]
-
-install:
-       cp gnus gnus-[0-9] gnus-[0-9][0-9] $(INFODIR)
-       cp message $(INFODIR)
-
-
-tmps:
-       if [ ! -e tmp ]; then mkdir tmp; fi
-       make screens
-       make herdss
-       make etcs
-       make piconss
-       make xfaces
-       make smiley
-       make miscs
-
-herdss:
-       cd herds ; for i in new-herd-[0-9]*.gif; do echo $$i; giftopnm $$i | pnmcrop -white | pnmmargin -white 9 | pnmscale 2 | pnmconvol convol5.pnm  | ppmtopgm | pnmdepth 255 | pnmtops -width 100 -height 100 -noturn > ../tmp/`basename $$i .gif`.ps; done
-       cd herds ; giftopnm new-herd-section.gif | pnmscale 4 | pnmconvol convol11.pnm | ppmtopgm | pnmdepth 255 | pnmtops -noturn -width 100 -height 100 > ../tmp/new-herd-section.ps
-
-
-screens:
-       cd screen ; for i in *.gif; do echo $$i; giftopnm $$i | pnmmargin -black 1 | ppmtopgm | pnmtops -width 100 -height 100 -noturn > ../tmp/`basename $$i .gif`.ps; done    
-
-miscs:
-       giftopnm misc/larsi.gif | ppmtopgm | pnmtops -noturn > tmp/larsi.ps
-       tifftopnm misc/eseptember.tif | pnmscale 4 | ppmtopgm | pnmtops -noturn  -width 100 -height 100 > tmp/september.ps
-       tifftopnm misc/fseptember.tif | pnmscale 2 | ppmtopgm | pnmtops -noturn  -width 100 -height 100 > tmp/fseptember.ps
-       tifftopnm misc/fred.tif | pnmscale 2 | ppmtopgm | pnmtops -noturn  -width 100 -height 100 > tmp/fred.ps
-       tifftopnm misc/ered.tif | pnmscale 2 | ppmtopgm | pnmtops -noturn  -width 100 -height 100 > tmp/red.ps
-
-etcs:
-       cd etc; for i in gnus-*.xpm; do echo $$i; xpmtoppm $$i | ppmtopgm | pnmdepth 255 | pnmtops -noturn > ../tmp/`basename $$i .xpm`.ps; done
-
-piconss:
-       cd picons; for i in *.xbm; do echo $$i; xbmtopbm $$i | pnmtops -noturn > ../tmp/picons-`basename $$i .xbm`.ps; done
-       cd picons; for i in *.gif; do echo $$i; giftopnm $$i | ppmtopgm | pnmtops -noturn > ../tmp/picons-`basename $$i .gif`.ps; done
-       for i in tmp/picons-*.ps; do echo "\\gnuspicon{$$i}"; done > picons.tex
-
-xfaces:
-       cd xface; for i in *.gif; do echo $$i; giftopnm $$i | ppmtopgm | pnmtops -noturn > ../tmp/xface-`basename $$i .gif`.ps; done
-       for i in tmp/xface-*.ps; do \
-               if [ -n "$$a" ]; then a=""; echo "{$$i}"; else \
-               a="h"; echo -n "\\gnusxface{$$i}"; fi done > xface.tex; \
-               if [ -n "$$a" ]; then echo "{$$i}" >> xface.tex; fi
-
-smiley:
-       cd smilies; tifftopnm BigFace.tif | ppmtopgm | pnmtops > ../tmp/BigFace.ps
-       cd smilies; for i in *.xpm; do echo $$i; sed "s/none/#FFFFFF/" $$i | xpmtoppm | ppmtopgm | pnmdepth 255 | pnmtops > ../tmp/smiley-`basename $$i .xpm`.ps; done
-       for i in tmp/smiley-*.ps; do \
-               if [ -n "$$a" ]; then a=""; echo "{$$i}"; else \
-               a="h"; echo -n "\\gnussmiley{$$i}"; fi done > smiley.tex; \
-               if [ -n "$$a" ]; then echo "{$$i}" >> smiley.tex; fi
-
-pspackage:
-       tar czvf pspackage.tar.gz gnus-faq.texi gnus.texi herds misc pagestyle.sty picons pixidx.sty postamble.tex ps screen smilies splitindex texi2latex.el xface Makefile README etc
-
-complete:
-       make texi2latex.elc
-       make tmps
-       make pss
index c74b8b2..c205abe 100644 (file)
@@ -16,9 +16,8 @@ PERL=perl
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 SHELL = /bin/sh
-PAPERTYPE=a4
 
-all: gnus message emacs-mime
+all: gnus message
 
 most: texi2latex.elc latex latexps
 
@@ -31,7 +30,7 @@ most: texi2latex.elc latex latexps
          makeinfo -o $* $<; \
        fi
 
-dvi: gnus.dvi message.dvi refcard.dvi emacs-mime.dvi
+dvi: gnus.dvi message.dvi refcard.dvi
 
 .texi.dvi :
        $(PERL) -n -e 'print unless (/\@iflatex/ .. /\@end iflatex/)' $< > gnustmp.texi
@@ -74,7 +73,7 @@ latexps:
        cat postamble.tex >> gnus.tmplatexi
        $(LATEX) gnus.tmplatexi
        $(LATEX) gnus.tmplatexi
-       $(DVIPS) -t $(PAPERTYPE) -f gnus.dvi > gnus.ps
+       $(DVIPS) -f gnus.dvi > gnus.ps
 
 pss:
        make latex
@@ -88,35 +87,34 @@ psout:
 latexboth:
        rm -f gnus-manual-a4.ps.gz gnus-manual-standard.ps.gz
        make latexps
-       mv gnus.ps gnus-manual-a4.ps
-       gzip gnus-manual-a4.ps
-       sed 's/,a4paper/,letterpaper/' gnus.latexi > gnus-standard.latexi
+       mv /local/tmp/larsi/gnus.ps /local/tmp/larsi/gnus-manual-a4.ps
+       gzip /local/tmp/larsi/gnus-manual-a4.ps
+       sed 's/,a4paper//' gnus.latexi > gnus-standard.latexi
        mv gnus-standard.latexi gnus.latexi
-       make latexps PAPERTYPE=letter
-       mv gnus.ps gnus-manual-standard.ps
-       gzip gnus-manual-standard.ps
+       make latexps
+       mv /local/tmp/larsi/gnus.ps /local/tmp/larsi/gnus-manual-standard.ps
+       gzip /local/tmp/larsi/gnus-manual-standard.ps
 
 out:
-       cp gnus-manual-standard.ps.gz \
-       gnus-manual-a4.ps.gz \
+       cp /local/tmp/larsi/gnus-manual-standard.ps.gz \
+       /local/tmp/larsi/gnus-manual-a4.ps.gz \
        /local/ftp/pub/emacs/gnus/manual
-       mv gnus-manual-standard.ps.gz \
-       gnus-manual-a4.ps.gz \
+       mv /local/tmp/larsi/gnus-manual-standard.ps.gz \
+       /local/tmp/larsi/gnus-manual-a4.ps.gz \
        /hom/larsi/www_docs/www.gnus.org/documents
 
 veryclean:
        make clean
-       rm -f gnus.dvi gnus.ps texi2latex.elc
+       rm -f gnus.dvi gnus.ps
 
 distclean:
        make clean
        rm -f *.orig *.rej *.elc *~ gnus gnus-[0-9] gnus-[0-9][0-9] Makefile
        rm -f message message-[0-9]
-       rm -f emacs-mime
 
 install:
        $(SHELL) $(top_srcdir)/mkinstalldirs $(infodir)
-       @for file in gnus message emacs-info; do \
+       @for file in gnus message; 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"; \
diff --git a/texi/TRANSLATION.ja b/texi/TRANSLATION.ja
new file mode 100644 (file)
index 0000000..1538b5f
--- /dev/null
@@ -0,0 +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
diff --git a/texi/custom.texi b/texi/custom.texi
deleted file mode 100644 (file)
index 5b6fe4a..0000000
+++ /dev/null
@@ -1,695 +0,0 @@
-\input texinfo.tex
-
-@c %**start of header
-@setfilename custom
-@settitle The Customization Library
-@iftex
-@afourpaper
-@headings double
-@end iftex
-@c %**end of header
-
-@node Top, Introduction, (dir), (dir)
-@comment  node-name,  next,  previous,  up
-@top The Customization Library
-
-Version: 1.82
-
-@menu
-* Introduction::                
-* User Commands::               
-* The Customization Buffer::    
-* Declarations::                
-* Utilities::                   
-* The Init File::               
-* Wishlist::                    
-@end menu
-
-@node   Introduction, User Commands, Top, Top
-@comment  node-name,  next,  previous,  up
-@section Introduction
-
-This library allows customization of @dfn{user options}.  Currently two
-types of user options are supported, namely @dfn{variables} and
-@dfn{faces}.  Each user option can have four different values
-simultaneously:
-@table @dfn
-@item factory setting
-The value specified by the programmer.
-@item saved value
-The value saved by the user as the default for this variable.  This
-overwrites the factory setting when starting a new emacs.
-@item current value
-The value used by Emacs.  This will not be remembered next time you
-run Emacs.
-@item widget value
-The value entered by the user in a customization buffer, but not yet
-applied.
-@end table
-
-Variables also have a @dfn{type}, which specifies what kind of values
-the variable can hold, and how the value is presented in a customization
-buffer.  By default a variable can hold any valid expression, but the
-programmer can specify a more limited type when declaring the variable.
-
-The user options are organized in a number of @dfn{groups}.  Each group
-can contain a number user options, as well as other groups.  The groups
-allows the user to concentrate on a specific part of emacs.
-
-@node  User Commands, The Customization Buffer, Introduction, Top
-@comment  node-name,  next,  previous,  up
-@section User Commands
-
-The following commands will create a customization buffer:
-
-@table @code
-@item customize
-Create a customization buffer containing a specific group, by default
-the @code{emacs} group.
-
-@item customize-variable
-Create a customization buffer containing a single variable.  
-
-@item customize-face
-Create a customization buffer containing a single face.
-
-@item customize-apropos
-Create a customization buffer containing all variables, faces, and
-groups that match a user specified regular expression.
-@end table
-
-@node The Customization Buffer, Declarations, User Commands, Top
-@comment  node-name,  next,  previous,  up
-@section The Customization Buffer.
-
-The customization buffer allows the user to make temporary or permanent
-changes to how specific aspects of emacs works, by setting and editing
-user options.  
-
-The customization buffer contains three types of text:
-
-@table @dfn
-@item informative text
-where the normal editing commands are disabled.
-
-@item editable fields
-where you can edit with the usual emacs commands.  Editable fields are
-usually displayed with a grey background if your terminal supports
-colors, or an italic font otherwise.
-
-@item buttons
-which can be activated by either pressing the @kbd{@key{ret}} while
-point is located on the text, or pushing @kbd{mouse-2} while the mouse
-pointer is above the tex.  Buttons are usually displayed in a bold
-font. 
-@end table
-
-You can move to the next the next editable field or button by pressing
-@kbd{@key{tab}} or the previous with @kbd{M-@key{tab}}.  Some buttons
-have a small helpful message about their purpose, which will be
-displayed when you move to it with the @key{tab} key.  
-
-The buffer is divided into three part, an introductory text, a list of
-customization options, and a line of customization buttons.  Each part
-will be described in the following. 
-
-@menu
-* The Introductory Text::       
-* The Customization Options::   
-* The Variable Options::        
-* The Face Options::            
-* The Group Options::           
-* The State Button::            
-* The Customization Buttons::   
-@end menu
-
-@node  The Introductory Text, The Customization Options, The Customization Buffer, The Customization Buffer
-@comment  node-name,  next,  previous,  up
-@subsection  The Introductory Text
-
-The start of the buffer contains a short explanation of what it is, and
-how to get help.  It will typically look like this:
-
-@example
-This is a customization buffer.
-Push RET or click mouse-2 on the word _help_ for more information.
-@end example
-
-Rather boring.  It is mostly just informative text, but the word
-@samp{help} is a button that will bring up this document when
-activated.  
-
-@node  The Customization Options, The Variable Options, The Introductory Text, The Customization Buffer
-@comment  node-name,  next,  previous,  up
-@subsection The Customization Options
-
-Each customization option looks similar to the following text:
-
-@example
- *** custom-background-mode: default 
- State: this item is unchanged from its factory setting.
- [ ] [?] The brightness of the background.
-@end example
-
-The option contains the parts described below.
-
-@table @samp
-@item ***
-The Level Button.  The customization options in the buffer are organized
-in a hierarchy, which is indicated by the number of stars in the level
-button.  The top level options will be shown as @samp{*}.  When they are
-expanded, the suboptions will be shown as @samp{**}.  The example option
-is thus a subsuboption.
-
-Activating the level buttons will toggle between hiding and exposing the
-content of that option.  The content can either be the value of the
-option, as in this example, or a list of suboptions.
-
-@item custom-background-mode
-This is the tag of the the option.  The tag is a name of a variable, a
-face, or customization group.  Activating the tag has an effect that
-depends on the exact type of the option.  In this particular case,
-activating the tag will bring up a menu that will allow you to choose
-from the three possible values of the `custom-background-mode'
-variable. 
-
-@item default
-After the tag, the options value is shown.  Depending on its type, you
-may be able to edit the value directly.  If an option should contain a
-file name, it is displayed in an editable field, i.e. you can edit it
-using the standard emacs editing commands.
-
-@item State: this item is unchanged from its factory setting.
-The state line.  This line will explain the state of the option,
-e.g. whether it is currently hidden, or whether it has been modified or
-not.  Activating the button will allow you to change the state, e.g. set
-or reset the changes you have made.  This is explained in detail in the
-following sections.
-
-@item [ ]
-The magic button.  This is an abbreviated version of the state line. 
-
-@item [?] 
-The documentation button.  If the documentation is more than one line,
-this button will be present.  Activating the button will toggle whether
-the complete documentation is shown, or only the first line.
-
-@item The brightness of the background.
-This is a documentation string explaining the purpose of this particular
-customization option.
-
-@end table
-
-@node  The Variable Options, The Face Options, The Customization Options, The Customization Buffer
-@comment  node-name,  next,  previous,  up
-@subsection The Variable Options
-
-The most common customization options are emacs lisp variables.  The
-actual editing of these variables depend on what type values the
-variable is expected to contain.  For example, a lisp variable whose
-value should be a string will typically be represented with an editable
-text field in the buffer, where you can change the string directly.  If
-the value is a list, each item in the list will be presented in the
-buffer buffer on a separate line, with buttons to insert new items in
-the list, or delete existing items from the list.  You may want to see 
-@ref{User Interface,,, widget, The Widget Library}, where some examples
-of editing are discussed.  
-
-You can either choose to edit the value directly, or edit the lisp
-value for that variable.  The lisp value is a lisp expression that
-will be evaluated when you start emacs.  The result of the evaluation
-will be used as the initial value for that variable.  Editing the
-lisp value is for experts only, but if the current value of the
-variable is of a wrong type (i.e. a symbol where a string is expected),
-the `edit lisp' mode will always be selected.
-
-You can see what mode is currently selected by looking at the state
-button.  If it uses parenthesises (like @samp{( )}) it is in edit lisp
-mode, with square brackets (like @samp{[ ]}) it is normal edit mode.
-You can switch mode by activating the state button, and select either
-@samp{Edit} or @samp{Edit lisp} from the menu.
-
-You can change the state of the variable with the other menu items:
-
-@table @samp
-@item Set
-When you have made your modifications in the buffer, you need to
-activate this item to make the modifications take effect.  The
-modifications will be forgotten next time you run emacs.
-
-@item Save
-Unless you activate this item instead!  This will mark the modification
-as permanent, i.e. the changes will be remembered in the next emacs
-session.
-
-@item Reset
-If you have made some modifications and not yet applied them, you can
-undo the modification by activating this item.
-
-@item Reset to Saved
-Activating this item will reset the value of the variable to the last
-value you marked as permanent with `Save'.
-
-@item Reset to Factory Settings
-Activating this item will undo all modifications you have made, and
-reset the value to the initial value specified by the program itself. 
-@end table
-
-By default, the value of large or complicated variables are hidden.   You
-can show the value by clicking on the level button.
-
-@node  The Face Options, The Group Options, The Variable Options, The Customization Buffer
-@comment  node-name,  next,  previous,  up
-@subsection The Face Options
-
-A face is an object that controls the appearance of some buffer text.
-The face has a number of possible attributes, such as boldness,
-foreground color, and more.  For each attribute you can specify whether
-this attribute is controlled by the face, and if so, what the value is.
-For example, if the attribute bold is not controlled by a face, using
-that face on some buffer text will not affect its boldness.  If the bold
-attribute is controlled by the face, it can be turned either on or of.
-
-It is possible to specify that a face should have different attributes
-on different device types.  For example, a face may make text red on a
-color device, and bold on a monochrome device.  You do this by
-activating `Edit All' in the state menu.
-
-The way this is presented in the customization buffer is to have a list
-of display specifications, and for each display specification a list of
-face attributes.  For each face attribute, there is a checkbox
-specifying whether this attribute has effect and what the value is.
-Here is an example:
-
-@example
- *** custom-invalid-face: (sample)
- State: this item is unchanged from its factory setting.
- [ ] Face used when the customize item is invalid.
- [INS] [DEL] Display: [ ] Type: [ ] X [ ] PM [ ] Win32 [ ] DOS [ ] TTY
-                      [X] Class: [X] Color [ ] Grayscale [ ] Monochrome
-                      [ ] Background: [ ] Light [ ] Dark
-             Attributes: [ ] Bold: off 
-                         [ ] Italic: off 
-                         [ ] Underline: off 
-                         [X] Foreground: yellow (sample)
-                         [X] Background: red (sample)
-                         [ ] Stipple:  
- [INS] [DEL] Display: all
-             Attributes: [X] Bold: on 
-                         [X] Italic: on 
-                         [X] Underline: on 
-                         [ ] Foreground: default (sample)
-                         [ ] Background: default (sample)
-                         [ ] Stipple:  
- [INS]
-@end example
-
-This has two display specifications.  The first will match all color
-displays, independently on what window system the device belongs to, and
-whether background color is dark or light.  For devices matching this
-specification, @samp{custom-invalid-face} will force text to be
-displayed in yellow on red, but leave all other attributes alone.
-
-The second display will simply match everything.  Since the list is
-prioritised, this means that it will match all non-color displays.  For
-these, the face will not affect the foreground or background color, but
-force the font to be both bold, italic, and underline.
-
-You can add or delete display specifications by activating the
-@samp{[INS]} and @samp{[DEL]} buttons, and modify them by clicking on
-the check boxes.  The first checkbox in each line in the display
-specification is special.  It specify whether this particular property
-will even be relevant.  By not checking the box in the first display, we
-match all device types, also device types other than those listed.
-
-After modifying the face, you can activate the state button to make the
-changes take effect.  The menu items in the state button menu is similar
-to the state menu items for variables described in the previous section.
-
-@node  The Group Options, The State Button, The Face Options, The Customization Buffer
-@comment  node-name,  next,  previous,  up
-@subsection The Group Options
-
-Since Emacs has approximately a zillion configuration options, they have
-been organized in groups.  Each group can contain other groups, thus
-creating a customization hierarchy.  The nesting of the customization
-within the visible part of this hierarchy is indicated by the number of
-stars in the level button.
-
-Since there is really no customization needed for the group itself, the
-menu items in the groups state button will affect all modified group
-members recursively.  Thus, if you activate the @samp{Set} menu item,
-all variables and faces that have been modified and belong to that group
-will be applied.  For those members that themselves are groups, it will
-work as if you had activated the @samp{Set} menu item on them as well.
-
-@node  The State Button, The Customization Buttons, The Group Options, The Customization Buffer
-@comment  node-name,  next,  previous,  up
-@subsection The State Line and The Magic Button
-
-The state line has two purposes.  The first is to hold the state menu,
-as described in the previous sections.  The second is to indicate the
-state of each customization item.  
-
-For the magic button, this is done by the character inside the brackets.
-The following states have been defined, the first that applies to the
-current item will be used:
-
-@table @samp
-@item -
-The option is currently hidden.  For group options that means the
-members are not shown, for variables and faces that the value is not
-shown.  You cannot perform any of the state change operations on a
-hidden customization option.
-
-@item *
-The value if this option has been modified in the buffer, but not yet
-applied.  
-
-@item +
-The item has has been set by the user.
-
-@item :
-The current value of this option is different from the saved value.   
-
-@item !
-The saved value of this option is different from the factory setting.
-
-@item @@
-The factory setting of this option is not known.  This occurs when you
-try to customize variables or faces that have not been explicitly
-declared as customizable.
-
-@item SPC
-The factory setting is still in effect.
-
-@end table
-
-For non-hidden group options, the state shown is the most severe state
-of its members, where more severe means that it appears earlier in the
-list above (except hidden members, which are ignored).
-
-@node  The Customization Buttons,  , The State Button, The Customization Buffer
-@comment  node-name,  next,  previous,  up
-@subsection The Customization Buttons
-
-The last part of the customization buffer looks like this:
-
-@example
-[Set] [Save] [Reset] [Done]
-@end example
-
-Activating the @samp{[Set]}, @samp{[Save]}, or @samp{[Reset]}
-button will affect all modified customization items that are visible in
-the buffer.  @samp{[Done]} will bury the buffer.
-
-@node   Declarations, Utilities, The Customization Buffer, Top
-@comment  node-name,  next,  previous,  up
-@section Declarations
-
-This section describes how to declare customization groups, variables,
-and faces.  It doesn't contain any examples, but please look at the file
-@file{cus-edit.el} which contains many declarations you can learn from.
-
-@menu
-* Declaring Groups::            
-* Declaring Variables::         
-* Declaring Faces::             
-* Usage for Package Authors::   
-@end menu
-
-All the customization declarations can be changes by keyword arguments.
-Groups, variables, and faces all share these common keywords:
-
-@table @code
-@item :group
-@var{value} should be a customization group. 
-Add @var{symbol} to that group. 
-@item :link
-@var{value} should be a widget type. 
-Add @var{value} to the extrenal links for this customization option.
-Useful widget types include @code{custom-manual}, @code{info-link}, and
-@code{url-link}. 
-@item :load
-Add @var{value} to the files that should be loaded nefore displaying
-this customization option.  The value should be iether a string, which
-should be a string which will be loaded with @code{load-library} unless
-present in @code{load-history}, or a symbol which will be loaded with
-@code{require}. 
-@item :tag
-@var{Value} should be a short string used for identifying the option in
-customization menus and buffers.  By default the tag will be
-automatically created from the options name.
-@end table
-
-@node  Declaring Groups, Declaring Variables, Declarations, Declarations
-@comment  node-name,  next,  previous,  up
-@subsection Declaring Groups
-
-Use @code{defgroup} to declare new customization groups. 
-
-@defun defgroup symbol members doc [keyword value]...
-Declare @var{symbol} as a customization group containing @var{members}. 
-@var{symbol} does not need to be quoted.
-
-@var{doc} is the group documentation.
-
-@var{members} should be an alist of the form ((@var{name}
-@var{widget})...) where @var{name} is a symbol and @var{widget} is a
-widget for editing that symbol.  Useful widgets are
-@code{custom-variable} for editing variables, @code{custom-face} for
-editing faces, and @code{custom-group} for editing groups.@refill
-
-Internally, custom uses the symbol property @code{custom-group} to keep
-track of the group members, and @code{group-documentation} for the
-documentation string. 
-
-The following additional @var{keyword}'s are defined:
-
-@table @code
-@item :prefix
-@var{value} should be a string.  If the string is a prefix for the name
-of a member of the group, that prefix will be ignored when creating a
-tag for that member.
-@end table
-@end defun
-
-@node  Declaring Variables, Declaring Faces, Declaring Groups, Declarations
-@comment  node-name,  next,  previous,  up
-@subsection Declaring Variables
-
-Use @code{defcustom} to declare user editable variables.
-
-@defun defcustom symbol value doc [keyword value]...
-Declare @var{symbol} as a customizable variable that defaults to @var{value}.
-Neither @var{symbol} nor @var{value} needs to be quoted.
-If @var{symbol} is not already bound, initialize it to @var{value}.
-
-@var{doc} is the variable documentation.
-
-The following additional @var{keyword}'s are defined:
-
-@table @code
-@item :type    
-@var{value} should be a widget type.
-@item :options
-@var{value} should be a list of possible members of the specified type.
-For hooks, this is a list of function names.
-@end table
-
-@xref{Sexp Types,,,widget,The Widget Library}, for information about
-widgets to use together with the @code{:type} keyword.
-@end defun
-
-Internally, custom uses the symbol property @code{custom-type} to keep
-track of the variables type, @code{factory-value} for the program
-specified default value, @code{saved-value} for a value saved by the
-user, and @code{variable-documentation} for the documentation string.
-
-Use @code{custom-add-option} to specify that a specific function is
-useful as an meber of a hook.
-
-@defun custom-add-option symbol option
-To the variable @var{symbol} add @var{option}.
-
-If @var{symbol} is a hook variable, @var{option} should be a hook
-member.  For other types variables, the effect is undefined."
-@end defun
-
-@node  Declaring Faces, Usage for Package Authors, Declaring Variables, Declarations
-@comment  node-name,  next,  previous,  up
-@subsection Declaring Faces
-
-Faces are declared with @code{defface}.
-
-@defun defface face spec doc [keyword value]... 
-
-Declare @var{face} as a customizable face that defaults to @var{spec}.
-@var{face} does not need to be quoted.
-
-If @var{face} has been set with `custom-set-face', set the face attributes
-as specified by that function, otherwise set the face attributes
-according to @var{spec}.
-
-@var{doc} is the face documentation.
-
-@var{spec} should be an alist of the form @samp{((@var{display} @var{atts})...)}.
-
-@var{atts} is a list of face attributes and their values.  The possible
-attributes are defined in the variable `custom-face-attributes'.
-Alternatively, @var{atts} can be a face in which case the attributes of
-that face is used.
-
-The @var{atts} of the first entry in @var{spec} where the @var{display}
-matches the frame should take effect in that frame.  @var{display} can
-either be the symbol `t', which will match all frames, or an alist of
-the form @samp{((@var{req} @var{item}...)...)}@refill
-
-For the @var{display} to match a FRAME, the @var{req} property of the
-frame must match one of the @var{item}.  The following @var{req} are
-defined:@refill
-
-@table @code
-@item type
-(the value of (window-system))@*
-Should be one of @code{x} or @code{tty}.
-
-@item class
-(the frame's color support)@*
-Should be one of @code{color}, @code{grayscale}, or @code{mono}.
-
-@item background
-(what color is used for the background text)@*
-Should be one of @code{light} or @code{dark}.
-@end table
-  
-Internally, custom uses the symbol property @code{factory-face} for the
-program specified default face properties, @code{saved-face} for
-properties saved by the user, and @code{face-doc-string} for the
-documentation string.@refill
-
-@end defun
-
-@node Usage for Package Authors,  , Declaring Faces, Declarations
-@comment  node-name,  next,  previous,  up
-@subsection Usage for Package Authors
-
-The recommended usage for the author of a typical emacs lisp package is
-to create one group identifying the package, and make all user options
-and faces members of that group.  If the package has more than around 20
-such options, they should be divided into a number of subgroups, with
-each subgroup being member of the top level group.
-
-The top level group for the package should itself be member of one or
-more of the standard customization groups.  There exists a group for
-each @emph{finder} keyword.  Press @kbd{C-c p} to see a list of finder
-keywords, and add you group to each of them, using the @code{:group}
-keyword. 
-
-@node  Utilities, The Init File, Declarations, Top
-@comment  node-name,  next,  previous,  up
-@section Utilities
-
-These utilities can come in handy when adding customization support. 
-
-@deffn Widget custom-manual
-Widget type for specifying the info manual entry for a customization
-option.  It takes one argument, an info address.
-@end deffn
-
-@defun custom-add-to-group group member widget
-To existing @var{group} add a new @var{member} of type @var{widget},
-If there already is an entry for that member, overwrite it.
-@end defun
-
-@defun custom-add-link symbol widget
-To the custom option @var{symbol} add the link @var{widget}.
-@end defun
-
-@defun custom-add-load symbol load
-To the custom option @var{symbol} add the dependency @var{load}.
-@var{load} should be either a library file name, or a feature name.
-@end defun
-
-@defun custom-menu-create symbol &optional name
-Create menu for customization group @var{symbol}.
-If optional @var{name} is given, use that as the name of the menu. 
-Otherwise make up a name from @var{symbol}.
-The menu is in a format applicable to @code{easy-menu-define}.
-@end defun
-
-@node  The Init File, Wishlist, Utilities, Top
-@comment  node-name,  next,  previous,  up
-@section The Init File
-
-When you save the customizations, call to @code{custom-set-variables},
-@code{custom-set-faces} are inserted into the file specified by
-@code{custom-file}.  By default @code{custom-file} is your @file{.emacs}
-file.  If you use another file, you must explicitly load it yourself.
-The two functions will initialize variables and faces as you have
-specified.
-
-@node  Wishlist,  , The Init File, Top
-@comment  node-name,  next,  previous,  up
-@section Wishlist
-
-@itemize @bullet
-@item
-The menu items should be grayed out when the information is
-missing.  I.e. if a variable doesn't have a factory setting, the user
-should not be allowed to select the @samp{Factory} menu item.
-
-@item 
-Better support for keyboard operations in the customize buffer.
-
-@item
-Integrate with @file{w3} so you can customization buffers with much
-better formatting.  I'm thinking about adding a <custom>name</custom>
-tag.  The latest w3 have some support for this, so come up with a
-convincing example.
-
-@item
-Add an `examples' section, with explained examples of custom type
-definitions. 
-
-@item
-Support selectable color themes.  I.e., change many faces by setting one
-variable.
-
-@item
-Support undo using lmi's @file{gnus-undo.el}.
-
-@item
-Make it possible to append to `choice', `radio', and `set' options.
-
-@item
-Make it possible to customize code, for example to enable or disable a
-global minor mode.
-
-@item
-Ask whether set or modified variables should be saved in
-@code{kill-buffer-hook}. 
-
-Ditto for @code{kill-emacs-query-functions}.
-
-@item
-Command to check if there are any customization options that
-does not belong to an existing group. 
-
-@item
-Optionally disable the point-cursor and instead highlight the selected
-item in XEmacs.  This is like the *Completions* buffer in XEmacs.
-Suggested by Jens Lautenbacher
-@samp{<jens@@lemming0.lem.uni-karlsruhe.de>}.@refill
-
-@item
-Empty customization groups should start open (harder than it looks).
-
-@item
-Make it possible to include a comment/remark/annotation when saving an
-option.
-
-@end itemize
-
-@contents
-@bye
diff --git a/texi/gnus-ja.texi b/texi/gnus-ja.texi
new file mode 100644 (file)
index 0000000..c0dee20
--- /dev/null
@@ -0,0 +1,13309 @@
+\input texinfo                  @c -*-texinfo-*-
+
+@setfilename gnus-ja
+@settitle Semi-gnus 6.7.7 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
+@iftex
+@finalout
+@end iftex
+@setchapternewpage odd
+
+@iftex
+@iflatex
+\documentclass[twoside,a4paper,openright,11pt]{book}
+\usepackage[latin1]{inputenc}
+\usepackage{pagestyle}
+\usepackage{epsfig}
+\usepackage{bembo}
+\usepackage{pixidx}
+
+\makeindex
+\begin{document}
+
+\newcommand{\gnuschaptername}{}
+\newcommand{\gnussectionname}{}
+
+\newcommand{\gnusbackslash}{/}
+
+\newcommand{\gnusxref}[1]{See ``#1'' on page \pageref{#1}}
+\newcommand{\gnuspxref}[1]{see ``#1'' on page \pageref{#1}}
+
+\newcommand{\gnuskindex}[1]{\index{#1}}
+\newcommand{\gnusindex}[1]{\index{#1}}
+
+\newcommand{\gnustt}[1]{{\fontfamily{pfu}\fontsize{10pt}{10}\selectfont #1}}
+\newcommand{\gnuscode}[1]{\gnustt{#1}}
+\newcommand{\gnussamp}[1]{``{\fontencoding{OT1}\fontfamily{pfu}\fontsize{10pt}{10}\selectfont #1}''}
+\newcommand{\gnuslisp}[1]{\gnustt{#1}}
+\newcommand{\gnuskbd}[1]{`\gnustt{#1}'}
+\newcommand{\gnusfile}[1]{`\gnustt{#1}'}
+\newcommand{\gnusdfn}[1]{\textit{#1}}
+\newcommand{\gnusi}[1]{\textit{#1}}
+\newcommand{\gnusstrong}[1]{\textbf{#1}}
+\newcommand{\gnusemph}[1]{\textit{#1}}
+\newcommand{\gnusvar}[1]{{\fontsize{10pt}{10}\selectfont\textsl{\textsf{#1}}}}
+\newcommand{\gnussc}[1]{\textsc{#1}}
+\newcommand{\gnustitle}[1]{{\huge\textbf{#1}}}
+\newcommand{\gnusauthor}[1]{{\large\textbf{#1}}}
+
+\newcommand{\gnusbullet}{{${\bullet}$}}
+\newcommand{\gnusdollar}{\$}
+\newcommand{\gnusampersand}{\&}
+\newcommand{\gnuspercent}{\%}
+\newcommand{\gnushash}{\#}
+\newcommand{\gnushat}{\symbol{"5E}}
+\newcommand{\gnusunderline}{\symbol{"5F}}
+\newcommand{\gnusnot}{$\neg$}
+\newcommand{\gnustilde}{\symbol{"7E}}
+\newcommand{\gnusless}{{$<$}}
+\newcommand{\gnusgreater}{{$>$}}
+
+\newcommand{\gnushead}{\raisebox{-1cm}{\epsfig{figure=ps/gnus-head.eps,height=1cm}}}
+\newcommand{\gnusinteresting}{
+\marginpar[\mbox{}\hfill\gnushead]{\gnushead}
+}
+
+\newcommand{\gnuscleardoublepage}{\ifodd\count0\mbox{}\clearpage\thispagestyle{empty}\mbox{}\clearpage\else\clearpage\fi}
+
+\newcommand{\gnuspagechapter}[1]{
+{\mbox{}}
+}
+
+\newdimen{\gnusdimen}
+\gnusdimen 0pt
+
+\newcommand{\gnuschapter}[2]{
+\gnuscleardoublepage
+\ifdim \gnusdimen = 0pt\setcounter{page}{1}\pagestyle{gnus}\pagenumbering{arabic} \gnusdimen 1pt\fi
+\chapter{#2}
+\renewcommand{\gnussectionname}{}
+\renewcommand{\gnuschaptername}{#2}
+\thispagestyle{empty}
+\hspace*{-2cm}
+\begin{picture}(500,500)(0,0)
+\put(480,350){\makebox(0,0)[tr]{#1}}
+\put(40,300){\makebox(500,50)[bl]{{\Huge\bf{#2}}}}
+\end{picture}
+\clearpage
+}
+
+\newcommand{\gnusfigure}[3]{
+\begin{figure}
+\mbox{}\ifodd\count0\hspace*{-0.8cm}\else\hspace*{-3cm}\fi\begin{picture}(440,#2)
+#3
+\end{picture}
+\caption{#1}
+\end{figure}
+}
+
+\newcommand{\gnusicon}[1]{
+\marginpar[\mbox{}\hfill\raisebox{-1.5cm}{\epsfig{figure=tmp/#1-up.ps,height=1.5cm}}]{\raisebox{-1cm}{\epsfig{figure=tmp/#1-up.ps,height=1cm}}}
+}
+
+\newcommand{\gnuspicon}[1]{
+\margindex{\epsfig{figure=#1,width=2cm}}
+}
+
+\newcommand{\gnusxface}[2]{
+\margindex{\epsfig{figure=#1,width=1cm}\epsfig{figure=#2,width=1cm}}
+}
+
+\newcommand{\gnussmiley}[2]{
+\margindex{\makebox[2cm]{\hfill\epsfig{figure=#1,width=0.5cm}\hfill\epsfig{figure=#2,width=0.5cm}\hfill}}
+}
+
+\newcommand{\gnusitemx}[1]{\mbox{}\vspace*{-\itemsep}\vspace*{-\parsep}\item#1}
+
+\newcommand{\gnussection}[1]{
+\renewcommand{\gnussectionname}{#1}
+\section{#1}
+}
+
+\newenvironment{codelist}%
+{\begin{list}{}{
+}
+}{\end{list}}
+
+\newenvironment{kbdlist}%
+{\begin{list}{}{
+\labelwidth=0cm
+}
+}{\end{list}}
+
+\newenvironment{dfnlist}%
+{\begin{list}{}{
+}
+}{\end{list}}
+
+\newenvironment{stronglist}%
+{\begin{list}{}{
+}
+}{\end{list}}
+
+\newenvironment{samplist}%
+{\begin{list}{}{
+}
+}{\end{list}}
+
+\newenvironment{varlist}%
+{\begin{list}{}{
+}
+}{\end{list}}
+
+\newenvironment{emphlist}%
+{\begin{list}{}{
+}
+}{\end{list}}
+
+\newlength\gnusheadtextwidth
+\setlength{\gnusheadtextwidth}{\headtextwidth}
+\addtolength{\gnusheadtextwidth}{1cm}
+
+\newpagestyle{gnuspreamble}%
+{
+{
+\ifodd\count0
+{
+\hspace*{-0.23cm}\underline{\makebox[\gnusheadtextwidth]{\mbox{}}\textbf{\hfill\roman{page}}}
+}
+\else
+{
+\hspace*{-3.25cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\roman{page}\hfill\mbox{}}}
+}
+}
+\fi
+}
+}
+{
+\ifodd\count0
+\mbox{} \hfill
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
+\else
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
+\hfill \mbox{}
+\fi
+}
+
+\newpagestyle{gnusindex}%
+{
+{
+\ifodd\count0
+{
+\hspace*{-0.23cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\gnuschaptername\hfill\arabic{page}}}}
+}
+\else
+{
+\hspace*{-3.25cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\arabic{page}\hfill\gnuschaptername}}}
+}
+\fi
+}
+}
+{
+\ifodd\count0
+\mbox{} \hfill
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
+\else
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
+\hfill \mbox{}
+\fi
+}
+
+\newpagestyle{gnus}%
+{
+{
+\ifodd\count0
+{
+\makebox[12cm]{\hspace*{3.1cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\arabic{chapter}.\arabic{section}} \textbf{\gnussectionname\hfill\arabic{page}}}}}
+}
+\else
+{
+\makebox[12cm]{\hspace*{-2.95cm}\underline{\makebox[\gnusheadtextwidth]{\textbf{\arabic{page}\hfill\gnuschaptername}}}}
+}
+\fi
+}
+}
+{
+\ifodd\count0
+\mbox{} \hfill
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
+\else
+\raisebox{-0.5cm}{\epsfig{figure=ps/gnus-big-logo.eps,height=1cm}}
+\hfill \mbox{}
+\fi
+}
+
+\pagenumbering{roman}
+\pagestyle{gnuspreamble}
+
+@end iflatex
+@end iftex
+
+@iftex
+@iflatex
+\begin{titlepage}
+{
+
+%\addtolength{\oddsidemargin}{-5cm}
+%\addtolength{\evensidemargin}{-5cm}
+\parindent=0cm
+\addtolength{\textheight}{2cm}
+
+\gnustitle{\gnustitlename}\\
+\rule{15cm}{1mm}\\
+\vfill
+\hspace*{0cm}\epsfig{figure=ps/gnus-big-logo.eps,height=15cm}
+\vfill
+\rule{15cm}{1mm}\\
+\gnusauthor{by Lars Magne Ingebrigtsen}
+\newpage
+}
+
+\mbox{}
+\vfill
+
+\thispagestyle{empty}
+
+Copyright \copyright{} 1995,96,97 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.
+
+\e$BF10lJ#@=$N>r7o$N2<$G!"$=$l$K$h$C$FF@$i$l$?7k2L$r$3$N5v2DJ8$NI=<($HF10l$N\e(B
+\e$B>r7o$N$b$H$GG[I[$9$k8B$j!"$3$N@bL@=q$N=$@5HG$NJ#@=$r$7!"G[I[$9$k$3$H$r5v\e(B
+\e$B2D$9$k!#\e(B
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+
+\e$B>e5-$N=$@5HG$K4X$9$k>r7o$N2<$G!"$3$N@bL@=q$NK]Lu$NJ#@=$r:n$j!"G[I[$9$k$3\e(B
+\e$B$H$r5v2D$9$k!#\e(B
+
+\newpage
+\end{titlepage}
+@end iflatex
+@end iftex
+
+@ifinfo
+
+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 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$l\e(B
+\e$B$F$$$k8B$j!"$3$N%U%!%$%k$r\e(B Tex \e$B$K$+$1$F!"$=$N7k2L$r0u:~$9$k$3$H$r5v2D$9$k!#\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.
+
+\e$BF10lJ#@=$N>r7o$N2<$G!"$=$l$K$h$C$FF@$i$l$?7k2L$b$3$N5v2DJ8$NI=<($HF10l$N\e(B
+\e$B>r7o$N$b$H$GG[I[$9$k8B$j!"$3$N@bL@=q$N=$@5HG$NJ#@=$r$7!"G[I[$9$k$3$H$r5v\e(B
+\e$B2D$9$k!#\e(B
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+
+\e$B>e5-$N=$@5HG$K4X$9$k>r7o$N2<$G!"$3$N@bL@=q$NK]Lu$NJ#@=$r:n$j!"G[I[$9$k$3\e(B
+\e$B$H$r5v2D$9$k!#\e(B
+
+@end ifinfo
+
+@tex
+
+@titlepage
+@title Semi-gnus 6.7.7 Manual
+
+@author by Lars Magne Ingebrigtsen
+@author by members of Semi-gnus mailing-list
+@page
+
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1995,96,97 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.
+
+\e$BF10lJ#@=$N>r7o$N2<$G!"$=$l$K$h$C$FF@$i$l$?7k2L$r$3$N5v2DJ8$NI=<($HF10l$N\e(B
+\e$B>r7o$N$b$H$GG[I[$9$k8B$j!"$3$N@bL@=q$N=$@5HG$NJ#@=$r$7!"G[I[$9$k$3$H$r5v\e(B
+\e$B2D$9$k!#\e(B
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+
+\e$B>e5-$N=$@5HG$K4X$9$k>r7o$N2<$G!"$3$N@bL@=q$NK]Lu$NJ#@=$r:n$j!"G[I[$9$k$3\e(B
+\e$B$H$r5v2D$9$k!#\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
+
+Semi-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
+Semi-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(BSemi-gnus \e$B$O\e(B MULE API \e$B$K4p$E$/9q:]\e(B
+\e$B2=!&CO0h2=!"$*$h$S!"B?;z2=5!G=$rDs6!$7$^$9!#$h$C$F!"\e(BSemi-gnus \e$B$O$5$^$6$^\e(B
+\e$B$J8@8l7w$r:9JL$7$^$;$s!#$"$"!"%/%j%s%4%s$NJ}$O\e(B Unicode Next Generation\e$B$r\e(B
+\e$B$*BT$A$/$@$5$$!#\e(B
+
+\e$B$3$N@bL@=q$O\e(B Semi-gnus 6.7.7 \e$B$KBP1~$7$^$9!#\e(B
+
+@end ifinfo
+
+@iftex
+
+@iflatex
+\tableofcontents
+\gnuscleardoublepage
+@end iflatex
+
+Gnus \e$B$O\e(B GNU Emacs \e$B$N@h?JE*$G!"@bL@$N$"$k!"%+%9%?%^%$%:2DG=$G!"3HD%2DG=$J!"\e(B
+\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
+
+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
+
+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$-$G$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!"9VFI$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
+@end menu
+
+@node Starting Up
+@chapter gnus \e$B$N5/F0\e(B
+@cindex starting up
+
+@kindex M-x gnus
+@findex gnus
+\e$B%7%9%F%`4IM}<T$,E,@Z$J@_Dj$r$7$F$$$?$J$i$P!"\e(Bgnus \e$B$r5/F0$7$F%K%e!<%9$rFI\e(B
+\e$B$`$N$OHs>o$K4JC1$G$9!#$=$&!"\e(BEmacs \e$B$G\e(B @kbd{M-x gnus} \e$B$HBG$D$@$1$G$9!#\e(B
+
+@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$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$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
+
+@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
+@end menu
+
+
+@node Finding the News
+@section \e$B%K%e!<%9$r8+$D$1$k\e(B
+@cindex finding news
+
+@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$F$$$^$9!#$3$NJQ?t$O$O$8$a$NMWAG$,\e(B@dfn{\e$B$I$N$h$&$K$7$F\e(B}\e$B!"#2HVL\$NMWAG$,\e(B
+@dfn{\e$B$I$3$G\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$F30$N\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|0lDj$NNL\e(B
+\e$B$N%K%e!<%9!JLt$N$h$&$K!K$r@]<h$7$?$$$N$G$"$l$P!"\e(B
+
+@lisp
+(setq gnus-select-method '(nntp "news.somewhere.edu"))
+@end lisp
+
+\e$B$N$h$&$K$9$k$3$H$,$G$-$^$9!#\e(B
+
+\e$B%m!<%+%k!&%9%W!<%k$N%G%#%l%/%H%j$rFI$_9~$_$?$$>l9g$O!"\e(B
+
+@lisp
+(setq gnus-select-method '(nnspool ""))
+@end lisp
+
+\e$B$N$h$&$K$G$-$^$9!#\e(B
+
+\e$B%m!<%+%k$N%9%W!<%k$r;H$($k$N$G$"$l$P!"$+$J$j$N3NN($G$=$NJ}$,$:$C$HB.$$$G\e(B
+\e$B$7$g$&$7!"$=$l$r;H$&$Y$-$G$7$g$&!#\e(B
+
+@vindex gnus-nntpserver-file
+@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
+
+@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$O\e(B @code{nil} \e$B$K@_Dj$9$k$Y$-$G!"I8=`@_Dj$G$b$=$N\e(B
+\e$B$h$&$K$J$C$F$$$^$9!#\e(B
+
+@vindex gnus-secondary-servers
+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
+
+@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}.
+
+@vindex gnus-secondary-select-methods
+@c @head
+\e$B30$N%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$k$3$H$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!<$H$NA*\e(B
+\e$BBrJ}K!$HF1$8$h$&$K07$o$l$^$9!#5/F0Cf$K%"%/%F%#%V%U%!%$%k$rC5$7$K$$$-$^$9$7\e(B
+\e$B!J$b$7MW5a$5$l$F$$$l$P!K!"$3$l$i$N%5!<%P!<>e$K$G$-$??7$7$$%K%e!<%9%0%k!<\e(B
+\e$B%W$O85!9$N%0%k!<%W$HF1$8$h$&$K9XFI!J$b$7$/$OIT9XFI!K$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
+
+@lisp
+(setq gnus-secondary-select-methods '((nnmbox "")))
+@end lisp
+
+\e$B$H@_Dj$7$^$9!#\e(B
+
+@node The First Time
+@section \e$B0lHV=i$a\e(B
+@cindex first time usage
+
+\e$B5/F0MQ%U%!%$%k$,B8:_$7$J$$$H$-$O!"\e(Bgnus \e$B$O%G%#%U%)%k%H$G$I$N%0%k!<%W$,9X\e(B
+\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-sebscribed-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$*$/$Y$-$G$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$^$?!"$?$$$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
+
+
+@node The Server is Down
+@section \e$B%5!<%P!<$,Mn$A$F$$$k\e(B
+@cindex server errors
+
+\e$BI8=`\e(B (default) \e$B$N%5!<%P!<$,Mn$A$F$$$k$H$-$O!"EvA3\e(B gnus \e$B$N5/F0$K$$$/$D$+\e(B
+\e$B$NLdBj$,H/@8$7$^$9!#$7$+$7!"%K%e!<%9%0%k!<%W$NB>$K$$$/$D$+%a!<%k$N%0%k!<\e(B
+\e$B%W$,$"$l$P!"$=$l$K$b$+$+$o$i$:\e(B gnus \e$B$r5/F0$7$?$$$H;W$&$+$b$7$l$^$;$s!#\e(B
+
+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;~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!"30$N%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
+\e$B$9!#%O%O%O%C!#\e(B
+
+@findex gnus-no-server
+@kindex M-x gnus-no-server
+@c @head
+\e$B%5!<%P!<$,40A4$KMn$A$F$$$k$N$rCN$C$F$$$k$+!"%5!<%P!<$G$o$:$i$&$3$H$J$/%a!<\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$r\e(B
+\e$B;H$&$3$H$,$G$-$^$9!#5^$$$G$$$k$H$-$K$b$T$C$?$j$G$7$g$&!#$3$NL?Na$OK\Mh$N%5!<\e(B
+\e$B%P!<$K$O@\B3$7$^$;$s!=!=$=$NBe$o$j$K!"%l%Y%k#1$H#2$K$"$k$9$Y$F$N%0%k!<%W$r\e(B
+\e$B3hF0>uBV$K$7$^$9!J4pK\%0%k!<%W$G$J$$%0%k!<%W$O$=$N#2$D$N%l%Y%k$K$7$F$*$/$N\e(B
+\e$B$,K>$^$7$$$G$7$g$&!K!#\e(B
+
+
+@node Slave Gnusae
+@section gnus \e$B$r%9%l!<%V$K$9$k\e(B
+@cindex slave
+
+\e$B$"$J$?$O#2$D0J>e$N\e(B Emacs \e$B$H!"#2$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!"#2\e(B
+\e$B$D$N0c$C$?%5!<%P!<$+$iFI$_9~$`$?$a$K!"#2$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$BLdBj$O!"F1$8\e(B @code{.newsrc} \e$B%U%!%$%k$r;H$&#2$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$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!#!K\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$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$?0lO"$NF0:n$NCf$GFI$^$l$^$9!#!K\e(B 
+
+\e$B$b$A$m$s!"%9%l!<%V%U%!%$%k$+$i$N>pJs$OIaDL$N!JNc$($P!"%^%9%?!<$N!K%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
+
+@findex gnus-fetch-group
+\e$B;~!9!"!H$3$N%0%k!<%W$rFI$_$?$$$N$G$"$C$F!"\e(Bgnus \e$B$,5/F0$7$F$$$k$+$I$&$+$r\e(B
+\e$B5$$K$7$?$/$J$$!#!I$H$$$&$3$H$,$G$-$l$PJXMx$J$3$H$,$"$j$^$9!#$3$l$O!"MxMQ\e(B
+\e$B<T$h$j$b%W%m%0%i%`$N%3!<%I$r=q$/?M$KJXMx$J5!G=$G$9$,!"$I$A$i$K$7$m!"%3%^\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
+@cindex subscription
+
+@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!#@_Dj$5$l$F$$$J$$\e(B
+\e$B>l9g\e(B (default) \e$B$G$O$3$NJQ?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$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$rC5$9$3$H$r5a$a$^$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
+@end menu
+
+
+@node Checking New Groups
+@subsection \e$B?7$7$$%0%k!<%W$rD4$Y$k\e(B
+
+Gnus \e$B$O!"IaDL$O%0%k!<%W$,?7$7$$$+$I$&$+$r!"9XFI$7$F$$$k%0%k!<%W$H:o=|$5$l\e(B
+\e$B$F$$$k%0%k!<%W$N%j%9%H$H8=>u%U%!%$%k\e(B (active file) \e$B$rHf3S$9$k$3$H$K$h$j7h\e(B
+\e$BDj$7$F$$$^$9!#$3$NJ}K!$OFC$KB.$$$H$$$&$o$1$G$O$"$j$^$;$s!#\e(B
+@code{gnus-check-new-newsgroups} \e$B$,\e(B @code{ask-server} \e$B$G$"$k$H!"\e(Bgnus \e$B$O%5!<\e(B
+\e$B%P!<$K!":G8e$K@\B3$7$F$+$i?7$7$$%0%k!<%W$,$G$-$F$$$k$+$I$&$+$r?R$M$^$9!#$3\e(B
+\e$B$NJ}K!$OB.$$$7!"0B>e$,$j$G$9!#$3$l$K$h$j!":o=|$5$l$?%0%k!<%W$N%j%9%H$rJ];}\e(B
+\e$B$7$F$*$/$3$H$+$i$+$i40A4$K3+J|$5$l$^$9!#$G$9$+$i!"\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%#%9\e(B
+\e$B%/>CHqNL$b>/$J$/$J$j$^$9!#$=$l$J$i!"$I$&$7$F$3$l$,I8=`\e(B (default) \e$B$G$O$J$$\e(B
+\e$B$N$G$7$g$&!);DG0$J$,$i!"$9$Y$F$N%5!<%P!<$,$3$NL?Na$rM}2r$9$k$o$1$G$O$J$$$N\e(B
+\e$B$G$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$NJQ\e(B
+\e$B?t$r\e(B @code{ask-server} \e$B$K@_Dj$7$F!"?tF|4V?7$7$$%0%k!<%W$,8=$l$k$+$I$&$+$r\e(B
+\e$BD4$Y$F$/$@$5$$!"$H$$$&$3$H$@$1$G$9!#$b$7$$$/$D$+$N%0%k!<%W$,8=$l$?$J$i!"$=\e(B
+\e$B$l$GF0:n$7$F$$$^$9!#0l$D$b8=$l$J$1$l$P!"$=$l$OF0:n$7$^$;$s!#;d$O!"\e(Bgnus \e$B$K\e(B
+\e$B%5!<%P!<$,\e(B @code{ask-server} \e$B$rM}2r$9$k$+$I$&$+$r?dNL$5$;$k4X?t$r=q$/$3$H\e(B
+\e$B$b$G$-$^$9$,!"$=$l$OC1$K?dNL$7$F$$$k$K$9$.$^$;$s!#$G$9$+$i!"$=$N4X?t$r=q$/\e(B
+\e$B$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$K\e(B @samp{NEWGROUPS} \e$B$,$"\e(B
+\e$B$k$+$I$&$+$rD4$Y$k$3$H$b$G$-$^$9!#$b$7$"$l$P!"$*$=$i$/F0:n$9$k$G$7$g$&!J$7\e(B
+\e$B$+$7!"E,@Z$K5!G=$rDs6!$9$k$3$H$J$/\e(B @samp{NEGROUPS} \e$B$r%j%9%H$K4^$a$k%5!<%P!<\e(B
+\e$B$b$"$j$^$9!K!#\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!"IT9XFI!K$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-nesgroup-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
+
+\e$B$$$/$D$+$N<j7Z$J%W%l%O%V4X?t$O!"0J2<$N$h$&$K$J$C$F$$$^$9!#\e(B
+
+@table @code
+
+@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$,I8=`\e(B (default) \e$B$K\e(B
+\e$B$J$C$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\e(B
+\e$B$h$C$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
+
+@item gnus-subscribe-randomly
+@vindex gnus-subscribe-randomly
+\e$BG$0U$N=gHV$G$9$Y$F$N?7$7$$%0%k!<%W$r9XFI$7$^$9!#<B:]$K$O!"$9$Y$F$N?7$7$$\e(B
+\e$B%0%k!<%W$O%0%k!<%W%P%C%U%!$N!X0lHV>e!Y$K2C$($i$l$^$9!#\e(B
+
+@item gnus-subscribe-alphabetically
+@vindex gnus-subscribe-alphabetically
+\e$B$9$Y$F$N?7$7$$%0%k!<%W$r%"%k%U%!%Y%C%H=g$K9XFI$7$^$9!#\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
+@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
+\e$B$=$NG[CV$r$0$A$c$0$A$c$K$O$7$^$;$s!#$b$7$/$O!"$=$N$h$&$J$b$N$G$9!#\e(B
+
+@item gnus-subscribe-interactively
+@vindex gnus-subscribe-interactively
+\e$B?7$7$$%0%k!<%W$rBPOCE*$K9XFI$7$^$9!#$3$l$O\e(B gnus \e$B$,\e(B @strong{\e$BA4$F\e(B} \e$B$N%0%k!<\e(B
+\e$B%W$KBP$7$F?R$M$k$3$H$r0UL#$7$F$$$^$9!#9XFI$9$k%0%k!<%W$O3,AXE*$K9XFI$5$l\e(B
+\e$B$^$9!#\e(B
+
+@item gnus-subscribe-killed
+@vindex gnus-subscribe-killed
+\e$B$9$Y$F$N?7$7$$%0%k!<%W$r:o=|$7$^$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$BNI$/$"$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!#\e(B
+\e$B$3$l$O8m$j$G$9!#$3$l$OF0:n$7$^$;$s!#$3$l$O$*$a$G$?$$?M$N$9$k$3$H$G$9!#$G\e(B
+\e$B$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$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
+
+@example
+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$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
+@code{gnus-subscribe-options-newsgroup-method} \e$B$,MQ$$$i$l$^$9!#$3$NJQ?t\e(B
+\e$B$OI8=`\e(B (default) \e$B$G$O\e(B @code{gnus-subscribe-alphabetically} \e$B$G$9!#\e(B
+
+@vindex gnus-options-not-subscribe
+@vindex gnus-options-subscribe
+\e$B%U%!%$%k\e(B @file{.newrc} \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#2\e(B
+\e$B$D$NJQ?t$@$1$r@_Dj$9$k$3$H$b$G$-$^$9!#$3$N#2$D$NJQ?t$O%U%!%$%k\e(B 
+@file{.newrc} \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
+
+@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!#%G%#%U%)%k%H$G$O$3$NJQ?t$O\e(B
+\e$B%a!<%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
+
+
+@node Changing Servers
+@section \e$B%5!<%P!<$r49$($k\e(B
+@cindex changing servers
+
+\e$B$H$-$I$-!"$"$k\e(B @sc{nntp} \e$B%5!<%P!<$+$iJL$N%5!<%P!<$X0\F0$7$J$1$l$P$J$i$J\e(B
+\e$B$$$3$H$,$"$j$^$9!#$3$N$h$&$J$3$H$O$a$C$?$K$*$-$^$;$s$,!"$*$=$i$/$"$J$?$,\e(B
+\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
+
+@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$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
+
+@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
+
+@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$B30$N\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
+\e$B8E$$%5!<%P!<$H?7$7$$%5!<%P!<$NN>J}$K@\B3$9$k$3$H$,$G$-$J$$$H$-!"0u$HFI$s\e(B
+\e$B$@HO0O$O$9$Y$F0UL#$,L5$/$J$j$^$9!#$=$N$h$&$J$H$-$O!"%3%^%s%I\e(B @kbd{M-x
+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 
+
+
+@node Startup Files
+@section \e$B5/F0%U%!%$%k\e(B
+@cindex startup files
+@cindex .newsrc
+@cindex .newsrc.el
+@cindex .newsrc.eld
+
+\e$B:#$d!"$"$J$?$O%U%!%$%k\e(B @file{.newrc} \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
+\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$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(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$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 
+
+\e$B$A$J$_$K!"\e(Bgnus \e$B$O2?$bJQ$($F$^$;$s!#\e(BLars \e$BF1;V!"K|:P!*\e(B
+
+
+@vindex gnus-save-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
+\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 
+
+@vindex gnus-save-killed-list
+@code{gnus-save-killed-list} (\e$B%G%#%U%)%k%H\e(B \e$B$G$O\e(B @code{t}) \e$B$,\e(B @code{nil} 
+\e$B$G$"$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/F0;~$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$7\e(B
+\e$B$$%0%k!<%W$N<+F09XFIJ}K!$O0UL#$,L5$/$J$j$^$9!#$3$NJQ?t$r\e(B @code{nil} \e$B$K$7\e(B
+\e$B$?$H$-$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 
+
+@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%G%#%U%)%k%H$NCM$O\e(B @file{~/.newsrc} \e$B$G!"$=$l$,$I$N$h$&$J$b$N$G$"$l!"\e(B
+\e$BKvHx$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$^\e(B
+\e$B$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$K<B\e(B
+\e$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
+@code{gnus-save-standard-newsrc-hook} \e$B$O%U%!%$%k\e(B @file{.newsrc.eld} \e$B$rJ]\e(B
+\e$BB8$9$kA0$K<B9T$5$l$^$9!#8e$NFs$D$OIaDL$OHG4IM}$rF~$l$?$j@Z$C$?$j$9$k$N$K\e(B
+\e$B;H$o$l$^$9!#%G%#%U%)%k%H$G$O!"5/F0%U%!%$%k$rJ]B8$9$k$H$-$KHG4IM}$KF~$j$^\e(B
+\e$B$9!#%P%C%/%"%C%W%U%!%$%k$N:n@.$r;_$a$?$$$H$-$O!"<!$N$h$&$K$7$F$/$@$5$$!#\e(B 
+
+@lisp
+(defun turn-off-backup ()
+  (set (make-local-variable 'backup-inhibited) t))
+
+(add-hook 'gnus-save-quick-newsrc-hook 'turn-off-backup)
+(add-hook 'gnus-save-standard-newsrc-hook 'turn-off-backup)
+@end lisp
+
+@vindex gnus-init-file
+Gnus \e$B$,5/F0$9$k$H!"\e(B@code{gnus-site-init-file} (\e$B%G%#%U%)%k%H$G$O\e(B
+@file{.../site-lisp/gnus}) \e$B$H\e(B @code{gnus-init-file} (\e$B%G%#%U%)%k%H$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
+
+
+
+@node Auto Save
+@section \e$B<+F0J]B8\e(B
+@cindex dribble file
+@cindex auto-save
+
+\e$B2?$+\e(B gnus \e$B$N%G!<%?$rJQ99$9$k$3$H\e(B (\e$B5-;v$rFI$`!"0u$rIU$1$k!"%0%k!<%W$r:o=|\e(B
+\e$B$^$?$O9XFI$9$k\e(B) \e$B$r$7$?$H$-!"JQ99$OFCJL$J\e(B@dfn{\e$B%I%j%V%k%P%C%U%!\e(B (dribble
+buffer)} \e$B$K=q$-9~$^$l$^$9!#$3$N%P%C%U%!$O\e(BEmacs \e$B$,IaDL$9$k$h$&$K<+F0J]B8\e(B
+\e$B$5$l$^$9!#%U%!%$%k\e(B @file{.newsrc} \e$B$rJ]B8$9$kA0$K\e(B Emacs\e$B$,Mn$A$?$H$-$O!"$9\e(B
+\e$B$Y$F$NJQ99$r$3$N%U%!%$%k$+$i2sI|$9$k$3$H$,$G$-$k$G$7$g$&!#\e(B
+
+\e$B5/F0;~$K\e(B gnus \e$B$,$3$N%U%!%$%k$NB8:_$rH/8+$9$k$H!"\e(Bgnus \e$B$O$=$l$rFI$_9~$`$+\e(B
+\e$B$I$&$+$rMxMQ<T$K?R$M$^$9!#K\Ev$N5/F0%U%!%$%k$,J]B8$5$l$l$P!"<+F0J]B8%U%!\e(B
+\e$B%$%k$O:o=|$5$l$^$9!#\e(B 
+
+@vindex gnus-use-dribble-file
+@code{gnus-use-dribble-file} \e$B$,\e(B @code{nil} \e$B$G$"$k$H!"\e(Bgnus \e$B$O%I%j%V%k%P%C\e(B
+\e$B%U%!$r$D$/$C$?$j!"0];}$7$?$j$7$^$;$s!#%G%#%U%)%k%H$O\e(B @code{t} \e$B$G$9!#\e(B
+
+@vindex gnus-dribble-directory
+Gnus \e$B$O%I%j%V%k%U%!%$%k$r\e(B @code{gnus-dribble-directory} \e$B$KCV$-$^$9!#%G%#\e(B
+\e$B%U%)%k%H$G$O$=$N$h$&$K$J$C$F$$$^$9$,!"$3$NJQ?t$,\e(B @code{nil} \e$B$G$"$k$H!"\e(B
+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$OIaDL$OMx\e(B
+\e$BMQ<T$N%[!<%`%G%#%l%/%H%j$G$9\e(B) \e$B$KF~$C$F$$$C$F%I%j%V%k%U%!%$%k$r:n$j$^$9!#\e(B
+\e$B%I%j%V%k%U%!%$%k$O\e(B @code{.newsrc} \e$B$HF1$85v2DB0@-$rM?$($i$l$^$9!#\e(B 
+
+
+@node The Active File
+@section \e$B8=>u%U%!%$%k\e(B
+@cindex active file
+@cindex ignored groups
+
+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$k$H$-$K!"8=>u%U%!%$%k$rFI$_9~$_$^$9!#$3$l$O$H$F$bBg$-$J%U%!%$%k$G!"$=$N\e(B
+\e$B%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$B8=>u%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
+
+@c This variable is
+@c @code{nil} by default, and will slow down active file handling somewhat
+@c if you set it to anything else.
+
+@vindex gnus-read-active-file
+@c @head
+\e$B8=>u%U%!%$%k$OHf3SE*Bg$-$/$J$k798~$,$"$k$N$G!"CY$$2s@~$r;H$C$F$$$k$H$-$O!"\e(B
+\e$B8=>u%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$NJQ?t$O%G%#%U%)%k%H$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
+
+\e$B5$$rIU$1$F$[$7$$$N$O!"$"$J$?$,;3$[$I$N$?$/$5$s$N%0%k!<%W$r9XFI$7$F$$$k$H\e(B
+\e$B$-$K$3$NJQ?t$r\e(B @code{nil} \e$B@_Dj$9$k$H!"\e(Bgnus \e$B$OB.$/$J$k$I$3$m$+!"CY$/$J$C\e(B
+\e$B$F$7$^$&$H$$$&$3$H$G$9!#8=>u$G$O!"%K%e!<%:$r\e(B 2400bps \e$B0J>e$N%b%G%`$rDL$7\e(B
+\e$B$FFI$s$G$$$k$N$G$J$$8B$j!"\e(Bgnus \e$B$NB.EY$O$+$J$jCY$/$J$k$G$7$g$&!#\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$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$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
+\e$B$l$,\e(B @code{some} \e$B$G\e(B @sc{nntp} \e$B%5!<%P!<$r;H$C$F$$$k$H$-$O!"\e(Bgnus \e$B$O$G$-$k\e(B
+\e$B$@$1B.$/L?Na$r=P$7!"0l7b$G$9$Y$F$NJVEz$rFI$_9~$_$^$9!#$3$NJ}$,IaDL$O$h$j\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
+
+@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#2HVL\$N\e(B (secondary) \e$BJ}K!$N8=>u%U%!%$%k<hF@$K$b1F6A$9$k$3$H$K5$\e(B
+\e$B$rIU$1$F$/$@$5$$!#\e(B
+
+
+@node Startup Variables
+@section \e$B5/F0JQ?t\e(B
+
+@table @code
+
+@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
+
+@item gnus-before-startup-hook
+@vindex gnus-before-startup-hook
+Gnus \e$B$N5/F0$K@.8y$7$?8e$K<B9T$5$l$k%U%C%/$G$9!#\e(B
+
+@item gnus-startup-hook
+@vindex gnus-startup-hook
+Gnus \e$B$,5/F0$5$l$?8e$K!"0lHV:G8e$K<B9T$5$l$k%U%C%/$G$9!#\e(B
+
+@item gnus-started-hook
+@vindex gnus-started-hook
+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-started-hook
+@vindex gnus-started-hook
+
+\e$B%U%!%$%k\e(B @file{.newsrc} \e$B$rFI$_9~$s$@8e$G!"%0%k!<%W%P%C%U%!$r:n@.$9$kA0$K\e(B
+\e$B<B9T$5$l$k%U%C%/$G$9!#\e(B
+
+@item gnus-check-bogus-newsgroups
+@vindex gnus-check-bogus-newsgroups
+\e$B$b$7\e(B @code{nil} \e$B$G$J$$$H!"\e(Bgnus \e$B$O5/F0;~$KD4$Y$F$9$Y$F$N56%0%k!<%W$r:o=|\e(B
+\e$B$7$^$9!#\e(B@dfn{\e$B56%0%k!<%W\e(B (bogus group)} \e$B$O$"$J$?$N\e(B @file{.newsrc} \e$B%U%!%$\e(B
+\e$B%k$K$OB8:_$9$k$1$l$I!"%K%e!<%:%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$r;2>H$7$F$/$@$5$$\e(B)\e$B!#\e(B
+
+@item gnus-inhibit-startup-message
+@vindex gnus-inhibit-startup-message
+\e$B$b$7\e(B @code{nil} \e$B$G$J$$$H!"5/F0;~$N%a%C%;!<%8$OI=<($5$l$^$;$s!#$=$N$h$&$K\e(B
+\e$B$9$l$P!";E;v$NBe$o$j$K%K%e!<%:$rFI$s$G$$$k$N$r>e;J$K5$IU$+$l$K$/$/$J$k$G\e(B
+\e$B$7$g$&!#$3$NJQ?t$O\e(B @file{.gnus.el} \e$B$,%m!<%I$5$l$kA0$K;H$o$l$^$9$N$G!"\e(B
+@code{.emacs} \e$B$K@_Dj$9$k$Y$-$G$"$kE@$rCm0U$7$F$/$@$5$$!#\e(B
+
+@item gnus-no-groups-message
+@vindex gnus-no-groups-message
+\e$B%0%k!<%W$,0l$D$bB8:_$7$J$$$H$-$K\e(B gnus \e$B$,I=<($9$k%a%C%;!<%8$G$9!#\e(B
+
+@item gnus-play-startup-jingle
+@vindex gnus-play-startup-jingle
+\e$B$b$7\e(B @code{nil} \e$B$G$J$$$H!"5/F0;~$K\e(B gnus \e$B$NC;$$6J$r1iAU$7$^$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!#%G%#%U%)%k%H$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$$$O0lIt$r!K\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%!$G!"\e(B
+gnus \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}{
+\put(75,50){\epsfig{figure=tmp/group.ps,height=9cm}}
+\put(120,37){\makebox(0,0)[t]{Buffer name}}
+\put(120,38){\vector(1,2){10}}
+\put(40,60){\makebox(0,0)[r]{Mode line}}
+\put(40,58){\vector(1,0){30}}
+\put(200,28){\makebox(0,0)[t]{Native select method}}
+\put(200,26){\vector(-1,2){15}}
+}
+@end iflatex
+@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$r%V%i%&%:$G$-$^$9!#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
+@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%G%U%)%k%H$G$N7A<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$3$l$,%0%k!<%W9T$NNc$G$9!#\e(B
+
+@example
+     25: news.announce.newusers
+ *    0: alt.fan.andrea-dworkin
+@end example
+
+\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
+
+@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
+@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!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$B0J2<$,;HMQ$G$-$k%U%)!<%^%C%HJ8;z$N%j%9%H$G$9!#\e(B
+
+@table @samp
+
+@item M
+\e$B$=$N%0%k!<%W$,0u$N$D$$$?5-;v$@$1$N$H$-$O!"%"%9%?%j%9%/J8;z!#\e(B
+
+@item S
+\e$B$=$N%0%k!<%W$,9XFI$5$l$F$$$k$+$I$&$+!#\e(B
+
+@item L
+\e$B9XFIEY$N%l%Y%k!#\e(B
+
+@item N
+\e$BL$FI5-;v$N?t!#\e(B
+
+@item I
+\e$BJ]N15-;v$N?t!#\e(B
+
+@item T
+\e$B0uIU$-5-;v$N?t!#\e(B
+
+@item 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
+
+@item y
+\e$BL$FI$G$b!"0uIU$-$G$b!"J]N1$G$b$J$$5-;v$N?t!#\e(B
+
+@item i
+\e$B0uIU$-5-;v$HJ]N15-;v$N?t!#\e(B
+
+@item g
+\e$B%0%k!<%WL>$N%U%k%M!<%`!#\e(B
+
+@item G
+\e$B%0%k!<%WL>!#\e(B
+
+@item D
+\e$B%K%e!<%:%0%k!<%W$N@bL@!#\e(B
+
+@item o
+\e$B%b%G%l!<%F%C%I$N>l9g\e(B @samp{m}.
+
+@item O
+\e$B%b%G%l!<%F%C%I$N>l9g\e(B @samp{(m)}.
+
+@item s
+\e$BA*Br%a%=%C%I!#\e(B
+
+@item n
+\e$B$I$3$+$i$NA*Br$+!#\e(B
+
+@item z
+\e$B30ItA*Br%a%=%C%I$,;H$o$l$F$$$k>l9g!"\e(B@samp{<%s:%n>} \e$B$HF1$8J8;zNs!#\e(B
+
+@item P
+\e$B%H%T%C%/\e(B (@pxref{Group Topics}) \e$B$N%l%Y%k$K1~$8$?;z2<$2!#\e(B
+
+@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$B$I$N%l%Y%k$^$G%0%k!<%WL>$rA4It;D$9$+$r<($7$^$9!#%G%U%)%k%H$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.emacs.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
+
+@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
+@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$J%M%$%F%#%V%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{Formatting
+Variables}) \e$B$r@_Dj$9$k$3$H$GJQ99$G$-$^$9!#$3$$$D$O;XDjJ8;z$r$"$s\e(B
+\e$B$^$j$?$/$5$sCN$C$F$^$;$s!#\e(B
+
+@table @samp
+@item S
+\e$B%M%$%F%#%V$N%K%e!<%9%5!<%P!#\e(B
+@item M
+\e$B%M%$%F%#%V$NA*Br%a%=%C%I!#\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 @var{(form . face)} \e$B$N$h$&$J$b\e(B
+\e$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$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
+
+@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))))
+
+(setq gnus-group-highlight
+      '(((> unread 200) . my-group-face-1)
+       ((and (< level 3) (zerop unread)) . my-group-face-2)
+       ((< level 3) . my-group-face-3)
+       ((zerop unread) . my-group-face-4)
+       (t . my-group-face-5)))
+@end lisp
+
+@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
+
+
+@table @code
+@item group
+\e$B%0%k!<%WL>!#\e(B
+@item unread
+\e$B$=$N%0%k!<%W$NL$FI5-;v$N?t!#\e(B
+@item method
+\e$BA*Br%a%=%C%I!#\e(B
+@item mailp
+\e$B$=$N%0%k!<%W$,%a!<%k$N%0%k!<%W$+$I$&$+!#\e(B
+@item level
+\e$B$=$N%0%k!<%W$N%l%Y%k!#\e(B
+@item score
+\e$B$=$N%0%k!<%W$N%9%3%"!#\e(B
+@item ticked
+\e$B$=$N%0%k!<%WCf$N0u$NIU$$$?5-;v$N?t!#\e(B
+@item total
+\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 
+@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
+
+@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%G%U%)%k%H$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%W%l%U%#%C%/%9$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
+
+@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
+
+@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
+
+@item N
+@kindex N (Group)
+@findex gnus-group-next-group
+\e$B<!$N%0%k!<%W$K0\F0$7$^$9\e(B (@code{gnus-group-next-group})\e$B!#\e(B
+
+@item P
+@kindex P (Group)
+@findex gnus-group-prev-group
+\e$B0l$DA0$N%0%k!<%W$K0\F0$7$^$9\e(B (@code{gnus-group-prev-group})\e$B!#\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
+
+@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
+@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
+
+@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
+
+@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
+
+@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
+@end table
+
+@vindex gnus-group-goto-unread
+@code{gnus-group-goto-unread} \e$B$,\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!#%G%U%)%k%H$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
+@cindex group selection
+
+@table @kbd
+
+@item SPACE
+@kindex SPACE (Group)
+@findex gnus-group-read-group
+\e$B8=:_$N%0%k!<%W$rA*Br$7!"%5%^%j%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$N%3%^%s%I$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%W%l%U%#%C%/\e(B
+\e$B%9$rM?$($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$B$"$l$P\e(B gnus \e$B$O8E$$J}$+$i\e(B @var{N} \e$B8D$N5-;v$r<hF@$7$^$9!#\e(B
+
+@item RET
+@kindex RET (Group)
+@findex gnus-group-select-group
+\e$B8=:_$N%0%k!<%W$rA*Br$7!"%5%^%j%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
+
+@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$^$?!"%W%l%U%#%C%/%9$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$O%5%^\e(B
+\e$B%j%P%C%U%!$r:n$m$&$H$5$($7$^$;$s!#$3$l$O%5%^%j%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
+
+@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
+
+@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
+
+@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\e(B \e$B%G%U%)%k%H$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
+
+@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
+
+@table @code
+
+@item nil
+\e$B%0%k!<%W$KF~$C$?$H$-$K$I$N5-;v$bA*Br$7$J$$!#$?$@%5%^%j%P%C%U%!$r\e(B
+\e$BI=<($9$k$@$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 
+@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
+
+
+@node Subscription Commands
+@section \e$B9XFI@)8f%3%^%s%I\e(B
+@cindex subscription
+
+@table @kbd
+
+@item S t
+@itemx u
+@kindex S t (Group)
+@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
+
+@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
+
+@item S k
+@itemx C-k
+@kindex S k (Group)
+@kindex C-k (Group)
+@findex gnus-group-kill-group
+@c @icon{gnus-group-kill-group}
+\e$B8=:_$N%0%k!<%W$r\e(B kill \e$B$7$^$9\e(B (@code{gnus-group-kill-group})\e$B!#\e(B
+
+@item S y
+@itemx C-y
+@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
+
+@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
+
+@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
+
+@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
+
+@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%8HV9f$,$J$$L$9XFI%0%k!<%W$rA4$F\e(B kill \e$B$7$^$9!#\e(B
+
+@end table
+
+@pxref{Group Levels} \e$B$b;2>H$7$F$/$/$@$5$$!#\e(B
+
+
+@node Group Data
+@section \e$B%0%k!<%W%G!<%?\e(B
+
+@table @kbd
+
+@item c
+@kindex c (Group)
+@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
+
+@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
+
+@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
+
+@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$F%M%$%F%#%V%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$O9XFIEY\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$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
+
+@table @kbd
+
+@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
+
+@end table
+
+@vindex gnus-level-killed
+@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%G%U%)\e(B
+\e$B%k%H$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%G%U%)%k%H$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%G%U%)\e(B
+\e$B%k%H$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%G%U%)%k%H$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
+
+@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%G%U%)%k%H\e(B
+\e$B$O\e(B 3\e$B!K$H\e(B @code{gnus-level-default-unsubscribed}\e$B!J%G%U%)%k%H$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#2$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
+
+@vindex gnus-group-default-list-level
+\e$B%G%U%)%k%H$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
+
+@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%G%U%)%k%H$G\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
+
+@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
+
+
+@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
+
+@node Group Score
+@section \e$B%0%k!<%W$N%9%3%"\e(B
+@cindex group score
+@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$B%0%k!<%W%9%3%"\e(B @dfn{group score} \e$B$O$=$N$?$a$N$b$N$G$9!#$=$l$>$l$N%0%k!<%W\e(B
+\e$B$KBP$7$F%9%3%"$r;XDj$9$k$3$H$,$G$-$^$9!#$=$7$F%0%k!<%W%P%C%U%!$r$3$N%9%3%"\e(B
+\e$B$r4p$K%=!<%H$9$k$3$H$,$G$-$^$9!#$"$k$$$O!"%9%3%"=g$G%=!<%H$7$F$=$N8e%l%Y%k\e(B
+\e$B$G%=!<%H$9$k$3$H$b$G$-$^$9!#!J%l%Y%k$H%9%3%"$r$R$H$^$H$a$K$7$F!"%0%k!<%W$N\e(B
+\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
+\e$B$,\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
+
+@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$&!#%5%^%j%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
+
+
+@node Marking Groups
+@section \e$B%0%k!<%W$X$N%^!<%/\e(B
+@cindex marking groups
+
+\e$B$b$7$$$/$D$+$N%0%k!<%W$KBP$7$F2?$i$+$NL?Na$r<B9T$7$?$$>l9g$G!"$=$l$i$,%0%k!<\e(B
+\e$B%W%P%C%U%!$KO"B3$7$F$"$k>l9g$K$O!"DL>oDL$jL?Na$KBP$7$F?t;z%W%l%U%#%C%/%9$r\e(B
+\e$BM?$($k$@$1$G$9!#$=$&$9$l$P$[$H$s$I$N%0%k!<%W%3%^%s%I$O!"$3$l$i$N%0%k!<%W$K\e(B
+\e$BBP$7$F$"$J$?$NL?Na$K=>$$$^$9!#\e(B
+
+\e$B$7$+$7$=$l$i$N%0%k!<%W$,=gHV$KJB$s$G$$$J$$>l9g$K$*$$$F$b!"$$$/$D$+$N%0%k!<\e(B
+\e$B%W$KBP$7$FL?Na$r<B9T$9$k$3$H$,$G$-$^$9!#C1$K;O$a$K%W%m%;%9%^!<%/$G%0%k!<%W\e(B
+\e$B$K%^!<%/$r$D$1$F$*$-!"$=$7$FL?Na$r<B9T$9$k$@$1$G$9!#\e(B
+
+@table @kbd
+
+@item #
+@kindex # (Group)
+@itemx M m
+@kindex M m (Group)
+@findex gnus-group-mark-group
+\e$B8=:_$N%0%k!<%W$K%^!<%/$r$D$1$k\e(B (@code{gnus-group-mark-group})\e$B!#\e(B
+
+@item M-#
+@kindex M-# (Group)
+@itemx M u
+@kindex M u (Group)
+@findex gnus-group-unmark-group
+\e$B8=:_$N%0%k!<%W$+$i%^!<%/$r:o=|$9$k\e(B (@code{gnus-group-unmark-group})\e$B!#\e(B
+
+@item M U
+@kindex M U (Group)
+@findex gnus-group-unmark-all-groups
+\e$BA4$F$N%0%k!<%W$+$i%^!<%/$r:o=|$9$k\e(B (@code{gnus-group-unmark-all-groups})\e$B!#\e(B
+
+@item M w
+@kindex M w (Group)
+@findex gnus-group-mark-region
+\e$B%]%$%s%H$H%^!<%/$K4V$NA4$F$N%0%k!<%W$K%^!<%/$r$D$1$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$K%^!<%/$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=$K%^%C%A$9$kA4$F$N%0%k!<%W$K%^!<%/$r$D$1$k\e(B
+(@code{gnus-group-mark-regexp})\e$B!#\e(B
+@end table
+
+@pxref{Process/Prefix} \e$B$b;2>H$7$F$/$@$5$$!#\e(B
+
+@findex gnus-group-universal-argument
+\e$B%W%m%;%9%^!<%/$,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$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$N4JC1$K:n@.$9$kL?Na$r>R2p$7$^$9!#$3$l$i$N\e(B
+\e$BL?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
+
+@table @kbd
+
+@item G m
+@kindex G m (Group)
+@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$H%a%=%C%I$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 
+@pxref{Browse Foreign Server} \e$B$r;2>H$7$F$/$@$5$$!#\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
+
+@item G c
+@kindex G c (Group)
+@cindex customizing
+@findex gnus-group-customize
+\e$B%0%k!<%W%Q%i%a!<%?$r%+%9%?%^%$%:$9$k\e(B (@code{gnus-group-customize})\e$B!#\e(B
+
+@item G e
+@kindex G e (Group)
+@findex gnus-group-edit-group-method
+@cindex renaming groups
+\e$B8=:_$N%0%k!<%W$NA*Br%a%=%C%I$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
+
+@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
+
+@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
+
+@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%HF~NO$7$^$9\e(B (@code{gnus-group-make-directory-group})\e$B!#\e(B
+
+@item G h
+@kindex G h (Group)
+@cindex help group
+@findex gnus-group-make-help-group
+
+Gnus \e$B%X%k%W%0%k!<%W$r:n@.$7$^$9\e(B (@code{gnus-group-make-help-group})\e$B!#\e(B
+
+@item G a
+@kindex G a (Group)
+@cindex (ding) archive
+@cindex archive group
+@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!#%G%U%)%k%H$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!"%W%l%U%#%C%/%9$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
+
+@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$K%^%C%A$9$k@55,I=8=$H!"%X%C%@$H%^%C%A$9$kJ8;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}\e$B!#\e(B
+
+@item G D
+@kindex G D (Group)
+@findex gnus-group-enter-directory
+@cindex nneething
+\e$BG$0U$N%G%#%l%/%H%j$r\e(B @code{nneething} \e$B%P%C%/%(%s%I%K%e!<%:%0%k!<%W$G$"$k\e(B
+\e$B$+$N$h$&$KFI$_9~$_$^$9\e(B (@code{gnus-group-enter-directory})\e$B!#\e(B
+@xref{Anything Groups}.
+
+@item G f
+@kindex G f (Group)
+@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%W%l%U%#%C%/%9$rM?$($?>l\e(B
+\e$B9g!"%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{forward} \e$B$G$9!#%W%l%U%#%C%/%9\e(B
+\e$B$J$7$G$3$N%3%^%s%I$r<B9T$9$k$H!"\e(Bgnus \e$B$O%U%!%$%k%?%$%W$r?dB,$7$^$9!#\e(B
+@xref{Document Groups}\e$B!#\e(B
+
+@item G w
+@kindex G w (Group)
+@findex gnus-group-make-web-group
+@cindex DejaNews
+@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%W%l%U%#%C%/%9$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
+@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$&$J%^%C%A$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
+
+@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!#%W\e(B
+\e$B%l%U%#%C%/%9$,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!#%W%l%U%#%C%/%9$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
+
+@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}.
+
+@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%;%9%^!<%/!&%W%l%U%#%C%/%9%k!<\e(B
+\e$B%k$K=>$$$^$9!#\e(B
+
+@end table
+
+\e$B$5$^$6$^$JA*Br%a%=%C%I$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
+
+@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
+\e$BF0;~$K!"$3$N?t$+$=$l$h$j$b>.$5$$%l%Y%k$N30It%0%k!<%W$rA4$F%A%'%C%/$7$^$9!#\e(B
+\e$B$3$l$OFC$K0c$C$?\e(B @sc{nntp} \e$B%5!<%P$+$i$?$/$5$s$N%0%k!<%W$r9XFI$7$F$$$k>l\e(B
+\e$B9g$J$I!"$7$P$i$/;~4V$,$+$+$k$+$b$7$l$^$;$s!#\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%m!<%+%k$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
+
+@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
+@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
+
+@table @code
+@item to-address
+@cindex to-address
+\e$B%U%)%m!<%"%C%W$H%K%e!<%:$X$NEj9F$r$9$k$H$-$K;HMQ$5$l$k%"%I%l%9!#\e(B
+
+@example
+(to-address .  "some@@where.com")
+@end example
+
+\e$B$3$l$O<g$K!"%/%m!<%:%I$J%a!<%j%s%0%j%9%H$rI=$o$9%a!<%k%0%k!<%W$K$*$$$FJXMx\e(B
+\e$B$J$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\e(B
+\e$B$O$:!"$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$"$J\e(B
+\e$B$?$N%U%)%m!<%"%C%W5-;v$r#2DL<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
+\e$B>e$K$"$C$?$H$7$^$7$g$&!#$3$l$OK\Ev$N%K%e!<%:%0%k!<%W$G$9$,!"%5!<%P$O%a!<\e(B
+\e$B%k%K%e!<%:%2!<%H%&%'%$$rDL$7$F5-;v$r<u$1IU$1$^$9!#$D$^$j$3$N%0%k!<%W$KBP\e(B
+\e$B$7$FD>@\Ej9F$9$k$3$H$OIT2DG=$G!"Be$o$j$K$=$N%a!<%j%s%0%j%9%H$K%a!<%k$rAw\e(B
+\e$B?.$7$J$1$l$P$J$j$^$;$s!#\e(B
+
+@item to-list
+@cindex to-list
+\e$B$=$N%0%k!<%W$G\e(B @kbd{a} \e$B$r2!$7$?$H$-$K;HMQ$5$l$k%"%I%l%9!#\e(B
+
+@example
+(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!<%:\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$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
+@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
+\e$B$=$N%0%k!<%W$O%0%k!<%W%P%C%U%!$K$*$$$F!"L$FI5-;v$,$"$k$+$I$&$+$K4X$o$i$:!"\e(B
+\e$B>o$KI=<($5$l$^$9!#\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
+
+@item to-group
+@cindex to-group
+@code{(to-group . "some.group.name")} \e$B$H$$$&MWAG$O!"$=$N%0%k!<%W$X$NEj9F\e(B
+\e$B$OA4$F\e(B @code{some.group.name} \e$B$KAw$i$l$k!"$H$$$&0UL#$G$9!#\e(B
+
+@item newsgroup
+@cindex newsgroup
+\e$B%0%k!<%W%Q%i%a!<%?%j%9%H$K\e(B @code{(newsgroup . t)} \e$B$,$"$l$P!"\e(Bgnus \e$B$OA4$F$N\e(B
+\e$B%l%9%]%s%9$r%K%e!<%:5-;v$KBP$9$k%l%9%]%s%9$G$"$k$+$N$h$&$K07$$$^$9!#$3$l$O\e(B
+\e$B<B:]$K$O%K%e!<%:%0%k!<%W$N%_%i!<$G$"$k%a!<%k%0%k!<%W$KBP$7$FM-8z$G$9!#\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%G%U%)%k%H%k!<%k$h$j$bM%@h\e(B
+\e$B$5$l$^$9\e(B (@pxref{Archived Messages})\e$B!#\e(B
+
+@item auto-expire
+@cindex auto-expire
+\e$B%0%k!<%W%Q%i%a!<%?$K\e(B @code{(auto-expire . t)} \e$B$N$h$&$JMWAG$,$"$l$P!"A4$F\e(B
+\e$B$N4{FI5-;v$O%(%/%9%Q%$%"$5$l$k$h$&$K%^!<%/$5$l$^$9!#B>$NJ}K!$K$D$$$F$O\e(B
+@pxref{Expiring Mail} \e$B$r;2>H$7$F$/$@$5$$!#\e(B
+
+@item total-expire
+@cindex total-expire
+\e$B%0%k!<%W%Q%i%a!<%?$K\e(B @code{(total-expire . t)} \e$B$N$h$&$JMWAG$,$"$l$P!"4{\e(B
+\e$BFI5-;v$O!"%(%/%9%Q%$%"$N%^!<%/$,$D$$$F$$$J$/$H$bA4$F%(%/%9%Q%$%"=hM}$r;\\e(B
+\e$B$5$l$^$9!#Cm0U$7$F;HMQ$7$F$/$@$5$$!#L$FI5-;v!"0uIU$-5-;v!"J]N15-;v$O%(%/\e(B
+\e$B%9%Q%$%"$5$l$^$;$s!#\e(B
+
+@item expiry-wait
+@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$N\e(B
+\e$BCM$O5-;v$r%(%/%9%Q%$%"$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$B%9%Q%$%"$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
+
+@item score-file
+@cindex score file group parameter
+@code{(score-file . "file")} \e$B$N$h$&$JMWAG$O!"\e(B@file{file} \e$B$r8=:_$N%0%k!<%W\e(B
+\e$B$KE,MQ$5$l$k%9%3%"%U%!%$%k$K$7$^$9!#E,MQ$5$l$k%9%3%"%(%s%H%j$OA4$F$3$N%U%!\e(B
+\e$B%$%k$KF~$j$^$9!#\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,MQ%U%!%$%k$K$7$^$9!#A4$F$NE,MQ%9%3%"%(%s%H%j$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
+
+@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
+
+@table @code
+@item all
+\e$BL$FI!"4{FI5-;v$NN>J}$rA4$FI=<($7$^$9!#\e(B
+
+@item default
+\e$B%G%U%)%k%H$NI=<(5-;v$rI=<($7$^$9!#$3$l$ODL>o$OL$FI5-;v$H0uIU$-5-;v$G$9!#\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
+
+@item @var{(variable 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$=$N%5%^%j%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$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
+
+@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
+
+
+@node Listing Groups
+@section \e$B%0%k!<%W$N0lMwI=<(\e(B
+@cindex group listing
+
+\e$B$3$l$i$N%3%^%s%I$O!"MxMQ$G$-$k%0%k!<%W$r$$$m$$$m$K@Z$jJ,$1$FI=<($7$^$9!#\e(B
+
+@table @kbd
+
+@item l
+@itemx A s
+@kindex A s (Group)
+@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%W%l%U%#%C%/%9$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!#%G%U%)%k%H$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
+
+@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%W%l%U%#%C%/%9$r;HMQ$9$k$H!"$3$N\e(B
+\e$B%3%^%s%I$O0z?t$N?t$+$=$l$h$j$b>.$5$$%l%Y%k$N%0%k!<%W$N$_$rI=<($7$^$9!#%G%U%)\e(B
+\e$B%k%H$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$N%0%k!<\e(B
+\e$B%W$N$_!K$,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!#%W%l%U%#%C%/%9$rM?$($k$H!"L$FI5-;v$N$J$$\e(B
+\e$B%0%k!<%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!#%W\e(B
+\e$B%l%U%#%C%/%90z?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
+
+@item A z
+@kindex A z (Group)
+@findex gnus-group-list-zombies
+\e$BA4$F$N%>%s%S%0%k!<%W$rI=<($7$^$9\e(B (@code{gnus-group-list-zombies})\e$B!#\e(B
+
+@item A m
+@kindex A m (Group)
+@findex gnus-group-list-matching
+\e$B@55,I=8=$K%^%C%A$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
+
+@item A M
+@kindex A M (Group)
+@findex gnus-group-list-all-matching
+\e$B@55,I=8=$K%^%C%A$9$k%0%k!<%W$rI=<($9$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!"%^%C%A$5$;$?$$ItJ,$r\e(B @samp{.} \e$B$H$7$F\e(B
+\e$BA4$F$N%^%C%A$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
+
+@item A a
+@kindex A a (Group)
+@findex gnus-group-apropos
+\e$B@55,I=8=$K%^%C%A$9$kL>A0$r;}$D%0%k!<%W$rA4$FI=<($9$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=$K%^%C%A$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
+
+@end table
+
+@vindex gnus-permanently-visible-groups
+@cindex visible group parameter
+@code{gnus-permanently-visible-groups} \e$B@55,I=8=$K%^%C%A$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
+\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!#%G%U%)%k%H$O\e(B
+@code{t} \e$B$G$9!#\e(B
+
+
+@node Sorting Groups
+@section \e$B%0%k!<%W$N%=!<%H\e(B
+@cindex sorting groups
+
+@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
+
+@table @code
+
+@item gnus-group-sort-by-alphabet
+@findex gnus-group-sort-by-alphabet
+\e$B%0%k!<%WL>$G%"%k%U%!%Y%C%H=g$KJB$YBX$($^$9!#$3$l$,=i4|@_Dj$G$9!#\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
+
+@item gnus-group-sort-by-level
+@findex gnus-group-sort-by-level
+\e$B%0%k!<%W%l%Y%k$GJB$YBX$($^$9!#\e(B
+
+@item gnus-group-sort-by-score
+@findex gnus-group-sort-by-score
+\e$B%0%k!<%W$N%9%3%"$GJB$YBX$($^$9!#\e(B@xref{Group Score}.
+
+@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}.
+
+@item gnus-group-sort-by-unread
+@findex gnus-group-sort-by-unread
+\e$BL$FI5-;v$N?t$GJB$YBX$($^$9!#\e(B
+
+@item gnus-group-sort-by-method
+@findex gnus-group-sort-by-method
+\e$BA*Br%a%=%C%I$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
+
+
+\e$B$"$k<o$NJB$YBX$(MQ$K$O!"D>@\JB$YBX$($kL?Na$b$$$/$D$+$"$j$^$9!#\e(B
+
+@table @kbd
+@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
+
+@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
+
+@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
+
+@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}.
+
+@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}.
+
+@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
+
+@end table
+
+\e$B%W%l%U%#%C%/%9$rM?$($?$H$-$O!"$3$l$i$NL?Na$OA4$F5U=g$KJB$YBX$($^$9!#\e(B
+
+\e$B$^$?!"%0%k!<%W$N0lIt$rJB$YBX$($k$3$H$b$G$-$^$9!#\e(B
+
+@table @kbd
+@item G P a
+@kindex G P a (Group)
+@findex gnus-group-sort-selected-groups-by-alphabet
+\e$B%0%k!<%W%P%C%U%!Fb$N%W%m%;%9%^!<%/!&%W%l%U%#%C%/%9;XDj$5$l$?%0%k!<%W$r!"%0\e(B
+\e$B%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
+
+@item G P u
+@kindex G P u (Group)
+@findex gnus-group-sort-selected-groups-by-unread
+\e$B%0%k!<%W%P%C%U%!Fb$N%W%m%;%9%^!<%/!&%W%l%U%#%C%/%9;XDj$5$l$?%0%k!<%W$r!"L$\e(B
+\e$BFI5-;v$N?t$GJB$YBX$($^$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%P%C%U%!Fb$N%W%m%;%9%^!<%/!&%W%l%U%#%C%/%9;XDj$5$l$?%0%k!<%W$r!"%0\e(B
+\e$B%k!<%W%l%Y%k$GJB$YBX$($^$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%P%C%U%!Fb$N%W%m%;%9%^!<%/!&%W%l%U%#%C%/%9;XDj$5$l$?%0%k!<%W$r!"%0\e(B
+\e$B%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}.
+
+@item G P r
+@kindex G P r (Group)
+@findex gnus-group-sort-selected-groups-by-rank
+\e$B%0%k!<%W%P%C%U%!Fb$N%W%m%;%9%^!<%/!&%W%l%U%#%C%/%9;XDj$5$l$?%0%k!<%W$r!"%0\e(B
+\e$B%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}.
+
+@item G P m
+@kindex G P m (Group)
+@findex gnus-group-sort-selected-groups-by-method
+\e$B%0%k!<%W%P%C%U%!Fb$N%W%m%;%9%^!<%/!&%W%l%U%#%C%/%9;XDj$5$l$?%0%k!<%W$r!"%P%C\e(B
+\e$B%/%(%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
+
+@end table
+
+
+
+@node Group Maintenance
+@section \e$B%0%k!<%W$N4IM}\e(B
+@cindex bogus groups
+
+@table @kbd
+@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
+
+@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!#%W%l%U%#%C%/%9$rM?$($k$H!"%5!<%P$K\e(B
+\e$B?75,%0%k!<%W$rLd$$9g$o$;$k$N$K\e(B @code{ask-server} \e$B$NJ}K!$r;HMQ$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
+
+@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
+
+@end table
+
+
+@node Browse Foreign Server
+@section \e$B30It%5!<%P$N1\Mw\e(B
+@cindex foreign servers
+@cindex browsing servers
+
+@table @kbd
+@item B
+@kindex B (Group)
+@findex gnus-group-browse-foreign-server
+\e$BA*Br%a%=%C%I$H%5!<%PL>$rJ9$+$l$^$9!#\e(BGnus \e$B$O$3$N%5!<%P$K@\B3$7!"$=$3$K$"$k\e(B
+\e$B%0%k!<%W$r1\Mw$7$h$&$H$7$^$9\e(B (@code{gnus-group-browse-foreign-server})\e$B!#\e(B
+@end table
+
+@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$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
+@kindex n (Browse)
+@findex gnus-group-next-group
+\e$B<!$N%0%k!<%W$K0\F0$7$^$9\e(B (@code{gnus-group-next-group})\e$B!#\e(B
+
+@item p
+@kindex p (Browse)
+@findex gnus-group-prev-group
+\e$B0l$DA0$N%0%k!<%W$K0\F0$7$^$9\e(B (@code{gnus-group-prev-group})\e$B!#\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
+
+@item RET
+@kindex RET (Browse)
+@findex gnus-browse-select-group
+\e$B8=:_$N%0%k!<%W$KF~$j$^$9\e(B (@code{gnus-browse-select-group})\e$B!#\e(B
+
+@item u
+@kindex u (Browse)
+@findex gnus-browse-unsubscribe-current-group
+\e$B8=:_$N%0%k!<%W$rHs9XFI$K$9$k!"$D$^$j$3$N>l9g$O9XFI$9$k$3$H$K$J$k$N$@$1$l\e(B
+\e$B$I\e(B (@code{gnus-browse-unsubscribe-current-group})\e$B!#\e(B
+
+@item l
+@itemx q
+@kindex q (Browse)
+@kindex l (Browse)
+@findex gnus-browse-exit
+\e$B1\Mw%b!<%I\e(B (browse mode) \e$B$r=*N;$7$^$9\e(B (@code{gnus-browse-exit})\e$B!#\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
+@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
+
+@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
+
+@item q
+@kindex q (Group)
+@findex gnus-group-exit
+@c @icon{gnus-group-exit}
+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
+@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
+
+@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
+
+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
+@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$,#2$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
+
+@iftex
+@iflatex
+\gnusfigure{Group Topics}{400}{
+\put(75,50){\epsfig{figure=tmp/group-topic.ps,height=9cm}}
+}
+@end iflatex
+@end iftex
+
+\e$B$3$l$,Nc$G$9!'\e(B
+
+@example
+Gnus
+  Emacs -- \e$B$3$$$D$O$9$2!<$<\e(B!
+     3: comp.emacs
+     2: alt.religion.emacs
+    \e$B$($C$A$J\e(B Emacs
+     452: alt.sex.emacs
+       0: comp.talk.emacs.recovery
+  \e$B$=$NB>\e(B
+     8: comp.binaries.fractals
+    13: comp.sources.unix
+@end example
+
+@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$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$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
+
+@lisp
+(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
+@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
+@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
+
+@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
+
+@table @samp
+@item i
+\e$B;z2<$2!#\e(B
+@item n
+\e$B%H%T%C%/L>!#\e(B
+@item v
+\e$B8+$($k$+$I$&$+!#\e(B
+@item l
+\e$B%l%Y%k!#\e(B
+@item g
+\e$B%H%T%C%/Cf$N%0%k!<%W$N?t!#\e(B
+@item a
+\e$B%H%T%C%/Cf$NL$FI5-;v$N?t!#\e(B
+@item A
+\e$B%H%T%C%/$HA4$F$NI{%H%T%C%/$NL$FI5-;v$N?t!#\e(B
+@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!#%G%U%)%k%H\e(B
+\e$B$O\e(B 2 \e$B$G$9!#\e(B
+
+@vindex gnus-topic-mode-hook
+@code{gnus-topic-mode-hook} \e$B$O%H%T%C%/%^%$%J!<%b!<%I%P%C%U%!$G8F$S=P$5$l\e(B
+\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!#%G%U%)%k%H$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
+
+@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
+
+@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
+
+@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
+
+@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!#$3$N%3%^%s%I$O%W%m%;%9%^!<%/!&\e(B
+\e$B%W%l%U%#%C%/%9%k!<%k$K=>$$$^$9\e(B (@pxref{Process/Prefix})\e$B!#\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 
+
+@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
+
+@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
+
+@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
+
+@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
+
+@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
+
+@item T TAB
+@kindex T TAB (Topic)
+@findex gnus-topic-indent
+\e$B8=:_$N%H%T%C%/$N!X;z2<$2!Y$r9T$$!"$=$NA0$N%H%T%C%/$NI{%H%T%C%/$K$7$^$9\e(B 
+(@code{gnus-topic-indent})\e$B!#%W%l%U%#%C%/%9$rM?$($k$H!"H?BP$K$=$N%H%T%C%/$N\e(B
+\e$B;z2<$2$rLa$7$^$9!#\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%T%C%/Fb$K$"$C$?%0%k!<%W$bA4$F!"\e(B
+\e$B%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
+
+@item T r
+@kindex T r (Topic)
+@findex gnus-topic-rename
+\e$B%H%T%C%/$NL>A0$rJQ99$9$k\e(B (@code{gnus-topic-rename})\e$B!#\e(B
+
+@item T DEL
+@kindex T DEL (Topic)
+@findex gnus-topic-delete
+\e$B6u$N%H%T%C%/$r:o=|$9$k\e(B (@code{gnus-topic-delete})\e$B!#\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
+
+@item G p
+@kindex G p (Topic)
+@findex gnus-topic-edit-parameters
+@cindex group parameters
+@cindex topic parameters
+@cindex parameters
+\e$B%H%T%C%/%Q%i%a!<%?$r=$@5$7$^$9\e(B (@code{gnus-topic-edit-parameters})\e$B!#\e(B
+@xref{Topic Parameters}.
+
+@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
+
+
+@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
+
+@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
+
+@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
+
+@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}.
+
+@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}.
+
+@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
+
+@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
+
+
+@node Topic Topology
+@subsection \e$B%H%T%C%/$N0LAj9=B$\e(B
+@cindex topic topology
+@cindex topology
+
+\e$B$=$l$G$O!"%0%k!<%W%P%C%U%!$NNc$r8+$F$$$-$^$7$g$&!#\e(B
+
+@example
+Gnus
+  Emacs -- \e$B$3$$$D$O$9$2!<$<\e(B!
+     3: comp.emacs
+     2: alt.religion.emacs
+    \e$B$($C$A$J\e(B Emacs
+     452: alt.sex.emacs
+       0: comp.talk.emacs.recovery
+  \e$B$=$NB>\e(B
+     8: comp.binaries.fractals
+    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#2$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
+
+@lisp
+(("Gnus" visible)
+ (("Emacs -- \e$B$3$$$D$O$9$2!<$<\e(B!" visible)
+  (("\e$B$($C$A$J\e(B Emacs" visible)))
+ (("\e$B$=$NB>\e(B" visible)))
+@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
+
+
+@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%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%/$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
+
+@example
+Gnus
+  Emacs
+     3: comp.emacs
+     2: alt.religion.emacs
+   452: alt.sex.emacs
+    \e$BB)H4$-\e(B
+     452: alt.sex.emacs
+       0: comp.talk.emacs.recovery
+  \e$B$=$NB>\e(B
+     8: comp.binaries.fractals
+    13: comp.sources.unix
+   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
+
+
+@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
+@end menu
+
+@table @kbd
+
+@item ^
+@kindex ^ (Group)
+@findex gnus-group-enter-server-mode
+\e$B%5!<%P%P%C%U%!%b!<%I$KF~$k\e(B (@code{gnus-group-enter-server-mode})\e$B!#\e(B
+@xref{The Server Buffer}\e$B!#\e(B
+
+@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>$,%G%U%)%k%H$H$7$F;HMQ$5$l$^$9!#\e(B
+
+@item m
+@kindex m (Group)
+@findex gnus-group-mail
+\e$B%a!<%k$r$I$3$+$KAw$k\e(B (@code{gnus-group-mail})\e$B!#\e(B
+
+@end table
+
+\e$B0J2<$O%0%k!<%W%P%C%U%!$N$?$a$NJQ?t$G$9!'\e(B
+
+@table @code
+
+@item gnus-group-mode-hook
+@vindex gnus-group-mode-hook
+\e$B%0%k!<%W%P%C%U%!$,:n@.$5$l$?;~$K8F$S=P$5$l$^$9!#\e(B
+
+@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
+
+@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
+
+@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
+
+@end table
+
+
+@node Scanning New Messages
+@subsection \e$B?7Ce%a%C%;!<%8$rC5$9\e(B
+@cindex new messages
+@cindex scanning new news
+
+@table @kbd
+
+@item g
+@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
+
+@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!#%G%U%)%k%H$O\e(B @code{t} \e$B$G$9!#\e(B
+
+@findex gnus-activate-all-groups
+@cindex activating groups
+@item C-c M-g
+@kindex C-c M-g (Group)
+\e$BL5>r7o$KA4$F$N%0%k!<%W$r5/F0$7$^$9\e(B (@code{gnus-activate-all-groups})\e$B!#\e(B
+
+@item R
+@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
+
+@end table
+
+@vindex gnus-get-new-news-hook
+@code{gnus-get-new-news-hook} \e$B$O?7Ce%K%e!<%:$r%A%'%C%/$9$kD>A0$K\e(B
+\e$B<B9T$5$l$^$9!#\e(B
+
+@vindex gnus-after-getting-new-news-hook
+@code{gnus-after-getting-new-news-hook} \e$B?7Ce%K%e!<%:$r%A%'%C%/$7\e(B
+\e$B$?8e$K<B9T$5$l$^$9!#\e(B
+
+
+@node Group Information
+@subsection \e$B%0%k!<%W>pJs\e(B
+@cindex group information
+@cindex information on groups
+
+@table @kbd
+
+
+@item H f
+@kindex H f (Group)
+@findex gnus-group-fetch-faq
+@vindex gnus-group-faq-directory
+@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
+
+@item H d
+@itemx C-c C-d
+@c @icon{gnus-group-describe-group}
+@kindex H d (Group)
+@kindex C-c C-d (Group)
+@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
+
+@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
+
+@item H v
+@itemx V
+@kindex V (Group)
+@kindex H v (Group)
+@cindex version
+@findex gnus-version
+\e$B8=:_$N\e(B gnus \e$B$N%P!<%8%g%sHV9f$rI=<($7$^$9\e(B (@code{gnus-version})\e$B!#\e(B
+
+@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
+
+@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
+
+@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
+
+@lisp
+(add-hook 'gnus-select-group-hook 'gnus-group-set-timestamp)
+@end lisp
+
+\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
+
+@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
+
+@example
+*        0: mail.ding                                19961002T012943
+         0: custom                                   19961002T012713
+@end example
+
+\e$B8+$FJ,$+$k$H$*$j!"F|IU$O%3%s%Q%/%H$J\e(B ISO 8601 \e$B7A<0$GI=<($5$l$^$9!#\e(B
+\e$B$3$l$G$O$A$g$C$H$"$s$^$j$J$N$G!"0J2<$N$h$&$J46$8$K$9$k$HF|IU$@$1\e(B
+\e$B$rI=<($G$-$^$9!#\e(B
+
+@lisp
+(setq gnus-group-line-format
+      "%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
+
+@table @kbd
+
+@item r
+@kindex r (Group)
+@findex gnus-group-read-init-file
+@vindex gnus-init-file
+@cindex reading init file
+\e$B=i4|2=%U%!%$%k$N:FFI$_9~$_$r9T$&\e(B (@code{gnus-init-file}\e$B!"$3$N%G\e(B
+\e$B%U%)%k%H$O\e(B @file{~/.gnus}) (@code{gnus-group-read-init-file})\e$B!#\e(B
+
+@item s
+@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
+
+@c @item Z
+@c @kindex Z (Group)
+@c @findex gnus-group-clear-dribble
+@c \e$B%I%j%V%k%U%!%$%k$r%/%j%"$9$k\e(B
+@c (@code{gnus-group-clear-dribble})\e$B!#\e(B
+
+@end table
+
+
+@node The Summary Buffer
+@chapter \e$B35N,%P%C%U%!\e(B
+@cindex summary buffer
+
+\e$B35N,%P%C%U%!\e(B (summary buffer) \e$B$G$O$=$l$>$l$N5-;v$,0l9T$GI=<($5$l$^$9!#$=\e(B
+\e$B$NCf$rF0$-2s$j!"5-;v$rFI$_!"Ej9F$7!"JVEz$r$9$k$3$H$,$G$-$^$9!#\e(B
+
+\e$B35N,%P%C%U%!$K0\$k0lHVIaDL$NJ}K!$O!"%0%k!<%W%P%C%U%!$G%0%k!<%W$rA*Br$9$k\e(B
+\e$B$3$H$G$9\e(B (@pxref{Selecting a Group})\e$B!#\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::   \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
+* 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%G%#%U%)%k%H$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
+@end menu
+
+
+@node Summary Buffer Format
+@section \e$B35N,%P%C%U%!$NMM<0\e(B
+@cindex summary buffer format
+
+@iftex
+@iflatex
+\gnusfigure{The Summary Buffer}{180}{
+\put(0,0){\epsfig{figure=tmp/summary.ps,width=7.5cm}}
+\put(445,0){\makebox(0,0)[br]{\epsfig{figure=tmp/summary-article.ps,width=7.5cm}}}
+}
+@end iflatex
+@end iftex
+
+@menu
+* Summary Buffer Lines::     \e$B35N,%P%C%U%!$,$I$N$h$&$K8+$($k$Y$-$+$r;XDj$G$-$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
+@findex mail-extract-address-components
+@findex gnus-extract-address-components
+@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$KDj5A\e(B
+\e$B$5$l$F$$$k4X?t$,#3$DB8:_$7$^$9!'\e(B@code{gnus-extract-address-components} \e$B$O\e(B
+\e$B%G%#%U%)%k%H$G$9$,!"$H$F$b4JC1$K3d$j@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$^$9\e(B
+\e$B$,!"CY$/$J$j$^$9!#%G%#%U%)%k%H$N4X?t$O\e(B 5% \e$B$N3d9g$G4V0c$C$FEz$($^$9!#$b$7$3\e(B
+\e$B$l$K2fK}$J$i$J$$$N$G$"$l$P!"B>$N4X?t$rBe$o$j$K;H$&$3$H$,$G$-$^$9!#\e(B
+
+@vindex gnus-summary-same-subject
+@code{gnus-summary-same-subject} \e$B$O:#FI$s$G$$$k5-;v$,!"$=$NA0$N5-;v$HF1\e(B
+\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!#%G%#%U%)%k%H$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%G%#%U%)%k%H$NJ8;zNs$O\e(B @samp{%U%R%z%I%(%[%4L: %-20,20n%]%) %s\n} \e$B$G$9!#\e(B
+
+\e$B0J2<$NMM<0;X<(J8;z$r;H$&$3$H$,$G$-$^$9\e(B:
+
+@table @samp
+@item N
+\e$B5-;v?t!#\e(B
+@item S
+\e$BI=Bj$NJ8;zNs!#\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
+(@code{gnus-summary-same-subject} \e$B$N%G%#%U%)%k%H$NCM$O\e(B @code{""}\e$B!#\e(B)
+@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
+@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
+@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
+@item L
+\e$B5-;v$N9T?t!#\e(B
+@item c
+\e$B5-;v$NJ8;z?t!#\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
+@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
+@item ]
+\e$BJD$83g8L!#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
+@item >
+\e$B$=$l$>$l$N%9%l%C%I$N%l%Y%k$KBP$7$F0l$D$N6uGr!#\e(B
+@item <
+\e$BFs==0z$/%9%l%C%I%l%Y%k$N6uGr!#\e(B
+@item U
+\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
+
+@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%G%#%U%)%k%H$N%l%Y%k$h$j$b>e$G$"$l$P\e(B @samp{+} \e$B$G!"%G%#%U%)\e(B
+\e$B%k%H$N%l%Y%k$h$j$b2<$G$"$l$P\e(B @samp{-} \e$B$G$9!#\e(B
+@code{gnus-summary-default-zcore}\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$^$;$s!#\e(B
+@item V
+\e$B%9%l%C%IA4BN$N%9%3%"!#\e(B
+@item x
+@code{Xref}.
+@item D
+@code{\e$BF|IU\e(B} (@code{Date})\e$B!#\e(B
+@item d
+@code{DD-MM}\e$BMM<0$K$h$k\e(B@code{\e$BF|IU\e(B}\e$B!#\e(B
+@item o
+@var{YYYYMMDD}@code{T}@var{HHMMSS}\e$BMM<0$K$h$k\e(B@code{\e$BF|IU\e(B}\e$B!#\e(B
+@item M
+@code{Message-ID}.
+@item r
+@code{References}.
+@item t
+\e$B8=:_$NI{%9%l%C%I$N5-;v$N?t!#$3$N;EMM$r;H$&$H35N,%P%C%U%!$N@8@.$,4vJ,CY$/\e(B
+\e$B$J$j$^$9!#\e(B
+@item e
+\e$B5-;v$K;R5-;v$,$"$k$H!"\e(B@samp{=} (@code{gnus-not-empty-thread-mark}) \e$B$,I=\e(B
+\e$B<($5$l$^$9!#\e(B
+@item P
+\e$B9T?t!#\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
+@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
+
+\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$B$3$N@)8B$O>-Mh$NHG$G$OL5$/$J$k$+$bCN$l$^$;$s!#\e(B
+
+
+@node Summary Buffer Mode Line
+@subsection \e$B35N,%P%C%U%!$N%b!<%I9T\e(B
+
+@vindex gnus-summary-mode-line-format
+\e$B35N,$N%b!<%I9T$NMM<0$bJQ99$9$k$3$H$,$G$-$^$9!#\e(B
+@code{gnus-summary-mode-line-format} \e$B$r2?$G$b9%$-$J$b$N$KJQ99$7$F$/$@$5\e(B
+\e$B$$!#%G%#%U%)%k%H$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
+
+@table @samp
+@item G
+\e$B%0%k!<%WL>!#\e(B
+@item p
+\e$B@\F,8l$r<h$j=|$$$?L>A0!#\e(B
+@item A
+\e$B8=:_$N5-;vHV9f!#\e(B
+@item V
+Gnus \e$B%P!<%8%g%s!#\e(B
+@item U
+\e$B$=$N%0%k!<%W$G$NL$FI5-;v$N?t!#\e(B
+@item e
+\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
+@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
+@item S
+\e$B8=:_$N5-;v$NI=Bj!#\e(B
+@item u
+\e$BMxMQ<TDj5A$N;EMM\e(B (@pxref{User-Defined Specs})\e$B!#\e(B
+@item s
+\e$B8=:_$N%9%3%"%U%!%$%k$NL>A0\e(B (@pxref{Scoring})\e$B!#\e(B
+@item d
+\e$BJ]N15-;v$N?t\e(B (@pxref{Unread Articles})\e$B!#\e(B
+@item t
+\e$B2D;k0uIU$-5-;v$N?t\e(B (@pxref{Unread Articles})\e$B!#\e(B
+@item r
+\e$B$=$N0lO"$NF0:n$N4V$K4{FI$H$7$F0u$,$D$$$?5-;v$N?t!#\e(B
+@item E
+\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
+
+@table @code
+
+@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
+
+@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
+
+@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
+
+@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
+@var{(FORM . FACE)} \e$B$N7A<0$N%j%9%H$G$9!#Nc$($P!"$b$70uIU$-$N5-;v$r%$%?%j%C\e(B
+\e$B%/!"9b$$%9%3%"$N5-;v$r%\!<%k%I$K$7$?$1$l$P!"$3$NJQ?t$r<!$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
+
+\e$B$9$Y$F$ND>@\0\F0L?Na$O?tCM@\F,0z?t$r<u$1IU$1!"$"$J$?$N4|BT$K$h$/$7$?$,$C\e(B
+\e$B$FF0:n$9$k$G$7$g$&!#\e(B
+
+\e$B$3$l$i$NL?Na$O$I$l$b5-;v$rA*Br$7$^$;$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
+@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
+@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
+
+@item G j
+@item j
+@kindex j \e$B!J35N,!K\e(B
+@kindex G j \e$B!J35N,!K\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
+@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
+
+\e$B35N,$N0\F0$K4XO"$7$?JQ?t\e(B:
+
+@table @code
+
+@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
+
+@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!#!J\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\e(B
+\e$B$l$^$;$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!#!K$3$NJQ?t$O!"%9%l%C\e(B
+\e$B%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
+
+@item gnus-auto-center-summary
+@vindex gnus-auto-center-summary
+@code{nil} \e$B$G$J$$$H!"\e(Bgnus \e$B$O35N,%P%C%U%!$G$N%]%$%s%H$r>o$K??Cf$KJ]$A$^$9!#\e(B
+\e$B$3$l$r$9$k$H!"$H$F$b$3$.$l$$$K$J$j$^$9$,!"CY$$%M%C%H%o!<%/@\B3$G$"$C$?$j!"\e(B
+\e$BC1$K$3$N\e(B Emacsism \e$B$G$J$$9T0Y$r9%$-$K$J$l$J$$$N$G$"$l$P!"IaDL$N\e(B Emacs \e$B$N\e(B
+\e$B%9%/%m!<%k$K$9$k$?$a$K!"$3$NJQ?t$r\e(B @code{nil} \e$B$K$9$k$3$H$,$G$-$^$9!#$3$l\e(B
+\e$B$O35N,%P%C%U%!$N?eJ?J}8~$N??Cf$X$N:F0\F0$b6X;_$7$^$9$N$G!"Hs>o$KD9$$%9%l%C\e(B
+\e$B%I$rFI$`$H$-$OITJX$+$b$7$l$^$;$s!#\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
+@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
+
+@table @kbd
+@item SPACE
+@kindex SPACE \e$B!J35N,!K\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
+
+@item G n
+@itemx n
+@kindex n\e$B!J35N,!K\e(B
+@kindex G n\e$B!J35N,!K\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
+@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
+@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
+@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
+@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
+@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
+@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
+@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
+@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
+@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
+@end table
+
+
+@node Choosing Variables
+@subsection \e$BA*$V$?$a$NJQ?t\e(B
+
+\e$B5-;v$r0\F0$7!"A*Br$9$k$N$K4XO"$7$?$$$/$D$+$NJQ?t\e(B:
+
+@table @code
+@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
+
+@item gnus-select-article-hook
+@vindex gnus-select-article-hook
+\e$B$3$N%U%C%/$O5-;v$,A*Br$5$l$?$H$-$K>o$K8F$P$l$^$9!#%G%#%U%)%k%H$G$O!"A*Br\e(B
+\e$B$5$l$?5-;v$N2<$K1#$l$F$$$k%9%l%C%I$r8+$;$k$h$&$K$J$C$F$$$^$9!#\e(B
+
+@item gnus-mark-article-hook
+@vindex gnus-mark-article-hook
+@findex gnus-summary-mark-unread-as-read
+@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$rIU\e(B
+\e$B$1$k$?$a$K$"$j$^$9!#%G%#%U%)%k%H$NCM$O\e(B
+@code{gnus-summary-mark-read-and-unread-as-read} \e$B$G!"$[$H$s$I$9$Y$F$NFI$s\e(B
+\e$B$@5-;v$N0u$r\e(B @code{gnus-read-mark} \e$B$KJQ99$7$^$9!#$3$N4X?t$K1F6A$5$l$J$$5-\e(B
+\e$B;v$O!"2D;k!"J]N1!"4|8B@Z$l:o=|2DG=5-;v$@$1$G$9!#$b$7!"L$FI$K4{FI$N0u$rIU$1\e(B
+\e$B$?$$$@$1$G$"$l$P!"Be$o$j$K\e(B @code{gnus-summary-mark-unread-as-read} \e$B$r;H$&\e(B
+\e$B$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
+
+@end table
+
+
+@node Paging the Article
+@section \e$B5-;v$N%9%/%m!<%k\e(B
+@cindex article scrolling
+
+@table @kbd
+
+@item SPACE
+@kindex SPACE \e$B!J35N,!K\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-prev-page})\e$B!#\e(B
+
+@item DEL
+@kindex DEL \e$B!J35N,!K\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
+@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
+
+@item A g
+@itemx g
+@kindex A g \e$B!J35N,!K\e(B
+@kindex g \e$B!J35N,!K\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 
+\e$B!X@8$N!Y5-;v$rM?$($^$9!#\e(B
+
+@item A <
+@itemx <
+@kindex < \e$B!J35N,!K\e(B
+@kindex A < \e$B!J35N,!K\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
+@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
+@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
+
+@item h
+@kindex h \e$B!J35N,!K\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!<%:$rAw$k!#\e(B
+@end menu
+
+
+@node Summary Mail Commands
+@subsection \e$B35N,$G$N%a!<%k$NL?Na\e(B
+@cindex mail
+@cindex composing mail
+
+\e$B%a!<%k%a%C%;!<%8$r:n@.$9$k$?$a$NL?Na\e(B:
+
+@table @kbd
+
+@item S r
+@item r
+@kindex S r \e$B!J35N,!K\e(B
+@kindex r \e$B!J35N,!K\e(B
+@findex gnus-summary-reply
+@c @icon{gnus-summary-mail-reply}
+@c @icon{gnus-summary-reply}
+\e$B8=:_$N5-;v$r=q$$$??M$KJVEz$N%a!<%k$rAw$j$^$9\e(B (@code{gnus-summary-reply})\e$B!#\e(B
+
+@item S R
+@itemx R
+@kindex R \e$B!J35N,!K\e(B
+@kindex S R \e$B!J35N,!K\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
+
+@item S w
+@kindex S w \e$B!J35N,!K\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
+
+@item S W
+@kindex S W \e$B!J35N,!K\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-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
+
+@item S o m
+@kindex S o m \e$B!J35N,!K\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
+\e$B@\F,0z?t$,$"$k$H!"E>Aw5-;v$N40A4$J%X%C%@!<$r<h$j9~$_$^$9!#\e(B
+
+@item S m
+@itemx m
+@kindex m \e$B!J35N,!K\e(B
+@kindex S m \e$B!J35N,!K\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
+@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
+
+@item S D r
+@kindex S D r \e$B!J35N,!K\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$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\e,A_\e(B 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
+
+@item S M-c
+@kindex S M-c \e$B!J35N,!K\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
+
+@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
+
+@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
+
+@table @kbd
+@item S p
+@itemx a
+@kindex a \e$B!J35N,!K\e(B
+@kindex S p \e$B!J35N,!K\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
+@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
+@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
+
+@item S n
+@kindex S n \e$B!J35N,!K\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!"K\5-;v$r0zMQ$7$F!"8=:_$N5-;v\e(B
+\e$B$N%U%)%m!<%"%C%W$r%K%e!<%:$KEj9F$7$^$9\e(B
+(@code{gnus-summary-followup-to-mail-with-original})\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
+
+@item S N
+@kindex S N (Summary)
+@findex gnus-summary-followup-to-mail-with-original
+Post a followup to the current article via news, even if you got the
+message through mail and include the original message
+(@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
+
+@item S o p
+@kindex S o p \e$B!J35N,!K\e(B
+@findex gnus-summary-post-forward
+\e$B8=:_$N5-;v$r%K%e!<%:%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
+
+@item S O p
+@kindex S O p \e$B!J35N,!K\e(B
+@findex gnus-uu-digest-summary-post-forward
+@cindex digests
+@cindex making digests
+\e$B8=:_$N0lO"$N5-;v$rMWLs$7$F!"$=$N7k2L$r%K%e!<%:%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
+
+@item S u
+@kindex S u \e$B!J35N,!K\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
+@end table
+
+\e$B$^$?\e(B @pxref{(message)Header Commands} \e$B$K$5$i$J$k>pJs$,$"$j$^$9!#\e(B
+
+
+@node Canceling and Superseding
+@section \e$B5-;v$r<h$j>C$9\e(B
+@cindex canceling articles
+@cindex superseding articles
+
+\e$B2?$+$r=q$$$?8e$G!"K\Ev$K!"K\Ev$K!"$[\e(B \e$B$s\e(B \e$B$H\e(B \e$B$&\e(B \e$B$K$=$l$rEj9F$7$F$$$J$1$l$P\e(B
+\e$B$J$!$H;W$C$?$3$H$O$"$j$^$;$s$+!#\e(B
+
+\e$B$(!<$H!"%a!<%k$O<h$j>C$9$3$H$O$G$-$J$$$N$G$9$,!"%K%e!<%:$NEj9F$O<h$j>C$9\e(B
+\e$B$3$H$,$G$-$^$9!#\e(B
+
+@findex gnus-summary-cancel-article
+@kindex C \e$B!J35N,!K\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$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
+
+\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
+
+@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
+
+\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$=$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
+
+
+@node Marking Articles
+@section \e$B5-;v$K0u$rIU$1$k\e(B
+@cindex article marking
+@cindex article ticking
+@cindex marks
+
+\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$*$)!"%K!<%H!&%-!<%N?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$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
+@end menu
+
+@ifinfo
+\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
+* 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
+
+@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
+
+@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
+
+@item SPACE
+@vindex gnus-unread-mark
+\e$BL$FI$H$7$F0u$rIU$1$^$9\e(B (@code{gnus-unread-mark})\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
+
+\e$B0J2<$N$9$Y$F$N0u$O5-;v$K4{FI$N0u$rIU$1$^$9!#\e(B
+
+@table @samp
+
+@item r
+@vindex gnus-del-mark
+\e$BMxMQ<T$,<jF0$d$=$N$h$&$J$b$N$GL?Na\e(B @kbd{d} \e$B$K$h$C$F4{FI$N0u$rIU$1$?5-;v\e(B
+\e$B$G$9\e(B (@code{gnus-del-mark})\e$B!#\e(B
+
+@item R
+@vindex gnus-read-mark
+\e$B<B:]$KFI$^$l$?5-;v\e(B (@code{gnus-read-mark})\e$B!#\e(B
+
+@item O
+@vindex gnus-ancient-mark
+\e$BA02s$N%;%C%7%g%s$G4{FI$N0u$rIU$1$F!":#$O\e(B@dfn{\e$B8E$/\e(B}\e$B$J$C$F$7$^$C$?5-;v!#\e(B
+
+@item K
+@vindex gnus-killed-mark
+\e$B:o=|$N0u\e(B (@code{gnus-killed-mark})\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
+
+@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
+
+@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
+
+@item G
+@vindex gnus-canceled-mark
+\e$B<h$j>C$5$l$?5-;v\e(B (@code{gnus-canceled-mark})\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}.
+
+@item Q
+@vindex gnus-sparse-mark
+\e$B$^$P$i$K;2>H$5$l$?5-;v\e(B (@code{gnus-sparse-mark})\e$B!#\e(B
+@xref{Customizing Threading}.
+
+@item M
+@vindex gnus-duplicate-mark
+\e$B=EJ#M^@)$K$h$j4{FI$N0u$N$D$$$?5-;v\e(B (@code{gnus-duplicated-mark})\e$B!#\e(B
+@xref{Duplicate Suppression}.
+
+@end table
+
+\e$B$3$l$i$N$9$Y$F$N0u$O!"K\Ev$O$?$@5-;v$,4{FI$H$7$F0u$,$D$$$F$$$k$3$H$r0UL#\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
+
+@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
+@end table
+
+
+@node Other Marks
+@subsection \e$BB>$N0u\e(B
+@cindex process mark
+@cindex bookmarks
+
+\e$B5-;v$,FI$^$l$?$+$I$&$+$K$O4X78$7$J$$0u$,$$$/$D$+$"$j$^$9!#\e(B
+
+@itemize @bullet
+
+@item
+\e$B8=:_$N5-;v$K$7$*$j$r64$`$3$H$,$G$-$^$9!#$"$J$?$OG-$NG"$N=,47$K4X$9$kD9$$\e(B
+\e$BO@J8$rFI$s$G$$$F!"$=$l$rFI$_=*$o$kA0$KM<?)$r?)$Y$k$?$a$K2H$K5"$i$J$1$l$P\e(B
+\e$B$J$i$J$+$C$?$H$7$^$7$g$&!#$=$N$H$-$K!"5-;v$K$7$*$j$r64$`$3$H$,$G$-!"<!$K\e(B
+\e$B$=$N5-;v$K=P$/$o$7$?$H$-$K!"\e(Bgnus \e$B$O$=$N$7$*$j$N$H$3$m$X0\F0$9$k$G$7$g$&!#\e(B
+@xref{Setting Marks}
+
+@item
+@vindex gnus-replied-mark
+\e$BJVEz$r$7$?$+!"%U%)%m!<%"%C%W$r$7$?!JNc$($P!"Ez$($?!K5-;v$O$9$Y$F#27eL\$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#27eL\$K\e(B @samp{*} \e$B$N0u$,$D$-$^$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#27eL\$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
+
+@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#27eL\$K\e(B @samp{#} \e$B$,$"$j$^$9!#\e(B
+
+@end itemize
+
+\e$B$3$l$i$N!XHs9XFIEY!Y$N0u$O%G%#%U%)%k%H$G$O$?$$$F$$#27eL\$K8=$l$k$H$$$&$3$H\e(B
+\e$B$K5$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
+
+
+@node Setting Marks
+@subsection \e$B0u$rIU$1$k\e(B
+@cindex setting marks
+
+\e$B$9$Y$F$N0u$D$1L?Na$O?tCM@\F,0z?t$r<u$1IU$1$^$9!#\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
+@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
+
+@item M t
+@itemx !
+@kindex ! \e$B!J35N,!K\e(B
+@kindex M t \e$B!J35N,!K\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}
+
+@item M ?
+@itemx ?
+@kindex ? \e$B!J35N,!K\e(B
+@kindex M ? \e$B!J35N,!K\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
+
+@item D
+@kindex D \e$B!J35N,!K\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
+
+@item M k
+@itemx k
+@kindex k \e$B!J35N,!K\e(B
+@kindex M k \e$B!J35N,!K\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
+@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
+
+@item M C
+@kindex M C \e$B!J35N,!K\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
+@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
+
+@item M H
+@kindex M H \e$B!J35N,!K\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
+
+@item C-w
+@kindex C-w \e$B!J35N,!K\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
+
+@item M V k
+@kindex M V k \e$B!J35N,!K\e(B
+@findex gnus-summary-kill-below
+\e$B%G%#%U%)%k%H$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$^$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
+@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
+
+@item M b
+@kindex M b \e$B!J35N,!K\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
+@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
+@findex gnus-summary-clear-above
+\e$B%G%#%U%)%k%H$N%9%3%"!J$b$7$/$O?tCM@\F,0z?t!K$h$j$bBg$-$$%9%3%"$r;}$D5-;v$N\e(B
+\e$B$9$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
+@findex gnus-summary-tick-above
+\e$B%G%#%U%)%k%H$N%9%3%"!J$b$7$/$O?tCM@\F,0z?t!K$h$j$bBg$-$$%9%3%"$r;}$D$9$Y$F\e(B
+\e$B$N5-;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
+@findex gnus-summary-mark-above
+\e$B0u$NF~NO$rB%$7!"%G%#%U%)%k%H$N%9%3%"!J$b$7$/$O?tCM@\F,0z?t!K$h$j$bBg$-$J%9\e(B
+\e$B%3%"$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!#%G%#%U%)%k%H$O\e(B @code{t} \e$B$G$9!#\e(B
+
+
+@node Setting Process Marks
+@subsection \e$B%W%m%;%90u$rIU$1$k\e(B
+@cindex setting process marks
+
+@table @kbd
+
+@item M P p
+@itemx #
+@kindex # \e$B!J35N,!K\e(B
+@kindex M P p \e$B!J35N,!K\e(B
+@findex gnus-symmary-mark-as-processable
+\e$B8=:_$N5-;v$K%W%m%;%90u$rIU$1$^$9\e(B
+(@code{gnus-summary-mark-as-processable})\e$B!#\e(B
+@findex gnus-summary-unmark-as-processable
+
+@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
+
+@item M P U
+@kindex M P U \e$B!J35N,!K\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
+
+@item M P i
+@kindex M P i \e$B!J35N,!K\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
+
+@item M P R
+@kindex M P R \e$B!J35N,!K\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 r
+@kindex M P r \e$B!J35N,!K\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
+@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
+
+@item M P T
+@kindex M P T \e$B!J35N,!K\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
+
+@item M P v
+@kindex M P v \e$B!J35N,!K\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
+
+@item M P s
+@kindex M P s \e$B!J35N,!K\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
+@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
+
+@item M P a
+@kindex M P a \e$B!J35N,!K\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
+
+@item M P b
+@kindex M P b \e$B!J35N,!K\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
+
+@item M P k
+@kindex M P k \e$B!J35N,!K\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
+
+@item M P y
+@kindex M P y \e$B!J35N,!K\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
+
+@item M P w
+@kindex M P w \e$B!J35N,!K\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
+
+@end table
+
+
+@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$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
+
+@table @kbd
+
+@item / /
+@itemx / s
+@kindex / / \e$B!J35N,!K\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
+
+@item / a
+@kindex / a \e$B!J35N,!K\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
+
+@item / u
+@itemx x
+@kindex / u \e$B!J35N,!K\e(B
+@kindex x \e$B!J35N,!K\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$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
+@findex gnus-summary-limit-to-marks
+\e$B0u$r?R$M$F!"$=$N0u$,IU$$$F$$$J$$5-;v$K@)8B$7$^$9\e(B
+(@code{gnus-summary-limit-to-marks})\e$B!#\e(B
+
+@item / t
+@kindex / t \e$B!J35N,!K\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$=$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
+@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
+
+@item / w
+@kindex / w \e$B!J35N,!K\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
+
+@item / v
+@kindex / v \e$B!J35N,!K\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
+@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
+
+@item / D
+@kindex / D \e$B!J35N,!K\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
+@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
+
+@item / d
+@kindex / d \e$B!J35N,!K\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
+
+@item / T
+@kindex / T \e$B!J35N,!K\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
+
+@item / c
+@kindex / c \e$B!J35N,!K\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
+
+
+@item / C
+@kindex / C \e$B!J35N,!K\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
+
+@end table
+
+
+@node Threading
+@section \e$B%9%l%C%I\e(B
+@cindex threading
+@cindex article threading
+
+Gnus \e$B$O%G%#%U%)%k%H$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!"$"\e(B
+\e$B$k5-;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$^$:!"35G0$N354Q$G$9!'\e(B
+
+@table @dfn
+@item \e$B:,K\\e(B (root)
+\e$B%9%l%C%I$G0lHVD:E@$K$"$k5-;v$G$9!(%9%l%C%I$N:G=i$N5-;v$G$9!#\e(B
+
+@item \e$B%9%l%C%I\e(B (thread)
+\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
+
+@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
+
+@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
+
+@item \e$B$^$P$i%9%l%C%I\e(B (sparse threads)
+\e$BL5$$5-;v$,!X?dB,$5$l$?!Y%9%l%C%I$G!"35N,%P%C%U%!$K6u9T$GI=<($5$l$^$9!#\e(B
+
+@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
+@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
+@end menu
+
+
+@node Loose Threads
+@subsection \e$BL5B+G{%9%l%C%I\e(B
+@cindex <
+@cindex >
+@cindex loose threads
+
+@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$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
+
+@iftex
+@iflatex
+\gnusfigure{The Summary Buffer}{390}{
+\put(0,0){\epsfig{figure=tmp/summary-adopt.ps,width=7.5cm}}
+\put(445,0){\makebox(0,0)[br]{\epsfig{figure=tmp/summary-empty.ps,width=7.5cm}}}
+\put(0,400){\makebox(0,0)[tl]{\epsfig{figure=tmp/summary-none.ps,width=7.5cm}}}
+\put(445,400){\makebox(0,0)[tr]{\epsfig{figure=tmp/summary-dummy.ps,width=7.5cm}}}
+}
+@end iflatex
+@end iftex
+
+@cindex adopting articles
+
+@table @code
+
+@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$,%G%#%U%)%k%H$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}.
+
+@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
+
+@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
+\e$BI=<($9$k$@$1$G$9!#\e(B
+
+@item nil
+\e$BL5B+G{%9%l%C%I$r=8$a$^$;$s!#\e(B
+@end table
+
+@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!<%:%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
+
+@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
+@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
+
+@c Written by Michael Ernst <mernst@cs.rice.edu>
+@lisp
+(setq gnus-simplify-ignored-prefixes
+      (concat
+       "\\`\\[?\\("
+       (mapconcat
+        'identity
+        '("looking"
+          "wanted" "followup" "summary\\( of\\)?"
+          "help" "query" "problem" "question"
+          "answer" "reference" "announce"
+          "How can I" "How to" "Comparison of"
+          ;; ...
+          )
+        "\\|")
+       "\\)\\s *\\("
+       (mapconcat 'identity
+                  '("for" "for reference" "with" "about")
+                  "\\|")
+       "\\)?\\]?:?[ \t]*"))
+@end lisp
+
+\e$B$3$N@55,I=8=$K9gCW$9$k$9$Y$F$N8l$O!"#2$D$NI=Bj$rHf3S$9$kA0$K<h$j=|$+$l$^$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
+
+\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
+@findex gnus-simplify-subject-re
+\e$BA0$NJ}$K$"$k\e(B @samp{Re:} \e$B$r<h$j=|$-$^$9!#\e(B
+
+@item gnus-simplify-subject-fuzzy
+@findex gnus-simplify-subject-fuzzy
+\e$B$"$$$^$$$K4JC1$K$7$^$9!#\e(B
+
+@item gnus-simplify-whitespace
+@findex gnus-simplify-whitespace
+\e$BM>J,$J6uGr\e(B (whitespace) \e$B$r<h$j=|$-$^$9!#\e(B
+@end table
+
+\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
+
+@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!<%:%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
+
+@table @code
+@item gnus-gather-threads-by-subject
+@findex gnus-gather-threads-by-subject
+\e$B$3$N4X?t$O%G%#%U%)%k%H$N<}=84X?t$G!"GSB>E*$K\e(B @code{Subject} \e$B$r8+$^$9!#\e(B
+
+@item gnus-gather-threads-by-references
+\e$B$3$N4X?t$OGSB>E*$K\e(B @code{References} \e$BMs$r8+$^$9!#\e(B
+@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
+
+@lisp
+(setq gnus-summary-thread-gathering-function
+      'gnus-gather-threads-by-references)
+@end lisp
+
+@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$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
+
+@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
+
+@end table
+
+
+@node More Threading
+@subsection \e$B$b$C$H%9%l%C%I$r\e(B
+
+@table @code
+@item gnus-show-threads
+@vindex gnus-show-threads
+\e$B$3$NJQ?t$,\e(B @code{nil} \e$B$G$"$k$H!"%9%l%C%I$O:n$i$l$:!"$3$3$K$"$k;D$j$N$9$Y\e(B
+\e$B$F$NJQ?t$OA4$/8z2L$,L5$/$J$j$^$9!#%9%l%C%I:n$j$r;_$a$k$H%0%k!<%W$NA*Br$,\e(B
+\e$B>/$7B.$/$J$j$^$9$,!"5-;v$rFI$`$N$,$b$C$HCY$/!"ITJX$K$J$k$3$H$O3N<B$G$9!#\e(B
+
+@item gnus-thread-hide-subtree
+@vindex gnus-thread-hide-subtree
+\e$B$3$l$,\e(B @code{nil} \e$B$G$J$$$H!"$9$Y$F$N%9%l%C%I$O35N,%P%C%U%!$,@8@.$5$l$?$H\e(B
+\e$B$-$K1#$l$^$9!#\e(B
+
+@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
+
+@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
+
+@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
+
+@item gnus-thread-indent-level
+@vindex gnus-thread-indent-level
+\e$B$3$N?t;z$OItJ,%9%l%C%I$,$I$l$/$i$$;z2<$2\e(B (indent) \e$B$5$l$k$Y$-$+$r7h$a$^$9!#\e(B
+\e$B%G%#%U%)%k%H$O\e(B 4 \e$B$G$9!#\e(B
+
+@end table
+
+
+@node Low-Level Threading
+@subsection \e$BDc%l%Y%k$K$*$1$k%9%l%C%I:n@.\e(B
+
+@table @code
+
+@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
+
+@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
+
+@lisp
+(setq gnus-alter-header-function 'my-alter-message-id)
+
+(defun my-alter-message-id (header)
+  (let ((id (mail-header-id header)))
+    (when (string-match
+           "\\(<[^<>@@]*\\)\\.?cygnus\\..*@@\\([^<>@@]*>\\)" id)
+      (mail-header-set-id
+       (concat (match-string 1 id) "@@" (match-string 2 id))
+       header))))
+@end lisp
+
+@end table
+
+
+@node Thread Commands
+@subsection \e$B%9%l%C%I$NL?Na\e(B
+@cindex thread commands
+
+@table @kbd
+
+@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
+@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
+
+@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
+@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
+
+@item T i
+@kindex T i \e$B!J35N,!K\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
+
+@item T #
+@kindex T # \e$B!J35N,!K\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
+
+@item T M-#
+@kindex T M-# \e$B!J35N,!K\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
+
+@item T T
+@kindex T T \e$B!J35N,!K\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
+@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
+
+@item T h
+@kindex T h \e$B!J35N,!K\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
+
+@item T S
+@kindex T S \e$B!J35N,!K\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
+
+@item T H
+@kindex T H \e$B!J35N,!K\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
+@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
+
+@item T ^
+@kindex T ^ \e$B!J35N,!K\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
+
+@end table
+
+\e$B0J2<$NL?Na$O%9%l%C%I0\F0L?Na$G$9!#$3$l$i$O$9$Y$F?tCM@\F,0z?t$r<u$1IU$1$^\e(B
+\e$B$9!#\e(B
+
+@table @kbd
+
+@item T n
+@kindex T n \e$B!J35N,!K\e(B
+@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
+@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
+@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
+@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
+@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
+
+
+@node Sorting
+@section \e$BJB$SBX$(\e(B
+
+@findex gnus-thread-sort-by-total-score
+@findex gnus-thread-sort-by-date
+@findex gnus-thread-sort-by-score
+@findex gnus-thread-sort-by-subject
+@findex gnus-thread-sort-by-author
+@findex gnus-thread-sort-by-number
+@vindex gnus-thread-sort-functions
+\e$B$b$7%9%l%C%I$N35N,I=<($r;H$C$F$$$k$N$G$"$l$P!"4X?t$N%j%9%H$G$"$k\e(B
+@code{gnus-thread-sort-functions} \e$B$r@_Dj$9$k$3$H$G%9%l%C%I$rJB$SBX$($k$3$H\e(B
+\e$B$,$G$-$^$9!#%G%#%U%)%k%H$G$O!"JB$SBX$($O5-;vHV9f$K$h$C$F$J$5$l$^$9!#4{$K:n\e(B
+\e$B$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$B3F4X?t$O#2$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#2$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$B%9%3%"!"I=Bj!"$=$7$F:G8e$KHV9f!"$N=g$KJB$SBX$($?$$$N$G$"$l$P!"<!$N$h$&$K\e(B
+\e$B$G$-$^$9!'\e(B
+
+@lisp
+(setq gnus-thread-sort-functions
+      '(gnus-thread-sort-by-number
+        gnus-thread-sort-by-subject
+        gnus-thread-sort-by-total-score))
+@end lisp
+
+\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%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
+      '((lambda (t1 t2)
+          (not (gnus-thread-sort-by-number t1 t2)))
+        gnus-thread-sort-by-score))
+@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#2>h!"$b$7$/$O$"$J$?$N9%4q?4$r$/$9$0$k\e(B
+\e$B$h$&$J2?$+$G$7$g$&!#\e(B
+
+@findex gnus-article-sort-functions
+@findex gnus-article-sort-by-date
+@findex gnus-article-sort-by-score
+@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$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
+
+@lisp
+(setq gnus-article-sort-functions
+      '(gnus-article-sort-by-number
+        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$^$:!"$$$/$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$B$3$N>u67$rHr$1$k$?$a$K!"\e(Bgnus \e$B$O%5!<%P!<$K#2$D$N!J$=$l$O#2$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
+
+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
+\e$B$K$b$C$HIi2Y$,$+$+$k$H$$$&$3$H$K$J$k$G$7$g$&!#%5!<%P!<<+?H$b$b$C$HIi2Y$,\e(B
+\e$B$+$+$k$h$&$K$J$j$^$9!=!=M>J,$J5-;v$NMW5a$H!"M>J,$J@\B3$G!#\e(B
+
+\e$B$O$$!"$3$l$GK\Ev$O$3$N$h$&$J$3$H$r$9$Y$-$GL5$$;v$,J,$+$C$?$G$7$g$&\e(B... \e$BK\\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;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
+
+@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$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
+
+@lisp
+(defun my-async-short-unread-p (data)
+  "Return non-nil for short, unread articles."
+  (and (gnus-data-unread-p data)
+       (< (mail-header-lines (gnus-data-header data))
+          100)))
+
+(setq gnus-async-prefetch-article-p 'my-async-short-unread-p)
+@end lisp
+
+\e$B$3$l$i$N4X?t$O2?EY$b2?EY$b8F$P$l$^$9$N$G!"\e(Bgnus \e$B$rCY$/$7$9$.$J$$$h$&$K!"\e(B
+\e$BC;$/4EH~$G$"$k$N$,9%$^$7$$$G$9!#$*$=$i$/!"$3$N$h$&$J$b$N$r%P%$%H%3%s%Q%$\e(B
+\e$B%k\e(B (byte-compile) \e$B$9$k$N$ONI$$CeA[$G$7$g$&!#\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
+
+@table @code
+@item read
+\e$B5-;v$,FI$^$l$?$H$-$K:o=|$7$^$9!#\e(B
+
+@item exit
+\e$B%0%k!<%W$rH4$1$?$H$-$K5-;v$r:o=|$7$^$9!#\e(B
+@end table
+
+\e$B%G%#%U%)%k%H$NCM$O\e(B @code{(read exit)} \e$B$G$9!#\e(B
+
+@vindex gnus-use-header-prefetch
+@code{gnus-use-header-prefetch} \e$B$,\e(B @code{nil} \e$B$G$J$$$H!"<!$N%0%k!<%W$+$i\e(B
+\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$G$bCm0U?<$/;H$o$l$l$P!"$=$l$O5-;v$rJ]B8$9$k4JC1$JJ}K!$K$J$jF@$^$9!#\e(B
+
+@vindex gnus-use-long-file-name
+@vindex gnus-cache-directory
+@vindex gnus-use-cache
+\e$B%-%c%C%7%e$r<B9T$9$k$?$a$K$O!"\e(B@code{gnus-use-cache} \e$B$r\e(B @code{t} \e$B$K@_Dj$7\e(B
+\e$B$^$9!#%G%#%U%)%k%H$G$O!"$9$Y$F$N2D;k$^$?$OJ]N1$H$7$F0u$NIU$$$F$$$k5-;v$O\e(B
+\e$B%m!<%+%k$N%-%c%C%7%e$KJ#<L$5$l$^$9!#$3$N%-%c%C%7%e$,J?$i$J9=B$$+3,AXE*$G\e(B
+\e$B$"$k$+$O!"$$$D$b$I$*$j!"JQ?t\e(B @code{gnus-use-long-file-name} \e$B$G@)8f$5$l$^\e(B
+\e$B$9!#\e(B
+
+\e$B2D;k$+J]N15-;v$r:FA*Br$7$?>l9g$O!"%5!<%P!<$NBe$o$j$K%-%c%C%7%e$+$i<hF@$5\e(B
+\e$B$l$^$9!#%-%c%C%7%e$K$"$k5-;v$O4|8B@Z$l:o=|$5$l$^$;$s$N$G!"5-;v$,B0$7$F$$\e(B
+\e$B$k$H$3$m$K;D$7$?$^$^$G5-;v$rJ]B8$9$kJ}K!$H$7$F;H$&;v$,$G$-$k$+$b$7$l$^$;\e(B
+\e$B$s!#J]B8$7$?$$5-;v$r$9$Y$FJ]N1$N0u$rIU$1$F!"8e$O?4G[$OMW$j$^$;$s!#\e(B
+
+\e$B5-;v$K4{FI$N0u$,IU$$$?$H$-$K!"$=$l$O%-%c%C%7%e$+$i:o=|$5$l$k$N$G$7$g$&$+!#\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#2$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
+
+@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
+
+@vindex gnus-uncacheable-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$?$,#2G\$NMFNL$r;H$&;v$,NI$$$H46$8$J$$8B$j$O!#%-%c%C%7%e$r@)\e(B
+\e$B8B$9$k$?$a$K!"@55,I=8=\e(B @code{gnus-uncacheable-groups} \e$B$rNc$($P\e(B
+@samp{^nnml} \e$B$H@_Dj$7$F$/$@$5$$!#$3$NJQ?t$O%G%#%U%)%k%H$G$O\e(B @code{nil} \e$B$G\e(B
+\e$B$9!#\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$r8=>u%U%!%$%k\e(B (active file)
+(@code{gnus-cache-active-file}) \e$B$KN/$a$^$9!#$3$N%U%!%$%k!J$b$7$/$O%-%c%C%7%e\e(B
+\e$B$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\e(B
+\e$B$r@5$7$/$9$k$?$a$K#2$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:n\e(B
+\e$B@.$7!"\e(B@kbd{gnus-cache-generate-active} \e$B$O\e(B \e$B8=>u%U%!%$%k$r!J:F!K: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$BNc$($P!"%K%e!<%:%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!<%:%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#2$D$NL@<(E*$JL?Na\e(B
+\e$B$r;H$$$^$9!'\e(B
+
+@table @kbd
+
+@item *
+@kindex * \e$B!J35N,!K\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
+@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
+@end table
+
+\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
+
+@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
+
+@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$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
+
+@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
+
+@table @kbd
+
+@item O o
+@itemx o
+@kindex O o \e$B!J35N,!K\e(B
+@kindex o \e$B!J35N,!K\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
+
+@item O m
+@kindex O m \e$B!J35N,!K\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
+
+@item O r
+@kindex O r \e$B!J35N,!K\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
+
+@item O f
+@kindex O f \e$B!J35N,!K\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
+
+@item O F
+@kindex O F \e$B!J35N,!K\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
+@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
+
+@item O h
+@kindex O h \e$B!J35N,!K\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
+
+@item O v
+@kindex O v \e$B!J35N,!K\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
+
+@item O p
+@kindex O p \e$B!J35N,!K\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
+@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
+
+
+@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
+
+@table @code
+
+@item gnus-summary-save-in-rmail
+@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
+
+
+@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
+
+@item gnus-summary-save-in-file
+@findex gnus-summary-save-in-file
+@vindex gnus-file-save-name
+@findex gnus-numeric-save-name
+\e$B5-;v$rDL>o$N%U%!%$%k$N8e$KDI2C$7$^$9!#JQ?t\e(B @code{gnus-file-save-name} \e$B$K\e(B
+\e$BF~$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-numeric-save-name} \e$B$G$9!#\e(B
+
+@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
+
+
+@item gnus-summary-save-in-folder
+@findex gnus-summary-save-in-folder
+@findex gnus-folder-save-name
+@findex gnus-Folder-save-name
+@vindex gnus-folder-save-name
+@cindex rcvstore
+@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
+
+@item gnus-summary-save-in-vm
+@findex gnus-summary-save-in-vm
+\e$B5-;v$r\e(B VM \e$B%U%)%k%@!<$KJ]B8$7$^$9!#$3$N@_Dj$r;H$&$?$a$K$O\e(B VM \e$B%a!<%k%j!<%@!<\e(B
+\e$B$,I,MW$G$9!#\e(B
+@end table
+
+@vindex gnus-article-save-directory
+\e$B$3$l$i$NA4$F$N4X?t$O:G8e$N0l$D$r=|$$$F!"4D6-JQ?t\e(B @code{SAVEDIR} \e$B$K$h$C$F\e(B
+\e$B=i4|2=$5$l$k\e(B @code{gnus-article-save-directory} \e$B$K5-;v$rJ]B8$7$^$9!#$3$l\e(B
+\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
+
+@table @code
+
+@item gnus-Numeric-save-name
+@findex gnus-Numeric-save-name
+@file{~/News/Alt.andera-dworkin/45} \e$B$N$h$&$J%U%!%$%kL>!#\e(B
+
+@item gnus-numeric-save-name
+@findex gnus-numeric-save-name
+@file{~/News/alt.andera-dworkin/45} \e$B$N$h$&$J%U%!%$%kL>!#\e(B
+
+@item gnus-Plain-save-name
+@findex gnus-Plain-save-name
+@file{~/News/Alt.andera-dworkin} \e$B$N$h$&$J%U%!%$%kL>!#\e(B
+
+@item gnus-plain-save-name
+@findex gnus-plain-save-name
+@file{~/News/alt.andera-dworkin} \e$B$N$h$&$J%U%!%$%kL>!#\e(B
+@end table
+
+@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
+
+@lisp
+(("^Subject:.*gnus\\|^Newsgroups:.*gnus" "gnus-stuff")
+ ("^Subject:.*vm\\|^Xref:.*vm" "vm-stuff")
+ (my-choosing-function "../other-dir/my-stuff")
+ ((equal gnus-newsgroup-name "mail.misc") "mail-stuff"))
+@end lisp
+
+\e$B$3$l$O$=$l$>$l$NMWAG$,!"#2$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$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$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$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
+
+@lisp
+(defun my-save-name (group)
+  (when (string-match "^nnml:mail." group)
+    (substring group (match-end 0))))
+
+(setq gnus-split-methods
+      '((gnus-article-archive-name)
+        (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$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
+\e$B$o$l$:!"%j%9%H$KMWAG\e(B @code{not-save} \e$B$,$"$k$H!"D9$$%U%!%$%kL>$OJ]B8$K$O\e(B
+\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
+
+@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
+
+
+@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$^$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
+@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
+
+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#2$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
+
+\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
+
+@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
+@cindex uuencoded articles
+
+@table @kbd
+
+@item X u
+@kindex X u \e$B!J35N,!K\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
+@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
+@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
+@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
+
+@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!<%:%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$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
+
+@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
+
+
+@node Shell Archives
+@subsection \e$B%7%'%k%"!<%+%$%V\e(B
+@cindex unshar
+@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
+
+@table @kbd
+
+@item X s
+@kindex X s \e$B!J35N,!K\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
+@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
+@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
+@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
+@end table
+
+
+@node PostScript Files
+@subsection \e$B%]%9%H%9%/%j%W%H%U%!%$%k\e(B
+@cindex PostScript
+
+@table @kbd
+
+@item X p
+@kindex X p \e$B!J35N,!K\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
+@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
+
+@item X v p
+@kindex X v p \e$B!J35N,!K\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
+
+@item X v P
+@kindex X v P \e$B!J35N,!K\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
+@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
+@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
+@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
+@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
+
+@lisp
+      (list '(regexp1 command2)
+            '(regexp2 command2)
+            ...)
+@end lisp
+
+@table @code
+
+@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
+@lisp
+(setq gnus-uu-user-view-rules
+      (list '(\"\\\\.au$\" \"sox %s -t .aiff > /dev/audio\")))
+@end lisp
+
+@item gnus-uu-user-view-rules-end
+@vindex gnus-uu-user-view-rules-end
+\e$B$3$NJQ?t$O\e(B gnus \e$B$,MxMQ<T$H%G%#%U%)%k%H$N1\Mw5,B'$+$i9gCW$9$k$b$N$r8+$D$1\e(B
+\e$B$i$l$J$+$C$?$H$-$KD4$Y$i$l$^$9!#\e(B
+
+@item gnus-uu-user-archive-rules
+@vindex gnus-uu-user-archive-rules
+\e$B$3$NJQ?t$O%"!<%+%$%V$rE83+$9$k$H$-$K$I$NL?Na$,;H$o$l$k$Y$-$+$r7h$a$k$?$a\e(B
+\e$B$K;H$&;v$,$G$-$^$9!#\e(B
+@end table
+
+
+@node Other Decode Variables
+@subsection \e$BB>$NI|9f2=$NJQ?t\e(B
+
+@table @code
+@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
+
+@table @code
+
+@item gnus-uu-grab-view
+@findex gnus-uu-grab-view
+\e$B%U%!%$%k$r1\Mw$7$^$9!#\e(B
+
+@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
+@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
+
+@item gnus-uu-ignore-files-by-name
+@vindex gnus-uu-ignore-files-by-name
+\e$B$3$N@55,I=8=$K9gCW$9$kL>A0$N%U%!%$%k$O1\Mw$5$l$^$;$s!#\e(B
+
+@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
+
+@item gnus-uu-tmp-dir
+@vindex gnus-uu-tmp-dir
+@code{gnus-uu} \e$B$,$=$N;E;v$r$9$k>l=j$G$9!#\e(B
+
+@item gnus-uu-do-not-unpack-archives
+@vindex gnus-uu-do-not-unpack-archives
+@code{nil} \e$B$G$J$$$N$O!"\e(B@code{gnus-uu} \e$B$OI=<($9$k$?$a$N%U%!%$%k$rC5$9$?$a\e(B
+\e$B$K%"!<%+%$%V$NCf$^$G$OF~$C$F$$$+$J$$$H$$$&;v$G$9!#\e(B
+
+@item gnus-uu-view-and-save
+@vindex gnus-uu-view-and-save
+@code{nil} \e$B$G$J$$$N$O!"MxMQ<T$O%U%!%$%k$r1\Mw$7$?8e$K>o$KJ]B8$9$k$+$I$&\e(B
+\e$B$+$r?R$M$i$l$k$H$$$&;v$G$9!#\e(B
+
+@item gnus-uu-ignore-default-view-rules
+@vindex gnus-uu-ignore-default-view-rules
+@code{nil} \e$B$G$J$$$N$O!"\e(B@code{gnus-uu} \e$B$O%G%#%U%)%k%H$N1\Mw5,B'$rL5;k$9$k\e(B
+\e$B$H$$$&;v$G$9!#\e(B
+
+@item gnus-uu-ignore-default-archive-rules
+@vindex gnus-uu-ignore-default-archive-rules
+@code{nil} \e$B$G$J$$$N$O!"\e(B@code{gnus-uu} \e$B$O%G%#%U%)%k%H$N%"!<%+%$%VE83+L?Na\e(B
+\e$B$rL5;k$9$k$H$$$&;v$G$9!#\e(B
+
+@item gnus-uu-kill-carriage-return
+@vindex gnus-uu-kill-carriage-return
+@code{nil} \e$B$G$J$$$N$O!"\e(B@code{gnus-uu} \e$B$O5-;v$+$i$9$Y$F$N%-%c%j%C%8%j%?!<\e(B
+\e$B%s\e(B (carriage return) \e$B$r<h$j5n$k$H$$$&;v$G$9!#\e(B
+
+@item gnus-uu-unmark-articles-not-decoded
+@vindex gnus-uu-unmark-articles-not-decoded
+@code{nil} \e$B$G$J$$$N$O!"\e(B@code{gnus-uu} \e$B$OI|9f2=$K<:GT$7$?5-;v$KL$FI$N0u$r\e(B
+\e$BIU$1$k$H$$$&;v$G$9!#\e(B
+
+@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
+
+@item gnus-uu-pre-uudecode-hook
+@vindex gnus-uu-pre-uudecode-hook
+@code{uudecode} \e$B$K%a%C%;!<%8$rAw$kA0$K<B9T$5$l$k%U%C%/$G$9!#\e(B
+
+@item gnus-uu-view-with-metamail
+@vindex gnus-uu-view-with-metamail
+@cindex metamail
+@code{nil} \e$B$G$J$$$N$O!"\e(B@code{gnus-uu} \e$B$O5,B'JQ?t$GDj5A$5$l$?1\MwL?Na$rL5\e(B
+\e$B;k$7$F!"%U%!%$%kL>$K4p$E$$$?\e(B @sc{mime} \e$BFbMF$N7?$K<h$jBX$($k$H$$$&;v$G$9!#\e(B
+\e$B$=$N7k2L$O1\Mw$N$?$a$K\e(B @code{metamail} \e$B$K$+$1$i$l$^$9!#\e(B
+
+@item gnus-uu-save-in-digest
+@vindex gnus-uu-save-in-digest
+@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
+
+@end table
+
+
+@node Uuencoding and Posting
+@subsection uuencode \e$B$HEj9F\e(B
+
+@table @code
+
+@item gnus-uu-post-include-before-composing
+@vindex gnus-uu-post-include-before-composing
+@code{nil} \e$B$G$J$$$N$O!"\e(B@code{gnus-uu} \e$B$,5-;v$r:n@.$9$kA0$KId9f2=$9$k%U%!\e(B
+\e$B%$%k$r?R$M$k$H$$$&;v$G$9!#$3$NJQ?t$,\e(B @code{t} \e$B$G$"$k$H!"\e(B@kbd{C-c C-i} \e$B$K\e(B
+\e$B$h$C$FId9f2=$5$l$?%U%!%$%k$r<h$j9~$`$+!"5-;v$rEj9F$9$k$H$-$K<h$j9~$`$+!"\e(B
+\e$B$I$A$i$+$r$9$k;v$,$G$-$^$9!#\e(B
+
+@item gnus-uu-post-length
+@vindex gnus-uu-post-length
+\e$B5-;v$N:GBg$ND9$5$G$9!#Id9f2=$5$l$?%U%!%$%k$OA4BN$N%U%!%$%k$rEj9F$9$k$N$K\e(B
+\e$BI,MW$JNL$N%U%!%$%k$KJ,3d$5$l$^$9!#\e(B
+
+@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
+
+@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
+
+@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#2$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
+
+@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
+\e$B@h$X?J$`A0$K1\Mw$,=*$o$k$^$GBT$A$^$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
+
+@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
+\e$B;v$,1\Mw$5$l$k$=$l$>$l$N%U%!%$%k$KBP$7$F:n@.$5$l$^$9!#\e(B@code{nil} \e$B$G$"$k\e(B
+\e$B$H!"F1$81\MwL?Na$r;H$&$9$Y$F$NL?Na$,$=$NL?Na$N0z?t$N%j%9%H$H$7$FEO$5$l$^\e(B
+\e$B$9!#\e(B
+
+@vindex gnus-insert-pseudo-articles
+@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
+
+
+@node Article Treatment
+@section \e$B5-;v$N07$$\e(B
+
+\e$B$3$N5pBg$J@bL@J8=q$rFI$s$G$-$F!"?M!9$,=q$$$?;v$rFI$`!"$H$$$C$?$h$&$J%K%e!<\e(B
+\e$B%:%j!<%@!<$NK\Ev$NL\E*$r40A4$KK:$l$F$7$^$C$?$+$bCN$l$^$;$s!#5-;v$rFI$`;v\e(B
+\e$B$G$9!#;DG0$J;v$K!"?M!9$O=q$/;v$OHs>o$K6l<j$H$7$F$$$^$9$N$G!"5-;v$rFI$_$d\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
+@end menu
+
+
+@node Article Highlighting
+@subsection \e$B5-;v$N%O%$%i%$%H\e(B
+@cindex highlight
+
+\e$B5-;v%P%C%U%!$r2LJ*%5%i%@$N$h$&$K$7$?$$$@$1$G$J$/!"2Z$d$+$J2LJ*%5%i%@$N$h\e(B
+\e$B$&$K8+$($k$h$&$K$7$?$$$G$7$g$&!#\e(B
+
+@table @kbd
+
+@item W H a
+@kindex W H a \e$B!J35N,!K\e(B
+@findex gnus-article-highlight
+\e$B8=:_$N5-;v$r%O%$%i%$%H\e(B (highlight) \e$B$7$^$9\e(B
+(@code{gnus-article-highlight})\e$B!#\e(B
+
+@item W H h
+@kindex W H h \e$B!J35N,!K\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%$%i\e(B
+\e$B%$%H$OJQ?t\e(B @code{gnus-header-face-alist} \e$B$K$7$?$,$C$F$J$5$l!"$=$l$O$=$l$>\e(B
+\e$B$l$NMWAG$,\e(B @var{(\e$B@55,I=8=\e(B \e$BL>A0\e(B \e$BFbMF\e(B)} \e$B$H$$$&MM<0$N%j%9%H$G$9!#\e(B @var{\e$B@55,I=\e(B
+\e$B8=\e(B}\e$B$O%X%C%@!<$K9gCW$9$k@55,I=8=!"\e(B@var{\e$BL>A0\e(B}\e$B$O%X%C%@!<$NL>A0$r%O%$%i%$%H$9\e(B
+\e$B$k$N$K;H$o$l$k%U%'%$%9\e(B (face) (@pxref{FacesandFonts})\e$B!"\e(B@var{\e$BFbMF\e(B}\e$B$O%X%C%@!<\e(B
+\e$B$NCM$r%O%$%i%$%H$9$k%U%'%$%9$G$9!#:G=i$K9gCW$7$?$b$N$,;H$o$l$^$9!#\e(B@var{\e$B@5\e(B
+\e$B5,I=8=\e(B}\e$B$O\e(B @samp{^} \e$B$,IU$1$i$l$k$Y$-$G$O$J$$;v$KCm0U$7$F$/$@$5$$!=!=\e(Bgnus \e$B$,\e(B
+\e$B$=$l$rIU$12C$($^$9!#\e(B
+
+@item W H c
+@kindex W H c \e$B!J35N,!K\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
+
+@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
+
+@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
+
+@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
+
+@item gnus-cite-face-list
+@vindex gnus-cite-face-list
+\e$B0zMQ$r%O%$%i%$%H$9$k$?$a$K;H$o$l$k%U%'%$%9$N%j%9%H$G$9\e(B (@pxref{Faces and
+Fonts})\e$B!#F1$8%a%C%;!<%8$NCf$KJ#?t$N5-;v$+$i$N0zMQ$,$"$k$H!"\e(Bgnus \e$B$O$=$l$>\e(B
+\e$B$l$N5-;v$+$i$N0zMQ$r$=$lMQ$N%U%'%$%9$GI=<($7$h$&$H$7$^$9!#$3$l$K$h$j!"C/\e(B
+\e$B$,2?$r=q$$$?$+$,J,$+$j$d$9$/$J$k$G$7$g$&!#\e(B
+
+@item gnus-supercite-regexp
+@vindex gnus-supercite-regexp
+\e$BIaDL$N\e(B Supercite \e$BB0@-9T$K9gCW$9$k@55,I=8=$G$9!#\e(B
+
+@item gnus-supercite-secondary-regexp
+@vindex gnus-supercite-secondary-regexp
+\e$B0z$-Nv$+$l$?\e(B Supercite \e$BB0@-9T$K9gCW$9$k@55,I=8=$G$9!#\e(B
+
+@item gnus-cite-minimum-match-count
+@vindex gnus-cite-minimum-match-count
+\e$B$=$l$,0zMQ$G$"$k$H7hDj$9$kA0$KD4$Y$J$1$l$P$J$i$J$$:G>.$NF10l@\F,8l$G$9!#\e(B
+
+@item gnus-cite-attribution-prefix
+@vindex gnus-cite-attribution-prefix
+\e$BB0@-9T$N;O$^$j$K9gCW$9$k@55,I=8=$G$9!#\e(B
+
+@item gnus-cite-attribution-suffix
+@vindex gnus-cite-attribution-suffix
+\e$BB0@-9T$N:G8e$K9gCW$9$k@55,I=8=$G$9!#\e(B
+
+@item gnus-cite-attribution-face
+@vindex gnus-cite-attribution-face
+\e$BB0@-9T$K;H$o$l$k%U%'%$%9$G$9!#$=$NB0@-$KB0$9$kJ8$N$?$a$N%U%'%$%9$HM;9g$5\e(B
+\e$B$l$^$9!#\e(B
+
+@end table
+
+
+@item W H s
+@kindex W H s \e$B!J35N,!K\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
+@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!#\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!<%:$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$N$h$&$J$b$N$r\e(B
+\e$B;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$h$&$K$G$-\e(B
+\e$B$^$9!#\e(B
+
+@vindex gnus-article-emphasis
+\e$B6/D4$,$I$N$h$&$K1i;;$5$l$k$+$OJQ?t\e(B @code{gnus-article-emphasis} \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!##2\e(B
+\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$+$r\e(B
+\e$B<($9?t;z$G$9!##3HVL\$O$I$N@55,I=8=$N%0%k!<%W$,I=<($5$l%O%$%i%$%H$5$l$k$+$r\e(B
+\e$B7h$a$k?t;z$G$9!#!J$3$N#2$D$N%0%k!<%W$N4V$N5-;v$O1#$5$l$^$9!#!K#4HVL\$O%O%$\e(B
+\e$B%i%$%H$N%U%'%$%9$G$9!#\e(B
+
+@lisp
+(setq gnus-article-emphasis
+      '(("_\\(\\w+\\)_" 0 1 gnus-emphasis-underline)
+        ("\\*\\(\\w+\\)\\*" 0 1 gnus-emphasis-bold)))
+@end lisp
+
+@vindex gnus-emphasis-underline
+@vindex gnus-emphasis-bold
+@vindex gnus-emphasis-italic
+@vindex gnus-emphasis-underline-bold
+@vindex gnus-emphasis-underline-italic
+@vindex gnus-emphasis-bold-italic
+@vindex gnus-emphasis-underline-bold-italic
+\e$B%G%#%U%)%k%H$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$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
+
+@lisp
+(copy-face 'red 'gnus-emphasis-italic)
+@end lisp
+
+
+@node Article Hiding
+@subsection \e$B5-;v$r1#$9\e(B
+@cindex article hiding
+
+\e$B$b$7$/$O!"$=$l$>$l$N5-;v$NFCDj$N$b$N$r1#$7$?$$$+$b$7$l$^$;$s!#$?$$$F$$$N\e(B
+\e$B5-;v$K$OIaDL$O$"$j$9$.$k$/$i$$:n$j$+$($k$b$N$,$"$j$^$9!#\e(B
+
+@table @kbd
+
+@item W W a
+@kindex W W a \e$B!J35N,!K\e(B
+@findex gnus-article-hide
+\e$B35N,%P%C%U%!$G:GBg8B1#$7$^$9\e(B (@kbd{gnus-article-hide})\e$B!#\e(B
+
+@item W W h
+@kindex W W h \e$B!J35N,!K\e(B
+@findex gnus-article-hide-headers
+\e$B%X%C%@!<$r1#$7$^$9\e(B (@code{gnus-article-hide-headers})\e$B!#\e(B @xref{Hiding
+Headers}.
+
+@item W W b
+@kindex W W b \e$B!J35N,!K\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}.
+
+@item W W s
+@kindex W W s \e$B!J35N,!K\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}.
+
+@item W W p
+@kindex W W p \e$B!J35N,!K\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
+\e$B1#$5$l$?8e$K%U%C%/\e(B @code{gnus-article-hide-pgp-hook} \e$B$,<B9T$5$l$^$9!#\e(B
+
+@item W W P
+@kindex W W P \e$B!J35N,!K\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
+\e$B1#$7$^$9\e(B (@code{gnus-article-hide-pem})\e$B!#\e(B
+
+@item W W c
+@kindex W W c \e$B!J35N,!K\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
+
+@table @code
+
+@item gnus-cite-hide-percentage
+@vindex gnus-cite-hide-percentage
+\e$B0zMQ$5$l$?J8$,$3$NJQ?t!J%G%#%U%)%k%H$G$O\e(B 50\e$B!K$h$jBg$-$$3d9g$N$H$-$O!"0zMQ\e(B
+\e$B$5$l$?J,$r1#$7$^$9!#\e(B
+
+@item gnus-cite-hide-absolute
+@vindex gnus-cite-hide-absolute
+\e$B0zMQ$5$l$?J8$O>/$J$/$H$b$3$ND9$5!J%G%#%U%)%k%H$G$O\e(B 10\e$B!K$G$J$1$l$P1#$5$l$^\e(B
+\e$B$;$s!#\e(B
+
+@item gnus-cited-text-button-line-format
+@vindex gnus-cited-text-button-line-format
+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
+
+@table @samp
+@item b
+\e$B1#$5$l$?J8$N:G=i$N%]%$%s%H$G$9!#\e(B
+@item e
+\e$B1#$5$l$?J8$N:G8e$N%]%$%s%H$G$9!#\e(B
+@item l
+\e$B1#$5$l$?J8$ND9$5$G$9!#\e(B
+@end table
+
+@item gnus-cited-lines-visible
+@vindex gnus-cited-lines-visible
+\e$B0zMQJ8$N:G=i$+$i$NI=<($5$l$k9T?t$G$9!#\e(B
+
+@end table
+
+@item W W C
+@kindex W W C \e$B!J35N,!K\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$,!"\e(B@code{gnus-article-display-hook}
+\e$B$KF~$l$k;v$N$G$-$k<j7Z$J4X?t$G$"$k$G$7$g$&\e(B (@pxref{Customizing
+Articles})\e$B!#\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$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
+
+
+@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\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
+
+@table @kbd
+
+@item W l
+@kindex W l \e$B!J35N,!K\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!#\e(B
+
+@item W r
+@kindex W r \e$B!J35N,!K\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#2HVL\$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
+
+@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 W v
+@kindex W v \e$B!J35N,!K\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
+
+@item W m
+@kindex W m \e$B!J35N,!K\e(B
+@findex gnus-summary-toggle-mime
+\e$B5-;v$r\e(B @sc{mime} \e$B5-;v$H$7$FI=<($9$k$+$I$&$+$r@Z$jBX$($^$9\e(B
+(@code{gnus-summary-toggle-mime})\e$B!#\e(B
+
+@item W o
+@kindex W o \e$B!J35N,!K\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
+@findex gnus-article-treat-dumbquotes
+M******** sm*rtq**t*s \e$B$r=hM}$7$^$9\e(B
+(@code{gnus-article-treat-dumbquotes})\e$B!#\e(B
+
+@item W w
+@kindex W w \e$B!J35N,!K\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!#$b$7$3$N\e(B
+\e$B4X?t$r\e(B @code{gnus-article-display-hook} \e$B$NCf$G;H$C$?>l9g!"$=$l$O$+$J$j8e\e(B
+\e$B$NJ}$G<B9T$5$l$k$Y$-$G!"EvA3$9$Y$F$N%O%$%i%$%H$N8e$K$J$j$^$9!#\e(B
+
+\e$B@^$jJV$7$r$9$k$H$-$K!"I}$r;XDj$9$k$?$a$KL?Na$K?tCM@\F,0z?t$rM?$($k;v$,$G\e(B
+\e$B$-$^$9!#\e(B
+
+@item W c
+@kindex W c \e$B!J35N,!K\e(B
+@findex gnus-article-remove-cr
+\e$B%-%c%j%C%8%j%?!<%s\e(B (CR) (\e$B$9$J$o$A!"9T$N:G8e$N\e(B @samp{^M}) \e$B$r<h$j=|$-$^$9\e(B
+(@code{gnus-article-remove-cr})\e$B!#\e(B
+
+@item W f
+@kindex W f \e$B!J35N,!K\e(B
+@cindex x-face
+@findex gnus-article-display-x-face
+@findex gnus-article-x-face-command
+@vindex gnus-article-x-face-command
+@vindex gnus-article-x-face-too-ugly
+@iftex
+@iflatex
+\include{xface}
+@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
+
+@item W b
+@kindex W b \e$B!J35N,!K\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
+@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
+
+@item W E l
+@kindex W E l \e$B!J35N,!K\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
+
+@item W E m
+@kindex W E m \e$B!J35N,!K\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
+@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
+
+@item W E a
+@kindex W E a \e$B!J35N,!K\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
+
+@item W E A
+@kindex W E A \e$B!J35N,!K\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
+@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
+
+@end table
+
+
+@node Article Buttons
+@subsection \e$B5-;v$N%\%?%s\e(B
+@cindex buttons
+
+\e$B$h$/5-;v$NCf$KB>$N$b$N$X$N;2>H$,F~$l$i$l$k;v$,$"$j$^$9!#$=$7$F!"\e(Bgnus \e$B$,\e(B
+\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#2$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
+
+@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
+
+@lisp
+(REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)
+@end lisp
+
+@table @var
+
+@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
+
+@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
+\e$B$;$s!#$3$l$O@55,I=8=$N$I$NI{I=8=$,%O%$%i%$%H$5$l$k$+$r;XDj$9$kHV9f$G$9!#\e(B
+\e$BA4$F$r%O%$%i%$%H$7$?$$$N$J$i!"$3$3$G\e(B 0 \e$B$r;H$C$F$/$@$5$$!#\e(B
+
+@item use-p
+\e$B$3$N<0$O\e(B @code{\e$BI>2A\e(B} \e$B$5$l!"7k2L$,\e(B @code{nil} \e$B$G$J$1$l$P!"$3$l$O9gCW$G$"\e(B
+\e$B$k$H$_$J$5$l$^$9!#$3$l$O4V0c$C$?9gCW$rHr$1$k$?$a$KFCJL$JA*JL$r$7$?$$$H$-\e(B
+\e$B$KLr$KN)$A$^$9!#\e(B
+
+@item function
+\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
+
+@end table
+
+\e$B$G$9$+$i!"\e(BURL \e$B$r%\%?%s$K$9$k40A4$JF~NOMWAG$O\e(B
+
+@lisp
+("<URL:\\([^\n\r>]*\\)>" 0 t gnus-button-url 1)
+@end lisp
+
+@item gnus-header-button-alist
+@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
+
+@lisp
+(HEADER REGEXP BUTTON-PAR USE-P FUNCTION DATA-PAR)
+@end lisp
+
+@var{HEADER} \e$B$O@55,I=8=$G$9!#\e(B
+
+@item gnus-button-url-regexp
+@vindex gnus-button-url-regexp
+\e$BKd$a9~$^$l$?\e(B URL \e$B$K9gCW$9$k@55,I=8=$G$9!#$=$l$O>e$NJQ?t$N%G%#%U%)%k%H$N\e(B
+\e$BCM$G;H$o$l$^$9!#\e(B
+
+@item gnus-article-button-face
+@vindex gnus-article-button-face
+\e$B%\%?%s$K;H$o$l$k%U%'%$%9$G$9!#\e(B
+
+@item gnus-article-mouse-face
+@vindex gnus-article-mouse-face
+\e$B%^%&%9$N%+!<%=%k$,%\%?%s$N>e$K$"$k$H$-$K;H$o$l$k%U%'%$%9$G$9!#\e(B
+
+@end table
+
+
+@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
+
+@table @kbd
+
+@item W T u
+@kindex W T u \e$B!J35N,!K\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
+@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
+
+@item W T l
+@kindex W T l \e$B!J35N,!K\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
+@vindex gnus-article-time-format
+@findex gnus-article-date-user
+@findex format-time-string
+\e$BF|IU$rMxMQ<TDj5A$NMM<0$r;H$C$FI=<($7$^$9\e(B (@code{gnus-article-date-user})\e$B!#\e(B
+\e$B$=$NMM<0$OJQ?t\e(B @code{gnus-article-time-format} \e$B$G;XDj$5$l!"\e(B
+@code{format-time-string} \e$B$KEO$5$l$kJ8;zNs$G$9!#MM<0;XDj$r$9$k;v$,$G$-$k\e(B
+\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
+@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$N9T$,O"B3$7$F99?7$5$l$k$h$&$K$7$?\e(B
+\e$B$$$N$G$"$l$P!"\e(B
+
+@lisp
+(gnus-start-date-timer)
+@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
+
+@item W T o
+@kindex W T o \e$B!J35N,!K\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)*
+
+@end table
+
+
+@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#2$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
+
+@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
+        "^ *--------*$" ; \e$B#2G\$N$"$!$!!*\e(B
+        "^________*$"   ; \e$B2<@~$b?M5$$,$"$j$^$9\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
+
+@vindex gnus-signature-limit
+@code{gnus-signature-limit} \e$B$O$I$l$,=pL>$H$_$J$5$l$k$+$X$N@)8B$rDs6!$7$^\e(B
+\e$B$9!#\e(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
+@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
+@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
+@item
+\e$B$3$l$,J8;zNs$G$"$l$P!"$=$l$O@55,I=8=$H$7$F;H$o$l$^$9!#$b$7$=$l$,9gCW$9$l\e(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
+
+@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
+
+
+@node Article Commands
+@section \e$B5-;vL?Na\e(B
+
+@table @kbd
+
+@item A P
+@cindex PostScript
+@cindex printing
+@kindex A P \e$B!J35N,!K\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
+
+@end table
+
+
+@node Summary Sorting
+@section \e$B35N,$NJB$SBX$(\e(B
+@cindex summary sorting
+
+\e$B;d$O$I$&$7$F$"$J$?$,$=$&$7$?$$$N$+$O$o$+$i$J$$$N$G$9$,!"$=$l$G$b$"$J$?$O\e(B
+\e$B$?$/$5$s$NJ}K!$G35N,%P%C%U%!$rJB$SBX$($k;v$,$G$-$^$9!#\e(B
+
+@table @kbd
+
+@item C-c C-s C-n
+@kindex C-c C-s C-n \e$B!J35N,!K\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
+@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
+@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
+@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
+@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
+
+@item C-c C-s C-i
+@kindex C-c C-s C-i \e$B!J35N,!K\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
+
+\e$B$3$l$i$N4X?t$O%9%l%C%I$r;H$C$F$$$k$H$-$H;H$C$F$$$J$$$H$-$NN>J}$GF0:n$7$^\e(B
+\e$B$9!#8e<T$N>l9g$O!"$9$Y$F$N35N,9T$,0l9T0l9TJB$SBX$($i$l$^$9!#A0<T$N>l9g$O!"\e(B
+\e$B:,K\$H:,K\$r4pK\$H$7$FJB$SBX$($i$l!"$=$l$O$"$J$?$,5a$a$F$$$k;v$H$O0[\e(B
+\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
+@cindex referring articles
+
+@table @kbd
+@item ^
+@kindex ^ \e$B!J35N,!K\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@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
+
+@item A R \e$B!J35N,!K\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
+
+@item A T \e$B!J35N,!K\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
+@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
+
+@item M-^ \e$B!J35N,!K\e(B
+@findex gnus-summary-refer-article
+@kindex M-^ \e$B!J35N,!K\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$"$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
+
+@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$[$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
+
+@node Alternative Approaches
+@section \e$BBeBX<jCJ\e(B
+
+\e$B0c$C$??M$O0c$C$?J}K!$r;H$C$F%K%e!<%:$rFI$b$&$H$7$^$9!#$3$l$O\e(B gnus \e$B$G$b$=\e(B
+\e$B$&$G$"$k$N$G!"2f!9$O35N,%P%C%U%!!<$N$?$a$N%^%$%J!<%b!<%I\e(B (minor mode) \e$B$K\e(B
+\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
+@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#2Aj$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
+
+@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
+
+\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
+@findex gnus-summary-mark-as-processable
+\e$B8=:_$N9T$N5-;v$rA*Br$7$^$9\e(B (@code{gnus-summary-mark-as-processable})\e$B!#?tCM\e(B
+\e$B@\F,0z?t$rM?$($i$l$l$P!"$=$N9T$K0\F0$7$FA*Br$7$^$9!#!J9T?t$OIaDL$O35N,A*Br\e(B
+\e$B9T$N:G=i$KI=<($5$l$F$$$^$9!#!K\e(B
+
+@item SPACE
+@kindex SPACE\e$B!JA*Br!K\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
+@findex gnus-summary-unmark-as-processable
+\e$B5-;v$rL$A*Br$K$7$^$9\e(B (@code{gnus-summary-unmark-as-processable})\e$B!#\e(B
+
+@item U
+@kindex U \e$B!JA*Br!K\e(B
+@findex gnus-summary-unmark-all-processable
+\e$B$9$Y$F$N5-;v$rL$A*Br$K$7$^$9\e(B
+(@code{gnus-summary-unmark-all-processable})\e$B!#\e(B
+
+@item t
+@kindex t \e$B!JA*Br!K\e(B
+@findex gnus-uu-mark-thread
+\e$B%9%l%C%I$rA*Br$7$^$9\e(B (@code{gnus-uu-mark-thread})\e$B!#\e(B
+
+@item T
+@kindex T \e$B!JA*Br!K\e(B
+@findex gnus-uu-unmark-thread
+\e$B%9%l%C%I$rL$A*Br$K$7$^$9\e(B (@code{gnus-uu-unmark-thread})\e$B!#\e(B
+
+@item r
+@kindex r \e$B!JA*Br!K\e(B
+@findex gnus-uu-mark-region
+\e$BNN0h$rA*Br$7$^$9\e(B (@code{gnus-uu-mark-region})\e$B!#\e(B
+
+@item R
+@kindex R \e$B!JA*Br!K\e(B
+@findex gnus-uu-unmark-region
+\e$BNN0h$rL$A*Br$K$7$^$9\e(B (@code{gnus-uu-unmark-region})\e$B!#\e(B
+
+@item e
+@kindex e \e$B!JA*Br!K\e(B
+@findex gnus-uu-mark-by-regexp
+\e$B@55,I=8=$K9gCW$9$k5-;v$rA*Br$7$^$9\e(B (@code{gnus-uu-mark-by-regexp})\e$B!#\e(B
+
+@item E
+@kindex E \e$B!JA*Br!K\e(B
+@findex gnus-uu-unmrak-by-regexp
+\e$B@55,I=8=$K9gCW$9$k5-;v$rL$A*Br$K$7$^$9\e(B (@code{gnus-uu-unmark-by-regexp})\e$B!#\e(B
+
+@item b
+@kindex b \e$B!JA*Br!K\e(B
+@findex gnus-uu-mark-buffer
+\e$B%P%C%U%!$rA*Br$7$^$9\e(B (@code{gnus-uu-mark-buffer})\e$B!#\e(B
+
+@item B
+@kindex B \e$B!JA*Br!K\e(B
+@findex gnus-uu-unmark-buffer
+\e$B%P%C%U%!$rL$A*Br$K$7$^$9\e(B (@code{gnus-uu-unmark-buffer})\e$B!#\e(B
+
+@item RET
+@kindex RET \e$B!JA*Br!K\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
+\e$B$rM?$($i$l$l$P!"$^$:$9$Y$F$NL$A*Br5-;v$K4{FI$N0u$rIU$1$^$9!#\e(B
+@code{gnus-pick-display-summary} \e$B$,\e(B @code{nil} \e$B$G$J$$$H!"35N,%P%C%U%!$O\e(B
+\e$BFI$s$G$$$k4V$bI=<($5$l$^$9!#\e(B
+
+@end table
+
+\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)
+@end lisp
+
+@vindex gnus-pick-mode-hook
+@code{gnus-pick-minor-mode-hook} \e$B$O\e(B pick \e$B%^%$%J!<%b!<%I%P%C%U%!$G<B9T$5\e(B
+\e$B$l$^$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
+
+
+@node Binary Groups
+@subsection \e$B%P%$%J%j!<%0%k!<%W\e(B
+@cindex binary groups
+
+@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
+
+@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
+
+@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$A$m$s!"LZI=<($r%+%9%?%^%$%:$9$kJQ?t$,>/$7$"$j$^$9!'\e(B
+
+@table @code
+@item gnus-tree-mode-hook
+@vindex gnus-tree-mode-hook
+\e$B$9$Y$F$NLZ%b!<%I%P%C%U%!$G<B9T$5$l$k%U%C%/$G$9!#\e(B
+
+@item gnus-tree-mode-line-format
+@vindex gnus-tree-mode-line-format
+\e$BLZ%b!<%I%P%C%U%!$G$N%b!<%I9T$N$?$a$N%U%)!<%^%C%HJ8;zNs$G$9!#%G%#%U%)%k%H\e(B
+\e$B$O\e(B @samp{Gnus: %%b %S %Z} \e$B$G$9!#;HMQ2DG=$J;XDj$O\e(B 
+@pxref{Summary Buffer ModeLine} \e$B$r;2>H$7$F$/$@$5$$!#\e(B
+
+@item gnus-selected-tree-face
+@vindex gnus-selected-tree-face
+\e$BLZ%P%C%U%!$GA*Br$5$l$?5-;v$r%O%$%i%$%H$9$k$?$a$K;H$o$l$k%U%'%$%9$G$9!#%G%#\e(B
+\e$B%U%)%k%H$G$O\e(B @code{modeline} \e$B$G$9!#\e(B
+
+@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$BM-8z$J;XDj$O!'\e(B
+
+@table @samp
+@item n
+\e$BEj9F<T$NL>A0!#\e(B
+@item f
+@code{From} \e$BMs!#\e(B
+@item N
+\e$B5-;v$NHV9f!#\e(B
+@item [
+\e$B3+$-3g8L!#\e(B
+@item ]
+\e$BJD$83g8L!#\e(B
+@item s
+\e$BI=Bj!#\e(B
+@end table
+
+@xref{Formatting Variables}\e$B!#\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 
+@var{((\e$BK\Ev$N3+\e(B . \e$BK\Ev$NJD\e(B) (\e$B$^$P$i3+\e(B . \e$B$^$P$iJD\e(B) (\e$B56$N3+\e(B . \e$B56$NJD\e(B))}
+\e$B$H$J$C$F$$$F!"%G%#%U%)%k%H$O\e(B 
+@code{((?[ . ?]) (?( . ?)) (?@{ . ?@}) (?< . ?>))} \e$B$G$9!#\e(B
+
+@item gnus-tree-parent-child-edges
+@vindex gnus-tree-parent-child-edges
+\e$B$3$l$O?F$N@a$r;R$K@\B3$9$k$?$a$K;H$o$l$kJ8;z$r4^$s$@%j%9%H$G$9!#%G%#%U%)\e(B
+\e$B%k%H$O\e(B @code{(?- ?\\ ?|)} \e$B$G$9!#\e(B
+
+@end table
+
+@item gnus-tree-minimize-window
+@vindex gnus-tree-minimize-winodw
+\e$B$b$7$3$NJQ?t$,\e(B @code{nil} \e$B$G$J$$$H!"B>$N\e(B gnus \e$B%&%#%s%I%&$,$b$C$H>l=j$r<h\e(B
+\e$B$l$k$h$&$K\e(B gnus \e$B$OLZ%P%C%U%!$r$G$-$k$@$1>.$5$/$7$^$9!#$b$7$3$NJQ?t$,?t;z\e(B
+\e$B$G$"$k$H!"LZ%P%C%U%!$O$=$N?t;z$h$jBg$-$/$J$k;v$O$"$j$^$;$s!#%G%#%U%)%k%H\e(B
+\e$B$O\e(B @code{t} \e$B$G$9!#%U%l!<%`$G$$$/$D$+$N%&%#%s%I%&$,2#$KJB$s$GI=<($5$l$F$$\e(B
+\e$B$F!"LZ%P%C%U%!$,$=$N$&$A$N0l$D$G$"$k>l9g!"LZ%&%#%s%I%&$r:G>.2=$9$k$3$H$O\e(B
+\e$B$=$NNY$KI=<($5$l$F$$$k$9$Y$F$N%&%#%s%I%&$NBg$-$5$rJQ99$9$k;v$KCm0U$7$F$/\e(B
+\e$B$@$5$$!#\e(B
+
+@item gnus-generate-tree-function
+@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!##2$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
+
+@end table
+
+\e$B?eJ?LZ%P%C%U%!\e(B (horizontal tree buffer) \e$B$NNc$G$9!'\e(B
+
+@example
+@{***@}-(***)-[odd]-[Gun]
+     |      \[Jan]
+     |      \[odd]-[Eri]
+     |      \(***)-[Eri]
+     |            \[odd]-[Paa]
+     \[Bjo]
+     \[Gun]
+     \[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
+
+@example
+@{***@}
+  |--------------------------\-----\-----\
+(***)                         [Bjo] [Gun] [Gun]
+  |--\-----\-----\                          |
+[odd] [Jan] [odd] (***)                   [Jor]
+  |           |     |--\
+[Gun]       [Eri] [Eri] [odd]
+                          |
+                        [Paa]
+@end example
+
+\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
+
+@lisp
+(setq gnus-use-trees t
+      gnus-generate-tree-function 'gnus-generate-horizontal-tree
+      gnus-tree-minimize-window nil)
+(gnus-add-configuration
+ '(article
+   (vertical 1.0
+             (horizontal 0.25
+                         (summary 0.75 point)
+                         (tree 1.0))
+             (article 1.0))))
+@end lisp
+
+@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
+
+\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
+
+@table @kbd
+
+@item B e
+@kindex B e \e$B!J35N,!K\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
+
+@item B M-C-e
+@kindex B M-C-e \e$B!J35N,!K\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
+
+@item B DEL
+@kindex B DEL \e$B!J35N,!K\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
+
+@item B m
+@kindex B m \e$B!J35N,!K\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
+
+@item B c
+@kindex B c \e$B!J35N,!K\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
+
+@item B B
+@kindex B B \e$B!J35N,!K\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
+
+@item B i
+@kindex B i \e$B!J35N,!K\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
+
+@item B r
+@kindex B r \e$B!J35N,!K\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
+
+@item B w
+@itemx e
+@kindex B w \e$B!J35N,!K\e(B
+@kindex e \e$B!J35N,!K\e(B
+@findex gnus-summary-edit-article
+@kindex C-c C-c \e$B!J5-;v!K\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
+
+@item B q
+@kindex B q \e$B!J35N,!K\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
+
+@item B p
+@kindex B p \e$B!J35N,!K\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
+
+@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
+
+@lisp
+(setq gnus-move-split-methods
+      '(("^From:.*Lars Magne" "nnml:junk")
+        ("^Subject:.*gnus" "nnfolder:important")
+        (".*" "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
+@end menu
+
+@table @code
+@vindex gnus-summary-mode-hook
+@item gnus-summary-mode-hook
+\e$B35N,%b!<%I%P%C%U%!$r:n@.$9$k$H$-$K$3$N%U%C%/$,8F$P$l$^$9!#\e(B
+
+@vindex gnus-summary-generate-hook
+@item gnus-summary-generate-hook
+\e$B$3$l$O%9%l%C%I:n@.$H35N,%P%C%U%!:n@.$NA0$K<B9T$9$k:G8e$N$b$N$H$7$F8F$P$l\e(B
+\e$B$^$9!#$3$l$O%K%e!<%:%0%k!<%W$N;}$C$F$$$k%G!<%?$K4p$E$$$F%9%l%C%I$NJQ?t$r\e(B
+\e$B%+%9%?%^%$%:$9$k$?$a$KHs>o$KJXMx$G$9!#$3$N%U%C%/$O$[$H$s$I$N35N,%P%C%U%!\e(B
+\e$BJQ?t$,@_Dj$5$l$?8e$K8F$P$l$^$9!#\e(B
+
+@vindex gnus-summary-prepare-hook
+@item gnus-summary-prepare-hook
+\e$B$=$l$O35N,%P%C%U%!$,:n@.$5$l$?8e$K8F$P$l$^$9!#Nc$($P!"$=$l$O2?$+B>$N<Y0-\e(B
+\e$B$JJ}K!$G9T$r%O%$%i%$%H$7$?$j!"%P%C%U%!$N8+$(J}$r=$@5$7$?$j$9$k$N$K;H$C$?\e(B
+\e$B$j$9$k$+$bCN$l$^$;$s!#\e(B
+
+@vindex gnus-summary-ignore-duplicates
+@item gnus-summary-ignore-duplicates
+Gnus \e$B$,F1$8\e(B @code{Message-ID} \e$B$r;}$D#2$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
+
+@end table
+
+
+@node Summary Group Information
+@subsection \e$B35N,%0%k!<%W>pJs\e(B
+
+@table @kbd
+
+@item H f
+@kindex H f \e$B!J35N,!K\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
+
+@item H d
+@kindex H d \e$B!J35N,!K\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
+
+@item H h
+@kindex H h \e$B!J35N,!K\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
+
+@item H i
+@kindex H i \e$B!J35N,!K\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
+@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
+
+@item M-r
+@kindex M-r \e$B!J35N,!K\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
+
+@item &
+@kindex & \e$B!J35N,!K\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
+
+@item M-&
+@kindex M-& \e$B!J35N,!K\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
+@end table
+
+@node Summary Generation Commands
+@subsection \e$B35N,@8@.L?Na\e(B
+
+@table @kbd
+
+@item Y g
+@kindex Y g \e$B!J35N,!K\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
+@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
+
+@end table
+
+
+@node Really Various Summary Commands
+@subsection \e$BK\Ev$K$$$m$$$m$J35N,L?Na\e(B
+
+@table @kbd
+
+@item C-d
+@kindex C-d \e$B!J35N,!K\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
+
+@item M-C-d
+@kindex M-C-d \e$B!J35N,!K\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
+
+@item C-t
+@kindex C-t \e$B!J35N,!K\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
+@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
+
+@item M-C-e
+@kindex M-C-e \e$B!J35N,!K\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
+
+@end table
+
+
+@node Exiting the Summary Buffer
+@section \e$B35N,%P%C%U%!$rH4$1$k\e(B
+@cindex summary exit
+@cindex exiting groups
+
+\e$BIaDL$O35N,%P%C%U%!$+$iH4$1$k$H!"%0%k!<%W$NA4$F$N>pJs$r99?7$7$F%0%k!<%W%P%C\e(B
+\e$B%U%!$KLa$j$^$9!#\e(B
+
+@table @kbd
+
+@item Z Z
+@itemx q
+@kindex Z Z (Summary)
+@findex q \e$B!J35N,!K\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
+
+@item Z E
+@itemx Q 
+@kindex Z E \e$B!J35N,!K\e(B
+@findex Q \e$B!J35N,!K\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
+
+@item Z c
+@itemx c
+@kindex Z c \e$B!J35N,!K\e(B
+@kindex c \e$B!J35N,!K\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
+@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
+
+@item Z n
+@kindex Z n \e$B!J35N,!K\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
+
+@item Z R
+@kindex Z R \e$B!J35N,!K\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
+
+@item Z G
+@itemx M-g
+@kindex Z G \e$B!J35N,!K\e(B
+@kindex M-g \e$B!J35N,!K\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
+
+@item Z N
+@kindex Z N \e$B!J35N,!K\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
+
+@item Z P
+@kindex Z P \e$B!J35N,!K\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
+
+@item Z s
+@kindex Z s \e$B!J35N,!K\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-newrc})\e$B!#\e(B
+\e$B$b$7@\F,0z?t$rM?$($i$l$l$P!"%U%!%$%k\e(B @file{.newsrc} \e$B$bJ]B8$7$^$9!#$3$NL?\e(B
+\e$BNa$r;H$&$H!"99?7$J$7$GH4$1=P$k;v\e(B (@kbd{Q} \e$BL?Na\e(B) \e$B$O0UL#$,L5$/$J$j$^$9!#\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
+
+@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-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;`$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
+
+
+@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#22s0J>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
+
+@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
+
+@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
+
+@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
+@code{gnus-nov-is-evil} \e$B$r\e(B @code{t} \e$B$K$9$kI,MW$,$"$j!"$=$l$OHs>o$KB.EY$r\e(B
+\e$BCY$/$7$^$9!#\e(B
+
+\e$B$^!"?M@8$O$=$N$h$&$J$b$N$G$9!#\e(B
+
+\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#22s0J\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
+
+@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
+
+@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
+
+@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$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
+
+\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=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
+
+@table @code
+@item gnus-suppress-duplicates
+@vindex gnus-suppress-duplicates
+@code{nil} \e$B$G$J$1$l$P!"=EJ#M^@)$r$7$^$9!#\e(B
+
+@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
+
+@item gnus-duplicate-list-length
+@vindex gnus-duplicate-list-length
+\e$B$3$NJQ?t$O$I$N$/$i$$B?$/$N\e(B @code{Message-ID} \e$B$r=EJ#M^@)%j%9%H$KJ]$C$F$*\e(B
+\e$B$/$+$b7hDj$7$^$9!#%G%#%U%)%k%H$O\e(B 10000 \e$B$G$9!#\e(B
+
+@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
+@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
+@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
+
+@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
+@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
+
+@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
+
+Gnus \e$B$O%X%C%@!<$rA*$jJ,$1$k$?$a$K#2$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$BNc$($P!"5-;v$r=q$$$??M$NL>A0$HI=Bj$N$_$r8+$?$1$l$P!"$3$&;XDj$7$^$9!#\e(B
+
+@lisp
+(setq gnus-visible-headers "^From:\\|^Subject:")
+@end lisp
+
+\e$B$3$NJQ?t$O!"I=<($5$;$?$$%X%C%@!<$K%^%C%A$9$k@55,I=8=$r%j%9%H$G;X\e(B
+\e$BDj$9$k$3$H$b$G$-$^$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$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
+
+@lisp
+(setq gnus-ignored-headers "^References:\\|^Xref:")
+@end lisp
+
+\e$B$3$NJQ?t$O>C$7$?$$%X%C%@!<$K%^%C%A$9$k@55,I=8=$N%j%9%H$G$b9=$$$^\e(B
+\e$B$;$s!#\e(B
+
+\e$B$J$*!"\e(B@code{gnus-visible-headers} \e$B$,\e(B @code{nil} \e$B0J30$N>l9g$O!"$3\e(B
+\e$B$NJQ?t$K$O8z2L$,L5$$$3$H$KCm0U$7$F$/$@$5$$!#\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
+
+\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
+
+@lisp
+(setq gnus-sorted-header-list '("^From:" "^Subject:"))
+@end lisp
+
+\e$BI=<($9$k$h$&$K$J$C$F$$$k%X%C%@!<$G$3$NJQ?t$K;XDj$5$l$F$$$J$$$b$N\e(B
+\e$B$O!"$3$NJQ?t$K;XDj$5$l$F$$$kA4$F$N%X%C%@!<$N8e$K!"E,Ev$J=g=x$GI=\e(B
+\e$B<($5$l$k$G$7$g$&!#\e(B
+
+@findex gnus-article-hide-boring-headers
+@vindex gnus-article-display-hook
+@vindex gnus-boring-article-headers
+@code{gnus-article-hide-boring-headers} \e$B$r\e(B
+@code{gnus-article-display-hook} \e$B$KF~$l$k$3$H$K$h$C$F!"$b$C$H$D\e(B
+\e$B$^$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\e(B
+\e$B%j%9%H$G$9$,!"$3$N%j%9%H$K$O<B:]$N%X%C%@!<$NL>A0$,F~$k$N$G$O$"$j\e(B
+\e$B$^$;$s!#Be$o$j$K\e(B gnus \e$B$,%A%'%C%/$7$F;k3&$+$i>C$75n$k$?$a$N$5$^$6\e(B
+\e$B$^$J!V$D$^$i$J$$>r7o!W\e(B@dfn{boring conditions} \e$B$N%j%9%H$r;XDj$7$^\e(B
+\e$B$9!#\e(B
+
+\e$B$3$N>r7o$K$O0J2<$N$h$&$J$b$N$,$"$j$^$9!#\e(B
+@table @code
+@item empty
+\e$B6u$N%X%C%@!<$rA4$F>C5n$7$^$9!#\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
+@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
+@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
+@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
+
+@lisp
+(setq gnus-boring-article-headers
+      '(empty newsgroups followup-to reply-to))
+@end lisp
+
+\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}
+
+\e$B%Q%s%H%^%$%`\e(B (mime) \e$B$H$O!"0UL#$bL5$/6uCf$G<j$r?6$k$b$N$H$7$F9-$/\e(B
+\e$BCN$i$l$F$*$j!"$=$N4V4Q5R$O$"$/$S$r$7$J$,$i$\$s$d$j$H$7$F$^$9!#\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!<%:%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
+
+@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
+
+
+@node Customizing Articles
+@section \e$B5-;v$N%+%9%?%^%$%:\e(B
+@cindex article customization
+
+@vindex gnus-article-display-hook
+@code{gnus-article-display-hook} \e$B$O5-;v$,5-;v%P%C%U%!$K=q$-9~$^\e(B
+\e$B$l$?D>8e$K8F$S=P$5$l$^$9!#$3$l$O5-;v$,I=<($5$l$kA0$N=hM}$rA4$F07\e(B
+\e$B$&!"$H$$$&$3$H$G$9!#\e(B
+
+@findex gnus-article-maybe-highlight
+\e$B%G%#%U%)%k%H$G$O$3$N%U%C%/$K$O\e(B @code{gnus-article-hide-headers}\e$B!"\e(B
+@code{gnus-article-treat-overstrike},
+@code{gnus-article-maybe-highlight} \e$B$@$1$,4^$^$l$F$$$^$9$,!"$3$N%U%C%/$KF~\e(B
+\e$B$l$k$3$H$,$G$-$k4X?t$O2?@i$b!"$$$d2?I4K|$b$"$j$^$9!#3F4X?t$N354Q$O\e(B
+@pxref{Article Highlighting}, @pxref{Article Hiding}, @pxref{Article
+Washing}, @pxref{Article Buttons}, @pxref{Article Date} \e$B$r;2>H$7$F$/$@$5$$!#\e(B
+\e$BCm0UE@$H$7$F!"$3$N%U%C%/$G$O4X?t$N=g=x$,1F6A$9$k$3$H$,$"$k$N$G!"$*K>$_$N7k\e(B
+\e$B2L$rF@$k$K$O$A$g$C$H<j4V<h$C$F$7$^$&$+$b$7$l$^$;$s!#\e(B
+
+\e$B$b$A$m$s!"$"$J$?FH<+$N4X?t$r=q$/$3$H$b$G$-$^$9!#$3$N4X?t$O5-;v%P%C%U%!Fb$+\e(B
+\e$B$i8F$S=P$5$l!"$"$J$?$N$d$j$?$$$3$H$r$[$H$s$I2?$G$b$G$-$^$9!#%P%C%U%!$K;D$7\e(B
+\e$B$F$*$+$J$1$l$P$J$i$J$$>pJs$O2?$b$"$j$^$;$s!=!=2?$G$bJQ99$9$k$3$H$,$G$-$^$9!#\e(B
+\e$B$G$9$,!"%X%C%@!<$O>C5n$7$J$$J}$,NI$$$G$9!#$=$NBe$o$j!"%X%C%@!<$r$I$3$+$K$d$C\e(B
+\e$B$F$7$^$$$?$1$l$P!"$=$l$i$r8+$($J$$$h$&$K$7$F$/$@$5$$!#\e(B
+
+@node Article Keymap
+@section \e$B5-;v$N%-!<A`:n\e(B
+
+\e$B35N,%P%C%U%!$K$*$1$k%-!<A`:n$N$[$H$s$I$O5-;v%P%C%U%!$G$b;HMQ$G$-\e(B
+\e$B$^$9!#$3$l$i$O35N,%P%C%U%!$G$=$N%-!<$r2!$7$?$+$N$h$&$KF0:n$7$^$9!#\e(B
+\e$B$D$^$j!"<B$O5-;v$rFI$s$G$$$k4V!"35N,%P%C%U%!$rI=<($5$;$F$*$/I,MW\e(B
+\e$B$b$J$$$H$$$&$3$H$G$9!#A4$F$NA`:n$O5-;v%P%C%U%!$+$i9T$&$3$H$,$G$-\e(B
+\e$B$k$N$G$9!#\e(B
+
+\e$B$=$l$i$K2C$($F$$$/$D$+$N%-!<A`:n$,MxMQ$G$-$^$9!#\e(B
+
+@table @kbd
+
+@item SPACE
+@kindex SPACE (Article)
+@findex gnus-article-next-page
+\e$B0lJGA0$K$a$/$j$^$9\e(B (@code{gnus-article-next-page})\e$B!#\e(B
+
+@item DEL
+@kindex DEL (Article)
+@findex gnus-article-prev-page
+\e$B0lJG8e$m$KLa$7$^$9\e(B (@code{gnus-article-prev-page})\e$B!#\e(B
+
+@item C-c ^
+@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{r} \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
+
+@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
+
+@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
+
+@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
+
+@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
+
+@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
+
+@end table
+
+
+@node Misc Article
+@section \e$B5-;v$N$=$NB>\e(B
+
+@table @code
+
+@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
+
+@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
+
+@vindex gnus-article-display-hook
+@item gnus-article-display-hook
+\e$B$3$N%U%C%/$O5-;v$rI=<($9$k$H$-$N:G8e$K8F$S=P$5$l$k$h$&$K$J$C$F$$\e(B
+\e$B$F!"5-;v%P%C%U%!$NFbMF$N=$@5!"%O%$%i%$%H=hM}!"%X%C%@!<$r1#$9!"$J\e(B
+\e$B$I$H$$$C$?$3$H$r9T$&$?$a$KMQ0U$5$l$F$$$^$9!#\e(B
+
+@item gnus-article-mode-hook
+@vindex gnus-article-mode-hook
+\e$B5-;v%b!<%I%P%C%U%!$G8F$S=P$5$l$k%U%C%/$G$9!#\e(B
+
+@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
+
+@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$?\e(B
+\e$BMM<0J8;zNs$G$9!#$3$l$O0J2<$N0l$D$N3HD%$r=|$$$F!"$=$NJQ?t$HF1$8MM\e(B
+\e$B<0;XDj$r<uIU$1$^$9!#\e(B
+
+@table @samp
+@item w
+\e$B5-;v$N!V@vBu>uBV!W\e(B@dfn{wash status}\e$B!#$3$l$O5-;v$KBP$7$F9T$o$l$?\e(B
+\e$B$G$"$m$&@vBuA`:n$r<($90lJ8;z$+$i$J$kC;$$J8;zNs$K$J$j$^$9!#\e(B
+@end table
+
+@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
+
+@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
+@end table
+
+
+@node Composing Messages
+@chapter \e$B%a%C%;!<%8$N:n@.\e(B
+@cindex composing messages
+@cindex messages
+@cindex mail
+@cindex sending mail
+@cindex reply
+@cindex followup
+@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
+
+@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
+* 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
+
+@table @code
+@item gnus-uu-digest-headers
+@vindex gnus-uu-digest-headers
+\e$BMWLs%a%C%;!<%8\e(B (digested message) \e$B$K4^$^$l$k%X%C%@!<$K9gCW$9$k@55,I=8=$N\e(B
+\e$B%j%9%H$G$9!#%X%C%@!<$O9gCW$7$?=g$K<h$j9~$^$l$^$9!#\e(B
+
+@item gnus-add-to-list
+@vindex gnus-add-to-list
+@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
+
+
+@node Post
+@section \e$BEj9F\e(B
+
+\e$B%K%e!<%:5-;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
+
+@item gnus-sent-message-ids-length
+@vindex gnus-sent-messages-ids-length
+\e$B$3$NJQ?t$O$I$l$/$i$$B?$/$N\e(B @code{Message-ID} \e$B$rMzNr%U%!%$%k$KJ];}$9$k$+\e(B
+\e$B$r;XDj$7$^$9!#%G%#%U%)%k%H$G$O\e(B 1000 \e$B$G$9!#\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?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
+
+@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$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
+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
+
+@table @code
+@item gnus-mailing-list-groups
+@findex gnus-mailing-list-groups
+@cindex mailing lists
+
+\e$B$b$7$"$J$?$N%K%e!<%:%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
+
+@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
+
+@cindex ispell
+@findex ispell-message
+@lisp
+(add-hook 'message-send-hook 'ispell-message)
+@end lisp
+
+
+@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
+
+@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
+
+@lisp
+(nnfolder "archive"
+          (nnfolder-directory   "~/Mail/archive")
+          (nnfolder-active-file "~/Mail/archive/active")
+          (nnfolder-get-new-mail nil)
+          (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
+
+@lisp
+(setq gnus-message-archive-method
+      '(nnfolder "archive"
+                 (nnfolder-inhibit-expiry t)
+                 (nnfolder-active-file "~/News/sent-mail/active")
+                 (nnfolder-directory "~/News/sent-mail/")))
+@end lisp
+
+@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
+
+\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
+@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
+\e$B%-!<$,!X9gCW!Y$9$k$H!"7k2L$,;H$o$l$^$9!#\e(B
+@item @code{nil}
+\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
+
+@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
+
+\e$B#2$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
+@lisp
+(setq gnus-message-archive-group
+      '(("^alt" "sent-to-alt")
+        ("mail" "sent-to-mail")
+        (".*" "sent-to-misc")))
+@end lisp
+
+\e$B$b$C$HJ#;($J$b$N!'\e(B
+@lisp
+(setq gnus-message-archive-group
+      '((if (message-news-p)
+            "misc-news"
+          "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
+
+@lisp
+(setq gnus-message-archive-group
+      '((if (message-news-p)
+            "misc-news"
+          (concat "mail." (format-time-string
+                           "%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
+
+\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$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
+\e$B$O!"\e(B@code{gnus-message-archive-group} \e$B$r\e(B @code{nil} \e$B$K@_Dj$9$k$Y$-$G$9!#\e(B
+\e$B$3$l$OJ]4I$r$7$J$$$h$&$K$7$^$9!#\e(B
+
+@table @code
+@item gnus-outgoing-message-group
+@vindex gnus-outgoing-message-group
+\e$BA4$F$N30$K$$$/%a%C%;!<%8$O$3$N%0%k!<%W$KF~$l$i$l$^$9!#$b$7A4$F$N30$K9T$/\e(B
+\e$B%a!<%k$H5-;v$r%0%k!<%W\e(B @samp{nnml:archive} \e$B$KJ]4I$7$?$$$N$G$"$l$P!"$3$N\e(B
+\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!<%:%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$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
+
+
+@c @node Posting Styles
+@c @section Posting Styles
+@c @cindex posting styles
+@c @cindex styles
+@c
+@c All them variables, they make my head swim.
+@c
+@c So what if you want a different @code{Organization} and signature based
+@c on what groups you post to?  And you post both from your home machine
+@c and your work machine, and you want different @code{From} lines, and so
+@c on?
+@c
+@c @vindex gnus-posting-styles
+@c One way to do stuff like that is to write clever hooks that change the
+@c variables you need to have changed.  That's a bit boring, so somebody
+@c came up with the bright idea of letting the user specify these things in
+@c a handy alist.  Here's an example of a @code{gnus-posting-styles}
+@c variable:
+@c
+@c @lisp
+@c ((".*"
+@c   (signature . "Peace and happiness")
+@c   (organization . "What me?"))
+@c  ("^comp"
+@c   (signature . "Death to everybody"))
+@c  ("comp.emacs.i-love-it"
+@c   (organization . "Emacs is it")))
+@c @end lisp
+@c
+@c As you might surmise from this example, this alist consists of several
+@c @dfn{styles}.  Each style will be applicable if the first element
+@c ``matches'', in some form or other.  The entire alist will be iterated
+@c over, from the beginning towards the end, and each match will be
+@c applied, which means that attributes in later styles that match override
+@c the same attributes in earlier matching styles.  So
+@c @samp{comp.programming.literate} will have the @samp{Death to everybody}
+@c signature and the @samp{What me?} @code{Organization} header.
+@c
+@c The first element in each style is called the @code{match}.  If it's a
+@c string, then Gnus will try to regexp match it against the group name.
+@c If it's a function symbol, that function will be called with no
+@c arguments.  If it's a variable symbol, then the variable will be
+@c referenced.  If it's a list, then that list will be @code{eval}ed.  In
+@c any case, if this returns a non-@code{nil} value, then the style is said
+@c to @dfn{match}.
+@c
+@c Each style may contain a arbitrary amount of @dfn{attributes}.  Each
+@c attribute consists of a @var{(name . value)} pair.  The attribute name
+@c can be one of @code{signature}, @code{organization} or @code{from}.  The
+@c attribute name can also be a string.  In that case, this will be used as
+@c a header name, and the value will be inserted in the headers of the
+@c article.
+@c
+@c The attribute value can be a string (used verbatim), a function (the
+@c return value will be used), a variable (its value will be used) or a
+@c list (it will be @code{eval}ed and the return value will be used).
+@c
+@c So here's a new example:
+@c
+@c @lisp
+@c (setq gnus-posting-styles
+@c       '((".*"
+@c           (signature . "~/.signature")
+@c           (from . "user@@foo (user)")
+@c           ("X-Home-Page" . (getenv "WWW_HOME"))
+@c           (organization . "People's Front Against MWM"))
+@c         ("^rec.humor"
+@c           (signature . my-funny-signature-randomizer))
+@c         ((equal (system-name) "gnarly")
+@c           (signature . my-quote-randomizer))
+@c         (posting-from-work-p
+@c           (signature . "~/.work-signature")
+@c           (from . "user@@bar.foo (user)")
+@c           (organization . "Important Work, Inc"))
+@c         ("^nn.+:"
+@c           (signature . "~/.mail-signature"))))
+@c @end lisp
+
+@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!<%:!K$r=q$$$F$$$k$H$-$K!"FMA3%*!<%V%s$K\e(B
+\e$B%9%F!<%-$,F~$C$F$$$k;v$r;W$$=P$7$?$J$i!J$b$7$/$O!"$"$J$?$,$H!<$C$F$b$9$4$$\e(B
+\e$B: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%8$rJ]B8$9$kJ}K!$,$"$l$PNI$$$H;W$&$G$7$g$&!#$=$&$9$l$P!"$$$D$+JL$NF|$KJT=8\e(B
+\e$B$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
+
+@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$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
+
+@c @findex gnus-dissociate-buffer-from-draft
+@c @kindex C-c M-d (Mail)
+@c @kindex C-c M-d (Post)
+@c @findex gnus-associate-buffer-with-draft
+@c @kindex C-c C-d (Mail)
+@c @kindex C-c C-d (Post)
+@c If you're writing some super-secret message that you later want to
+@c encode with PGP before sending, you may wish to turn the auto-saving
+@c (and association with the draft group) off.  You never know who might be
+@c interested in reading all your extremely valuable and terribly horrible
+@c and interesting secrets.  The @kbd{C-c M-d}
+@c (@code{gnus-dissociate-buffer-from-draft}) command does that for you.
+@c If you change your mind and want to turn the auto-saving back on again,
+@c @kbd{C-c C-d} (@code{gnus-associate-buffer-with-draft} does that.
+@c
+@c @vindex gnus-use-draft
+@c To leave association with the draft group off by default, set
+@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
+
+\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
+
+@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
+
+
+@node Rejected Articles
+@section \e$B5qH]$5$l$?5-;v\e(B
+@cindex rejected articles
+
+\e$B;~!9%K%e!<%:%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$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$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$^$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
+@cindex select methods
+
+@dfn{\e$B30It%0%k!<%W\e(B} (foreign group) \e$B$H$O!"IaDL\e(B (\e$B$b$7$/$O%G%#%U%)%k%H\e(B) \e$B$N\e(B
+\e$BJ}K!$GFI$^$l$J$$%0%k!<%W$N;v$G$9!#Nc$($P!"$=$l$O0c$C$?\e(B @sc{nntp} \e$B%5!<%P!<\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$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%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
+@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$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!<%:$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
+* 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!<%:$H%a!<%k$r%*%U%i%$%s$GFI$`!#\e(B
+@end menu
+
+@node The Server Buffer
+@section \e$B%5!<%P!<%P%C%U%!\e(B
+
+\e$BEAE}E*$K!"\e(B@dfn{\e$B%5!<%P!<\e(B} \e$B$O$=$l$K@\B3$7$F!"$=$l$+$i>pJs$rMW5a$9$k%^%7%s\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
+@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
+
+@node Server Buffer Format
+@subsection \e$B%5!<%P!<%P%C%U%!$NI=<(MM<0\e(B
+@cindex server buffer format
+
+@vindex gnus-server-line-format
+\e$B%5!<%P!<%P%C%U%!$N9T$N308+$r!"JQ?t\e(B @code{gnus-server-line-format} \e$BJQ?t$r\e(B
+\e$BJQ99$9$k;v$K$h$C$FJQ$($k;v$,$G$-$^$9!#$3$l$O\e(B @code{format} \e$B$N$h$&$JJQ?t\e(B
+\e$B$G!"$9$3$7C1=c$J3HD%$,$J$5$l$F$$$^$9\e(B:
+
+@table @samp
+
+@item h
+\e$B$I$N$h$&$K%K%e!<%:$,<hF@$5$l$k$+\e(B---\e$B%P%C%/%(%s%I$NL>A0!#\e(B
+
+@item n
+\e$B%5!<%P!<$NL>A0!#\e(B
+
+@item w
+\e$B$I$3$+$i%K%e!<%:$,<hF@$5$l$k$Y$-$+\e(B---\e$B%"%I%l%9!#\e(B
+
+@item s
+\e$B%5!<%P!<$N@\B3$N\e(B \e$B3+$$$?\e(B/\e$BJD$8$?\e(B/\e$B5qH]$5$l$?\e(B \e$B>uBV!#\e(B
+@end table
+
+@vindex gnus-server-mode-line-format
+\e$B%b!<%I9T$bJQ?t\e(B @code{gnus-server-mode-line-format} \e$B$r;H$&;v$K$h$C$F%+%9\e(B
+\e$B%?%^%$%:$9$k;v$,$G$-$^$9!#0J2<$N;XDj$OM}2r$5$l$^$9\e(B:
+
+@table @samp
+@item S
+\e$B%5!<%P!<L>!#\e(B
+
+@item M
+\e$B%5!<%P!<J}K!!#\e(B
+@end table
+
+@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
+
+@table @kbd
+
+@item a
+@kindex a (\e$B%5!<%P!<\e(B)
+@findex gnus-server-add-server
+\e$B?7$7$$%5!<%P!<$rDI2C$7$^$9\e(B (@code{gnus-server-add-server})\e$B!#\e(B
+
+@item e
+@kindex e (\e$B%5!<%P!<\e(B)
+@findex gnus-server-edit-server
+\e$B%5!<%P!<$rJT=8$7$^$9\e(B (@code{gnus-server-edit-server})\e$B!#\e(B
+
+@item SPACE
+@kindex SPACE (\e$B%5!<%P!<\e(B)
+@findex gnus-server-read-server
+\e$B8=:_$N%5!<%P!<$r$6$C$HD/$a$^$9\e(B (@code{gnus-server-read-server})\e$B!#\e(B
+
+@item q
+@kindex q (\e$B%5!<%P!<\e(B)
+@findex gnus-server-exit
+\e$B%0%k!<%W%P%C%U%!$KLa$j$^$9\e(B (@code{gnus-server-exit})\e$B!#\e(B
+
+@item k
+@kindex k (\e$B%5!<%P!<\e(B)
+@findex gnus-server-kill-server
+\e$B8=:_$N%5!<%P!<$r@Z$j$^$9\e(B (kill) (@code{gnus-server-kill-server})\e$B!#\e(B
+
+@item y
+@kindex y (\e$B%5!<%P!<\e(B)
+@findex gnus-server-yank-server
+\e$B@h$[$I@Z$i$l$?\e(B (killed) \e$B%5!<%P!<$rE=$jIU$1$^$9\e(B (yank)
+(@code{gnus-server-yank-server})\e$B!#\e(B
+
+@item c
+@kindex c (\e$B%5!<%P!<\e(B)
+@findex gnus-server-copy-server
+\e$B8=:_$N%5!<%P!<$rJ#<L$7$^$9\e(B (@code{gnus-server-copy-server})\e$B!#\e(B
+
+@item l
+@kindex l (\e$B%5!<%P!<\e(B)
+@findex gnus-server-list-servers
+\e$BA4$F$N%5!<%P!<$N0lMw$r5s$2$^$9\e(B (@code{gnus-server-list-servers})\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
+
+@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
+
+@end table
+
+
+@node Example Methods
+@subsection \e$BJ}K!$NNc\e(B
+
+\e$B$[$H$s$I$NA*BrJ}K!$OHs>o$K4JC1$G!"<+J,<+?H$r$h$/@bL@$7$F$$$^$9\e(B:
+
+@lisp
+(nntp "news.funet.fi")
+@end lisp
+
+\e$BD>@\%9%W!<%k$+$iFI$`$N$O$b$C$H4JC1$G$9\e(B:
+
+@lisp
+(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$B$3$l$i$N\e(B2\e$B$D$NMWAG$N8e$K$O!"G$0U$N?t$N\e(B @var{(\e$BJQ?t\e(B \e$BMM<0\e(B)} \e$B$NBP$rF~$l$k;v$,\e(B
+\e$B$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:
+
+@lisp
+(nntp "news.funet.fi" (nntp-port-number 15))
+@end lisp
+
+\e$B$I$NJQ?t$,4XO"$9$k$+$r8+$D$1$k$?$a$K!"$=$l$>$l$N%P%C%/%(%s%I$N@bL@J8=q$r\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%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:
+
+@lisp
+(nnmh "private" (nnmh-directory "~/private/mail/"))
+@end lisp
+
+(\e$B$=$&$9$k$H$3$N%5!<%P!<$O\e(B @samp{private} \e$B$H8F$P$l$^$9$,!"$"$J$?$O4{$K?d\e(B
+\e$BB,$7$F$$$?$+$b$7$l$^$;$s!#\e(B)
+
+\e$B$3$l$O8xE*%9%W!<%k$N$?$a$NJ}K!$G$9\e(B:
+
+@lisp
+(nnmh "public"
+      (nnmh-directory "/usr/information/spool/")
+      (nnmh-get-new-mail nil))
+@end lisp
+
+\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$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:
+
+@lisp
+(nntp "firewall"
+      (nntp-address "the.firewall.machine")
+      (nntp-open-connection-function nntp-open-rlogin)
+      (nntp-end-of-line "\n")
+      (nntp-rlogin-parameters
+       ("telnet" "the.real.nntp.host" "nntp")))
+@end lisp
+
+\e$B$b$7!"$9$P$i$7$$\e(B @code{ssh} \e$B%W%m%0%i%`$r!"%b%G%`@~$+$i$N05=L$5$l$?@\B3$r\e(B
+\e$BDs6!$9$k$?$a$K;H$$$?$$$N$G$"$l$P!"$3$N$h$&$J46$8$N;v<B>e$N%5!<%P!<$r:n$k\e(B
+\e$B;v$,$G$-$^$9\e(B:
+
+@lisp
+(nntp "news"
+      (nntp-address "copper.uio.no")
+      (nntp-rlogin-program "ssh")
+      (nntp-open-connection-function nntp-open-rlogin)
+      (nntp-end-of-line "\n")
+      (nntp-rlogin-parameters
+       ("telnet" "news.uio.no" "nntp")))
+@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
+
+
+@node Creating a Virtual Server
+@subsection \e$B;v<B>e$N%5!<%P!<$r:n@.$9$k\e(B
+
+\e$B$b$7$"$J$?$O1JB35-;v$r;H$C$F$?$/$5$s$N5-;v$r%-%c%C%7%e$KJ]B8$7$F$$$k$N$G\e(B
+\e$B$"$l$P!"%-%c%C%7%e$rFI$`$?$a$N;v<B>e$N%5!<%P!<$r:n$j$?$$$H;W$&$+$b$7$l$^\e(B
+\e$B$;$s!#\e(B
+
+\e$B:G=i$K!"?7$7$$%5!<%P!<$rIU$12C$($kI,MW$,$"$j$^$9!#L?Na\e(B @kbd{a} \e$B$,$=$l$r\e(B
+\e$B$7$^$9!#$*$=$i$/%-%c%C%7%e$rFI$`$?$a$K$O\e(B @code{nnspool} \e$B$r;H$&$N$,0lHVNI\e(B
+\e$B$$$G$7$g$&!#\e(B@code{nnml} \e$B$d\e(B @code{nnmh} \e$B$b;H$&;v$,$G$-$^$9$1$I!#\e(B
+
+@kbd{a nnspool RET cache RET} \e$B$HBG$C$F$/$@$5$$!#\e(B
+
+\e$B:#$dA4$/?7$7$$\e(B @samp{cache} \e$B$H8F$P$l$k\e(B @code{nnspool} \e$B$N;v<B>e$N%5!<%P!<\e(B
+\e$B$"$k$O$:$G$9!#<!$O$=$l$rJT=8$7$F!"@5$7$$Dj5A$rM?$($k$@$1$G$9!#%5!<%P!<$r\e(B
+\e$BJT=8$9$k$?$a$K\e(B @kbd{e} \e$B$rBG$C$F$/$@$5$$!#0J2<$N$b$N$r4^$`%P%C%U%!$KF~$k\e(B
+\e$B$G$7$g$&!#\e(B
+
+@lisp
+(nnspool "cache")
+@end lisp
+
+\e$B$=$l$r<!$N$b$N$KJQ99$7$F$/$@$5$$\e(B:
+
+@lisp
+(nnspool "cache"
+         (nnspool-spool-directory "~/News/cache/")
+         (nnspool-nov-directory "~/News/cache/")
+         (nnspool-active-file "~/News/cache/active"))
+@end lisp
+
+\e$B%5!<%P!<%P%C%U%!$KLa$k$?$a$K\e(B @kbd{C-c C-c} \e$B$HBG$C$F$/$@$5$$!#:#$d$3$N;v\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
+
+\e$BJQ?t$rDj5A$9$k0l$D$N$d$C$+$$$JE@$O\e(B (\e$B%P%C%/%(%s%I$H\e(B Emacs \e$B0lHL$NN>J}$G\e(B)\e$B!"\e(B
+\e$BJQ?t$NDj5A$,%m!<%I$5$l$k$F$$$k4V$K!"$$$/$D$+$NJQ?t$OB>$NJQ?t$+$i=i4|2=$5\e(B
+\e$B$l$k$H$$$&;v$G$9!#$b$7\e(B "\e$B4p$H$J$k\e(B" \e$BJQ?t$,%m!<%I$5$l$?8e$KJQ99$7$F$b!"\e(B"\e$BF3\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-active-file} \e$B$O\e(B @file{~/Mail/archive} \e$B$K$J$j$^$9!#$b$7?7$7$$\e(B
+\e$B;v<B>e$N\e(B @code{nnml} \e$B%5!<%P!<$rDj5A$7$?>l9g!"\e(B@code{nnml-directory} \e$B$r@_\e(B
+\e$BDj$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
+\e$BA4$F$N%U%!%$%kJQ?t$rL@<(E*$K@_Dj$7$J$1$l$P$J$j$^$;$s!#$=$l$>$l$N%P%C%/%(\e(B
+\e$B%s%I$KBP$9$k40A4$JJQ?t$N%j%9%H$r8+$k$?$a$K$O!"$3$N%^%K%e%"%k$N8e$KB3$/$=\e(B
+\e$B$l$>$l$N%P%C%/%(%s%I$NItJ,$rFI$s$G$/$@$5$$!#$G$b!"\e(B@code{nnml} \e$B$NDj5A$NNc\e(B
+\e$B$O$3$3$K$"$j$^$9\e(B:
+
+@lisp
+(nnml "public"
+      (nnml-directory "~/my-mail/")
+      (nnml-active-file "~/my-mail/active")
+      (nnml-newsgroups-file "~/my-mail/newsgroups"))
+@end lisp
+
+
+@node Servers and Methods
+@subsection \e$B%5!<%P!<$HJ}K!\e(B
+
+\e$BIaDL$OA*BrJ}K!$r;H$&$H$3$m\e(B (\e$BNc$($P!"30It%5!<%P!<$r354Q$7$F$$$k$H$-$N%0%k!<\e(B
+\e$B%WA*BrJ}K!$G$N\e(B @code{gnus-secondary-select-method}) \e$B$O$I$3$G$b!";v<B>e$N\e(B
+\e$B%5!<%P!<L>$r$=$l$NBe$o$j$K;H$&;v$,$G$-$^$9!#$3$N$3$H$K$h$j$?$/$5$s%-!<%\!<\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
+
+\e$B$b$7%5!<%P!<$K@\B3IT2DG=$G$"$k$J$i$P!"\e(Bgnus \e$B$O%5!<%P!<$r\e(B @code{\e$B5qH]\e(B} \e$B$H$7\e(B
+\e$B$F0u$rIU$1$^$9!#$3$l$O$=$N8e$N$=$N%5!<%P!<$H$N@\B3$r$O$+$k$I$N$h$&$J;n$_\e(B
+\e$B$bL5;k$5$l$k$H$$$&;v$G$9!#\e(BGnus \e$B$O@\B3$,3+$1$J$$$3$H$,K\Ev$G$"$k$+$I$&$+\e(B
+\e$B$r>/$7$b3N$+$a$:!"\e(B``It can't be opend,'' (\e$B@\B3$r3+$/;v$,$G$-$^$;$s\e(B) \e$B$H9p\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$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$D$D$/$@$1$G$G$-$^$9\e(B:
+
+@table @kbd
+
+@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
+
+@item C
+@kindex C (\e$B%5!<%P!<\e(B)
+@findex gnus-server-close-server
+\e$B%5!<%P!<$N@\B3\e(B (\e$B$b$7$"$l$P\e(B) \e$B$rJD$8$^$9\e(B (@code{gnus-server-close-server})\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
+
+@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
+
+@item R
+@kindex R (\e$B%5!<%P!<\e(B)
+@findex gnus-server-remove-denials
+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!<%:$N<hF@\e(B
+@cindex reading news
+@cindex newsbackends
+
+\e$B%K%e!<%:%j!<%@!<$OIaDL$O%K%e!<%:$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%m!<%+%k%9%W!<%k$+$iFI$`;v$,$G$-$^$9!#\e(B
+
+@menu
+* NNTP::               @sc{nntp} \e$B%5!<%P!<$+$i%K%e!<%:$rFI$`!#\e(B
+* News Spool::         \e$B%m!<%+%k%9%W!<%k$+$i%K%e!<%:$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
+
+\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$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
+\e$B$9!#L>A0$N>WFM$O5/$3$j$^$;$s!#\e(B
+
+\e$B0J2<$NJQ?t$O;v<B>e$N\e(B @code{nntp} \e$B%5!<%P!<$r:n$k$?$a$K;H$o$l$^$9\e(B:
+
+@table @code
+
+@item nntp-server-opened-hook
+@vindex gnus-server-opend-hook
+@cindex @sc{mode reader}
+@cindex authinfo
+@cindex authentification
+@cindex nntp authentification
+@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$KAw$i$l$^$9!#$=$N4X?t$O>o$K$3$N%U%C%/$K$"$k$Y$-$G$9!#\e(B
+
+@item nntp-authinfo-function
+@vindex nntp-authinfo-function
+@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:
+
+@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{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$j0u$G$O$"$j$^$;$s!#\e(B
+\e$B$3$l$,%U%!%$%k\e(B @file{.authinfo} \e$B$,\e(B @file{.netrc} \e$B%U%!%$%kMM<0$+$i0o$l$k\e(B
+\e$BM#0l$NJ}K!$G$9!#\e(B)
+
+@end enumerate
+
+\e$B$3$l$,$=$N%U%!%$%k$NNc$G$9\e(B:
+
+@example
+machine news.uio.no login larsi password geheimnis
+machine nntp.ifi.uio.no login larsi force yes
+@end example
+
+\e$B6h@Z$j0u\e(B/\e$BCM\e(B \e$B$NBP$O$I$N$h$&$J=gHV$G$G$b8=$l$k;v$,$G$-$^$9!#Nc$($P!"\e(B
+@samp{machine} \e$B$O:G=i$K8=$l$kI,MW$O$"$j$^$;$s!#\e(B
+
+\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%U%!%$%k\e(B @file{~/.authinfo} \e$B$r@$3&Cf$,FI$a$k$h$&$J@_Dj$KJ|CV$7$J$$$h$&$K\e(B
+\e$BCm0U$7$F$/$@$5$$!#\e(B
+
+@item nntp-server-action-alist
+@vindex nntp-server-action-alist
+\e$B$3$l$O%5!<%P!<$N7?$K9gCW$9$k@55,I=8=$H!"9gCW$,5/$3$C$?$H$-$K<h$i$l$kF0:n\e(B
+\e$B$NO"A[%j%9%H$G$9!#Nc$($P!"\e(Bgnus \e$B$K\e(B innd \e$B$K@\B3$7$?$H$-$KKh2s%S!<%W2;$rLD\e(B
+\e$B$i$5$;$?$$\e(B (beep) \e$B$N$G$"$l$P!"<!$N$h$&$K$9$k;v$,$G$-$^$9\e(B:
+
+@lisp
+(setq nntp-server-action-list
+      '(("innd" (ding))))
+@end lisp
+
+\e$B$^$!!"$=$N$h$&$J;v$O$7$?$/$J$$$G$7$g$&$1$I!#\e(B
+
+\e$B%G%#%U%)%k%H$NCM$O\e(B
+
+@lisp
+'(("nntpd 1\\.5\\.11t"
+   (remove-hook 'nntp-server-opened-hook 'nntp-send-mode-reader)))
+@end lisp
+
+\e$B$G!"$3$l$O\e(B nntpd 1.5.11t \e$B$K$OL?Na\e(B @code{MODE READER} \e$B$rAw$i$J$$;v$r3N<B\e(B
+\e$B$K$7$^$9!#$J$<$J$i!"$=$NL?Na$O$=$N%5!<%P!<$r8G$^$i$;$k$H;d$OJ9$$$F$$$k$+\e(B
+\e$B$i$G$9!#\e(B
+
+@item nntp-maximum-request
+@vindex nntp-maximum-request
+\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
+
+@item nntp-connection-timeout
+@vindex nntp-connection-timeout
+\e$BDj4|E*$K@\B3$9$k30It\e(B @code{nntp} \e$B%0%k!<%W$,$?$/$5$s$"$k$J$i!"E,@Z$K1~Ez\e(B
+\e$B$7$J$$\e(B @code{nntp} \e$B%5!<%P!<$,$"$C$?$j!"$"$k%5!<%P!<$O>o<1E*$J;~4VFb$G$O\e(B
+\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$,%G%#%U%)%k%H$G$9$,!";~4V@Z$l@ZCG$O$J$5$l$^$;\e(B
+\e$B$s!#\e(B
+
+@c @item nntp-command-timeout
+@c @vindex nntp-command-timeout
+@c @cindex PPP connections
+@c @cindex dynamic IP addresses
+@c If you're running Gnus on a machine that has a dynamically assigned
+@c address, Gnus may become confused.  If the address of your machine
+@c changes after connecting to the @sc{nntp} server, Gnus will simply sit
+@c waiting forever for replies from the server.  To help with this
+@c unfortunate problem, you can set this command to a number.  Gnus will
+@c then, if it sits waiting for a reply from the server longer than that
+@c number of seconds, shut down the connection, start a new one, and resend
+@c the command.  This should hopefully be transparent to the user.  A
+@c likely number is 30 seconds.
+@c
+@c @item nntp-retry-on-break
+@c @vindex nntp-retry-on-break
+@c If this variable is non-@code{nil}, you can also @kbd{C-g} if Gnus
+@c hangs.  This will have much the same effect as the command timeout
+@c described above.
+
+@item nntp-server-hook
+@vindex nntp-server-hook
+\e$B$3$N%U%C%/$O\e(B @sc{nntp} \e$B%5!<%P!<$K@\B3$9$k:G8e$N0lJb$H$7$F<B9T$5$l$^$9!#\e(B
+
+@findex nntp-open-rlogin
+@findex nntp-open-telnet
+@findex nntp-open-network-stream
+@item nntp-open-connetcion-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(B3\e$B$D$N4{@=4X?t$N\e(B1\e$B$D$O\e(B 
+@code{nntp-open-network-stream}\e$B$G!"$3$l$O%G%#%U%)%k%H$GC1=c$K1s3V%7%9%F\e(B
+\e$B%`$N$I$3$+$N$N%]!<%H$d2?$+$K@\B3$7$^$9!#;D$j$N\e(B2\e$B$D$N$&$A$N\e(B1\e$B$D$O!"\e(B
+@code{nntp-open-rlogin} \e$B$G!"1s3V%7%9%F%`$K\e(B @code{rlogin} \e$B$r$7$F!"$=$l$+\e(B
+\e$B$i$=$3$+$i;HMQ2DG=$J\e(B @sc{nntp} \e$B%5!<%P!<$K\e(B @samp{telnet} \e$B$r$7!"$b$&0l$D$O\e(B 
+@code{nntp-open-telnet} \e$B$G!"$3$l$O1s3V%7%9%F%`$K\e(B @samp{telnet} \e$B$r$7$F!"\e(B
+\e$B$=$l$+$i\e(B @sc{nntp} \e$B%5!<%P!<$K$?$I$jCe$/$?$a$K$b$&0l$D\e(B @samp{telnet} \e$B$r$7\e(B
+\e$B$^$9!#\e(B
+
+@code{nntp-open-rlogin} \e$B$K4XO"$7$?JQ?t$G$9\e(B:
+
+@table @code
+
+@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
+
+@item nntp-rlogin-parameters
+@vindex nntp-rlogin-parameters
+\e$B$3$N%j%9%H$O\e(B @code{rsh} \e$B$KM?$($i$l$k%Q%i%a!<%?$N%j%9%H$H$7$F;H$o$l$^$9!#\e(B
+
+@item nntp-rlogin-user-name
+@vindex nntp-rlogin-user-name
+\e$B1s3V%7%9%F%`$G$NMxMQ<TL>$G$9!#\e(B
+
+@end table
+
+@code{nntp-open-telnet} \e$B$K4XO"$7$?JQ?t$G$9\e(B:
+
+@table @code
+@item nntp-telnet-command
+@vindex nntp-telnet-command
+@code{telnet} \e$B$r;O$a$k$N$K;H$o$l$kL?Na$G$9!#\e(B
+
+@item nntp-telnet-switches
+@vindex nntp-telnet-switches
+
+\e$BL?Na\e(B @code{telnet} \e$B$N%9%$%C%A\e(B (switch) \e$B$H$7$F;H$o$l$kJ8;zNs$N%j%9%H$G$9!#\e(B
+
+@item nntp-telnet-user-name
+@vindex nntp-telnet-user-name
+\e$B1s3V%7%9%F%`$K%m%0%$%s$9$k$?$a$NMxMQ<TL>$G$9!#\e(B
+
+@item nntp-telnet-passwd
+@vindex nntp-telnet-passwd
+\e$B%m%0%$%s$9$k$H$-$K;H$o$l$k%Q%9%o!<%I$G$9!#\e(B
+
+@item nntp-telnet-parameters
+@vindex nntp-telnet-parameters
+@code{telnet} \e$B$G%m%0%$%s$r$7$?8e$KL?Na$H$7$F<B9T$5$l$kJ8;zNs$N%j%9%H$G$9!#\e(B
+
+@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
+
+@item nntp-open-telnet-envuser
+@vindex nntp-open-telnet-envuser
+@code{nil} \e$B$G$J$$$J$i!"\e(B@code{telnet} \e$B%;%C%7%g%s$O\e(B (\e$B%/%i%$%"%s%H$H%5!<%P!<\e(B
+\e$B$NN>J}$G\e(B) @code{ENVIRON} \e$B%*%W%7%g%s$r;HMQ$9$k;v$,$G$-!"%m%0%$%sL>F~NO$r\e(B
+\e$BB%?J$7$^$;$s!#$3$l$O$?$H$($P\e(B Solaris \e$B$N\e(B @code{telnet} \e$B$KBP$7$FF0:n$7$^$9!#\e(B
+
+@end table
+
+@item nntp-end-of-line
+@sc{nntp} \e$B%5!<%P!<$H$*OC$r$7$F$$$k$H$-$K9T$N=*$o$j\e(B (end-of-line) \e$B$H$7$F\e(B
+\e$B;H$o$l$k0u$G$9!#$3$l$O%G%#%U%)%k%H$G\e(B @samp{\r\n} \e$B$G$9$,!"%5!<%P!<$H$*C}\e(B
+\e$B$j$r$9$k$?$a$K\e(B @code{rlogin} \e$B$r;H$C$F$$$k$H$-$O\e(B @samp{\n} \e$B$G$"$k$Y$-$G$9!#\e(B
+
+@item nntp-rlogin-user-name
+@vindex nntp-rlogin-user-name
+@code{rlogin} \e$B@\B34X?t$r;H$C$F$$$k$H$-$N1s3V%7%9%F%`$G$NMxMQ<TL>$G$9!#\e(B
+
+@item nntp-address
+@vindex nntp-address
+@sc{nntp} \e$B%5!<%P!<$,F0$$$F$$$k1s3V%7%9%F%`$N%"%I%l%9$G$9!#\e(B
+
+@item nntp-port-number
+@vindex nntp-port-number
+@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-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
+\e$B$K@_Dj$7$F$/$@$5$$!#\e(B
+
+@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
+
+@item nntp-xover-commands
+@vindex nntp-xover-commands
+@cindex nov
+@cindex XOVER
+\e$B%5!<%P!<$+$i\e(B @sc{nov} \e$B9T$r<hF@$9$k$?$a$NL?Na$H$7$F;H$o$l$kJ8;zNs$N%j%9%H\e(B
+\e$B$G$9!#$3$NJQ?t$N%G%#%U%)%k%H$NCM$O\e(B @code{("XOVER" "XOVERVIEW")} \e$B$G$9!#\e(B
+
+@item nntp-nov-gap
+@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
+
+@item nntp-prepare-server-hook
+@vindex nntp-prepare-server-hook
+@sc{nntp} \e$B%5!<%P!<$K@\B3$r;n$_$kA0$K<B9T$5$l$k%U%C%/$G$9!#\e(B
+
+@item nntp-warn-about-losing-connection
+@vindex nntp-warn-about-losing-connection
+\e$B$3$NJQ?t$,\e(B @code{nil} \e$B$G$J$$$H!"%5!<%P!<$,@\B3$rJD$8$?$H$-$K>/$7;(2;$,$?\e(B
+\e$B$F$i$l$^$9!#\e(B
+
+@item nntp-record-commands
+@vindex nntp-record-commands
+\e$B$b$7\e(B @code{nil} \e$B$G$J$$$H!"\e(B@code{nntp} \e$B$O\e(B @sc{nntp} \e$B%5!<%P!<$KAw$C$?A4$F\e(B
+\e$B$NL?Na$r\e(B (\e$B;~4V$H6&$K\e(B) @samp{*nntp-log*} \e$B%P%C%U%!$K5-O?$7$^$9!#$3$l$OF0:n\e(B
+\e$B$7$F$$$J$$$H;W$o$l$k\e(B gnus/@sc{nntp} \e$B@\B3$r%G%#%P%C%0$7$F$$$k$H$-$KLr$KN)\e(B
+\e$B$A$^$9!#\e(B
+
+@end table
+
+
+@node News Spool
+@subsection \e$B%K%e!<%:%9%W!<%k\e(B
+@cindex nnsppl
+@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$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$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
+
+@table @code
+
+@item nnspool-inews-program
+@vindex nnspool-inews-program
+\e$B5-;v$rEj9F$9$k$?$a$K;H$o$l$k%W%m%0%i%`$G$9!#\e(B
+
+@item nnspool-inews-switches
+@vindex nnspool-inews-switches
+\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
+
+@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
+
+@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
+
+@item nnspool-active-file
+@vindex nnspool-active-file
+\e$B8=>u%U%!%$%k$X$N%Q%9$G$9!#\e(B
+
+@item nnspool-newsgroups-file
+@vindex nnspool-newsgroups-file
+\e$B%0%k!<%W5-=R%U%!%$%k$X$N%Q%9$G$9!#\e(B
+
+@item nnspool-history-file
+@vindex nnspool-history-file
+\e$B%K%e!<%9MzNr%U%!%$%k$X$N%Q%9$G$9!#\e(B
+
+@item nnspool-active-times-file
+@vindex nnspool-active-times-file
+\e$B8=>uF|IU%U%!%$%k$X$N%Q%9$G$9!#\e(B
+
+@item nnspool-nov-is-evil
+@vindex nnspool-nov-is-evil
+@code{nil} \e$B$G$J$$$H!"\e(B@code{nnspool} \e$B$O$=$l$,8+$D$1$?$I$s$J\e(B @sc{nov} \e$B%U%!\e(B
+\e$B%$%k$b;H$*$&$H$O$7$^$;$s!#\e(B
+
+@item nnspool-sift-nov-with-sed
+@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
+@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
+
+@menu
+* 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 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 and Procmail::            procmail \e$B$,:n@.$7$?%a!<%k%0%k!<%W$rFI$`!#\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
+@end menu
+
+
+@node Getting Started Reading Mail
+@subsection \e$B%a!<%k$rFI$`;v$r;O$a$k\e(B
+
+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%(%s%I$N$"$J$?$NA*Br$r\e(B @code{gnus-secondary-select-methods} \e$B$KJ|$j9~$`$@\e(B
+\e$B$1$G!"$"$H$N$3$H$O<+F0E*$K5/$3$j$^$9!#\e(B
+
+\e$BNc$($P!"\e(B@code{nnml} (\e$B$3$l$O\e(B "\e$B0l%a!<%k0l%U%!%$%k\e(B" \e$B%P%C%/%(%s%I$G$9\e(B) \e$B$r;H\e(B
+\e$B$$$?$$$J$i!"<!$N$b$N$r$"$J$?$N\e(B @file{.gnus} \e$B%U%!%$%k$KF~$l$k;v$,$G$-$^$9!#\e(B
+
+@lisp
+(setq gnus-secondary-select-methods
+      '((nnml "private")))
+@end lisp
+
+\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$"$J$?$O$*$=$i$/%a!<%k$r$$$/$D$+$N%0%k!<%W$KJ,3d$7$?$$$G$7$g$&$1$I\e(B:
+
+@lisp
+(setq nnmail-split-methods
+      '(("junk" "^From:.*Lars Ingebrigtsen")
+        ("crazy" "^Subject:.*die\\^Organization:.*flabby")
+        ("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$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
+
+
+@node Splitting Mail
+@subsection \e$B%a!<%k$NJ,3d\e(B
+@cindex splitting mail
+@cindex mail splitting
+
+@vindex nnmail-split-methods
+\e$BJQ?t\e(B @code{nnmail-split-methods} \e$B$OF~$C$F$/$k%a!<%k$r$I$N$h$&$K%0%k!<%W\e(B
+\e$BJ,$1$9$k$+$r;XDj$7$^$9!#\e(B
+
+@lisp
+(setq nnmail-split-methods
+'(("mail.junk" "^From:.*Lars Ingebrigtsen")
+  ("mail.crazy" "^Subject:.*die\\|^Organization:.*flabby")
+  ("mail.other" "")))
+@end lisp
+
+\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$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:
+
+@lisp
+("list.\\1" "From:.*\\(.*\\)-list@@majordomo.com")
+@end lisp
+
+\e$B$b$7:G=i$NMWAG$,FCJL$J%7%s%\%k\e(B @code{junk} \e$B$G$"$l$P!"$=$l$N@55,I=8=$K9g\e(B
+\e$BCW$9$k%a%C%;!<%8$OE76u$K>C$(5n$j$^$9!#Hs>o$KCm0U$7$F;H$C$F$/$@$5$$!#\e(B
+
+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$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
+
+\e$B$3$l$i$N:G8e$O>o$KAm9gE*$J$b$N$G$"$k$Y$-$G!"B>$N@55,I=8=$K9gCW$7$J$$%a!<\e(B
+\e$B%k$K9gCW$9$k$?$a$K!"$3$N@55,I=8=$O\e(B @emph{\e$B$$$D$b\e(B} @samp{}\e$B$G$"$k$Y$-$G$9!#\e(B
+(\e$B$3$l$i$NK!B'$OO"A[%j%9%H$N=i$a$+$i=*$o$j$^$G=gHV$K<B9T$5$l$^$9!#Aj8_Ej\e(B
+\e$B9F\e(B (crosspost) \e$B$r;HMQ2DG=$K$7$F$$$J$$8B$j!":G=i$N9gCW$7$?K!B'$,\e(B "\e$B>!$A$^\e(B
+\e$B$9\e(B"\e$B!#Aj8_Ej9F$r;HMQ2DG=$K$7$F$$$k>l9g!"A4$F$N9gCW$7$?K!B'$,\e(B "\e$B>!$A$^$9\e(B"\e$B!#\e(B)
+
+\e$B$b$7$"$J$?<+?H$G$3$l$r$$$8$/$j$^$o$7$?$$$H$-$O!"$"$J$?$NA*$s$@4X?t$r$3$N\e(B
+\e$BJQ?t$K@_Dj$9$k;v$,$G$-$^$9!#$3$N4X?t$OF~$C$FMh$?%a!<%k%a%C%;!<%8$N%X%C%@!<\e(B
+\e$B$KHO0O$r69$a$i$l$?%P%C%U%!$G0z?t$J$7$G8F$P$l$^$9!#$3$N4X?t$O!"$=$l$,$3$N\e(B
+\e$B%a!<%k%a%C%;!<%8$r1?$V$Y$-$G$"$k!"$H9M$($k%0%k!<%WL>$N%j%9%H$rJV$9$Y$-$G\e(B
+\e$B$9!#\e(B
+
+\e$BA4$F$N%a!<%k%P%C%/%(%s%I$O!"F~$C$FMh$?IOK3$G=c?h$J%X%C%@!<$rMpK=$K07$C$F\e(B
+\e$B$bNI$$;v$KCm0U$7$F$/$@$5$$!#$=$l$i$O$9$Y$F\e(B @code{Lines} \e$B%X%C%@!<$rDI2C$7\e(B
+\e$B$^$9!#$$$/$D$+$O\e(B @code{X-Gnus-Group} \e$B%X%C%@!<$r2C$($^$9!#$?$$$F$$$N$b$N\e(B
+\e$B$O\e(B Unix \e$B$N\e(B mbox \e$B$N\e(B @code{From<SPACE>} \e$B9T$r2?$+JL$NL>A0$KJQ$($^$9!#\e(B
+
+@vindex nnmail-crosspost
+\e$B%a!<%k%P%C%/%(%s%I$O$9$Y$FAj8_Ej9F$N5!G=$rDs6!$7$F$$$^$9!#$$$/$D$+$N@55,\e(B
+\e$BI=8=$,9gCW$9$k$H!"%a!<%k$OA4$F$N%0%k!<%W$K\e(B ``\e$BAj8_Ej9F\e(B'' \e$B$5$l$^$9!#\e(B
+@code{nnmail-crosspost} \e$B$O$3$N5!G=$r;H$&$+$I$&$+$r;XDj$7$^$9!#$I$N5-;v$b\e(B
+\e$BAm9g$N\e(B (@samp{}) \e$B%0%k!<%W$KAj8_Ej9F$5$l$J$$;v$KCm0U$7$F$/$@$5$$!#\e(B
+
+@vindex nnmail-crosspost-link-function
+@cindex crosspost
+@cindex links
+@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)
+
+@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
+
+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%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 Backend Variables
+@subsection \e$B%a!<%k%P%C%/%(%s%IJQ?t\e(B
+
+\e$B$3$l$i$NJQ?t$O\e(B (\e$B$?$$$F$$$N>l9g\e(B) \e$BA4$F$N0c$C$?%a!<%k%P%C%/%(%s%I$K4XO"$7$^\e(B
+\e$B$9!#\e(B
+
+@table @code
+@vindex nnmail-read-incoming-hook
+@item nnmail-read-incoming-hook
+\e$B%a!<%k%P%C%/%(%s%I$O?7$7$$%a!<%k$rFI$_9~$s$@8e$K$3$N%U%C%/$r8F$S$^$9!#$b\e(B
+\e$B$7$=$&$7$?$$$H;W$&$J$i!"$3$N%U%C%/$r%a!<%k4F;k%W%m%0%i%`$KCN$i$;$k$?$a$K\e(B
+\e$B;H$&;v$,$G$-$^$9!#\e(B
+
+@vindex nnmail-spool-file
+@item nnmail-spool-file
+@cindex POP mail
+@cindex MAILHOST
+@cindex movemail
+@vindex nnmail-pop-password
+@vindex nnmail-pop-password-required
+\e$B%P%C%/%(%s%I$O$3$N%U%!%$%k$G?7$7$$%a!<%k$rC5$7$^$9!#$3$NJQ?t$,\e(B 
+@code{nil} \e$B$G$"$k$H!"%a!<%k%P%C%/%(%s%I$O7h$7$F<+J,<+?H$G$O%a!<%k$r<hF@\e(B
+\e$B$7$h$&$H$7$^$;$s!#$b$7\e(B POP \e$B%a!<%k%5!<%P!<$r;H$C$F$$$F!"$"$J$?$NL>A0$,\e(B 
+@samp{larsi} \e$B$G$"$k$J$i$P!"$3$NJQ?t$r\e(B @samp{po:larsi} \e$B$K@_Dj$9$k$Y$-$G$9!#\e(B
+\e$B$b$7$"$J$?$NL>A0$,\e(B @samp{larsi} \e$B$G$J$$$J$i$P!"$*$=$i$/$3$l$r>/$7=$@5$7$J\e(B
+\e$B$1$l$P$J$j$^$;$s$,!"4{$K$"$J$?$O$=$l$r?dB,$7$F$$$k$G$7$g$&!#$3$N8-$/4iN)\e(B
+\e$B$A$NNI$$0-Kb$5$s!*\e(B \e$B$3$NJQ?t$r\e(B @code{pop} \e$B$K@_Dj$9$k;v$b$G$-!"$=$N;~$O\e(B 
+gnus \e$B$,<+J,<+?H$G\e(B POP \e$B%a!<%kJ8;zNs$rH/8+$7$h$&$H$7$^$9!#$I$N$h$&$J>l9g$G\e(B
+\e$B$b!"\e(Bgnus \e$B$O\e(B \e$B4D6-JQ?t\e(B @code{MAILHOST} \e$B$G;XDj$5$l$F$$$k\e(B POP \e$B%5!<%P!<$K@\?(\e(B
+\e$B$r?^$m$&$H$9$k\e(B @code{movemail} \e$B$r8F$S$^$9!#\e(BPOP \e$B%5!<%P!<$,%Q%9%o!<%I$rI,\e(B
+\e$BMW$H$9$k$J$i!"\e(B@code{nnmail-pop-password-required} \e$B$r\e(B @code{t} \e$B$K@_Dj$7$F\e(B
+\e$B%Q%9%o!<%IF~NO$rB%?J$5$l$k$+!"\e(B@code{nnmail-pop-password} \e$B$r%Q%9%o!<%I$=\e(B
+\e$B$N$b$N$K@_Dj$9$k;v$,$G$-$^$9!#\e(B
+
+@code{nnmail-spool-file} \e$B$O%a!<%k%\%C%/%9$N%j%9%H$G$"$k;v$b$G$-$^$9!#\e(B
+
+\e$B$"$J$?$N\e(B Emacs \e$B$,\e(B \e$B%3%s%Q%$%k\e(B (compilation) \e$B$NA0$K\e(B @samp{--with-pop} \e$B$H6&\e(B
+\e$B$K4D6-@_Dj\e(B (configure) \e$B$5$l$J$1$l$P$J$j$^$;$s!#$3$l$O%G%#%U%)%k%H$G$9$,!"\e(B
+\e$B$$$/$D$+$N%$%s%9%H!<%k$O$=$N@_Dj$r@Z$C$F$7$^$$$^$9!#\e(B
+
+\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@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
+
+@vindex nnmail-use-procmail
+@vindex nnmail-procmail-suffix
+@item nnmail-use-procmail
+\e$B$b$7\e(B @code{nil} \e$B$G$J$1$l$P!"%a!<%k%P%C%/%(%s%I$OF~$C$F$/$k%a!<%k$r\e(B 
+@code{nnmail-procmail-directory} \e$B$GC5$7$^$9!#$=$N%G%#%l%/%H%j!<$G\e(B 
+@code{nnmail-procmail-suffix} \e$B$G=*$o$C$F$$$kL>A0$r;}$DA4$F$N%U%!%$%k$OF~$C\e(B
+\e$B$FMh$?%a!<%k%\%C%/%9$H$_$J$5$l!"$=$3$G?7$7$$%a!<%k$,C5$5$l$^$9!#\e(B
+
+@vindex nnmail-crash-box
+@item nnmail-crash-box
+\e$B%a!<%k%P%C%/%(%s%I$,%9%W!<%k%U%!%$%k$rFI$s$@$H$-$K!"%a!<%k$O:G=i$K$3$N%U%!\e(B
+\e$B%$%k$K0\F0$5$l$^$9!#$3$l$O%G%#%U%)%k%H$G\e(B @file{~/.gnus-crash-box} \e$B$G$9!#\e(B
+\e$B$3$N%U%!%$%k$,4{$KB8:_$9$k>l9g$O!"$=$l$O>o$KB>$N%9%W!<%k%U%!%$%k$h$j@h$K\e(B
+\e$BFI$_9~$^$l\e(B (\e$B$=$7$F<h$j9~$^$l\e(B) \e$B$^$9!#\e(B
+
+@vindex nnmail-prepare-incoming-hook
+@item nnmail-prepare-incoming-hook
+\e$B$3$l$OF~$C$FMh$??7$7$$%a!<%k$r;}$C$F$$$k%P%C%U%!$G<B9T$5$l!"$(!<$H!"K\Ev\e(B
+\e$B$K!"A4$F$N$3$H$K$D$$$F;H$o$l$^$9!#\e(B
+
+@vindex nnmail-split-hook
+@item nnmail-split-hook
+@findex article-decode-rfc1522
+@findex RFC1522 decoding
+\e$B$=$l$>$l$N%a%C%;!<%8$,$=$N%X%C%@!<$K4p$E$$$FJ,3d$,$J$5$l$kD>A0$K$=$l$,J]\e(B
+\e$BB8$5$l$F$$$k%P%C%U%!$G<B9T$5$l$k%U%C%/$G$9!#$3$N%U%C%/$O$=$l$,E,9g$9$k$H\e(B
+\e$B9M$($k$h$&$K<+M3$K%P%C%U%!$NFbMF$rJT=8$9$k;v$,$G$-$^$9\e(B---\e$B%P%C%U%!$OJ,3d\e(B
+\e$B$,=*$o$C$?8e$G>C5n$5$l!"%P%C%U%!$G9T$o$l$?JQ99$O$I$N%U%!%$%k$K$b8=$l$^$;\e(B
+\e$B$s!#\e(B@code{gnus-article-decode-rfc1522} \e$B$,$3$N%U%C%/$K2C$($k;v$,E,@Z$J4X\e(B
+\e$B?t$N0l$D$G$9!#\e(B
+
+@vindex nnmail-pre-get-new-mail-hook
+@vindex nnmail-post-get-new-mail-hook
+@item nnmail-pre-get-new-mail-hook
+@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%G%#%U%)%k%H$N%U%!%$%k%b!<%I$rJQ99$9$kNc$G$9\e(B:
+
+@lisp
+(add-hook 'gnus-pre-get-new-mail-hook
+          (lambda () (set-default-file-modes 511)))
+
+(add-hook 'gnus-post-get-new-mail-hook
+          (lambda () (set-default-file-modes 551)))
+@end lisp
+
+@item nnmail-tmp-directory
+@vindex nnmail-tmp-directory
+\e$B$3$NJQ?t$OF~$C$FMh$?%a!<%k$r$I$3$K0\F0$9$k$+$r;XDj$7$^$9\e(B -- \e$B$=$l$r<B9T$7\e(B
+\e$B$F$$$k4V$K!#$3$l$OIaDL$O%a!<%k%P%C%/%(%s%I$,=;$s$G$$$k$b$N$HF1$8%G%#%l%/\e(B
+\e$B%H%j!<\e(B (\e$BNc!"\e(B @file{~/Mail/}) \e$B$G9T$o$l$^$9$,!"$3$NJQ?t$,\e(B @code{nil} \e$B$G$J\e(B
+\e$B$$$H!"$=$l$,Be$o$j$K;H$o$l$^$9!#\e(B
+
+@item nnmail-movemail-program
+@vindex nnmail-movemail-program
+\e$B$3$N%W%m%0%i%`$OMxMQ<T$N%$%s%\%C%/%9$+$i%[!<%`%G%#%l%/%H%j!<$K0\F0$9$k$?\e(B
+\e$B$a$K<B9T$5$l$^$9!#%G%#%U%)%k%H$O\e(B @code{movemail} \e$B$G$9!#\e(B
+
+\e$B$3$l$O4X?t$G$"$k;v$b$G$-$^$9!#$=$N>l9g$O!"$=$N4X?t$O\e(B2\e$B$D$N%Q%i%a!<%?\e(B -- 
+\e$B%$%s%\%C%/%9$NL>A0$H0\F0$9$k%U%!%$%kL>A0\e(B \e$B$H6&$K8F$P$l$^$9!#\e(B
+
+@item nnmail-delete-incoming
+@vindex nnmail-delete-incoming
+@cindex incoming mail files
+@cindex deleting incoming files
+@code{nil} \e$B$G$J$$$J$i!"%a!<%k%P%C%/%(%s%I$O%a!<%k$rE,@Z$J%0%k!<%W$XJ,3d$7$?8e$G0l;~?7F~%U%!%$%k$r>C5n$7$^$9!#$3$l$O%G%#%U%)%k%H$G\e(B @code{t} \e$B$G$9!#\e(B
+
+@c This is @code{nil} by
+@c default for reasons of security.
+
+@c Since Red Gnus is an alpha release, it is to be expected to lose mail.
+((ding) Gnus 0.10 (\e$B$b$7$/$O$=$N$h$&$J$b$N\e(B) \e$B$+$i$N\e(B Gnus \e$B$N%j%j!<%9$O;d$,\e(B
+\e$B;W$&$K%a!<%k$r<:$C$?;v$O$J$$$N$G$9$,!"$G$b$=$N$3$H$O$3$3$G$O=EMW$G$O$"$j\e(B
+\e$B$^$;$s!#\e(B (\e$BFCJL$J%P!<%8%g%s$N\e(B Red Gnus \e$B$r=|$-$^$9!#\e(B)) Incoming* \e$B%U%!%$%k\e(B
+\e$B$r>C5n$7$J$$;v$G!"%a!<%k$r<:$o$J$$;v$r3N<B$K$G$-$^$9\e(B -- \e$B$b$7\e(B gnus \e$B$,40A4\e(B
+\e$B$K6/@)E*$K?a$CHt$s$G$b!"$$$D$b<:$o$l$?$b$N$r<h$jLa$9;v$,$G$-$^$9!#\e(B
+
+\e$B$$$D$G$b$"$J$?$N0U;V$G\e(B @file{Incoming*} \e$B%U%!%$%k$r>C5n$9$k;v$,$G$-$^$9!#\e(B
+
+@item nnmail-use-long-file-names
+@vindex nnmail-use-long-file-names
+@code{nil} \e$B$G$J$$$J$i!"%a!<%k%P%C%/%(%s%I$OD9$$%U%!%$%kL>$H%G%#%l%/%H%j!<\e(B
+\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
+
+@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!#%G%#%U%)%k%H$G\e(B 
+@code{delete-file} \e$B$G$9!#\e(B
+
+@item nnmail-cache-accepted-message-ids
+@vindex nnmail-cache-accepted-message-ids
+@code{nil} \e$B$G$J$$$H!"%P%C%/%(%s%I$KF~$C$FMh$?5-;v\e(B (\e$BNc$($P!"\e(B@code{Gcc} \e$B$K\e(B
+\e$B$h$C$F\e(B) \e$B$N\e(B @code{Message-ID} \e$B$r%a!<%k=EJ#H/8+%U%!%$%k$KF~$l$^$9!#%G%#%U%)\e(B
+\e$B%k%H$O\e(B @code{nil} \e$B$G$9!#\e(B
+
+@end table
+
+@node Fancy Mail Splitting
+@subsection \e$BFC5i%a!<%kJ,3d\e(B
+@cindex mail splitting
+@cindex fancy mail splitting
+
+@vindex nnmail-split-fancy
+@findex nnmail-split-fancy
+\e$BHf3SE*C1=c$JI8=`$N%a!<%kJ,3d;XDj$NJ}K!$G$O$"$J$?$NK>$`;v$,$G$-$J$$>l9g!"\e(B
+@code{nnmail-split-methods} \e$B$r\e(B @code{nnmail-split-fancy} \e$B$K@_Dj$9$k;v$,\e(B
+\e$B$G$-$^$9!#$=$l$+$iJQ?t\e(B @code{nnmail-split-fancy} \e$B$GM7$V;v$,$G$-$^$9!#\e(B
+
+\e$B$^$:$3$NJQ?t$NCM$NNc$r8+$F$_$^$7$g$&\e(B:
+
+@lisp
+;; \e$B%a!<%k%G!<%b%s\e(B (mailer deamon) \e$B$OIaDL$N%0%k!<%W$K$OAj8_Ej9F$5$l$^$;\e(B
+;; \e$B$s!#7Y9p$OK\Ev$N%(%i!<$H$O0c$C$?%0%k!<%W$KF~$l$i$l$^$9!#\e(B
+(| ("from" mail (| ("subject" "warn.*" "mail.warning") 
+                   "mail.misc")) 
+   ;; \e$B%(%i!<$G$J$$%a%C%;!<%8$OA4$F$N4XO"$7$?%0%k!<%W$KAj8_Ej9F$5$l$^$9\e(B
+   ;; \e$B$,!"\e(B(ding) \e$B%j%9%H$HB>$N\e(B (ding) \e$B4XO"$N%a!<%k$N$?$a$N%0%k!<%W$K$O\e(B
+   ;; \e$BAj8_Ej9F$7$^$;$s!#\e(B
+   (& (| (any "ding@@ifi\\.uio\\.no" "ding.list" "ding.list")
+         ("subject "ding" "ding.misc"))
+      ;; \e$BB>$N%a!<%j%s%0%j%9%H\e(B...
+      (any "procmail@@informatik\\.rwth-aachen\\.de" "procmail.list")
+      (any "SmartList@@informatik\\.rwth-aachen\\.de" "SmartList.list")
+      ;; \e$B?M!9\e(B...
+      (any "larsi@@ifi\\.uio\\.no" "people.Lars_Magne_Ingebrigtsen"))
+   ;; \e$B9gCW$7$J$+$C$?%a!<%k$OA4$F$rJa$^$($k%0%k!<%W$X9T$-$^$9!#\e(B
+   "misc.misc")
+@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:
+
+@enumerate
+
+@item
+@samp{group}: \e$B$b$7J,3d$,J8;zNs$G$"$k$H!"$=$l$O%0%k!<%WL>$H$7$F$_$J$5$l$^\e(B
+\e$B$9!#\e(B
+
+@item
+@var{(FIELD VALUE SPLIT)}: \e$B$b$7J,3d$,%j%9%H$G!":G=i$NMWAG$,J8;zNs$G$"$j!"\e(B
+\e$B%X%C%@!<\e(B FIELD (\e$B@55,I=8=\e(B) \e$B$,\e(B VALUE (\e$B$3$l$b@55,I=8=\e(B) \e$B$r4^$s$G$$$k>l9g!"%a%C\e(B
+\e$B%;!<%8$r\e(B SPLIT \e$B$G;XDj$5$l$?$H$3$m$KC_@Q$7$^$9!#\e(B
+
+@item
+@var{(| SPLIT...)}: \e$BJ,3d$,%j%9%H$G!":G=i$NMWAG$,\e(B @code{|} (\e$B?bD>K@\e(B) \e$B$G$"\e(B
+\e$B$k$H!"$=$l$>$l$N\e(B SPLIT \e$B$r$=$N$&$A$N0l$D$,9gCW$9$k$^$G<B9T$7$^$9!#\e(B SPLIT 
+\e$B$O%a!<%k%a%C%;!<%8$,0l$D0J>e$N%0%k!<%W$KC_@Q$5$l$?$H$-$K\e(B ``\e$B9gCW$7$?\e(B'' \e$B$H\e(B
+\e$B$7$^$9!#\e(B
+
+@item
+@var{(& SPLIT...)}: \e$BJ,3d$,%j%9%H$G!":G=i$NMWAG$,\e(B @code{t} \e$B$G$"$k$H!"%j%9\e(B
+\e$B%H$NA4$F$N\e(B SPLIT \e$B$r<B9T$7$^$9!#\e(B
+
+@item
+@code{junk}: \e$B$b$7J,3d$,%7%s%\%k\e(B @code{junk} \e$B$G$"$k$H!"$=$N%a%C%;!<%8$rJ]\e(B
+\e$BB8$7$^$;$s!#\e(B
+
+@item
+@var{(: function arg1 arg2 ...)}: \e$B$b$7J,3d$,%j%9%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$7$F4X?t$H$7$F8F$P$l\e(B
+\e$B$^$9!#4X?t$O\e(B SPLIT \e$B$rJV$9$Y$-$G$9!#\e(B
+
+@end enumerate
+
+\e$B$3$l$i$NJ,3d$G!"\e(B@var{FIELD} \e$B$O40A4$J%U%#!<%k%IL>$K9gCW$7$J$1$l$P$J$j$^$;\e(B
+\e$B$s!#\e(B@var{VALUE} \e$B$O4pAC%b!<%I\e(B (fundamental mode) \e$B9=J8%F!<%V%k\e(B (syntax
+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$B8l$NItJ,$K9gCW$5$;$k$?$a$K\e(B @code{.*} \e$B$r;H$&;v$,$G$-$^$9!#8@$$49$($l$P!"\e(B
+\e$BA4$F$N\e(B @var{VALUE} \e$B$O\e(B @samp{\<} \e$B$H\e(B @samp{\>} \e$B$NBP$G0O$^$l$^$9!#\e(B
+
+@vindex nnmail-split-abbrev-alist
+@var{FIELD} \e$B$H\e(B @var{VALUE} \e$B$O\e(B lisp \e$B%7%s%\%k\e(B (symbol) \e$B$G$"$k;v$b$G$-!"$=\e(B
+\e$B$N>l9g$O$=$l$i$O\e(B @code{nnmail-split-abbrev-alist} \e$B$G;XDj$5$l$F$$$k$h$&$K\e(B
+\e$BE83+$5$l$^$9!#$3$l$O%;%k$N\e(B @code{car} \e$B$,%-!<$r4^$s$G$$$F!"\e(B@code{cdr} \e$B$,\e(B
+\e$B4XO"IU$1$i$l$?CM$r;}$C$F$$$k%3%s%9%;%k\e(B (cons cell) \e$B$NO"A[%j%9%H$G$9!#\e(B
+
+@vindex nnmail-split-fancy-syntax-table
+@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
+
+@example
+(any "debian-\\(\\w*\\)@@lists.debian.org" "mail.debian.\\1")
+@end example
+
+@node Mail and Procmail
+@subsection \e$B%a!<%k$H\e(B Procmail
+@cindex procmail 
+
+@cindex slocal
+@cindex elm
+\e$BB?$/$N?M$O\e(B @code{procmail} (\e$B$b$7$/$OB>$N%a!<%kA*JL%W%m%0%i%`$+30ItG[AwBe\e(B
+\e$BM}\e(B---@code{slocal}\e$B!"\e(B@code{elm} \e$B$J$I\e(B) \e$B$rF~$C$FMh$?%a!<%k$r%0%k!<%W$KJ,3d\e(B
+\e$B$9$k$?$a$K;H$$$^$9!#$b$7$=$&$7$F$$$k$N$G$"$l$P!"%a!<%k%P%C%/%(%s%I$,<+J,\e(B
+\e$B<+?H$G%a!<%k$r<hF@$7$J$$;v$r3N<B$K$9$k$?$a$K!"\e(B@code{nnmail-spool-file} 
+\e$B$r\e(B @code{procmail} \e$B$K@_Dj$9$k$Y$-$G$9!#\e(B
+
+\e$B$b$7J#9g\e(B @code{procmail}/POP/mailbox \e$B@_Dj$r;H$C$F$$$k$N$G$"$l$P!"0J2<$N\e(B
+\e$B$h$&$J;v$r$9$k;v$,$G$-$^$9\e(B:
+
+@vindex nnmail-use-procmail
+@lisp
+(setq nnmail-use-procmail t)
+(setq nnmail-spool-file
+     '("/usr/spool/mail/my-name" "po:my-name"))
+@end lisp
+
+\e$B$3$l$O$$$/$D$+$N!"$*$=$i$/!"4|BT$7$J$$I{8z2L$r$b$?$i$9$G$"$m$&\e(B 
+@code{nnmail-split-methods} \e$B$b@_Dj$7$?$$$H$O;W$o$J$$$H$$$&;v$b0UL#$7$^$9!#\e(B
+
+\e$B%a!<%k%P%C%/%(%s%I$,$I$N%0%k!<%W$K1?$V$+$r?R$M$i$l$?$H$-$O!"$=$l$OB>$NJ}\e(B
+\e$BK!$G1?$V;v$rH/8+$7$?B>$NA4$F$N%0%k!<%W$H6&$K!"$=$NJQ?t$NFbMF$+$iCM$r5"$7\e(B
+\e$B$^$9!#\e(B@code{nnmh} \e$B0J30$N%P%C%/%(%s%I$O<B:]$K%G%#%9%/$X9T$C$F$I$N%0%k!<%W\e(B
+\e$B$,<B:]$KB8:_$7$F$$$k$+$rD4$Y$k$3$H$O$7$^$;$s!#\e(B (\e$BMxMQ<T$,$I$N%0%k!<%W$r\e(B
+\e$B%K%e!<%9%0%k!<%W$N$?$a$G!"$I$N%0%k!<%W$,IaDL$N8E$$%U%!%$%k$d%G%#%l%/%H%j!<\e(B
+\e$B$N$?$a$G$"$k$H9M$($F$$$k$+$r6hJL$9$k;v$O$5$5$$$J;v$G$O$"$j$^$;$s!#\e(B)
+
+\e$B$3$l$O!"$"$J$?$,\e(B gnus (\e$B$H%P%C%/%(%s%I\e(B) \e$B$K<j$G$I$N%0%k!<%W$,B8:_$7$F$$$k\e(B
+\e$B$+$r65$($J$1$l$P$J$i$J$$$H$$$&;v$G$9!#\e(B
+
+@code{nnmh} \e$B%P%C%/%(%s%I$rNc$K<h$C$F$_$^$7$g$&\e(B:
+
+\e$B%U%)%k%@!<$O\e(B @code{nnmh-directory} \e$B$K0LCV$E$1$i$l$F$$$^$9!#$=$&$G$9$M$'!"\e(B
+@file{~/Mail} \e$B$H$7$^$7$g$&!#$=$3$K$O\e(B @file{foo}\e$B!"\e(B@file{bar}\e$B!"\e(B
+@file{mail.baz} \e$B$H$$$&\e(B3\e$B$D$N%U%)%k%@!<$,$"$j$^$9!#\e(B
+
+\e$B%0%k!<%W%P%C%U%!$X9T$C$F!"\e(B@kbd{G m} \e$B$HBG$C$F$/$@$5$$!#F~NO$rB%?J$5$l$?$H\e(B
+\e$B$-$O!"L>A0\e(B (name) \e$B$H$7$F\e(B @samp{foo} \e$B$r!"J}K!\e(B (method) \e$B$H$7$F\e(B @samp{nnmh} 
+\e$B$rEz$($F$/$@$5$$!#\e(B2\e$B$D$NB>$N%0%k!<%W!"\e(B@samp{bar} \e$B$H\e(B @samp{mail.baz} \e$B$N$?\e(B
+\e$B$a$KF1MM$N;v$r\e(B2\e$B2s7+$jJV$7$F$/$@$5$$!#A4$F$N$"$J$?$N%a!<%k%0%k!<%W$r4^$a\e(B
+\e$B$k$h$&$K$7$F$/$@$5$$!#\e(B
+
+\e$B$3$l$GA4It$G$9!#$b$&!"%a!<%k$rFI$`;v$,$G$-$k$h$&$K@_Dj$5$l$F$$$^$9!#$3$N\e(B
+\e$BJ}K!$N8=>u%U%!%$%k$O<+F0E*$K:n@.$5$l$^$9!#\e(B
+
+@vindex nnmail-procmail-suffix
+@vindex nnmail-procmail-directory
+\e$B$b$7\e(B @code{nnfolder} \e$B$dB>$N\e(B2\e$BDL0J>e$N%a!<%k$r0l$D$N%U%!%$%k$KN/$a$k%P%C%/\e(B
+\e$B%(%s%I$r;H$C$F$$$k$N$J$i!"\e(Bgnus \e$B$,8+$k%U%!%$%k$K\e(B procmail \e$B$,%a!<%k$r2C$(\e(B
+\e$B$J$$$h$&$K$7$J$1$l$P$J$j$^$;$s!#Be$o$j$K!"\e(Bprocmail \e$B$OA4$F$NF~$C$F$/$k%a!<\e(B
+\e$B%k$r\e(B @code{nnmail-procmail-directory} \e$B$KF~$l$k$Y$-$G$9!#F~$C$FMh$?%a!<%k\e(B
+\e$B$rF~$l$k%U%!%$%kL>$KE~Ce$9$k$?$a$K!"%0%k!<%WL>$K\e(B 
+@code{nnmail-procmail-suffix} \e$B$rIU2C$7$F$/$@$5$$!#%a!<%k%P%C%/%(%s%I$O$3\e(B
+\e$B$l$i$N%U%!%$%k$+$i%a!<%k$rFI$_9~$_$^$9!#\e(B
+
+@vindex nnmail-reslpit-incoming
+Gnus \e$B$,\e(B @file{mail.misc.spool} \e$B$H8F$P$l$F$$$k%U%!%$%k$rFI$_9~$s$@$H$-$O!"\e(B
+\e$B$3$N%a!<%k$O4|BTDL$j!"\e(B @code{mail.misc} \e$B$KF~$l$i$l$^$9!#$7$+$7!"\e(Bgnus \e$B$K\e(B
+\e$BIaDL$NJ}K!$G%a!<%k$rJ,3d$5$;$?$$>l9g!"\e(B@code{nnmail-resplit-incoming} \e$B$r\e(B 
+@code{t} \e$B$K@_Dj$9$k;v$,$G$-$^$9!#\e(B
+
+@vindex nnmail-keep-last-article
+\e$B$b$7\e(B @code{procmail} \e$B$KF~$C$FMh$?J*$rJ,3d$7$FD>@\\e(B @code{nnmh} \e$B$N%G%#%l%/\e(B
+\e$B%H%j!<$KF~$l$k$h$&$K$7$F$$$k>l9g\e(B (\e$B$3$l$O$9$k$Y$-$G$O$J$$$3$H$G$9$,\e(B)\e$B!"\e(B
+gnus \e$B$,:G8e$N5-;v\e(B (\e$B$9$J$o$A!"$b$C$H$bBg$-$$5-;vHV9f$r;}$D5-;v\e(B) \e$B$r4|8B@Z\e(B
+\e$B$l:o=|$9$k$N$rKI$0$?$a$K!"\e(B@code{nnmail-keep-last-article} \e$B$r\e(B @code{nil} 
+\e$B$G$J$$CM$K@_Dj$9$k$Y$-$G$9!#\e(B
+
+\e$B$3$l$O@_Dj$NNc$G$9\e(B: \e$BF~$C$F$/$k%9%W!<%k$O\e(B @file{~/incoming/} \e$B$KCV$+$l$F$$\e(B
+\e$B$F!"\e(B@samp{""} \e$B$r@\Hx8l$H$7$F;}$C$F$$$^$9\e(B (\e$B$9$J$o$A!"F~$C$F$/$k%9%W!<%k%U%!\e(B
+\e$B%$%k$O$=$l$HEy2A$J%0%k!<%W$HF1$8L>A0$K$J$C$F$$$^$9\e(B)\e$B!#\e(B @code{nnfolder} \e$B%P%C\e(B
+\e$B%/%(%s%I$O%a!<%k%$%s%?!<%U%'!<%9$H$7$F;H$o$l!"\e(B@code{nnfolder} \e$B%G%#%l%/%H\e(B
+\e$B%j!<$O\e(B @file{~/fMail/} \e$B$G$9!#\e(B
+
+@lisp
+(setq nnfolder-directory "~/fMail/*)
+(setq nnmail-spool-file 'procmail)
+(setq nnmail-procmail-directory "~/incoming/")
+(setq gnus-secondary-select-methods '((nnfolder "")))
+(setq nnmail-procmail-suffix "")
+@end lisp
+
+
+@node Incorporating Old Mail
+@subsection \e$B8E$$%a!<%k$r<h$j9~$`\e(B
+
+\e$B$?$$$F$$$N?M$O?'!9$J%U%!%$%k%U%)!<%^%C%H$GC_@Q$5$l$?$?$/$5$s$N8E$$%a!<%k\e(B
+\e$B$,$"$k$G$7$g$&!#$b$7\e(B gnus \e$B$K?h$J\e(B gnus \e$B%a!<%k%P%C%/%(%s%I$N0l$D$r;H$&$h$&\e(B
+\e$B$K@_Dj$7$?$N$G$"$l$P!"$*$=$i$/8E$$%a!<%k$r%a!<%k%0%k!<%W$K<h$j9~$_$?$$$H\e(B
+\e$B;W$&$G$7$g$&!#\e(B
+
+\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$BJ}K!$G$9\e(B:
+
+@enumerate
+@item
+\e$B%0%k!<%W%P%C%U%!$K9T$-$^$9!#\e(B
+
+@item
+`G f' \e$B$HBG$C$F!"\e(Bmbox \e$B%U%!%$%k$+$i\e(B @code{nndoc} \e$B%0%k!<%W$r:n@.$9$k$h$&$K\e(B
+\e$BB%?J$5$l$?$H$-$K\e(B mbox \e$B%U%!%$%k$X$N%Q%9$rM?$($^$9\e(B (@pxref{Foregin
+Groups})\e$B!#\e(B
+
+@item
+`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
+
+@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
+@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
+\e$B$K9-$,$C$F$$$^$9!#$=$l$i$KF~$C$F!"JQ$J8N>c$b$J$/J*;v$,>e<j$/9T$C$F$$$k$+\e(B
+\e$B$I$&$+$rD4$Y$F$/$@$5$$!#$b$7Bg>fIW$J$h$&$G$"$l$P!"\e(Bmbox \e$B%U%!%$%k$r>C$9;v\e(B
+\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
+
+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$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
+\e$B$?$,$=$&$7$m$H?R$M$J$$8B$j$NOC$G$9$,!#\e(B
+
+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(B
+\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$=$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
+
+@vindex gnus-auto-expirable-newgroups
+\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@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
+
+\e$B%G%#%U%)%k%H$G$O<+F04|8B@Z$l>C5n2DG=$r;HMQ$9$k$H!"\e(Bgnus \e$B$O$"$J$?$,FI$s$@\e(B
+\e$BA4$F$N5-;v$r!"$=$l$,4{FI$G$"$C$?$+L$FI$G$"$C$?$+$K4X$o$i$:!"4|8B@Z$l>C5n\e(B
+\e$B2DG=$H$7$F0u$rIU$1$^$9!#4{FI$N0u$NIU$$$?5-;v$,<+F0E*$K4|8B@Z$l>C5n2DG=$H\e(B
+\e$B$7$F0uIU$1$i$l$k$N$rHr$1$k$?$a$K!"0J2<$N$h$&$J$b$N$r\e(B @file{.gnus} \e$B%U%!%$\e(B
+\e$B%k$K=q$/;v$,$G$-$^$9\e(B:
+
+@vindex gnus-mark-article-hook
+@lisp
+(remove-hook 'gnus-mark-article-hook
+             'gnus-summary-mark-read-and-unread-as-read)
+(add-hook 'gnus-mark-article-hook 'gnus-summary-mark-unread-as-read)
+@end lisp
+
+\e$B<+F04|8B@Z$l>C5n2DG=%0%k!<%W$r:n$k;v$O!"A4$F$N4{FI5-;v$,4|8B@Z$l>C5n$5$l\e(B
+\e$B$k;v$G$O$J$$;v$K5$$rIU$1$F$/$@$5$$\e(B---\e$B4|8B@Z$l>C5n2DG=$H$7$F0u$NIU$$$?5-\e(B
+\e$B;v$@$1$,4|8B@Z$l>C5n$5$l$^$9!#L?Na\e(B @kbd{d}\e$B$,<+F0E*$K%0%k!<%W$r4|8B@Z$l>C\e(B
+\e$B5n2DG=$K$9$k$N$G$OL5$$$H$$$&;v$K$b5$$rIU$1$F$/$@$5$$\e(B---\e$BH><+F0$N!"<+F04|\e(B
+\e$B8B@Z$l>C5n2DG=%0%k!<%W$G5-;v$r4{FI$K0uIU$1$k$3$H$@$1$,5-;v$r4|8B@Z$l>C5n\e(B
+\e$B2DG=$K$7$^$9!#\e(B
+
+@lisp
+(setq gnus-auto-expirable-newgroups
+      "mail.nosense-list\\|mail.nice-list")
+@end lisp
+
+\e$B<+F04|8B@Z$l>C5n$r<B9T$9$kB>$NJ}K!$O!"%0%k!<%W$N%0%k!<%W%Q%i%a!<%?$H$7$F!"\e(B
+\e$BMWAG\e(B @code{auto-expirable} \e$B$r;}$D;v$G$9!#\e(B
+
+\e$B$b$7E,1~%9%3%"IU$1\e(B (@pxref{Adaptive Scoring}) \e$B$H<+F04|8B@Z$l>C5n$r;HMQ$7\e(B
+\e$B$F$$$k$J$i!"LdBj$,5/$3$k$G$7$g$&!#<+F04|8B@Z$l>C5n$HE,1~%9%3%"IU$1$O$"$^\e(B
+\e$B$jNI$/Aj8_:nMQ$7$^$;$s!#\e(B
+
+@vindex nnmail-expiry-wait
+\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
+
+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:
+
+@vindex nnmail-expiry-wait-function
+@lisp
+(setq nnmail-expiry-wait-function
+      (lambda (group)
+       (cond ((string= group "mail.private")
+               31)
+             ((string= group "mail.junk")
+               1)
+             ((string= group "important")
+              'never)
+             (t
+               6))))
+@end lisp
+
+\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$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{Groups Parameters})\e$B!#\e(B
+
+@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
+\e$B%9%0%k!<%W$N:G8e$N5-;v$r7h$7$F4|8B@Z$l>C5n$7$^$;$s!#$3$l$O\e(B procmail \e$B$NMx\e(B
+\e$BMQ<T$N?M@8$r3Z$K$9$k$?$a$G$9!#\e(B
+
+@vindex gnus-total-expirable-newsgroups
+\e$B$H$3$m$G\e(B: \e$B$=$3$K$"$k!"\e(Bgnus \e$B$,7h$7$F4|8B@Z$l>C5n2DG=$G$J$$5-;v$r4|8B@Z$l\e(B
+\e$B>C5n$9$k;v$O$J$$!"$H$$$&$N$O13$G$9!#\e(B@code{total-expire} \e$B$r%0%k!<%W%Q%i%a!<\e(B
+\e$B%?$KF~$l$k$H!"5-;v$O4|8B@Z$l>C5n$N0u$,IU$-$^$;$s$,!"A4$F$N5-;v$O4|8B@Z$l\e(B
+\e$B>C5n2aDx$KF~$l$i$l$^$9!#Hs>o$KCm0U$7$F;H$C$F$/$@$5$$!#$5$i$K$b$C$H4m81$J\e(B
+\e$B$b$N$OJQ?t\e(B @code{gnus-total-expirable-newsgroups} \e$B$G$9!#$3$N@55,I=8=$K9g\e(B
+\e$BCW$9$kA4$F$N%0%k!<%W$OA4$F$N4{FI5-;v$,4|8B@Z$l>C5n2DG=$N2aDx$KFM$C9~$^$l\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$?$$$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
+
+
+@node Washing Mail
+@subsection \e$B%a!<%k@vBu\e(B
+@cindex mail washing
+@cindex list server brain damage
+@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%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
+\e$B$J;v$O$=$3$G$O5DO@$5$l$F$$$^$;$s!#$G$9$+$i!#$=$&$$$&$3$H$G$9!#\e(B
+
+\e$BLdBjE@\e(B: \e$B%I%$%DHG\e(B Microsoft Exchange \e$B$OJVEz$NI=Bj$K\e(B @samp{Re: } \e$B$NBe$o$j\e(B
+\e$B$K\e(B @samp{AW: } \e$B$rIU$12C$($^$9!#;d$O$3$l$KF0MI$7$FO5Gb$7$F$$$k$U$j$r$9$k\e(B
+\e$B$3$H$b$G$-$^$7$?$,!"$=$&$9$k5$NO$,$"$j$^$;$s$G$7$?!#$=$l$O>P$&$Y$-;v$G$9!#\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?t$,$"$j$^$9!#\e(B
+
+@table @code
+@item nnmail-prepare-incoming-hook
+@vindex nnmail-prepare-incoming-hook
+\e$B$3$N%U%C%/$O%a!<%k$K2?$+$r$9$kA0$K8F$P$l!"4pK\E*$J!"%a!<%k$rA]$$$F$-$l$$\e(B
+\e$B$K$9$k=j:n$N$?$a$K$"$j$^$9!#;H$&;v$N$G$-$k4X?t$O\e(B:
+
+@table @code
+@item nnheader-ms-strip-cr
+@findex nnheader-ms-strip-cr
+\e$B$=$l$>$l$N9T$+$i!":G8e$K$"$k%-%c%j%C%8%j%?!<%s\e(B (carriage return) \e$B$r<h$j\e(B
+\e$B=|$-$^$9!#$3$l$O\e(B MS \e$B$N%^%7%s>e$GF0:n$7$F$$$k\e(B Emacs \e$B$N%G%#%U%)%k%H$G$9!#\e(B
+
+@end table
+
+@item nnmail-prepare-incoming-header-hook
+@vindex nnmail-prepare-incoming-header-hook
+\e$B$3$N%U%C%/$O$=$l$>$l$N%X%C%@!<$KHO0O$r69$a$i$l$F\e(B (narrowed) \e$B8F$P$l$^$9!#\e(B
+\e$B%X%C%@!<$r$-$l$$$K$9$k$H$-$K;H$&;v$,$G$-$^$9!#;H$&;v$N$G$-$k4X?t$O\e(B:
+
+@table @code
+@item nnmail-remove-leading-whitespace
+@findex nnmail-remove-leading-whitespace
+\e$B%X%C%@!<$K$=$l$,NI$/8+$($k$h$&$K\e(B ``\e$BM-MQ$J\e(B'' \e$B%j%9%H%5!<%P!<$,A0$NJ}$KIU$1\e(B
+\e$B2C$($?6uGr$rL5$/$7$^$9!#$"$!$!!#\e(B
+
+@item nnmail-remove-list-identifiers
+@findex nnmail-remove-list-identifiers
+\e$B$$$/$D$+$N%j%9%H%5!<%P!<$OF10l<1JL;R$rIU$12C$($^$9\e(B---\e$BNc$($P!"\e(B
+@samp{(idm)}---\e$B$rA4$F$N\e(B @code{Subject} \e$B%X%C%@!<$N:G=i$KIU$1$^$9!#$=$l$O!"\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
+
+\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:
+
+@lisp
+(setq nnmail-list-identifiers
+      '("(idm)" "nagnagnag"))
+@end lisp
+
+@item nnmail-remove-tabs
+@findex nnmail-remove-tabs
+\e$BA4$F$N\e(B @samp{TAB} \e$BJ8;z$r\e(B @samp{SPACE} \e$BJ8;z$KJQ49$7$^$9!#\e(B
+
+@end table
+
+@item nnmail-prepare-incoming-message-hook
+@vindex nnmail-prepare-incoming-message-hook
+\e$B$3$N%U%C%/$O$=$l$>$l$N%a%C%;!<%8$KHO0O$r69$a$i$l$F8F$P$l$^$9!#;H$&;v$N$G\e(B
+\e$B$-$k4X?t$O\e(B:
+
+@table @code
+@item article-de-quoted-unreadable
+@findex article-de-quoted-unreadable
+Quoted Readable \e$BId9f2=$rI|9f2=$7$^$9!#\e(B
+
+@end table
+@end table
+
+
+@node Duplicates
+@subsection \e$B=EJ#\e(B
+
+@vindex nnmail-treat-duplicates
+@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
+@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$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
+
+\e$B$b$7A4$F$N=EJ#%a!<%k$rFCJL$J\e(B @dfn{duplicate} \e$B%0%k!<%W$KF~$l$?$$$N$G$"$l\e(B
+\e$B$P!"IaDL$N%a!<%kJ,3dJ}K!$r;H$C$F$=$l$r$9$k$3$H$,$G$-$^$9\e(B:
+
+@lisp
+(setq nnmail-split-fancy
+      '(| ;; \e$B=EJ#%a%C%;!<%8$OJ,N%$5$l$?%0%k!<%W$X9T$-$^$9!#\e(B
+        ("gnus-warning" "duplication of message" "duplicate")
+        ;; \e$B%G!<%b%s$d%]%9%H%^%9%?!<$d;w$?$h$&$J$b$N$+$i$N\e(B
+        ;; \e$B%a%C%;!<%8$OB>$N$H$3$m$X!#\e(B
+        (any mail "mail.misc")
+        ;; \e$BB>$NK!B'!#\e(B
+        [ ... ] ))
+@end lisp
+
+\e$B$b$7$/$O<!$N$h$&$J$b$N\e(B:
+@lisp
+(setq nnmail-split-methods
+      '(("duplicates" "^Gnus-Warning:")
+        ;; \e$BB>$NK!B'!#\e(B
+        [...]))
+@end lisp
+
+\e$B$9$P$i$7$$5!G=$,$"$j$^$9\e(B: \e$B$b$7<u$1<j$,%a!<%k$r\e(B gnus \e$B$GFI$s$G$$$k;v$rCN$C\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
+
+
+@node Not Reading Mail
+@subsection \e$B%a!<%k$rFI$`$N$G$O$J$$\e(B
+
+\e$B%a!<%k%P%C%/%(%s%I$r;H$$;O$a$k$H!"$=$l$i$K$O$"$J$?$,$=$l$i$G%a!<%k$rFI$_\e(B
+\e$B$?$$$H;W$C$F$$$k$H2>Dj$9$k$H$$$&$&$k$5$$JJ$,$"$j$^$9!#$3$l$O$b$C$H$b$G$J\e(B
+\e$B$$;v$G$O$J$$$+$b$7$l$^$;$s$,!"$"$J$?$NK>$`;v$G$O$J$$$+$b$7$l$^$;$s!#\e(B
+
+\e$B$b$7\e(B @code{nnmail-spool-file} \e$B$r\e(B @code{nil} \e$B$K@_Dj$9$k$H!"$I$N%P%C%/%(%s\e(B
+\e$B%I$bF~$C$F$/$k%a!<%k$rFI$b$&$H;n$_$k;v$O$J$/!"K>$`;v$N<j=u$1$K$J$k$G$7$g\e(B
+\e$B$&!#\e(B
+
+@vindex nnbabyl-get-new-mail
+@vindex nnmbox-get-new-mail
+@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-
+@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$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
+
+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
+
+@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
+@end menu
+
+
+@node Unix Mail Box
+@subsection Unix \e$B%a!<%k%\%C%/%9\e(B
+@cindex nnmbox
+@cindex unix mail box
+
+@vindex nnmbox-active-file
+@vindex nnmbox-mbox-file
+@dfn{nnmbox} \e$B%P%C%/%(%s%I$O%a!<%k$rC_B"$9$k$?$a$KI8=`$N\e(B Un*x mbox \e$B%U%!%$\e(B
+\e$B%k$rMQ$$$^$9!#\e(B@code{nnmbox} \e$B$O$=$l$>$l$N%a!<%k5-;v$K$=$l$,$I$N%0%k!<%W$K\e(B
+\e$BB0$7$F$$$k$+$r<($9DI2C$N%X%C%@!<$r2C$($^$9!#\e(B
+
+\e$B;v<B>e$N%5!<%P!<$N@_Dj\e(B:
+
+@table @code
+@item nnmbox-mbox-file
+@vindex nnmbox-mbox-file
+\e$BMxMQ<T$N%[!<%`%G%#%l%/%H%j!<$N%a!<%k%\%C%/%9$NL>A0!#\e(B
+
+@item nnmbox-activate-file
+@vindex nnmbox-active-file
+\e$B%a!<%k%\%C%/%9$N8=>u%U%!%$%k$NL>A0!#\e(B
+
+@item nnmbox-get-new-mail
+@vindex nnmbox-get-new-mail
+@code{nil} \e$B$G$J$1$l$P!"\e(B@code{nnmbox} \e$B$OF~$C$FMh$?%a!<%k$rFI$_9~$s$G%0%k!<\e(B
+\e$B%W$KJ,3d$7$^$9!#\e(B
+@end table
+
+
+@node Rmail Babyl
+@subsection Rmail Babyl
+@cindex nnbabyl
+@cindex rmail mbox
+
+@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
+
+\e$B;v<B>e$N%5!<%P!<$N@_Dj\e(B:
+
+@table @code
+@item nnbabyl-mbox-file
+@vindex nnbabyl-mbox-file
+rmail mbox \e$B%U%!%$%k$NL>A0\e(B
+
+@item nnbabyl-active-file
+@vindex nnbabyl-active-file
+rmail box \e$B$N$?$a$N8=>u%U%!%$%k$NL>A0!#\e(B
+
+@item nnbabyl-get-new-mail
+@vindex nnbabyl-get-new-mail
+@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
+@subsection \e$B%a!<%k%9%W!<%k\e(B
+@cindex nnml
+@cindex mail @sc{nov} spool
+
+@dfn{nnml} \e$B%9%W!<%k%a!<%kMM<0$OB>$NCN$i$l$?MM<0$H$O8_49@-$,$"$j$^$;$s!#\e(B
+\e$B$=$l$O>/$7Cm0U$7$F;H$o$l$k$Y$-$G$9!#\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$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
+
+\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$-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
+
+@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;v<B>e$N%5!<%P!<$N@_Dj\e(B:
+
+@table @code
+@item nnml-directory
+@vindex nnml-directory
+\e$BA4$F$N\e(B @code{nnml} \e$B%G%#%l%/%H%j!<$O$3$N%G%#%l%/%H%j!<$N2<$KCV$+$l$^$9!#\e(B
+
+@item nnml-active-file
+@vindex nnml-active-file
+@code{nnml} \e$B%5!<%P!<$N$?$a$N8=>u%U%!%$%k!#\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
+
+@item nnml-get-new-mail
+@vindex nnml-get-new-mail
+@code{nil} \e$B$G$J$1$l$P!"\e(B@code{nnml} \e$B$OF~$C$FMh$?%a!<%kFI$_9~$_$^$9!#\e(B
+
+@item nnml-nov-is-evil
+@vindex nnml-nov-is-evil
+@code{nil} \e$B$G$J$1$l$P!"$3$N%P%C%/%(%s%I$O$I$N\e(B @sc{nov} \e$B%U%!%$%k$bL5;k$7\e(B
+\e$B$^$9!#\e(B
+
+@item nnml-nov-file-name
+@vindex nnml-nov-file-name
+@sc{nov} \e$B%U%!%$%k$NL>A0!#%G%#%U%)%k%H$O\e(B @file{.overview} \e$B$G$9!#\e(B
+
+@item nnml-prepare-save-mail-hook
+@vindex nnml-prepare-save-mail-hook
+\e$BJ]B8$9$kA0$K5-;v$KHO0O$r69$a$F<B9T$9$k%U%C%/$G$9!#\e(B
+
+@end table
+
+@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
+
+
+@node MH Spool
+@subsection MH \e$B%9%W!<%k\e(B
+@cindex nnmh
+@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$H8=>u%U%!%$%k$rJ];}\e(B
+\e$B$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$$$^$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$$$^$9!#\e(B
+
+\e$B;v<B>e$N%5!<%P!<$N@_Dj\e(B:
+
+@table @code
+@item nnmh-directory
+@vindex nnmh-directory
+\e$BA4$F$N\e(B @code{nnmh} \e$B%G%#%l%/%H%j!<$O$3$N%G%#%l%/%H%j!<$N2<$KCV$+$l$^$9!#\e(B
+
+@item nnmh-get-new-mail
+@vindex nnmh-get-new-mail
+@code{nil} \e$B$G$J$1$l$P!"\e(B@code{nnmh} \e$B$OF~$C$F$/$k%a!<%k$rFI$_9~$_$^$9!#\e(B
+
+@item nnmh-be-safe
+@vindex nnmh-be-safe
+@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
+@end table
+
+@node Mail Folders
+@subsection \e$B%a!<%k%U%)%k%@!<\e(B
+@cindex nnfolder
+@cindex mbox folders
+@cindex mail folders
+
+@code{nnfolder} \e$B$O$=$l$>$l$N%a!<%k%0%k!<%W$r0c$C$?%U%!%$%k$KC_B"$9$k%P%C\e(B
+\e$B%/%(%s%I$G$9!#$=$l$>$l$N%U%!%$%k$OI8=`$N\e(B Un*x mbox \e$BMM<0$G$9!#\e(B
+@code{nnfolder} \e$B$O5-;vHV9f$HE~CeF|$r5-O?$7$F$*$/$?$a$NDI2C$N%X%C%@!<$r2C\e(B
+\e$B$($^$9!#\e(B
+
+\e$B;v<B>e$N%5!<%P!<$N@_Dj\e(B:
+
+@table @code
+@item nnfolder-directory
+@vindex nnfolder-directory
+\e$BA4$F$N\e(B @code{nnfolder} \e$B%a!<%k%\%C%/%9$O$3$N%G%#%l%/%H%j!<$N2<$KCV$+$l$^\e(B
+\e$B$9!#\e(B
+
+@item nnfolder-active-file
+@vindex nnfolder-active-file
+\e$B8=>u%U%!%$%k$NL>A0!#\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
+
+@item nnfolder-get-new-mail
+@vindex nnfolder-get-new-mail
+@code{nil} \e$B$G$J$1$l$P!"\e(B@code{nnfolder} \e$B$OF~$C$F$/$k%a!<%k$rFI$_9~$_$^$9!#\e(B
+@end table
+
+@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!#\e(B
+
+
+@node Other Sources
+@section \e$B$=$NB>$N%0%k!<%W8;\e(B
+
+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$K<($9J}K!$K$h$C$F!"\e(Bgnus \e$B$G%G%#%l%/%H%j!<$d%U%!%$%k$r!"$"$?$+$b\e(B
+\e$B%K%e!<%9%0%k!<%W$G$"$k$+$N$h$&$K1\Mw$9$k$3$H$,$G$-$k$h$&$K$J$j$^\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
+* 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
+* Web Searches::          \e$BJ8;zNs$K%^%C%A$9$k5-;v$+$i%0%k!<%W$r:n$k!#\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
+@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$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
+
+@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{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
+
+
+@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$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
+
+@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
+
+@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
+
+@table @code
+@cindex babyl
+@cindex rmail mbox
+
+@item babyl
+babyl (rmail) \e$B7A<0$N%a!<%k%\%C%/%9!#\e(B
+@cindex mbox
+@cindex Unix mbox
+
+@item mbox
+\e$BI8=`\e(B Unix mbox \e$B%U%!%$%k!#\e(B
+
+@cindex MMDF mail box
+@item mmdf
+MMDF \e$B7A<0$N%a!<%k%\%C%/%9!#\e(B
+
+@item news
+\e$B$$$/$D$+$N%K%e!<%95-;v$,O"7k$5$l$?0l$D$N%U%!%$%k!#\e(B
+
+@item rnews
+@cindex rnews batch files
+rnews \e$B$N%P%C%AE>Aw7A<0!#\e(B
+@cindex forwarded messages
+
+@item forward
+\e$BE>Aw$5$l$?5-;v!#\e(B
+
+@item mime-digest
+@cindex digest
+@cindex MIME digest
+@cindex 1153 digest
+@cindex RFC 1153 digest
+@cindex RFC 341 digest
+MIME (RFC 1341) \e$B$^$H$aAw$j7A<0!#\e(B
+
+@item standard-digest
+\e$BI8=`\e(B (RFC 1153) \e$B$^$H$aAw$j7A<0!#\e(B
+
+@item slack-digest
+\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$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
+
+@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
+@end table
+
+@menu
+* 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
+
+\e$B$^$:!"$3$l$,J8=q<oJLDj5A$NNc$G$9!#\e(B
+
+@example
+(mmdf
+ (article-begin .  "^\^A\^A\^A\^A\n")
+ (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
+
+@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
+
+@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
+
+@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
+
+@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
+
+@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
+
+@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
+
+@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
+
+@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
+
+@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
+
+@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
+
+@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
+
+@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
+
+@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
+
+@end table
+
+\e$B;d$,:n$C$?Cf$G:G$bJ#;($JNc\e(B --- \e$BI8=`$^$H$aAw$j7A<0$r8+$F$_$^$7$g$&!#\e(B
+
+@example
+(standard-digest
+ (first-article . ,(concat "^" (make-string 70 ?-) "\n\n+"))
+ (article-begin . ,(concat "\n\n" (make-string 30 ?-) "\n\n+"))
+ (prepare-body-function . nndoc-unquote-dashes)
+ (body-end-function . nndoc-digest-body-end)
+ (head-end . "^ ?$")
+ (body-begin . "^ ?\n")
+ (file-end . "^End of .*digest.*[0-9].*\n\\*\\*\\|^End of.*Digest *$")
+ (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
+
+\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
+
+
+@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!
+
+\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$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
+
+@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
+
+\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
+
+@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
+
+@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
+
+@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
+
+@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})
+(@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
+
+@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
+
+@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
+
+@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
+
+@item
+\e$B$3$N%Q%1%C%H$r%5!<%P!<$KE>Aw$7$^$9!#\e(B
+
+@item
+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
+\e$B$"$H$O$3$l$r;`$L$^$GB3$1$^$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=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
+@end menu
+
+
+@node SOUP Commands
+@subsubsection SOUP \e$BL?Na\e(B
+
+\e$B$3$l$i$NL?Na$O\e(B @sc{soup} \e$B%Q%1%C%H$N:n@.$HA`:n$r9T$J$&$b$N$G$9!#\e(B
+
+@table @kbd
+@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
+
+@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
+
+@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
+
+@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
+
+@item G s r
+@kindex G s r (Group)
+@findex nnsoup-pack-replies
+\e$BA4$F$NJV?.$rJV?.%Q%1%C%H$K:-Jq$9$k\e(B (@code{nnsoup-pack-replies})\e$B!#\e(B
+
+@item O s
+@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
+
+@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
+
+@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
+
+@item gnus-soup-replies-directory
+@vindex gnus-soup-replies-directory
+\e$BJV?.%Q%1%C%HAw?.Cf$K\e(B gnus \e$B$,;HMQ$9$k0l;~%G%#%l%/%H%j!<!#\e(B
+@file{~/SoupBrew/SoupReplies/} \e$B$,=i4|@_DjCM!#\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
+
+@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
+
+@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
+
+@item gnus-soup-packet-directory
+@vindex gnus-soup-packet-directory
+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
+
+@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
+
+\e$B$3$l$i$O$3$N?6$kIq$$$r%+%9%?%^%$%:$G$-$kJQ?t$G$9!#\e(B
+
+@table @code
+
+@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
+
+@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
+
+@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
+
+@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
+
+@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!
+
+@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
+
+@item nnsoup-packer
+@vindex nnsoup-packer
+\e$BJV?.\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/Soupin%d.tgz}\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
+
+@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
+
+@item nnsoup-packet-regexp
+@vindex nnsoup-packet-regexp
+\e$BF~$C$F$-$?\e(B @sc{soup} \e$B%Q%1%C%H$K%^%C%A$9$k@55,I=8=!#=i4|@_DjCM\e(B
+\e$B$O\e(B @samp{Soupout}\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
+
+@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
+
+@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
+
+\e$BFCJL$K!"$3$l$,<B:]$K9T$o$l$k$3$H$G$9!#\e(B
+
+@lisp
+(setq message-send-news-function 'nnsoup-request-post)
+(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
+
+
+@node Web Searches
+@subsection \e$B%&%'%V8!:w\e(B
+@cindex nnweb
+@cindex DejaNews
+@cindex Alta Vista
+@cindex InReference
+@cindex Usenet searches
+@cindex searching the Usenet
+
+\e$B$=$l$O!"$J$s$H$$$&$+!"\e(BUsenet \e$B$+$iJ8;zNs$K%^%C%A$9$k5-;v$r8!:w$9\e(B
+\e$B$k$N$O$H$F$bAG@2$i$7$$$s$@$1$I!"$=$N!"$"$N%&%'%V%V%i%&%6!<$C$F$d\e(B
+\e$B$D$r;H$C$F!"$=$s$G$b$C$F!"@kEA$rFI$^$;$i$l$k$C$F$$$&$N$O!"$=$N!"\e(B
+\e$B$J$s$H$$$&$+!"$[$s$H$&$K\e(B @emph{\e$B!VITMM$M!W\e(B} \e$B$H$$$&$+!"$=$l$G!"\e(B
+gnus \e$B$G$O%V%i%&%6!<$r;H$o$:$K!"$=$N!"\e(B@emph{\e$BD6$+$C$3$h$/\e(B}\e$B$=$l$,$G\e(B
+\e$B$-$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%$\e(B
+\e$B%s%?!<%U%'!<%9$rDs6!$7$^$9!#\e(B@code{nnweb} \e$B%0%k!<%W$r:n@.$7!"8!:w\e(B
+\e$B%Q%?!<%s$rF~NO$7!"$=$7$F$=$N%0%k!<%W$KF~$C$FB>$NIaDL$N%0%k!<%W$N\e(B
+\e$B$h$&$K5-;v$rFI$_$^$9!#%0%k!<%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$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\e(B
+\e$B$N%0%k!<%W$G$O5-;vHV9f$O$4$/0l;~E*$J$b$N$H$7$F07$$$^$9!#$D$^$j!"\e(B
+@code{nnweb} \e$B%0%k!<%W$KF~$k$?$S$K\e(B(\e$B$?$H$(8!:w%Q%?!<%s$rJQ99$7$F$$\e(B
+\e$B$J$/$H$b\e(B)\e$B!"5-;v$N=g=x$,0c$C$F$$$k$+$b$7$l$^$;$s!#$^$?!"=EJ#M^@)\e(B 
+(@pxref{Duplicate Suppression}) \e$B$r;H$C$F$b$&$^$/F/$+$J$$$G$7$g$&!#\e(B
+\e$B$H$$$&$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\e(B
+\e$B$F5-;v$rFI$_9~$`$^$G$O!"\e(B@code{Message-ID} \e$B$rCN$k$3$H$O$G$-$J$$$+\e(B
+\e$B$i$G$9!#$"$J$?$,FI$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%"$rIU$1$k$3$H$@$1$G$9\e(B --- \e$B$D$^\e(B
+\e$B$j$"$J$?$,$=$N%0%k!<%W$r:G8e$KFI$s$@F|IU$h$j!"A0$KEj9F$5$l$?5-;v\e(B
+\e$B$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\e(B
+\e$B$&$^$/2r<a$G$-$:!"=hM}$O<:GT$9$k$G$7$g$&!#$b$7%&%'%VDs6!<TC#$,$=\e(B
+\e$B$s$J$3$H$r$7$?$i!"H`$i$r7c$7$/@U$a$k$Y$-$G$7$g$&\e(B --- \e$B$=$l$O9-9p\e(B
+\e$B$G6b$r2T$0$N$,H`$i$N\e(B @emph{\e$BB8:_M}M3\e(B} \e$B$G$"$j!"<R2q$K%5!<%S%9$rDs\e(B
+\e$B6!$9$k$3$H$G$O$J$$$+$i$G$9!#\e(B@code{nnweb} \e$B$OA4$F$N5-;v$+$i9-9p$r\e(B
+\e$B@v$$N.$7$F$7$^$&$N$G!"Ds6!<T$?$A$,%`%+$D$$$F$$$k$H;W$o$l$k$+$bCN\e(B
+\e$B$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%$\e(B
+\e$B%s%9%H!<%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
+\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}\e$B!"\e(B @code{dejanewsold}\e$B!"\e(B @code{altavista}\e$B!"\e(B
+@code{reference} \e$B$G$9!#\e(B
+
+@item nnweb-search
+@vindex nnweb-search
+\e$B8!:w%(%s%8%s$KM?$($k8!:wJ8;zNs!#\e(B
+
+@item nnweb-max-hits
+@vindex nnweb-max-hits
+\e$BI=<($9$k8!:w7k2L$N:GBg?t!#%G%U%)%k%H$O\e(B 100 \e$B$G$9!#\e(B
+
+@item nnweb-type-definition
+@vindex nnweb-type-definition
+\e$B7?!&Dj5AO"A[%j%9%H!#$3$NO"A[%j%9%H$O!"$5$^$6$^$J8!:w%(%s%8%s$N<o\e(B
+\e$BN`$KBP$7$F!"\e(B @code{nnweb} \e$B$,$I$&$9$Y$-$+$rM?$($^$9!#0J2<$K<($9MW\e(B
+\e$BAG$rM?$($J$/$F$O$J$j$^$;$s!#\e(B
+
+@table @code
+@item article
+\e$B5-;v$rI|9f2=$7!"\e(Bgnus \e$B$,M}2r$G$-$k7A$GDs6!$9$k4X?t!#\e(B
+
+@item map
+\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
+\e$B8!:w%(%s%8%s$K8!:wJ8;zNs$rAw$k4X?t!#\e(B
+
+@item address
+\e$BA0=R$N4X?t$,8!:wJ8;zNs$rAw$k$Y$-%"%I%l%9!#\e(B
+
+@item 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 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$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$B0J2<$O%5!<%P!<JQ?t$G$9!#\e(B
+
+@table @code
+@item nngateway-address
+@vindex nngateway-address
+\e$B$3$l$,%a!<%k!&%K%e!<%9%2!<%H%&%'%$$N%"%I%l%9$G$9!#\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=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
+
+@example
+Newsgroups: alt.religion.emacs
+@end example
+
+\e$B$r;}$D5-;v$K$O!"<!$N$h$&$J\e(B @code{To} \e$B%X%C%@!<$,A^F~$5$l$^$9!#\e(B
+
+@example
+To: alt-religion-emacs@@GATEWAY
+@end example
+
+@end table
+
+\e$B$D$^$j!"$3$l$r;H$&$K$O!"$3$s$JIw$K$9$k$@$1$G$9!#\e(B
+
+@lisp
+(setq gnus-post-method '(nngateway "GATEWAY.ADDRESS"))
+@end lisp
+
+
+@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
+
+@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
+@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
+
+\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$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$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$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
+
+@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$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
+
+@example
+"^nntp\\+some\\.server\\.jp:soc\\.motss$\\|^nntp\\+some\\.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$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$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
+
+@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
+
+@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!
+
+@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
+
+@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
+
+\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
+
+@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
+
+\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
+
+@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
+
+@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
+
+
+@node Gnus Unplugged
+@section Gnus \e$B$N@Z$jN%$7\e(B
+@cindex offline
+@cindex unplugged
+@cindex Agent
+@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
+
+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
+
+@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
+
+@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
+
+@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$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
+
+@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
+@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%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%@%&%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%(!<%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
+
+@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
+
+@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)
+
+@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
+
+@item
+\e$B$=$7$FBh\e(B 2 \e$B%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
+
+@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
+
+@item
+\e$B%@%&%s%m!<%IJ}?K$r7hDj$7$^$9!#\e(B@xref{Agent Categories}
+
+@item
+\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$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@.$7$F!"$=$7$F$=$NJ,N`$K$$$/$D$+\e(B (\e$B$"$k$$$O\e(B
+\e$BA4It\e(B) \e$B$N%0%k!<%W$r3d$jEv$F$^$9!#\e(Bgnus \e$B$OJ,N`$N:n@.$H4IM}$N$?$a$N\e(B
+\e$BFH<+$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
+@end menu
+
+
+@node Category Syntax
+@subsubsection \e$BJ,N`$NJ8K!\e(B
+
+\e$BJ,N`$OFs$D$N$b$N$+$i$J$j$^$9!#\e(B
+
+@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
+
+@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$OA4$/4X78$,L5$$$3$H$KCm0U$7$F$/$@$5$$!#\e(B)
+@end enumerate
+
+\e$B=R8l$OO@M}1i;;;R$,4V$K;6$j$P$a$i$l$?=R8l$NAH$_9g$o$;$+$i$J$j$^$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)
+
+@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$3$l$O$b$C$HJ#;($J=R8l$G$9!#\e(B
+
+@lisp
+(or high
+    (and
+     (not low)
+     (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;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$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
+
+@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
+
+@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
+
+@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
+
+@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
+
+@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
+
+@item true
+\e$B>o$K??!#\e(B
+
+@item false
+\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$5$F!"%@%&%s%m!<%I%9%3%"$NJ8K!$ODL>o$N%9%3%"%U%!%$%k$NJ8K!$HF1$8\e(B
+\e$B$G$9$,!"Nc30$H$7$F!"<B:]$K5-;v<+?H$rD4$Y$kI,MW$,$"$kMWAG$O6X;_$5\e(B
+\e$B$l$F$$$^$9!#$D$^$j!"0J2<$N%X%C%@!<$N$_$,%9%3%"IU$1$G$-$^$9\e(B:
+@code{From}\e$B!"\e(B@code{Subject}\e$B!"\e(B@code{Date}\e$B!"\e(B@code{Xref}\e$B!"\e(B 
+@code{Lines}\e$B!"\e(B @code{Chars}\e$B!"\e(B @code{Message-ID}\e$B!"\e(B 
+@code{References}\e$B!#\e(B
+
+@node The Category Buffer
+@subsubsection \e$BJ,N`%P%C%U%!!<\e(B
+
+\e$BDL>o$OA4$F$NJ,N`$OJ,N`%P%C%U%!!<$+$i4IM}$7$^$9!#\e(B(\e$B%0%k!<%W%P%C%U%!!<\e(B
+\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
+@item q
+@kindex q (Category)
+@findex gnus-category-exit
+\e$B%0%k!<%W%P%C%U%!!<$KLa$k\e(B (@code{gnus-category-exit})\e$B!#\e(B
+
+@item k
+@kindex k (Category)
+@findex gnus-category-kill
+\e$B8=:_$NJ,N`$r>C5n$9$k\e(B (@code{gnus-category-kill})\e$B!#\e(B
+
+@item c
+@kindex c (Category)
+@findex gnus-category-copy
+\e$B8=:_$NJ,N`$rJ#@=$9$k\e(B (@code{gnus-category-copy})\e$B!#\e(B
+
+@item a
+@kindex a (Category)
+@findex gnus-category-add
+\e$B?7$7$$J,N`$rDI2C$9$k\e(B (@code{gnus-category-add})\e$B!#\e(B
+
+@item p
+@kindex p (Category)
+@findex gnus-category-edit-predicate
+\e$B8=:_$NJ,N`$N=R8l$rJT=8$9$k\e(B (@code{gnus-category-edit-predicate})\e$B!#\e(B
+
+@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
+
+@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
+
+@item l
+@kindex l (Category)
+@findex gnus-category-list
+\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
+
+@table @code
+@item gnus-category-mode-hook
+@vindex gnus-category-mode-hook
+\e$BJ,N`%P%C%U%!!<$G<B9T$9$k%U%C%/!#\e(B
+
+@item gnus-category-line-format
+@vindex gnus-category-line-format
+\e$BJ,N`%P%C%U%!!<$N9TMM<0\e(B (@pxref{Formatting Variables})\e$B!#@5Ev$JMWAG$O!"\e(B
+
+@table @samp
+@item c
+\e$BJ,N`$NL>A0!#\e(B
+
+@item g
+\e$BJ,N`$KB0$9$k%0%k!<%W$N?t!#\e(B
+@end table
+
+@item gnus-category-mode-line-format
+@vindex gnus-category-mode-line-format
+\e$BJ,N`%b!<%I9T$NMM<0!#\e(B
+
+@item gnus-agent-short-article
+@vindex gnus-agent-short-article
+\e$B$3$NJQ?t$h$j>/$J$$9T?t$N5-;v$OC;$$!#=i4|@_DjCM$O\e(B 100\e$B!#\e(B
+
+@item gnus-agent-long-article
+@vindex gnus-agent-long-article
+\e$B$3$NJQ?t$h$jB?$$9T?t$N5-;v$OD9$$!#=i4|@_DjCM$O\e(B 200\e$B!#\e(B
+
+@item gnus-agent-low-score
+@vindex gnus-agent-low-score
+\e$B$3$NCM$h$j>.$5$$%9%3%"$r;}$D5-;v$ODc%9%3%"$G$"$k!#=i4|@_DjCM$O\e(B 0\e$B!#\e(B
+
+@item gnus-agent-high-score
+@vindex gnus-agent-high-score
+\e$B$3$NCM$h$jBg$-$$%9%3%"$r;}$D5-;v$O9b%9%3%"$G$"$k!#=i4|@_DjCM$O\e(B 0\e$B!#\e(B
+
+@end table
+
+
+@node Agent Commands
+@subsection \e$B%(!<%8%'%s%HL?Na\e(B
+
+\e$BA4$F$N\e(B gnus \e$B%(!<%8%'%s%HL?Na$O\e(B @kbd{J} \e$B%5%V%^%C%W$K$"$j$^$9!#\e(B
+@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::
+* Server Agent Commands::
+@end menu
+
+\e$B40A4$J0l3g<hF@$r9T$&$K$O!"%3%^%s%I9T$+$i0J2<$N$*$^$8$J$$$r\e(B
+\e$B<B9T$9$l$P$G$-$^$9!#\e(B
+
+@cindex gnus-agent-batch-fetch
+@example
+$ 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
+
+@table @kbd
+@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
+
+@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 
+
+@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
+
+@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-agent-fetch-session})\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
+
+@end table
+
+
+@node Summary Agent Commands
+@subsubsection \e$B35N,%(!<%8%'%s%HL?Na\e(B
+
+@table @kbd
+@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
+
+@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
+
+@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
+
+@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
+
+@end table
+
+
+@node Server Agent Commands
+@subsubsection \e$B%5!<%P!<%(!<%8%'%s%HL?Na\e(B
+
+@table @kbd
+@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
+
+@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
+
+@end table
+
+
+@node Agent Expiry
+@subsection \e$B%(!<%8%'%s%H4|8B@Z$l>C5n\e(B
+
+@vindex gnus-agent-expiry-days
+@findex gnus-agent-expiry
+@kindex M-x gnus-agent-expiry
+@cindex Agent expiry
+@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-expiry} \e$BL?Na$,\e(B @code{gnus-agent-expiry-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
+
+@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
+
+
+@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$,: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
+
+@node Agent Variables
+@subsection \e$B%(!<%8%'%s%HJQ?t\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
+
+@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
+
+@item gnus-agent-plugged-hook
+@vindex gnus-agent-plugged-hook
+\e$B%M%C%H%o!<%/$K@\B3$5$l$?$H$-$K<B9T$5$l$k%U%C%/!#\e(B
+
+@item gnus-agent-unplugged-hook
+@vindex gnus-agent-unplugged-hook
+\e$B%M%C%H%o!<%/$+$i@ZCG$5$l$?$H$-$K<B9T$5$l$k%U%C%/!#\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
+
+@lisp
+;;; Gnus \e$B$,$I$N$h$&$K%K%e!<%9$r<hF@$9$k$+$rDj5A$9$k!#$3$3$G$O\e(B
+;;; ISP \e$B$N%5!<%P!<$+$i\e(B NNTP \e$B$G<h$C$F$/$k$3$H$K$9$k!#\e(B
+(setq gnus-select-method '(nntp "nntp.your-isp.com"))
+
+;;; Gnus \e$B$,$I$N$h$&$K%a!<%k$rFI$`$+$rDj5A$9$k!#\e(BISP \e$B$N\e(B POP \e$B%5!<%P!<\e(B 
+;;; \e$B$+$i%a!<%k$rFI$`$3$H$K$9$k!#\e(B
+(setenv "MAILHOST" "pop.your-isp.com")
+(setq nnmail-spool-file "po:username")
+
+;;; Gnus \e$B$,%a!<%k$r$I$N$h$&$K3JG<$9$k$+$r;XDj$9$k!#\e(Bnnml \e$B%0%k!<%W\e(B
+;;; \e$B$r;H$&!#\e(B
+(setq gnus-secondary-select-methods '((nnml "")))
+
+;;; Gnus \e$B$r%*%U%i%$%s%K%e!<%9%j!<%@!<$K$9$k!#\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$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$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$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
+
+@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
+
+@example
+#!/bin/sh
+emacs -batch -l ~/.emacs -f gnus-agent-batch >/dev/null
+@end example
+
+
+@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
+
+@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
+
+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
+
+\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$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$-$^$9!#\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
+@end menu
+
+
+@node Summary Score Commands
+@section \e$B35N,%9%3%"L?Na\e(B
+@cindex score commands
+
+\e$B%9%3%"EPO?$rJQ99$9$k%9%3%"L?Na$O<B:]$KK\Ev$N%9%3%"%U%!%$%k$r=$@5$9$k$o$1\e(B
+\e$B$G$O$"$j$^$;$s!#$=$l$O$"$^$j$KHs8zN($G$9!#\e(BGnus \e$B$O0JA0$K%m!<%I$5$l$?%9%3\e(B
+\e$B%"%U%!%$%k$N%-%c%C%7%e$rJ];}$7$F$*$j!"$=$N0l$D$O\e(B @dfn{\e$B8=:_$N%9%3%"%U%!%$\e(B
+\e$B%kO"A[%j%9%H\e(B} (current score file alist) \e$B$H9M$($i$l$F$$$^$9!#%9%3%"L?Na\e(B
+\e$B$OC1=c$K$3$N%j%9%H$KEPO?$rA^F~$7$F!"%0%k!<%W$+$i=P$k$H!"$3$N%j%9%H$OJ]B8\e(B
+\e$B$5$l$^$9!#\e(B
+
+\e$B8=:_\e(B (current) \e$B$N%9%3%"%U%!%$%k$O!"<B:]$K$=$N$h$&$J%9%3%"%U%!%$%k$,B8:_\e(B
+\e$B$7$F$$$J$$>l9g$G$b!"=i4|@_Dj$G%0%k!<%W$N%m!<%+%k%9%3%"%U%!%$%k$K$J$C$F$$\e(B
+\e$B$^$9!#%9%3%"L?Na$r2?$+B>$N%9%3%"%U%!%$%k\e(B (\e$BNc!"\e(B@file{all.SCORE}) \e$B$KA^F~$7\e(B
+\e$B$?$$$J$i!"$^$:$3$N%9%3%"%U%!%$%k$r8=:_$N$b$N$K$7$J$1$l$P$J$j$^$;$s!#\e(B
+
+\e$B0lHLE*$J%9%3%"L?Na$O<B:]$K$O%9%3%"%U%!%$%k$rJQ99$7$^$;$s\e(B:
+
+@table @kbd
+
+@item V s
+@kindex V s (\e$B35N,\e(B)
+@findex gnus-summary-set-score
+\e$B8=:_$N5-;v$N%9%3%"$r@_Dj$7$^$9\e(B (@code{gnus-summary-set-score})\e$B!#\e(B
+
+@item V S
+@kindex V S (\e$B35N,\e(B)
+@findex gnus-summary-current-score
+\e$B8=:_$N5-;v$N%9%3%"$rI=<($7$^$9\e(B (@code{gnus-summary-current-score})\e$B!#\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
+
+@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
+
+@item V a
+@kindex V a (\e$B35N,\e(B)
+@findex gnus-summary-score-entry
+\e$B?7$7$$%9%3%"EPO?$rIU$12C$(!"A4$F$NMWAG$N;XDj$r5v2D$7$^$9\e(B 
+(@code{gnus-summary-score-entry})\e$B!#\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
+
+@item V e
+@kindex V e (\e$B35N,\e(B)
+@findex gnus-score-edit-current-scores
+\e$B8=:_$N%9%3%"%U%!%$%k$rJT=8$7$^$9\e(B (@code{gnus-score-edit-current-scores})\e$B!#\e(B
+@code{gnus-score-mode} \e$B%P%C%U%!$K0\F0$9$k;v$K$J$k$G$7$g$&\e(B (@pxref{Score
+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
+
+@item V F
+@kindex V F (\e$B35N,\e(B)
+@findex gnus-score-flush-cache
+\e$B8=:_$N%9%3%"%-%c%C%7%e$r=q$-9~$_$^$9\e(B (@code{gnus-score-flush-cache})\e$B!#$3\e(B
+\e$B$l$O%9%3%"%U%!%$%k$rJT=8$7$?8e$KLr$KN)$A$^$9!#\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
+
+@end table
+
+\e$B$3$l$i$NL?Na$N;D$j$O%m!<%+%k%9%3%"%U%!%$%k$r=$@5$7$^$9!#\e(B
+
+@table @kbd
+
+@item V m
+@kindex V m (\e$B35N,\e(B)
+@findex gnus-score-set-mark-below
+\e$B%9%3%"$NF~NO$rB%?J$7!"$=$l$h$j$bDc$$%9%3%"$NA4$F$N5-;v$K4{FI$N0u$rIU$1$^\e(B
+\e$B$9\e(B (@code{gnus-score-set-mark-below})\e$B!#\e(B
+
+@item V x
+@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
+@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
+\e$B$N$G!"$=$l$i$NL?NaA4$F$rI=$K>e$2$kI,MW$O$"$j$^$;$s!#\e(B(\e$B$?!<$/$5$s$"$j$^$9!#\e(B)
+
+@findex gnus-summary-increase-score
+@findex gnus-summary-lower-score
+
+@enumerate
+@item
+\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$B2DG=$G$9\e(B:
+@table @kbd
+
+@item a
+\e$BCx<T\e(B (author) \e$B$NL>A0$K%9%3%"$rIU$1$^$9!#\e(B
+
+@item s
+\e$BI=Bj\e(B (subject) \e$B$N9T$K%9%3%"$rIU$1$^$9!#\e(B
+
+@item x
+Xref \e$B9T$K%9%3%"$rIU$1$^$9\e(B---\e$B$9$J$o$A!"Aj8_Ej9F9T$G$9!#\e(B
+
+@item t
+\e$B%9%l%C%I\e(B (thread) \e$B$K%9%3%"$rIU$1$^$9\e(B---References \e$B9T$G$9!#\e(B
+
+@item d
+\e$BF|IU\e(B (date) \e$B$K%9%3%"$rIU$1$^$9!#\e(B
+
+@item l
+\e$B9T?t\e(B (number of lines) \e$B$K%9%3%"$rIU$1$^$9!#\e(B
+
+@item i
+Messsage-ID \e$B$K%9%3%"$rIU$1$^$9!#\e(B
+
+@item f
+\e$B%U%)%m!<%"%C%W\e(B (followup) \e$B$K%9%3%"$rIU$1$^$9!#\e(B
+
+@item b
+\e$BK\BN\e(B (body) \e$B$K%9%3%"$rIU$1$^$9!#\e(B
+
+@item h
+\e$B%X%C%@!<\e(B (head) \e$B$K%9%3%"$rIU$1$^$9!#\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$rIU$1$h$&$H$7$F$$$k$+$K0M$j$^$9!#\e(B
+
+@table @code
+
+@item \e$BJ8;zNs\e(B (strings)
+
+@table @kbd
+
+@item e
+\e$B@53N$J\e(B (exact) \e$B9gCW$G$9!#\e(B
+
+@item s
+\e$BJ8;zNs$N0lIt$N\e(B (substring) \e$B9gCW$G$9!#\e(B
+
+@item f
+\e$B$"$$$^$$$J\e(B (fuzzy) \e$B9gCW$G$9\e(B (@pxref{Fuzzy Matching})\e$B!#\e(B
+
+@item r
+\e$B@55,I=8=\e(B (regexp) \e$B$N9gCW$G$9!#\e(B
+@end table
+
+@item \e$BF|IU\e(B (date)
+@table @kbd
+
+@item b
+\e$BF|IU$NA0\e(B (before) \e$B$G$9!#\e(B
+
+@item a
+\e$BF|IU$N8e\e(B (after) \e$B$G$9!#\e(B
+
+@item n
+\e$B$=$NF|IU$G$9!#\e(B
+@end table
+
+@item \e$B?t;z\e(B (number)
+@table @kbd
+
+@item <
+\e$B?t;z$h$j>.$5$$$b$N$G$9!#\e(B
+
+@item =
+\e$B?t;z$HEy$7$$$b$N$G$9!#\e(B
+
+@item >
+\e$B?t;z$h$jBg$-$$$b$N$G$9!#\e(B
+@end table
+@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$+!"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
+@table @kbd
+
+@item t
+\e$B0l;~E*$J\e(B (temporary) \e$B%9%3%"EPO?$G$9!#\e(B
+
+@item p
+\e$B1JB3E*$J\e(B (permanent) \e$B%9%3%"EPO?$G$9!#\e(B
+
+@item i
+\e$BB(:B$N\e(B (immediate) \e$B%9%3%"IU$1$G$9!#\e(B
+@end table
+
+@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:
+@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$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
+
+@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
+
+\e$B;DG0$J$,$i!"$^$@$?$/$5$s$O$"$j$^$;$s!#\e(B
+
+@table @kbd
+
+@item W f
+@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
+
+@end table
+
+\e$B0J2<$N$h$&$J;v$r$9$k;v$K$h$C$F!"%3%^%s%I9T$+$i%9%3%"IU$1$r$9$k;v$,$G\e(B
+\e$B$-$^$9!#\e(B
+
+@findex gnus-batch-score
+@cindex batch scoring
+@example
+& emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score
+@end example
+
+
+@node Score Variables
+@section \e$B%9%3%"JQ?t\e(B
+@cindex score variables
+
+@table @code
+
+@item gnus-use-scoring
+@vindex gnus-use-scoring
+@code{nil} \e$B$G$"$l$P!"\e(Bgnus \e$B$O%9%3%"%U%!%$%k$rD4$Y$:!"0lHLE*$K!"%9%3%"4XO"\e(B
+\e$B$N;E;v$rA4$/$7$^$;$s!#$3$l$O=i4|@_Dj$G\e(B @code{t} \e$B$G$9!#\e(B
+
+@item gnus-kill-killed
+@vindex gnus-kill-killed
+\e$B$3$NJQ?t$,\e(B @code{nil} \e$B$G$"$l$P!"\e(Bgnus \e$B$O4{$K:o=|2aDx$r<B9T$5$l$?5-;v$K7h\e(B
+\e$B$7$F%9%3%"%U%!%$%k$rE,MQ$7$^$;$s!#$3$l$O$?$/$5$s$N;~4V$r@aLs$9$k$G$7$g$&\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)
+
+@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
+
+@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)
+
+@item gnus-score-uncacheable-files
+@vindex gnus-score-uncacheable-files
+@cindex score cache
+\e$BA4$F$N%9%3%"%U%!%$%k$OIaDL$O%9%3%"%U%!%$%k$N2a>jFI$_9~$_$rHr$1$k$?$a$K\e(B
+\e$B%-%c%C%7%e$5$l$^$9!#$7$+$7!"$3$l$K$h$j$"$J$?$N\e(B Emacs \e$B$,Bg$-$/HnBg2=$9$k\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
+
+@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
+
+@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
+
+@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
+
+@item gnus-summary-expunge-below
+@vindex gnus-summary-expunge-below
+\e$B$3$NJQ?t$h$jDc$$%9%3%"$r;}$D5-;v$O35N,$N9T$KI=<($5$l$^$;$s!#$3$l$O=i4|@_\e(B
+\e$BDj$G\e(B @code{nil} \e$B$G!"$3$l$O$I$N5-;v$b1#$5$l$J$$$H$$$&;v$G$9!#$3$NJQ?t$O3F\e(B
+\e$B35N,%P%C%U%!$K8GM-$G!"\e(B@code{gnus-summary-mode-hook} \e$B$K$h$C$F@_Dj$5$l$k$Y\e(B
+\e$B$-$G$9!#\e(B
+
+@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$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$G$9!#=i4|@_Dj$O\e(B @samp{-} \e$B$G$9!#\e(B
+
+@item gnus-score-find-score-files-function
+@vindex gnus-score-find-score-files-function
+\e$B8=:_$N%0%k!<%W$N%9%3%"%U%!%$%k$r8+$D$1$k$?$a$K;H$o$l$k4X?t$G$9!#$3$N4X?t\e(B
+\e$B$O%0%k!<%WL>$r0z?t$H$7$F8F$P$l$^$9!#\e(B
+
+\e$B;HMQ2DG=$J4{Dj4X?t$O\e(B:
+@table @code
+
+@item gnus-score-find-single
+@findex gnus-score-find-single
+\e$B%0%k!<%W<+?H$N%9%3%"%U%!%$%k$@$1$rE,MQ$7$^$9!#\e(B
+
+@item gnus-score-find-bnews
+@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
+
+\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
+
+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$BMQ$7$h$&$H;n$_$^$9$,!"%9%3%"%U%!%$%k$O$[$H$s$IL5:n0Y$N=gHV$GE,MQ$5$l$^$9!#\e(B
+\e$B$3$l$O%9%3%"%U%!%$%kL>$NMWAG$N?t$rD4$Y$k;v$K$h$C$F$J$5$l$^$9\e(B---
+@samp{all} \e$BMWAG$r<h$j=|$$$F!#\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
+
+@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
+
+@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
+
+@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
+
+@item gnus-score-after-write-file-function
+@vindex gnus-score-after-write-file-function
+\e$B$=$3$G$A$g$&$I=q$+$l$?%9%3%"%U%!%$%k$NL>A0$H6&$K8F$P$l$k4X?t$G$9!#\e(B
+
+@item gnus-score-thread-simplify
+@vindex gnus-score-thread-simplify
+\e$B$3$NJQ?t$,\e(B @code{nil} \e$B$G$J$$$H!"5-;vI=Bj$O%9%l%C%I$HF1$8J}K!$GI=Bj%9%3%"\e(B
+\e$B$N$?$a$KC1=c2=$5$l$^$9\e(B---\e$B8=:_$N\e(B gnus-simplify-subject-functions \e$B$NCM$K$h$C\e(B
+\e$B$F!#%9%3%"EPO?$,\e(B @code{\e$BJ8;zNsItJ,\e(B} \e$B$+\e(B @code{\e$B@53N$J\e(B} \e$B9gCW$r;H$C$F$$$k$H!"\e(B
+\e$B9gCW$b$3$NJ}K!$GC1=c2=$5$l$^$9!#\e(B
+
+@end table
+
+
+@node Score File Format
+@section \e$B%9%3%"%U%!%$%kMM<0\e(B
+@cindex score file format
+
+\e$B%9%3%"%U%!%$%k$OIaDL$OC1=c$JMM<0$N$b$N$@$1$r4^$`\e(B @code{emacs-lisp} \e$B%U%!\e(B
+\e$B%$%k$G$9!#L5F\Ce$JMxMQ<T$O$3$l$rJT=8$7$J$$$G$/$@$5$$!#A4$F$O35N,%P%C%U%!\e(B
+\e$B$+$iJQ99$5$l$k$G$7$g$&!#\e(B
+
+\e$B$H$K$+$/!"$=$l$r<+J,$G$$$8$C$F$_$?$/$J$C$?$N$J$i!"Nc$,$"$j$^$9\e(B:
+
+@lisp
+(("from"
+  ("Lars Ingebrigtsen" -10000)
+  ("Per Abrahamsen")
+  ("larsi\\|lmi" -50000 nil R))
+ ("subject"
+  ("Ding is Badd" nil 728373))
+ ("xref"
+  ("alt.politics" -1000 728372 s))
+ ("lines"
+  (2 -100 nil <))
+ (mark 0)
+ (expunge -1000)
+ (mark-and-expunge -10)
+ (read-only nil)
+ (orphan -10)
+ (adapt t)
+ (files "/hom/larsi/News/gnu.SCORE")
+ (exclude-files "all.SCORE")
+ (local (gnus-newsgroup-auto-expire t)
+        (gnus-summary-make-false-root empty))
+ (eval (ding)))
+@end lisp
+
+\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$NO"A[%j%9%H$G$O\e(B6\e$B$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
+@enumerate
+
+@item
+\e$B:G=i$NMWAG$O\e(B @dfn{\e$B9gCWMWAG\e(B} \e$B$G$9!#$?$$$F$$$N%X%C%@!<$G$O$3$l$OJ8;zNs$G$9\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
+
+@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
+
+@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
+
+@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
+
+@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!#9gCW$,\e(B @code{Lines} \e$B$G$J$5$l$F$$$k\e(B
+\e$B$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\e(B
+\e$B%@!<$r:n@.$7$J$$$?$a$KA4$F$N5-;v$,\e(B0\e$B9T$G$"$k$H$7$F07$o$l$k;v$K5$$rIU$1$F\e(B
+\e$B$/$@$5$$!#$3$l$O$b$7>/$7$N9T$7$+$J$$5-;v$N%9%3%"$r2<$2$F$$$k$N$J$i!"JQ$J\e(B
+\e$B7k2L$,5/$3$jF@$k;v$K$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
+\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$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)
+
+@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
+
+@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$r;H$&$H!"%U%!%$%k\e(B @file{ADAPT} \e$B$r:n$k;v$K$J$j$^$9!#\e(B)
+
+@item Thread
+\e$B$3$N9gCW%-!<$O\e(B @code{Followup} \e$B9gCW%-!<$HF1$89T$KF0:n$7$^$9!#\e(B
+@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)
+@end table
+@end enumerate
+
+@cindex Score File Atoms
+@item mark
+\e$B$3$NEPO?$NCM$O?t;z$G$"$k$Y$-$G$9!#$3$N?t;z$h$jDc$$%9%3%"$N5-;v$K$O4{FI$N\e(B
+\e$B0u$,IU$-$^$9!#\e(B
+
+@item expunge
+\e$B$3$NEPO?$NCM$O?t;z$G$"$k$Y$-$G$9!#$3$N?t;z$h$jDc$$%9%3%"$N5-;v$O35N,%P%C\e(B
+\e$B%U%!$+$i:o=|$5$l$^$9!#\e(B
+
+@item mark-and-expunge
+\e$B$3$NEPO?$NCM$O?t;z$G$"$k$Y$-$G$9!#$3$N?t;z$h$jDc$$%9%3%"$N5-;v$K$O4{FI$N\e(B
+\e$B0u$,IU$-!"35N,%P%C%U%!$+$i:o=|$5$l$^$9!#\e(B
+
+@item thread-mark-and-expunge
+\e$B$3$NEPO?$NCM$O?t;z$G$"$k$Y$-$G$9!#%9%3%"$NAm7W$,$3$N?t;z$h$jDc$$%9%l%C%I\e(B
+\e$B$K$O4{FI$N0u$,IU$-!"35N,%P%C%U%!$+$i:o=|$5$l$^$9!#\e(B
+@code{gnus-thread-score-function} \e$B$O%9%l%C%I$N%9%3%"$NAm7W$r$I$N$h$&$K7W\e(B
+\e$B;;$9$k$+$r;XDj$7$^$9!#\e(B
+
+@item files
+\e$B$3$NEPO?$NCM$OG$0U$N?t$N%U%!%$%kL>$G$"$k$Y$-$G$9!#$3$l$i$N%U%!%$%k$b%9%3\e(B
+\e$B%"%U%!%$%k$G$"$k$H$_$J$5$l!"$3$l$,$5$l$?$N$HF1$8$h$&$JJ}K!$GFI$_9~$^$l$^\e(B
+\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
+
+@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
+\e$B$F$$$k$H$-$OL5;k$5$l$^$9!#\e(B
+
+@item read-only
+\e$BFI$_9~$_@lMQ%9%3%"%U%!%$%k$O99?7$5$l$?$jJ]B8$5$l$?$j$7$^$;$s!#A4BNE*%9%3\e(B
+\e$B%"%U%!%$%k$O$3$N%"%H%`$r;HMQ$9$k$Y$-$G$9\e(B (@pxref{Global Score Files})\e$B!#\e(B 
+(\e$BCm0U\e(B: @dfn{\e$BA4BNE*\e(B} \e$B$O$3$3$G$OK\Ev$K\e(B @dfn{\e$BA4BNE*\e(B} \e$B$H$$$&0UL#$G$9!#8D?ME*\e(B
+\e$B$JA4$F$N%0%k!<%W$KE,MQ$9$k%9%3%"%U%!%$%k$N;v$G$O$"$j$^$;$s!#\e(B)
+
+@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$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:
+
+@example
+        (orphan -500)
+        (mark-and-expunge -100)
+@end example
+
+\e$B:G=i$K$3$N%0%k!<%W$KF~$C$?$H$-$O!"?7$7$$%9%l%C%I$@$1$r8+$^$9!#$=$l$+$i$*\e(B
+\e$B$b$7$m$$$H;W$C$?%9%l%C%I$N%9%3%"$r>e$2\e(B (@kbd{I T} \e$B$b$7$/$O\e(B @kbd{I S} \e$B$K\e(B
+\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
+
+@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
+@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
+
+@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
+\e$B$l$O%0%k!<%W$KF~$k$H$-$K$bE,MQ$5$l$^$9!#$3$N%"%H%`$OB?$/$N%0%k!<%W$KF1$8\e(B
+\e$BE,1~%9%3%"%U%!%$%k$rMQ$$$k;v$K$h$C$F!"J#?t$N%0%k!<%W$K0lEY$KE,1~%9%3%"$r\e(B
+\e$BIU$1$?$$$H$-$KJXMx$G$7$g$&!#\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
+@end table
+
+
+@node Score File Editing
+@section \e$B%9%3%"%U%!%$%kJT=8\e(B
+
+\e$BIaDL$OA4$F$N%9%3%"L?Na$r35N,%P%C%U%!$+$iH/9T$7$^$9$,!"<j$G$=$l$i$rJT=8$7\e(B
+\e$B$?$$5$$K6n$i$l$k$+$b$7$l$^$;$s$N$G!"$=$l$N$?$a$N%b!<%I$rDs6!$7$F$$$^$9!#\e(B
+
+\e$B$=$l$OC1=c$K>/$7%+%9%?%^%$%:$5$l$?\e(B @code{emacs-lisp} \e$B%b!<%I$G!"0J2<$NDI\e(B
+\e$B2C$NL?Na$,B8:_$7$^$9\e(B:
+
+@table @kbd
+
+@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
+
+@item C-c C-d
+@kindex C-c C-d (\e$B%9%3%"\e(B)
+@findex gnus-score-edit-insert-date
+\e$B8=:_$NF|IU$r?t;zMM<0$GA^F~$7$^$9\e(B (@code{gnus-score-edit-insert-date})\e$B!#\e(B
+\e$B$b$7$3$l$,$I$N$h$&$J$b$N$G$"$m$&$H9M$($F$$$k$N$G$"$l$P!"$3$l$OK\Ev$KF|$N\e(B
+\e$B?t;z$G$9!#\e(B
+
+@item C-c C-p
+@kindex C-c C-p (\e$B%9%3%"\e(B)
+@findex gnus-score-pretty-print
+\e$BE,1~%9%3%"%U%!%$%k$O@0$($i$l$F$$$J$$N.57$GJ]B8$5$l$^$9!#$b$7$3$l$i$N%U%!\e(B
+\e$B%$%k$NFb$N0l$D$rFI$_$?$$$H;W$C$F$$$k$N$G$"$l$P!"$^$:\e(B @dfn{\e$BAGE($JI=<(\e(B} \e$B$r\e(B
+\e$B$7$?$$$G$7$g$&!#$3$NL?Na\e(B (@code{gnus-score-pretty-print}) \e$B$,$"$J$?$N$?$a\e(B
+\e$B$K$=$l$r$7$^$9!#\e(B
+
+@end table
+
+\e$B$3$N%b!<%I$r;H$&$?$a$K$O\e(B @kbd{M-x gnus-score-mode} \e$B$HBG$C$F$/$@$5$$!#\e(B
+
+@vindex gnus-score-mode-hook
+@code{gnus-score-menu-hook} \e$B$,%9%3%"%b!<%I%P%C%U%!$G<B9T$5$l$^$9!#\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
+
+\e$B$3$l$i$N%9%3%"IU$1$O$"$J$?$rM+]5$K$5$;$F$7$^$&$+$b$7$l$J$$$N$G!"\e(B
+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$9$kJ}K!$,$"$j$^$9!#$$$d$`$7$m!"?M9)L5G=$K$h$C$F!"$H$$$&J}$,@53N\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
+
+@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
+
+@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))))
+@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
+
+@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
+
+@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
+
+@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
+
+@lisp
+(setq gnus-default-adaptive-word-score-alist
+      `((,gnus-read-mark . 30)
+        (,gnus-catchup-mark . -10)
+        (,gnus-killed-mark . -20)
+        (,gnus-del-mark . -15)))
+@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
+
+@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
+\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
+
+@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$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
+
+
+@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$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
+
+@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
+
+@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
+
+@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
+
+@item
+\e$B%j%9%H!#$3$N%j%9%H$NMWAG$O0J2<$NCM$r<h$jF@$^$9!#\e(B
+
+@enumerate
+@item
+@var{(regexp file-name)}\e$B!#\e(B@var{regexp} \e$B$,%0%k!<%WL>$K%^%C%A$9$l\e(B
+\e$B$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
+
+@item
+\e$BJ8;zNs!#\e(B \e$B$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
+
+@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
+
+@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
+
+@lisp
+(setq gnus-home-score-file
+      '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$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
+
+@lisp
+(setq gnus-home-score-file
+      ;; All groups that match the regexp "\\.emacs"
+      '("\\.emacs" "emacs.SCORE")
+      ;; All the comp groups in one score file
+       ("^comp" "comp.SCORE"))
+@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
+
+
+@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
+
+@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
+
+@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
+@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$"$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
+
+@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
+
+@lisp
+("references"
+ ("<x6[0-9a-z]+\\.fsf\\(_-_\\)?@@.*eyesore.no>"
+  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
+
+
+@node Scoring Tips
+@section \e$B%9%3%"IU$1$N1|5A\e(B
+@cindex scoring tips
+
+@table @dfn
+
+@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
+@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
+@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
+
+@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
+@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
+@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
+
+@lisp
+(("subject"
+  ("Sex with Emacs" 2))
+ (mark 1)
+ (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
+
+
+@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$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!
+
+@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
+
+\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
+
+@lisp
+(setq gnus-global-score-files
+      '("/ftp@@ftp.gnus.org:/pub/larsi/ding/score/soc.motss.SCORE"
+        "/ftp@@ftp.some-where:/pub/score/"))
+@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$?$@$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$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$B0J2<$K!"5U;J2q<T$J$j$?$,$j$N$?$a$NHk5;$r$$$/$D$+!"B(@J$G=R$Y$^$9!#\e(B
+
+@itemize @bullet
+
+@item
+\e$BHs>o$KB?$/$N>l=j$K%/%m%9%]%9%H$5$l$F$$$k5-;v$O4V0c$$$J$/6}$G$"$k!#\e(B
+@item
+\e$B0l8D$NITE,@Z$J5-;v$r8:E@$9$k$K$O!"\e(B@code{Message-ID} \e$B$G8:E@$9$k!#\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
+@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
+
+@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
+@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?
+
+
+@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
+
+\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$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$BDL>o$N>C5n%U%!%$%k$O0J2<$N$h$&$K$J$j$^$9!#\e(B
+
+@lisp
+(gnus-kill "From" "Lars Ingebrigtsen")
+(gnus-kill "Subject" "ding")
+(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$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
+
+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
+
+@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
+
+@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
+@end table
+
+\e$B>C5n%U%!%$%k$rJT=8$9$kFs$D$N%0%k!<%W%b!<%I4X?t$,$"$j$^$9!#\e(B
+
+@table @kbd
+
+@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
+
+@item M-K
+@kindex M-K (Group)
+@findex gnus-group-edit-global-kill
+\e$B0lHL>C5n%U%!%$%k$rJT=8$9$k\e(B (@code{gnus-group-edit-global-kill})\e$B!#\e(B
+@end table
+
+\e$B>C5n%U%!%$%kJQ?t!#\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
+
+@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
+
+@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
+
+@item gnus-kill-file-mode-hook
+@vindex gnus-kill-file-mode-hook
+\e$B>C5n%U%!%$%k%b!<%I%P%C%U%!Fb$G8F$S=P$5$l$k%U%C%/!#\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>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.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
+
+
+@node GroupLens
+@section GroupLens
+@cindex GroupLens
+
+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?M$H6&$K8+$D$1$k$N$r=u$1$k$?$a$N6&F1A*JL5!9=$G$9!#\e(B
+
+\e$B$3$l$rC#@.$9$k$?$a$K!"\e(BGroupLens \e$B5!9=$O$"$J$?$,4{$KFI$s$@5-;v$KBP$9$k0U8+\e(B
+\e$B$r!"F1$8$h$&$J;v$r$7$?B>$N?M$N0U8+$H7k9g$7$F!"$=$l$>$l$NL$FI%K%e!<%95-;v\e(B
+\e$B$K8D?M2=$5$l$?M=8@$rM?$($^$9!#\e(BGroupLens \e$B$rCg?M$N$h$&$J$b$N$@$H8+$J$7$F$/\e(B
+\e$B$@$5$$!#\e(BGroupLens \e$B$O$"$J$?$,$I$N$h$&$K5-;v$N2ACM$rIU$1$k$+$r8+$F!"F1$8$h\e(B
+\e$B$&$K5-;v$N2ACM$rIU$1$k?M$rC5$7$^$9!#0lEY$"$J$?$N0U8+$H0lCW$9$k?M$rH/8+$9\e(B
+\e$B$l$P!"M=8@$N7A$G!"$=$l$i$N?M$,5-;v$r$I$&;W$&$+$r$"$J$?$K9p$2$^$9!#$"$J$?\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
+@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
+@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
+
+\e$BEPO?$7$?8e$G!"$$$/$D$+$NJQ?t$r@_Dj$9$kI,MW$,$"$j$^$9!#\e(B
+
+@table @code
+
+@item gnus-use-grouplens
+@vindex gnus-use-grouplens
+\e$B$3$NJQ?t$r\e(B @code{nil} \e$B$G$J$$CM$K@_Dj$9$k$H!"\e(BGnus \e$B$,A4$F$N\e(B GroupLens \e$B4XO"\e(B
+\e$B4X?t$r%U%C%/$9$k$h$&$K$J$j$^$9!#\e(B
+
+@item grouplens-pseudonym
+@vindex grouplens-pseudonym
+\e$B$3$NJQ?t$O\e(B Better Bit Bureau \e$B$KEPO?$7$?$H$-$K$b$i$C$?I.L>$K@_Dj$5$l$k$Y\e(B
+\e$B$-$G$9!#\e(B
+
+@item grouplens-newsgroups
+@vindex grouplens-newsgroups
+GroupLens \e$B$NM=8@$rF@$?$$$H;W$&%0%k!<%W$N%j%9%H$G$9!#\e(B
+
+@end table
+
+\e$B$3$l$,5/$->e$,$C$F\e(B GroupLens \e$B$r<B9T$9$k$?$a$KI,MW$J:GDc8B$N@_Dj$G$9!#0l\e(B
+\e$BEYEPO?$9$k$H!"\e(BGroupLens \e$B$O$"$J$?$KB>$N?M$,9M$($kJ?6Q$K4p$E$$$?%9%3%"$r$"\e(B
+\e$B$J$?$KDs6!$9$k$3$H$r;O$a$^$9!#$7$+$7!"\e(BGroupLens \e$B$NK\Ev$NMx1W$r<u$1$k$?$a\e(B
+\e$B$K$O!"<+J,<+?H$G5-;v$NCMIU$1$r;O$a$J$1$l$P$J$j$^$;$s!#$=$&$9$k$H!"\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!"5-;v$NCM$rEPO?$9$k$?$a$N\e(B4\e$B$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
+
+@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
+
+@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
+
+@table @kbd
+
+@item 1-5 n
+@kindex n (GroupLens)
+@findex grouplens-next-unread-article
+\e$B5-;v$NCM$rIU$1$F!"<!$NL$FI5-;v$K0\F0$7$^$9!#\e(B
+
+@item 1-5 ,
+@kindex , (GroupLens)
+@findex grouplens-best-unread-article
+\e$B5-;v$NCM$rIU$1$F<!$N0lHV9b$$%9%3%"$NL$FI5-;v$K0\F0$7$^$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
+
+
+@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@$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
+
+@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
+\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
+
+@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$B0J2<$N$b$N$,$=$NJQ?t$GM-8z$JCM$G$9!#\e(B
+
+@table @code
+@item prediction-spot
+\e$BM=8@$,9b$$$[$I!"1&$NJ}$K\e(B @samp{*} \e$B$,I=<($5$l$^$9!#\e(B
+
+@item confidence-interval
+\e$B?t;z$N3N?.\e(B (confidence) \e$B4V3V$G$9!#\e(B
+
+@item prediction-bar
+\e$BM=8@$,9b$$$[$I!"K@$,D9$/$J$j$^$9!#\e(B
+
+@item confidence-bar
+\e$B?t;z3N?.$G$9!#\e(B
+
+@item confidence-spot
+\e$B3N?.$,9b$$$[$IE@$,Bg$-$/$J$j$^$9!#\e(B
+
+@item prediction-num
+\e$BIaDL$N@N$J$,$i$N?tCM$G$9!#\e(B
+
+@item confidence-plus-minus
+\e$BM=8@$N\e(B +/- \e$B3N?.$G$9!#\e(B
+
+@end table
+
+
+@node GroupLens Variables
+@subsection GroupLens \e$BJQ?t\e(B
+
+@table @code
+
+@item gnus-summary-grouplens-line-format
+GropuLens \e$B3HD%$N35N,%P%C%U%!$G;H$o$l$k35N,9TMM<0$G$9!#IaDL$N35N,9TMM<0$,\e(B
+\e$B<u$1IU$1$k$b$N$HF1$8;XDj$r<u$1IU$1$^$9\e(B (@pxref{Summary Buffer Lines})\e$B!#\e(B
+\e$B=i4|@_Dj$O\e(B@samp{%U%R%z%l%I%(%[%4L: %-20,20n%]%) %s\n} \e$B$G$9!#\e(B
+
+@item grouplens-bbb-host
+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
+\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
+
+@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
+
+@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
+
+@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$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
+@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$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$BO@M}:nMQ;R\e(B:
+
+@table @code
+@item &
+@itemx and
+\e$B$3$NO@M}:nMQ;R$O$=$l$>$l$N0z?t$r\e(B @code{false} \e$B$KI>2A$5$l$k$b$N$r8+$D$1$k\e(B
+\e$B$^$GI>2A$7!"$=$l$+$iDd;_$7$^$9!#A4$F$N0z?t$,\e(B @code{true} \e$B$NCM$KI>2A$5$l\e(B
+\e$B$?>l9g$O!"$3$N:nMQ;R$O\e(B @code{true} \e$B$rJV$7$^$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
+
+@item !
+@itemx not
+@itemx \254
+\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
+
+@end table
+
+\e$B0z?t$r%9%3%"IU$1$5$l$F$$$k8=:_$N5-;v$NAD@h$KE,MQ$9$k\e(B @dfn{\e$B4V@\:nMQ;R\e(B} \e$B$,\e(B
+\e$B$"$j$^$9!#Nc$($P!"\e(B@code{1-} \e$B$O8=:_$N5-;v$N?F$K$b%9%3%"K!B'$rE,MQ$7$^$9!#\e(B
+@code{2-} \e$B$O8=:_$N5-;v$NADIcJl$K%9%3%"K!B'$rE,MQ$7$^$9!#Be$o$j$K!"\e(B
+@code{^^} \e$B$r=q$/;v$b$G$-!"$3$N;~!"\e(B@code{^} (\e$B%-%c%i%C%H\e(B) (carat) \e$B$N?t$O$I\e(B
+\e$B$N$/$i$$AD@h$N5-;v$^$G$5$+$N$\$k$+$r<($7$^$9!#\e(B
+
+\e$B:G8e$K!"9gCW:nMQ;R$,$"$j$^$9!#$3$l$i$,K\Ev$N;E;v$r$9$k$b$N$G$9!#9gCW:nMQ\e(B
+\e$B;R$O%X%C%@!<L>$NJ8;zNs$G!"$=$N8e$K9gCW$H9gCW$N7?$,B3$-$^$9!#E57?E*$J9gCW\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 Scring Examples
+@subsection \e$B>e5i%9%3%"IU$1$NNc\e(B
+
+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\e(B
+\e$BA}$d$7$?$$$H$7$^$7$g$&\e(B:
+
+@example
+((&
+  ("from" "Lars Ingebrigtsen")
+  ("subject" "Gnus"))
+ 1000)
+@end example
+
+\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:
+
+@example
+((&
+  ("from" "Lars Ingebrigtsen")
+  (|
+   ("subject" "Gnus")
+   ("lines" 100 >)))
+ 1000)
+@end example
+
+\e$B$7$+$7!"H`$,\e(B Reig Eigil Logge \e$B$K$h$C$F=q$+$l$?$b$N$KH?1~$7$F$$$k$H$-$O!"\e(B
+\e$BH`$,=q$$$?$b$N$rFI$_$?$/$"$j$^$;$s\e(B:
+
+@example
+((&
+  ("from" "Lars Ingebrigtsen")
+  (1- ("from" "Reig Eigir Logge")))
+ -100000)
+@end example
+
+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$B%3%"$,>e$2$i$l$^$9$,!"$=$l$OH`$i$,Gr$$7$2<$K$D$$$F8l$C$F$$$k$H$-$N$_$G$9!#\e(B
+\e$B$7$+$7!"\e(BLars \e$B$,7$2<$K$D$$$FOC$r$7$F$$$k$H$-$O!"$?$$$F$$$"$^$j$*$b$7$m$/\e(B
+\e$B$"$j$^$;$s\e(B:
+
+@example
+((&
+  (1-
+   (&
+    ("from" "redmondo@@.*no" r)
+    ("body" "disappearing.*socks" t)))
+  (! ("from" "Lars Ingebrigtsen"))
+  ("body" "white.*socks"))
+ 1000)
+@end example
+
+\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$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$B$h$&$K$7$^$9!#<!$N$h$&$J;v$r$9$l$P\e(B:
+
+@example
+...
+(1-
+ (1-
+  ("from" "lars")))
+...
+@end example
+
+\e$B$3$l$O\e(B ``\e$B8=:_$N5-;v$NADIcJl$N\e(B from \e$B%X%C%@!<$K%9%3%"$rIU$1$k\e(B'' \e$B$H$$$&;v$r\e(B
+\e$B0UL#$7$^$9!#4V@\$O$H$F$bB.$$$G$9$,!"<!$NJ}$h$j$b\e(B:
+
+@example
+(1-
+ (&
+  ("from" "Lars")
+  ("subject" "Gnus")))
+@end example
+
+\e$B<!$NJ}$,NI$$$G$9\e(B:
+
+@example
+(&
+ (1- ("from" "Lars"))
+ (1- ("subject" "Gnus")))
+@end example
+
+
+@node Score Decays
+@section \e$B%9%3%"IeGT\e(B
+@cindex score decays
+@cindex decays
+
+\e$B%9%3%"$O:F8=L5$/KD$l>e$,$k798~$,$"$k;v$K5$IU$/$+$b$7$l$^$;$s!#FC$K!"E,1~\e(B
+\e$B%9%3%"$r;H$C$F$$$k$H$-$O!#%9%3%"$,Bg$-$/$J$j$9$.$k$H!"$=$l$i$O0UL#$r<:$$\e(B
+\e$B$^$9\e(B---\e$B$=$l$i$OC1$K:GBg$rDL$j1[$7$F$7$^$C$F!"$=$l$r0UL#$N$"$kJ}K!$G;H$&\e(B
+\e$B;v$OFq$7$/$J$j$^$9!#\e(B
+
+@vindex gnus-decay-scores
+@findex gnus-decay-score
+@vindex gnus-score-decay-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$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-score-decay-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
+\e$B5A$G$9\e(B:
+
+@lisp
+(defun gnus-decay-score (score)
+  "Decay SCORE according to `gnus-score-decay-constant' and `gnus-score-decay-scale'."
+  (floor
+   (- score
+      (* (if (< score 0) 1 -1)
+         (min (abs score)
+              (max gnus-score-decay-constant
+                   (* (abs score)
+                      gnus-score-decay-scale)))))))
+@end lisp
+
+@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:
+
+@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
+
+@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
+
+@item
+60\e$B$h$jBg$-$$%9%3%"$O%9%3%"$N\e(B5%\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
+
+
diff --git a/texi/gnus-terms.ja b/texi/gnus-terms.ja
new file mode 100644 (file)
index 0000000..52046f1
--- /dev/null
@@ -0,0 +1,177 @@
+\e$B86J8$HLu8l$N%j%9%H$G$9!#8!F$IT==J,$JE@$b$"$j$^$9!#\e(B
+\e$BJQ99$5$l$k2DG=@-$OBg$$$K$"$j$^$9!#\e(B
+
+\e$BC18l\e(B                             \e$BLu8l\e(B
+
+active                         \e$B:nF0$9$k!":nF0$7$F$$$k\e(B
+active file                    \e$B8=>u%U%!%$%k!"%"%/%F%#%V%U%!%$%k\e(B
+adapt                          \e$BE,MQ\e(B
+adaptive                       \e$BE,1~@-\e(B
+address                                \e$B%"%I%l%9\e(B
+agent                          \e$B%(!<%8%'%s%H\e(B
+alist                          \e$BO"A[%j%9%H\e(B
+alternate                      \e$BBeBX\e(B
+anything group                 \e$B$J$s$G$b%0%k!<%W\e(B
+archive                                \e$B%"!<%+%$%V\e(B
+asterisk                       \e$B%"%9%?%j%9%/\e(B
+auto-save file                 \e$B<+F0J]B8%U%!%$%k\e(B
+backend                                \e$B%P%C%/%(%s%I\e(B
+batch                          \e$B0l3g\e(B
+bogus group                    \e$B56%0%k!<%W\e(B
+browse                         \e$B%V%i%&%:!";2>H!"354Q\e(B
+buffer                         \e$B%P%C%U%!\e(B
+buggy                          \e$B8N>c$,$A\e(B
+category                       \e$BJ,N`\e(B
+collapsed group        name            \e$BC;=L%0%k!<%WL>\e(B
+combined groups                        \e$B7k9g%0%k!<%W\e(B
+command                                \e$BL?Na\e(B
+command line                   \e$B%3%^%s%I9T\e(B
+configure (shell script)       \e$B4D6-@_Dj\e(B
+copy                           \e$B%3%T!<!"J#<L\e(B
+crosspost                      \e$BAj8_Ej9F!"%/%m%9%]%9%H\e(B
+current                                \e$B8=:_$N\e(B
+customize                      \e$B%+%9%?%^%$%:\e(B
+default                                \e$B=i4|@_Dj\e(B/\e$B=i4|@_DjCM\e(B (\e$B%G%#%U%)%k%H\e(B)?
+directory                      \e$B%G%#%l%/%H%j!<\e(B
+dormant article                        \e$BJ]N15-;v\e(B
+dotted pair                    \e$B%I%C%H%Z%"!"%I%C%HBP\e(B
+download                       \e$B%@%&%s%m!<%I\e(B
+draft                          \e$B2<=q$-\e(B
+dribble file                   \e$B%I%j%V%k%U%!%$%k\e(B
+duplicate suppression          \e$B=EJ#M^@)\e(B
+entry                          \e$BEPO?!"EPO?9`L\\e(B
+expire                         \e$B4|8B@Z$l>C5n!"4|8B@Z$l:o=|\e(B
+expunge                                \e$B>C5n\e(B
+field                          \e$B%U%#!<%k%I\e(B
+firewall                       \e$BKIJI\e(B
+flush cache                    \e$B%-%c%C%7%e$r=q$-9~$`\e(B
+follow up                      \e$B%U%)%m!<%"%C%W\e(B
+foreign                                \e$B30It\e(B
+format                         \e$BMM<0!"%U%)!<%^%C%H\e(B
+frame                          \e$B%U%l!<%`\e(B 
+gateway                                \e$B%2!<%H%&%'%$\e(B
+global                         \e$B%0%m!<%P%k\e(B
+Gnus                           gnus
+group buffer                   \e$B%0%k!<%W%P%C%U%!\e(B
+header                         \e$B%X%C%@!<\e(B
+highlight                      \e$B%O%$%i%$%H\e(B
+history                                \e$BMzNr\e(B
+home score file                        \e$B%[!<%`%9%3%"%U%!%$%k\e(B
+hook                           \e$B%U%C%/\e(B
+inbox                          \e$B%$%s%\%C%/%9\e(B
+indentation                    \e$B;z2<$2\e(B
+interactive command            \e$BBPOCL?Na\e(B
+interface                      \e$B%$%s%?!<%U%'!<%9\e(B
+kiboze                         kiboze
+key (alist)                    \e$B%-!<\e(B
+keymap                         \e$B%-!<%^%C%W\e(B
+kiboze                         kiboze
+kill                           \e$B:o=|!"@Z$k!"%-%k\e(B
+kill file                      \e$B:o=|%U%!%$%k!"\e(B(\e$B>C5n%U%!%$%k\e(B)
+level                          \e$B%l%Y%k\e(B
+load                           \e$B%m!<%I\e(B
+local variable                 \e$B6I=jJQ?t!"%m!<%+%kJQ?t\e(B
+lower lebel                    \e$B>.$5$$%l%Y%k\e(B
+mail                           \e$B%a!<%k\e(B
+mailbox                                \e$B%a!<%k%\%C%/%9\e(B
+mail-to-news gateway           \e$B%a!<%k$+$i%K%e!<%:$X$N%2!<%H%&%'%$\e(B
+mark                           \e$B0u\e(B
+meta-variable                  \e$B%a%?JQ?t\e(B
+message                                \e$B%a%C%;!<%8\e(B
+method                         \e$BJ}K!\e(B
+minor mode                     \e$B%^%$%J!<%b!<%I\e(B
+modeline                       \e$B%b!<%I9T\e(B
+moderated                      \e$B%b%G%l!<%F%C%I!"=$@5$5$l$?\e(B
+native                         \e$B4pK\\e(B
+native method                  \e$B4pK\J}K!\e(B
+native server                  \e$B4pK\%5!<%P!<\e(B
+news                           \e$B%K%e!<%9\e(B (\e$B%K%e!<%:\e(B)
+newsgroup                      \e$B%K%e!<%9%0%k!<%W\e(B (\e$B%K%e!<%:%0%k!<%W\e(B)
+news reader                    \e$B%K%e!<%9%j!<%@\e(B
+numeric prefix                 \e$B?t;z@\F,0z?t\e(B
+operator                       \e$B:nMQ;R\e(B
+outgoing                       \e$B:9=PMQ\e(B
+overview                       \e$B354Q%U%!%$%k\e(B
+pack                           \e$B:-Jq$9$k\e(B
+parameter                      \e$B%Q%i%a!<%?\e(B
+plugged                                \e$B:9$79~$_\e(B
+point                          \e$B%]%$%s%H!"%+!<%=%k0LCV\e(B
+predicate function             \e$B=R8l4X?t\e(B
+prefix                         \e$B@\F,0z?t\e(B
+process                                \e$B%W%m%;%9\e(B
+process mark                   (\e$B%W%m%;%9%^!<%/\e(B)\e$B!"%W%m%;%90u\e(B
+process/prefix convention      \e$B%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47\e(B (\e$B%W%m%;%9%^!<%/!&%W%l%U%#%C%/%9%k!<%k\e(B)
+prompt                         \e$BF~NOB%?J\e(B
+rank                           \e$B%i%s%/\e(B
+region                         (\e$B%j!<%8%g%s\e(B)
+release                                \e$B%j%j!<%9\e(B
+remote system                  \e$B1s3V%7%9%F%`\e(B
+reply packet                   \e$BJV?.%Q%1%C%H\e(B
+response packet                        \e$BJV?.%Q%1%C%H\e(B
+startup file                   \e$B5/F0%U%!%$%k\e(B
+score                          \e$B%9%3%"\e(B
+score entry                    \e$B%9%3%"EPO?\e(B
+secondary server               \e$BFs<!%5!<%P!<\e(B
+select method                  \e$BA*BrJ}K!\e(B
+server                         \e$B%5!<%P!<\e(B
+sesssion                       \e$B%;%C%7%g%s\e(B
+shortcut                       \e$BC;=LBG80\e(B
+solid group                    \e$B8GDj%0%k!<%W\e(B
+sort                           \e$B%=!<%H\e(B \e$BJB$YBX$(\e(B
+SOUP packets                   SOUP \e$B%Q%1%C%H\e(B
+startup file                   \e$B5/F0%U%!%$%k\e(B
+sub-topic                      \e$BI{%H%T%C%/\e(B
+submap                         \e$B%5%V%^%C%W\e(B
+subscribe                      \e$B9XFI\e(B
+subscribedness                 \e$B9XFIEY\e(B
+summary buffer                 \e$B35N,%P%C%U%!\e(B
+superseding                    \e$BBeBX\e(B
+syntax table                   \e$BJ8K!I=\e(B
+text properties                        \e$B%F%-%9%HB0@-\e(B
+thread                         \e$B%9%l%C%I\e(B
+ticked article                 (\e$B0uIU$-5-;v\e(B)
+toggle                         \e$B%H%0%k\e(B \e$B@Z$jBX$(\e(B
+token
+topic                          \e$B%H%T%C%/\e(B
+unplugged                      \e$B@Z$jN%$7\e(B
+unsubscribe                    \e$BHs9XFI\e(B
+user                           \e$BMxMQ<T\e(B
+value (alist)                  \e$BCM\e(B
+web                            \e$B%&%'%V\e(B
+Web browser                    \e$B%&%'%V%V%i%&%6!<\e(B
+Web search                     \e$B%&%'%V8!:w\e(B
+yank                           \e$BE=$jIU$1\e(B
+zombie                         \e$B%>%s%S\e(B
+
+summary                                \e$B35N,\e(B
+body                           \e$B%\%G%#\e(B
+head                           \e$B%X%C%@!<\e(B
+subject                                \e$BI=Bj\e(B
+match                          \e$B%^%C%A\e(B
+encode                         \e$BId9f2=\e(B
+character set                  \e$BJ8;z=89g\e(B
+hook                           \e$B%U%C%/\e(B
+keystroke                      \e$B%-!<A`:n\e(B
+reply                          \e$BJV?.\e(B
+button                         \e$B%\%?%s\e(B
+buttonizing                    \e$B%\%?%s5!G=\e(B
+syntax table                   \e$B%7%s%?%C%/%9%F!<%V%k\e(B
+format                         \e$BMM<0\e(B
+wash                           \e$B@vBu\e(B
+page breaking                  \e$B2~JG\e(B
+page delimiter                 \e$BJG6h@Z$jJ8;z\e(B
+page                           \e$BJG\e(B
+
+directory                      \e$B%G%#%l%/%H%j!<\e(B
+SOUP packets                   SOUP \e$B%Q%1%C%H\e(B
+auto-save file                 \e$B<+F0J]B8%U%!%$%k\e(B
+predicate function             \e$B=R8l4X?t\e(B
+news reader                    \e$B%K%e!<%9%j!<%@\e(B
+native server                  \e$B4pK\%5!<%P!<\e(B
+
+secondary server               \e$BFs<!%5!<%P!<\e(B
+pack                           \e$B:-Jq$9$k\e(B
+active file                    \e$B%"%/%F%#%V%U%!%$%k\e(B
+incoming                       \e$BF~$C$F$/$k!&F~$C$F$-$?\e(B
+response packet                        \e$BJV?.%Q%1%C%H\e(B
+reply packet                   \e$BJV?.%Q%1%C%H\e(B
index b368047..40a4fee 100644 (file)
@@ -1,12 +1,12 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename gnus
-@settitle Pterodactyl Gnus 0.44 Manual
+@settitle Semi-gnus 6.7.8 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
 @c @direntry
-@c * Gnus: (gnus).         The newsreader Gnus.
+@c * Gnus: (gnus).         The news reader gnus.
 @c @end direntry
 @iftex
 @finalout
@@ -62,8 +62,6 @@
 \newcommand{\gnustilde}{\symbol{"7E}}
 \newcommand{\gnusless}{{$<$}}
 \newcommand{\gnusgreater}{{$>$}}
-\newcommand{\gnusbraceleft}{{$>$}}
-\newcommand{\gnusbraceright}{{$>$}}
 
 \newcommand{\gnushead}{\raisebox{-1cm}{\epsfig{figure=ps/gnus-head.eps,height=1cm}}}
 \newcommand{\gnusinteresting}{
 
 \thispagestyle{empty}
 
-Copyright \copyright{} 1995,96,97,98 Free Software Foundation, Inc.
+Copyright \copyright{} 1995,96,97 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -291,7 +289,7 @@ into another language, under the above conditions for modified versions.
 
 @ifinfo
 
-This file documents Gnus, the GNU Emacs newsreader.
+This file documents gnus, the GNU Emacs newsreader.
 
 Copyright (C) 1995,96 Free Software Foundation, Inc.
 
@@ -318,7 +316,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Pterodactyl Gnus 0.44 Manual
+@title Semi-gnus 6.7.8 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -345,16 +343,23 @@ into another language, under the above conditions for modified versions.
 
 
 @node Top
-@top The Gnus Newsreader
+@top The gnus Newsreader
 
 @ifinfo
 
-You can read news (and mail) from within Emacs by using Gnus.  The news
+You can read news (and mail) from within Emacs by using gnus.  The news
 can be gotten by any nefarious means you can think of---@sc{nntp}, local
 spool or your mbox file.  All at the same time, if you want to push your
 luck.
 
-This manual corresponds to Pterodactyl Gnus 0.44.
+Semi-gnus provides MIME features based on SEMI API.  So Semi-gnus
+supports your right to read strange messages including big images or
+other various kinds of formats.  Semi-gnus also supports
+internationalization/localization and multiscript features based on MULE
+API.  So Semi-gnus does not discriminate various language communities.
+Oh, if you are a Klingon, please wait Unicode Next Generation.
+
+This manual corresponds to Semi-Gnus 6.7.8
 
 @end ifinfo
 
@@ -378,7 +383,7 @@ 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
-allowed to do.  Users are encouraged to extend Gnus to make it behave
+allowed to do.  Users are encouraged to extend gnus to make it behave
 like they want it to behave.  A program should not control people;
 people should be empowered to do what they want by using (or abusing)
 the program.
@@ -402,18 +407,18 @@ the program.
 @end menu
 
 @node Starting Up
-@chapter Starting Gnus
+@chapter Starting gnus
 @cindex starting up
 
 @kindex M-x gnus
 @findex gnus
-If your system administrator has set things up properly, starting Gnus
+If your system administrator has set things up properly, starting gnus
 and reading news is extremely easy---you just type @kbd{M-x gnus} in
 your Emacs.
 
 @findex gnus-other-frame
 @kindex M-x gnus-other-frame
-If you want to start Gnus in a different frame, you can use the command
+If you want to start gnus in a different frame, you can use the command
 @kbd{M-x gnus-other-frame} instead.
 
 If things do not go smoothly at startup, you have to twiddle some
@@ -425,11 +430,11 @@ terminology section (@pxref{Terminology}).
 
 @menu
 * Finding the News::    Choosing a method for getting news.
-* The First Time::      What does Gnus do the first time you start it?
+* 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?
+* 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.
@@ -444,11 +449,11 @@ terminology section (@pxref{Terminology}).
 
 @vindex gnus-select-method
 @c @head
-The @code{gnus-select-method} variable says where Gnus should look for
+The @code{gnus-select-method} variable says where gnus should look for
 news.  This variable should be a list where the first element says
 @dfn{how} and the second element says @dfn{where}.  This method is your
-native method.  All groups not fetched with this method are
-foreign groups.
+native method.  All groups not fetched with this method are foreign
+groups.
 
 For instance, if the @samp{news.somewhere.edu} @sc{nntp} server is where
 you want to get your daily dosage of news from, you'd say:
@@ -469,11 +474,12 @@ certainly be much faster.
 @vindex gnus-nntpserver-file
 @cindex NNTPSERVER
 @cindex @sc{nntp} server
-If this variable is not set, Gnus will take a look at the
+If this variable is not set, gnus will take a look at the
 @code{NNTPSERVER} environment variable.  If that variable isn't set,
-Gnus will see whether @code{gnus-nntpserver-file}
+gnus will see whether @code{gnus-nntpserver-file}
 (@file{/etc/nntpserver} by default) has any opinions on the matter.  If
-that fails as well, Gnus will try to use the machine running Emacs as an @sc{nntp} server.  That's a long shot, though.
+that fails as well, gnus will try to use the machine running Emacs as an
+@sc{nntp} server.  That's a long shot, though.
 
 @vindex gnus-nntp-server
 If @code{gnus-nntp-server} is set, this variable will override
@@ -481,9 +487,9 @@ If @code{gnus-nntp-server} is set, this variable will override
 @code{gnus-nntp-server} to @code{nil}, which is what it is by default.
 
 @vindex gnus-secondary-servers
-You can also make Gnus prompt you interactively for the name of an
+You can also make gnus prompt you interactively for the name of an
 @sc{nntp} server.  If you give a non-numerical prefix to @code{gnus}
-(i.e., @kbd{C-u M-x gnus}), Gnus will let you choose between the servers
+(i.e., @kbd{C-u M-x gnus}), gnus will let you choose between the servers
 in the @code{gnus-secondary-servers} list (if any).  You can also just
 type in the name of any server you feel like visiting.
 
@@ -518,23 +524,23 @@ would typically set this variable to
 @section The First Time
 @cindex first time usage
 
-If no startup files exist, Gnus will try to determine what groups should
+If no startup files exist, gnus will try to determine what groups should
 be subscribed by default.
 
 @vindex gnus-default-subscribed-newsgroups
-If the variable @code{gnus-default-subscribed-newsgroups} is set, Gnus
+If the variable @code{gnus-default-subscribed-newsgroups} is set, gnus
 will subscribe you to just those groups in that list, leaving the rest
 killed.  Your system administrator should have set this variable to
 something useful.
 
-Since she hasn't, Gnus will just subscribe you to a few arbitrarily
+Since she hasn't, gnus will just subscribe you to a few arbitrarily
 picked groups (i.e., @samp{*.newusers}).  (@dfn{Arbitrary} is defined
 here as @dfn{whatever Lars thinks you should read}.)
 
-You'll also be subscribed to the Gnus documentation group, which should
+You'll also be subscribed to the gnus documentation group, which should
 help you with most common problems.
 
-If @code{gnus-default-subscribed-newsgroups} is @code{t}, Gnus will just
+If @code{gnus-default-subscribed-newsgroups} is @code{t}, gnus will just
 use the normal functions for handling new groups, and not do anything
 special.
 
@@ -543,9 +549,9 @@ special.
 @section The Server is Down
 @cindex server errors
 
-If the default server is down, Gnus will understandably have some
+If the default server is down, gnus will understandably have some
 problems starting.  However, if you have some mail groups in addition to
-the news groups, you may want to start Gnus anyway.
+the news groups, you may want to start gnus anyway.
 
 Gnus, being the trusting sort of program, will ask whether to proceed
 without a native select method if that server can't be contacted.  This
@@ -560,7 +566,7 @@ buffer.  But, hey, that's your problem.  Blllrph!
 @c @head
 If you know that the server is definitely down, or you just want to read
 your mail without bothering with the server at all, you can use the
-@code{gnus-no-server} command to start Gnus.  That might come in handy
+@code{gnus-no-server} command to start gnus.  That might come in handy
 if you're in a hurry as well.  This command will not attempt to contact
 your primary server---instead, it will just activate all groups on level
 1 and 2.  (You should preferably keep no native groups on those two
@@ -571,27 +577,27 @@ levels.)
 @section Slave Gnusae
 @cindex slave
 
-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),
-that is no problem whatsoever.  You just do it.
+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), that is no problem whatsoever.  You just do it.
 
 The problem appears when you want to run two Gnusae that use the same
 @code{.newsrc} file.
 
-To work around that problem some, we here at the Think-Tank at the Gnus
-Towers have come up with a new concept: @dfn{Masters} and
-@dfn{slaves}.  (We have applied for a patent on this concept, and have
-taken out a copyright on those words.  If you wish to use those words in
-conjunction with each other, you have to send $1 per usage instance to
-me.  Usage of the patent (@dfn{Master/Slave Relationships In Computer
-Applications}) will be much more expensive, of course.)
+To work around that problem some, we here at the Think-Tank at the gnus
+Towers have come up with a new concept: @dfn{Masters} and @dfn{slaves}.
+(We have applied for a patent on this concept, and have taken out a
+copyright on those words.  If you wish to use those words in conjunction
+with each other, you have to send $1 per usage instance to 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
+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
 @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
+on what groups have been read in the slave session.  When a master gnus
 starts, it will read (and delete) these slave files, incorporating all
 information from them.  (The slave files will be read in the sequence
 they were created, so the latest changes will have precedence.)
@@ -606,7 +612,7 @@ information in the normal (i.e., master) @code{.newsrc} file.
 
 @findex gnus-fetch-group
 It is sometimes convenient to be able to just say ``I want to read this
-group and I don't care whether Gnus has been started or not''.  This is
+group and I don't care whether gnus has been started or not''.  This is
 perhaps more useful for people who write code than for users, but the
 command @code{gnus-fetch-group} provides this functionality in any case.
 It takes the group name as a parameter.
@@ -624,13 +630,13 @@ also save you some time at startup.  Even if this variable is
 @code{nil}, you can always subscribe to the new groups just by pressing
 @kbd{U} in the group buffer (@pxref{Group Maintenance}).  This variable
 is @code{ask-server} by default.  If you set this variable to
-@code{always}, then Gnus will query the backends for new groups even
+@code{always}, then gnus will query the backends for new groups even
 when you do the @kbd{g} command (@pxref{Scanning New Messages}).
 
 @menu
 * 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.
+* Subscription Methods::     What gnus should do with new groups.
+* Filtering New Groups::     Making gnus ignore certain new groups.
 @end menu
 
 
@@ -640,7 +646,7 @@ when you do the @kbd{g} command (@pxref{Scanning New Messages}).
 Gnus normally determines whether a group is new or not by comparing the
 list of groups from the active file(s) with the lists of subscribed and
 dead groups.  This isn't a particularly fast method.  If
-@code{gnus-check-new-newsgroups} is @code{ask-server}, Gnus will ask the
+@code{gnus-check-new-newsgroups} is @code{ask-server}, gnus will ask the
 server for new groups since the last time.  This is both faster and
 cheaper.  This also means that you can get rid of the list of killed
 groups altogether, so you may set @code{gnus-save-killed-list} to
@@ -652,15 +658,15 @@ I bet I know what you're thinking now: How do I find out whether my
 server supports @code{ask-server}?  No?  Good, because I don't have a
 fail-safe answer.  I would suggest just setting this variable to
 @code{ask-server} and see whether any new groups appear within the next
-few days.  If any do, then it works.  If none do, then it doesn't
-work.  I could write a function to make Gnus guess whether the server
-supports @code{ask-server}, but it would just be a guess.  So I won't.
-You could @code{telnet} to the server and say @code{HELP} and see
-whether it lists @samp{NEWGROUPS} among the commands it understands.  If
-it does, then it might work.  (But there are servers that lists
-@samp{NEWGROUPS} without supporting the function properly.)
-
-This variable can also be a list of select methods.  If so, Gnus will
+few days.  If any do, then it works.  If none do, then it doesn't work.
+I could write a function to make gnus guess whether the server supports
+@code{ask-server}, but it would just be a guess.  So I won't.  You could
+@code{telnet} to the server and say @code{HELP} and see whether it lists
+@samp{NEWGROUPS} among the commands it understands.  If it does, then it
+might work.  (But there are servers that lists @samp{NEWGROUPS} without
+supporting the function properly.)
+
+This variable can also be a list of select methods.  If so, gnus will
 issue an @code{ask-server} command to each of the select methods, and
 subscribe them (or not) using the normal methods.  This might be handy
 if you are monitoring a few servers for new groups.  A side effect is
@@ -672,7 +678,7 @@ Use the mantra ``dingnusdingnusdingnus'' to achieve permanent bliss.
 @subsection Subscription Methods
 
 @vindex gnus-subscribe-newsgroup-method
-What Gnus does when it encounters a new group is determined by the
+What gnus does when it encounters a new group is determined by the
 @code{gnus-subscribe-newsgroup-method} variable.
 
 This variable should contain a function.  This function will be called
@@ -709,9 +715,9 @@ up.  Or something like that.
 
 @item gnus-subscribe-interactively
 @vindex gnus-subscribe-interactively
-Subscribe new groups interactively.  This means that Gnus will ask
-you about @strong{all} new groups.  The groups you choose to subscribe
-to will be subscribed hierarchically.
+Subscribe new groups interactively.  This means that gnus will ask you
+about @strong{all} new groups.  The groups you choose to subscribe to
+will be subscribed hierarchically.
 
 @item gnus-subscribe-killed
 @vindex gnus-subscribe-killed
@@ -722,7 +728,7 @@ Kill all new groups.
 @vindex gnus-subscribe-hierarchical-interactive
 A closely related variable is
 @code{gnus-subscribe-hierarchical-interactive}.  (That's quite a
-mouthful.)  If this variable is non-@code{nil}, Gnus will ask you in a
+mouthful.)  If this variable is non-@code{nil}, gnus will ask you in a
 hierarchical fashion whether to subscribe to new groups or not.  Gnus
 will ask you for each sub-hierarchy whether you want to descend the
 hierarchy or not.
@@ -823,10 +829,6 @@ and read ranges have become worthless.  You can use the @kbd{M-x
 gnus-group-clear-data-on-native-groups} command to clear out all data
 that you have on your native groups.  Use with caution.
 
-After changing servers, you @strong{must} move the cache hierarchy away,
-since the cached articles will have wrong article numbers, which will
-affect which articles Gnus thinks are read.
-
 
 @node Startup Files
 @section Startup Files
@@ -838,11 +840,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.
 
@@ -853,12 +855,14 @@ recent, but it will never write a @file{.newsrc.el} file.  You should
 never delete the @file{.newsrc.eld} file---it contains much information
 not stored in the @file{.newsrc} file.
 
+In addition, gnus does not change anything.  Hail comrade Lars!
+
 @vindex gnus-save-newsrc-file
 You can turn off writing the @file{.newsrc} file by setting
 @code{gnus-save-newsrc-file} to @code{nil}, which means you can delete
-the file and save some space, as well as exiting from Gnus faster.
+the file and save some space, as well as exiting from gnus faster.
 However, this will make it impossible to use other newsreaders than
-Gnus.  But hey, who would want to, right?
+gnus.  But hey, who would want to, right?
 
 @vindex gnus-save-killed-list
 If @code{gnus-save-killed-list} (default @code{t}) is @code{nil}, Gnus
@@ -898,11 +902,11 @@ startup files.  If you want to turn backup creation off, say something like:
 @end lisp
 
 @vindex gnus-init-file
-When Gnus starts, it will read the @code{gnus-site-init-file}
+When gnus starts, it will read the @code{gnus-site-init-file}
 (@file{.../site-lisp/gnus} by default) and @code{gnus-init-file}
 (@file{~/.gnus} by default) files.  These are normal Emacs Lisp files
 and can be used to avoid cluttering your @file{~/.emacs} and
-@file{site-init} files with Gnus stuff.  Gnus will also check for files
+@file{site-init} files with gnus stuff.  Gnus will also check for files
 with the same names as these, but with @file{.elc} and @file{.el}
 suffixes.  In other words, if you have set @code{gnus-init-file} to
 @file{~/.gnus}, it will look for @file{~/.gnus.elc}, @file{~/.gnus.el},
@@ -915,24 +919,24 @@ and finally @file{~/.gnus} (in this order).
 @cindex dribble file
 @cindex auto-save
 
-Whenever you do something that changes the Gnus data (reading articles,
+Whenever you do something that changes the gnus data (reading articles,
 catching up, killing/subscribing groups), the change is added to a
 special @dfn{dribble buffer}.  This buffer is auto-saved the normal
 Emacs way.  If your Emacs should crash before you have saved the
 @file{.newsrc} files, all changes you have made can be recovered from
 this file.
 
-If Gnus detects this file at startup, it will ask the user whether to
-read it.  The auto save file is deleted whenever the real startup file is
-saved.
+If gnus detects this file at startup, it will ask the user whether to
+read it.  The auto save file is deleted whenever the real startup file
+is saved.
 
 @vindex gnus-use-dribble-file
-If @code{gnus-use-dribble-file} is @code{nil}, Gnus won't create and
+If @code{gnus-use-dribble-file} is @code{nil}, gnus won't create and
 maintain a dribble buffer.  The default is @code{t}.
 
 @vindex gnus-dribble-directory
 Gnus will put the dribble file(s) in @code{gnus-dribble-directory}.  If
-this variable is @code{nil}, which it is by default, Gnus will dribble
+this variable is @code{nil}, which it is by default, gnus will dribble
 into the directory where the @file{.newsrc} file is located.  (This is
 normally the user's home directory.)  The dribble file will get the same
 file permissions as the @code{.newsrc} file.
@@ -947,14 +951,14 @@ read the dribble file on startup without querying the user.
 @cindex active file
 @cindex ignored groups
 
-When Gnus starts, or indeed whenever it tries to determine whether new
+When gnus starts, or indeed whenever it tries to determine whether new
 articles have arrived, it reads the active file.  This is a very large
 file that lists all the active groups and articles on the server.
 
 @vindex gnus-ignored-newsgroups
-Before examining the active file, Gnus deletes all lines that match the
+Before examining the active file, gnus deletes all lines that match the
 regexp @code{gnus-ignored-newsgroups}.  This is done primarily to reject
-any groups with bogus names, but you can use this variable to make Gnus
+any groups with bogus names, but you can use this variable to make gnus
 ignore hierarchies you aren't ever interested in.  However, this is not
 recommended.  In fact, it's highly discouraged.  Instead, @pxref{New
 Groups} for an overview of other variables that can be used instead.
@@ -966,15 +970,15 @@ Groups} for an overview of other variables that can be used instead.
 @vindex gnus-read-active-file
 @c @head
 The active file can be rather Huge, so if you have a slow network, you
-can set @code{gnus-read-active-file} to @code{nil} to prevent Gnus from
+can set @code{gnus-read-active-file} to @code{nil} to prevent gnus from
 reading the active file.  This variable is @code{some} by default.
 
 Gnus will try to make do by getting information just on the groups that
 you actually subscribe to.
 
 Note that if you subscribe to lots and lots of groups, setting this
-variable to @code{nil} will probably make Gnus slower, not faster.  At
-present, having this variable @code{nil} will slow Gnus down
+variable to @code{nil} will probably make gnus slower, not faster.  At
+present, having this variable @code{nil} will slow gnus down
 considerably, unless you read news over a 2400 baud modem.
 
 This variable can also have the value @code{some}.  Gnus will then
@@ -984,9 +988,9 @@ support the @code{LIST ACTIVE group} command), on others this isn't fast
 at all.  In any case, @code{some} should be faster than @code{nil}, and
 is certainly faster than @code{t} over slow lines.
 
-If this variable is @code{nil}, Gnus will ask for group info in total
+If this variable is @code{nil}, gnus will ask for group info in total
 lock-step, which isn't very fast.  If it is @code{some} and you use an
-@sc{nntp} server, Gnus will pump out commands as fast as it can, and
+@sc{nntp} server, gnus will pump out commands as fast as it can, and
 read all the replies in one swoop.  This will normally result in better
 performance, but if the server does not support the aforementioned
 @code{LIST ACTIVE group} command, this isn't very nice to the server.
@@ -1005,21 +1009,21 @@ secondary select methods.
 
 @item gnus-load-hook
 @vindex gnus-load-hook
-A hook run while Gnus is being loaded.  Note that this hook will
+A hook run while gnus is being loaded.  Note that this hook will
 normally be run just once in each Emacs session, no matter how many
-times you start Gnus.
+times you start gnus.
 
 @item gnus-before-startup-hook
 @vindex gnus-before-startup-hook
-A hook run after starting up Gnus successfully.
+A hook run after starting up gnus successfully.
 
 @item gnus-startup-hook
 @vindex gnus-startup-hook
-A hook run as the very last thing after starting up Gnus
+A hook run as the very last thing after starting up gnus
 
 @item gnus-started-hook
 @vindex gnus-started-hook
-A hook that is run as the very last thing after starting up Gnus
+A hook that is run as the very last thing after starting up gnus
 successfully.
 
 @item gnus-started-hook
@@ -1029,7 +1033,7 @@ generating the group buffer.
 
 @item gnus-check-bogus-newsgroups
 @vindex gnus-check-bogus-newsgroups
-If non-@code{nil}, Gnus will check for and delete all bogus groups at
+If non-@code{nil}, gnus will check for and delete all bogus groups at
 startup.  A @dfn{bogus group} is a group that you have in your
 @file{.newsrc} file, but doesn't exist on the news server.  Checking for
 bogus groups can take quite a while, so to save time and resources it's
@@ -1045,11 +1049,11 @@ of doing your job.  Note that this variable is used before
 
 @item gnus-no-groups-message
 @vindex gnus-no-groups-message
-Message displayed by Gnus when no groups are available.
+Message displayed by gnus when no groups are available.
 
 @item gnus-play-startup-jingle
 @vindex gnus-play-startup-jingle
-If non-@code{nil}, play the Gnus jingle at startup.
+If non-@code{nil}, play the gnus jingle at startup.
 
 @item gnus-startup-jingle
 @vindex gnus-startup-jingle
@@ -1064,8 +1068,8 @@ default is @samp{Tuxedomoon.Jingle4.au}.
 @cindex group buffer
 
 The @dfn{group buffer} lists all (or parts) of the available groups.  It
-is the first buffer shown when Gnus starts, and will never be killed as
-long as Gnus is active.
+is the first buffer shown when gnus starts, and will never be killed as
+long as gnus is active.
 
 @iftex
 @iflatex
@@ -1145,7 +1149,7 @@ a @code{printf} specifications, for those of you who use (feh!) C.
 There should always be a colon on the line; the cursor always moves to
 the colon after performing an operation.  Nothing else is required---not
 even the group name.  All displayed text is just window dressing, and is
-never examined by Gnus.  Gnus stores all real information it needs using
+never examined by gnus.  Gnus stores all real information it needs using
 text properties.
 
 (Note that if you make a really strange, wonderful, spreadsheet-like
@@ -1280,16 +1284,11 @@ 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))))
+(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))))
 
 (setq gnus-group-highlight
       '(((> unread 200) . my-group-face-1)
@@ -1328,7 +1327,7 @@ topic being inserted.
 @end table
 
 When the forms are @code{eval}ed, point is at the beginning of the line
-of the group in question, so you can use many of the normal Gnus
+of the group in question, so you can use many of the normal gnus
 functions for snarfing info on the group.
 
 @vindex gnus-group-update-hook
@@ -1427,11 +1426,11 @@ is @code{t}.
 Select the current group, switch to the summary buffer and display the
 first unread article (@code{gnus-group-read-group}).  If there are no
 unread articles in the group, or if you give a non-numerical prefix to
-this command, Gnus will offer to fetch all the old articles in this
+this command, gnus will offer to fetch all the old articles in this
 group from the server.  If you give a numerical prefix @var{N}, @var{N}
-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 @var{abs(N)} oldest articles.
+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 @var{abs(N)} oldest articles.
 
 @item RET
 @kindex RET (Group)
@@ -1450,7 +1449,7 @@ minimum amount of fuzz (@code{gnus-group-quick-select-group}).  No
 scoring/killing will be performed, there will be no highlights and no
 expunging.  This might be useful if you're in a real hurry and have to
 enter some humongous group.  If you give a 0 prefix to this command
-(i.e., @kbd{0 M-RET}), Gnus won't even generate the summary buffer,
+(i.e., @kbd{0 M-RET}), gnus won't even generate the summary buffer,
 which is useful if you want to toggle threading before generating the
 summary buffer (@pxref{Summary Generation Commands}).
 
@@ -1473,9 +1472,9 @@ manner will have no permanent effects.
 @end table
 
 @vindex gnus-large-newsgroup
-The @code{gnus-large-newsgroup} variable says what Gnus should consider
+The @code{gnus-large-newsgroup} variable says what gnus should consider
 to be a big group.  This is 200 by default.  If the group has more
-(unread and/or ticked) articles than this, Gnus will query the user
+(unread and/or ticked) articles than this, gnus will query the user
 before entering the group.  The user can then specify how many articles
 should be fetched from the server.  If the user specifies a negative
 number (@code{-n}), the @code{n} oldest articles will be fetched.  If it
@@ -1499,26 +1498,8 @@ Select the first unread article when entering the group.
 @item best
 Select the highest scored article in the group when entering the
 group.
-
-@end table
-
-This variable can also be a function.  In that case, that function will
-be called to place point on a subject line, and/or select some article.
-Useful functions include:
-
-@table @code
-@item gnus-summary-first-unread-subject
-Place point on the subject line of the first unread article, but
-don't select the article.
-
-@item gnus-summary-first-unread-article
-Select the first unread article.
-
-@item gnus-summary-best-unread-article
-Select the highest-scored unread article.
 @end table
 
-
 If you want to prevent automatic selection in some group (say, in a
 binary group with Huge articles) you can set this variable to @code{nil}
 in @code{gnus-select-group-hook}, which is called when a group is
@@ -1611,8 +1592,8 @@ Also @pxref{Group Levels}.
 @c @icon{gnus-group-catchup-current}
 Mark all unticked articles in this group as read
 (@code{gnus-group-catchup-current}).
-@code{gnus-group-catchup-group-hook} is called when catching up a group from
-the group buffer.
+@code{gnus-group-catchup-group-hook} is called when catching up a group
+from the group buffer.
 
 @item C
 @kindex C (Group)
@@ -1644,7 +1625,7 @@ caution.
 
 All groups have a level of @dfn{subscribedness}.  For instance, if a
 group is on level 2, it is more subscribed than a group on level 5.  You
-can ask Gnus to just list groups on a given level or lower
+can ask gnus to just list groups on a given level or lower
 (@pxref{Listing Groups}), or to just check for new articles in groups on
 a given level or lower (@pxref{Scanning New Messages}).
 
@@ -1878,7 +1859,7 @@ for a directory name (@code{gnus-group-make-directory-group}).
 @kindex G h (Group)
 @cindex help group
 @findex gnus-group-make-help-group
-Make the Gnus help group (@code{gnus-group-make-help-group}).
+Make the gnus help group (@code{gnus-group-make-help-group}).
 
 @item G a
 @kindex G a (Group)
@@ -1887,7 +1868,7 @@ Make the Gnus help group (@code{gnus-group-make-help-group}).
 @findex gnus-group-make-archive-group
 @vindex gnus-group-archive-directory
 @vindex gnus-group-recent-archive-directory
-Make a Gnus archive group (@code{gnus-group-make-archive-group}).  By
+Make a gnus archive group (@code{gnus-group-make-archive-group}).  By
 default a group pointing to the most recent articles will be created
 (@code{gnus-group-recent-archive-directory}), but given a prefix, a full
 group will be created from @code{gnus-group-archive-directory}.
@@ -1920,16 +1901,9 @@ command, you will be prompted for a file name and a file type.
 Currently supported types are @code{babyl}, @code{mbox}, @code{digest},
 @code{mmdf}, @code{news}, @code{rnews}, @code{clari-briefs},
 @code{rfc934}, @code{rfc822-forward}, and @code{forward}.  If you run
-this command without a prefix, Gnus will guess at the file type.
+this command without a prefix, gnus will guess at the file type.
 @xref{Document Groups}.
 
-@item G u
-@kindex G u (Group)
-@vindex gnus-useful-groups
-@findex gnus-group-make-useful-group
-Create one of the groups mentioned in @code{gnus-useful-groups}
-(@code{gnus-group-make-useful-group}).
-
 @item G w
 @kindex G w (Group)
 @findex gnus-group-make-web-group
@@ -1976,7 +1950,7 @@ methods.
 
 @vindex gnus-activate-foreign-newsgroups
 If @code{gnus-activate-foreign-newsgroups} is a positive number,
-Gnus will check all foreign groups with this level or lower at startup.
+gnus will check all foreign groups with this level or lower at startup.
 This might take quite a while, especially if you subscribe to lots of
 groups from different @sc{nntp} servers.  Also @pxref{Group Levels};
 @code{gnus-activate-level} also affects activation of foreign
@@ -1995,10 +1969,10 @@ Here's an example group parameter list:
  (auto-expire . t))
 @end example
 
-We see that each element consists of a "dotted pair"---the thing before
-the dot is the key, while the thing after the dot is the value.  All the
-parameters have this form @emph{except} local variable specs, which are
-not dotted pairs, but proper lists.
+We see that each element consists of a ``dotted pair''---the thing
+before the dot is the key, while the thing after the dot is the value.
+All the parameters have this form @emph{except} local variable specs,
+which are not dotted pairs, but proper lists.
 
 The following group parameters can be used:
 
@@ -2067,7 +2041,7 @@ posts in that group will be sent to @code{some.group.name}.
 
 @item newsgroup
 @cindex newsgroup
-If you have @code{(newsgroup . t)} in the group parameter list, Gnus
+If you have @code{(newsgroup . t)} in the group parameter list, gnus
 will treat all responses as if they were responses to news articles.
 This can be useful if you have a mail group that's really a mirror of a
 news group.
@@ -2137,15 +2111,9 @@ ticked articles.
 @end table
 
 @item comment
-Elements that look like @code{(comment . "This is a comment")}
-are arbitrary comments on the group.  They are currently ignored by
-Gnus, but provide a place for you to store information on particular
-groups.
-
-@item charset
-Elements that look like @code{(charset . iso-8859-1)} will make
-@code{iso-8859-1} the default charset; that is, the charset that will be 
-used for all articles that do not specify a charset.
+Elements that look like @code{(comment . "This is a comment")} are
+arbitrary comments on the group.  They are currently ignored by gnus,
+but provide a place for you to store information on particular groups.
 
 @item @var{(variable form)}
 You can use the group parameters to set variables local to the group you
@@ -2362,11 +2330,7 @@ Sort the group buffer alphabetically by backend name
 
 @end table
 
-All the commands below obeys the process/prefix convention
-(@pxref{Process/Prefix}).
-
-When given a symbolic prefix (@pxref{Symbolic Prefixes}), all these
-commands will sort in reverse order.  
+When given a prefix, all these commands will sort in reverse order.
 
 You can also sort a subset of the groups:
 
@@ -2374,38 +2338,38 @@ You can also sort a subset of the groups:
 @item G P a
 @kindex G P a (Group)
 @findex gnus-group-sort-selected-groups-by-alphabet
-Sort the groups alphabetically by group name
-(@code{gnus-group-sort-selected-groups-by-alphabet}).
+Sort the process/prefixed groups in the group buffer alphabetically by
+group name (@code{gnus-group-sort-selected-groups-by-alphabet}).
 
 @item G P u
 @kindex G P u (Group)
 @findex gnus-group-sort-selected-groups-by-unread
-Sort the groups by the number of unread articles
-(@code{gnus-group-sort-selected-groups-by-unread}).
+Sort the process/prefixed groups in the group buffer by the number of
+unread articles (@code{gnus-group-sort-selected-groups-by-unread}).
 
 @item G P l
 @kindex G P l (Group)
 @findex gnus-group-sort-selected-groups-by-level
-Sort the groups by group level
+Sort the process/prefixed groups in the group buffer by group level
 (@code{gnus-group-sort-selected-groups-by-level}).
 
 @item G P v
 @kindex G P v (Group)
 @findex gnus-group-sort-selected-groups-by-score
-Sort the groups by group score
+Sort the process/prefixed groups in the group buffer by group score
 (@code{gnus-group-sort-selected-groups-by-score}).  @xref{Group Score}.
 
 @item G P r
 @kindex G P r (Group)
 @findex gnus-group-sort-selected-groups-by-rank
-Sort the groups by group rank
+Sort the process/prefixed groups in the group buffer by group rank
 (@code{gnus-group-sort-selected-groups-by-rank}).  @xref{Group Score}.
 
 @item G P m
 @kindex G P m (Group)
 @findex gnus-group-sort-selected-groups-by-method
-Sort the groups alphabetically by backend name
-(@code{gnus-group-sort-selected-groups-by-method}).
+Sort the process/prefixed groups in the group buffer alphabetically by
+backend name (@code{gnus-group-sort-selected-groups-by-method}).
 
 @end table
 
@@ -2426,10 +2390,8 @@ Find bogus groups and delete them
 @kindex F (Group)
 @findex gnus-group-find-new-groups
 Find new groups and process them (@code{gnus-group-find-new-groups}).
-With 1 @kbd{C-u}, use the @code{ask-server} method to query the server
-for new groups.  With 2 @kbd{C-u}'s, use most complete method possible
-to query the server for new groups, and subscribe the new groups as
-zombies.
+If given a prefix, use the @code{ask-server} method to query the server
+for new groups.
 
 @item C-c C-x
 @kindex C-c C-x (Group)
@@ -2511,42 +2473,43 @@ there) (@code{gnus-browse-describe-briefly}).
 
 
 @node Exiting Gnus
-@section Exiting Gnus
-@cindex exiting Gnus
+@section Exiting gnus
+@cindex exiting gnus
 
-Yes, Gnus is ex(c)iting.
+Yes, gnus is ex(c)iting.
 
 @table @kbd
 @item z
 @kindex z (Group)
 @findex gnus-group-suspend
-Suspend Gnus (@code{gnus-group-suspend}).  This doesn't really exit Gnus,
-but it kills all buffers except the Group buffer.  I'm not sure why this
-is a gain, but then who am I to judge?
+Suspend gnus (@code{gnus-group-suspend}).  This doesn't really exit
+gnus, but it kills all buffers except the Group buffer.  I'm not sure
+why this is a gain, but then who am I to judge?
 
 @item q
 @kindex q (Group)
 @findex gnus-group-exit
 @c @icon{gnus-group-exit}
-Quit Gnus (@code{gnus-group-exit}).
+Quit gnus (@code{gnus-group-exit}).
 
 @item Q
 @kindex Q (Group)
 @findex gnus-group-quit
-Quit Gnus without saving the @file{.newsrc} files (@code{gnus-group-quit}).
-The dribble file will be saved, though (@pxref{Auto Save}).
+Quit gnus without saving the @file{.newsrc} files
+(@code{gnus-group-quit}).  The dribble file will be saved, though
+(@pxref{Auto Save}).
 @end table
 
 @vindex gnus-exit-gnus-hook
 @vindex gnus-suspend-gnus-hook
-@code{gnus-suspend-gnus-hook} is called when you suspend Gnus and
-@code{gnus-exit-gnus-hook} is called when you quit Gnus, while
+@code{gnus-suspend-gnus-hook} is called when you suspend gnus and
+@code{gnus-exit-gnus-hook} is called when you quit gnus, while
 @code{gnus-after-exiting-gnus-hook} is called as the final item when
-exiting Gnus.
+exiting gnus.
 
 @findex gnus-unload
 @cindex unloading
-If you wish to completely unload Gnus and all its adherents, you can use
+If you wish to completely unload gnus and all its adherents, you can use
 the @code{gnus-unload} command.  This command is also very handy when
 trying to customize meta-variables.
 
@@ -2699,13 +2662,8 @@ convention (@pxref{Process/Prefix}).
 @findex gnus-topic-remove-group
 Remove a group from the current topic (@code{gnus-topic-remove-group}).
 This command is mainly useful if you have the same group in several
-topics and wish to remove it from one of the topics.  You may also
-remove a group from all topics, but in that case, Gnus will add it to
-the root topic the next time you start Gnus.  In fact, all new groups
-(which, naturally, don't belong to any topic) will show up in the root
-topic. 
-
-This command uses the process/prefix convention
+topics and wish to remove it from one of the topics.
+The command uses the process/prefix convention
 (@pxref{Process/Prefix}).
 
 @item T M
@@ -2720,8 +2678,8 @@ Move all groups that match some regular expression to a topic
 Copy all groups that match some regular expression to a topic
 (@code{gnus-topic-copy-matching}).
 
-@item T H
-@kindex T H (Topic)
+@item T h
+@kindex T h (Topic)
 @findex gnus-topic-toggle-display-empty-topics
 Toggle hiding empty topics
 (@code{gnus-topic-toggle-display-empty-topics}).
@@ -2750,20 +2708,12 @@ toggling command on topics.  In addition, if you give a numerical
 prefix, group on that level (and lower) will be displayed.
 
 @item T TAB
-@itemx TAB
 @kindex T TAB (Topic)
-@kindex TAB (Topic)
 @findex gnus-topic-indent
 ``Indent'' the current topic so that it becomes a sub-topic of the
 previous topic (@code{gnus-topic-indent}).  If given a prefix,
 ``un-indent'' the topic instead.
 
-@item M-TAB
-@kindex M-TAB (Topic)
-@findex gnus-topic-unindent
-``Un-indent'' the current topic so that it becomes a sub-topic of the
-parent of its current parent (@code{gnus-topic-unindent}).  
-
 @item C-k
 @kindex C-k (Topic)
 @findex gnus-topic-kill-group
@@ -2790,7 +2740,7 @@ Delete an empty topic (@code{gnus-topic-delete}).
 @item A T
 @kindex A T (Topic)
 @findex gnus-topic-list-active
-List all groups that Gnus knows about in a topics-ified way
+List all groups that gnus knows about in a topics-ified way
 (@code{gnus-topic-list-active}).
 
 @item G p
@@ -2931,7 +2881,7 @@ The @samp{Emacs} topic has the topic parameter @code{(score-file
 . "emacs.SCORE")}; the @samp{Relief} topic has the topic parameter
 @code{(score-file . "relief.SCORE")}; and the @samp{Misc} topic has the
 topic parameter @code{(score-file . "emacs.SCORE")}.  In addition,
-@* @samp{alt.religion.emacs} has the group parameter @code{(score-file
+@samp{alt.religion.emacs} has the group parameter @code{(score-file
 . "religion.SCORE")}.
 
 Now, when you enter @samp{alt.sex.emacs} in the @samp{Relief} topic, you
@@ -2954,10 +2904,10 @@ happens.  You just have to be careful if you do stuff like that.
 @section Misc Group Stuff
 
 @menu
-* 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.
+* 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.
 @end menu
 
 @table @kbd
@@ -3046,9 +2996,9 @@ Activate absolutely all groups (@code{gnus-activate-all-groups}).
 @kindex R (Group)
 @cindex restarting
 @findex gnus-group-restart
-Restart Gnus (@code{gnus-group-restart}).  This saves the @file{.newsrc}
+Restart gnus (@code{gnus-group-restart}).  This saves the @file{.newsrc}
 file(s), closes the connection to all servers, clears up all run-time
-Gnus variables, and then starts Gnus all over again.
+gnus variables, and then starts gnus all over again.
 
 @end table
 
@@ -3082,7 +3032,7 @@ that case, giving a prefix to this command will allow you to choose
 between the various sites.  @code{ange-ftp} (or @code{efs}) will be used
 for fetching the file.
 
-If fetching from the first site is unsuccessful, Gnus will attempt to go
+If fetching from the first site is unsuccessful, gnus will attempt to go
 through @code{gnus-group-faq-directory} and try to open them one by one.
 
 @item H d
@@ -3100,7 +3050,7 @@ a prefix, force Gnus to re-read the description from the server.
 @kindex M-d (Group)
 @findex gnus-group-describe-all-groups
 Describe all groups (@code{gnus-group-describe-all-groups}).  If given a
-prefix, force Gnus to re-read the description file from the server.
+prefix, force gnus to re-read the description file from the server.
 
 @item H v
 @itemx V
@@ -3108,7 +3058,7 @@ prefix, force Gnus to re-read the description file from the server.
 @kindex H v (Group)
 @cindex version
 @findex gnus-version
-Display current Gnus version numbers (@code{gnus-version}).
+Display current gnus version numbers (@code{gnus-version}).
 
 @item ?
 @kindex ? (Group)
@@ -3120,7 +3070,7 @@ Give a very short help message (@code{gnus-group-describe-briefly}).
 @cindex info
 @cindex manual
 @findex gnus-info-find-node
-Go to the Gnus info node (@code{gnus-info-find-node}).
+Go to the gnus info node (@code{gnus-info-find-node}).
 @end table
 
 
@@ -3129,7 +3079,7 @@ Go to the Gnus info node (@code{gnus-info-find-node}).
 @cindex timestamps
 @cindex group timestamps
 
-It can be convenient to let Gnus keep track of when you last read a
+It can be convenient to let gnus keep track of when you last read a
 group.  To set the ball rolling, you should add
 @code{gnus-group-set-timestamp} to @code{gnus-select-group-hook}:
 
@@ -3224,7 +3174,6 @@ You can have as many summary buffers open as you wish.
 * 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.
 * 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.
@@ -3253,7 +3202,6 @@ You can have as many summary buffers open as you wish.
 
 @menu
 * 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.
 @end menu
@@ -3263,17 +3211,14 @@ You can have as many summary buffers open as you wish.
 @vindex gnus-extract-address-components
 Gnus will use the value of the @code{gnus-extract-address-components}
 variable as a function for getting the name and address parts of a
-@code{From} header.  Two pre-defined functions exist:
+@code{From} header.  Three pre-defined functions exist:
 @code{gnus-extract-address-components}, which is the default, quite
-fast, and too simplistic solution; and
-@code{mail-extract-address-components}, which works very nicely, but is
-slower.  The default function will return the wrong answer in 5% of the
-cases.  If this is unacceptable to you, use the other function instead:
-
-@lisp
-(setq gnus-extract-address-components
-      'mail-extract-address-components)
-@end lisp
+fast, and too simplistic solution;
+@code{mail-extract-address-components}, which works nicely, but is
+slower; and @code{std11-extract-address-components}, which works very
+nicely, but is slower.  The default function will return the wrong
+answer in 5% of the cases.  If this is unacceptable to you, use the
+other function instead.
 
 @vindex gnus-summary-same-subject
 @code{gnus-summary-same-subject} is a string indicating that the current
@@ -3307,9 +3252,6 @@ had a different subject, @code{gnus-summary-same-subject} otherwise.
 Full @code{From} header.
 @item n
 The name (from the @code{From} header).
-@item f
-The name, code @code{To} header or the @code{Newsgroups} header
-(@pxref{To From Newsgroups}).
 @item a
 The name (from the @code{From} header).  This differs from the @code{n}
 spec in that it uses the function designated by the
@@ -3387,7 +3329,7 @@ into the summary just like information from any other summary specifier.
 @end table
 
 The @samp{%U} (status), @samp{%R} (replied) and @samp{%z} (zcore) specs
-have to be handled with care.  For reasons of efficiency, Gnus will
+have to be handled with care.  For reasons of efficiency, gnus will
 compute what column these characters will end up in, and ``hard-code''
 that.  This means that it is invalid to have these specs after a
 variable-length spec.  Well, you might not be arrested, but your summary
@@ -3396,70 +3338,7 @@ buffer will look strange, which is bad enough.
 The smart choice is to have these specs as far to the left as possible.
 (Isn't that the case with everything, though?  But I digress.)
 
-This restriction may disappear in later versions of Gnus.
-
-
-@node To From Newsgroups
-@subsection To From Newsgroups
-@cindex To
-@cindex Newsgroups
-
-In some groups (particularly in archive groups), the @code{From} header
-isn't very interesting, since all the articles there are written by
-you.  To display the information in the @code{To} or @code{Newsgroups}
-headers instead, you need to decide three things: What information to
-gather; where to display it; and when to display it.
-
-@enumerate
-@item
-@vindex gnus-extra-headers
-The reading of extra header information is controlled by the
-@code{gnus-extra-headers}.  This is a list of header symbols.  For
-instance:
-
-@lisp
-(setq gnus-extra-headers
-      '(To Newsgroups X-Newsreader))
-@end lisp
-
-This will result in Gnus trying to obtain these three headers, and
-storing it in header structures for later easy retrieval.
-
-@item
-@findex gnus-extra-header
-The value of these extra headers can be accessed via the
-@code{gnus-extra-header} function.  Here's a format line spec that will
-access the @code{X-Newsreader} header:
-
-@example
-"%~(form (gnus-extra-header 'X-Newsreader))@@"
-@end example
-
-@item
-@vindex gnus-ignored-from-addresses
-The @code{gnus-ignored-from-addresses} variable says when the @samp{%f}
-summary line spec returns the @code{To}, @code{Newsreader} or
-@code{From} header.  If this regexp matches the contents of the
-@code{From} header, the value of the @code{To} or @code{Newsreader}
-headers are used instead.
-
-@end enumerate
-
-@vindex nnmail-extra-headers
-A related variable is @code{nnmail-extra-headers}, which controls when
-to include extra headers when generating overview (@sc{nov}) files.
-
-In summary, you'd typically do something like the following:
-
-@lisp
-(setq gnus-extra-headers
-      '(To Newsgroups))
-(setq nnmail-extra-headers gnus-extra-headers)
-(setq gnus-summary-line-format
-      "%U%R%z%I%(%[%4L: %-20,20f%]%) %s\n")
-(setq gnus-ignored-from-addresses
-      "Your Name Here")
-@end lisp
+This restriction may disappear in later versions of gnus.
 
 
 @node Summary Buffer Mode Line
@@ -3590,7 +3469,7 @@ Ask for an article number and then go to the summary line of that article
 without displaying the article (@code{gnus-summary-goto-subject}).
 @end table
 
-If Gnus asks you to press a key to confirm going to the next group, you
+If gnus asks you to press a key to confirm going to the next group, you
 can use the @kbd{C-n} and @kbd{C-p} keys to move around the group
 buffer, searching for the next group to read without actually returning
 to the group buffer.
@@ -3602,12 +3481,12 @@ Variables related to summary movement:
 @vindex gnus-auto-select-next
 @item gnus-auto-select-next
 If you issue one of the movement commands (like @kbd{n}) and there are
-no more unread articles after the current one, Gnus will offer to go to
+no more unread articles after the current one, gnus will offer to go to
 the next group.  If this variable is @code{t} and the next group is
-empty, Gnus will exit summary mode and return to the group buffer.  If
-this variable is neither @code{t} nor @code{nil}, Gnus will select the
+empty, gnus will exit summary mode and return to the group buffer.  If
+this variable is neither @code{t} nor @code{nil}, gnus will select the
 next group, no matter whether it has any unread articles or not.  As a
-special case, if this variable is @code{quietly}, Gnus will select the
+special case, if this variable is @code{quietly}, gnus will select the
 next group without asking for confirmation.  If this variable is
 @code{almost-quietly}, the same will happen only if you are located on
 the last article in the group.  Finally, if this variable is
@@ -3619,10 +3498,8 @@ without confirmation.  Also @pxref{Group Levels}.
 If non-@code{nil}, all the movement commands will try to go to the next
 article with the same subject as the current.  (@dfn{Same} here might
 mean @dfn{roughly equal}.  See @code{gnus-summary-gather-subject-limit}
-for details (@pxref{Customizing Threading}).)  If there are no more
-articles with the same subject, go to the first unread article.
-
-This variable is not particularly useful if you use a threaded display.
+for details (@pxref{Customizing Threading}).)  This variable is not
+particularly useful if you use a threaded display.
 
 @item gnus-summary-check-current
 @vindex gnus-summary-check-current
@@ -3632,7 +3509,7 @@ Instead, they will choose the current article.
 
 @item gnus-auto-center-summary
 @vindex gnus-auto-center-summary
-If non-@code{nil}, Gnus will keep the point in the summary buffer
+If non-@code{nil}, gnus will keep the point in the summary buffer
 centered at all times.  This makes things quite tidy, but if you have a
 slow network connection, or simply do not like this un-Emacsism, you can
 set this variable to @code{nil} to get the normal Emacs scrolling
@@ -3640,9 +3517,6 @@ action.  This will also inhibit horizontal re-centering of the summary
 buffer, which might make it more inconvenient to read extremely long
 threads.
 
-This variable can also be a number.  In that case, center the window at
-the given number of lines from the top.
-
 @end table
 
 
@@ -3807,12 +3681,6 @@ Scroll the current article back one page (@code{gnus-summary-prev-page}).
 Scroll the current article one line forward
 (@code{gnus-summary-scroll-up}).
 
-@item M-RET
-@kindex M-RET (Summary)
-@findex gnus-summary-scroll-down
-Scroll the current article one line backward
-(@code{gnus-summary-scroll-down}).
-
 @item A g
 @itemx g
 @kindex A g (Summary)
@@ -3904,7 +3772,7 @@ goes out to all people listed in the @code{To}, @code{From} (or
 @kindex S W (Summary)
 @findex gnus-summary-wide-reply-with-original
 Mail a wide reply to the current article and include the original
-message (@code{gnus-summary-wide-reply-with-original}).  This command uses
+message (@code{gnus-summary-reply-with-original}).  This command uses
 the process/prefix convention.
 
 @item S o m
@@ -3933,7 +3801,7 @@ reason (wrong address, transient failure), you can use this command to
 resend that bounced mail (@code{gnus-summary-resend-bounced-mail}).  You
 will be popped into a mail buffer where you can edit the headers before
 sending the mail off again.  If you give a prefix to this command, and
-the bounced mail is a reply to some other mail, Gnus will try to fetch
+the bounced mail is a reply to some other mail, gnus will try to fetch
 that mail and display it for easy perusal of its headers.  This might
 very well fail, though.
 
@@ -3953,7 +3821,7 @@ This command is mainly used if you have several accounts and want to
 ship a mail to a different account of yours.  (If you're both
 @code{root} and @code{postmaster} and get a mail for @code{postmaster}
 to the @code{root} account, you may want to resend it to
-@code{postmaster}.  Ordnung muß sein!
+@code{postmaster}.  Ordnung mu\e(I_\e(B sein!
 
 This command understands the process/prefix convention
 (@pxref{Process/Prefix}).
@@ -4114,7 +3982,7 @@ header by substituting one of those words for the word
 you would do normally.  The previous article will be
 canceled/superseded.
 
-Just remember, kids: There is no 'c' in 'supersede'.
+Just remember, kids: There is no `c' in `supersede'.
 
 
 @node Marking Articles
@@ -4252,8 +4120,7 @@ Marked as expirable (@code{gnus-expirable-mark}).
 Marking articles as @dfn{expirable} (or have them marked as such
 automatically) doesn't make much sense in normal groups---a user doesn't
 control expiring of news articles, but in mail groups, for instance,
-articles marked as @dfn{expirable} can be deleted by Gnus at
-any time.
+articles marked as @dfn{expirable} can be deleted by gnus at any time.
 @end table
 
 
@@ -4271,8 +4138,8 @@ read or not.
 You can set a bookmark in the current article.  Say you are reading a
 long thesis on cats' urinary tracts, and have to go home for dinner
 before you've finished reading the thesis.  You can then set a bookmark
-in the article, and Gnus will jump to this bookmark the next time it
-encounters the article.  @xref{Setting Marks}.
+in the article, and gnus will jump to this bookmark the next time it
+encounters the article.  @xref{Setting Marks}
 
 @item
 @vindex gnus-replied-mark
@@ -4283,7 +4150,7 @@ answered) will be marked with an @samp{A} in the second column
 @item
 @vindex gnus-cached-mark
 Articles stored in the article cache will be marked with an @samp{*} in
-the second column (@code{gnus-cached-mark}).  @xref{Article Caching}.
+the second column (@code{gnus-cached-mark}).  @xref{Article Caching}
 
 @item
 @vindex gnus-saved-mark
@@ -4340,7 +4207,7 @@ article as unread.
 @kindex M t (Summary)
 @findex gnus-summary-tick-article-forward
 Tick the current article (@code{gnus-summary-tick-article-forward}).
-@xref{Article Caching}.
+@xref{Article Caching}
 
 @item M ?
 @itemx ?
@@ -4348,7 +4215,7 @@ Tick the current article (@code{gnus-summary-tick-article-forward}).
 @kindex M ? (Summary)
 @findex gnus-summary-mark-as-dormant
 Mark the current article as dormant
-(@code{gnus-summary-mark-as-dormant}).  @xref{Article Caching}.
+(@code{gnus-summary-mark-as-dormant}).  @xref{Article Caching}
 
 @item M d
 @itemx d
@@ -4742,7 +4609,7 @@ displayed as empty lines in the summary buffer.
 @cindex customizing threading
 
 @menu
-* Loose Threads::        How Gnus gathers loose threads into bigger threads.
+* 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!
@@ -4758,13 +4625,13 @@ displayed as empty lines in the summary buffer.
 @table @code
 @item gnus-summary-make-false-root
 @vindex gnus-summary-make-false-root
-If non-@code{nil}, Gnus will gather all loose subtrees into one big tree
+If non-@code{nil}, gnus will gather all loose subtrees into one big tree
 and create a dummy root at the top.  (Wait a minute.  Root at the top?
 Yup.)  Loose subtrees occur when the real root has expired, or you've
 read or killed the root in a previous session.
 
-When there is no real root of a thread, Gnus will have to fudge
-something.  This variable says what fudging method Gnus should use.
+When there is no real root of a thread, gnus will have to fudge
+something.  This variable says what fudging method gnus should use.
 There are four possible values:
 
 @iftex
@@ -4814,17 +4681,17 @@ Don't gather loose threads.
 @item gnus-summary-gather-subject-limit
 @vindex gnus-summary-gather-subject-limit
 Loose threads are gathered by comparing subjects of articles.  If this
-variable is @code{nil}, Gnus requires an exact match between the
+variable is @code{nil}, gnus requires an exact match between the
 subjects of the loose threads before gathering them into one big
 super-thread.  This might be too strict a requirement, what with the
 presence of stupid newsreaders that chop off long subject lines.  If
 you think so, set this variable to, say, 20 to require that only the
 first 20 characters of the subjects have to match.  If you set this
-variable to a really low number, you'll find that Gnus will gather
+variable to a really low number, you'll find that gnus will gather
 everything in sight into one thread, which isn't very helpful.
 
 @cindex fuzzy article gathering
-If you set this variable to the special value @code{fuzzy}, Gnus will
+If you set this variable to the special value @code{fuzzy}, gnus will
 use a fuzzy string comparison algorithm on the subjects (@pxref{Fuzzy
 Matching}).
 
@@ -4938,16 +4805,16 @@ something like:
 @table @code
 @item gnus-fetch-old-headers
 @vindex gnus-fetch-old-headers
-If non-@code{nil}, Gnus will attempt to build old threads by fetching
-more old headers---headers to articles marked as read.  If you
-would like to display as few summary lines as possible, but still
-connect as many loose threads as possible, you should set this variable
-to @code{some} or a number.  If you set it to a number, no more than
-that number of extra old headers will be fetched.  In either case,
-fetching old headers only works if the backend you are using carries
-overview files---this would normally be @code{nntp}, @code{nnspool} and
+If non-@code{nil}, gnus will attempt to build old threads by fetching
+more old headers---headers to articles marked as read.  If you would
+like to display as few summary lines as possible, but still connect as
+many loose threads as possible, you should set this variable to
+@code{some} or a number.  If you set it to a number, no more than that
+number of extra old headers will be fetched.  In either case, fetching
+old headers only works if the backend you are using carries overview
+files---this would normally be @code{nntp}, @code{nnspool} and
 @code{nnml}.  Also remember that if the root of the thread has been
-expired by the server, there's not much Gnus can do about that.
+expired by the server, there's not much gnus can do about that.
 
 This variable can also be set to @code{invisible}.  This won't have any
 visible effects, but is useful if you use the @kbd{A T} command a lot
@@ -4959,12 +4826,12 @@ Fetching old headers can be slow.  A low-rent similar effect can be
 gotten by setting this variable to @code{some}.  Gnus will then look at
 the complete @code{References} headers of all articles and try to string
 together articles that belong in the same thread.  This will leave
-@dfn{gaps} in the threading display where Gnus guesses that an article
+@dfn{gaps} in the threading display where gnus guesses that an article
 is missing from the thread.  (These gaps appear like normal summary
-lines.  If you select a gap, Gnus will try to fetch the article in
-question.)  If this variable is @code{t}, Gnus will display all these
+lines.  If you select a gap, gnus will try to fetch the article in
+question.)  If this variable is @code{t}, gnus will display all these
 ``gaps'' without regard for whether they are useful for completing the
-thread or not.  Finally, if this variable is @code{more}, Gnus won't cut
+thread or not.  Finally, if this variable is @code{more}, gnus won't cut
 off sparse leaf nodes that don't lead anywhere.  This variable is
 @code{nil} by default.
 
@@ -5021,7 +4888,10 @@ The default is 4.
 
 @item gnus-parse-headers-hook
 @vindex gnus-parse-headers-hook
-Hook run before parsing any headers.
+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}.
 
 @item gnus-alter-header-function
 @vindex gnus-alter-header-function
@@ -5188,10 +5058,7 @@ Matching}).
 @findex gnus-thread-sort-by-number
 @vindex gnus-thread-sort-functions
 If you are using a threaded summary display, you can sort the threads by
-setting @code{gnus-thread-sort-functions}, which can be either a single
-function, a list of functions, or a list containing functions and
-@code{(not some-function)} elements.
-
+setting @code{gnus-thread-sort-functions}, which is a list of functions.
 By default, sorting is done on article numbers.  Ready-made sorting
 predicate functions include @code{gnus-thread-sort-by-number},
 @code{gnus-thread-sort-by-author}, @code{gnus-thread-sort-by-subject},
@@ -5200,23 +5067,22 @@ predicate functions include @code{gnus-thread-sort-by-number},
 
 Each function takes two threads and returns non-@code{nil} if the first
 thread should be sorted before the other.  Note that sorting really is
-normally done by looking only at the roots of each thread.
-
-If you use more than one function, the primary sort key should be the
-last function in the list.  You should probably always include
+normally done by looking only at the roots of each thread.  If you use
+more than one function, the primary sort key should be the last function
+in the list.  You should probably always include
 @code{gnus-thread-sort-by-number} in the list of sorting
 functions---preferably first.  This will ensure that threads that are
 equal with respect to the other sort criteria will be displayed in
 ascending article order.
 
-If you would like to sort by reverse score, then by subject, and finally
-by number, you could do something like:
+If you would like to sort by score, then by subject, and finally by
+number, you could do something like:
 
 @lisp
 (setq gnus-thread-sort-functions
       '(gnus-thread-sort-by-number
         gnus-thread-sort-by-subject
-        (reverse gnus-thread-sort-by-total-score)))
+        gnus-thread-sort-by-total-score))
 @end lisp
 
 The threads that have highest score will be displayed first in the
@@ -5275,22 +5141,22 @@ say something like:
 If you read your news from an @sc{nntp} server that's far away, the
 network latencies may make reading articles a chore.  You have to wait
 for a while after pressing @kbd{n} to go to the next article before the
-article appears.  Why can't Gnus just go ahead and fetch the article
+article appears.  Why can't gnus just go ahead and fetch the article
 while you are reading the previous one?  Why not, indeed.
 
 First, some caveats.  There are some pitfalls to using asynchronous
-article fetching, especially the way Gnus does it.
+article fetching, especially the way gnus does it.
 
 Let's say you are reading article 1, which is short, and article 2 is
 quite long, and you are not interested in reading that.  Gnus does not
 know this, so it goes ahead and fetches article 2.  You decide to read
-article 3, but since Gnus is in the process of fetching article 2, the
+article 3, but since gnus is in the process of fetching article 2, the
 connection is blocked.
 
-To avoid these situations, Gnus will open two (count 'em two)
+To avoid these situations, gnus will open two (count 'em two)
 connections to the server.  Some people may think this isn't a very nice
 thing to do, but I don't see any real alternatives.  Setting up that
-extra connection takes some time, so Gnus startup will be slower.
+extra connection takes some time, so gnus startup will be slower.
 
 Gnus will fetch more articles than you will read.  This will mean that
 the link between your machine and the @sc{nntp} server will become more
@@ -5322,7 +5188,8 @@ pre-fetched.  The default is @code{gnus-async-read-p}, which returns
 @code{nil} on read articles.  The function is called with an article
 data structure as the only parameter.
 
-If, for instance, you wish to pre-fetch only unread articles shorter than 100 lines, you could say something like:
+If, for instance, you wish to pre-fetch only unread articles shorter
+than 100 lines, you could say something like:
 
 @lisp
 (defun my-async-short-unread-p (data)
@@ -5335,8 +5202,8 @@ If, for instance, you wish to pre-fetch only unread articles shorter than 100 li
 @end lisp
 
 These functions will be called many, many times, so they should
-preferably be short and sweet to avoid slowing down Gnus too much.
-It's probably a good idea to byte-compile things like this.
+preferably be short and sweet to avoid slowing down gnus too much.  It's
+probably a good idea to byte-compile things like this.
 
 @vindex gnus-prefetched-article-deletion-strategy
 Articles have to be removed from the asynch buffer sooner or later.  The
@@ -5353,9 +5220,9 @@ Remove articles when exiting the group.
 
 The default value is @code{(read exit)}.
 
-@c @vindex gnus-use-header-prefetch
-@c If @code{gnus-use-header-prefetch} is non-@code{nil}, prefetch articles
-@c from the next group.
+@vindex gnus-use-header-prefetch
+If @code{gnus-use-header-prefetch} is non-@code{nil}, prefetch articles
+from the next group.
 
 
 @node Article Caching
@@ -5411,24 +5278,20 @@ to score unwanted articles down and have them marked as read.  They will
 not then be downloaded by this command.
 
 @vindex gnus-uncacheable-groups
-@vindex gnus-cacheable-groups
-It is likely that you do not want caching on all groups.  For instance,
+It is likely that you do not want caching on some groups.  For instance,
 if your @code{nnml} mail is located under your home directory, it makes no
 sense to cache it somewhere else under your home directory.  Unless you
-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
-variables, the group is not cached.
+feel that it's neat to use twice as much space.  To limit the caching,
+you could set the @code{gnus-uncacheable-groups} regexp to
+@samp{^nnml}, for instance.  This variable is @code{nil} by
+default.
 
 @findex gnus-cache-generate-nov-databases
 @findex gnus-cache-generate-active
 @vindex gnus-cache-active-file
 The cache stores information on what articles it contains in its active
 file (@code{gnus-cache-active-file}).  If this file (or any other parts
-of the cache) becomes all messed up for some reason or other, Gnus
+of the cache) becomes all messed up for some reason or other, gnus
 offers two functions that will try to set things right.  @kbd{M-x
 gnus-cache-generate-nov-databases} will (re)build all the @sc{nov}
 files, and @kbd{gnus-cache-generate-active} will (re)generate the active
@@ -5487,17 +5350,17 @@ interested in persistent articles:
 
 If you have a slow connection, but the idea of using caching seems
 unappealing to you (and it is, really), you can help the situation some
-by switching on the @dfn{backlog}.  This is where Gnus will buffer
+by switching on the @dfn{backlog}.  This is where gnus will buffer
 already read articles so that it doesn't have to re-fetch articles
 you've already read.  This only helps if you are in the habit of
 re-selecting articles you've recently read, of course.  If you never do
-that, turning the backlog on will slow Gnus down a little bit, and
+that, turning the backlog on will slow gnus down a little bit, and
 increase memory usage some.
 
 @vindex gnus-keep-backlog
-If you set @code{gnus-keep-backlog} to a number @var{n}, Gnus will store
+If you set @code{gnus-keep-backlog} to a number @var{n}, gnus will store
 at most @var{n} old articles in a buffer for later re-fetching.  If this
-variable is non-@code{nil} and is not a number, Gnus will store
+variable is non-@code{nil} and is not a number, gnus will store
 @emph{all} read articles, which means that your Emacs will grow without
 bound before exploding and taking your machine down with you.  I put
 that in there just to keep y'all on your toes.
@@ -5516,7 +5379,7 @@ approach (uudecoding, unsharing) you should use @code{gnus-uu}
 (@pxref{Decoding Articles}).
 
 @vindex gnus-save-all-headers
-If @code{gnus-save-all-headers} is non-@code{nil}, Gnus will not delete
+If @code{gnus-save-all-headers} is non-@code{nil}, gnus will not delete
 unwanted headers before saving the article.
 
 @vindex gnus-saved-headers
@@ -5602,7 +5465,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 six ready-made
+gnus do what you want it to.  You can use any of the four ready-made
 functions below, or you can create your own.
 
 @table @code
@@ -5685,11 +5548,11 @@ File names like @file{~/News/alt.andrea-dworkin}.
 @end table
 
 @vindex gnus-split-methods
-You can have Gnus suggest where to save articles by plonking a regexp into
-the @code{gnus-split-methods} alist.  For instance, if you would like to
-save articles related to Gnus in the file @file{gnus-stuff}, and articles
-related to VM in @code{vm-stuff}, you could set this variable to something
-like:
+You can have gnus suggest where to save articles by plonking a regexp
+into the @code{gnus-split-methods} alist.  For instance, if you would
+like to save articles related to gnus in the file @file{gnus-stuff}, and
+articles related to VM in @code{vm-stuff}, you could set this variable
+to something like:
 
 @lisp
 (("^Subject:.*gnus\\|^Newsgroups:.*gnus" "gnus-stuff")
@@ -5714,9 +5577,8 @@ then be prompted for what you really want to use as a name, with file
 name completion over the results from applying this variable.
 
 This variable is @code{((gnus-article-archive-name))} by default, which
-means that Gnus will look at the articles it saves for an
-@code{Archive-name} line and use that as a suggestion for the file
-name.
+means that gnus will look at the articles it saves for an
+@code{Archive-name} line and use that as a suggestion for the file name.
 
 Here's an example function to clean up file names somewhat.  If you have
 lots of mail groups called things like
@@ -5795,7 +5657,7 @@ Gnus guesses what articles are in the series according to the following
 simplish rule: The subjects must be (nearly) identical, except for the
 last two numbers of the line.  (Spaces are largely ignored, however.)
 
-For example: If you choose a subject called @samp{cat.gif (2/3)}, Gnus
+For example: If you choose a subject called @samp{cat.gif (2/3)}, gnus
 will find all the articles that match the regexp @samp{^cat.gif
 ([0-9]+/[0-9]+).*$}.
 
@@ -5843,7 +5705,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}.
@@ -5981,7 +5843,7 @@ say something like:
 
 @item gnus-uu-user-view-rules-end
 @vindex gnus-uu-user-view-rules-end
-This variable is consulted if Gnus couldn't make any matches from the
+This variable is consulted if gnus couldn't make any matches from the
 user and default view rules.
 
 @item gnus-uu-user-archive-rules
@@ -6136,15 +5998,15 @@ Default is @code{t}.
 @cindex viewing files
 @cindex pseudo-articles
 
-After decoding, if the file is some sort of archive, Gnus will attempt
+After decoding, if the file is some sort of archive, gnus will attempt
 to unpack the archive and see if any of the files in the archive can be
 viewed.  For instance, if you have a gzipped tar file @file{pics.tar.gz}
-containing the files @file{pic1.jpg} and @file{pic2.gif}, Gnus will
+containing the files @file{pic1.jpg} and @file{pic2.gif}, gnus will
 uncompress and de-tar the main file, and then view the two pictures.
 This unpacking process is recursive, so if the archive contains archives
 of archives, it'll all be unpacked.
 
-Finally, Gnus will normally insert a @dfn{pseudo-article} for each
+Finally, gnus will normally insert a @dfn{pseudo-article} for each
 extracted file into the summary buffer.  If you go to these
 ``articles'', you will be prompted for a command to run (usually Gnus
 will make a suggestion), and then the command will be run.
@@ -6196,25 +6058,17 @@ these articles easier.
 
 @node Article Highlighting
 @subsection Article Highlighting
-@cindex highlighting
+@cindex highlight
 
 Not only do you want your article buffer to look like fruit salad, but
-you want it to look like technicolor fruit salad.  
+you want it to look like technicolor fruit salad.
 
 @table @kbd
 
 @item W H a
 @kindex W H a (Summary)
 @findex gnus-article-highlight
-@findex gnus-article-maybe-highlight
-Do much highlighting of the current article
-(@code{gnus-article-highlight}).  This function highlights header, cited
-text, the signature, and adds buttons to the body and the head.
-
-Most users would prefer using @code{gnus-article-maybe-highlight} in
-@code{gnus-article-display-hook} (@pxref{Customizing Articles}) instead.
-This is a bit less agressive---it highlights only the headers, the
-signature and adds buttons.
+Highlight the current article (@code{gnus-article-highlight}).
 
 @item W H h
 @kindex W H h (Summary)
@@ -6255,7 +6109,7 @@ Maximum possible length for a citation prefix (default 20).
 @vindex gnus-cite-face-list
 List of faces used for highlighting citations (@pxref{Faces and Fonts}).
 When there are citations from multiple articles in the same message,
-Gnus will try to give each citation from each article its own face.
+gnus will try to give each citation from each article its own face.
 This should make it easier to see who wrote what.
 
 @item gnus-supercite-regexp
@@ -6300,8 +6154,6 @@ default.
 
 @end table
 
-@xref{Customizing Articles} for how to highlight articles automatically.
-
 
 @node Article Fontisizing
 @subsection Article Fontisizing
@@ -6315,9 +6167,9 @@ like @samp{_this_} or @samp{*this*}.  Gnus can make this look nicer by
 running the article through the @kbd{W e}
 (@code{gnus-article-emphasize}) command.
 
-@vindex gnus-emphasis-alist
+@vindex gnus-article-emphasis
 How the emphasis is computed is controlled by the
-@code{gnus-emphasis-alist} variable.  This is an alist where the first
+@code{gnus-article-emphasis} variable.  This is an alist where the first
 element is a regular expression to be matched.  The second is a number
 that says what regular expression grouping is used to find the entire
 emphasized word.  The third is a number that says what regexp grouping
@@ -6354,8 +6206,6 @@ say something like:
 (copy-face 'red 'gnus-emphasis-italic)
 @end lisp
 
-@xref{Customizing Articles} for how to fontize articles automatically.
-
 
 @node Article Hiding
 @subsection Article Hiding
@@ -6369,9 +6219,7 @@ too much cruft in most articles.
 @item W W a
 @kindex W W a (Summary)
 @findex gnus-article-hide
-Do quite a lot of hiding on the article buffer
-(@kbd{gnus-article-hide}).  In particular, this function will hide
-headers, PGP, cited text and the signature.  
+Do maximum hiding on the summary buffer (@kbd{gnus-article-hide}).
 
 @item W W h
 @kindex W W h (Summary)
@@ -6397,22 +6245,7 @@ Signature}.
 @vindex gnus-article-hide-pgp-hook
 Hide @sc{pgp} signatures (@code{gnus-article-hide-pgp}).  The
 @code{gnus-article-hide-pgp-hook} hook will be run after a @sc{pgp}
-signature has been hidden.  For example, to automatically verify
-articles that have signatures in them do:
-@lisp
-;;; Hide pgp cruft if any.
-
-(add-hook 'gnus-article-display-hook 'gnus-article-hide-pgp)
-
-;;; After hiding pgp, verify the message;
-;;; only happens if pgp signature is found.
-
-(add-hook 'gnus-article-hide-pgp-hook
-          (lambda ()
-            (save-excursion
-              (set-buffer gnus-original-article-buffer)
-              (mc-verify))))
-@end lisp
+signature has been hidden.
 
 @item W W P
 @kindex W W P (Summary)
@@ -6428,24 +6261,30 @@ customizing the hiding:
 
 @table @code
 
-@item gnus-cited-opened-text-button-line-format
-@itemx gnus-cited-closed-text-button-line-format
-@vindex gnus-cited-closed-text-button-line-format
-@vindex gnus-cited-opened-text-button-line-format
+@item gnus-cite-hide-percentage
+@vindex gnus-cite-hide-percentage
+If the cited text is of a bigger percentage than this variable (default
+50), hide the cited text.
+
+@item gnus-cite-hide-absolute
+@vindex gnus-cite-hide-absolute
+The cited text must have at least this length (default 10) before it
+is hidden.
+
+@item gnus-cited-text-button-line-format
+@vindex gnus-cited-text-button-line-format
 Gnus adds buttons to show where the cited text has been hidden, and to
 allow toggle hiding the text.  The format of the variable is specified
-by these format-like variable (@pxref{Formatting Variables}).  These
+by this format-like variable (@pxref{Formatting Variables}).  These
 specs are valid:
 
 @table @samp
 @item b
-Starting point of the hidden text.
+Start point of the hidden text.
 @item e
-Ending point of the hidden text.
+End point of the hidden text.
 @item l
-Number of characters in the hidden region.
-@item n
-Number of lines of hidden text.
+Length of the hidden text.
 @end table
 
 @item gnus-cited-lines-visible
@@ -6454,25 +6293,6 @@ The number of lines at the beginning of the cited text to leave shown.
 
 @end table
 
-@item W W C-c
-@kindex W W C-c (Summary)
-@findex gnus-article-hide-citation-maybe
-
-Hide citation (@code{gnus-article-hide-citation-maybe}) depending on the
-following two variables:
-
-@table @code
-@item gnus-cite-hide-percentage
-@vindex gnus-cite-hide-percentage
-If the cited text is of a bigger percentage than this variable (default
-50), hide the cited text.
-
-@item gnus-cite-hide-absolute
-@vindex gnus-cite-hide-absolute
-The cited text must have at least this length (default 10) before it
-is hidden.
-@end table
-
 @item W W C
 @kindex W W C (Summary)
 @findex gnus-article-hide-citation-in-followups
@@ -6490,9 +6310,6 @@ hidden.  If you give a positive prefix, they will always hide.
 Also @pxref{Article Highlighting} for further variables for
 citation customization.
 
-@xref{Customizing Articles} for how to hide article elements
-automatically.
-
 
 @node Article Washing
 @subsection Article Washing
@@ -6544,7 +6361,7 @@ Toggle whether to display all headers in the article buffer permanently
 @item W m
 @kindex W m (Summary)
 @findex gnus-summary-toggle-mime
-Toggle whether to run the article through @sc{mime} before displaying
+Toggle whether to display the article as @sc{mime} message
 (@code{gnus-summary-toggle-mime}).
 
 @item W o
@@ -6555,13 +6372,7 @@ Treat overstrike (@code{gnus-article-treat-overstrike}).
 @item W d
 @kindex W d (Summary)
 @findex gnus-article-treat-dumbquotes
-@vindex gnus-article-dumbquotes-map
-@cindex Smartquotes
-@cindex M******** sm*rtq**t*s
-@cindex Latin 1
-Treat M******** sm*rtq**t*s according to
-@code{gnus-article-dumbquotes-map}
-(@code{gnus-article-treat-dumbquotes}).
+Treat M******** sm*rtq**t*s (@code{gnus-article-treat-dumbquotes}).
 
 @item W w
 @kindex W w (Summary)
@@ -6576,20 +6387,9 @@ when filling.
 @item W c
 @kindex W c (Summary)
 @findex gnus-article-remove-cr
-Translate CRLF pairs (i. e., @samp{^M}s on the end of the lines) into LF
-(this takes care of DOS line endings), and then translate any remaining
-CRs into LF (this takes care of Mac line endings)
+Remove CR (i. e., @samp{^M}s on the end of the lines)
 (@code{gnus-article-remove-cr}).
 
-@item W q
-@kindex W q (Summary)
-@findex gnus-article-de-quoted-unreadable
-Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).
-Quoted-Printable is one common @sc{mime} encoding employed when sending
-non-ASCII (i. e., 8-bit) articles.  It typically makes strings like
-@samp{déjà vu} look like @samp{d=E9j=E0 vu}, which doesn't look very
-readable to me.
-
 @item W f
 @kindex W f (Summary)
 @cindex x-face
@@ -6622,7 +6422,7 @@ last.
 @kindex W b (Summary)
 @findex gnus-article-add-buttons
 Add clickable buttons to the article (@code{gnus-article-add-buttons}).
-@xref{Article Buttons}.
+@xref{Article Buttons}
 
 @item W B
 @kindex W B (Summary)
@@ -6669,8 +6469,6 @@ body (@code{gnus-article-strip-leading-space}).
 
 @end table
 
-@xref{Customizing Articles} for how to wash articles automatically.
-
 
 @node Article Buttons
 @subsection Article Buttons
@@ -6755,8 +6553,6 @@ Face used when the mouse cursor is over a button.
 
 @end table
 
-@xref{Customizing Articles} for how to buttonize articles automatically.
-
 
 @node Article Date
 @subsection Article Date
@@ -6824,9 +6620,6 @@ that the article was posted in 1854.  Although something like that is
 
 @end table
 
-@xref{Customizing Articles} for how to display the date in your
-preferred format automatically.
-
 
 @node Article Signature
 @subsection Article Signature
@@ -6890,54 +6683,6 @@ the regular expression @samp{^---*Forwarded article}, then it isn't a
 signature after all.
 
 
-@node MIME Commands
-@section MIME Commands
-@cindex MIME decoding
-
-@table @kbd
-@item W M w
-@kindex W M w (Summary)
-Decode RFC2047-encoded words in the article headers
-(@code{gnus-article-decode-mime-words}).
-
-@item W M c
-@kindex W M c (Summary)
-Decode encoded article bodies as well as charsets
-(@code{gnus-article-decode-charset}).
-
-This command looks in the @code{Content-Type} header to determine the
-charset.  If there is no such header in the article, you can give it a
-prefix, which will prompt for the charset to decode as.  In regional
-groups where people post using some common encoding (but do not include
-MIME headers), you can set the @code{charset} group/topic parameter to
-the required charset (@pxref{Group Parameters}).
-
-@item W M v
-@kindex W M v (Summary)
-View all the @sc{mime} parts in the current article
-(@code{gnus-mime-view-all-parts}). 
-
-@end table
-
-Relevant variables:
-
-@table @code
-@item gnus-ignored-mime-types
-@vindex gnus-ignored-mime-types
-This is a list of regexps.  @sc{mime} types that match a regexp from
-this list will be completely ignored by Gnus.  The default value is
-@code{nil}.
-
-To have all Vcards be ignored, you'd say something like this:
-
-@lisp
-(setq gnus-ignored-mime-types
-      '("text/x-vcard"))
-@end lisp
-
-@end table
-
-
 @node Article Commands
 @section Article Commands
 
@@ -7024,9 +6769,9 @@ summary buffer, point will just move to this article.
 
 If given a positive numerical prefix, fetch that many articles back into
 the ancestry.  If given a negative numerical prefix, fetch just that
-ancestor.  So if you say @kbd{3 ^}, Gnus will fetch the parent, the
+ancestor.  So if you say @kbd{3 ^}, gnus will fetch the parent, the
 grandparent and the grandgrandparent of the current article.  If you say
-@kbd{-3 ^}, Gnus will only fetch the grandgrandparent of the current
+@kbd{-3 ^}, gnus will only fetch the grandgrandparent of the current
 article.
 
 @item A R (Summary)
@@ -7090,7 +6835,7 @@ consuming.)  @code{nnmh} does not support this at all.
 @section Alternative Approaches
 
 Different people like to read news using different methods.  This being
-Gnus, we offer a small selection of minor modes for the summary buffers.
+gnus, we offer a small selection of minor modes for the summary buffers.
 
 @menu
 * Pick and Read::               First mark articles and then read them.
@@ -7119,13 +6864,10 @@ Here are the available keystrokes when using pick mode:
 @table @kbd
 @item .
 @kindex . (Pick)
-@findex gnus-pick-article-or-thread
-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
-thread or article and pick it.  (The line number is normally displayed
+@findex gnus-summary-mark-as-processable
+Pick the article on the current line
+(@code{gnus-summary-mark-as-processable}).  If given a numerical prefix,
+go to that article and pick it.  (The line number is normally displayed
 at the beginning of the summary pick lines.)
 
 @item SPACE
@@ -7136,13 +6878,53 @@ at the end of the buffer, start reading the picked articles.
 
 @item u
 @kindex u (Pick)
-@findex gnus-pick-unmark-article-or-thread.
-Unpick the thread or article
-(@code{gnus-pick-unmark-article-or-thread}).  If the variable
-@code{gnus-thread-hide-subtree} is true, then this key unpicks the
-thread if used at the first article of the thread.  Otherwise it unpicks 
-just the article.  You can give this key a numerical prefix to unpick
-the thread or article at that line.
+@findex gnus-summary-unmark-as-processable
+Unpick the article (@code{gnus-summary-unmark-as-processable}).
+
+@item U
+@kindex U (Pick)
+@findex gnus-summary-unmark-all-processable
+Unpick all articles (@code{gnus-summary-unmark-all-processable}).
+
+@item t
+@kindex t (Pick)
+@findex gnus-uu-mark-thread
+Pick the thread (@code{gnus-uu-mark-thread}).
+
+@item T
+@kindex T (Pick)
+@findex gnus-uu-unmark-thread
+Unpick the thread (@code{gnus-uu-unmark-thread}).
+
+@item r
+@kindex r (Pick)
+@findex gnus-uu-mark-region
+Pick the region (@code{gnus-uu-mark-region}).
+
+@item R
+@kindex R (Pick)
+@findex gnus-uu-unmark-region
+Unpick the region (@code{gnus-uu-unmark-region}).
+
+@item e
+@kindex e (Pick)
+@findex gnus-uu-mark-by-regexp
+Pick articles that match a regexp (@code{gnus-uu-mark-by-regexp}).
+
+@item E
+@kindex E (Pick)
+@findex gnus-uu-unmark-by-regexp
+Unpick articles that match a regexp (@code{gnus-uu-unmark-by-regexp}).
+
+@item b
+@kindex b (Pick)
+@findex gnus-uu-mark-buffer
+Pick the buffer (@code{gnus-uu-mark-buffer}).
+
+@item B
+@kindex B (Pick)
+@findex gnus-uu-unmark-buffer
+Unpick the buffer (@code{gnus-uu-unmark-buffer}).
 
 @item RET
 @kindex RET (Pick)
@@ -7155,11 +6937,6 @@ will still be visible when you are reading.
 
 @end table
 
-All the normal summary mode commands are still available in the
-pick-mode, with the exception of @kbd{u}.  However @kbd{!} is available
-which is mapped to the same function
-@code{gnus-summary-tick-article-forward}.
-
 If this sounds like a good idea to you, you could say:
 
 @lisp
@@ -7209,7 +6986,7 @@ command, when you have turned on this mode
 @cindex trees
 
 @vindex gnus-use-trees
-If you don't like the normal Gnus summary display, you might try setting
+If you don't like the normal gnus summary display, you might try setting
 @code{gnus-use-trees} to @code{t}.  This will create (by default) an
 additional @dfn{tree buffer}.  You can execute all summary mode commands
 in the tree buffer.
@@ -7278,8 +7055,8 @@ nodes to their children.  The default is @code{(?- ?\\ ?|)}.
 
 @item gnus-tree-minimize-window
 @vindex gnus-tree-minimize-window
-If this variable is non-@code{nil}, Gnus will try to keep the tree
-buffer as small as possible to allow more room for the other Gnus
+If this variable is non-@code{nil}, gnus will try to keep the tree
+buffer as small as possible to allow more room for the other gnus
 windows.  If this variable is a number, the tree buffer will never be
 higher than that number.  The default is @code{t}.  Note that if you
 have several windows displayed side-by-side in a frame and the tree
@@ -7411,7 +7188,7 @@ name, a @code{From} header and a @code{Subject} header.
 @item B r
 @kindex B r (Summary)
 @findex gnus-summary-respool-article
-Respool the mail article (@code{gnus-summary-respool-article}).
+Respool the mail article (@code{gnus-summary-move-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.
@@ -7425,7 +7202,7 @@ which means that the current group select method will be used instead.
 Edit the current article (@code{gnus-summary-edit-article}).  To finish
 editing and make the changes permanent, type @kbd{C-c C-c}
 (@kbd{gnus-summary-edit-article-done}).  If you give a prefix to the
-@kbd{C-c C-c} command, Gnus won't re-highlight the article.
+@kbd{C-c C-c} command, gnus won't re-highlight the article.
 
 @item B q
 @kindex B q (Summary)
@@ -7434,12 +7211,6 @@ If you want to re-spool an article, you might be curious as to what group
 the article will end up in before you do the re-spooling.  This command
 will tell you (@code{gnus-summary-respool-query}).
 
-@item B t
-@kindex B t (Summary)
-@findex gnus-summary-respool-trace
-Similarly, this command will display all fancy splitting patterns used
-when repooling, if any (@code{gnus-summary-respool-trace}).
-
 @item B p
 @kindex B p (Summary)
 @findex gnus-summary-article-posted-p
@@ -7458,7 +7229,7 @@ just not have arrived yet.
 
 @vindex gnus-move-split-methods
 @cindex moving articles
-If you move (or copy) articles regularly, you might wish to have Gnus
+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
@@ -7501,18 +7272,13 @@ It is called after the summary buffer has been generated.  You might use
 it to, for instance, highlight lines or modify the look of the buffer in
 some other ungodly manner.  I don't care.
 
-@vindex gnus-summary-prepared-hook
-@item gnus-summary-prepared-hook
-A hook called as the very last thing after the summary buffer has been
-generated.
-
 @vindex gnus-summary-ignore-duplicates
 @item gnus-summary-ignore-duplicates
-When Gnus discovers two articles that have the same @code{Message-ID},
+When gnus discovers two articles that have the same @code{Message-ID},
 it has to do something drastic.  No articles are allowed to have the
 same @code{Message-ID}, but this may happen when reading mail from some
 sources.  Gnus allows you to customize what happens with this variable.
-If it is @code{nil} (which is the default), Gnus will rename the
+If it is @code{nil} (which is the default), gnus will rename the
 @code{Message-ID} (for display purposes only) and display the article as
 any other article.  If this variable is @code{t}, it won't display the
 article---it'll be as if it never existed.
@@ -7553,7 +7319,7 @@ keystrokes (@code{gnus-summary-describe-briefly}).
 @item H i
 @kindex H i (Summary)
 @findex gnus-info-find-node
-Go to the Gnus info node (@code{gnus-info-find-node}).
+Go to the gnus info node (@code{gnus-info-find-node}).
 @end table
 
 
@@ -7761,7 +7527,7 @@ group.
 @vindex gnus-kill-summary-on-exit
 If you're in the habit of exiting groups, and then changing your mind
 about it, you might set @code{gnus-kill-summary-on-exit} to @code{nil}.
-If you do that, Gnus won't kill the summary buffer when you exit it.
+If you do that, gnus won't kill the summary buffer when you exit it.
 (Quelle surprise!)  Instead it will change the name of the buffer to
 something like @samp{*Dead Summary ... *} and install a minor mode
 called @code{gnus-dead-summary-mode}.  Now, if you switch back to this
@@ -7838,11 +7604,10 @@ For an alternative approach, @pxref{Duplicate Suppression}.
 @node Duplicate Suppression
 @section Duplicate Suppression
 
-By default, Gnus tries to make sure that you don't have to read the same
+By default, gnus tries to make sure that you don't have to read the same
 article more than once by utilizing the crossposting mechanism
 (@pxref{Crosspost Handling}).  However, that simple and efficient
-approach may not work satisfactory for some users for various
-reasons.
+approach may not work satisfactory for some users for various reasons.
 
 @enumerate
 @item
@@ -7889,7 +7654,7 @@ If non-@code{nil}, suppress duplicates.
 @vindex gnus-save-duplicate-list
 If non-@code{nil}, save the list of duplicates to a file.  This will
 make startup and shutdown take longer, so the default is @code{nil}.
-However, this means that only duplicate articles read in a single Gnus
+However, this means that only duplicate articles read in a single gnus
 session are suppressed.
 
 @item gnus-duplicate-list-length
@@ -7903,11 +7668,11 @@ The name of the file to store the duplicate suppression list in.  The
 default is @file{~/News/suppression}.
 @end table
 
-If you have a tendency to stop and start Gnus often, setting
+If you have a tendency to stop and start gnus often, setting
 @code{gnus-save-duplicate-list} to @code{t} is probably a good idea.  If
-you leave Gnus running for weeks on end, you may have it @code{nil}.  On
+you leave gnus running for weeks on end, you may have it @code{nil}.  On
 the other hand, saving the list makes startup and shutdown much slower,
-so that means that if you stop and start Gnus often, you should set
+so that means that if you stop and start gnus often, you should set
 @code{gnus-save-duplicate-list} to @code{nil}.  Uhm.  I'll leave this up
 to you to figure out, I think.
 
@@ -7918,11 +7683,11 @@ to you to figure out, I think.
 
 The articles are displayed in the article buffer, of which there is only
 one.  All the summary buffers share the same article buffer unless you
-tell Gnus otherwise.
+tell gnus otherwise.
 
 @menu
 * Hiding Headers::        Deciding what headers should be displayed.
-* Using MIME::            Pushing articles through @sc{mime} before reading them.
+* Using MIME::            Pushing to mime articles as @sc{mime} messages.
 * Customizing Articles::  Tailoring the look of the articles.
 * Article Keymap::        Keystrokes available in the article buffer.
 * Misc Article::          Other stuff.
@@ -7974,8 +7739,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} line
-and the @code{Xref} line, you might say:
+For instance, if you just want to get rid of the @code{References} field
+and the @code{Xref} field, you might say:
 
 @lisp
 (setq gnus-ignored-headers "^References:\\|^Xref:")
@@ -8003,7 +7768,8 @@ and then the subject, you might say something like:
 @end lisp
 
 Any headers that are to remain visible, but are not listed in this
-variable, will be displayed in random order after all the headers listed in this variable.
+variable, will be displayed in random order after all the headers listed
+in this variable.
 
 @findex gnus-article-hide-boring-headers
 @vindex gnus-article-display-hook
@@ -8013,21 +7779,21 @@ You can hide further boring headers by entering
 @code{gnus-article-display-hook}.  What this function does depends on
 the @code{gnus-boring-article-headers} variable.  It's a list, but this
 list doesn't actually contain header names.  Instead is lists various
-@dfn{boring conditions} that Gnus can check and remove from sight.
+@dfn{boring conditions} that gnus can check and remove from sight.
 
 These conditions are:
 @table @code
 @item empty
 Remove all empty headers.
+@item newsgroups
+Remove the @code{Newsgroups} header if it only contains the current group
+name.
 @item followup-to
 Remove the @code{Followup-To} header if it is identical to the
 @code{Newsgroups} header.
 @item reply-to
 Remove the @code{Reply-To} header if it lists the same address as the
 @code{From} header.
-@item newsgroups
-Remove the @code{Newsgroups} header if it only contains the current group
-name.
 @item date
 Remove the @code{Date} header if the article is less than three days
 old.
@@ -8037,11 +7803,11 @@ Remove the @code{To} header if it is very long.
 Remove all @code{To} headers if there are more than one.
 @end table
 
-To include the four three elements, you could say something like;
+To include the four first elements, you could say something like;
 
 @lisp
 (setq gnus-boring-article-headers
-      '(empty followup-to reply-to))
+      '(empty newsgroups followup-to reply-to))
 @end lisp
 
 This is also the default value for this variable.
@@ -8061,60 +7827,42 @@ while all newsreaders die of fear.
 of the characters, and it also makes it possible to embed pictures and
 other naughty stuff in innocent-looking articles.
 
-@vindex gnus-display-mime-function
-@findex gnus-display-mime
-Gnus pushes @sc{mime} articles through @code{gnus-display-mime-function} 
-to display the @sc{mime} parts.  This is @code{gnus-display-mime} by
-default, which creates a bundle of clickable buttons that can be used to 
-display, save and manipulate the @sc{mime} objects.  
-
-The following commands are available when you have placed point over a
-@sc{mime} button:
-
-@table @kbd
-@findex gnus-article-press-button
-@item RET (Article)
-@itemx BUTTON-2 (Article)
-Toggle displaying of the @sc{mime} object
-(@code{gnus-article-press-button}).
-
-@findex gnus-mime-view-part
-@item M-RET (Article)
-@itemx v (Article)
-Prompt for a method, and then view the @sc{mime} object using this
-method (@code{gnus-mime-view-part}).
-
-@findex gnus-mime-save-part
-@item o (Article)
-Prompt for a file name, and then save the @sc{mime} object
-(@code{gnus-mime-save-part}).
-
-@findex gnus-mime-copy-part
-@item c (Article)
-Copy the @sc{mime} object to a fresh buffer and display this buffer
-(@code{gnus-mime-copy-part}).
-
-@findex gnus-mime-pipe-part
-@item | (Article)
-Output the @sc{mime} object to a process (@code{gnus-mime-pipe-part}).
-@end table
-
-Gnus will display some @sc{mime} objects automatically.  The way Gnus
-determines which parts to do this with is described in the Emacs MIME
-manual.  
-
-It might be best to just use the toggling functions from the article
-buffer to avoid getting nasty surprises.  (For instance, you enter the
-group @samp{alt.sing-a-long} and, before you know it, @sc{mime} has
-decoded the sound file in the article and some horrible sing-a-long song
-comes screaming out your speakers, and you can't find the volume button,
-because there isn't one, and people are starting to look at you, and you
-try to stop the program, but you can't, and you can't find the program
-to control the volume, and everybody else in the room suddenly decides
-to look at you disdainfully, and you'll feel rather stupid.)
+@vindex gnus-show-mime
+@vindex gnus-article-display-method-for-mime
+@vindex gnus-strict-mime
+@findex gnus-article-display-mime-message
+Gnus handles @sc{mime} by pushing the articles through
+@code{gnus-article-display-method-for-mime}, which is
+@code{gnus-article-display-mime-message} by default.  This function
+calls the SEMI MIME-View program to actually do the work.  For more
+information on SEMI MIME-View, see its manual page (however it is not
+existed yet, sorry).
+
+Set @code{gnus-show-mime} to @code{t} if you want to use
+@sc{mime} all the time.  However, if @code{gnus-strict-mime} is
+non-@code{nil}, the @sc{mime} method will only be used if there are
+@sc{mime} headers in the article.  If you have @code{gnus-show-mime}
+set, then you'll see some unfortunate display glitches in the article
+buffer.  These can't be avoided.
+
+In GNUS or Gnus, it might be best to just use the toggling functions
+from the summary buffer to avoid getting nasty surprises. (For instance,
+you enter the group @samp{alt.sing-a-long} and, before you know it,
+@sc{mime} has decoded the sound file in the article and some horrible
+sing-a-long song comes screaming out your speakers, and you can't find
+the volume button, because there isn't one, and people are starting to
+look at you, and you try to stop the program, but you can't, and you
+can't find the program to control the volume, and everybody else in the
+room suddenly decides to look at you disdainfully, and you'll feel
+rather stupid.)
 
 Any similarity to real events and people is purely coincidental.  Ahem.
 
+To avoid such kind of situation, gnus stops to use
+@code{metamail-buffer}.  So now, you can set @code{gnus-show-mime} to
+non-@code{nil} every-time, then you can push button in the article
+buffer when there are nobody else.
+
 
 @node Customizing Articles
 @section Customizing Articles
@@ -8126,12 +7874,9 @@ been inserted into the article buffer.  It is meant to handle all
 treatment of the article before it is displayed.
 
 @findex gnus-article-maybe-highlight
-@findex gnus-article-maybe-hide-headers
-By default this hook just contains
-@code{gnus-article-maybe-hide-headers},
-@code{gnus-hide-boring-headers}, @code{gnus-article-treat-overstrike},
-and @code{gnus-article-maybe-highlight} (and under XEmacs,
-@code{gnus-article-display-x-face}), but there are thousands, nay
+By default this hook just contains @code{gnus-article-hide-headers},
+@code{gnus-article-treat-overstrike}, and
+@code{gnus-article-maybe-highlight}, but there are thousands, nay
 millions, of functions you can put in this hook.  For an overview of
 functions @pxref{Article Highlighting}, @pxref{Article Hiding},
 @pxref{Article Washing}, @pxref{Article Buttons} and @pxref{Article
@@ -8218,12 +7963,6 @@ If non-@code{nil}, use the same article buffer for all the groups.
 (This is the default.)  If @code{nil}, each group will have its own
 article buffer.
 
-@vindex gnus-article-decode-hook
-@item gnus-article-decode-hook
-@cindex MIME
-Hook used to decode @sc{mime} articles.  The default value is
-@code{(article-decode-charset article-decode-encoded-words)}
-
 @vindex gnus-article-prepare-hook
 @item gnus-article-prepare-hook
 This hook is called right after the article has been inserted into the
@@ -8291,15 +8030,14 @@ 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.
+to make gnus try to post using the foreign server.
 
 @menu
 * 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.
+* Archived Messages::    Where gnus stores the messages you've sent.
 * Drafts::               Postponing messages and rejected messages.
 * Rejected Articles::    What happens if the server doesn't like your article?
 @end menu
@@ -8341,7 +8079,7 @@ user whether to re-send the mail.  (This is primarily useful when
 dealing with @sc{soup} packets and the like where one is apt to send the
 same packet multiple times.)  This variable says what the name of this
 history file is.  It is @file{~/News/Sent-Message-IDs} by default.  Set
-this variable to @code{nil} if you don't want Gnus to keep a history
+this variable to @code{nil} if you don't want gnus to keep a history
 file.
 
 @item gnus-sent-message-ids-length
@@ -8362,7 +8100,7 @@ Thank you for asking.  I hate you.
 
 @vindex gnus-post-method
 
-It can be quite complicated.  Normally, Gnus will use the same native
+It can be quite complicated.  Normally, gnus will use the same native
 server.  However.  If your native server doesn't allow posting, just
 reading, you probably want to use some other server to post your
 (extremely intelligent and fabulously interesting) articles.  You can
@@ -8378,10 +8116,10 @@ can use a non-zero prefix to the @kbd{C-c C-c} command to force using
 the ``current'' server for posting.
 
 If you give a zero prefix (i.e., @kbd{C-u 0 C-c C-c}) to that command,
-Gnus will prompt you for what method to use for posting.
+gnus will prompt you for what method to use for posting.
 
 You can also set @code{gnus-post-method} to a list of select methods.
-If that's the case, Gnus will always prompt you for what method to use
+If that's the case, gnus will always prompt you for what method to use
 for posting.
 
 Finally, if you want to always post using the same select method as
@@ -8436,7 +8174,7 @@ store the messages.  If you want to disable this completely, the
 is the default.
 
 @vindex gnus-message-archive-method
-@code{gnus-message-archive-method} says what virtual server Gnus is to
+@code{gnus-message-archive-method} says what virtual server gnus is to
 use to store sent messages.  The default is:
 
 @lisp
@@ -8525,7 +8263,7 @@ Now, when you send a message off, it will be stored in the appropriate
 group.  (If you want to disable storing for just one particular message,
 you can just remove the @code{Gcc} header that has been inserted.)  The
 archive group will appear in the group buffer the next time you start
-Gnus, or the next time you press @kbd{F} in the group buffer.  You can
+gnus, or the next time you press @kbd{F} in the group buffer.  You can
 enter it and read the articles in it just like you'd read any other
 group.  If the group gets really big and annoying, you can simply rename
 if (using @kbd{G r} in the group buffer) to something
@@ -8555,96 +8293,83 @@ but the latter is the preferred method.
 @end table
 
 
-@node Posting Styles
-@section Posting Styles
-@cindex posting styles
-@cindex styles
-
-All them variables, they make my head swim.
-
-So what if you want a different @code{Organization} and signature based
-on what groups you post to?  And you post both from your home machine
-and your work machine, and you want different @code{From} lines, and so
-on?
-
-@vindex gnus-posting-styles
-One way to do stuff like that is to write clever hooks that change the
-variables you need to have changed.  That's a bit boring, so somebody
-came up with the bright idea of letting the user specify these things in
-a handy alist.  Here's an example of a @code{gnus-posting-styles}
-variable:
-
-@lisp
-((".*"
-  (signature "Peace and happiness")
-  (organization "What me?"))
- ("^comp"
-  (signature "Death to everybody"))
- ("comp.emacs.i-love-it"
-  (organization "Emacs is it")))
-@end lisp
-
-As you might surmise from this example, this alist consists of several
-@dfn{styles}.  Each style will be applicable if the first element
-``matches'', in some form or other.  The entire alist will be iterated
-over, from the beginning towards the end, and each match will be
-applied, which means that attributes in later styles that match override
-the same attributes in earlier matching styles.  So
-@samp{comp.programming.literate} will have the @samp{Death to everybody}
-signature and the @samp{What me?} @code{Organization} header.
-
-The first element in each style is called the @code{match}.  If it's a
-string, then Gnus will try to regexp match it against the group name.
-If it's a function symbol, that function will be called with no
-arguments.  If it's a variable symbol, then the variable will be
-referenced.  If it's a list, then that list will be @code{eval}ed.  In
-any case, if this returns a non-@code{nil} value, then the style is said
-to @dfn{match}.
-
-Each style may contain a arbitrary amount of @dfn{attributes}.  Each
-attribute consists of a @var{(name . value)} pair.  The 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.
-
-The attribute value can be a string (used verbatim), a function (the
-return value will be used), a variable (its value will be used) or a
-list (it will be @code{eval}ed and the return value will be used).
-
-If you wish to check whether the message you are about to compose is
-meant to be a news article or a mail message, you can check the values
-of the two dynamically bound variables @code{message-this-is-news} and
-@code{message-this-is-mail}.
-
-@vindex message-this-is-mail
-@vindex message-this-is-news
-
-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-this-is-news
-         (signature my-news-signature))
-        (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"))))
-@end lisp
-
+@c @node Posting Styles
+@c @section Posting Styles
+@c @cindex posting styles
+@c @cindex styles
+@c
+@c All them variables, they make my head swim.
+@c
+@c So what if you want a different @code{Organization} and signature based
+@c on what groups you post to?  And you post both from your home machine
+@c and your work machine, and you want different @code{From} lines, and so
+@c on?
+@c
+@c @vindex gnus-posting-styles
+@c One way to do stuff like that is to write clever hooks that change the
+@c variables you need to have changed.  That's a bit boring, so somebody
+@c came up with the bright idea of letting the user specify these things in
+@c a handy alist.  Here's an example of a @code{gnus-posting-styles}
+@c variable:
+@c
+@c @lisp
+@c ((".*"
+@c   (signature . "Peace and happiness")
+@c   (organization . "What me?"))
+@c  ("^comp"
+@c   (signature . "Death to everybody"))
+@c  ("comp.emacs.i-love-it"
+@c   (organization . "Emacs is it")))
+@c @end lisp
+@c
+@c As you might surmise from this example, this alist consists of several
+@c @dfn{styles}.  Each style will be applicable if the first element
+@c ``matches'', in some form or other.  The entire alist will be iterated
+@c over, from the beginning towards the end, and each match will be
+@c applied, which means that attributes in later styles that match override
+@c the same attributes in earlier matching styles.  So
+@c @samp{comp.programming.literate} will have the @samp{Death to everybody}
+@c signature and the @samp{What me?} @code{Organization} header.
+@c
+@c The first element in each style is called the @code{match}.  If it's a
+@c string, then Gnus will try to regexp match it against the group name.
+@c If it's a function symbol, that function will be called with no
+@c arguments.  If it's a variable symbol, then the variable will be
+@c referenced.  If it's a list, then that list will be @code{eval}ed.  In
+@c any case, if this returns a non-@code{nil} value, then the style is said
+@c to @dfn{match}.
+@c
+@c Each style may contain a arbitrary amount of @dfn{attributes}.  Each
+@c attribute consists of a @var{(name . value)} pair.  The attribute name
+@c can be one of @code{signature}, @code{organization} or @code{from}.  The
+@c attribute name can also be a string.  In that case, this will be used as
+@c a header name, and the value will be inserted in the headers of the
+@c article.
+@c
+@c The attribute value can be a string (used verbatim), a function (the
+@c return value will be used), a variable (its value will be used) or a
+@c list (it will be @code{eval}ed and the return value will be used).
+@c
+@c So here's a new example:
+@c
+@c @lisp
+@c (setq gnus-posting-styles
+@c       '((".*"
+@c           (signature . "~/.signature")
+@c           (from . "user@@foo (user)")
+@c           ("X-Home-Page" . (getenv "WWW_HOME"))
+@c           (organization . "People's Front Against MWM"))
+@c         ("^rec.humor"
+@c           (signature . my-funny-signature-randomizer))
+@c         ((equal (system-name) "gnarly")
+@c           (signature . my-quote-randomizer))
+@c         (posting-from-work-p
+@c           (signature . "~/.work-signature")
+@c           (from . "user@@bar.foo (user)")
+@c           (organization . "Important Work, Inc"))
+@c         ("^nn.+:"
+@c           (signature . "~/.mail-signature"))))
+@c @end lisp
 
 @node Drafts
 @section Drafts
@@ -8657,7 +8382,7 @@ the message you are writing so that you can continue editing it some
 other day, and send it when you feel its finished.
 
 Well, don't worry about it.  Whenever you start composing a message of
-some sort using the Gnus mail and post commands, the buffer you get will
+some sort using the gnus mail and post commands, the buffer you get will
 automatically associate to an article in a special @dfn{draft} group.
 If you save the buffer the normal way (@kbd{C-x C-s}, for instance), the
 article will be saved there.  (Auto-save files also go to the draft
@@ -8727,10 +8452,10 @@ doesn't like your face.  Perhaps it just feels miserable.  Perhaps
 @emph{there be demons}.  Perhaps you have included too much cited text.
 Perhaps the disk is full.  Perhaps the server is down.
 
-These situations are, of course, totally beyond the control of Gnus.
+These situations are, of course, totally beyond the control of gnus.
 (Gnus, of course, loves the way you look, always feels great, has angels
 fluttering around inside of it, doesn't care about how much cited text
-you include, never runs full and never goes down.)  So Gnus saves these
+you include, never runs full and never goes down.)  So gnus saves these
 articles until some later time when the server feels better.
 
 The rejected articles will automatically be put in a special draft group
@@ -9217,11 +8942,10 @@ 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.)
+valid tokens include @samp{machine}, @samp{login}, @samp{password}, 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.)
 
 @end enumerate
 
@@ -9243,16 +8967,6 @@ user will be prompted for the password.  The latter also has the
 @samp{force} tag) is to not send authinfo to the @var{nntp} server
 until the @var{nntp} server asks for it.
 
-You can also add @samp{default} lines that will apply to all servers
-that don't have matching @samp{machine} lines.
-
-@example
-default force yes
-@end example
-
-This will force sending @samp{AUTHINFO} commands to all servers not
-previously mentioned.
-
 Remember to not leave the @file{~/.authinfo} file world-readable.
 
 @item nntp-server-action-alist
@@ -9287,17 +9001,17 @@ waiting for reply, and then reads all the replies.  This is controlled
 by the @code{nntp-maximum-request} variable, and is 400 by default.  If
 your network is buggy, you should set this to 1.
 
-@item nntp-connection-timeout
-@vindex nntp-connection-timeout
-If you have lots of foreign @code{nntp} groups that you connect to
-regularly, you're sure to have problems with @sc{nntp} servers not
-responding properly, or being too loaded to reply within reasonable
-time.  This is can lead to awkward problems, which can be helped
-somewhat by setting @code{nntp-connection-timeout}.  This is an integer
-that says how many seconds the @code{nntp} backend should wait for a
-connection before giving up.  If it is @code{nil}, which is the default,
-no timeouts are done.
-
+@c @item nntp-connection-timeout
+@c @vindex nntp-connection-timeout
+@c If you have lots of foreign @code{nntp} groups that you connect to
+@c regularly, you're sure to have problems with @sc{nntp} servers not
+@c responding properly, or being too loaded to reply within reasonable
+@c time.  This is can lead to awkward problems, which can be helped
+@c somewhat by setting @code{nntp-connection-timeout}.  This is an integer
+@c that says how many seconds the @code{nntp} backend should wait for a
+@c connection before giving up.  If it is @code{nil}, which is the default,
+@c no timeouts are done.
+@c 
 @c @item nntp-command-timeout
 @c @vindex nntp-command-timeout
 @c @cindex PPP connections
@@ -9653,9 +9367,13 @@ contain @samp{\\1} forms, like the ones used by @code{replace-match} to
 insert sub-expressions from the matched text.  For instance:
 
 @lisp
-("list.\\1" "From:.* \\(.*\\)-list@@majordomo.com")
+("list.\\1" "From:.*\\(.*\\)-list@@majordomo.com")
 @end lisp
 
+If the first element is the special symbol @code{junk}, then messages
+that match the regexp will disappear into the aether.  Use with
+extreme caution.
+
 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-@code{nil} value if it thinks that the
@@ -9772,18 +9490,21 @@ file, which is @file{~/.gnus-crash-box} by default.  If this file
 already exists, it will always be read (and incorporated) before any
 other spool files.
 
+@vindex nnmail-prepare-incoming-hook
+@item nnmail-prepare-incoming-hook
+This is run in a buffer that holds all the new incoming mail, and can be
+used for, well, anything, really.
+
 @vindex nnmail-split-hook
 @item nnmail-split-hook
-@findex article-decode-encoded-words
+@findex article-decode-rfc1522
 @findex RFC1522 decoding
-@findex RFC2047 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
 is discarded after the splitting has been done, and no changes performed
-in the buffer will show up in any files.
-@code{gnus-article-decode-encoded-words} is one likely function to add
-to this hook.
+in the buffer will show up in any files.  @code{gnus-article-decode-rfc1522}
+is one likely function to add to this hook.
 
 @vindex nnmail-pre-get-new-mail-hook
 @vindex nnmail-post-get-new-mail-hook
@@ -9924,7 +9645,7 @@ be stored in one or more groups.
 
 @item
 @code{junk}: If the split is the symbol @code{junk}, then don't save
-this message. Use with extreme caution.
+this message.
 
 @item
 @var{(: function arg1 arg2 ...)}:  If the split is a list, and the first
@@ -9932,9 +9653,6 @@ element is @code{:}, then the second element will be called as a
 function with @var{args} given as arguments.  The function should return
 a SPLIT.
 
-@item
-@code{nil}: If the split is @code{nil}, it is ignored.
-
 @end enumerate
 
 In these splits, @var{FIELD} must match a complete field name.
@@ -9959,12 +9677,12 @@ information in the headers (i.e., do @code{replace-match}-like
 substitutions in the group names), you can say things like:
 
 @example
-(any "debian-\\b\\(\\w+\\)@@lists.debian.org" "mail.debian.\\1")
+(any "debian-\\(\\w*\\)@@lists.debian.org" "mail.debian.\\1")
 @end example
 
 If the string contains the element @samp{\&}, then the previously
-matched string will be substituted.  Similarly, the elements @samp{\\1}
-up to @samp{\\9} will be substituted with the text matched by the
+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.
 
 
@@ -10256,8 +9974,7 @@ various functions that can be put in these hooks.
 @item nnmail-prepare-incoming-hook
 @vindex nnmail-prepare-incoming-hook
 This hook is called before doing anything with the mail and is meant for
-grand, sweeping gestures.  It is called in a buffer that contains all
-the new, incoming mail.  Functions to be used include:
+grand, sweeping gestures.  Functions to be used include:
 
 @table @code
 @item nnheader-ms-strip-cr
@@ -10608,31 +10325,8 @@ The name of the group descriptions file.  @xref{Newsgroups File Format}.
 @item nnfolder-get-new-mail
 @vindex nnfolder-get-new-mail
 If non-@code{nil}, @code{nnfolder} will read incoming mail.
-
-@item nnfolder-save-buffer-hook
-@vindex nnfolder-save-buffer-hook
-@cindex backup files
-Hook run before saving the folders.  Note that Emacs does the normal
-backup renaming of files even with the @code{nnfolder} buffers.  If you
-wish to switch this off, you could say something like the following in
-your @file{.emacs} file:
-
-@lisp
-(defun turn-off-backup ()
-  (set (make-local-variable 'backup-inhibited) t))
-
-(add-hook 'nnfolder-save-buffer-hook 'turn-off-backup)
-@end lisp
-
-@item nnfolder-delete-mail-hook
-@vindex nnfolder-delete-mail-hook
-Hook run in a buffer narrowed to the message that is to be deleted.
-This function can be used to copy the message to somewhere else, or to
-extract some information from it before removing it.  
-
 @end table
 
-
 @findex nnfolder-generate-active-file
 @kindex M-x nnfolder-generate-active-file
 If you have lots of @code{nnfolder}-like files you'd like to read with
@@ -10781,9 +10475,6 @@ The rnews batch transport format.
 @item forward
 Forwarded articles.
 
-@item mime-parts
-MIME multipart messages, besides digests.
-
 @item mime-digest
 @cindex digest
 @cindex MIME digest
@@ -10826,9 +10517,8 @@ Virtual server variables:
 @vindex nndoc-article-type
 This should be one of @code{mbox}, @code{babyl}, @code{digest},
 @code{news}, @code{rnews}, @code{mmdf}, @code{forward}, @code{rfc934},
-@code{rfc822-forward}, @code{mime-parts}, @code{mime-digest},
-@code{standard-digest}, @code{slack-digest}, @code{clari-briefs} or
-@code{guess}.
+@code{rfc822-forward}, @code{mime-digest}, @code{standard-digest},
+@code{slack-digest}, @code{clari-briefs} or @code{guess}.
 
 @item nndoc-post-type
 @vindex nndoc-post-type
@@ -11282,7 +10972,7 @@ 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
+providers if they were to do this---their @emph{raison d'\e$BsU\e(Bre} 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.
@@ -11431,7 +11121,6 @@ groups.
 @subsection Virtual Groups
 @cindex nnvirtual
 @cindex virtual groups
-@cindex merging groups
 
 An @dfn{nnvirtual group} is really nothing more than a collection of
 other groups.
@@ -11465,7 +11154,7 @@ If you would like to read @samp{soc.motss} both from a server in Japan
 and a server in Norway, you could use the following as the group regexp:
 
 @example
-"^nntp\\+server\\.jp:soc\\.motss$\\|^nntp\\+server\\.no:soc\\.motss$"
+"^nntp\\+some\\.server\\.jp:soc\\.motss$\\|^nntp\\+some\\.server\\.no:soc\\.motss$"
 @end example
 
 (Remember, though, that if you're creating the group with @kbd{G m}, you
@@ -11494,18 +11183,6 @@ common.  If that's the case, you should set this variable to @code{t}.
 Or you can just tap @code{M-g} on the virtual group every time before
 you enter it---it'll have much the same effect.
 
-@code{nnvirtual} can have both mail and news groups as component groups.
-When responding to articles in @code{nnvirtual} groups, @code{nnvirtual}
-has to ask the backend of the component group the article comes from
-whether it is a news or mail backend.  However, when you do a @kbd{^},
-there is typically no sure way for the component backend to know this,
-and in that case @code{nnvirtual} tells Gnus that the article came from a
-not-news backend.  (Just to be on the safe side.)
-
-@kbd{C-c C-t} in the message buffer will insert the @code{Newsgroups}
-line from the article you respond to in these cases.
-
-
 
 @node Kibozed Groups
 @subsection Kibozed Groups
@@ -11613,7 +11290,6 @@ Of course, to use it as such, you have to learn a few new commands.
 * 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.
 @end menu
 
 
@@ -11676,7 +11352,7 @@ Agent (@pxref{Server Agent Commands}).  This will typically be only the
 primary select method, which is listed on the bottom in the buffer.
 
 @item
-Decide on download policy.  @xref{Agent Categories}.
+Decide on download policy.  @xref{Agent Categories}
 
 @item
 Uhm... that's it.
@@ -11718,21 +11394,11 @@ are eligible for downloading; and
 @item
 a score rule which (generally) gives you a finer granularity when
 deciding what articles to download.  (Note that this @dfn{download
-score} is not necessarily related to normal scores.)
+score} is wholly unrelated 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
-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.
-
-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
-operators sprinkled in between.
+A predicate consists of predicates with logical operators sprinkled in
+between.
 
 Perhaps some examples are in order.
 
@@ -11800,184 +11466,14 @@ to know:  The functions are called with no parameters, but the
 @code{gnus-headers} and @code{gnus-score} dynamic variables are bound to
 useful values.
 
-For example, you could decide that you don't want to download articles
-that were posted more than a certain number of days ago (e.g. posted
-more than @code{gnus-agent-expire-days} ago) you might write a function
-something along the lines of the following:
-
-@lisp
-(defun my-article-old-p ()
-  "Say whether an article is old."
-  (< (time-to-day (date-to-time (mail-header-date gnus-headers)))
-     (- (time-to-day (current-time)) gnus-agent-expire-days)))
-@end lisp
-
-with the predicate then defined as:
-
-@lisp
-(not my-article-old-p)
-@end lisp
-
-or you could append your predicate to the predefined
-@code{gnus-category-predicate-alist} in your @file{~/.gnus.el} or
-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
-  (append gnus-category-predicate-alist
-        '((old . my-article-old-p))))
-@end lisp
-
-and simply specify your predicate as:
-
-@lisp
-(not old)
-@end lisp
-
-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
-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
-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:
-
-@lisp
-(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.
-
-The equivalent of the longer example from above would be:
-
-@lisp
-(agent-predicate or high (and (not low) (not long)))
-@end lisp
-
-The outer parenthesis required in the category specification are not
-entered here as, not being in dotted pair notation, the value of the
-predicate is assumed to be a list. 
-
 Now, the syntax of the download score is the same as the syntax of
 normal score files, except that all elements that require actually
 seeing the article itself are verboten.  This means that only the
-following headers can be scored on: @code{Subject}, @code{From},
-@code{Date}, @code{Message-ID}, @code{References}, @code{Chars},
-@code{Lines}, and @code{Xref}.
-
-As with predicates, the specification of the @code{download score rule}
-to use in respect of a group can be in either the category definition if
-it's to be applicable to all groups in therein, or a group's parameters
-if it's to be specific to that group.
-
-In both of these places the @code{download score rule} can take one of
-three forms:
-
-@enumerate
-@item 
-Score rule
-
-This has the same syntax as a normal gnus score file except only a
-subset of scoring keywords are available as mentioned above.
-
-example:
-
-@itemize @bullet
-@item 
-Category specification
-
-@lisp
-(("from"        
-       ("Lars Ingebrigtsen" 1000000 nil s))
-("lines"
-       (500 -100 nil <)))
-@end lisp
-
-@item 
-Group Parameter specification
-
-@lisp
-(agent-score ("from"        
-                   ("Lars Ingebrigtsen" 1000000 nil s))
-             ("lines"
-                   (500 -100 nil <)))
-@end lisp
-
-Again, note the omission of the outermost parenthesis here.
-@end itemize
-
-@item 
-Agent score file
-
-These score files must *only* contain the permitted scoring keywords
-stated above.
-
-example:
-
-@itemize @bullet
-@item 
-Category specification
-
-@lisp
-("~/News/agent.SCORE")
-@end lisp
-
-or perhaps
-
-@lisp
-("~/News/agent.SCORE" "~/News/agent.group.SCORE")
-@end lisp
-
-@item 
-Group Parameter specification
-
-@lisp
-(agent-score "~/News/agent.SCORE")
-@end lisp
-
-Additional score files can be specified as above. Need I say anything
-about parenthesis.
-@end itemize
-
-@item 
-Use @code{normal} score files
-
-If you dont want to maintain two sets of scoring rules for a group, and
-your desired @code{downloading} criteria for a group are the same as your
-@code{reading} criteria then you can tell the agent to refer to your
-@code{normal} score files when deciding what to download.
+following headers can be scored on: @code{From}, @code{Subject},
+@code{Date}, @code{Xref}, @code{Lines}, @code{Chars}, @code{Message-ID},
+and @code{References}.
 
-These directives in either the category definition or a group's
-parameters will cause the agent to read in all the applicable score
-files for a group, *filtering out* those those sections that do not
-relate to one of the permitted subset of scoring keywords.
 
-@itemize @bullet
-@item 
-Category Specification
-
-@lisp
-file
-@end lisp
-
-@item 
-Group Parameter specification
-
-@lisp
-(agent-score . file)
-@end lisp
-@end itemize
-@end enumerate
 @node The Category Buffer
 @subsubsection The Category Buffer
 
@@ -12044,7 +11540,7 @@ Hook run in category buffers.
 @item gnus-category-line-format
 @vindex gnus-category-line-format
 Format of the lines in the category buffer (@pxref{Formatting
-Variables}).  Valid elements are:
+Variables}).  Legal elements are:
 
 @table @samp
 @item c
@@ -12128,7 +11624,7 @@ Fetch all eligible articles in all groups
 @kindex J S (Agent Group)
 @findex gnus-group-send-drafts
 Send all sendable messages in the draft group
-(@code{gnus-agent-fetch-session}).  @xref{Drafts}.
+(@code{gnus-agent-fetch-session}).  @xref{Drafts}
 
 @item J a
 @kindex J a (Agent Group)
@@ -12154,7 +11650,7 @@ Mark the article for downloading (@code{gnus-agent-mark-article}).
 Remove the downloading mark from the article
 (@code{gnus-agent-unmark-article}).
 
-@item @@ 
+@item @@
 @kindex @@ (Agent Summary)
 @findex gnus-agent-toggle-mark
 Toggle whether to download the article (@code{gnus-agent-toggle-mark}).
@@ -12189,16 +11685,16 @@ Agent (@code{gnus-agent-remove-server}).
 @node Agent Expiry
 @subsection Agent Expiry
 
-@vindex gnus-agent-expire-days
-@findex gnus-agent-expire
-@kindex M-x gnus-agent-expire
+@vindex gnus-agent-expiry-days
+@findex gnus-agent-expiry
+@kindex M-x gnus-agent-expiry
 @cindex Agent expiry
 @cindex Gnus Agent expiry
 @cindex expiry
 
 @code{nnagent} doesn't handle expiry.  Instead, there's a special
-@code{gnus-agent-expire} command that will expire all read articles that
-are older than @code{gnus-agent-expire-days} days.  It can be run
+@code{gnus-agent-expiry} command that will expire all read articles that
+are older than @code{gnus-agent-expiry-days} days.  It can be run
 whenever you feel that you're running out of space.  It's not
 particularly fast or efficient, and it's not a particularly good idea to
 interrupt it (with @kbd{C-g} or anything else) once you've started it.
@@ -12310,29 +11806,6 @@ emacs -batch -l ~/.emacs -f gnus-agent-batch >/dev/null
 @end example
 
 
-@node Agent Caveats
-@subsection Agent Caveats
-
-The Gnus Agent doesn't seem to work like most other offline
-newsreaders.  Here are some common questions that some imaginary people
-may ask:
-
-@table @dfn
-@item If I read an article while plugged, do they get entered into the
-Agent?
-
-@strong{No.}
-
-@item If I read an article while plugged, and the article already exists
-in the Agent, will it get downloaded once more?
-
-@strong{Yes.}
-
-@end table
-
-In short, when Gnus is unplugged, it only looks into the locally stored
-articles; when it's plugged, it only talks to your ISP.
-
 
 @node Scoring
 @chapter Scoring
@@ -12501,8 +11974,8 @@ Score on the subject line.
 @item x
 Score on the Xref line---i.e., the cross-posting line.
 
-@item r
-Score on the References line.
+@item t
+Score on thread---the References line.
 
 @item d
 Score on the date.
@@ -12521,10 +11994,6 @@ Score on the body.
 
 @item h
 Score on the head.
-
-@item t
-Score on thead.
-
 @end table
 
 @item
@@ -12639,7 +12108,7 @@ You can do scoring from the command line by saying something like:
 @findex gnus-batch-score
 @cindex batch scoring
 @example
-$ emacs -batch -l ~/.emacs -l ~/.gnus.el -f gnus-batch-score
+$ emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score
 @end example
 
 
@@ -13250,12 +12719,6 @@ If @code{gnus-adaptive-word-minimum} is set to a number, the adaptive
 word scoring process will never bring down the score of an article to
 below this number.  The default is @code{nil}.
 
-@vindex gnus-adaptive-word-no-group-words
-If @code{gnus-adaptive-word-no-group-words} is set to @code{t}, gnus
-won't adaptively word score any of the words in the group name.  Useful
-for groups like @samp{comp.editors.emacs}, where most of the subject
-lines contain the word @samp{emacs}.
-
 After using this scheme for a while, it might be nice to write a
 @code{gnus-psychoanalyze-user} command to go through the rules and see
 what words you like and what words you don't like.  Or perhaps not.
@@ -13323,22 +12786,12 @@ So, if you want to use just a single score file, you could say:
 If you want to use @file{gnu.SCORE} for all @samp{gnu} groups and
 @file{rec.SCORE} for all @samp{rec} groups (and so on), you can say:
 
-@findex gnus-hierarchial-home-score-file
 @lisp
 (setq gnus-home-score-file
       'gnus-hierarchial-home-score-file)
 @end lisp
 
 This is a ready-made function provided for your convenience.
-Other functions include
-
-@table @code
-@item gnus-current-home-score-file
-@findex gnus-current-home-score-file
-Return the ``current'' regular score file.  This will make scoring
-commands add entry to the ``innermost'' matching score file.
-
-@end table
 
 If you want to have one score file for the @samp{emacs} groups and
 another for the @samp{comp} groups, while letting all other groups use
@@ -13916,7 +13369,7 @@ then this operator will return @code{false}.
 
 @item !
 @itemx not
-@itemx Â¬
+@itemx \e(I,\e(B
 This logical operator only takes a single argument.  It returns the
 logical negation of the value of its argument.
 
@@ -14046,20 +13499,18 @@ use them in any sensible way.
 
 @vindex gnus-decay-scores
 @findex gnus-decay-score
-@vindex gnus-decay-score-function
+@vindex gnus-score-decay-function
 Gnus provides a mechanism for decaying scores to help with this problem.
 When score files are loaded and @code{gnus-decay-scores} is
 non-@code{nil}, Gnus will run the score files through the decaying
 mechanism thereby lowering the scores of all non-permanent score rules.
-The decay itself if performed by the @code{gnus-decay-score-function}
+The decay itself if performed by the @code{gnus-score-decay-function}
 function, which is @code{gnus-decay-score} by default.  Here's the
 definition of that function:
 
 @lisp
 (defun gnus-decay-score (score)
-  "Decay SCORE.
-This is done according to `gnus-score-decay-constant'
-and `gnus-score-decay-scale'."
+  "Decay SCORE according to `gnus-score-decay-constant' and `gnus-score-decay-scale'."
   (floor
    (- score
       (* (if (< score 0) 1 -1)
@@ -14417,15 +13868,6 @@ and so on.  Create as many faces as you wish.  The same goes for the
 @code{mouse-face} specs---you can say @samp{%3(hello%)} to have
 @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},
-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
-@code{balloon-help-mode} for more information on this.
-
 Here's an alternative recipe for the group buffer:
 
 @lisp
@@ -14464,9 +13906,6 @@ If @code{gnus-use-full-window} non-@code{nil}, Gnus will delete all
 other windows and occupy the entire Emacs screen by itself.  It is
 @code{t} by default.
 
-Setting this variable to @code{nil} kinda works, but there are
-glitches.  Use at your own peril.
-
 @vindex gnus-buffer-configuration
 @code{gnus-buffer-configuration} describes how much space each Gnus
 buffer should be given.  Here's an excerpt of this variable:
@@ -14685,11 +14124,6 @@ won't change the window configuration.  If you always want to force the
 ``right'' window configuration, you can set
 @code{gnus-always-force-window-configuration} to non-@code{nil}.
 
-If you're using tree displays (@pxref{Tree Display}), and the tree
-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.
-
 
 @node Faces and Fonts
 @section Faces and Fonts
@@ -14790,8 +14224,7 @@ Do highlights in the group buffer.
 @item summary-highlight
 Do highlights in the summary buffer.
 @item article-highlight
-Do highlights according to @code{gnus-article-display-hook} in the
-article buffer.
+Do highlights in the article buffer.
 @item highlight
 Turn on highlighting in all buffers.
 @item group-menu
@@ -15296,12 +14729,12 @@ in either monochrome @code{XBM} format or color @code{XPM} and
 @vindex gnus-picons-piconsearch-url
 If you have a permanent connection to the Internet you can use Steve
 Kinzler's Picons Search engine by setting
-@code{gnus-picons-piconsearch-url} to the string @*
+@code{gnus-picons-piconsearch-url} to the string
 @file{http://www.cs.indiana.edu/picons/search.html}.
 
 @vindex gnus-picons-database
 Otherwise you need a local copy of his database.  For instructions on
-obtaining and installing the picons databases, point your Web browser at @*
+obtaining and installing the picons databases, point your Web browser at
 @file{http://www.cs.indiana.edu/picons/ftp/index.html}.  Gnus expects
 picons to be installed into a location pointed to by
 @code{gnus-picons-database}.
@@ -15333,10 +14766,8 @@ To enable displaying picons, simply put the following line in your
 
 @lisp
 (setq gnus-use-picons t)
-(add-hook 'gnus-article-display-hook
-          'gnus-article-display-picons t)
-(add-hook 'gnus-article-display-hook
-          'gnus-picons-article-display-x-face)
+(add-hook 'gnus-article-display-hook 'gnus-article-display-picons t)
+(add-hook 'gnus-article-display-hook 'gnus-picons-article-display-x-face)
 @end lisp
 
 and make sure @code{gnus-picons-database} points to the directory
@@ -15345,8 +14776,7 @@ containing the Picons databases.
 Alternatively if you want to use the web piconsearch engine add this:
 
 @lisp
-(setq gnus-picons-piconsearch-url
-      "http://www.cs.indiana.edu:800/piconsearch")
+(setq gnus-picons-piconsearch-url "http://www.cs.indiana.edu:800/piconsearch")
 @end lisp
 
 
@@ -15642,7 +15072,7 @@ foreground and background color of the splash page glyph.
 @item gnus-xmas-logo-color-style
 @vindex gnus-xmas-logo-color-style
 This is the key used to look up the color in the alist described above.
-Valid values include @code{flame}, @code{pine}, @code{moss},
+Legal values include @code{flame}, @code{pine}, @code{moss},
 @code{irish}, @code{sky}, @code{tin}, @code{velvet}, @code{grape},
 @code{labia}, @code{berry}, @code{neutral}, and @code{september}.
 
@@ -15762,7 +15192,7 @@ each unsolicited commercial email---at your leisure.
 
 If you are also a lazy net citizen, you will probably prefer complaining
 automatically with the @file{gnus-junk.el} package, available FOR FREE
-at @* @file{<URL:http://stud2.tuwien.ac.at/~e9426626/gnus-junk.html>}.
+at @file{<URL:http://stud2.tuwien.ac.at/~e9426626/gnus-junk.html>}.
 Since most e-mail spam is sent automatically, this may reconcile the
 cosmic balance somewhat.
 
@@ -15789,7 +15219,7 @@ Most Gnus storage path variables will be initialized from this variable,
 which defaults to the @samp{SAVEDIR} environment variable, or
 @file{~/News/} if that variable isn't set.
 
-Note that Gnus is mostly loaded when the @file{.gnus.el} file is read.
+Note that gnus is mostly loaded when the @file{.gnus.el} file is read.
 This means that other directory variables that are initialized from this
 variable won't be set properly if you set this variable in
 @file{.gnus.el}.  Set this variable in @file{.emacs} instead.
@@ -15907,7 +15337,7 @@ but at the common table.@*
 * 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.
+* A Programmers Guide to Gnus::    Rilly, rilly technical stuff.
 * Emacs for Heathens::             A short introduction to Emacsian terms.
 * Frequently Asked Questions::     A question-and-answer session.
 @end menu
@@ -15946,10 +15376,7 @@ In May 1996 the next Gnus generation (aka. ``September Gnus'' (after 99
 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.
+January 25th 1997 (after 84 releases) as ``Gnus 5.4''.
 
 If you happen upon a version of Gnus that has a prefixed name --
 ``(ding) Gnus'', ``September Gnus'', ``Red Gnus'', ``Quassia Gnus'' --
@@ -16093,8 +15520,8 @@ We do have some breaches to this one.
 @table @emph
 
 @item MIME
-Gnus does not yet fully handle MIME, and this standard-to-be seems to
-think that MIME is the bees' knees, so we have major breakage here.
+Gnus does no MIME handling, and this standard-to-be seems to think that
+MIME is the bees' knees, so we have major breakage here.
 
 @item X-Newsreader
 This is considered to be a ``vanity header'', while I consider it to be
@@ -16104,13 +15531,6 @@ those for posting articles.  I would not have known that if it wasn't
 for the @code{X-Newsreader} header.
 @end table
 
-@item USEFOR
-@cindex USEFOR
-USEFOR is an IETF working group writing a successor to RFC 1036, based
-on Son-of-RFC 1036.  They have produced a number of drafts proposing
-various changes to the format of news articles.  The Gnus towers will
-look into implementing the changes when the draft is accepted as an RFC.
-
 @end table
 
 If you ever notice Gnus acting non-compliant with regards to the texts
@@ -16130,10 +15550,13 @@ Gnus should work on :
 @itemize @bullet
 
 @item
-Emacs 20.2 and up.
+Emacs 19.32 and up.
+
+@item
+XEmacs 19.14 and up.
 
 @item
-XEmacs 20.4 and up.
+Mule versions based on Emacs 19.32 and up.
 
 @end itemize
 
@@ -16180,10 +15603,6 @@ Luis Fernandes---design and graphics.
 Erik Naggum---help, ideas, support, code and stuff.
 
 @item
-Shenghuo Zhu---uudecode.el, mm-uu.el, rfc1843.el and many other things
-connected with @sc{mime} and other types of en/decoding.
-
-@item
 Wes Hardaker---@file{gnus-picon.el} and the manual section on
 @dfn{picons} (@pxref{Picons}).
 
@@ -16233,7 +15652,7 @@ David Moore---rewrite of @file{nnvirtual.el} and many other things.
 Kevin Davidson---came up with the name @dfn{ding}, so blame him.
 
 @item
-François Pinard---many, many interesting and thorough bug reports, as
+Fran\e$BmP\e(Bis Pinard---many, many interesting and thorough bug reports, as
 well as autoconf support.
 
 @end itemize
@@ -16246,7 +15665,7 @@ The following people have contributed many patches and suggestions:
 Christopher Davis,
 Andrew Eskilsson,
 Kai Grossjohann,
-David KÃ¥gedal,
+David K\e$BiH\e(Bedal,
 Richard Pieri,
 Fabrice Popineau,
 Daniel Quinlan,
@@ -16278,7 +15697,6 @@ Joao Cachopo,
 Zlatko Calusic,
 Massimo Campostrini,
 Castor,
-David Charlap,
 Dan Christensen,
 Kevin Christian,
 Michael R. Cook,
@@ -16299,7 +15717,6 @@ Luc Van Eycken,
 Sam Falkner,
 Nelson Jose dos Santos Ferreira,
 Sigbjorn Finne,
-Paul Fisher,
 Decklin Foster,
 Gary D. Foster,
 Paul Franklin,
@@ -16318,7 +15735,7 @@ Marc Horowitz,
 Gunnar Horrigmo,
 Richard Hoskins,
 Brad Howes,
-François Felix Ingrand,
+Fran\e$BmP\e(Bis Felix Ingrand,
 Ishikawa Ichiro, @c Ishikawa
 Lee Iverson,
 Iwamuro Motonori, @c Iwamuro
@@ -16326,16 +15743,13 @@ Rajappa Iyer,
 Andreas Jaeger,
 Randell Jesup,
 Fred Johansen,
-Gareth Jones,
 Simon Josefsson,
 Greg Klanderman,
 Karl Kleinpaste,
 Peter Skov Knudsen,
 Shuhei Kobayashi, @c Kobayashi
-Koseki Yoshinori, @c Koseki
 Thor Kristoffersen,
 Jens Lautenbacher,
-Martin Larose,
 Seokchan Lee, @c Lee
 Carsten Leonhardt,
 James LewisMoss,
@@ -16367,9 +15781,7 @@ William Perry,
 Stephen Peters,
 Jens-Ulrik Holger Petersen,
 Ulrich Pfeifer,
-Matt Pharr,
 John McClary Prevost,
-Bill Pringlemeir,
 Mike Pullen,
 Jim Radford,
 Colin Rafferty,
@@ -16384,7 +15796,6 @@ Jason Rumney,
 Wolfgang Rupprecht,
 Jay Sachs,
 Dewey M. Sasser,
-Conrad Sauerwald,
 Loren Schall,
 Dan Schmidt,
 Ralph Schleicher,
@@ -16409,7 +15820,6 @@ Teddy,
 Chuck Thompson,
 Philippe Troin,
 James Troup,
-Trung Tran-Duc,
 Aaron M. Ucko,
 Aki Vehtari,
 Didier Verna,
@@ -16418,9 +15828,10 @@ Stefan Waldherr,
 Pete Ware,
 Barry A. Warsaw,
 Christoph Wedler,
-Joe Wells
+Joe Wells,
+Katsumi Yamaoka, @c Yamaoka
 and
-Katsumi Yamaoka, @c Yamaoka.
+Shenghuo Zhu. @c Zhu
 
 For a full overview of what each person has done, the ChangeLogs
 included in the Gnus alpha distributions should give ample reading
@@ -16441,7 +15852,7 @@ actually are people who are using Gnus.  Who'd'a thunk it!
 * 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.
+* Quassia Gnus::       Two times two is four, or Gnus 5.6.22.
 @end menu
 
 These lists are, of course, just @emph{short} overviews of the
@@ -16967,8 +16378,7 @@ mail before saving the mail (@pxref{Washing Mail}).
 Emphasized text can be properly fontisized:
 
 @lisp
-(add-hook 'gnus-article-display-hook
-          'gnus-article-emphasize)
+(add-hook 'gnus-article-display-hook 'gnus-article-emphasize)
 @end lisp
 
 @end itemize
@@ -16977,7 +16387,7 @@ Emphasized text can be properly fontisized:
 @node Quassia Gnus
 @subsubsection Quassia Gnus
 
-New features in Gnus 5.6:
+New features in Gnus 5.6.22:
 
 @itemize @bullet
 
@@ -17203,6 +16613,8 @@ articles aren't displayed.
 @item
  nndoc should always allocate unique Message-IDs.
 @item
+ implement gnus-score-thread
+@item
  If there are mail groups the first time you use Gnus, Gnus'll
 make the mail groups killed.
 @item
@@ -17697,7 +17109,7 @@ mail-copies-to: never.
  new group parameter -- `post-to-server' that says to post
 using the current server.  Also a variable to do the same.
 @item
- the slave dribble files should auto-save to the slave file names.
+ the slave dribble files should autosave to the slave file names.
 @item
  a group parameter that says what articles to display on group entry, based
 on article marks.
@@ -17722,7 +17134,7 @@ you could also try to read the archive for that group.  Part of the
 problem is that archives are spread all over the net, unlike FAQs.
 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 @*
+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
 
 
@@ -17743,8 +17155,8 @@ 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$BiS\e(B du bruker `gnus-startup-file' som prefix (FOO) til \92é\81lete
+opp en fil FOO-SERVER, FOO-SERVER.el, FOO-SERVER.eld, kan du la den v\e$BkS\e(Be en
 liste hvor du bruker hvert element i listen som FOO, istedet.  da kunne man
 hatt forskjellige serveres startup-filer forskjellige steder.
 
@@ -17817,8 +17229,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$BkS\e(Be en m\e$BiU\e(Be \92é\81si slikt.  Kanskje en ny variabel?
+`gnus-use-few-score-files'?  S\92é\81kunne score-regler legges til den
 "mest" lokale score-fila.  F. eks. ville no-gruppene betjenes av
 "no.all.SCORE", osv.
 
@@ -18129,6 +17541,9 @@ Mac, MS (etc) characters into ISO 8859-1.
 numbers and match on the age of the article.
 
 @item
+ gnus-cacheable-groups
+
+@item
 @example
 >  > > If so, I've got one gripe: It seems that when I fire up gnus 5.2.25
 >  > > under xemacs-19.14, it's creating a new frame, but is erasing the
@@ -18148,7 +17563,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 \92é\81slette den dersom teksten matcher
 @example
 "\\(This\s+\\)?[^ ]+ has been automatically signed by"
 @end example
@@ -18171,7 +17586,7 @@ home-brewed stuff for better reliability.
  add a way to select which NoCeM type to apply -- spam, troll, etc.
 
 @item
- nndraft-request-group should tally auto-save files.
+ nndraft-request-group should tally autosave files.
 
 @item
  implement nntp-retry-on-break and nntp-command-timeout.
@@ -18273,7 +17688,7 @@ file, for instance.
 
 @item
 With dummy roots, `^' and then selecing the first article
-in any other dummy thread will make Gnus highlight the
+in any other dummy thread will make gnus highlight the
 dummy root instead of the first article.
 
 @item
@@ -18285,54 +17700,6 @@ topics for displaying.
 with unread articles, even if that group is hidden in a topic.
 
 @item
-gnus-posting-styles doesn't work in drafts.
-
-@item
-gnus-summary-limit-include-cached is slow when there are
-many articles in the cache, since it regenerates big parts of the
-summary buffer for each article.
-
-@item
-Implement gnus-batch-brew-soup.
-
-@item
-Group parameters and summary commands for un/subscribing to mailing
-lists. 
-
-@item
-Introduce nnmail-home-directory.
-
-@item
-gnus-fetch-group and friends should exit Gnus when the user
-exits the group.
-
-@item
-The jingle is only played on the second invocation of Gnus.
-
-@item
-Bouncing articles should do MIME.
-
-@item
-Crossposted articles should "inherit" the % or @ mark from the other
-groups it has been crossposted to, or something.  (Agent.)
-
-@item
-`S D r' should allow expansion of aliases.
-
-@item
-If point is on a group that appears multiple times in topics, and
-you press `l', point will move to the first instance of the group.
-
-@item
-The documentation should mention pop3.el, fetchmail, smtpmail and why
-po:username often fails.
-
-@item
-Fetch by Message-ID from dejanews.
-
-<URL:http://search.dejanews.com/msgid.xp?MID=%3C62h9l9$hm4@@basement.replay.com%3E&fmt=raw>
-
-@item
 Solve the halting problem.
 
 @c TODO
@@ -18658,8 +18025,7 @@ useful data is in the summary buffer, anyway.  Set this variable to
 Set this hook to all the available hiding commands:
 @lisp
 (setq gnus-article-display-hook
-      '(gnus-article-hide-headers
-        gnus-article-hide-signature
+      '(gnus-article-hide-headers gnus-article-hide-signature
         gnus-article-hide-citation))
 @end lisp
 
@@ -18799,8 +18165,8 @@ Write to @samp{ding-request@@gnus.org} to subscribe.
 
 
 @page
-@node Gnus Reference Guide
-@section Gnus Reference Guide
+@node A Programmers Guide to Gnus
+@section A Programmer@'s Guide to Gnus
 
 It is my hope that other people will figure out smart stuff that Gnus
 can do, and that other people will write those smart things as well.  To
@@ -18862,19 +18228,6 @@ Takes an unprefixed group name and a select method, and returns the full
 @findex gnus-get-info
 Returns the group info list for @var{group}.
 
-@item gnus-group-unread
-@findex gnus-group-unread
-The number of unread articles in @var{group}, or @code{t} if that is
-unknown.
-
-@item gnus-active
-@findex gnus-active
-The active entry for @var{group}.
-
-@item gnus-set-active
-@findex gnus-set-active
-Set the active entry for @var{group}.
-
 @item gnus-add-current-to-buffer-list
 @findex gnus-add-current-to-buffer-list
 Adds the current buffer to the list of buffers to be killed on Gnus
@@ -18938,7 +18291,7 @@ Takes two parameters, @var{function} and @var{group}.  If the backend
 
 @lisp
 (gnus-check-backend-function "request-scan" "nnml:misc")
-@result{} t
+=> t
 @end lisp
 
 @item gnus-read-method
@@ -19280,48 +18633,6 @@ and @var{article} may be @code{nil}.
 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
-marks (such as read, ticked, expired etc) internally, and store them in
-@code{~/.newsrc.eld}. Some backends (such as 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:
-
-@example
-(RANGE ACTION MARK)
-@end example
-
-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},
-@code{expire}, @code{killed}, @code{dormant}, @code{save},
-@code{download} and @code{unsend}, but your backend should, if possible,
-not limit itself to theese.
-
-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
-@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.
-
-An example action list:
-
-@example
-(((5 12 30) 'del '(tick))
- ((10 . 90) 'add '(read expire))
- ((92 94) 'del '(read)))
-@end example
-
-The function should return a range of articles it wasn't able to set the
-mark on (currently not used for anything).
-
-There should be no result data from this function.
-
 @item (nnchoke-request-update-mark GROUP ARTICLE MARK)
 
 If the user tries to set a mark that the backend doesn't like, this
@@ -19848,12 +19159,12 @@ basically, with each header (ouch) having one slot.
 
 These slots are, in order: @code{number}, @code{subject}, @code{from},
 @code{date}, @code{id}, @code{references}, @code{chars}, @code{lines},
-@code{xref}, and @code{extra}.  There are macros for accessing and
-setting these slots---they all have predictable names beginning with
+@code{xref}.  There are macros for accessing and setting these
+slots---they all have predictable names beginning with
 @code{mail-header-} and @code{mail-header-set-}, respectively.
 
-All these slots contain strings, except the @code{extra} slot, which
-contains an alist of header/value pairs (@pxref{To From Newsgroups}).
+The @code{xref} slot is really a @code{misc} slot.  Any extra info will
+be put in there.
 
 
 @node Ranges
@@ -19947,7 +19258,7 @@ Here are two example group infos; one is a very simple group while the
 second is a more complex one:
 
 @example
-("no.group" 5 ((1 . 54324)))
+("no.group" 5 (1 . 54324))
 
 ("nnml:my.mail" 3 ((1 . 5) 9 (20 . 55))
                 ((tick (15 . 19)) (replied 3 6 (19 . 3)))
index 7ea85d5..adb37c1 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename message
-@settitle Pterodactyl Message 0.44 Manual
+@settitle Message 5.6.22 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -17,7 +17,7 @@
 
 This file documents Message, the Emacs message composition mode.
 
-Copyright (C) 1996,97,98 Free Software Foundation, Inc.
+Copyright (C) 1996 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -42,7 +42,7 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Pterodactyl Message 0.44 Manual
+@title Message 5.6.22 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
@@ -83,9 +83,9 @@ Message mode buffers.
 * Key Index::         List of Message mode keys.
 @end menu
 
-This manual corresponds to Pterodactyl Message 0.44.  Message is
-distributed with the Gnus distribution bearing the same version number
-as this manual.
+This manual corresponds to Message 5.6.22.  Message is distributed with
+the Gnus distribution bearing the same version number as this manual
+has. 
 
 
 @node Interface
@@ -267,31 +267,6 @@ forwarded message will be inserted first in the new mail.
 @vindex message-included-forward-headers
 Regexp matching header lines to be included in forwarded messages.  
 
-@item message-make-forward-subject-function
-@vindex message-make-forward-subject-function
-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.
-
-The provided functions are:
-
-@table @code
-@item message-forward-subject-author-subject
-@findex message-forward-subject-author-subject
-Source of article (author or newsgroup), in brackets followed by the
-subject.
-
-@item message-forward-subject-fwd
-Subject of article with @samp{Fwd:} prepended to it.
-@end table
-
-@item message-wash-forwarded-subjects
-@vindex message-wash-forwarded-subjects
-If this variable is @code{t}, the subjects of forwarded messages have
-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}.
-
 @end table
 
 
@@ -705,7 +680,7 @@ message.
 
 @item message-from-style
 @vindex message-from-style
-Specifies how @code{From} headers should look.  There are four valid
+Specifies how @code{From} headers should look.  There are four legal
 values:
 
 @table @code
@@ -807,7 +782,7 @@ headers.
 @vindex message-required-news-headers
 @code{message-required-news-headers} a list of header symbols.  These
 headers will either be automatically generated, or, if that's
-impossible, they will be prompted for.  The following symbols are valid:
+impossible, they will be prompted for.  The following symbols are legal:
 
 @table @code
 
@@ -913,16 +888,10 @@ Other variables for customizing outgoing news articles:
 
 @item message-syntax-checks
 @vindex message-syntax-checks
-Controls what syntax checks should not be performed on outgoing posts.
-To disable checking of long signatures, for instance, add
-
-@lisp
-(signature . disabled)
-@end lisp
-
-to this list.
-
-Valid checks are:
+If non-@code{nil}, Message will attempt to check the legality of the
+headers, as well as some other stuff, before posting.  You can control
+the granularity of the check by adding or removing elements from this
+list.  Legal elements are:
 
 @table @code
 @item subject-cmsg 
@@ -943,7 +912,7 @@ Check whether the @code{From} header seems nice.
 @cindex long lines
 Check for too long lines.
 @item control-chars
-Check for invalid characters.
+Check for illegal characters.
 @item size
 Check for excessive size.
 @item new-text
@@ -956,8 +925,6 @@ Check whether the article has an @code{Approved} header, which is
 something only moderators should include.
 @item empty
 Check whether the article is empty.
-@item invisible-text
-Check whether there is any invisible text in the buffer.
 @item empty-headers
 Check whether any of the headers are empty.
 @item existing-newsgroups
diff --git a/texi/widget.texi b/texi/widget.texi
deleted file mode 100644 (file)
index b733a78..0000000
+++ /dev/null
@@ -1,1432 +0,0 @@
-\input texinfo.tex
-
-@c %**start of header
-@setfilename widget
-@settitle The Emacs Widget Library
-@iftex
-@afourpaper
-@headings double
-@end iftex
-@c %**end of header
-
-@node Top, Introduction, (dir), (dir)
-@comment  node-name,  next,  previous,  up
-@top The Emacs Widget Library
-
-Version: 1.82
-
-@menu
-* Introduction::                
-* User Interface::              
-* Programming Example::         
-* Setting Up the Buffer::       
-* Basic Types::                 
-* Sexp Types::                  
-* Widget Properties::           
-* Defining New Widgets::        
-* Widget Wishlist.::            
-@end menu
-
-@node  Introduction, User Interface, Top, Top
-@comment  node-name,  next,  previous,  up
-@section Introduction
-
-Most graphical user interface toolkits, such as Motif and XView, provide
-a number of standard user interface controls (sometimes known as
-`widgets' or `gadgets').  Emacs doesn't really support anything like
-this, except for an incredible powerful text ``widget''.  On the other
-hand, Emacs does provide the necessary primitives to implement many
-other widgets within a text buffer.  The @code{widget} package
-simplifies this task.
-
-The basic widgets are:
-
-@table @code
-@item link
-Areas of text with an associated action.  Intended for hypertext links
-embedded in text.
-@item push-button 
-Like link, but intended for stand-alone buttons.
-@item editable-field
-An editable text field.  It can be either variable or fixed length.
-@item menu-choice
-Allows the user to choose one of multiple options from a menu, each
-option is itself a widget.  Only the selected option will be visible in
-the buffer.
-@item radio-button-choice
-Allows the user to choose one of multiple options by pushing radio
-buttons.  The options are implemented as widgets.  All options will be
-visible in the buffer.
-@item item
-A simple constant widget intended to be used in the @code{menu-choice} and
-@code{radio-button-choice} widgets. 
-@item choice-item
-An button item only intended for use in choices.  When pushed, the user
-will be asked to select another option from the choice widget.
-@item toggle
-A simple @samp{on}/@samp{off} switch.
-@item checkbox
-A checkbox (@samp{[ ]}/@samp{[X]}). 
-@item editable-list
-Create an editable list.  The user can insert or delete items in the
-list.  Each list item is itself a widget.
-@end table
-
-Now of what possible use can support for widgets be in a text editor?
-I'm glad you asked.  The answer is that widgets are useful for
-implementing forms.  A @dfn{form} in emacs is a buffer where the user is
-supposed to fill out a number of fields, each of which has a specific
-meaning.  The user is not supposed to change or delete any of the text
-between the fields.  Examples of forms in Emacs are the @file{forms}
-package (of course), the customize buffers, the mail and news compose
-modes, and the @sc{html} form support in the @file{w3} browser.  
-
-The advantages for a programmer of using the @code{widget} package to
-implement forms are:
-
-@enumerate
-@item
-More complex field than just editable text are supported. 
-@item
-You can give the user immediate feedback if he enters invalid data in a
-text field, and sometimes prevent entering invalid data.
-@item 
-You can have fixed sized fields, thus allowing multiple field to be
-lined up in columns.
-@item
-It is simple to query or set the value of a field. 
-@item 
-Editing happens in buffer, not in the mini-buffer.
-@item 
-Packages using the library get a uniform look, making them easier for
-the user to learn.
-@item 
-As support for embedded graphics improve, the widget library will
-extended to support it.  This means that your code using the widget
-library will also use the new graphic features by automatic.
-@end enumerate
-
-In order to minimize the code that is loaded by users who does not
-create any widgets, the code has been split in two files:
-
-@table @file
-@item widget.el
-This will declare the user variables, define the function
-@code{widget-define}, and autoload the function @code{widget-create}. 
-@item wid-edit.el
-Everything else is here, there is no reason to load it explicitly, as
-it will be autoloaded when needed.
-@end table
-
-@node User Interface, Programming Example, Introduction, Top
-@comment  node-name,  next,  previous,  up
-@section User Interface
-
-A form consist of read only text for documentation and some fields,
-where each the fields contain two parts, as tag and a value.  The tags
-are used to identify the fields, so the documentation can refer to the
-foo field, meaning the field tagged with @samp{Foo}. Here is an example
-form:
-
-@example
-Here is some documentation.
-
-Name: @i{My Name}     @strong{Choose}: This option
-Address:  @i{Some Place
-In some City
-Some country.}
-
-See also @b{_other work_} for more information.
-
-Numbers: count to three below
-@b{[INS]} @b{[DEL]} @i{One}
-@b{[INS]} @b{[DEL]} @i{Eh, two?}
-@b{[INS]} @b{[DEL]} @i{Five!}
-@b{[INS]} 
-
-Select multiple:
-
-@b{[X]} This
-@b{[ ]} That
-@b{[X]} Thus
-
-Select one:
-
-@b{(*)} One
-@b{( )} Another One.
-@b{( )} A Final One.
-
-@b{[Apply Form]} @b{[Reset Form]}
-@end example
-
-The top level widgets in is example are tagged @samp{Name},
-@samp{Choose}, @samp{Address}, @samp{_other work_}, @samp{Numbers},
-@samp{Select multiple}, @samp{Select one}, @samp{[Apply Form]}, and
-@samp{[Reset Form]}.  There are basically two thing the user can do within
-a form, namely editing the editable text fields and activating the
-buttons.
-
-@subsection Editable Text Fields
-
-In the example, the value for the @samp{Name} is most likely displayed
-in an editable text field, and so are values for each of the members of
-the @samp{Numbers} list.  All the normal Emacs editing operations are
-available for editing these fields.  The only restriction is that each
-change you make must be contained within a single editable text field.
-For example, capitalizing all text from the middle of one field to the
-middle of another field is prohibited.
-
-Editing text fields are created by the @code{editable-field} widget.
-
-The editing text fields are highlighted with the
-@code{widget-field-face} face, making them easy to find.
-
-@deffn Face widget-field-face
-Face used for other editing fields.
-@end deffn
-
-@subsection Buttons
-
-Some portions of the buffer have an associated @dfn{action}, which can
-be @dfn{activated} by a standard key or mouse command.  These portions
-are called @dfn{buttons}.  The default commands for activating a button
-are:
-
-@table @kbd
-@item @key{RET}
-@deffn Command widget-button-press @var{pos} &optional @var{event}
-Activate the button at @var{pos}, defaulting to point.
-If point is not located on a button, activate the binding in
-@code{widget-global-map} (by default the global map).
-@end deffn
-
-@item mouse-2
-@deffn Command widget-button-click @var{event}
-Activate the button at the location of the mouse pointer.  If the mouse
-pointer is located in an editable text field, activate the binding in
-@code{widget-global-map} (by default the global map).
-@end deffn
-@end table
-
-There are several different kind of buttons, all of which are present in
-the example:
-
-@table @emph
-@item The Option Field Tags.
-When you activate one of these buttons, you will be asked to choose
-between a number of different options.  This is how you edit an option
-field.  Option fields are created by the @code{menu-choice} widget.  In
-the example, @samp{@b{Choose}} is an option field tag.
-@item The @samp{@b{[INS]}} and @samp{@b{[DEL]}} buttons.
-Activating these will insert or delete elements from a editable list.
-The list is created by the @code{editable-list} widget. 
-@item Embedded Buttons.
-The @samp{@b{_other work_}} is an example of an embedded
-button. Embedded buttons are not associated with a fields, but can serve
-any purpose, such as implementing hypertext references.  They are
-usually created by the @code{link} widget.
-@item The @samp{@b{[ ]}} and @samp{@b{[X]}} buttons.
-Activating one of these will convert it to the other.  This is useful
-for implementing multiple-choice fields.  You can create it wit
-@item The @samp{@b{( )}} and @samp{@b{(*)}} buttons.
-Only one radio button in a @code{radio-button-choice} widget can be selected at any
-time.  When you push one of the unselected radio buttons, it will be
-selected and the previous selected radio button will become unselected. 
-@item The @samp{@b{[Apply Form]}} @samp{@b{[Reset Form]}} buttons.
-These are explicit buttons made with the @code{push-button} widget.  The main
-difference from the @code{link} widget is that the buttons are will be
-displayed as GUI buttons when possible.
-enough. 
-@end table
-
-To make them easier to locate, buttons are emphasized in the buffer.  
-
-@deffn Face widget-button-face
-Face used for buttons.
-@end deffn
-
-@defopt widget-mouse-face
-Face used for buttons when the mouse pointer is above it.
-@end defopt
-
-@subsection Navigation
-
-You can use all the normal Emacs commands to move around in a form
-buffer, plus you will have these additional commands:
-
-@table @kbd
-@item @key{TAB}
-@deffn Command widget-forward &optional count
-Move point @var{count} buttons or editing fields forward.
-@end deffn
-@item @key{M-TAB}
-@deffn Command widget-backward &optional count
-Move point @var{count} buttons or editing fields backward.
-@end deffn
-@end table
-
-@node Programming Example, Setting Up the Buffer, User Interface, Top
-@comment  node-name,  next,  previous,  up
-@section Programming Example
-
-Here is the code to implement the user interface example (see @ref{User
-Interface}).
-
-@lisp
-(require 'widget)
-
-(eval-when-compile
-  (require 'wid-edit))
-
-(defvar widget-example-repeat)
-
-(defun widget-example ()
-  "Create the widgets from the Widget manual."
-  (interactive)
-  (switch-to-buffer "*Widget Example*")
-  (kill-all-local-variables)
-  (make-local-variable 'widget-example-repeat)
-  (let ((inhibit-read-only t))
-    (erase-buffer))
-  (widget-insert "Here is some documentation.\n\nName: ")
-  (widget-create 'editable-field
-                :size 13
-                "My Name")
-  (widget-create 'menu-choice
-                :tag "Choose"
-                :value "This"
-                :help-echo "Choose me, please!"
-                :notify (lambda (widget &rest ignore)
-                          (message "%s is a good choice!"
-                                   (widget-value widget)))
-                '(item :tag "This option" :value "This")
-                '(choice-item "That option")
-                '(editable-field :menu-tag "No option" "Thus option"))
-  (widget-insert "Address: ")
-  (widget-create 'editable-field
-                "Some Place\nIn some City\nSome country.")
-  (widget-insert "\nSee also ")
-  (widget-create 'link
-                :notify (lambda (&rest ignore)
-                          (widget-value-set widget-example-repeat 
-                                            '("En" "To" "Tre"))
-                          (widget-setup))
-                "other work")
-  (widget-insert " for more information.\n\nNumbers: count to three below\n")
-  (setq widget-example-repeat
-       (widget-create 'editable-list
-                      :entry-format "%i %d %v"
-                      :notify (lambda (widget &rest ignore)
-                                (let ((old (widget-get widget
-                                                       ':example-length))
-                                      (new (length (widget-value widget))))
-                                  (unless (eq old new)
-                                    (widget-put widget ':example-length new)
-                                    (message "You can count to %d." new))))
-                      :value '("One" "Eh, two?" "Five!")
-                      '(editable-field :value "three")))
-  (widget-insert "\n\nSelect multiple:\n\n")
-  (widget-create 'checkbox t)
-  (widget-insert " This\n")
-  (widget-create 'checkbox nil)
-  (widget-insert " That\n")
-  (widget-create 'checkbox
-                :notify (lambda (&rest ignore) (message "Tickle"))
-                t)
-  (widget-insert " Thus\n\nSelect one:\n\n")
-  (widget-create 'radio-button-choice
-                :value "One"
-                :notify (lambda (widget &rest ignore)
-                          (message "You selected %s"
-                                   (widget-value widget)))
-                '(item "One") '(item "Anthor One.") '(item "A Final One."))
-  (widget-insert "\n")
-  (widget-create 'push-button
-                :notify (lambda (&rest ignore) 
-                          (if (= (length (widget-value widget-example-repeat))
-                                 3)
-                              (message "Congratulation!")
-                            (error "Three was the count!")))
-                "Apply Form")
-  (widget-insert " ")
-  (widget-create 'push-button
-                :notify (lambda (&rest ignore)
-                          (widget-example))
-                "Reset Form")
-  (widget-insert "\n")
-  (use-local-map widget-keymap)
-  (widget-setup))
-@end lisp
-
-@node Setting Up the Buffer, Basic Types, Programming Example, Top
-@comment  node-name,  next,  previous,  up
-@section Setting Up the Buffer
-
-Widgets are created with @code{widget-create}, which returns a
-@dfn{widget} object.  This object can be queried and manipulated by
-other widget functions, until it is deleted with @code{widget-delete}.
-After the widgets have been created, @code{widget-setup} must be called
-to enable them.
-
-@defun widget-create type [ keyword argument ]@dots{}
-Create and return a widget of type @var{type}.
-The syntax for the @var{type} argument is described in @ref{Basic Types}.
-
-The keyword arguments can be used to overwrite the keyword arguments
-that are part of @var{type}.
-@end defun
-
-@defun widget-delete widget
-Delete @var{widget} and remove it from the buffer.
-@end defun
-
-@defun widget-setup 
-Setup a buffer to support widgets. 
-
-This should be called after creating all the widgets and before allowing
-the user to edit them.
-@refill
-@end defun
-
-If you want to insert text outside the widgets in the form, the
-recommended way to do that is with @code{widget-insert}.
-
-@defun widget-insert 
-Insert the arguments, either strings or characters, at point.
-The inserted text will be read only.
-@end defun
-
-There is a standard widget keymap which you might find useful.
-
-@defvr Const widget-keymap
-A keymap with the global keymap as its parent.@*
-@key{TAB} and @kbd{C-@key{TAB}} are bound to @code{widget-forward} and
-@code{widget-backward}, respectively.  @kbd{@key{RET}} and @kbd{mouse-2}
-are bound to @code{widget-button-press} and
-@code{widget-button-}.@refill
-@end defvr
-
-@defvar widget-global-map
-Keymap used by @code{widget-button-press} and @code{widget-button-click}
-when not on a button.  By default this is @code{global-map}.
-@end defvar
-
-@node Basic Types, Sexp Types, Setting Up the Buffer, Top
-@comment  node-name,  next,  previous,  up
-@section Basic Types
-
-The syntax of a type specification is given below:
-
-@example
-NAME ::= (NAME [KEYWORD ARGUMENT]... ARGS)
-     |   NAME
-@end example
-
-Where, @var{name} is a widget name, @var{keyword} is the name of a
-property, @var{argument} is the value of the property, and @var{args}
-are interpreted in a widget specific way.
-
-There following keyword arguments that apply to all widgets:
-
-@table @code
-@item :value
-The initial value for widgets of this type.
-
-@item :format
-This string will be inserted in the buffer when you create a widget.
-The following @samp{%} escapes are available:
-
-@table @samp
-@item %[
-@itemx %]
-The text inside will be marked as a button.
-
-@item %@{
-@itemx %@}
-The text inside will be displayed with the face specified by
-@code{:sample-face}. 
-
-@item %v
-This will be replaces with the buffer representation of the widgets
-value.  What this is depends on the widget type.
-
-@item %d
-Insert the string specified by @code{:doc} here.
-
-@item %h
-Like @samp{%d}, with the following modifications: If the documentation
-string is more than one line, it will add a button which will toggle
-between showing only the first line, and showing the full text.
-Furthermore, if there is no @code{:doc} property in the widget, it will
-instead examine the @code{:documentation-property} property.  If it is a
-lambda expression, it will be called with the widget's value as an
-argument, and the result will be used as the documentation text.
-
-@item %t
-Insert the string specified by @code{:tag} here, or the @code{princ}
-representation of the value if there is no tag.
-
-@item %%
-Insert a literal @samp{%}. 
-@end table
-
-@item :button-face
-Face used to highlight text inside %[ %] in the format.
-
-@item :doc
-The string inserted by the @samp{%d} escape in the format
-string.  
-
-@item :tag
-The string inserted by the @samp{%t} escape in the format
-string.  
-
-@item :tag-glyph
-Name of image to use instead of the string specified by `:tag' on
-Emacsen that supports it.
-
-@item :help-echo
-Message displayed whenever you move to the widget with either
-@code{widget-forward} or @code{widget-backward}.
-
-@item :indent
-An integer indicating the absolute number of spaces to indent children
-of this widget.
-
-@item :offset
-An integer indicating how many extra spaces to add to the widget's
-grandchildren compared to this widget.
-
-@item :extra-offset
-An integer indicating how many extra spaces to add to the widget's
-children compared to this widget.
-
-@item :notify
-A function called each time the widget or a nested widget is changed.
-The function is called with two or three arguments.  The first argument
-is the widget itself, the second argument is the widget that was
-changed, and the third argument is the event leading to the change, if
-any. 
-
-@item :menu-tag
-Tag used in the menu when the widget is used as an option in a
-@code{menu-choice} widget.
-
-@item :menu-tag-get
-Function used for finding the tag when the widget is used as an option
-in a @code{menu-choice} widget.  By default, the tag used will be either the
-@code{:menu-tag} or @code{:tag} property if present, or the @code{princ}
-representation of the @code{:value} property if not.
-
-@item :match
-Should be a function called with two arguments, the widget and a value,
-and returning non-nil if the widget can represent the specified value.
-
-@item :validate
-A function which takes a widget as an argument, and return nil if the
-widgets current value is valid for the widget.  Otherwise, it should
-return the widget containing the invalid data, and set that widgets
-@code{:error} property to a string explaining the error.
-
-@item :tab-order
-Specify the order in which widgets are traversed with
-@code{widget-forward} or @code{widget-backward}.  This is only partially
-implemented.
-
-@enumerate a
-@item
-Widgets with tabbing order @code{-1} are ignored.
-
-@item 
-(Unimplemented) When on a widget with tabbing order @var{n}, go to the
-next widget in the buffer with tabbing order @var{n+1} or @code{nil},
-whichever comes first.
-
-@item
-When on a widget with no tabbing order specified, go to the next widget
-in the buffer with a positive tabbing order, or @code{nil}
-@end enumerate
-
-@item :parent
-The parent of a nested widget (e.g. a @code{menu-choice} item or an
-element of a @code{editable-list} widget).
-
-@item :sibling-args
-This keyword is only used for members of a @code{radio-button-choice} or
-@code{checklist}.  The value should be a list of extra keyword
-arguments, which will be used when creating the @code{radio-button} or
-@code{checkbox} associated with this item.
-
-@end table
-
-@deffn {User Option} widget-glyph-directory
-Directory where glyphs are found.  
-Widget will look here for a file with the same name as specified for the
-image, with either a @samp{.xpm} (if supported) or @samp{.xbm} extension.
-@end deffn
-
-@deffn{User Option} widget-glyph-enable
-If non-nil, allow glyphs to appear on displayes where they are supported.
-@end deffn
-
-
-@menu
-* link::                        
-* url-link::                    
-* info-link::                   
-* push-button::                 
-* editable-field::              
-* text::                        
-* menu-choice::                 
-* radio-button-choice::         
-* item::                        
-* choice-item::                 
-* toggle::                      
-* checkbox::                    
-* checklist::                   
-* editable-list::               
-@end menu
-
-@node link, url-link, Basic Types, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{link} Widget
-
-Syntax:
-
-@example
-TYPE ::= (link [KEYWORD ARGUMENT]...  [ VALUE ])
-@end example
-
-The @var{value}, if present, is used to initialize the @code{:value}
-property.  The value should be a string, which will be inserted in the
-buffer. 
-
-@node url-link, info-link, link, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{url-link} Widget
-
-Syntax:
-
-@example
-TYPE ::= (url-link [KEYWORD ARGUMENT]...  URL)
-@end example
-
-When this link is activated, the @sc{www} browser specified by
-@code{browse-url-browser-function} will be called with @var{url}. 
-
-@node info-link, push-button, url-link, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{info-link} Widget
-
-Syntax:
-
-@example
-TYPE ::= (info-link [KEYWORD ARGUMENT]...  ADDRESS)
-@end example
-
-When this link is activated, the build-in info browser is started on
-@var{address}. 
-
-@node  push-button, editable-field, info-link, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{push-button} Widget
-
-Syntax:
-
-@example
-TYPE ::= (push-button [KEYWORD ARGUMENT]...  [ VALUE ])
-@end example
-
-The @var{value}, if present, is used to initialize the @code{:value}
-property. The value should be a string, which will be inserted in the
-buffer. 
-
-The following extra properties are recognized.
-
-@table @code
-@item :text-format
-The format string used when the push button cannot be displayed
-graphically.  There are two escapes, @code{%s}, which must be present
-exactly once, will be substituted with the tag, and @code{%%} will be
-substituted with a singe @samp{%}.
-@end table
-
-By default the tag will be shown in brackets.
-
-@node editable-field, text, push-button, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{editable-field} Widget
-
-Syntax:
-
-@example
-TYPE ::= (editable-field [KEYWORD ARGUMENT]... [ VALUE ])
-@end example
-
-The @var{value}, if present, is used to initialize the @code{:value}
-property.  The value should be a string, which will be inserted in
-field.  This widget will match all string values.
-
-The following extra properties are recognized.
-
-@table @code
-@item :size
-The width of the editable field.@*
-By default the field will reach to the end of the line.
-
-@item :value-face
-Face used for highlighting the editable field.  Default is
-@code{widget-field-face}. 
-
-@item :secret
-Character used to display the value.  You can set this to e.g. @code{?*}
-if the field contains a password or other secret information.  By
-default, the value is not secret.
-
-@item :valid-regexp
-By default the @code{:validate} function will match the content of the
-field with the value of this attribute.  The default value is @code{""}
-which matches everything.
-
-@item :keymap
-Keymap used in the editable field.  The default value is
-@code{widget-field-keymap}, which allows you to use all the normal
-editing commands, even if the buffers major mode supress some of them.
-Pressing return activates the function specified by @code{:activate}. 
-
-@item :hide-front-space
-@itemx :hide-rear-space
-In order to keep track of the editable field, emacs places an invisible
-space character in front of the field, and for fixed sized fields also
-in the rear end of the field.  For fields that extent to the end of the
-line, the terminating linefeed serves that purpose instead.  
-
-Emacs will try to make the spaces intangible when it is safe to do so.
-Intangible means that the cursor motion commands will skip over the
-character as if it didn't exist.  This is safe to do when the text
-preceding or following the widget cannot possible change during the
-lifetime of the @code{editable-field} widget.  The preferred way to tell
-Emacs this, is to add text to the @code{:format} property around the
-value.  For example @code{:format "Tag: %v "}.  
-
-You can overwrite the internal safety check by setting the
-@code{:hide-front-space} or @code{:hide-rear-space} properties to
-non-nil.  This is not recommended.  For example, @emph{all} text that
-belongs to a widget (i.e. is created from its @code{:format} string) will
-change whenever the widget changes its value.
-
-@end table
-
-@node text, menu-choice, editable-field, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{text} Widget
-
-This is just like @code{editable-field}, but intended for multiline text
-fields.  The default @code{:keymap} is @code{widget-text-keymap}, which
-does not rebind the return key.
-
-@node menu-choice, radio-button-choice, text, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{menu-choice} Widget
-
-Syntax:
-
-@example
-TYPE ::= (menu-choice [KEYWORD ARGUMENT]... TYPE ... )
-@end example
-
-The @var{type} arguments represents each possible choice.  The widgets
-value of will be the value of the chosen @var{type} argument.  This
-widget will match any value that matches at least one of the specified
-@var{type} arguments.
-
-@table @code
-@item :void 
-Widget type used as a fallback when the value does not match any of the
-specified @var{type} arguments.
-
-@item :case-fold
-Set this to nil if you don't want to ignore case when prompting for a
-choice through the minibuffer.
-
-@item :children
-A list whose car is the widget representing the currently chosen type in
-the buffer. 
-
-@item :choice
-The current chosen type
-
-@item :args 
-The list of types. 
-@end table
-
-@node radio-button-choice, item, menu-choice, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{radio-button-choice} Widget
-
-Syntax:
-
-@example
-TYPE ::= (radio-button-choice [KEYWORD ARGUMENT]...  TYPE ... )
-@end example
-
-The @var{type} arguments represents each possible choice.  The widgets
-value of will be the value of the chosen @var{type} argument.  This
-widget will match any value that matches at least one of the specified
-@var{type} arguments.
-
-The following extra properties are recognized.
-
-@table @code
-@item :entry-format
-This string will be inserted for each entry in the list.
-The following @samp{%} escapes are available:
-@table @samp
-@item %v
-Replaced with the buffer representation of the @var{type} widget.
-@item %b
-Replace with the radio button.
-@item %%
-Insert a literal @samp{%}. 
-@end table
-
-@item button-args
-A list of keywords to pass to the radio buttons.  Useful for setting
-e.g. the @samp{:help-echo} for each button.
-
-@item :buttons
-The widgets representing the radio buttons.
-
-@item :children
-The widgets representing each type.
-
-@item :choice
-The current chosen type
-
-@item :args 
-The list of types. 
-@end table
-
-You can add extra radio button items to a @code{radio-button-choice}
-widget after it has been created with the function
-@code{widget-radio-add-item}. 
-
-@defun widget-radio-add-item widget type
-Add to @code{radio-button-choice} widget @var{widget} a new radio button item of type
-@var{type}. 
-@end defun
-
-Please note that such items added after the @code{radio-button-choice}
-widget has been created will @strong{not} be properly destructed when
-you call @code{widget-delete}.
-
-@node item, choice-item, radio-button-choice, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{item} Widget
-
-Syntax:
-
-@example
-ITEM ::= (item [KEYWORD ARGUMENT]... VALUE)
-@end example
-
-The @var{value}, if present, is used to initialize the @code{:value}
-property.  The value should be a string, which will be inserted in the
-buffer.  This widget will only match the specified value.
-
-@node choice-item, toggle, item, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{choice-item} Widget
-
-Syntax:
-
-@example
-ITEM ::= (choice-item [KEYWORD ARGUMENT]... VALUE)
-@end example
-
-The @var{value}, if present, is used to initialize the @code{:value}
-property.  The value should be a string, which will be inserted in the
-buffer as a button.  Activating the button of a @code{choice-item} is
-equivalent to activating the parent widget.  This widget will only match
-the specified value. 
-
-@node toggle, checkbox, choice-item, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{toggle} Widget
-
-Syntax:
-
-@example
-TYPE ::= (toggle [KEYWORD ARGUMENT]...)
-@end example
-
-The widget has two possible states, `on' and `off', which corresponds to
-a @code{t} or @code{nil} value.
-
-The following extra properties are recognized.
-
-@table @code
-@item :on
-String representing the `on' state.  By default the string @samp{on}.
-@item :off 
-String representing the `off' state.  By default the string @samp{off}.
-@item :on-glyph
-Name of a glyph to be used instead of the `:on' text string, on emacsen
-that supports it.
-@item :off-glyph
-Name of a glyph to be used instead of the `:off' text string, on emacsen
-that supports it.
-@end table
-
-@node checkbox, checklist, toggle, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{checkbox} Widget
-
-The widget has two possible states, `selected' and `unselected', which
-corresponds to a @code{t} or @code{nil} value.
-
-Syntax:
-
-@example
-TYPE ::= (checkbox [KEYWORD ARGUMENT]...)
-@end example
-
-@node checklist, editable-list, checkbox, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{checklist} Widget
-
-Syntax:
-
-@example
-TYPE ::= (checklist [KEYWORD ARGUMENT]...  TYPE ... )
-@end example
-
-The @var{type} arguments represents each checklist item.  The widgets
-value of will be a list containing the value of each ticked @var{type}
-argument.  The checklist widget will match a list whose elements all
-matches at least one of the specified @var{type} arguments.
-
-The following extra properties are recognized.
-
-@table @code
-@item :entry-format
-This string will be inserted for each entry in the list.
-The following @samp{%} escapes are available:
-@table @samp
-@item %v
-Replaced with the buffer representation of the @var{type} widget.
-@item %b
-Replace with the checkbox.
-@item %%
-Insert a literal @samp{%}. 
-@end table
-
-@item button-args
-A list of keywords to pass to the checkboxes.  Useful for setting
-e.g. the @samp{:help-echo} for each checkbox.
-
-@item :buttons
-The widgets representing the checkboxes.
-
-@item :children
-The widgets representing each type.
-
-@item :args 
-The list of types. 
-@end table
-
-@node editable-list,  , checklist, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{editable-list} Widget
-
-Syntax:
-
-@example
-TYPE ::= (editable-list [KEYWORD ARGUMENT]... TYPE)
-@end example
-
-The value is a list, where each member represent one widget of type
-@var{type}. 
-
-The following extra properties are recognized.
-
-@table @code
-@item :entry-format
-This string will be inserted for each entry in the list.
-The following @samp{%} escapes are available:
-@table @samp
-@item %v
-This will be replaced with the buffer representation of the @var{type}
-widget.
-@item %i
-Insert the @b{[INS]} button.
-@item %d
-Insert the @b{[DEL]} button.
-@item %%
-Insert a literal @samp{%}. 
-@end table
-
-@item :insert-button-args
-A list of keyword arguments to pass to the insert buttons.
-
-@item :delete-button-args
-A list of keyword arguments to pass to the delete buttons.
-
-@item :append-button-args
-A list of keyword arguments to pass to the trailing insert button.
-
-
-@item :buttons
-The widgets representing the insert and delete buttons.
-
-@item :children
-The widgets representing the elements of the list.
-
-@item :args
-List whose car is the type of the list elements.
-
-@end table
-
-@node Sexp Types, Widget Properties, Basic Types, Top
-@comment
-@section Sexp Types
-
-A number of widgets for editing s-expressions (lisp types) are also
-available.  These basically fall in three categories: @dfn{atoms},
-@dfn{composite types}, and @dfn{generic}.
-
-@menu
-* generic::                     
-* atoms::                       
-* composite::                   
-@end menu
-
-@node generic, atoms, Sexp Types, Sexp Types
-@comment  node-name,  next,  previous,  up
-@subsection The Generic Widget.
-
-The @code{const} and @code{sexp} widgets can contain any lisp
-expression.  In the case of the @code{const} widget the user is
-prohibited from editing edit it, which is mainly useful as a component
-of one of the composite widgets.
-
-The syntax for the generic widgets is
-
-@example
-TYPE ::= (const [KEYWORD ARGUMENT]...  [ VALUE ])
-@end example
-
-The @var{value}, if present, is used to initialize the @code{:value}
-property and can be any s-expression.
-
-@deffn Widget const
-This will display any valid s-expression in an immutable part of the
-buffer. 
-@end deffn
-
-@deffn Widget sexp
-This will allow you to edit any valid s-expression in an editable buffer
-field. 
-
-The @code{sexp} widget takes the same keyword arguments as the
-@code{editable-field} widget.
-@end deffn
-
-@node atoms, composite, generic, Sexp Types
-@comment  node-name,  next,  previous,  up
-@subsection Atomic Sexp Widgets.
-
-The atoms are s-expressions that does not consist of other
-s-expressions.  A string is an atom, while a list is a composite type.
-You can edit the value of an atom with the following widgets.  
-
-The syntax for all the atoms are
-
-@example
-TYPE ::= (NAME [KEYWORD ARGUMENT]...  [ VALUE ])
-@end example
-
-The @var{value}, if present, is used to initialize the @code{:value}
-property and must be an expression of the same type as the widget.
-I.e. the string widget can only be initialized with a string.
-
-All the atom widgets take the same keyword arguments as the @code{editable-field}
-widget.
-
-@deffn Widget string
-Allows you to edit a string in an editable field.
-@end deffn
-
-@deffn Widget file
-Allows you to edit a file name in an editable field.  You you activate
-the tag button, you can edit the file name in the mini-buffer with
-completion. 
-
-Keywords:
-@table @code
-@item :must-match
-If this is set to non-nil, only existing file names will be allowed in
-the minibuffer.
-@end table
-@end deffn
-
-@deffn Widget directory
-Allows you to edit a directory name in an editable field.
-Similar to the @code{file} widget.
-@end deffn
-
-@deffn Widget symbol
-Allows you to edit a lisp symbol in an editable field.
-@end deffn
-
-@deffn Widget integer
-Allows you to edit an integer in an editable field.
-@end deffn
-
-@deffn Widget number
-Allows you to edit a number in an editable field.
-@end deffn
-
-@deffn Widget boolean
-Allows you to edit a boolean.  In lisp this means a variable which is
-either nil meaning false, or non-nil meaning true.
-@end deffn
-
-
-@node composite,  , atoms, Sexp Types
-@comment  node-name,  next,  previous,  up
-@subsection Composite Sexp Widgets.
-
-The syntax for the composite are
-
-@example
-TYPE ::= (NAME [KEYWORD ARGUMENT]...  COMPONENT...)
-@end example
-
-Where each @var{component} must be a widget type.  Each component widget
-will be displayed in the buffer, and be editable to the user.
-
-@deffn Widget cons
-The value of a @code{cons} widget is a cons-cell where the car is the
-value of the first component and the cdr is the value of the second
-component.  There must be exactly two components. 
-@end deffn
-
-@deffn Widget lisp
-The value of a @code{lisp} widget is a list containing the value of
-each of its component.
-@end deffn
-
-@deffn Widget vector
-The value of a @code{vector} widget is a vector containing the value of
-each of its component.
-@end deffn
-
-The above suffice for specifying fixed size lists and vectors.  To get
-variable length lists and vectors, you can use a @code{choice},
-@code{set} or @code{repeat} widgets together with the @code{:inline}
-keywords.  If any component of a composite widget has the @code{:inline}
-keyword set, its value must be a list which will then be spliced into
-the composite.  For example, to specify a list whose first element must
-be a file name, and whose remaining arguments should either by the
-symbol @code{t} or two files, you can use the following widget
-specification:
-
-@example
-(list file
-      (choice (const t)
-              (list :inline t
-                    :value ("foo" "bar")
-                    string string)))
-@end example
-
-The value of a widget of this type will either have the form 
-@samp{(file t)} or @code{(file string string)}.
-
-This concept of inline is probably hard to understand.  It was certainly
-hard to implement so instead of confuse you more by trying to explain it
-here, I'll just suggest you meditate over it for a while.
-
-@deffn Widget choice
-Allows you to edit a sexp which may have one of fixed set of types.  It
-is currently implemented with the @code{choice-menu} basic widget, and
-has a similar syntax.
-@end deffn
-
-@deffn Widget set
-Allows you to specify a type which must be a list whose elements all
-belong to given set.  The elements of the list is not significant.  This
-is implemented on top of the @code{checklist} basic widget, and has a
-similar syntax. 
-@end deffn
-
-@deffn Widget repeat
-Allows you to specify a variable length list whose members are all of
-the same type.  Implemented on top of the `editable-list' basic widget,
-and has a similar syntax.
-@end deffn
-
-@node Widget Properties, Defining New Widgets, Sexp Types, Top
-@comment  node-name,  next,  previous,  up
-@section Properties
-
-You can examine or set the value of a widget by using the widget object
-that was returned by @code{widget-create}.
-
-@defun widget-value widget
-Return the current value contained in @var{widget}.
-It is an error to call this function on an uninitialized widget.
-@end defun
-
-@defun widget-value-set widget value
-Set the value contained in @var{widget} to @var{value}.
-It is an error to call this function with an invalid @var{value}.
-@end defun
-
-@strong{Important:} You @emph{must} call @code{widget-setup} after
-modifying the value of a widget before the user is allowed to edit the
-widget again.  It is enough to call @code{widget-setup} once if you
-modify multiple widgets.  This is currently only necessary if the widget
-contains an editing field, but may be necessary for other widgets in the
-future. 
-
-If your application needs to associate some information with the widget
-objects, for example a reference to the item being edited, it can be
-done with @code{widget-put} and @code{widget-get}.  The property names
-must begin with a @samp{:}.
-
-@defun widget-put widget property value
-In @var{widget} set @var{property} to @var{value}.
-@var{property} should be a symbol, while @var{value} can be anything.
-@end defun
-
-@defun widget-get widget property
-In @var{widget} return the value for @var{property}.
-@var{property} should be a symbol, the value is what was last set by
-@code{widget-put} for @var{property}.
-@end defun
-
-@defun widget-member widget property
-Non-nil if @var{widget} has a value (even nil) for property @var{property}.
-@end defun
-
-Occasionally it can be useful to know which kind of widget you have,
-i.e. the name of the widget type you gave when the widget was created. 
-
-@defun widget-type widget
-Return the name of @var{widget}, a symbol.
-@end defun
-
-Widgets can be in two states: active, which means they are modifiable by
-the user, or inactive, which means they cannot be modified by the user.
-You can query or set the state with the following code:
-
-@lisp
-;; Examine if @var{widget} is active or not.
-(if (widget-apply @var{widget} :active)
-    (message "Widget is active.")
-  (message "Widget is inactive.")
-
-;; Make @var{widget} inactive.
-(widget-apply @var{widget} :deactivate)
-
-;; Make @var{widget} active.
-(widget-apply @var{widget} :activate)
-@end lisp
-
-A widget is inactive if itself, or any of its ancestors (found by
-following the @code{:parent} link) have been deactivated.  To make sure
-a widget is really active, you must therefore activate both itself, and
-all its ancestors.
-
-@lisp
-(while widget 
-  (widget-apply widget :activate)
-  (setq widget (widget-get widget :parent)))
-@end lisp
-
-You can check if a widget has been made inactive by examining the value
-of @code{:inactive} keyword.  If this is non-nil, the widget itself has
-been deactivated.  This is different from using the @code{:active}
-keyword, in that the later tell you if the widget @strong{or} any of its
-ancestors have been deactivated.   Do not attempt to set the
-@code{:inactive} keyword directly.  Use the @code{:activate}
-@code{:deactivated} keywords instead.
-
-
-@node Defining New Widgets, Widget Wishlist., Widget Properties, Top
-@comment  node-name,  next,  previous,  up
-@section Defining New Widgets
-
-You can define specialized widgets with @code{define-widget}.  It allows
-you to create a shorthand for more complex widgets, including specifying
-component widgets and default new default values for the keyword
-arguments. 
-
-@defun widget-define name class doc &rest args
-Define a new widget type named @var{name} from @code{class}.
-
-@var{name} and class should both be symbols, @code{class} should be one
-of the existing widget types. 
-
-The third argument @var{DOC} is a documentation string for the widget.
-
-After the new widget has been defined, the following two calls will
-create identical widgets:
-
-@itemize @bullet
-@item
-@lisp
-(widget-create @var{name})
-@end lisp
-
-@item
-@lisp
-(apply widget-create @var{class} @var{args})
-@end lisp
-@end itemize
-
-@end defun
-
-Using @code{widget-define} does just store the definition of the widget
-type in the @code{widget-type} property of @var{name}, which is what
-@code{widget-create} uses.
-
-If you just want to specify defaults for keywords with no complex
-conversions, you can use @code{identity} as your conversion function.
-
-The following additional keyword arguments are useful when defining new
-widgets: 
-@table @code
-@item :convert-widget
-Function to convert a widget type before creating a widget of that
-type.  It takes a widget type as an argument, and returns the converted
-widget type.  When a widget is created, this function is called for the
-widget type and all the widgets parent types, most derived first. 
-
-@item :value-to-internal
-Function to convert the value to the internal format.  The function
-takes two arguments, a widget and an external value, and returns the
-internal value.  The function is called on the present @code{:value}
-when the widget is created, and on any value set later with
-@code{widget-value-set}.
-
-@item :value-to-external
-Function to convert the value to the external format.  The function
-takes two arguments, a widget and an internal value, and returns the
-internal value.  The function is called on the present @code{:value}
-when the widget is created, and on any value set later with
-@code{widget-value-set}.
-
-@item :create
-Function to create a widget from scratch.  The function takes one
-argument, a widget type, and create a widget of that type, insert it in
-the buffer, and return a widget object.
-
-@item :delete
-Function to delete a widget.  The function takes one argument, a widget,
-and should remove all traces of the widget from the buffer.
-
-@item :value-create
-Function to expand the @samp{%v} escape in the format string.  It will
-be called with the widget as its argument.  Should
-insert a representation of the widgets value in the buffer.
-
-@item :value-delete
-Should remove the representation of the widgets value from the buffer.
-It will be called with the widget as its argument.  It doesn't have to
-remove the text, but it should release markers and delete nested widgets
-if such has been used.
-
-@item :format-handler
-Function to handle unknown @samp{%} escapes in the format string.  It
-will be called with the widget and the escape character as arguments.
-You can set this to allow your widget to handle non-standard escapes.
-
-You should end up calling @code{widget-default-format-handler} to handle
-unknown escape sequences, which will handle the @samp{%h} and any future
-escape sequences, as well as give an error for unknown escapes.
-@end table
-
-If you want to define a new widget from scratch, use the @code{default}
-widget as its base.
-
-@deffn Widget default [ keyword argument ]
-Widget used as a base for other widgets. 
-
-It provides most of the functionality that is referred to as ``by
-default'' in this text. 
-@end deffn
-
-@node  Widget Wishlist.,  , Defining New Widgets, Top
-@comment  node-name,  next,  previous,  up
-@section Wishlist.
-
-@itemize @bullet
-@item 
-It should be possible to add or remove items from a list with @kbd{C-k}
-and @kbd{C-o} (suggested by @sc{rms}).
-
-@item 
-The @samp{[INS]} and @samp{[DEL]} buttons should be replaced by a single
-dash (@samp{-}).  The dash should be a button that, when activated, ask
-whether you want to add or delete an item (@sc{rms} wanted to git rid of
-the ugly buttons, the dash is my idea).
-
-@item
-Widgets such as @code{file} and @code{symbol} should prompt with completion. 
-
-@item
-The @code{menu-choice} tag should be prettier, something like the abbreviated
-menus in Open Look.
-
-@item
-The functions used in many widgets, like
-@code{widget-item-convert-widget}, should not have names that are
-specific to the first widget where I happended to use them.
-
-@item
-Flag to make @code{widget-move} skip a specified button.
-
-@item
-Document `helper' functions for defining new widgets.
-
-@item
-Activate the item this is below the mouse when the button is
-released, not the item this is below the mouse when the button is
-pressed.  Dired and grep gets this right.  Give feedback if possible.
-
-@item
-Use @samp{@@deffn Widget} to document widgets. 
-
-@item
-Document global keywords in one place.  
-
-Document keywords particular to a specific widget in the widget
-definition.
-
-Document the `default' widget first. 
-
-Split, when needed, keywords into those useful for normal
-customization, those primarily useful when deriving, and those who
-represent runtime information. 
-
-@item
-Figure out terminology and @sc{api} for the class/type/object/super
-stuff. 
-
-Perhaps the correct model is delegation?
-
-@item
-Document @code{widget-browse}.
-
-@item
-Make indentation work with glyphs and propertional fonts.
-
-@item
-Add object and class hierarchies to the browser.
-
-@end itemize
-
-@contents
-@bye