+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
** Gnus changes.
+*** The Gnus distribution no longer bundles Custom and Widget.
+If your Emacs doesn't come with these libraries, fetch them from
+<URL:http://www.dina.kvl.dk/~abraham/custom/>. You also then need to
+add the following to the lisp/dgnushack.el file:
+
+ (push "~/lisp/custom" load-path)
+
+Modify to suit your needs.
+
+*** New functionality for using Gnus as an offline newsreader has been
+added. A plethora of new commands and modes have been added. See the
+Gnus manual for the full story.
+
+*** The nndraft backend has returned, but works differently than
+before. All Message buffers are now also articles in the nndraft
+group, which is created automatically.
+
+*** `gnus-alter-header-function' can now be used to alter header
+values.
+
+*** `gnus-summary-goto-article' now accept Message-ID's.
+
+*** A new Message command for deleting text in the body of a message
+outside the region: `C-c C-v'.
+
+*** You can now post to component group in nnvirtual groups with
+`C-u C-c C-c'.
+
+*** `nntp-rlogin-program' -- new variable to ease customization.
+
+*** `C-u C-c C-c' in `gnus-article-edit-mode' will now inhibit
+re-highlighting of the article buffer.
+
+*** New element in `gnus-boring-article-headers' -- `long-to'.
+
+*** `M-i' symbolic prefix command. See the section "Symbolic
+Prefixes" in the Gnus manual for details.
+
+*** `L' and `I' in the summary buffer now take the symbolic prefix
+`a' to add the score rule to the "all.SCORE" file.
+
+*** `gnus-simplify-subject-functions' variable to allow greater
+control over simplification.
+
+*** `A T' -- new command for fetching the current thread.
+
+*** `/ T' -- new command for including the current thread in the
+limit.
+
+*** `M-RET' is a new Message command for breaking cited text.
+
+*** \\1-expressions are now valid in `nnmail-split-methods'.
+
+*** The `custom-face-lookup' function has been removed.
+If you used this function in your initialization files, you must
+rewrite them to use `face-spec-set' instead.
+
+*** Cancelling now uses the current select method. Symbolic prefix
+`a' forces normal posting method.
+
+*** New command to translate M******** sm*rtq**t*s into proper text
+-- `W d'.
+
+*** For easier debugging of nntp, you can set `nntp-record-commands'
+to a non-nil value.
+
+*** nntp now uses ~/.authinfo, a .netrc-like file, for controlling
+where and how to send AUTHINFO to NNTP servers.
+
+*** A command for editing group parameters from the summary buffer
+has been added.
+
+*** A history of where mails have been split is available.
+
+*** A new article date command has been added -- `article-date-iso8601'.
+
+*** Subjects can be simplified when threading by setting
+`gnus-score-thread-simplify'.
+
+*** A new function for citing in Message has been added --
+`message-cite-original-without-signature'.
+
+*** `article-strip-all-blank-lines' -- new article command.
+
+*** A new Message command to kill to the end of the article has
+been added.
+
+*** A minimum adaptive score can be specified by using the
+`gnus-adaptive-word-minimum' variable.
+
+*** The "lapsed date" article header can be kept continually
+updated by the `gnus-start-date-timer' command.
+
+*** Web listserv archives can be read with the nnlistserv backend.
+
+*** Old dejanews archives can now be read by nnweb.
+
+*** Byte-compilation of user-specs now works under XEmacs.
+
+*** `gnus-posting-styles' has been re-activated.
+++ /dev/null
-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
-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 Makefile
osome:
- make EMACS=xemacs21 some
+ make EMACS=emacs-19.34 some
config.status: $(srcdir)/configure
$(SHELL) ./config.status --recheck
--- /dev/null
+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.
-Sun Sep 6 21:19:26 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.17 is released.
+ * gnus.el: Gnus v5.6.22 is released.
-1998-09-06 05:45:17 Lars Magne Ingebrigtsen <larsi@gnus.org>
+Mon Jun 29 21:22:46 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * time-date.el: Renamed from "date".
+ * gnus-salt.el (gnus-pick-mode-map): Remove gnus-mouse.
- * gnus.el: Removed all timezone dependencies.
+ * gnus-sum.el (gnus-dependencies-add-header): `debug' left in.
+ Eh. Eh.
- * score-mode.el: Removed.
- (gnus-score-edit-insert-date): Use date.
+ * gnus-salt.el (gnus-summary-pick-line-format): Missing %.-
- * date.el (float-to-time): New function.
+ * gnus-topic.el (gnus-topic-rename): Fix error message.
- * nnspool.el (nnspool-seconds-since-epoch): Removed.
+Sun Jun 28 14:32:08 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * date.el (time-to-float): New function.
+ * gnus-spec.el (gnus-face-face-function): Double quoting removed.
- * message.el (message-make-date): Use format-time-string.
- (message-make-expires): Use make-date.
+Sun Jun 28 09:54:52 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
- * gnus-xmas.el (gnus-xmas-seconds-since-epoch): Removed.
+ * gnus.el: Gnus v5.6.21 is released.
- * gnus-util.el (gnus-dd-mmm): Use date.
- (gnus-sortable-date): Ditto.
+Sun Jun 28 08:51:39 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * message.el (message-make-date): Take an optional time.
+ * gnus-sum.el (gnus-summary-edit-article-done): Copy the buffer to
+ a temp buffer before replacing.
- * gnus: Applied patches from 5.6.43.
+ * gnus-msg.el (gnus-post-news): Treat broken-reply-to in
+ followups.
- * date.el (if): Use parse-time.
+ * gnus-sum.el (gnus-summary-goto-subject): Position point.
- * gnus-score.el (gnus-summary-score-entry): Make into a command
- again.
+Sat Jun 27 09:19:20 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * gnus-group.el (gnus-group-get-new-news-this-group): Only call if
- gnus-agent.
+ * gnus-demon.el (gnus-util): Required.
- * gnus.el (gnus-agent-meta-information-header): Moved here.
+ * gnus-score.el (gnus-score-body): Message fix.
-1998-09-05 Mike McEwan <mike@lotusland.demon.co.uk>
+ * gnus-group.el (gnus-group-highlight-line): Use it.
- * 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'.
+ * gnus-util.el
+ (gnus-put-text-properties-excluding-characters-with-faces): New
+ function.
-1998-09-06 01:56:02 Lars Magne Ingebrigtsen <larsi@gnus.org>
+Sat Jun 27 08:56:08 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
- * gnus-score.el (gnus-score-load-score-alist): Bind coding system.
+ * gnus.el: Gnus v5.6.20 is released.
- * gnus-art.el (gnus-article-setup-buffer): Enable multibyte.
+Sat Jun 27 08:49:51 1998 Arne Georg Gleditsch <argggh@ifi.uio.no>
- * score-mode.el (score-mode-coding-system): New variable.
- (gnus-score-edit-exit): Use it.
+ * gnus-sum.el (gnus-parent-headers): Check better for headers.
-1998-09-04 Jason R Mastaler <jason@4b.org>
+Sat Jun 27 08:45:09 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * drums.el: Corrected typo.
+ * message.el (message-check-news-body-syntax): Buggy checksum
+ check.
-1998-09-05 23:24:43 Hallvard B. Furuseth <h.b.furuseth@usit.uio.no>
+Sat Jun 27 07:59:22 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
- * mm-bodies.el (mm-body-encoding): Faster version.
+ * gnus.el: Gnus v5.6.19 is released.
-1998-09-05 22:23:03 Lars Magne Ingebrigtsen <larsi@gnus.org>
+Sat Jun 27 07:50:50 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
- * gnus-art.el (gnus-article-decode-charset): Only decode text
- things.
+ * gnus.el: Gnus v5.6.18 is released.
- * message.el (message-output): Use rmail.
+Sat Jun 27 03:18:57 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * rfc2047.el (rfc2047-encoded-word-regexp): Allow spaces in the
- word part.
+ * gnus-soup.el (gnus-soup-save-areas): Made interactive.
- * mm-util.el (mm-charset-to-coding-system): Use
- rfc2047-default-charset.
- (mm-known-charsets): New variable.
+ * nnfolder.el (nnfolder-request-replace-article): Check all X-From
+ headers.
- * message.el (message-caesar-region): Bugged out.
+ * gnus-sum.el (gnus-update-marks): Don't nix out cache lists.
-Sat Sep 5 21:55:01 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+ * nngateway.el (nngateway-mail2news-header-transformation):
+ Changed semantics.
- * gnus.el: Pterodactyl Gnus v0.16 is released.
+ * message.el (message-check-news-body-syntax): Don't look at
+ buffer size to see whether text has been added.
-1998-09-05 17:30:11 Lars Magne Ingebrigtsen <larsi@gnus.org>
+Fri Jun 26 15:46:05 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
- * nnmail.el (nnmail-expired-article-p): Use predicate.
+ * gnus.el: Gnus v5.6.16 is released.
- * date.el (time-less-p): Renamed.
+Fri Jun 26 15:36:25 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * gnus-art.el (gnus-article-decode-charset): Really fetch headers
- from the headers.
+ * gnus-util.el (gnus-delete-assq): Removed.
+ (gnus-delete-assoc): Ditto.
- * rfc2047.el (rfc2047-decode-region): Use the mm decoding
- functions.
+ * gnus.el: Use throughout.
- * 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.
+ * gnus-util.el (gnus-pull): New macro.
-Sat Sep 5 01:45:52 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+1998-06-26 Simon Josefsson <jas@pdc.kth.se>
- * gnus.el: Pterodactyl Gnus v0.15 is released.
+ * gnus-sum.el (gnus-get-newsgroup-headers): parse Chars: headers
-1998-09-05 00:21:22 Lars Magne Ingebrigtsen <larsi@gnus.org>
+Fri Jun 26 13:45:24 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * date.el: New file.
+ * gnus-sum.el (gnus-update-marks): Use it.
- * gnus-util.el (gnus-encode-date): Removed.
- (gnus-time-less): Ditto.
+ * gnus-util.el (gnus-delete-alist): New function.
- * nnmail.el (nnmail-date-to-time): Removed.
- (nnmail-time-less): Ditto.
- (nnmail-days-to-time): Ditto.
- (nnmail-time-since): Ditto.
+ * gnus-sum.el (gnus-update-marks): Don't save list of cached
+ articles.
- * drums.el: New file.
+ * message.el (message-mode-menu): Include kill-buffer.
-1998-09-04 00:25:52 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * nnmail.el (nnmail-purge-split-history): Use it.
- * message.el (message-encode-message-body): Encode headers with
- body encoding.
+ * gnus-util.el (gnus-delete-if): New function.
- * rfc2047.el (rfc2047-default-charset): Renamed.
- (rfc2047-encodable-p): Use it.
+ * nnmail.el (nnmail-article-group): Use gnus-remove-duplicates.
- * base64.el (mm-util): Required.
+Fri Jun 26 13:45:09 1998 Richard Stallman <rms@santafe.edu>
-1998-09-03 16:28:30 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * gnus-util.el (gnus-remove-duplicates): New function.
- * gnus-msg.el (gnus-post-method): Peel off real info from opened
- servers.
+Fri Jun 26 13:30:42 1998 Kevin Christian <Kevin.Christian@symbios.com>
- * gnus-util.el (gnus-output-to-rmail): Removed.
+ * gnus-score.el (gnus-score-string): Do updating of scores after
+ fuzzies.
- * gnus-art.el (gnus-summary-save-in-rmail): Use
- gnus-output-to-rmailrmail-output-to-rmail-file.
+Fri Jun 26 07:26:03 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * rfc2047.el (rfc2047-decode-region): Fold case.
- (rfc2047-decode): Use decode-string.
+ * message.el (message-mode): Don't do the intern dance.
- * mm-util.el: Provide mm-char-int.
+Fri Jun 26 07:13:49 1998 Richard Stallman <rms@santafe.edu>
-Thu Sep 3 15:23:22 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+ * message.el (message-mode): Adaptive fill changes.
- * gnus.el: Pterodactyl Gnus v0.14 is released.
+Fri Jun 26 04:29:44 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-1998-09-03 15:08:30 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * gnus-sum.el (gnus-summary-mode-line-format-alist): Allow article
+ score.
- * mm-bodies.el (mm-body-encoding): Go through the buffer to make
- sure we have 7bit.
+ * gnus-score.el (gnus-score-load-file): Would ignore all score
+ files without un-advanced rules.
-1998-09-02 14:38:18 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * gnus-ems.el ((fboundp 'split-string)): Use it where it exists.
- * gnus-msg.el (gnus-post-method): Use opened servers, and remove
- ducplicates.
- (gnus-inews-insert-mime-headers): Removed.
+Fri Jun 26 04:23:12 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
- * message.el (message-caesar-region): Protect against MULE chars.
+ * gnus.el: Gnus v5.6.15 is released.
-1998-09-02 00:36:23 Hallvard B. Furuseth <h.b.furuseth@usit.uio.no>
+Fri Jun 26 03:39:32 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * mm-util.el (if): fset the right function.
+ * nnfolder.el (nnfolder-request-replace-article): Delete old
+ delimiter.
-1998-09-02 00:31:53 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * gnus-msg.el (gnus-summary-reply): Use it.
- * gnus-art.el (gnus-article-decode-charset): Use real
- read-coding-system.
+ * message.el (message-reply): Removed parameter.
+ (message-wide-reply): Ditto.
-1998-09-01 17:58:40 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * gnus-msg.el (gnus-msg-treat-broken-reply-to): New function.
- * mm-bodies.el (mm-decode-body): Protect against malformed
- base64.
- (mm-decode-body): Check that buffer-file-coding-system is
- non-nil.
+ * gnus-art.el (gnus-check-group-server): New function.
+ (gnus-request-article-this-buffer): Don't try to waken the server
+ before needing to.
-Tue Sep 1 10:29:33 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+Thu Jun 25 10:35:48 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * gnus.el: Pterodactyl Gnus v0.13 is released.
+ * gnus-sum.el (gnus-summary-delete-article): Sort the articles
+ before deleting.
-1998-09-01 09:14:33 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * nngateway.el (nngateway-request-post): Return success.
- * gnus-util.el (gnus-strip-whitespace): Already defined.
- Removed.
+ * nnheader.el (nnheader-insert-file-contents): Bind more hooks.
- * gnus-art.el (gnus-article-decode-charset): Strip whitespace.
+ * gnus-sum.el (gnus-summary-limit-to-age): Reverse logic.
- * gnus-util.el (gnus-strip-whitespace): New function.
+ * gnus-score.el (gnus-summary-score-entry): Removed interactive
+ spec.
+ ((gnus-summary-score-map "V" gnus-summary-mode-map)): Removed
+ keystroke.
+
+ * gnus-art.el (gnus-article-show-summary): Position point.
+
+ * gnus-cache.el (gnus-cache-update-article): Change group first.
+
+ * gnus.el (gnus-short-group-name): Collapse more.
+
+Thu Jun 25 08:48:06 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.14 is released.
+
+Thu Jun 25 05:13:31 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-rebuild-thread): Accept a line argument.
+ (gnus-rebuild-thread): Would skip around a lot when `P'-ing past
+ the beginning.
+
+ * gnus-msg.el (gnus-post-method): Present all known servers if
+ `C-u 0'.
+
+ * gnus-salt.el (gnus-pick-mode-map): Reinstated keymap.
+
+ * gnus-sum.el (gnus-build-sparse-threads): Put the proper date
+ in.
+
+Wed Jun 24 07:52:30 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.13 is released.
+
+Wed Jun 24 07:47:04 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-topic.el (gnus-topic-rename): Disallow "nil".
+
+Wed Jun 24 07:33:17 1998 Vladimir Alexiev <vladimir@cs.ualberta.ca>
+
+ * nnvirtual.el (nnvirtual-update-xref-header): Regexp-quote group
+ name.
+
+Wed Jun 24 06:15:27 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-build-sparse-threads): Give all the sparse
+ articles the date of the current child.
+
+ * gnus-topic.el (gnus-group-topic-parameters): Didn't compute.
+
+Wed Jun 24 03:27:44 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.12 is released.
+
+Wed Jun 10 11:06:35 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
+
+ * 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.
+
+1998-06-09 Sam Steingold <sds@goems.com>
+
+ * gnus-uu.el (gnus-uu-default-view-rules): make sed kill ^M only
+ at the end of line.
+
+1998-06-05 Hrvoje Niksic <hniksic@srce.hr>
+
+ * nnmail.el (nnmail-get-split-group): Don't regexp-quote
+ nnmail-procmail-suffix.
+
+Wed Jun 24 03:04:05 1998 Kim-Minh Kaplan <kaplan@sky.fr>
+
+ * gnus-sum.el (gnus-build-get-header): Fix obarray.
+
+Wed Jun 24 02:49:57 1998 Castor <castor@my-dejanews.com>
+
+ * nntp.el (nntp-open-ssl-stream):
+
+Wed Jun 24 02:31:46 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-nov-parse-line): Cleaned up.
+ (gnus-build-all-threads): Put things in the wrong obarray.
+
+Wed Jun 24 01:43:26 1998 Decklin Foster <djarum@base.org>
+
+ * nngateway.el (nngateway-mail2news-header-transformation): New
+ function.
+
+Wed Jun 24 00:25:45 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * message.el (message-shorten-references): New function.
+ (message-header-format-alist): Use it.
+
+ * gnus-start.el (gnus-always-read-dribble-file): Customized.
+
+ * message.el (message-generate-new-buffers): Dox fox.
+
+Tue Jun 23 23:58:48 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-topic.el (gnus-topic-prepare-topic): Respect visible topic
+ param.
+ (gnus-topic-hierarchical-parameters): New function.
+
+1998-06-02 Didier Verna <verna@inf.enst.fr>
+
+ * gnus-picon.el (gnus-get-buffer-name): use get-buffer-create
+ instead of get-buffer
+
+Wed Jun 3 04:41:45 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nnkiboze.el (nnkiboze-request-delete-group): Delete .newsrc
+ file.
+
+ * nnmail.el (nnmail-article-group): Nuke looong lines.
+
+ * gnus-art.el (gnus-button-alist): Buggy default.
+
+Wed Jun 3 04:03:37 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.11 is released.
+
+Wed Jun 3 03:33:50 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.el: Checked doc string syntax throughout.
+
+ * message.el (message-subject-re-regexp): Renamed.
+
+Wed Jun 3 03:33:05 1998 Simon Josefsson <jas@pdc.kth.se>
+
+ * message.el (message-ignored-subject-re): New variable.
+
+Wed Jun 3 03:25:13 1998 Sam Steingold <sds@usa.net>
+
+ * gnus-msg.el (gnus-bug-create-help-buffer): New variable.
+ (gnus-bug): Use it.
+
+1998-05-07 Hrvoje Niksic <hniksic@srce.hr>
+
+ * nnmail.el: (nnmail-get-split-group): Use `regexp-quote'
+ when file name is a part of pattern.
+
+ * nnmail.el (nnmail-crosspost-link-function): Ditto.
+
+ * gnus-ems.el: Use `symbol-name' instead of `(format "%s" ...)'.
+
+ * gnus-score.el (gnus-score-load-file): Use `regexp-quote'
+ when file name is a part of pattern.
+
+1998-05-06 Hrvoje Niksic <hniksic@srce.hr>
+
+ * gnus-cache.el (gnus-cache-generate-active): Use `regexp-quote'
+ when file name is a part of pattern.
+
+Wed Jun 3 03:13:34 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nnfolder.el (nnfolder-delete-mail): Changed parameters.
+ (nnfolder-request-replace-article): Rename X-From-Line.
+
+Wed Jun 3 03:10:04 1998 Dan Christensen <jdc@chow.mat.jhu.edu>
+
+ * nnfolder.el (nnfolder-adjust-min-active): Work.
+
+Mon Jun 1 05:27:28 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-summary-limit-to-age): Reversed time and
+ almost collapsed space!
+
+ * nnmail.el (nnmail-days-to-time): Computed wrong time.
+
+Mon Jun 1 05:19:46 1998 Kim-Minh Kaplan <KimMinh.Kaplan@utopia.eunet.fr>
+
+ * gnus-sum.el (gnus-dependencies-add-header): Break loops.
+
+Mon Jun 1 05:13:34 1998 Fabrice POPINEAU <popineau@esemetz.ese-metz.fr>
+
+ * gnus-cache.el (gnus-cache-generate-active): Regexp-quote.
+
+Mon Jun 1 04:31:23 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.10 is released.
+
+Mon Jun 1 03:25:33 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-art.el (gnus-button-alist): Recognize bare mailto buttons
+ for Gnus.
+
+ * nntp.el: Replaced all `message' calls.
+
+Mon Jun 1 03:13:46 1998 Wolfgang Rupprecht <wolfgang@dailyplanet.wsrcc.com>
+
+ * nntp.el (nntp-encode-text): Removed spurious forward-line.
+
+Sat May 23 19:44:43 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-agent.el (gnus-agent-fetch-session): Would infloop if
+ opening failed.
+
+Tue May 19 04:11:33 1998 Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+ * nnheader.el (nnheader-translate-file-chars): Don't change
+ string.
+
+Tue May 19 03:07:45 1998 P. E. Jareth Hein <jareth@camelot-soft.com>
+
+ * gnus-util.el (gnus-dd-mmm): New version.
+
+Tue May 19 03:00:39 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.el: Changed address.
+
+Tue May 12 06:12:42 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-agent.el (gnus-agent-expire): Delete more.
+
+Sun May 10 19:08:28 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-group.el (gnus-group-read-ephemeral-group): Don't add
+ `address'.
+
+Sun May 3 18:01:01 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nnmail.el (nnmail-within-headers-p): Renamed.
+
+ * 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-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-art.el (gnus-button-alist): Accept white space after colons
+ in <URL:news:> things.
+
+Wed Apr 29 20:18:45 1998 Kurt Swanson <kurt@dna.lth.se>
+
+ * gnus-art.el (article-update-date-lapsed): Bind
+ `deactivate-mark'.
+
+ * gnus-salt.el (gnus-pick-mode-map): Moved keys around to avoid
+ shadowing.
+
+ * gnus-art.el (gnus-article-read-summary-keys): New version.
+
+ * gnus-sum.el (gnus-summary-make-menu-bar): New for article mode.
+
+ * gnus-msg.el (gnus-post-method): `current' custom.
+
+Wed Apr 29 19:04:27 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-summary-set-local-parameters): Ignore
+ quit-config.
+ (gnus-select-newsgroup): Use the value of gnus-fetch-old-headers.
+
+ * message.el (message-post-method): Doc fix.
+
+ * gnus.el (gnus-directory): dox fix.
+
+Tue Apr 28 03:32:17 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-group.el (gnus-group-timestamp): Really get timestamp.
+
+ * gnus.el (gnus-group-parameter-value): Use explicit iteration.
+
+Tue Apr 28 03:15:50 1998 Hallvard B. Furuseth <h.b.furuseth@usit.uio.no>
+
+ * gnus-util.el (gnus-alive-p): Check for binding.
+
+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.
+
+ * gnus-undo.el (gnus-undo): New group.
+ (gnus-undo-limit): New variable.
+ (gnus-undo-register-1): Use it.
+
+ * gnus-sum.el (gnus-summary-update-info): Don't nix out scores.
+
+ * gnus-start.el (gnus-active-to-gnus-format): Removed "." from
+ quoting.
+
+ * gnus.el (gnus-cache-directory): Moved here.
+ (gnus-predefined-server-alist): Use.
+
+ * message.el (message-autosave-directory): Put back in.
+ (message-set-auto-save-file-name): Use if Gnus isn't running.
+
+ * gnus-util.el (gnus-alive-p): Moved here.
+
+ * message.el (message-autosave-directory): Removed.
+ (message-set-auto-save-file-name): Don't use it.
+
+ * gnus.el: Use gnus-buffer-exists-p throughout.
+
+ * gnus-uu.el (gnus-uu-save-article): Use gnus-kill-buffer.
+
+ * message.el (message-make-in-reply-to): Check more for strange
+ From lines.
+
+ * gnus-art.el (gnus-article-mode): Don't nix out vars.
+
+Sun Apr 26 14:05:40 1998 Frank Bennett <bennett@rumple.soas.ac.uk>
+
+ * nnmail.el (nnmail-move-inbox): Push error'ed mailboxes onto the
+ list.
+
+Sun Apr 26 13:01:53 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-score.el (gnus-score-save): Use it.
+
+ * score-mode.el (score-mode-syntax-table): New table.
+
+ * nnmbox.el: Commentary fix.
+
+Sun Apr 26 12:59:00 1998 Richard Stallman <rms@santafe.edu>
+
+ * message.el (message-mode): New adaptive fill defaults.
+
+Sun Apr 26 12:50:38 1998 Jim Radford <radford@robby.caltech.edu>
+
+ * gnus-start.el (gnus-active-to-gnus-format): Groups that start
+ with dots.
+
+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.
+
+ * nntp.el (nntp-wait-for): Check more for dead connections.
+
+ * gnus-eform.el (gnus-edit-form-buffer): Moved back here.
+
+ * gnus-win.el (gnus-window-to-buffer-helper): Return nil when
+ buffers don't exist.
+
+ * nndraft.el (nndraft-request-restore-buffer): Remove Xref header,
+ not Xrefs.
+
+Sun Mar 8 00:00:04 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Gnus v5.6.1 is released.
+
+Sat Mar 7 22:15:46 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.el (gnus-edit-form-buffer): Moved here.
+
+ * gnus-agent.el (gnus-agent-expire-old): Removed.
+ (gnus-agent-expire-directory): Ditto.
+ (gnus-agent-expire-group): Even more ditto.
+
+Sat Mar 7 21:59:18 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.37 is released.
+
+Sat Mar 7 20:10:42 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-agent.el (gnus-agent-expire-days): New variable.
+ (gnus-agent-expire): New function.
+
+Sat Mar 7 17:35:53 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.36 is released.
+
+Sat Mar 7 17:29:20 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nntp.el (nntp-wait-for): Reversed logic.
+
+Sat Mar 7 17:19:04 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.35 is released.
+
+Sat Mar 7 15:01:57 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-picon.el (gnus-picons-x-face-sentinel): Check whether
+ gnus-picons-x-face-file-name exists.
+
+ * gnus-art.el (gnus-article-read-summary-keys): Move window point
+ in the summary buffer.
+
+ * nndoc.el (nndoc-type-alist): Allow spaces around separator.
+
+ * gnus-sum.el (gnus-summary-edit-parameters): Interactive.
+
+Sat Mar 7 15:00:05 1998 Wes Hardaker <wjhardaker@ucdavis.edu>
+
+ * gnus-art.el (gnus-article-prepare): Mark articles as
+ downloadable.
+
+Wed Mar 4 22:33:27 1998 Ken Raeburn <raeburn@cygnus.com>
+
+ * gnus-int.el (gnus-get-function): New version, caches symbol
+ names.
+
+Fri Mar 6 01:10:22 1998 Ken Raeburn <raeburn@cygnus.com>
+
+ * nnml.el (nnml-article-to-file): Build pathname using
+ expand-file-name. (Thanks, Colin Rafferty, for catching
+ this.)
+
+Sat Feb 28 23:33:40 1998 Ken Raeburn <raeburn@cygnus.com>
+
+ * nnml.el (nnml-article-to-file): Don't add extra "/" when
+ building pathname.
+
+ * nnheader.el (nnheader-file-to-number): Check value of
+ nnheader-numerical-short-files instead of checking if jka-compr is
+ loaded.
+
+1998-03-03 Dave Love <d.love@dl.ac.uk>
+
+ * nnheader.el (nnheader-parse-head): Fix in-reply-to code. Return
+ nil consistently if not found.
+
+Sat Mar 7 13:50:44 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nntp.el: Check whether the connection died.
+
+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 Mar 2 16:17:36 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-summary-exit-no-update): Run
+ gnus-summary-prepare-exit-hook here as well.
+
+Sat Feb 28 13:35:26 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nntp.el (nntp-authinforc-file): Changed default.
+ (nntp-authinfo-file): Changed name.
+ (nntp-record-commands): New variable.
+ (nntp-record-command): New function.
+
+ * gnus-agent.el (gnus-agent-group-path): Use real name of group.
+
+ * gnus-sum.el (gnus-summary-insert-subject): Don't allow nil
+ articles.
+ (gnus-summary-read-group): Respect backward movement.
+
+1998-03-01 Kim-Minh Kaplan <KimMinh.Kaplan@utopia.eunet.fr>
+
+ * 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-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.
+
+Sat Feb 28 08:27:20 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.34 is released.
+
+Sat Feb 28 08:17:37 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.33 is released.
+
+Sat Feb 28 08:10:27 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-picon.el (gnus-picons-display-x-face): `buf' -- unbound
+ var.
+
+Sat Feb 28 08:03:23 1998 François Pinard <pinard@iro.umontreal.ca>
+
+ * gnus: configure'd.
+
+Sat Feb 28 07:43:00 1998 Nelson Jose dos Santos Ferreira <Nelson.Ferreira@inesc.pt>
+
+ * nnsoup.el (nnsoup-store-reply): Fix double sep error.
+
+Sat Feb 28 07:01:17 1998 Lasse Rasinen <lrasinen@iki.fi>
+
+ * gnus-start.el (gnus-ask-server-for-new-groups): Message more.
+
+Fri Feb 27 13:26:34 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * message.el (message-resend): Allow arbitrary Also's.
+
+1998-02-27 Dave Love <d.love@dl.ac.uk>
+
+ * gnus-sum.el (gnus-simplify-subject-functions): Fix
+ customization, doc.
+
+1998-02-25 Dave Love <d.love@dl.ac.uk>
+
+ * gnus-art.el (gnus-article-x-face-command): Replace leading `{'.
+
+Mon Feb 23 18:26:48 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-agent.el (gnus-plugged): New command and keystroke.
+
+ * gnus-ems.el (gnus-ems-redefine): Define
+ 'gnus-summary-set-display-table as a function that takes no
+ params.
+
+ * gnus.el (gnus-interactive): Don't use gnus-sum macros.
+ (gnus-valid-select-methods): Include nnlistserv.
+
+ * gnus.el: Autoloaded things to make byte-comp silent.
+
+Mon Feb 23 18:06:47 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.32 is released.
+
+Mon Feb 23 17:48:42 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-cite.el (gnus-article-hide-citation-maybe): Wrong
+ interactive specs.
+ (gnus-cite-toggle): Maybe parse.
+
+Mon Feb 23 05:26:11 1998 Rui-Tao Dong ~{6-HpLN~} <rdong@internetmci.com>
+
+ * nnweb.el (nnweb-type-definition): Fixed.
+
+Sun Feb 22 18:10:53 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-agent.el (gnus-agent-group-path): Translate right chars.
+ (gnus-agent-toggle-plugged): Allow proper closing.
+
+ * gnus-srvr.el (gnus-browse-read-group): Allow entering
+ non-ephemeral groups.
+
+Sun Feb 22 04:21:15 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.31 is released.
+
+Sun Feb 22 02:09:35 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * 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.
+
+ * 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.el (gnus-group-get-parameter): Dix fix.
+
+Sat Feb 14 18:29:12 1998 Kim-Minh Kaplan <KimMinh.Kaplan@utopia.eunet.fr>
+
+ * gnus-picon.el: Updated documentation.
+
+Sat Feb 14 18:26:53 1998 Joev Dubach <dubach@dcepea.harvard.edu>
+
+ * nntp.el (nntp-send-authinfo-from-file): Doc fix.
+
+Sun Jan 11 23:44:12 1998 Ken Raeburn <raeburn@cygnus.com>
+
+ * nnagent.el (nnagent-request-update-info): New no-op fn.
+
+Sat Feb 14 17:41:44 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-srvr.el (gnus-browse-unsubscribe-group): Wouldn't allow
+ subscription of visited groups.
+
+ * gnus-util.el (gnus-run-hooks): New function.
+ Use it everywhere.
+
+ * nntp.el (nntp-authinfo-password): New variable.
+ (nntp-send-authinfo): Cache authinfo password.
+
+ * gnus-sum.el (gnus-summary-mark-article-as-unread): Don't do
+ anything if the mark doesn't change.
+
+1998-01-17 Simon Josefsson <jas@pdc.kth.se>
+
+ * 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>
+
+ * nntp.el (nntp-send-authinfo): Use new .netrc functionality.
+
+ * gnus-util.el (gnus-netrc-syntax-table): New variable.
+ (gnus-parse-netrc): New function.
+ (gnus-netrc-machine): Ditto.
+ (gnus-netrc-get): Ditto.
+
+ * gnus-draft.el (gnus-draft-make-menu-bar): Added deletion.
+
+ * gnus.el (gnus-expert-user): Dix fox.
+
+ * nnmail.el (nnmail-article-group): Remove duplicates from split.
+
+ * message.el (message-check-news-header-syntax): Check more on
+ Message-ID.
+
+ * nnmh.el: Don't call nnmail-activate.
+
+ * gnus.el: User-variabelize all custom vars.
+
+Fri Feb 13 22:40:39 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.25 is released.
+
+Fri Feb 13 19:01:19 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nndoc.el (nndoc-type-alist): Allow blank lines to separate
+ headers from bodies.
+
+ * gnus-art.el (gnus-article-edit): Restore Date header.
+
+ * gnus-async.el (gnus-asynch-obarray): New variable.
+ (gnus-async-prefetched-article-entry): Use it.
+ (gnus-async-set-buffer): Use it.
+
+ * nnmh.el (nnmh-active-number): Create parent dirs.
+
+ * nntp.el (nntp-last-command): New variable.
+ (nntp-handle-authinfo): New function.
+
+ * gnus-sum.el (gnus-summary-exit): Call purging function.
+
+Fri Feb 13 18:59:16 1998 François Pinard <pinard@iro.umontreal.ca>
+
+ * nnmail.el (nnmail-get-new-mail): Don't clear split-history.
+ (nnmail-purge-split-history): New function.
+
+Fri Feb 13 18:36:16 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nntp.el (nntp-telnet-shell-prompt): Renamed.
+
+Fri Feb 13 18:35:23 1998 Sam Falkner <samf@channelpoint.com>
+
+ * nntp.el (nntp-open-telnet-envuser): New variable.
+
+Fri Feb 13 18:29:23 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * message.el (message-send-mail-function): Added smtpmail-send-it.
+
+1998-02-11 Dave Love <d.love@dl.ac.uk>
+
+ * 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.
+
+Fri Feb 13 17:10:31 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-cite.el (gnus-cite-localize): New function.
+ (gnus-cite-close): Renamed.
+ (gnus-cite-parse-maybe): Use it.
+
+ * gnus-sum.el (gnus-summary-move-article): Move back to summary
+ buffer.
+
+ * nnfolder.el (nnfolder-request-accept-article): Save excursion.
+ (nnfolder-request-move-article): Ditto.
+
+ * nntp.el (nntp-find-connection): Don't message.
+
+Fri Feb 13 14:51:56 1998 MORIOKA Tomohiko <steve@xemacs.org>
+
+ * message.el (message-send-mail-with-qmail): Fix.
+
+1998-02-13 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * gnus-draft.el (gnus-draft-make-menu-bar): Added missing commands.
+
+1998-01-06 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * gnus/gnus-cus.el (gnus-score-parameters): Make `files' and
+ `exclude-files' widgets inline.
+
+Fri Feb 13 12:46:23 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-article-mark): Dox dox.
+
+Wed Feb 11 15:05:03 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.24 is released.
+
+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.
+
+Sun Feb 1 18:00:54 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-msg.el (gnus-inews-reject-message): Removed function.
+ (gnus-sent-message-ids-file): Removed.
+ (gnus-sent-message-ids-length): Ditto.
+
+ * gnus-xmas.el (gnus-xmas-summary-set-display-table): Ditto.
+
+ * gnus-sum.el (gnus-simplify-subject-fuzzy): Respect
+ `gnus-simplify-ignored-prefixes'.
+ (gnus-summary-set-display-table): Keep TAB.
+
+Thu Jan 15 22:47:38 1998 <Use-Author-Address-Header@[127.1]>
+
+ * gnus-art.el (gnus-request-article-this-buffer): Put it into the
+ backlog.
+
+Mon Jan 12 23:30:59 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-get-newsgroup-headers): Use the longest ID.
+
+ * nnheader.el (nnheader-parse-head): Ditto.
+
+Thu Jan 8 09:47:18 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-start.el (gnus-1): Use gnus-alive-p.
+
+Tue Jan 6 11:53:09 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-art.el (gnus-article-prepare): Bind coding systems.
+
+Tue Jan 6 07:45:39 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.22 is released.
+
+Tue Jan 6 07:32:02 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * message.el (message-kill-to-signature): Don't use mark.
+
+Tue Jan 6 07:30:46 1998 Russ Allbery <rra@stanford.edu>
+
+ * message.el (message-kill-to-signature): New command and keystroke.
+
+Tue Jan 6 06:39:29 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-summary-print-article): New defaults for
+ headers and stuff.
+
+ * gnus-agent.el (gnus-agent-batch): New command.
+
+ * nnoo.el (nnoo-execute): Copy vars from parent into child.
+ (nnoo-parent-function): Ditto.
+
+ * gnus-draft.el (gnus-draft-setup): Removed message.
+
+ * gnus-start.el (gnus-read-descriptions-file): Naked muleism.
+
+Mon Jan 5 05:20:16 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nnml.el (nnml-generate-nov-databases-1): Fix lower bound on
+ empty groups.
+
+Sun Jan 4 14:38:36 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.21 is released.
+
+Sun Jan 4 14:28:35 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.20 is released.
+
+1997-12-10 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * 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'.
+
+1997-12-22 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * gnus/gnus-art.el (gnus-button-alist): Assume msg-id after "in
+ message".
+
+1997-12-22 Simon Josefsson <jas@faun.nada.kth.se>
+
+ * nnmail.el (nnmail-get-new-mail): Make nnmail-tmp-directory
+
+1997-12-28 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * gnus/gnus-group.el (gnus-group-fetch-faq): Convert `.' in group
+ name to `/'.
+
+Sun Jan 4 13:35:14 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nndraft.el (nndraft-request-associate-buffer): Open the damn
+ server first. Sheesh.
+
+ * gnus-draft.el (gnus-draft-send): Bind message-send-hook to nil.
+
+ * gnus-sum.el (gnus-summary-catchup): Don't nix out downloadable.
+ (gnus-summary-highlight): Highlight down/un as unread.
+
+Sun Jan 4 13:27:31 1998 Kim-Minh Kaplan <KimMinh.Kaplan@utopia.eunet.fr>
+
+ * gnus-start.el (gnus-strip-killed-list): Fix syntax.
+
+Sun Jan 4 13:18:04 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nnsoup.el (nnsoup-store-reply): Bind mail-header-separator to
+ "".
+
+ * gnus-xmas.el (gnus-xmas-agent-server-menu-add): New.
+
+ * nnoo.el (nnoo-change-server): Get the right values.
+
+1998-01-04 Aki Vehtari <Aki.Vehtari@hut.fi>
+
+ * 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-score.el (gnus-home-score-file): Add non-nil default for
+ function.
+ (gnus-home-adapt-file): Ditto.
+
+ * gnus-sum.el (gnus-move-split-methods): Add default values for
+ choices.
+
+ * nnmail.el (nnmail-list-identifiers): Add default values for
+ choices suggested by Per Abrahamsen <abraham@dina.kvl.dk>.
+
+Sun Jan 4 11:31:42 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.19 is released.
+
+Sun Jan 4 10:42:53 1998 Felix Lee <flee@teleport.com>
+
+ * nntp.el (nntp-open-rlogin): Use a list of parameters.
+
+Sun Jan 4 10:25:05 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-agent.el (gnus-agent-fetch-groups): New command.
+
+ * gnus-sum.el (gnus-summary-print-article): Changed order of
+ parameters.
+
+Sun Jan 4 10:24:07 1998 Michael R. Cook <mcook@cognex.com>
+
+ * gnus-sum.el (gnus-summary-print-article): Use process/prefix.
+
+Sun Jan 4 05:29:38 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-uu.el: Changed spurious defconsts to defvars.
+
+ * nnmail.el (nnmail-get-spool-files): Quote group name.
+
+ * gnus-agent.el (gnus-agent-fetch-group-1): Fetch ticked articles.
+ (gnus-agent-fetch-group-1): Never mind.
+
+Sat Dec 20 22:33:17 1997 Pete Ware <ware@cis.ohio-state.edu>
+
+ * message.el (message-rename-buffer): Check for nil dirs.
+
+Fri Dec 19 21:45:59 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nnml.el (nnml-request-create-group): Check for files.
+
+Fri Dec 19 21:39:43 1997 Hrvoje Niksic <hniksic@srce.hr>
+
+ * message.el (message-mode): Fixed font-lock.
+
+Fri Dec 19 21:26:08 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-cache.el (gnus-cache-read-active): Check for empty files.
+
+Sun Dec 14 11:46:50 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-uu.el (gnus-uu-save-article): Quote all lines beginning
+ with a dash.
+
+1997-12-10 SL Baur <steve@altair.xemacs.org>
+
+ * gnus-start.el (gnus-read-descriptions-file): Really bind and gag
+ Mule.
+
+Fri Dec 5 15:15:05 1997 Danny Siu <dsiu@adobe.com>
+
+ * nndoc.el (nndoc-babyl-body-begin): quote the regexp for the
+ string "*** EOOH ***" properly.
+ (nndoc-babyl-head-begin): Same as above.
+
+Sun Dec 14 11:11:22 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-uu.el (gnus-uu-pre-uudecode-hook): New hook.
+
+ * gnus-sum.el (gnus-summary-read-group-1): Set mode line after
+ configuring.
+
+Sun Dec 14 11:03:26 1997 Wes Hardaker <wjhardaker@ucdavis.edu>
+
+ * gnus-score.el (gnus-adaptive-word-minimum): New variable.
+ (gnus-score-adaptive): Use it.
+
+Sun Dec 14 09:19:18 1997 Roland B. Roberts <roberts@panix.com>
+
+ * gnus-group.el: Fixed hardcoded levels.
+
+Sat Dec 6 17:40:33 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.18 is released.
+
+Sat Dec 6 17:27:04 1997 Kim-Minh Kaplan <KimMinh.Kaplan@Utopia.EUnet.fr>
+
+ * gnus-picon.el (gnus-picons-remove): Race condition.
+
+Sat Dec 6 17:23:26 1997 Christian von Roques <roques@scalar.pond.sub.org>
+
+ * gnus-start.el (gnus-read-descriptions-file): Fix
+ enable-multibyte-characters.
+
+1997-12-05 Dave Love <d.love@dl.ac.uk>
+
+ * gnus-nocem.el (gnus-nocem-message-wanted-p): Fix paren typpo.
+ (gnus-nocem-issuers): Allow sexp alternative in :type for alists.
+
+1997-12-05 Dave Love <d.love@dl.ac.uk>
+
+ * gnus-art.el (gnus-visible-headers): Add X-sent:.
+
+Sat Dec 6 17:16:28 1997 Lars Balker Rasmussen <lbr@mjolner.dk>
+
+ * gnus-art.el (article-make-date-line): Don't add extra newlines.
+
+1997-11-27 MORIOKA Tomohiko <morioka@jaist.ac.jp>
+
+ * nnmail.el (nnmail-file-coding-system): Use `raw-text' in
+ default.
+
+ * nnheader.el (nnheader-file-coding-system): Use `raw-text' in
+ default.
+
+Sat Dec 6 17:04:40 1997 Kim-Minh Kaplan <KimMinh.Kaplan@utopia.eunet.fr>
+
+ * nnml.el (nnml-parse-head): Out-of-bounds fix.
+
+ * nndraft.el (nndraft-request-associate-buffer): Get proper file
+ name.
+
+Sat Dec 6 15:35:37 1997 Gary D. Foster <Gary.Foster@Corp.Sun.COM>
+
+ * gnus-group.el: Added backspace.
+
+Thu Nov 27 19:56:59 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-agent.el (gnus-summary-set-agent-mark): Remove marks
+ properly.
+
+1997-11-27 Christoph Wedler <wedler@fmi.uni-passau.de>
+
+ * smiley.el (smiley-buffer): Provide `help-echo'.
+
+Thu Nov 27 17:33:45 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-util.el (gnus-output-to-rmail): Always save buffer.
+
+ * nntp.el (nntp-close-server): Don't sleep for me, Argentina.
+ (nntp-request-close): You neither.
+
+1997-11-19 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * message.el (message-header-lines): New widget.
+ (message-default-headers): Use it.
+ (message-default-mail-headers): Use it.
+ (message-default-news-headers): Use it.
+
+1997-11-24 Andreas Jaeger <aj@arthur.rhein-neckar.de>
+
+ * gnus-start.el (gnus-read-descriptions-file): Add missing quote.
+
+Wed Nov 26 18:19:29 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nnweb.el (nnweb-type-definition): Rescued dejanewsold.
+
+ * gnus-mh.el (gnus-summary-save-in-folder): Reverted to old
+ version.
+
+ * gnus-sum.el (gnus-kill-or-deaden-summary): Save excursion.
+
+ * gnus.el: Only require gnus-load in Emacsen 19.
+
+ * gnus-start.el (gnus-setup-news): Always push archive server.
+
+ * gnus-sum.el (gnus-read-header): Would bug out on sparse
+ articles.
+
+Wed Nov 26 17:50:41 1997 Kurt Swanson <kurt@dna.lth.se>
+
+ * gnus-ems.el (gnus-mule-cite-add-face): Work.
+
+Wed Nov 26 17:40:57 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.17 is released.
+
+Wed Nov 26 16:04:25 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * mm-util.el (mm-content-type-charset): Downcase.
+ * gnus-sum.el (gnus-summary-move-article): Don't work on canceled
+ articles.
-1998-08-31 23:04:29 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * gnus-start.el (gnus-subscribe-hierarchical-interactive): Use
+ `read-char-exclusive'.
- * gnus-art.el (gnus-article-decode-charset): Accept a prefix.
- (gnus-article-decode-charset): Don't fetch all headers.
+ * gnus-sum.el (gnus-summary-mode): Localize
+ gnus-summary-dummy-line-format.
- * mm-util.el (mm-read-coding-system): New function.
+ * nnml.el (nnml-open-nov): Check that the file exists before
+ inserting it.
- * mm-bodies.el (mm-decode-body): Check the right charset.
+ * gnus-art.el (article-date-ut): Insert a newline if needed.
- * gnus-sum.el (gnus-summary-mode-line-format): Ditto.
+ * gnus-score.el (gnus-score-edit-current-scores): Protect against
+ nil score files.
- * gnus-art.el (gnus-article-mode-line-format): Use short group
- format.
+ * gnus-start.el (gnus-newsrc-parse-options): Be more correct --
+ match only hierarchies.
+ (gnus-gnus-to-quick-newsrc-format): Changed warning.
-Mon Aug 31 23:03:13 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+Wed Nov 26 15:47:40 1997 Greg Klanderman <greg@alphatech.com>
- * gnus.el: Pterodactyl Gnus v0.12 is released.
+ * messagexmas.el (message-xmas-maybe-fontify): New definition.
-1998-08-31 22:39:36 Lars Magne Ingebrigtsen <larsi@gnus.org>
+Wed Nov 26 15:43:53 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * mm-bodies.el (mm-decode-body): Don't do charset unless MULE.
+ * gnus-start.el (gnus-setup-news): Protect against nil
+ gnus-message-archive-method.
- * gnus-art.el (gnus-article-decode-charset): Supply cte.
- (gnus-article-decode-charset): Always run.
+1997-11-26 Christoph Wedler <wedler@fmi.uni-passau.de>
- * mm-bodies.el (mm-decode-body): Decode cte.
+ * gnus-art.el (gnus-article-edit-done): Update headers "Lines:",
+ "Content-Length:" and "X-Content-Length:" when present.
-Mon Aug 31 22:14:50 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+Wed Nov 26 15:08:17 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * gnus.el: Pterodactyl Gnus v0.11 is released.
+ * nnmail.el (nnmail-process-unix-mail-format): Pop to the right
+ buffer on error.
+ (nnmail-process-mmdf-mail-format): Ditto.
-1998-08-31 14:27:25 Lars Magne Ingebrigtsen <larsi@gnus.org>
+Wed Nov 26 13:54:04 1997 Joe Reiss <jreiss@sprynet.com>
- * message.el (message-encode-message-body): Ditto.
+ * gnus-art.el (gnus-summary-save-in-rmail): Return the name of the
+ file.
- * gnus-art.el (gnus-article-decode-mime-words): New command and
+Wed Nov 26 13:50:01 1997 Alastair Burt <alastair.burt@dfki.de>
+
+ * smiley.el: Balloon help, etc.
+
+Wed Nov 26 13:45:35 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-util.el (gnus-kill-all-overlays): Remove check for XEmacs.
+
+1997-09-30 Dave Love <d.love@dl.ac.uk>
+
+ * message.el: Don't require rmail.
+
+Wed Nov 26 13:37:50 1997 Kurt Swanson <kurt@dna.lth.se>
+
+ * gnus-group.el (gnus-group-setup-buffer): set-buffer.
+
+Wed Nov 26 13:31:54 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-score.el (gnus-score-load-file): Don't create empty score
+ files when doing decays.
+
+Wed Nov 26 13:28:04 1997 Renaud Rioboo <rioboo@calfor.lip6.fr>
+
+ * nnmail.el (nnmail-move-inbox): Only bind default-directory when
+ calling external function.
+
+Wed Nov 26 13:03:45 1997 IWAMURO Motonori <iwa@mmp.fujitsu.co.jp>
+
+ * gnus-kill.el (gnus-batch-score): Newsrc thinko.
+
+Wed Nov 26 10:31:17 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nnheader.el (nnheader-parse-head): Would break on Message-ID's
+ that spanned several lines.
+
+ * gnus-util.el (gnus-date-iso8601): Didn't pick out the date
+ header.
+
+ * gnus-demon.el (gnus-demon-scan-mail): Clean inboxes.
+
+1997-11-25 Christoph Wedler <wedler@fmi.uni-passau.de>
+
+ * gnus-picon.el (gnus-picons-x-face-sentinel): Would bug out in
+ headers with two X-Face lines.
+
+Wed Nov 26 08:54:26 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-summary-update-info): Would use wrong group
+ name.
+
+1997-11-26 Hrvoje Niksic <hniksic@srce.hr>
+
+ * gnus-spec.el (gnus-compile): Avoid multiple `c*addr's.
+ (gnus-compile): Require `bytecomp'.
+
+1997-11-25 Hrvoje Niksic <hniksic@srce.hr>
+
+ * gnus-util.el (gnus-prin1): Bind `print-readably' to t.
+
+ * gnus-xmas.el (gnus-xmas-kill-all-overlays): New function.
+ (gnus-xmas-define): Use it.
+
+ * gnus-art.el (gnus-stop-date-timer): Use `nnheader-cancel-timer'.
+
+ * message.el (message-header-lines): Specify format.
+
+ * gnus-xmas.el (gnus-xmas-move-overlay): Use BUFFER.
+ (gnus-byte-code): Use `indirect-function'.
+
+ * gnus-cite.el (gnus-cite-add-face): Would assign free variable.
+
+Wed Nov 26 08:31:28 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-art.el (gnus-stop-date-timer): Cancel instead of delete.
+ (gnus-start-date-timer): Use the numerical prefix.
+
+Tue Nov 25 20:03:34 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-draft.el (gnus-group-send-drafts): Activate group first.
+
+Tue Nov 25 19:57:55 1997 Dan Christensen <jdc@chow.mat.jhu.edu>
+
+ * gnus-group.el (gnus-group-process-prefix): Skip topics.
+
+Tue Nov 25 19:54:00 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-move.el (gnus-move-group-to-server): Protect agains
+ nil-ness.
+
+Tue Nov 25 19:03:38 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.16 is released.
+
+Tue Nov 25 16:05:01 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-read-header): Remove thread entry before
+ rebuilding.
+
+ * gnus-cite.el (gnus-cite-add-face): Keep track of all overlays.
+
+ * 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-group.el (gnus-group-read-ephemeral-group): Accept server
+ names.
+
+ * gnus-srvr.el (gnus-browse-foreign-server): Use proper server
+ names.
+
+ * gnus.el (gnus-group-prefixed-name): Give the right result for
+ native groups.
+
+ * nnheader.el (nnheader-directory-files): New function.
+
+ * nnmh.el (nnmh-request-list-1): Reversed check.
+
+ * nnfolder.el (nnfolder-delete-mail): Would skip backwards one
+ line too much.
+
+Tue Nov 25 14:44:02 1997 SeokChan LEE <chan@xfer.kren.nm.kr>
+
+ * message.el (message-ignored-supersedes-headers): Typo.
+
+Mon Nov 24 18:46:37 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.15 is released.
+
+Mon Nov 24 18:07:21 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-ems.el: Also check major version names.
+
+1997-10-05 SL Baur <steve@altair.xemacs.org>
+
+ * message.el (require 'rmail): Put guard around.
+ * nnbabyl.el (require 'rmail): Ditto.
+
+Mon Nov 24 17:36:00 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * message.el (message-reply): Respect Mail-Copies-To even when
+ `to-address'.
+
+Mon Nov 24 17:32:47 1997 Thor Kristoffersen <thor@unik.no>
+
+ * nntp.el (nntp-request-close): Sleep one second.
+
+Mon Nov 24 16:18:19 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-summary-read-group-1): Update marks when not
+ entering group.
+
+ * gnus-start.el (gnus-setup-news): Get correct value of archive
+ server.
+
+Wed Oct 8 20:29:35 1997 Robert Bihlmeyer <robbe@orcus.priv.at>
+
+ * message.el (message-make-organization): Don't let the
+ environment variable override a user-set organization.
+
+Mon Nov 24 14:09:00 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nnml.el (nnml-open-nov): Don't use find-file.
+
+ * 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.
+
+ * nnml.el (nnml-parse-head): Work in empty buffers.
+
+1997-10-14 Hrvoje Niksic <hniksic@srce.hr>
+
+ * gnus-xmas.el (gnus-xmas-group-startup-message): Check for image
+ formats correctly.
+ (gnus-xmas-modeline-glyph): Ditto.
+
+Mon Nov 24 13:58:12 1997 Hrvoje Niksic <hniksic@srce.hr>
+
+ * gnus-spec.el (gnus-compile): Work under XEmacs.
+
+Mon Nov 24 07:15:45 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nnoo.el (nnoo-change-server): Push the right parent packend onto
+ the alist.
+
+Sun Nov 23 16:21:41 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.14 is released.
+
+Sun Nov 23 14:04:07 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-start.el (gnus-read-descriptions-file): Make sure Mule is
+ bound. And gagged.
+
+ * message.el (message-send-mail-with-mh): Use
+ `mh-new-draft-name'.
+
+ * nnfolder.el (nnfolder-read-folder): Save new buffers.
+
+ * gnus-sum.el (gnus-summary-make-menu-bar): Removed "write to
+ file".
+
+ * gnus-util.el (gnus-byte-code): Use indirect-function.
+
+ * nntp.el (nntp-open-telnet): Also accept 201.
+
+ * gnus-sum.el (gnus-summary-reparent-thread): Update thread.
+
+ * gnus-score.el (gnus-all-score-files): Don't do anything unless
+ GROUP.
+
+ * nnmail.el (nnmail-split-it): Save-excursion.
+ (nnmail-group-pathname): Translate file chars.
+
+Sun Nov 23 13:41:10 1997 Gunnar Horrigmo <horrigmo@online.no>
+
+ * gnus-sum.el (gnus-summary-exit): Don't skip if group
+ disappeared.
+
+Sun Nov 23 13:32:55 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nnfolder.el (nnfolder-normalize-buffer): New function.
+ (nnfolder-save-mail): Use it.
+ (nnfolder-request-replace-article): Ditto.
+
+1997-11-19 Per Abrahamsen <abraham@dina.kvl.dk>
+
+ * message.el (message-header-lines): New widget.
+ (message-default-headers): Use it.
+ (message-default-mail-headers): Use it.
+ (message-default-news-headers): Use it.
+
+Sun Nov 23 12:44:38 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-win.el (gnus-remove-some-windows): Also delete dead summary
+ windows.
+
+ * gnus-score.el (gnus-score-adaptive): Check whether functions are
+ bound.
+
+Sun Nov 23 12:15:00 1997 Hallvard B. Furuseth <h.b.furuseth@usit.uio.no>
+
+ * gnus-sum.el (gnus-summary-limit-include-thread): Interactive
+ fix.
+
+Sun Nov 23 07:06:58 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-summary-reparent-thread): Insert Message-ID in
+ proper place.
+
+Sat Nov 22 18:30:33 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-cus.el (gnus-group-parameters): Add visible.
+
+Sat Nov 22 18:19:39 1997 Kim-Minh Kaplan <kkaplan@lpthe.jussieu.fr>
+
+ * message.el (message-setup): Add a newline, if necessary.
+
+Sat Nov 22 18:04:34 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-mh.el (gnus-summary-save-in-folder): Fix for default.
+
+Sat Nov 22 18:01:26 1997 Didier Verna <verna@inf.enst.fr>
+
+ * gnus-sum.el (gnus-summary-remove-bookmark): Interactive spec.
+
+Mon Nov 17 23:50:51 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-art.el (article-display-x-face): Fold case.
+
+Thu Nov 13 22:57:23 1997 Kenichi Handa <handa@etl.go.jp>
+
+ * gnus/gnus-start.el (gnus-read-descriptions-file): Decode
+ description if necessary.
+
+ * gnus/nntp.el (nntp-coding-system-for-read): Set default value to
+ binary.
+ (nntp-coding-system-for-write): Likewise.
+
+Thu Nov 13 22:30:19 1997 seokchan lee <chan@xfer.kren.nm.kr>
+
+ * message.el (message-ignored-supersedes-headers): Ignore more
+ headers.
+
+Thu Nov 13 22:28:13 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * message.el (message-separator-face): Lightened up.
+ (message-header-other-face): Ditto.
+
+Thu Nov 13 22:22:11 1997 jari aalto <jari.aalto@poboxes.com>
+
+ * nnmail.el (nnmail-process-mmdf-mail-format): Pop to buffer.
+
+Thu Nov 13 22:09:39 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-start.el (gnus-start-draft-setup): Always create group.
+
+ * gnus-agent.el (gnus-agent-fetch-headers): Translate file chars.
+
+Thu Nov 6 20:43:05 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.13 is released.
+
+Thu Nov 6 20:30:14 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nnlistserv.el: New backend.
+
+Thu Nov 6 01:53:51 1997 Stefan Waldherr <swa@cs.cmu.edu>
+
+ * nnweb.el (nnweb-dejanewsold-search): New function.
+
+Thu Nov 6 01:52:43 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-topic.el (gnus-topic-change-level): Really delete multiple
+ instances.
+
+Wed Nov 5 14:04:54 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-topic.el (gnus-topic-update-topic-line): Possibly fix nil
+ numbers.
+
+ * gnus-sum.el (gnus-summary-show-article): New command and
+ keystroke.
+
+Tue Nov 4 06:29:58 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-score.el (gnus-score-adaptive): Use the home score file.
+
+Sat Oct 25 05:52:22 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-art.el (gnus-article-save): Hide headers in the right
+ buffer.
+
+ * gnus-picon.el (gnus-picons-xbm-face): New face.
+
+Sat Oct 25 00:39:42 1997 Lars Balker Rasmussen <lbr@mjolner.dk>
+
+ * gnus-art.el (gnus-article-fill-paragraph): New command and
keystroke.
- (gnus-article-decode-charset): Ditto.
- (gnus-article-decode-charset): Only work under MULE.
- * mm-util.el (mm-content-type-charset): New function.
+1997-10-16 Colin Rafferty <craffert@ml.com>
+
+ * message.el (message-make-fqdn): Made certain that user-mail is
+ not nil.
+
+Sat Oct 25 00:18:32 1997 David S. Goldberg <dsg@linus.mitre.org>
+
+ * gnus-art.el (article-hide-boring-headers): Use many-to.
+
+Fri Oct 24 23:48:39 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * 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.
+
+Mon Oct 13 00:01:35 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-agent.el (gnus-agent-group-path): Translate file chars.
+ (gnus-agent-batch-fetch): New command.
+ (gnus-agent-fetch-group): Message.
+
+Sun Oct 12 23:54:55 1997 ISO-2022-JP <ichikawa@hv.epson.co.jp>
+
+ * gnus-agent.el (gnus-agent-article-file-coding-system): New
+ variable.
+
+Sun Oct 12 16:46:11 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * dgnushack.el (lpath): Reversed.
+
+ * gnus-msg.el (gnus-summary-cancel-article): Use sym prefix.
+
+ * gnus-art.el (article-translate-characters): New function.
+ (article-treat-dumbquotes): New command and keystroke.
+
+Sun Oct 5 20:09:31 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-art.el (gnus-button-alist): No ' and " in News:.
+
+ * gnus-msg.el (gnus-inews-insert-archive-gcc): Comp warn.
+
+Sat Oct 4 00:53:55 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.12 is released.
+
+Sat Oct 4 00:16:39 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.el (gnus-plugged): Moved here.
+
+ * nnmail.el (nnmail-delete-incoming): Changed default to nil.
+
+ * gnus-int.el (gnus-request-scan): Don't do anything if
+ unplugged.
+
+Fri Oct 3 21:09:19 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-art.el (gnus-ignored-headers): Doc fix.
+
+ * gnus-demon.el (gnus-demon-add-nntp-close-connection): New
+ function.
+ (gnus-demon-nntp-close-connection): Ditto.
+
+ * nntp.el (nntp-last-command-time): New variable.
+ (nntp-retrieve-data): Use it.
+
+ * message.el (message-news-p): Messages with Posted-To aren't
+ news.
+ (message-mode): Heed message-yank-prefix when filling.
+
+ * nndraft.el (nndraft-request-restore-buffer): Remove Xrefs and
+ Lines headers.
+
+ * nntp.el (nntp-encode-text): Encode according to RFC977.
+
+Wed Oct 1 18:27:26 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-msg.el (gnus-inews-insert-archive-gcc): gcc-self didn't
+ work if `gnus-message-archive-method' was nil.
+
+ * nnmail.el (nnmail-article-group): Allow \\1 substitution.
+
+Sat Sep 27 12:57:44 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-salt.el (gnus-pick-mouse-pick-region): Use it.
+
+ * gnus-xmas.el (gnus-xmas-window-edges): New function.
+
+ * gnus-score.el (gnus-score-edit-current-scores): Don't select
+ window.
+
+Sat Sep 27 12:52:31 1997 Hallvard B. Furuseth <h.b.furuseth@usit.uio.no>
+
+ * messcompat.el ((boundp 'mail-mode-hook)): Check.
+
+Sat Sep 27 09:22:15 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nndraft.el (nndraft-possibly-change-group): Always open server.
+
+ * gnus-sum.el (gnus-summary-pop-article): Force.
+
+ * gnus-art.el (gnus-article-prepare): Push the article onto the
+ history.
+
+ * gnus-sum.el (gnus-summary-pop-article): Pop to the right
+ article.
+
+ * gnus-demon.el (gnus-demon-scan-news): Save excursion.
+
+Sat Sep 27 09:06:55 1997 Hallvard B. Furuseth <h.b.furuseth@usit.uio.no>
+
+ * gnus-cache.el (gnus-summary-limit-include-cached): New command
+ and keystroke.
+
+Sat Sep 27 06:45:58 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-uu.el (gnus-uu-invert-processable): Make interactive.
+
+Sat Sep 27 06:43:38 1997 Kim-Minh Kaplan <kimminh.kaplan@utopia.eunet.fr>
- * nnmail.el (nnmail-delete-incoming): Changed to nil.
+ * gnus-picon.el: Doc fixes.
- * 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.
+1997-09-23 Hrvoje Niksic <hniksic@srce.hr>
- * mm-bodies.el (mm-body-encoding): New function.
+ * gnus.el: Removed definition of `custom-face-lookup'.
- * message.el (message-encode-message-body): New function.
+Sat Sep 27 05:36:11 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * mm-bodies.el: New file.
+ * nndraft.el: Would block nnmh.
- * mm-util.el (mm-narrow-to-head): New function.
+ * gnus-sum.el (gnus-mark-article-as-unread): Don't allow marking
+ negative articles.
- * rfc2047.el (rfc2047-encode): Use it.
+ * gnus-group.el (gnus-fetch-group): Use `gnus-no-server'.
- * mm-util.el: Provide mm-encode-coding-region.
+ * gnus-agent.el (gnus-agent-with-fetch): Moved.
- * gnus-sum.el (gnus-summary-mode): Enable multibyte.
+ * gnus-sum.el (gnus-nov-read-integer): Really skip to next field.
- * gnus-util.el (gnus-set-work-buffer): Enable multibyte.
+Sat Sep 27 04:32:45 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
- * mm-util.el (mm-enable-multibyte): New function.
+ * gnus.el: Quassia Gnus v0.11 is released.
- * message.el (message-set-work-buffer): Set multibyte.
+Sat Sep 27 03:50:12 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * gnus.el (gnus-continuum-version): Be valid forever and ever.
+ * message.el (message-send): Post without asking.
+ (message-mode): Modify paragraphs-start and paragraph-separate.
+ (message-newline-and-reformat): New command and keystroke.
- * gnus-util.el (gnus-point-at-eol): Removed.
- (gnus-point-at-bol): Ditto.
+Thu Sep 25 00:13:41 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * base64.el (base64-decode-region): Commented out messaging.
+ * nnmail.el (nnmail-activate): Init server buffer.
-1998-08-31 Didier Verna <verna@inf.enst.fr>
+Wed Sep 24 04:11:59 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * 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-draft.el (gnus-draft-setup): Inexplicable binding problem
+ worked around.
-1998-08-31 12:53:32 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * nnsoup.el (nnsoup-always-save): Renamed.
- * gnus.el (gnus-article-display-hook): Added
- gnus-article-decode-rfc1522 to hook.
+Wed Sep 24 04:11:02 1997 Nelson Jose dos Santos Ferreira <Nelson.Ferreira@inesc.pt>
-Mon Aug 31 12:43:46 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.10 is released.
+Wed Sep 24 02:30:44 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-1998-08-31 11:45:13 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * gnus-ems.el (gnus-deactivate-mark): New alias.
- * nnfolder.el (nnfolder-delete-mail): Narrow to mail and allow
- hook to be run.
+Tue Sep 23 07:56:07 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-1998-08-30 17:59:07 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * gnus.el: Win-away!
- * rfc2047.el (rfc2047-encodable-p): Use find-charset-region.
+ * gnus-msg.el (gnus-setup-message): Don't trust make-symbol.
- * mm-util.el (mm-charsets-in-region): Removed.
+Tue Sep 23 07:45:11 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
- * rfc2047.el: Renamed file.
+ * gnus.el: Quassia Gnus v0.10 is released.
- * gnus-msg.el (gnus-copy-article-buffer): Multibyte.
+Tue Sep 23 01:41:04 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * message.el (message-mode): Set multibyte.
+ * 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-util.el (mm-charsets-in-region): Copied here.
+ * gnus-nocem.el (gnus-nocem-message-wanted-p): New function.
+ (gnus-nocem-check-article): Use it.
+ (gnus-nocem-issuers): Dox ofx.
- * gnus-util.el: Removed gnus-truncate-string.
+ * dgnushack.el (dgnushack-compile): Check for cus-edit.
- * gnus-art.el (gnus-article-decode-mime-words): Use 1522.
+ * message.el (message-included-forward-headers): Include Mime
+ headers.
+ (message-send): Allow posting without confirming from Agent.
- * rfc1522.el (rfc1522-unencoded-charsets): New variable.
- (rfc1522-encodable-p): New function.
- (rfc1522-encode-message-header): Use it.
+Mon Sep 22 05:43:14 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
-Sun Aug 30 17:46:01 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+ * dgnushack.el (byte-compile-warnings): Don't warn about obsolete
+ variables.
- * gnus.el: Pterodactyl Gnus v0.9 is released.
+ * 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.
+
+Sun Sep 21 23:54:50 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.9 is released.
+
+Sun Sep 21 23:38:46 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.el (gnus-splash-face): ForestGreen everywhere.
+
+ * gnus-sum.el (gnus-simplify-subject-fully): Use new variable.
+ (gnus-general-simplify-subject): Ditto.
+
+Sun Sep 21 23:34:13 1997 Kurt Swanson <kurt@dna.lth.se>
+
+ * gnus-sum.el (gnus-simplify-subject-functions): New variable.
+ (gnus-simplify-whitespace): New function.
+
+ * gnus-util.el (gnus-map-function): New function.
+
+Sun Sep 21 23:22:04 1997 Michelangelo Grigni <mic@mathcs.emory.edu>
+
+ * gnus-score.el (gnus-score-regexp-bad-p): New function.
+
+Sun Sep 21 00:14:40 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-score.el (gnus-summary-lower-score): Use sym pref.
+ (gnus-summary-increase-score): Use it.
+
+ * gnus.el (gnus-current-prefix-symbol): New variable.
+ (gnus-current-prefix-symbols): New variable.
+
+ * gnus-score.el (gnus-summary-increase-score): Take symbolic
+ prefix.
+
+ * gnus.el (gnus-interactive): Removed.
+ (gnus-interactive): Renamed from gnus-interactive-1.
+ (gnus-symbolic-argument): New command.
-1998-08-30 16:13:08 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * gnus-draft.el (gnus-draft-send-message): Disable message
+ checks.
+ (gnus-draft-send): Ditto.
+ (gnus-draft-setup): Don't save buffer.
- * mm-util.el: Shadow encode-coding-string.
+ * dgnushack.el (dgnushack-compile): Warn people about Custom.
- * base64.el (base64-encode-region): Don't add newline.
+ * gnus-group.el (gnus-group-iterate): Use gensymmed variables.
- * rfc1522.el (rfc1522-narrow-to-field): Copied here.
+ * pop3.el (pop3-md5): `with-temp-buffer' doesn't exist in Emacs
+ 19.34.
- * mm-util.el: New file.
+ * nneething.el (nneething-directory): Defvarred.
- * mm-decode.el: Somewhat depleted.
- * mm-encode.el: Ditto.
+ * message.el: Autoloaded nndraft things.
+ (message-set-auto-save-file-name): Use it.
- * rfc1522.el: New file.
+ * dgnushack.el (dgnushack-compile): Warn about things.
- * mm-util.el (mm-replace-chars-in-string): Copied here.
+ * gnus-art.el: Autoload w3-region.
- * mm-encode.el (mm-q-encode-region): New function.
+ * gnus-vm.el (gnus-summary-save-in-vm): Simplified.
- * qp.el (quoted-printable-encode-region): Take an optional CLASS
+ * gnus.el: Changed `compiled-function-p' to `byte-code-function-p'
+ throughout.
+
+ * gnus-sum.el (gnus-summary-edit-article): Supply additional
param.
- * mm-encode.el (mm-encode-word-region): Downcase.
+ * gnus-group.el (gnus-group-iterate): Undo bogus change.
+
+ * gnus-agent.el (gnus-agentize): Just call gnus-open-agent
+ directly.
+
+ * gnus.el (gnus-interactive): New macro.
+ (gnus-interactive-1): New function.
+
+ * 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-art.el (gnus-article-edit-done): Accept a prefix arg.
+ (gnus-boring-article-headers): Allow `long-to' param.
+ (article-hide-boring-headers): Use it.
+
+ * gnus-sum.el (gnus-summary-edit-article-done): Accept a
+ no-highlight param.
+
+ * nntp.el (nntp-rlogin-program): New variable.
+ (nntp-open-rlogin): Use it.
+
+ * nnvirtual.el (nnvirtual-request-post): New function.
-Sun Aug 30 15:28:01 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+ * gnus-msg.el (gnus-message-group-art): New variable.
- * gnus.el: Pterodactyl Gnus v0.8 is released.
+ * gnus-draft.el (gnus-draft-setup): Don't use message-setup.
-1998-08-30 12:23:03 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * nndraft.el (nndraft): Allow editing articles.
- * message.el (message-send-mail): Encode headers.
+ * gnus-ems.el (gnus-x-splash): Ditto.
- * qp.el (quoted-printable-encode-region): Encode 8-bit words.
- (quoted-printable-encode-region): Upcase.
+ * gnus.el (gnus-splash-face): Darker face.
- * message.el (message-default-charset): New variable.
+ * gnus-draft.el (gnus-draft-setup): Clobbered variables.
- * qp.el (quoted-printable-encode-region): Optional param FOLD.
+Sat Sep 20 23:23:49 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
- * message.el (message-narrow-to-field): Changed name.
+ * gnus.el: Quassia Gnus v0.8 is released.
- * mm-encode.el: New file.
+Sat Sep 20 20:41:16 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * message.el (message-narrow-to-header): New function.
+ * gnus-start.el (gnus-setup-news-hook): New hook.
- * gnus-art.el (gnus-article-decode-mime-words): Place point in the
- right buffer.
+ * gnus-agent.el (gnus-agentize): Really set up queue group.
+ (gnus-open-agent): Setup queue here.
-Sun Aug 30 12:15:54 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+Sat Sep 20 20:23:07 1997 Matt Simmons <simmonmt@acm.org>
- * gnus.el: Pterodactyl Gnus v0.7 is released.
+ * message.el (message-set-auto-save-file-name): Make things work
+ without drafts.
-1998-08-30 01:26:12 Lars Magne Ingebrigtsen <larsi@gnus.org>
+Sat Sep 20 18:32:02 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * gnus.el: Remove autoload for
- gnus-article-mime-decode-quoted-printable.
+ * nnmh.el (nnmh-request-list-1): Check for links to ".".
- * mm-decode.el (mm-charset-to-coding-system): Allow iso-8859-1 to
- be decoded in non-MULE Emacsen.
+ * nndraft.el (nndraft-possibly-change-group): New function.
- * gnus-xmas.el (gnus-xmas-logo-color-alist): More brown.
+ * gnus-agent.el (gnus-agent-queue-setup): New function.
-1998-08-29 SL Baur <steve@altair.xemacs.org>
+Thu Sep 18 04:54:59 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
- * gnus-xmas.el (gnus-xmas-logo-color-alist): Try shades of brown.
+ * gnus.el: Quassia Gnus v0.7 is released.
-1998-08-30 01:04:57 Lars Magne Ingebrigtsen <larsi@gnus.org>
+Thu Sep 18 03:33:54 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * mm-decode.el: Check for coding-system-list.
+ * gnus-msg.el (gnus-setup-message): Slap a progn around forms.
-Sun Aug 30 00:59:15 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+ * nndraft.el (nndraft-articles): Make sure directory exists.
- * gnus.el: Pterodactyl Gnus v0.6 is released.
+ * message.el (message-mode): Don't delete article.
-1998-08-30 00:36:28 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * nnmh.el (nnmh-request-accept-article): Don't save when
+ noinsert.
- * nnheader.el (fboundp): Protect code-coding-string.
+Wed Sep 17 03:37:59 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * gnus-art.el (gnus-article-mode): Check that set-buffer-multibyte
- is available.
+ * nndraft.el (nndraft-directory): Changed defaults.
-Sat Aug 29 23:24:31 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+ * gnus-agent.el (gnus-agent-fetch-session): Bind command method.
- * gnus.el: Pterodactyl Gnus v0.5 is released.
+Wed Sep 17 03:28:36 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
-1998-08-29 22:38:35 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * gnus.el: Quassia Gnus v0.6 is released.
- * gnus-art.el (gnus-article-mode): Make article buffer multibyte.
- (gnus-hack-decode-rfc1522): Removed.
+1997-08-17 SL Baur <steve@altair.xemacs.org>
- * mm-decode.el (mm-charset-coding-system-alist): Check better.
+ * dgnushack.el (dgnushack-compile): Ignore .el files beginning
+ with an `=' character.
-Sat Aug 29 22:20:39 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+Wed Sep 17 02:30:04 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * gnus.el: Gnus v0.4 is released.
+ * gnus-sum.el (gnus-build-sparse-threads): Allow display of looped
+ References.
-1998-08-29 20:53:29 Lars Magne Ingebrigtsen <larsi@gnus.org>
+ * gnus-agent.el (gnus-agent-fetch-group-1): Separated out into
+ function.
- * gnus-art.el (gnus-article-decode-mime-words): New command and
+ * message.el (message-delete-not-region): New command and
keystroke.
- * qp.el (quoted-printable-decode-region): Don't use hexl.
+Tue Sep 16 00:58:26 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * nndraft.el (nndraft-directory): Changed value.
+
+ * message.el (message-kill-buffer): Disassociate draft.
+ (message-mode): Use kill hook to disassociate.
+ (message-disassociate-draft): Double-check.
+
+ * gnus-agent.el (gnus-agentize): Don't set twice.
+
+ * gnus-art.el (gnus-article-prepare): Go to the right line before
+ marking.
+
+ * gnus-start.el: Renamed the drafts group.
+
+ * gnus-agent.el (gnus-agent-lib-file): Changed name of directory.
+
+ * gnus-draft.el (gnus-draft-mode): Simplify.
+
+Tue Sep 16 00:18:11 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.5 is released.
+
+Mon Sep 15 00:53:50 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-alter-header-function): New variable.
+ (gnus-nov-parse-line): Use it.
+ (gnus-get-newsgroup-headers): Ditto.
+
+ * gnus-draft.el (gnus-group-send-drafts): Don't send when
+ unplugged.
+
+ * gnus-sum.el (gnus-summary-read-group): Don't show-all when
+ skipping groups.
+
+ * gnus-start.el (gnus-start-draft-setup): Changed name.
+
+Mon Sep 15 00:40:09 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.4 is released.
+
+Mon Sep 15 00:19:07 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-summary-goto-article): Accept Message-ID's.
+
+Sun Sep 14 21:41:35 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-sum.el (gnus-group-make-articles-read): No params.
+
+ * nndraft.el (nndraft-status-string): Fix.
+
+ * gnus-draft.el (gnus-group-send-drafts): New command.
+
+ * gnus-sum.el (gnus-compute-read-articles): Separated.
+ (gnus-update-read-articles): Allow computation.
+
+ * nndraft.el (nndraft-articles): New function.
+
+ * message.el (message-send): Disabled test.
+
+Sun Sep 14 21:17:34 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+
+ * gnus.el: Quassia Gnus v0.3 is released.
+
+Sun Sep 14 01:51:45 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus-agent.el (gnus-agent-short-article): New variables.
+
+ * message.el (message-set-auto-save-file-name): Use drafts.
+
+ * nndraft.el (nndraft-request-expire-articles): Use it.
+
+ * nnmh.el (nnmh-deletable-article-p): Change.
+ (nnmh-allow-delete-final): New variable.
+
+ * gnus-msg.el (gnus-summary-send-draft): Removed.
+
+ * gnus.el (gnus-article-mark-lists): Save unsendable marks.
+
+ * gnus-sum.el (gnus-newsgroup-unsendable): New variable.
+
+ * gnus-draft.el: New file.
+
+ * gnus-sum.el (gnus-unsendable-mark): New variable.
+
+ * nndraft.el (nndraft-execute-nnmh-command): Cleanup.
+
+ * message.el (message-send-news): Use `gnus-request-post'.
+
+ * gnus-agent.el (gnus-agentize): New command.
- * gnus-xmas.el (gnus-xmas-logo-color-style): Changed to dino.
+ * gnus-bcklg.el (gnus-backlog-remove-article): Remove the ident
+ from the list.
- * gnus-sum.el (gnus-parse-headers-hook): Default to nil.
- (gnus-structured-field-decoder): Removed.
- (gnus-unstructured-field-decoder): Ditto.
+Sun Sep 14 00:26:47 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
- * mm-decode.el: New file.
+ * gnus.el: Quassia Gnus v0.2 is released.
- * qp.el: New file.
+Sun Sep 14 00:24:52 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * gnus-art.el (article-mime-decode-quoted-printable): Removed.
+ * gnus-score.el (gnus-score-headers): Make sure the summary buffer
+ exists.
- * gnus-ems.el (fboundp): Removed gnus-split-string.
+Sat Sep 13 23:35:28 1997 Greg Stark <gsstark@mit.edu>
- * gnus.el (gnus-splash-face): Doc fix.
+ * gnus-ems.el (gnus-x-splash): New function.
- * gnus-ems.el (fboundp): Don't bind mail-file-babyl-p.
+Sat Sep 13 22:46:16 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * gnus-art.el (article-mime-decode-quoted-printable): Don't use
- hexl.
+ * gnus-start.el (gnus-1): Use it.
- * nnheader.el (nnheader-temp-write): Removed.
+ * gnus-ems.el (gnus-decode-coding-string): New alias.
-Sat Aug 29 20:34:17 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+ * message.el (message-unix-mail-delimiter): Dox fox.
- * gnus.el: Gnus v0.3 is released.
+ * nnmh.el (nnmh-request-list-1): Don't use coding system.
-Sat Aug 29 19:32:06 1998 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+ * gnus-sum.el (gnus-summary-catchup): Reverse logic.
- * gnus.el: Gnus v0.2 is released.
+Sat Sep 13 21:21:38 1997 Lars Magne Ingebrigtsen <larsi@menja.ifi.uio.no>
+ * gnus.el: Quassia Gnus v0.1 is released.
+++ /dev/null
-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 *~
-
all:
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"
-
clever:
$(EMACS) $(FLAGS) -f dgnushack-compile
;;; Boston, MA 02111-1307, USA.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(require 'mm-util)
-
;; For non-MULE
(if (not (fboundp 'char-int))
(fset 'char-int 'identity))
(defun base64-decode-region (start end)
(interactive "r")
- ;;(message "Decoding base64...")
+ (message "Decoding base64...")
(let ((work-buffer nil)
(done nil)
(counter 0)
(insert-buffer-substring work-buffer)
(delete-region (point) end))
(and work-buffer (kill-buffer work-buffer))))
- ;;(message "Decoding base64... done")
- )
+ (message "Decoding base64... done"))
(defun base64-encode-region (start end)
(interactive "r")
(base64-insert-char (aref alphabet (logand (lsh bits -6) 63))
1 nil work-buffer)
(base64-insert-char ?= 1 nil work-buffer)))
- ;;;!!! LMI removed this, because he didn't like having
- ;;;!!! newlines added to the end of the encoding.
- ;;(if (> cols 0)
- ;; (base64-insert-char ?\n 1 nil work-buffer))
- )
+ (if (> cols 0)
+ (base64-insert-char ?\n 1 nil work-buffer)))
(or (markerp end) (setq end (set-marker (make-marker) end)))
(goto-char start)
(insert-buffer-substring work-buffer)
(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/>.
;;; Commentary:
-;; DRUMS is an IETF Working Group that works (or worked) on the
+;; DRUMS is and IETF Working Group that works (or worked) on the
;; successor to RFC822, "Standard For The Format Of Arpa Internet Text
;; Messages". This library is based on
;; draft-ietf-drums-msg-fmt-05.txt, released on 1998-08-05.
;;; Code:
-(require 'time-date)
+(require 'date)
(defvar drums-no-ws-ctl-token "\001-\010\013\014\016-\037\177"
"US-ASCII control characters excluding CR, LF and white space.")
-;;; 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>
(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."
;;; 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)
(defvar gnus-agent-send-mail-function nil)
(defvar gnus-agent-article-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.")
-
;; Dynamic variables
(defvar gnus-headers)
(defvar gnus-score)
(gnus-agent-read-servers)
(gnus-category-read)
(setq gnus-agent-overview-buffer
- (gnus-get-buffer-create " *Gnus agent overview*"))
+ (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))
(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)))))
(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)))))
(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))))
;;;
(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)) "\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."
(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)
;; 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))
(let ((dir (concat
(gnus-agent-directory)
(gnus-agent-group-path group) "/"))
- (date (time-to-day (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-file nil
- (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))
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)
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))))
+(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.
(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))
- (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)
- (gnus-agent-enter-history
- "last-header-fetched-for-session"
- (list (cons group (nth (- (length articles) 1) articles)))
- (time-to-day (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)
(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."
(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))
(let ((gnus-command-method method)
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)
(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)))
(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)))
(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."
(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 ()
"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)
"Expire all old articles."
(interactive)
(let ((methods gnus-agent-covered-methods)
- (day (- (time-to-day (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
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)
(< 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)))
(delete-file file))
;; Schedule the history line for nuking.
(push (cdr elem) histories)))
- (gnus-make-directory (file-name-directory nov-file))
(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))
(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 (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 (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 '<)))
(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 ()
-;;; 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 '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."
: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
:group 'gnus-article-mime
:type 'boolean)
-(defcustom gnus-show-mime-method 'metamail-buffer
- "Function to process a MIME message.
+(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-decode-encoded-word-method 'gnus-article-de-quoted-unreadable
- "*Function to decode MIME encoded words.
+(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)
: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
(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)
(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."
(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)
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)
(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))
((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)
(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)
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))
(process-send-region "article-x-face" beg end)
(process-send-eof "article-x-face"))))))))))
-(defun gnus-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)
- (rfc2047-decode-region (point-min) (point-max)))))
-
-(defun gnus-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
- (set-buffer gnus-article-buffer)
- (save-restriction
- (message-narrow-to-head)
- (let* ((inhibit-point-motion-hooks t)
- (ct (message-fetch-field "Content-Type" t))
- (cte (message-fetch-field "Content-Transfer-Encoding" t))
- (charset (cond
- (prompt
- (mm-read-coding-system "Charset to decode: "))
- (ct
- (mm-content-type-charset ct))
- (gnus-newsgroup-name
- (gnus-group-find-parameter
- gnus-newsgroup-name 'charset))))
- buffer-read-only)
- (goto-char (point-max))
- (widen)
- (narrow-to-region (point) (point-max))
- (when (or (not ct)
- (string-match "text/plain" ct))
- (mm-decode-body
- charset (and cte (intern (downcase
- (gnus-strip-whitespace cte))))))))))
-
-(defalias 'gnus-decode-rfc1522 'article-decode-rfc1522)
-(defalias 'gnus-article-decode-rfc1522 'article-decode-rfc1522)
-(defun article-decode-rfc1522 ()
- "Remove QP encoding from headers."
- (let ((inhibit-point-motion-hooks t)
- (buffer-read-only nil))
- (save-restriction
- (message-narrow-to-head)
- (rfc2047-decode-region (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")))
- (gnus-article-decode-rfc1522)
- (when (or force
- (and type (string-match "quoted-printable" (downcase type))))
- (goto-char (point-min))
- (search-forward "\n\n" nil 'move)
- (quoted-printable-decode-region (point) (point-max))))))
-
-(defun article-mime-decode-quoted-printable-buffer ()
- "Decode Quoted-Printable in the current buffer."
- (quoted-printable-decode-region (point-min) (point-max)))
+(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.
(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))
+ (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))))))
(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 (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)))))
+ (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.
(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
(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
;; functions since they aren't particularly resistant to
;; buggy dates.
((eq type 'local)
- (concat "Date: " (current-time-string (date-to-time date))))
+ (concat "Date: " (condition-case ()
+ (timezone-make-date-arpa-standard date)
+ (error date))))
;; Convert to Universal Time.
((eq type 'ut)
(concat "Date: "
- (current-time-string
- (let ((e (parse-time-string date)))
- (setcar (last e) 0)
- (encode-time e)))))
+ (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 (date-to-time date))
+ (funcall
+ gnus-article-time-format
+ (ignore-errors
+ (gnus-encode-date
+ (timezone-make-date-arpa-standard
+ date nil "UT"))))
(concat
"Date: "
- (format-time-string gnus-article-time-format (date-to-time date)))))
+ (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" (date-to-time 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 (subtract-time now (date-to-time date)))
+ (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))))
(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 ()
(save-excursion
(save-restriction
(widen)
- (rmail-output-to-rmail-file filename))))
+ (gnus-output-to-rmail filename))))
filename)
(defun gnus-summary-save-in-mail (&optional filename)
(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)
(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
["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 ""
["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
(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-page-broken)
+ (make-local-variable 'gnus-button-marker-list)
+ (make-local-variable 'gnus-article-current-summary)
(gnus-set-default-directory)
(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 ()
(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 (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)
(current-buffer)))))
(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.
(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)
(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)
(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)
(or all-headers gnus-show-all-headers))))
(when (or (numberp article)
(stringp article))
- ;; Hooks for getting information from the article.
- ;; This hook must be called before being narrowed.
- (let (buffer-read-only)
- (gnus-run-hooks 'gnus-tmp-internal-hook)
+ (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)
- ;; Decode MIME message.
- (when gnus-show-mime
- (if (or (not gnus-strict-mime)
- (gnus-fetch-field "Mime-Version"))
- (let ((coding-system-for-write 'binary)
- (coding-system-for-read 'binary))
- (funcall gnus-show-mime-method))
- (funcall gnus-decode-encoded-word-method)))
+ ;; 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.
(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-wash-status ()
(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)
(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.
(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)))
(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)
(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)
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))))))))
(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)))
;; 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 (current-buffer))
- (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))))
-
;; 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))
(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)
(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))))
(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))
;; 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
(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
- gnus-type annotation))))
+ gnus-callback gnus-article-button-prev-page))))
(defvar gnus-next-page-map nil)
(unless gnus-next-page-map
(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
- gnus-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."
(gnus-article-prev-page)
(select-window win)))
+
+;;; @ 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)
(provide 'gnus-art)
"Return the backlog buffer."
(or (get-buffer gnus-backlog-buffer)
(save-excursion
- (set-buffer (gnus-get-buffer-create gnus-backlog-buffer))
+ (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 ()
: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.
(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))
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
(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.
(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)
;; 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
(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"))
(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)
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)))
(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))
(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))
;; 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
(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))
(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)
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.
(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 ()
-;;; 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.
;;; 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)
"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))
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)
-;;; 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.
(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)
(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))))
;; `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
(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:
(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/"
["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]))
(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 ()
(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))))
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))
(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
(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.
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)))
(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
(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)))))
(gnus-read-group "Group name: ")
(gnus-read-method "From method: ")))
- (when (stringp method)
- (setq method (gnus-server-to-method method)))
(let* ((meth (when (and method
(not (gnus-server-equal method gnus-select-method)))
(if address (list (intern method) address)
(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)))
(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)
"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)
(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)))))
;; 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.
(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)))))
(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)
(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)
(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.
(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."
(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))))
;; 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)))
"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))))
--- /dev/null
+;;; 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
(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
(gnus-group-real-name group) article))))
(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)))
()
(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))))
(?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=:]*\\)"))
;; 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))
(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.
(not (consp (cdadr (nth 2 object))))))
(concat "\n" (gnus-prin1-to-string object))
(save-excursion
- (set-buffer (gnus-get-buffer-create "*Gnus PP*"))
+ (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)))
((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)))))
(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
-;;; 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.
(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)
(,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)
(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))))
;;; 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 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.
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))
;; 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*"))
+ (setq gnus-article-copy (get-buffer-create " *gnus article copy*"))
(buffer-disable-undo gnus-article-copy)
- (save-excursion
- (set-buffer gnus-article-copy)
- (mm-enable-multibyte))
+ (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")
(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
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)))
+ (gnus-post-method
gnus-post-method)
;; Use the normal select method.
(t gnus-select-method))))
;;; 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-version
- "/"
- (cond
- ((string-match "^\\([0-9]+\\.[0-9]+\\)\\.[.0-9]+$" emacs-version)
- (concat "Emacs " (substring emacs-version
- (match-beginning 1)
- (match-end 1))))
- ((string-match "\\([A-Z]*[Mm][Aa][Cc][Ss]\\)[^(]*\\(\\((beta.*)\\|'\\)\\)?"
- emacs-version)
- (concat (substring emacs-version
- (match-beginning 1)
- (match-end 1))
- (format " %d.%d" emacs-major-version emacs-minor-version)
- (if (match-beginning 3)
- (substring emacs-version
- (match-beginning 3)
- (match-end 3))
- "")
- (if (boundp 'xemacs-codename)
- (concat " - \"" xemacs-codename "\""))))
- (t emacs-version))))
+ gnus-version)
\f
;;;
(interactive "P")
(gnus-setup-message 'forward
(gnus-summary-select-article)
- (set-buffer gnus-original-article-buffer)
+ (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))))
(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)
(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")
(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) "$")
(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)
(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
(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)
"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 ()
(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)
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))
(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 ()
(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)
(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)
;; 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.
"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
(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)))
(setq beg (point))
(forward-char -1)
;; Draw "-" lines leftwards.
- (while (and (> (point) 1)
- (= (char-after (1- (point))) ? ))
+ (while (= (char-after (1- (point))) ? )
(delete-char -1)
(insert (car gnus-tree-parent-child-edges))
(forward-char -1))
(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))))
(?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)
(?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)
;; 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)
(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*"))
+ (set-buffer (get-buffer-create "*Score Help*"))
(buffer-disable-undo (current-buffer))
(delete-windows-on (current-buffer))
(erase-buffer)
(defun gnus-summary-score-entry (header match type score date
&optional prompt silent)
- (interactive)
"Enter score file entry.
HEADER is the header being scored.
MATCH is the string we are looking for.
(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.
(or (not decay)
(gnus-decay-scores alist decay)))
(gnus-score-set 'touched '(t) alist)
- (gnus-score-set 'decay (list (time-to-day (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))
;; 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))
(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)))))
(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)))
(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
(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)
gnus-scores-articles))))
(save-excursion
- (set-buffer (gnus-get-buffer-create "*Headers*"))
+ (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))
;; 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)
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)
(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))))
(trans (cdr (assq ?: nnheader-file-name-translation-alist)))
ofiles not-match regexp)
(save-excursion
- (set-buffer (gnus-get-buffer-create "*gnus score files*"))
+ (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.
(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)
(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))))
(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
;;;
(defun gnus-decay-scores (alist day)
"Decay non-permanent scores in ALIST."
- (let ((times (- (time-to-day (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))
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)
(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."
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)
"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))
(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"
".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
(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)
(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)
(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))
(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."
"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)))))
(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)
(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."
'("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]))
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)
(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)))))
(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.
: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)
(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)))))))))
(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.
(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))
(> 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)
(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)
"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))
;; 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))
(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"))))))
(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))
(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
(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))
+ (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))
;;; 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)
() ; 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)
enable-multibyte-characters
(fboundp 'gnus-mule-get-coding-system)
(gnus-mule-get-coding-system (symbol-name group)))))
- (when coding
- (setq str (nnheader-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")
-;;; 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 '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.
: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)
(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)
:group 'gnus-article-various
:type 'boolean)
-(defcustom gnus-show-mime nil
+(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-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:
: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)
[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
"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
[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
"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
"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)
"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)
-
(gnus-define-keys (gnus-summary-wash-time-map "T" gnus-summary-wash-map)
"z" gnus-article-date-ut
"u" gnus-article-date-ut
"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)
["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])
("Date"
["Local" gnus-article-date-local t]
["ISO8601" gnus-article-date-iso8601 t]
["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]
(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)])
["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]
(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))
(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)
(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."
- (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))))))
+ (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."
(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))
(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)
(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.
(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
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)))
(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)
(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.
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.
(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)
(setq header
(make-full-mail-header
number ; number
- (rfc2047-decode-string (gnus-nov-field)) ; subject
- (rfc2047-decode-string (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
"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))
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)
(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))
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)
;;!!! 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."
"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.
(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)
"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."
(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))))
(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))
(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)
;; 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))
;; We might have to chop a bit of the string off...
(when (> (length mode-string) max-len)
(setq mode-string
- (concat (truncate-string 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))))
(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.
(progn
(goto-char p)
(if (search-forward "\nsubject: " nil t)
- (rfc2047-decode-string (nnheader-header-value))
+ (funcall
+ gnus-unstructured-field-decoder (nnheader-header-value))
"(none)"))
;; From.
(progn
(goto-char p)
(if (search-forward "\nfrom: " nil t)
- (rfc2047-decode-string (nnheader-header-value))
+ (funcall
+ gnus-structured-field-decoder (nnheader-header-value))
"(nobody)"))
;; Date.
(progn
(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
number dependencies force-new))))
(push header headers))
(forward-line 1))
- ;(error
- ; (gnus-error 4 "Strange nov line (%d)"
- ; (count-lines (point-min) (point))))
- )
+ (error
+ (gnus-error 4 "Strange nov line (%d)"
+ (count-lines (point-min) (point)))))
(forward-line 1))
;; A common bug in inn is that if you have posted an article and
;; then retrieves the active file, it will answer correctly --
(t
(gnus-read-header id))))
(number (and (numberp id) id))
- d)
+ pos d)
(when header
;; Rebuild the thread that this article is part of and go to the
;; article we have fetched.
(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)
;; 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)
;; 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)
(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)))))
(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)
(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)
(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
'<)
(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
;; 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))))
(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.
(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
(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.
(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.
(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.
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"
(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
(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)
;;; 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)
(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"
(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)
(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)
(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)
(= 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)
"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)
(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
(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)
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)
"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)
(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)
(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.")
(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 ()
(car type) visiblep
(not (eq (nth 2 type) 'hidden))
level all-entries unread))
- (gnus-topic-update-unreads (car type) unread)
(goto-char end)
unread))
(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
'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)
(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
(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 ()
"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.
"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
(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)
-;;; 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"))
(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 "%2d-%b" (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.
'(0 0)
(or (get-text-property 0 'gnus-time d)
;; or compute the value...
- (let ((time (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)))))
(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."
(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."
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))))
;;; Functions for saving to babyl/mail files.
+(defvar rmail-default-rmail-file)
+(defun gnus-output-to-rmail (filename &optional ask)
+ "Append the current article to an Rmail file named FILENAME."
+ (require 'rmail)
+ ;; Most of these codes are borrowed from rmailout.el.
+ (setq filename (expand-file-name filename))
+ (setq rmail-default-rmail-file filename)
+ (let ((artbuf (current-buffer))
+ (tmpbuf (get-buffer-create " *Gnus-output*"))
+ (coding-system-for-write 'binary))
+ (save-excursion
+ (or (get-file-buffer filename)
+ (file-exists-p filename)
+ (if (or (not ask)
+ (gnus-yes-or-no-p
+ (concat "\"" filename "\" does not exist, create it? ")))
+ (let ((file-buffer (create-file-buffer filename)))
+ (save-excursion
+ (set-buffer file-buffer)
+ (rmail-insert-rmail-file-header)
+ (let ((require-final-newline nil))
+ (gnus-write-buffer filename)))
+ (kill-buffer file-buffer))
+ (error "Output file does not exist")))
+ (set-buffer tmpbuf)
+ (erase-buffer)
+ (insert-buffer-substring artbuf)
+ (gnus-convert-article-to-rmail)
+ ;; Decide whether to append to a file or to an Emacs buffer.
+ (let ((outbuf (get-file-buffer filename)))
+ (if (not outbuf)
+ (append-to-file (point-min) (point-max) filename)
+ ;; File has been visited, in buffer OUTBUF.
+ (set-buffer outbuf)
+ (let ((buffer-read-only nil)
+ (msg (and (boundp 'rmail-current-message)
+ (symbol-value 'rmail-current-message))))
+ ;; If MSG is non-nil, buffer is in RMAIL mode.
+ (when msg
+ (widen)
+ (narrow-to-region (point-max) (point-max)))
+ (insert-buffer-substring tmpbuf)
+ (when msg
+ (goto-char (point-min))
+ (widen)
+ (search-backward "\^_")
+ (narrow-to-region (point) (point-max))
+ (goto-char (1+ (point-min)))
+ (rmail-count-new-messages t)
+ (rmail-show-message msg))
+ (save-buffer)))))
+ (kill-buffer tmpbuf)))
+
(defun gnus-output-to-mail (filename &optional ask)
"Append the current article to a mail file named FILENAME."
(setq filename (expand-file-name filename))
(let ((artbuf (current-buffer))
- (tmpbuf (gnus-get-buffer-create " *Gnus-output*")))
+ (tmpbuf (get-buffer-create " *Gnus-output*")))
(save-excursion
;; Create the file, if it doesn't exist.
(when (and (not (get-file-buffer filename))
(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")))
;; 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)
(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))
(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)
"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."
;;; Various
-(defvar gnus-group-buffer) ; Compiler directive
(defun gnus-alive-p ()
"Say whether Gnus is running or not."
(and (boundp 'gnus-group-buffer)
"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)))
(error "Not a symbol: %s" alist))
`(setq ,alist (delq (assq ,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) ".*$")))
-
(provide 'gnus-util)
;;; gnus-util.el ends here
(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))
"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)))
(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 (gnus-get-buffer-create "*gnus-uu-body*"))
+ (save-excursion (set-buffer (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"
(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"))
(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 (current-buffer))
- (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
(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)
(let ((out-list string-list)
string)
(save-excursion
- (set-buffer (gnus-get-buffer-create gnus-uu-output-buffer-name))
+ (set-buffer (get-buffer-create gnus-uu-output-buffer-name))
(buffer-disable-undo (current-buffer))
(while string-list
(erase-buffer)
(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))
(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)))
(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))))
(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"))))
(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")
(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)
(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))
(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))
(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)
(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)))
(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)
(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))
(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
(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)
directory)
:group 'gnus-xmas)
-;;(format "%02x%02x%02x" 114 66 20) "724214"
-
(defvar gnus-xmas-logo-color-alist
'((flame "#cc3300" "#ff2200")
(pine "#c0cc93" "#f8ffb8")
(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
(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)
(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])
(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)))
:link '(custom-manual "(gnus)Exiting Gnus")
:group 'gnus)
-(defconst gnus-version-number "0.17"
- "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.
"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*")
(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
(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.
:group 'gnus-files
:group 'gnus-server
:type 'file)
-
+
;; This function is used to check both the environment variable
;; NNTPSERVER and the /etc/nntpserver file to see whether one can find
;; an nntp server name default.
(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)))
\"nnml+private:mail.misc\", for instance."
:group 'gnus-message
:type '(choice (const :tag "none" nil)
- sexp
string))
(defcustom gnus-secondary-servers nil
: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
(defcustom gnus-article-display-hook
(if (and (string-match "XEmacs" emacs-version)
(featurep 'xface))
- '(gnus-article-decode-charset
- gnus-article-decode-rfc1522
- gnus-article-hide-headers-if-wanted
+ '(gnus-article-hide-headers-if-wanted
gnus-article-hide-boring-headers
gnus-article-treat-overstrike
gnus-article-maybe-highlight
gnus-article-display-x-face)
- '(gnus-article-decode-charset
- gnus-article-decode-rfc1522
- gnus-article-hide-headers-if-wanted
+ '(gnus-article-hide-headers-if-wanted
gnus-article-hide-boring-headers
gnus-article-treat-overstrike
gnus-article-maybe-highlight))
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
\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)
(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.
(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.")
(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)
- ("rfc2047" rfc2047-decode-region rfc2047-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)
+ ("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 rmail-output-to-rmail-file)
+ rmail-show-message)
("gnus-audio" :interactive t gnus-audio-play)
("gnus-xmas" gnus-xmas-splash)
("gnus-soup" :interactive t
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" gnus-uu-delete-work-dir gnus-quote-arg-for-sh-or-csh
- 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
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-bug)
("gnus-picon" :interactive t gnus-article-display-picons
gnus-group-display-picons gnus-picons-article-display-x-face
gnus-picons-display-x-face)
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-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)
;;; 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."
(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))))))
(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)
"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 ()
(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
(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))
(assoc method gnus-valid-select-methods))
(read-string "Address: ")
"")))
- ((assoc method servers)
+ ((assoc method gnus-server-alist)
method)
(t
(list (intern method) "")))))
--- /dev/null
+;;; ietf-drums.el --- Functions for parsing RFC822bis headers
+;; Copyright (C) 1998 Free Software Foundation, Inc.
+
+;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; DRUMS is an IETF Working Group that works (or worked) on the
+;; successor to RFC822, "Standard For The Format Of Arpa Internet Text
+;; Messages". This library is based on
+;; draft-ietf-drums-msg-fmt-05.txt, released on 1998-08-05.
+
+;;; Code:
+
+(require 'time-date)
+(require 'mm-util)
+
+(defvar ietf-drums-no-ws-ctl-token "\001-\010\013\014\016-\037\177"
+ "US-ASCII control characters excluding CR, LF and white space.")
+(defvar ietf-drums-text-token "\001-\011\013\014\016-\177"
+ "US-ASCII characters exlcuding CR and LF.")
+(defvar ietf-drums-specials-token "()<>[]:;@\\,.\""
+ "Special characters.")
+(defvar ietf-drums-quote-token "\\"
+ "Quote character.")
+(defvar ietf-drums-wsp-token " \t"
+ "White space.")
+(defvar ietf-drums-fws-regexp
+ (concat "[" ietf-drums-wsp-token "]*\n[" ietf-drums-wsp-token "]+")
+ "Folding white space.")
+(defvar ietf-drums-atext-token "-^a-zA-Z0-9!#$%&'*+/=?_`{|}~"
+ "Textual token.")
+(defvar ietf-drums-dot-atext-token "-^a-zA-Z0-9!#$%&'*+/=?_`{|}~."
+ "Textual token including full stop.")
+(defvar ietf-drums-qtext-token
+ (concat ietf-drums-no-ws-ctl-token "\041\043-\133\135-\177")
+ "Non-white-space control characaters, plus the rest of ASCII excluding backslash and doublequote.")
+(defvar ietf-drums-tspecials "][()<>@,;:\\\"/?="
+ "Tspecials.")
+
+(defvar ietf-drums-syntax-table
+ (let ((table (copy-syntax-table emacs-lisp-mode-syntax-table)))
+ (modify-syntax-entry ?\\ "/" table)
+ (modify-syntax-entry ?< "(" table)
+ (modify-syntax-entry ?> ")" table)
+ (modify-syntax-entry ?@ "w" table)
+ (modify-syntax-entry ?/ "w" table)
+ (modify-syntax-entry ?= " " table)
+ (modify-syntax-entry ?* " " table)
+ (modify-syntax-entry ?\; " " table)
+ (modify-syntax-entry ?\' " " table)
+ table))
+
+(defun ietf-drums-token-to-list (token)
+ "Translate TOKEN into a list of characters."
+ (let ((i 0)
+ b e c out range)
+ (while (< i (length token))
+ (setq c (mm-char-int (aref token i)))
+ (incf i)
+ (cond
+ ((eq c (mm-char-int ?-))
+ (if b
+ (setq range t)
+ (push c out)))
+ (range
+ (while (<= b c)
+ (push (mm-make-char 'ascii b) out)
+ (incf b))
+ (setq range nil))
+ ((= i (length token))
+ (push (mm-make-char 'ascii c) out))
+ (t
+ (setq b c))))
+ (nreverse out)))
+
+(defsubst ietf-drums-init (string)
+ (set-syntax-table ietf-drums-syntax-table)
+ (insert string)
+ (ietf-drums-unfold-fws)
+ (goto-char (point-min)))
+
+(defun ietf-drums-remove-comments (string)
+ "Remove comments from STRING."
+ (with-temp-buffer
+ (let (c)
+ (ietf-drums-init string)
+ (while (not (eobp))
+ (setq c (following-char))
+ (cond
+ ((eq c ?\")
+ (forward-sexp 1))
+ ((eq c ?\()
+ (delete-region (point) (progn (forward-sexp 1) (point))))
+ (t
+ (forward-char 1))))
+ (buffer-string))))
+
+(defun ietf-drums-remove-whitespace (string)
+ "Remove comments from STRING."
+ (with-temp-buffer
+ (ietf-drums-init string)
+ (let (c)
+ (while (not (eobp))
+ (setq c (following-char))
+ (cond
+ ((eq c ?\")
+ (forward-sexp 1))
+ ((eq c ?\()
+ (forward-sexp 1))
+ ((memq c '(? ?\t ?\n))
+ (delete-char 1))
+ (t
+ (forward-char 1))))
+ (buffer-string))))
+
+(defun ietf-drums-get-comment (string)
+ "Return the first comment in STRING."
+ (with-temp-buffer
+ (ietf-drums-init string)
+ (let (result c)
+ (while (not (eobp))
+ (setq c (following-char))
+ (cond
+ ((eq c ?\")
+ (forward-sexp 1))
+ ((eq c ?\()
+ (setq result
+ (buffer-substring
+ (1+ (point))
+ (progn (forward-sexp 1) (1- (point))))))
+ (t
+ (forward-char 1))))
+ result)))
+
+(defun ietf-drums-parse-address (string)
+ "Parse STRING and return a MAILBOX / DISPLAY-NAME pair."
+ (with-temp-buffer
+ (let (display-name mailbox c display-string)
+ (ietf-drums-init string)
+ (while (not (eobp))
+ (setq c (following-char))
+ (cond
+ ((or (eq c ? )
+ (eq c ?\t))
+ (forward-char 1))
+ ((eq c ?\()
+ (forward-sexp 1))
+ ((eq c ?\")
+ (push (buffer-substring
+ (1+ (point)) (progn (forward-sexp 1) (1- (point))))
+ display-name))
+ ((looking-at (concat "[" ietf-drums-atext-token "@" "]"))
+ (push (buffer-substring (point) (progn (forward-sexp 1) (point)))
+ display-name))
+ ((eq c ?<)
+ (setq mailbox
+ (ietf-drums-remove-whitespace
+ (ietf-drums-remove-comments
+ (buffer-substring
+ (1+ (point))
+ (progn (forward-sexp 1) (1- (point))))))))
+ (t (error "Unknown symbol: %c" c))))
+ ;; If we found no display-name, then we look for comments.
+ (if display-name
+ (setq display-string
+ (mapconcat 'identity (reverse display-name) " "))
+ (setq display-string (ietf-drums-get-comment string)))
+ (if (not mailbox)
+ (when (string-match "@" display-string)
+ (cons
+ (mapconcat 'identity (nreverse display-name) "")
+ (ietf-drums-get-comment string)))
+ (cons mailbox display-string)))))
+
+(defun ietf-drums-parse-addresses (string)
+ "Parse STRING and return a list of MAILBOX / DISPLAY-NAME pairs."
+ (with-temp-buffer
+ (ietf-drums-init string)
+ (let ((beg (point))
+ pairs c)
+ (while (not (eobp))
+ (setq c (following-char))
+ (cond
+ ((memq c '(?\" ?< ?\())
+ (forward-sexp 1))
+ ((eq c ?,)
+ (push (ietf-drums-parse-address (buffer-substring beg (point)))
+ pairs)
+ (forward-char 1)
+ (setq beg (point)))
+ (t
+ (forward-char 1))))
+ (push (ietf-drums-parse-address (buffer-substring beg (point)))
+ pairs)
+ (nreverse pairs))))
+
+(defun ietf-drums-unfold-fws ()
+ "Unfold folding white space in the current buffer."
+ (goto-char (point-min))
+ (while (re-search-forward ietf-drums-fws-regexp nil t)
+ (replace-match " " t t))
+ (goto-char (point-min)))
+
+(defun ietf-drums-parse-date (string)
+ "Return an Emacs time spec from STRING."
+ (apply 'encode-time (parse-time-string string)))
+
+(defun ietf-drums-narrow-to-header ()
+ "Narrow to the header section in the current buffer."
+ (narrow-to-region
+ (goto-char (point-min))
+ (if (search-forward "\n\n" nil 1)
+ (1- (point))
+ (point-max)))
+ (goto-char (point-min)))
+
+(defun ietf-drums-quote-string (string)
+ "Quote string if it needs quoting to be displayed in a header."
+ (if (string-match (concat "[^" ietf-drums-atext-token "]") string)
+ (concat "\"" string "\"")
+ string))
+
+(provide 'ietf-drums)
+
+;;; ietf-drums.el ends here
(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 base64-decode-string))
+ 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)))
+ mail-aliases-setup)))
(setq load-path (cons "." load-path))
(require 'custom)
--- /dev/null
+;;; mail-parse.el --- Interface functions for parsing mail
+;; Copyright (C) 1998 Free Software Foundation, Inc.
+
+;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; This file contains wrapper functions for a wide range of mail
+;; parsing functions. The idea is that there are low-level libraries
+;; that impement according to various specs (RFC2231, DRUMS, USEFOR),
+;; but that programmers that want to parse some header (say,
+;; Content-Type) will want to use the latest spec.
+;;
+;; So while each low-level library (rfc2231.el, for instance) decodes
+;; faithfully according to that (proposed) standard, this library is
+;; the interface library. If some later RFC supersedes RFC2231, one
+;; would just have to write a new low-level library, adjust the
+;; aliases in this library, and the users and programmers won't notice
+;; any changes.
+
+;;; Code:
+
+(require 'drums)
+(require 'rfc2231)
+(require 'rfc2047)
+
+(defalias 'mail-header-parse-content-type 'rfc2231-parse-string)
+(defalias 'mail-header-parse-content-disposition 'rfc2231-parse-string)
+(defalias 'mail-content-type-get 'rfc2231-get-value)
+
+(defalias 'mail-header-remove-comments 'drums-remove-comments)
+(defalias 'mail-header-remove-whitespace 'drums-remove-whitespace)
+(defalias 'mail-header-get-comment 'drums-get-comment)
+(defalias 'mail-header-parse-address 'drums-parse-address)
+(defalias 'mail-header-parse-addresses 'drums-parse-addresses)
+(defalias 'mail-header-parse-date 'drums-parse-date)
+(defalias 'mail-narrow-to-head 'drums-narrow-to-header)
+(defalias 'mail-quote-string 'drums-quote-string)
+
+(defalias 'mail-header-narrow-to-field 'rfc2047-narrow-to-field)
+(defalias 'mail-encode-encoded-word-region 'rfc2047-encode-region)
+(defalias 'mail-encode-encoded-word-buffer 'rfc2047-encode-message-header)
+(defalias 'mail-encode-encoded-word-string 'rfc2047-encode-string)
+(defalias 'mail-decode-encoded-word-region 'rfc2047-decode-region)
+(defalias 'mail-decode-encoded-word-string 'rfc2047-decode-string)
+
+(provide 'mail-parse)
+
+;;; mail-parse.el ends here
--- /dev/null
+;;; 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 . mm-view-sound-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))
+ (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))
+ (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
+ ((= ?* (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 (= (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 (/= (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 (= (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 (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)))
+ ((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 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
;; 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 'rfc2047)
-(require 'mm-bodies)
+(require 'mime-edit)
(defgroup message '((user-mail-address custom-variable)
(user-full-name custom-variable))
(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.
: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:\\|^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."
: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)
: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"
"*All headers that match this regexp will be deleted when resending a message."
:group 'message-interface
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'."
(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)
: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
: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)
: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)
: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)
(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")
(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))))
(when value
(nnheader-replace-chars-in-string value ?\n ? ))))
-(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)))
-
(defun message-add-header (&rest headers)
"Add the HEADERS to the message header, skipping those already present."
(while headers
(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."
(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))
(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
(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
(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."
;; 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)
(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
(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."
(message-fix-before-sending)
(run-hooks 'message-send-hook)
(message "Sending...")
- (let ((alist message-send-method-alist)
+ (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)
- (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)))
+ (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)
(defun message-send-via-news (arg)
"Send the current message via news."
- (funcall message-send-news-function arg))
+ (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.
- (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."
(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))
- (rfc2047-encode-message-header)
;; 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)
(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 ()
(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)
(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
;; 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)
(message-narrow-to-headers)
;; Insert some headers.
(message-generate-headers message-required-news-headers)
- (rfc2047-encode-message-header)
;; Let the user do all of the above.
(run-hooks 'message-header-hook))
- (message-encode-message-body)
(message-cleanup-headers)
(if (not (message-check-news-syntax))
(progn
(set-buffer tembuf)
(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)
;; 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.
;;;
(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
(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))
(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)
"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 ()
(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."
- (format-time-string "%d %b %Y %H:%M:%S %z" (or now (current-time))))
+(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."
;; 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."
(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
(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.
(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)
(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)
(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."
(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))
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*")))
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)))))
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"))
(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)
(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)
(when (looking-at "From ")
(replace-match "X-From-Line: "))
;; Send it.
- (message-send-mail)
+ (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)))
(point))))
(hashtb (and (boundp 'gnus-active-hashtb) gnus-active-hashtb))
(completions (all-completions string hashtb))
+ (cur (current-buffer))
comp)
(delete-region b (point))
(cond
(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
(setq idx (1+ idx)))
string))
-;;;
-;;; MIME functions
-;;;
-
-(defun message-encode-message-body ()
- "Examine the message body, encode it, and add the requisite headers."
- (when (featurep 'mule)
- (save-excursion
- (save-restriction
- (message-narrow-to-headers)
- (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)
- (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.
- (unless (and (eq charset 'ascii)
- (eq encoding '7bit))
- (mm-insert-rfc822-headers charset encoding))
- (mm-encode-body))))))
-
(run-hooks 'message-load-hook)
(provide 'message)
"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
(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
+++ /dev/null
-;;; 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
- (if (not (fboundp 'base64-encode-string))
- (require 'base64)))
-(require 'mm-util)
-(require 'qp)
-
-(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 (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-mule-charset-to-mime-charset (car charsets)))
- 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 (following-char)) 'ascii)
- (when start
- (mm-encode-coding-region start (point) mime-charset)
- (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-body (charset encoding)
- "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
- (cond
- ((eq encoding 'quoted-printable)
- (quoted-printable-decode-region (point-min) (point-max)))
- ((eq encoding 'base64)
- (condition-case ()
- (base64-decode-region (point-min) (point-max))
- (error nil)))
- ((memq encoding '(7bit 8bit binary))
- )
- ((null encoding)
- )
- (t
- (error "Can't decode encoding %s" encoding))))
- (when (featurep 'mule)
- (let (mule-charset)
- (when (and charset
- (setq mule-charset (mm-charset-to-coding-system charset))
- buffer-file-coding-system
- ;;(not (mm-coding-system-equal
- ;; buffer-file-coding-system mule-charset))
- )
- (mm-decode-coding-region (point-min) (point-max) mule-charset))))))
-
-(provide 'mm-bodies)
-
-;; mm-bodies.el ends here
-;;; mm-decode.el --- Functions for decoding MIME things
+;;; mm-decode.el --- Function 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.
+;; This file is not yet part of GNU Emacs.
;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;;; Code:
+(require 'base64)
+(require 'qp)
+(require 'nnheader)
+
+(defvar mm-charset-regexp (concat "[^" "][\000-\040()<>@,\;:\\\"/?.=" "]+"))
+
+(defvar mm-encoded-word-regexp
+ (concat "=\\?\\(" mm-charset-regexp "\\)\\?\\(B\\|Q\\)\\?"
+ "\\([!->@-~]+\\)\\?="))
+
+(defun mm-decode-words-region (start end)
+ "Decode MIME-encoded words in region between START and END."
+ (interactive "r")
+ (save-excursion
+ (save-restriction
+ (narrow-to-region start end)
+ (goto-char (point-min))
+ ;; Remove whitespace between encoded words.
+ (while (re-search-forward
+ (concat "\\(" mm-encoded-word-regexp "\\)"
+ "\\(\n?[ \t]\\)+"
+ "\\(" mm-encoded-word-regexp "\\)")
+ nil t)
+ (delete-region (goto-char (match-end 1)) (match-beginning 6)))
+ ;; Decode the encoded words.
+ (goto-char (point-min))
+ (while (re-search-forward mm-encoded-word-regexp nil t)
+ (insert (mm-decode-word
+ (prog1
+ (match-string 0)
+ (delete-region (match-beginning 0) (match-end 0)))))))))
+
+(defun mm-decode-words-string (string)
+ "Decode the quoted-printable-encoded STRING and return the results."
+ (with-temp-buffer
+ (insert string)
+ (inline
+ (mm-decode-words-region (point-min) (point-max)))
+ (buffer-string)))
+
+(defun mm-decode-word (word)
+ "Decode WORD and return it if it is an encoded word.
+Return WORD if not."
+ (if (not (string-match mm-encoded-word-regexp word))
+ word
+ (or
+ (condition-case nil
+ (mm-decode-text
+ (match-string 1 word)
+ (upcase (match-string 2 word))
+ (match-string 3 word))
+ (error word))
+ word)))
+
+(eval-and-compile
+ (if (fboundp 'decode-coding-string)
+ (fset 'mm-decode-coding-string 'decode-coding-string)
+ (fset 'mm-decode-coding-string (lambda (s a) s))))
+
+(defun mm-decode-text (charset encoding string)
+ "Decode STRING as an encoded text.
+Valid ENCODINGs are \"B\" and \"Q\".
+If your Emacs implementation can't decode CHARSET, it returns nil."
+ (let ((cs (mm-charset-to-coding-system charset)))
+ (when cs
+ (mm-decode-coding-string
+ (cond
+ ((equal "B" encoding)
+ (base64-decode string))
+ ((equal "Q" encoding)
+ (quoted-printable-decode-string
+ (nnheader-replace-chars-in-string string ?_ ? )))
+ (t (error "Invalid encoding: %s" encoding)))
+ cs))))
+
+(defvar mm-charset-coding-system-alist
+ (let ((rest
+ '((us-ascii . iso-8859-1)
+ (gb2312 . cn-gb-2312)
+ (iso-2022-jp-2 . iso-2022-7bit-ss2)
+ (x-ctext . ctext)))
+ (systems (coding-system-list))
+ dest)
+ (while rest
+ (let ((pair (car rest)))
+ (unless (memq (car pair) systems)
+ (setq dest (cons pair dest))))
+ (setq rest (cdr rest)))
+ dest)
+ "Charset/coding system alist.")
+
+(defun mm-charset-to-coding-system (charset &optional lbt)
+ "Return coding-system corresponding to CHARSET.
+CHARSET is a symbol naming a MIME charset.
+If optional argument LBT (`unix', `dos' or `mac') is specified, it is
+used as the line break code type of the coding system."
+ (when (stringp charset)
+ (setq charset (intern (downcase charset))))
+ (setq charset
+ (or (cdr (assq charset mm-charset-coding-system-alist))
+ charset))
+ (when lbt
+ (setq charset (intern (format "%s-%s" charset lbt))))
+ (when (memq charset (coding-system-list))
+ charset))
+
(provide 'mm-decode)
-;; mm-decode.el ends here
+;; qp.el ends here
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
-;; This file is part of GNU Emacs.
+;; This file is not yet part of GNU Emacs.
;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;;; Code:
+(defvar mm-header-encoding-alist
+ '(("X-Nsubject" . iso-2022-jp-2)
+ ("Newsgroups" . nil)
+ ("Message-ID" . nil)
+ (t . mime))
+ "*Header/encoding method alist.
+The list is traversed sequentially. The keys can either be a
+header regexp or `t'.
+
+The values can be:
+
+1) nil, in which case no encoding is done;
+2) `mime', in which case the header will be encoded according to RFC1522;
+3) a charset, in which case it will be encoded as that charse;
+4) `default', in which case the field will be encoded as the rest
+ of the article.")
+
+(defvar mm-mime-mule-charset-alist
+ '((us-ascii ascii)
+ (iso-8859-1 latin-iso8859-1)
+ (iso-8859-2 latin-iso8859-2)
+ (iso-8859-3 latin-iso8859-3)
+ (iso-8859-4 latin-iso8859-4)
+ (iso-8859-5 cyrillic-iso8859-5)
+ (koi8-r cyrillic-iso8859-5)
+ (iso-8859-6 arabic-iso8859-6)
+ (iso-8859-7 greek-iso8859-7)
+ (iso-8859-8 hebrew-iso8859-8)
+ (iso-8859-9 latin-iso8859-9)
+ (iso-2022-jp latin-jisx0201
+ japanese-jisx0208-1978 japanese-jisx0208)
+ (euc-kr korean-ksc5601)
+ (cn-gb-2312 chinese-gb2312)
+ (cn-big5 chinese-big5-1 chinese-big5-2)
+ (iso-2022-jp-2 latin-iso8859-1 greek-iso8859-7
+ latin-jisx0201 japanese-jisx0208-1978
+ chinese-gb2312 japanese-jisx0208
+ korean-ksc5601 japanese-jisx0212)
+ (iso-2022-int-1 latin-iso8859-1 greek-iso8859-7
+ latin-jisx0201 japanese-jisx0208-1978
+ chinese-gb2312 japanese-jisx0208
+ korean-ksc5601 japanese-jisx0212
+ chinese-cns11643-1 chinese-cns11643-2)
+ (iso-2022-int-1 latin-iso8859-1 latin-iso8859-2
+ cyrillic-iso8859-5 greek-iso8859-7
+ latin-jisx0201 japanese-jisx0208-1978
+ chinese-gb2312 japanese-jisx0208
+ korean-ksc5601 japanese-jisx0212
+ chinese-cns11643-1 chinese-cns11643-2
+ chinese-cns11643-3 chinese-cns11643-4
+ chinese-cns11643-5 chinese-cns11643-6
+ chinese-cns11643-7))
+ "Alist of MIME-charset/MULE-charsets.")
+
+(defvar mm-mime-charset-encoding-alist
+ '((us-ascii . nil)
+ (iso-8859-1 . Q)
+ (iso-8859-2 . Q)
+ (iso-8859-3 . Q)
+ (iso-8859-4 . Q)
+ (iso-8859-5 . Q)
+ (koi8-r . Q)
+ (iso-8859-7 . Q)
+ (iso-8859-8 . Q)
+ (iso-8859-9 . Q)
+ (iso-2022-jp . B)
+ (iso-2022-kr . B)
+ (gb2312 . B)
+ (cn-gb . B)
+ (cn-gb-2312 . B)
+ (euc-kr . B)
+ (iso-2022-jp-2 . B)
+ (iso-2022-int-1 . B))
+ "Alist of MIME charsets to MIME encodings.
+Valid encodings are nil, `Q' and `B'.")
+
+(defvar mm-mime-encoding-function-alist
+ '((Q . quoted-printable-encode-region)
+ (B . base64-encode-region)
+ (nil . ignore))
+ "Alist of MIME encodings to encoding functions.")
+
+(defun mm-encode-message-header ()
+ "Encode the message header according to `mm-header-encoding-alist'."
+ (when (featurep 'mule)
+ (save-excursion
+ (save-restriction
+ (message-narrow-to-headers)
+ (let ((alist mm-header-encoding-alist)
+ elem method)
+ (while (not (eobp))
+ (save-restriction
+ (message-narrow-to-field)
+ (when (find-non-ascii-charset-region (point-min) (point-max))
+ ;; We found something that may perhaps be encoded.
+ (while (setq elem (pop alist))
+ (when (or (and (stringp (car elem))
+ (looking-at (car elem)))
+ (eq (car elem) t))
+ (setq alist nil
+ method (cdr elem))))
+ (when method
+ (cond
+ ((eq method 'mime)
+ (mm-encode-words-region (point-min) (point-max)))
+ ;; Hm.
+ (t))))
+ (goto-char (point-max)))))))))
+
+(defun mm-encode-words-region (b e)
+ "Encode all encodable words in REGION."
+ (let (prev c start qstart qprev qend)
+ (save-excursion
+ (goto-char b)
+ (while (re-search-forward "[^ \t\n]+" nil t)
+ (save-restriction
+ (narrow-to-region (match-beginning 0) (match-end 0))
+ (goto-char (setq start (point-min)))
+ (setq prev nil)
+ (while (not (eobp))
+ (unless (eq (setq c (char-charset (following-char))) 'ascii)
+ (cond
+ ((eq c prev)
+ )
+ ((null prev)
+ (setq qstart (or qstart start)
+ qend (point-max)
+ qprev c)
+ (setq prev c))
+ (t
+ ;(mm-encode-word-region start (setq start (point)) prev)
+ (setq prev c)
+ )))
+ (forward-char 1)))
+ (when (and (not prev) qstart)
+ (mm-encode-word-region qstart qend qprev)
+ (setq qstart nil)))
+ (when qstart
+ (mm-encode-word-region qstart qend qprev)
+ (setq qstart nil)))))
+
+(defun mm-encode-words-string (string)
+ "Encode words in STRING."
+ (with-temp-buffer
+ (insert string)
+ (mm-encode-words-region (point-min) (point-max))
+ (buffer-string)))
+
+(defun mm-mule-charset-to-mime-charset (charset)
+ "Return the MIME charset corresponding to MULE CHARSET."
+ (let ((alist mm-mime-mule-charset-alist)
+ out)
+ (while alist
+ (when (memq charset (cdar alist))
+ (setq out (caar alist)
+ alist nil))
+ (pop alist))
+ out))
+
+(defun mm-encode-word-region (b e charset)
+ "Encode the word in the region with CHARSET."
+ (let* ((mime-charset (mm-mule-charset-to-mime-charset charset))
+ (encoding (cdr (assq mime-charset mm-mime-charset-encoding-alist))))
+ (save-restriction
+ (narrow-to-region b e)
+ (funcall (cdr (assq encoding mm-mime-encoding-function-alist))
+ b e)
+ (goto-char (point-min))
+ (insert "=?" (upcase (symbol-name mime-charset)) "?"
+ (symbol-name encoding) "?")
+ (goto-char (point-max))
+ (insert "?="))))
+
(provide 'mm-encode)
;;; mm-encode.el ends here
;;; Code:
-(defvar mm-known-charsets '(iso-8859-1)
- "List of known charsets.")
+(eval-and-compile
+ (if (fboundp 'decode-coding-string)
+ (fset 'mm-decode-coding-string 'decode-coding-string)
+ (fset 'mm-decode-coding-string (lambda (s a) s))))
+
+(eval-and-compile
+ (if (fboundp 'encode-coding-string)
+ (fset 'mm-encode-coding-string 'encode-coding-string)
+ (fset 'mm-encode-coding-string (lambda (s a) s))))
+
+(eval-and-compile
+ (if (fboundp 'coding-system-list)
+ (fset 'mm-coding-system-list 'coding-system-list)
+ (fset 'mm-coding-system-list 'ignore)))
(defvar mm-mime-mule-charset-alist
'((us-ascii ascii)
chinese-cns11643-7))
"Alist of MIME-charset/MULE-charsets.")
-
-(eval-and-compile
- (if (fboundp 'decode-coding-string)
- (fset 'mm-decode-coding-string 'decode-coding-string)
- (fset 'mm-decode-coding-string (lambda (s a) s)))
-
- (if (fboundp 'encode-coding-string)
- (fset 'mm-encode-coding-string 'encode-coding-string)
- (fset 'mm-encode-coding-string (lambda (s a) s)))
-
- (if (fboundp 'encode-coding-region)
- (fset 'mm-encode-coding-region 'encode-coding-region)
- (fset 'mm-encode-coding-region 'ignore))
-
- (if (fboundp 'decode-coding-region)
- (fset 'mm-decode-coding-region 'decode-coding-region)
- (fset 'mm-decode-coding-region 'ignore))
-
- (if (fboundp 'coding-system-list)
- (fset 'mm-coding-system-list 'coding-system-list)
- (fset 'mm-coding-system-list 'ignore))
-
- (if (fboundp 'char-int)
- (fset 'mm-char-int 'char-int)
- (fset 'mm-char-int 'identity))
-
- (if (fboundp 'coding-system-equal)
- (fset 'mm-coding-system-equal 'coding-system-equal)
- (fset 'mm-coding-system-equal 'equal))
-
- (if (fboundp 'read-coding-system)
- (fset 'mm-read-coding-system 'read-coding-system)
- (defun mm-read-coding-system (prompt)
- "Prompt the user for a coding system."
- (completing-read
- prompt (mapcar (lambda (s) (list (symbol-name (car s))))
- mm-mime-mule-charset-alist)))))
-
-
(defvar mm-charset-coding-system-alist
(let ((rest
'((us-ascii . iso-8859-1)
dest)
"Charset/coding system alist.")
-
(defun mm-mule-charset-to-mime-charset (charset)
"Return the MIME charset corresponding to MULE CHARSET."
(let ((alist mm-mime-mule-charset-alist)
(cond
;; Running in a non-MULE environment.
((and (null (mm-coding-system-list))
- (memq charset mm-known-charsets))
+ (eq charset 'iso-8859-1))
charset)
;; Check to see whether we can handle this charset.
((memq charset (mm-coding-system-list))
(setq idx (1+ idx)))
string))
-(defun mm-enable-multibyte ()
- "Enable multibyte in the current buffer."
- (when (fboundp 'set-buffer-multibyte)
- (set-buffer-multibyte t)))
-
-(defun mm-insert-rfc822-headers (charset encoding)
- "Insert text/plain headers with CHARSET and ENCODING."
- (insert "MIME-Version: 1.0\n")
- (insert "Content-Type: text/plain; charset=\""
- (downcase (symbol-name charset)) "\"\n")
- (insert "Content-Transfer-Encoding: "
- (downcase (symbol-name encoding)) "\n"))
-
-(defun mm-content-type-charset (header)
- "Return the charset parameter from HEADER."
- (when (string-match "charset *= *\"? *\\([-0-9a-zA-Z_]+\\)\"? *$" header)
- (intern (downcase (match-string 1 header)))))
-
(provide 'mm-util)
;;; mm-util.el ends here
--- /dev/null
+;;; mm-view.el --- Functions for viewing MIME objects
+;; Copyright (C) 1998 Free Software Foundation, Inc.
+
+;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'mail-parse)
+(require 'mailcap)
+(require 'mm-bodies)
+
+;;;
+;;; Functions for displaying various formats inline
+;;;
+
+(defun mm-inline-image (handle)
+ (let ((type (cadr (split-string (car (mm-handle-type handle)) "/")))
+ buffer-read-only image)
+ (mm-with-unibyte-buffer
+ (insert-buffer-substring (mm-handle-buffer handle))
+ (mm-decode-content-transfer-encoding (mm-handle-encoding handle))
+ (setq image (make-image-specifier
+ (vector (intern type) :data (buffer-string)))))
+ (let ((annot (make-annotation image nil 'text)))
+ (set-extent-property annot 'mm t)
+ (set-extent-property annot 'duplicable t)
+ (mm-handle-set-undisplayer handle annot))
+ (insert " ")))
+
+(defun mm-inline-text (handle)
+ (let ((type (cadr (split-string (car (mm-handle-type handle)) "/")))
+ text buffer-read-only)
+ (cond
+ ((equal type "plain")
+ (with-temp-buffer
+ (insert-buffer-substring (mm-handle-buffer handle))
+ (mm-decode-content-transfer-encoding (mm-handle-encoding handle))
+ (setq text (buffer-string)))
+ (let ((b (point)))
+ (insert text)
+ (save-restriction
+ (narrow-to-region b (point))
+ (let ((charset (mail-content-type-get
+ (mm-handle-type handle) 'charset)))
+ (when charset
+ (mm-decode-body charset nil)))
+ (mm-handle-set-undisplayer
+ handle
+ `(lambda ()
+ (let (buffer-read-only)
+ (delete-region
+ ,(set-marker (make-marker) (point-min))
+ ,(set-marker (make-marker) (point-max)))))))))
+ ((equal type "html")
+ (save-excursion
+ (w3-do-setup)
+ (mm-with-unibyte-buffer
+ (insert-buffer-substring (mm-handle-buffer handle))
+ (mm-decode-content-transfer-encoding (mm-handle-encoding handle))
+ (require 'url)
+ (save-window-excursion
+ (w3-region (point-min) (point-max))
+ (setq text (buffer-string))))
+ (let ((b (point)))
+ (insert text)
+ (mm-handle-set-undisplayer
+ handle
+ `(lambda ()
+ (let (buffer-read-only)
+ (delete-region ,(set-marker (make-marker) b)
+ ,(set-marker (make-marker) (point)))))))))
+ )))
+
+(defun mm-inline-audio (handle)
+ (message "Not implemented"))
+
+(defun mm-view-sound-file ()
+ (message "Not implemented"))
+
+(defun mm-w3-prepare-buffer ()
+ (require 'w3)
+ (w3-prepare-buffer))
+
+(provide 'mm-view)
+
+;; mm-view.el ends here
(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)
(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
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)))
(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)
(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
(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+"))
(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)
(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 is an ordinal starting at 1. HEAD-BEGIN,
-;; HEAD-END, BODY-BEGIN and BODY-END are positions in the `nndoc' buffer.
-;; LINE-COUNT is a count of lines in the body. SUBJECT, MESSAGE-ID and
-;; REFERENCES, only present for MIME dissections, are field values.
(defvoo nndoc-dissection-alist nil)
(defvoo nndoc-prepare-body-function nil)
(defvoo nndoc-generate-head-function nil)
(defvoo nndoc-current-buffer nil
"Current nndoc news buffer.")
(defvoo nndoc-address nil)
-(defvoo nndoc-mime-header nil)
-(defvoo nndoc-mime-subject nil)
(defconst nndoc-version "nndoc 1.0"
"nndoc version.")
(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.
"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
(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)
- (unless (= article 1)
- ;; Ensure some MIME-Version.
- (goto-char (point-min))
- (search-forward "\n\n")
- (let ((case-fold-search nil)
- (limit (point)))
- (goto-char (point-min))
- (or (save-excursion (re-search-forward "^MIME-Version:" limit t))
- (insert "Mime-Version: 1.0\n")))
- ;; Generate default header before entity fields.
- (goto-char (point-min))
- (nndoc-generate-mime-parts-head article t)))
-
-(defun nndoc-generate-mime-parts-head (article &optional body-present)
- (let ((entry (cdr (assq (if body-present 1 article) nndoc-dissection-alist))))
- (let ((subject (if body-present
- nndoc-mime-subject
- (concat "<" (nth 5 entry) ">")))
- (message-id (nth 6 entry))
- (references (nth 7 entry)))
- (insert nndoc-mime-header)
- (and subject (insert "Subject: " subject "\n"))
- (and message-id (insert "Message-ID: " message-id "\n"))
- (and references (insert "References: " references "\n")))))
-
(defun nndoc-clari-briefs-type-p ()
(when (let ((case-fold-search nil))
(re-search-forward "^\t[^a-z]+ ([^a-z]+) --" nil t))
(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)
(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))
(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)
- (message-narrow-to-head)
- (let ((case-fold-search t)
- (message-id (message-fetch-field "Message-ID"))
- (references (message-fetch-field "References")))
- (setq nndoc-mime-header (buffer-substring (point-min) (point-max))
- nndoc-mime-subject (message-fetch-field "Subject"))
- (while (string-match "\
-^\\(Subject\\|Message-ID\\|References\\|Lines\\|\
-MIME-Version\\|Content-Type\\|Content-Transfer-Encoding\\|\
-\\):.*\n\\([ \t].*\n\\)*"
- nndoc-mime-header)
- (setq nndoc-mime-header (replace-match "" t t nndoc-mime-header)))
- (widen)
- (nndoc-dissect-mime-parts-sub (point-min) (point-max)
- nil message-id references))))
-
-(defun nndoc-dissect-mime-parts-sub (begin end position message-id references)
- "Dissect an entity within a composite MIME message.
-The article, which corresponds to a MIME entity, extends from BEGIN to END.
-The string POSITION holds a dotted decimal representation of the article
-position in the hierarchical structure, it is nil for the outer entity.
-The generated article should use MESSAGE-ID and REFERENCES field values."
- ;; Note: `case-fold-search' is already `t' from the calling function.
- (let ((head-begin begin)
- (body-end end)
- head-end body-begin type subtype composite comment)
- (save-excursion
- ;; 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 end
- body-begin end))
- ;; Save MIME attributes.
- (goto-char head-begin)
- (if (re-search-forward "\
-^Content-Type: *\\([^ \t\n/;]+\\)/\\([^ \t\n/;]+\\)"
- head-end t)
- (setq type (downcase (match-string 1))
- subtype (downcase (match-string 2)))
- (setq type "text"
- subtype "plain"))
- (setq composite (string= type "multipart")
- comment (concat position
- (when (and position composite) ".")
- (when composite "*")
- (when (or position composite) " ")
- (cond ((string= subtype "plain") type)
- ((string= subtype "basic") type)
- (t subtype))))
- ;; 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)
- comment message-id references)
- nndoc-dissection-alist)
- ;; Recurse for all sub-entities, if any.
- (goto-char head-begin)
- (when (re-search-forward
- (concat "\
-^Content-Type: *multipart/\\([a-z]+\\);\\(.*;\\)*"
- "[ \t\n]*[ \t]boundary=\"?\\([^\"\n]*[^\" \t\n]\\)")
- head-end t)
- (let ((boundary (concat "\n--" (match-string 3) "\\(--\\)?[ \t]*\n"))
- (part-counter 0)
- begin end eof-flag)
- (goto-char head-end)
- (setq eof-flag (not (re-search-forward boundary body-end t)))
- (while (not eof-flag)
- (setq begin (point))
- (cond ((re-search-forward boundary body-end t)
- (or (not (match-string 1))
- (string= (match-string 1) "")
- (setq eof-flag t))
- (forward-line -1)
- (setq end (point))
- (forward-line 1))
- (t (setq end body-end
- eof-flag t)))
- (nndoc-dissect-mime-parts-sub begin end
- (concat position (when position ".")
- (format "%d"
- (incf part-counter)))
- (nnmail-message-id)
- message-id)))))))
-
;;;###autoload
(defun nndoc-add-type (definition &optional position)
"Add document DEFINITION to the list of nndoc document definitions.
(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))
(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)
(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
(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
(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 '")
(defun nneething-file-name (article)
"Return the file name of ARTICLE."
- (concat (file-name-as-directory nneething-address)
+ (concat (file-name-as-directory nneething-directory)
(if (numberp article)
(cadr (assq article nneething-map))
article)))
"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.
(defun nnfolder-group-pathname (group)
"Make pathname for GROUP."
- (setq group
- (nnheader-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
(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)
(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.
(unless (gnus-buffer-live-p nntp-server-buffer)
(setq nntp-server-buffer (get-buffer-create " *nntpd*")))
(set-buffer nntp-server-buffer)
+ (buffer-disable-undo (current-buffer))
(erase-buffer)
(kill-all-local-variables)
(setq case-fold-search t) ;Should ignore case.
(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)
(concat dir group "/")
;; If not, we translate dots into slashes.
(concat dir
- (nnheader-encode-coding-string
+ (gnus-encode-coding-string
(nnheader-replace-chars-in-string group ?. ?/)
nnheader-pathname-coding-system)
"/")))
(fset 'nnheader-cancel-timer 'cancel-timer)
(fset 'nnheader-cancel-function-timers 'cancel-function-timers)
-(if (fboundp 'encode-coding-string)
- (fset 'nnheader-encode-coding-string 'encode-coding-string)
- (fset 'nnheader-encode-coding-string (lambda (s a) s)))
-
-(if (fboundp 'decode-coding-string)
- (fset 'nnheader-decode-coding-string 'decode-coding-string)
- (fset 'nnheader-decode-coding-string (lambda (s a) s)))
-
(when (string-match "XEmacs\\|Lucid" emacs-version)
(require 'nnheaderxm))
;; 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))
;; 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.
(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")))
(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
(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."
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."
: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
(defvar nnmail-internal-password nil)
-(defvar nnmail-split-tracing nil)
-(defvar nnmail-split-trace nil)
-
\f
(defconst nnmail-version "nnmail 1.0"
(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)
(after-insert-file-functions nil))
(condition-case ()
(let ((coding-system-for-read nnmail-file-coding-system)
- (pathname-coding-system nnmail-file-coding-system))
+ (pathname-coding-system 'binary))
(insert-file-contents file)
t)
(file-error nil))))
(concat dir group "/")
;; If not, we translate dots into slashes.
(concat dir
- (nnheader-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'."
(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")
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)
(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)
;; 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
(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
(insert (format "Xref: %s" (system-name)))
(while group-alist
(insert (format " %s:%d"
- (nnheader-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"))))
(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))
(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 ?\&)
;; 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.
- (time-less-p days (time-since time)))))))
+ (nnmail-time-less days (nnmail-time-since time)))))))
(defvar nnmail-read-passwd nil)
(defun nnmail-read-passwd (prompt &rest args)
(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)))
(expand-file-name nnmh-toplev))))
dir)
(nnheader-replace-chars-in-string
- (nnheader-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)
(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))
((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))))
(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))
(require 'nnheader)
(require 'nntp)
+(require 'timezone)
(require 'nnoo)
(eval-when-compile (require 'cl))
(while (and (not (looking-at
"\\([^ ]+\\) +\\([0-9]+\\)[0-9][0-9][0-9] "))
(zerop (forward-line -1))))
- (let ((seconds (time-to-float (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]+ ")
"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
(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"
\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
(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)
(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."
(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 (following-char) ?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."
(nntp-inhibit-erase t)
(map (apply 'vector articles))
(point 1)
- article)
+ article alist)
(set-buffer buf)
(erase-buffer)
;; Send ARTICLE command.
(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))
(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)))
(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)
"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.
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))
"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))
(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)
(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
(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))))
(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))
(defun nnweb-read-overview (group)
"Read the overview of GROUP and build the map."
(when (file-exists-p (nnweb-overview-file group))
- (with-temp-buffer
+ (nnheader-temp-write nil
(nnheader-insert-file-contents (nnweb-overview-file group))
(goto-char (point-min))
(let (header)
(defun nnweb-write-overview (group)
"Write the overview file for GROUP."
- (with-temp-file (nnweb-overview-file group)
+ (nnheader-temp-write (nnweb-overview-file group)
(let ((articles nnweb-articles))
(while articles
(nnheader-insert-nov (cadr (pop articles)))))))
(defun nnweb-write-active ()
"Save the active file."
- (with-temp-file (nnheader-concat nnweb-directory "active")
+ (nnheader-temp-write (nnheader-concat nnweb-directory "active")
(prin1 `(setq nnweb-group-alist ',nnweb-group-alist) (current-buffer))))
(defun nnweb-read-active ()
--- /dev/null
+;; 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.
;;; pop3.el --- Post Office Protocol (RFC 1460) interface
-;; Copyright (C) 1996,1997 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.3l
+;; Version: 1.3l+
;; This file is part of GNU Emacs.
(require 'mail-utils)
(provide 'pop3)
-(defconst pop3-version "1.3l")
+(defconst pop3-version "1.3l+")
(defvar pop3-maildrop (or (user-login-name) (getenv "LOGNAME") (getenv "USER") nil)
"*POP3 maildrop.")
"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)
(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))
Returns the process associated with the connection."
(let ((process-buffer
(get-buffer-create (format "trace of POP session to %s" mailhost)))
- (process))
+ (process)
+ (coding-system-for-read 'binary))
(save-excursion
(set-buffer process-buffer)
(erase-buffer)
(setq pop3-timestamp
(substring response (or (string-match "<" response) 0)
(+ 1 (or (string-match ">" response) -1)))))
- process
- ))
+ process))
;; Support functions
(quoted-printable-decode-region (point-min) (point-max))
(buffer-string)))
-(defun quoted-printable-encode-region (from to &optional fold class)
- "QP-encode the region between FROM and TO.
-If FOLD, fold long lines. If CLASS, translate the characters
-matched by that regexp."
+(defun quoted-printable-encode-region (from to)
+ "QP-encode the region between FROM and TO."
(interactive "r")
(save-excursion
(save-restriction
(narrow-to-region from to)
(goto-char (point-min))
- (while (re-search-forward
- (or class "[\000-\007\013\015-\037\200-\377=]") nil t)
+ (while (re-search-forward "[\000-\007\013\015-\037\200-\237=]" nil t)
(insert
(prog1
- (upcase (format "=%x" (char-after (1- (point)))))
+ (format "=%x" (char-after (1- (point))))
(delete-char -1))))
- (when fold
- ;; Fold long lines.
- (goto-char (point-min))
- (end-of-line)
- (while (> (current-column) 72)
- (beginning-of-line)
- (forward-char 72)
- (search-backward "=" (- (point) 2) t)
- (insert "=\n")
- (end-of-line))))))
+ ;; Fold long lines.
+ (goto-char (point-min))
+ (end-of-line)
+ (while (> (current-column) 72)
+ (beginning-of-line)
+ (forward-char 72)
+ (search-backward "=" (- (point) 2) t)
+ (insert "=\n")
+ (end-of-line)))))
(defun quoted-printable-encode-string (string)
"QP-encode STRING and return the results."
;;; Code:
-(eval-and-compile
- (if (not (fboundp 'base64-encode-string))
- (require 'base64)))
+(require 'base64)
(require 'qp)
(require 'mm-util)
-(defvar rfc2047-default-charset 'iso-8859-1
- "Default MIME charset -- does not need encoding.")
+(defvar rfc2047-unencoded-charsets '(ascii latin-iso8859-1)
+ "List of MULE charsets not to encode.")
(defvar rfc2047-header-encoding-alist
'(("Newsgroups" . nil)
(defun rfc2047-encodable-p ()
"Say whether the current (narrowed) buffer contains characters that need encoding."
- (let ((charsets (mapcar
- 'mm-mule-charset-to-mime-charset
- (find-charset-region (point-min) (point-max))))
- (cs (list 'us-ascii rfc2047-default-charset))
+ (let ((charsets (find-charset-region (point-min) (point-max)))
+ (cs rfc2047-unencoded-charsets)
found)
(while charsets
(unless (memq (pop charsets) cs)
(downcase (symbol-name encoding)) "?")))
(save-restriction
(narrow-to-region b e)
- (mm-encode-coding-region b e mime-charset)
+ (insert
+ (prog1
+ (mm-encode-coding-string (buffer-string) mime-charset)
+ (delete-region (point-min) (point-max))))
(funcall (cdr (assq encoding rfc2047-encoding-function-alist))
(point-min) (point-max))
(goto-char (point-min))
;;;
(defvar rfc2047-encoded-word-regexp
- "=\\?\\([^][\000-\040()<>@,\;:\\\"/?.=]+\\)\\?\\(B\\|Q\\)\\?\\([!->@-~ ]+\\)\\?=")
+ "=\\?\\([^][\000-\040()<>@,\;:\\\"/?.=]+\\)\\?\\(B\\|Q\\)\\?\\([!->@-~]+\\)\\?=")
;;;###autoload
(defun rfc2047-decode-region (start end)
"Decode MIME-encoded words in region between START and END."
(interactive "r")
- (let ((case-fold-search t)
- b e)
- (save-excursion
- (save-restriction
- (narrow-to-region start end)
- (goto-char (point-min))
- ;; Remove whitespace between encoded words.
- (while (re-search-forward
- (concat "\\(" rfc2047-encoded-word-regexp "\\)"
- "\\(\n?[ \t]\\)+"
- "\\(" rfc2047-encoded-word-regexp "\\)")
- nil t)
- (delete-region (goto-char (match-end 1)) (match-beginning 6)))
- ;; Decode the encoded words.
- (setq b (goto-char (point-min)))
- (while (re-search-forward rfc2047-encoded-word-regexp nil t)
- (setq e (match-beginning 0))
- (insert (rfc2047-parse-and-decode
- (prog1
- (match-string 0)
- (delete-region (match-beginning 0) (match-end 0)))))
- (mm-decode-coding-region b e rfc2047-default-charset)
- (setq b (point)))
- (mm-decode-coding-region b (point-max) rfc2047-default-charset)))))
+ (save-excursion
+ (save-restriction
+ (narrow-to-region start end)
+ (goto-char (point-min))
+ ;; Remove whitespace between encoded words.
+ (while (re-search-forward
+ (concat "\\(" rfc2047-encoded-word-regexp "\\)"
+ "\\(\n?[ \t]\\)+"
+ "\\(" rfc2047-encoded-word-regexp "\\)")
+ nil t)
+ (delete-region (goto-char (match-end 1)) (match-beginning 6)))
+ ;; Decode the encoded words.
+ (goto-char (point-min))
+ (while (re-search-forward rfc2047-encoded-word-regexp nil t)
+ (insert (rfc2047-parse-and-decode
+ (prog1
+ (match-string 0)
+ (delete-region (match-beginning 0) (match-end 0)))))))))
;;;###autoload
(defun rfc2047-decode-string (string)
"Decode the quoted-printable-encoded STRING and return the results."
(with-temp-buffer
- (mm-enable-multibyte)
(insert string)
(inline
(rfc2047-decode-region (point-min) (point-max)))
word)))
(defun rfc2047-decode (charset encoding string)
- "Decode STRING that uses CHARSET with ENCODING.
+ "Decode STRING as an encoded text.
Valid ENCODINGs are \"B\" and \"Q\".
If your Emacs implementation can't decode CHARSET, it returns nil."
(let ((cs (mm-charset-to-coding-system charset)))
(mm-decode-coding-string
(cond
((equal "B" encoding)
- (if (fboundp 'base64-decode-string)
- (base64-decode-string string)
- (base64-decode string)))
+ (base64-decode string))
((equal "Q" encoding)
(quoted-printable-decode-string
(mm-replace-chars-in-string string ?_ ? )))
--- /dev/null
+;;; rfc2231.el --- Functions for decoding rfc2231 headers
+;; Copyright (C) 1998 Free Software Foundation, Inc.
+
+;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'drums)
+
+(defun rfc2231-get-value (ct attribute)
+ "Return the value of ATTRIBUTE from CT."
+ (cdr (assq attribute (cdr ct))))
+
+(defun rfc2231-parse-string (string)
+ "Parse STRING and return a list.
+The list will be on the form
+ `(name (attribute . value) (attribute . value)...)"
+ (with-temp-buffer
+ (let ((ttoken (drums-token-to-list drums-text-token))
+ (stoken (drums-token-to-list drums-tspecials))
+ (ntoken (drums-token-to-list "0-9"))
+ (prev-value "")
+ display-name mailbox c display-string parameters
+ attribute value type subtype number encoded
+ prev-attribute)
+ (drums-init (mail-header-remove-whitespace
+ (mail-header-remove-comments string)))
+ (let ((table (copy-syntax-table drums-syntax-table)))
+ (modify-syntax-entry ?\' "w" table)
+ (set-syntax-table table))
+ (setq c (following-char))
+ (when (and (memq c ttoken)
+ (not (memq c stoken)))
+ (setq type (downcase (buffer-substring
+ (point) (progn (forward-sexp 1) (point)))))
+ ;; Do the params
+ (while (not (eobp))
+ (setq c (following-char))
+ (unless (eq c ?\;)
+ (error "Invalid header: %s" string))
+ (forward-char 1)
+ (setq c (following-char))
+ (if (and (memq c ttoken)
+ (not (memq c stoken)))
+ (setq attribute
+ (intern
+ (downcase
+ (buffer-substring
+ (point) (progn (forward-sexp 1) (point))))))
+ (error "Invalid header: %s" string))
+ (setq c (following-char))
+ (setq encoded nil)
+ (when (eq c ?*)
+ (forward-char 1)
+ (setq c (following-char))
+ (when (memq c ntoken)
+ (setq number
+ (string-to-number
+ (buffer-substring
+ (point) (progn (forward-sexp 1) (point)))))
+ (setq c (following-char))
+ (when (eq c ?*)
+ (setq encoded t)
+ (forward-char 1)
+ (setq c (following-char)))))
+ ;; See if we have any previous continuations.
+ (when (and prev-attribute
+ (not (eq prev-attribute attribute)))
+ (push (cons prev-attribute prev-value) parameters)
+ (setq prev-attribute nil
+ prev-value ""))
+ (unless (eq c ?=)
+ (error "Invalid header: %s" string))
+ (forward-char 1)
+ (setq c (following-char))
+ (cond
+ ((eq c ?\")
+ (setq value
+ (buffer-substring (1+ (point))
+ (progn (forward-sexp 1) (1- (point))))))
+ ((and (memq c ttoken)
+ (not (memq c stoken)))
+ (setq value (buffer-substring
+ (point) (progn (forward-sexp 1) (point)))))
+ (t
+ (error "Invalid header: %s" string)))
+ (when encoded
+ (setq value (rfc2231-decode-encoded-string value)))
+ (if number
+ (setq prev-attribute attribute
+ prev-value (concat prev-value value))
+ (push (cons attribute value) parameters)))
+
+ ;; Take care of any final continuations.
+ (when prev-attribute
+ (push (cons prev-attribute prev-value) parameters))
+
+ `(,type ,@(nreverse parameters))))))
+
+(defun rfc2231-decode-encoded-string (string)
+ "Decode an RFC2231-encoded string.
+These look like \"us-ascii'en-us'This%20is%20%2A%2A%2Afun%2A%2A%2A\"."
+ (with-temp-buffer
+ (let ((elems (split-string string "'")))
+ ;; The encoded string may contain zero to two single-quote
+ ;; marks. This should give us the encoded word stripped
+ ;; of any preceding values.
+ (insert (car (last elems)))
+ (goto-char (point-min))
+ (while (search-forward "%" nil t)
+ (insert
+ (prog1
+ (string-to-number (buffer-substring (point) (+ (point) 2)) 16)
+ (delete-region (1- (point)) (+ (point) 2)))))
+ ;; Encode using the charset, if any.
+ (when (and (< (length elems) 1)
+ (not (equal (intern (car elems)) 'us-ascii)))
+ (mm-decode-coding-region (point-min) (point-max)
+ (intern (car elems))))
+ (buffer-string))))
+
+(provide 'rfc2231)
+
+;;; rfc2231.el ends here
;;; Code:
(require 'easymenu)
+(require 'timezone)
(eval-when-compile (require 'cl))
(defvar gnus-score-mode-hook nil
table)
"Syntax table used in score-mode buffers.")
-(defvar score-mode-coding-system 'binary)
-
;;;###autoload
(defun gnus-score-mode ()
"Mode for editing Gnus score files.
(defun gnus-score-edit-insert-date ()
"Insert date in numerical format."
(interactive)
- (princ (time-to-day (current-time)) (current-buffer)))
+ (princ (gnus-score-day-number (current-time)) (current-buffer)))
(defun gnus-score-pretty-print ()
"Format the current score file."
(interactive)
(unless (file-exists-p (file-name-directory (buffer-file-name)))
(make-directory (file-name-directory (buffer-file-name)) t))
- (let ((coding-system-for-write score-mode-coding-system))
- (save-buffer))
+ (save-buffer)
(bury-buffer (current-buffer))
(let ((buf (current-buffer)))
(when gnus-score-edit-exit-function
(when (eq buf (current-buffer))
(switch-to-buffer (other-buffer (current-buffer))))))
+(defun gnus-score-day-number (time)
+ (let ((dat (decode-time time)))
+ (timezone-absolute-from-gregorian
+ (nth 4 dat) (nth 3 dat) (nth 5 dat))))
+
(provide 'score-mode)
;;; score-mode.el ends here
--- /dev/null
+;;; 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
--- /dev/null
+;;; 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
-@echo off\r
-\r
-rem Written by David Charlap <shamino@writeme.com>\r
-\r
-rem There are two catches, however. The emacs.bat batch file may not exist\r
-rem in all distributions. It is part of the Voelker build of Emacs 19.34\r
-rem (http://www.cs.washington.edu/homes/voelker/ntemacs.html). If the user\r
-rem installs Gnus with some other build, he may have to replace calls to\r
-rem %1\emacs.bat with something else.\r
-rem \r
-rem Also, the emacs.bat file that Voelker ships does not accept more than 9\r
-rem parameters, so the attempts to compile the .texi files will fail. To\r
-rem fix that (at least on NT. I don't know about Win95), the following\r
-rem change should be made to emacs.bat:\r
-rem \r
-rem %emacs_dir%\bin\emacs.exe %1 %2 %3 %4 %5 %6 %7 %8 %9\r
-rem \r
-rem should become\r
-rem \r
-rem %emacs_dir%\bin\emacs.exe %*\r
-rem \r
-rem which will allow the batch file to accept an unlimited number of\r
-rem parameters.\r
-\r
-if "%1" == "" goto usage\r
-\r
-cd lisp\r
-call %1\bin\emacs.bat -batch -q -no-site-file -l ./dgnushack.el -f dgnushack-compile\r
-if not "%2" == "copy" goto info\r
-copy *.el* %1\lisp\r
-\r
-:info\r
-cd ..\texi\r
-call %1\bin\emacs.bat -batch -q -no-site-file gnus.texi -l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer\r
-call %1\bin\emacs.bat -batch -q -no-site-file message.texi -l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer\r
-if not "%2" == "copy" goto done\r
-copy gnus %1\info\r
-copy gnus-?? %1\info\r
-copy message %1\info\r
-\r
-:etc\r
-cd ..\etc\r
-copy gnus-tut.txt %1\etc\r
-\r
-:done\r
-cd ..\r
-goto end\r
-\r
-:usage\r
-echo Usage: make ^<emacs-dir^> [copy]\r
-echo.\r
-echo where: ^<emacs-dir^> is the directory you installed emacs in\r
-echo eg. d:\emacs\19.34\r
-echo copy indicates that the compiled files should be copied to your\r
-echo emacs lisp, info, and etc directories\r
-\r
-:end\r
+@echo off
+
+rem Written by David Charlap <shamino@writeme.com>
+
+rem There are two catches, however. The emacs.bat batch file may not exist
+rem in all distributions. It is part of the Voelker build of Emacs 19.34
+rem (http://www.cs.washington.edu/homes/voelker/ntemacs.html). If the user
+rem installs Gnus with some other build, he may have to replace calls to
+rem %1\emacs.bat with something else.
+rem
+rem Also, the emacs.bat file that Voelker ships does not accept more than 9
+rem parameters, so the attempts to compile the .texi files will fail. To
+rem fix that (at least on NT. I don't know about Win95), the following
+rem change should be made to emacs.bat:
+rem
+rem %emacs_dir%\bin\emacs.exe %1 %2 %3 %4 %5 %6 %7 %8 %9
+rem
+rem should become
+rem
+rem %emacs_dir%\bin\emacs.exe %*
+rem
+rem which will allow the batch file to accept an unlimited number of
+rem parameters.
+
+if "%1" == "" goto usage
+
+cd lisp
+call %1\bin\emacs.bat -batch -q -no-site-file -l ./dgnushack.el -f dgnushack-compile
+if not "%2" == "copy" goto info
+copy *.el* %1\lisp
+
+:info
+cd ..\texi
+call %1\bin\emacs.bat -batch -q -no-site-file gnus.texi -l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -fsave-buffer
+call %1\bin\emacs.bat -batch -q -no-site-file message.texi -l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -fsave-buffer
+if not "%2" == "copy" goto done
+copy gnus %1\info
+copy gnus-?? %1\info
+copy message %1\info
+
+:etc
+cd ..\etc
+copy gnus-tut.txt %1\etc
+
+:done
+cd ..
+goto end
+
+:usage
+echo Usage: install ^<emacs-dir^> [copy]
+echo.
+echo where: ^<emacs-dir^> is the directory you installed emacs in
+echo eg. d:\emacs\19.34
+echo copy indicates that the compiled files should be copied to your
+echo emacs lisp, info, and etc directories
+
+:end
+++ /dev/null
-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'.
-1998-09-05 17:36:14 Lars Magne Ingebrigtsen <larsi@gnus.org>
+Mon Jun 29 21:46:13 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * gnus.texi (Sorting Groups): Change.
- (Various Summary Stuff): Addition.
+ * gnus.texi (Article Keymap): Typo.
-1998-09-04 00:40:07 David S. Goldberg <dsg@mitre.org>
+Sun Jun 28 17:41:10 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * gnus.texi (Article Hiding): Verify.
+ * gnus.texi (Formatting Fonts): Typo fix.
-1998-08-31 11:46:57 Lars Magne Ingebrigtsen <larsi@gnus.org>
+Sat Jun 27 04:37:14 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
- * gnus.texi (Mail Folders): Addition.
+ * gnus.texi (Mail-To-News Gateways): Addition.
+ (Mail-To-News Gateways): Typo.
+
+Fri Jun 26 13:33:00 1998 Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+ * gnus.texi (Summary Buffer Lines): Typo fix.
+
+Fri Jun 26 05:53:22 1998 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi (Score File Format): Addition.
+ (Mode Line Formatting): New.
+ (Summary Buffer Mode Line): Addition.
+
+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.
+
+Fri Mar 14 21:00:33 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi (Group Parameters): Addition.
+ (Expiring Mail): Addition.
+
+Wed Mar 12 06:57:14 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi (Various Various): Addition.
+
+Sat Mar 8 03:41:47 1997 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * gnus.texi (Group Parameters): Added example.
+ (Duplicates): Fix.
+
+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.
+
+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>
+
+ * gnus.texi (Scanning New Messages): Addition.
+
+Sat Nov 9 06:04:22 1996 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+
+ * 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>
+
+ * gnus.texi (Contributors): Added names.
+
+Fri Oct 11 12:38:59 1996 Lars Magne Ingebrigtsen <larsi@ylfing.ifi.uio.no>
+
+ * gnus.texi (Adaptive Scoring): Addition.
+
+Tue Oct 8 13:16:41 1996 Lars Magne Ingebrigtsen <larsi@ylfing.ifi.uio.no>
+
+ * Makefile (all): Make custom.
+
+Wed Oct 2 01:32:49 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * gnus.texi (Group Timestamps): New.
+
+Tue Oct 1 01:34:45 1996 Lars Magne Ingebrigtsen <larsi@hrym.ifi.uio.no>
+
+ * gnus.texi (Expiring Mail): Addition.
+ (Group Line Specification): Addition.
+
+Sat Sep 28 21:36:40 1996 Lars Magne Ingebrigtsen <larsi@ylfing.ifi.uio.no>
+
+ * gnus.texi (Foreign Groups): 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.
+
+Sun Aug 18 18:06:49 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
+
+ * 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
-1998-08-27 07:29:17 Lars Magne Ingebrigtsen <larsi@gnus.org>
+Mon Jul 29 10:12:24 1996 Lars Magne Ingebrigtsen <lars@eyesore.no>
- * gnus.texi (Mail Folders): Addition.
+ * gnus.texi (Misc Article): Addition.
+ (Advanced Scoring Tips): New.
+ (Advanced Scoring Example): New.
+ (Advanced Scoring Syntax): New.
+ (Advanced Scoring): New.
+++ /dev/null
-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
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
SHELL = /bin/sh
-PAPERTYPE=a4
all: gnus message
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
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
--- /dev/null
+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
+++ /dev/null
-\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
--- /dev/null
+\input texinfo @c -*-texinfo-*-
+
+@setfilename message
+@settitle Emacs MIME Manual
+@synindex fn cp
+@synindex vr cp
+@synindex pg cp
+@c @direntry
+@c * Emacs MIME: (emacs-mime). The MIME de/composition library.
+@c @end direntry
+@iftex
+@finalout
+@end iftex
+@setchapternewpage odd
+
+@ifinfo
+
+This file documents the Emacs MIME interface functionality.
+
+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
+are preserved on all copies.
+
+@ignore
+Permission is granted to process this file through Tex and print the
+results, provided the printed document carries copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+
+@end ignore
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that the
+entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+@end ifinfo
+
+@tex
+
+@titlepage
+@title Emacs MIME Manual
+
+@author by Lars Magne Ingebrigtsen
+@page
+
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1998 Free Software Foundation, Inc.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the
+entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+
+@end titlepage
+@page
+
+@end tex
+
+@node Top
+@top Emacs MIME
+
+This manual documents the libraries used to compose and display
+@sc{mime} messages.
+
+This is not a manual meant for users; it's a manual directed at people
+who want to write functions and commands that manipulate @sc{mime}
+elements.
+
+@sc{mime} is short for @dfn{Multipurpose Internet Mail Extensions}.
+This standard is documented in a number of RFCs; mainly RFC2045 (Format
+of Internet Message Bodies), RFC2046 (Media Types), RFC2047 (Message
+Header Extensions for Non-ASCII Text), RFC2048 (Registration
+Procedures), RFC2049 (Conformance Criteria and Examples). It is highly
+recommended that anyone who intends writing @sc{mime}-compliant software
+read at least RFC2045 and RFC2047.
+
+@menu
+* Basic Functions:: Utility and basic parsing functions.
+* Decoding and Viewing:: A framework for decoding and viewing.
+* Index:: Function and variable index.
+@end menu
+
+
+@node Basic Functions
+@chapter Basic Functions
+
+This chapter describes the basic, ground-level functions for parsing and
+handling. Covered here is parsing @code{From} lines, removing comments
+from header lines, decoding encoded words, parsing date headers and so
+on. High-level functionality is dealt with in the next chapter
+(@pxref{Decoding and Viewing}).
+
+@menu
+* mail-parse:: The generalized @sc{mime} and mail interface.
+* rfc2231:: Parsing @code{Content-Type} headers.
+* drums:: Handling mail headers defined by RFC822bis.
+* rfc2047:: En/decoding encoded words in headers.
+* time-date:: Functions for parsing dates and manipulating time.
+* qp:: Quoted-Printable en/decoding.
+* base64:: Base64 en/decoding.
+* mailcap:: How parts are displayed is specified by the @file{.mailcap} file
+@end menu
+
+
+@node mail-parse
+@section mail-parse
+
+It is perhaps misleading to place the @code{mail-parse} library in this
+chapter. It is not a basic low-level library---rather, it is an
+abstraction over the actual low-level libraries that are described in the
+subsequent sections.
+
+Standards change, and so programs have to change to fit in the new
+mold. For instance, RFC2045 describes a syntax for the
+@code{Content-Type} header that only allows ASCII characters in the
+parameter list. RFC2231 expands on RFC2045 syntax to provide a scheme
+for continuation headers and non-ASCII characters.
+
+The traditional way to deal with this is just to update the library
+functions to parse the new syntax. However, this is sometimes the wrong
+thing to do. In some instances it may be vital to be able to understand
+both the old syntax as well as the new syntax, and if there is only one
+library, one must choose between the old version of the library and the
+new version of the library.
+
+The Emacs MIME library takes a different tack. It defines a series of
+low-level libraries (@file{rfc2047.el}, @file{rfc2231.el} and so on)
+that parses strictly according to the corresponding standard. However,
+normal programs would not use the functions provided by these libraries
+directly, but instead use the functions provided by the
+@code{mail-parse} library. The functions in this library are just
+aliases to the corresponding functions in the latest low-level
+libraries. Using this scheme, programs get a consistent interface they
+can use, and library developers are free to create write code that
+handles new standards.
+
+The following functions are defined by this library:
+
+@table @code
+@item mail-header-parse-content-type
+@findex mail-header-parse-content-type
+Parse a @code{Content-Type} header and return a list on the following
+format:
+
+@lisp
+("type/subtype"
+ (attribute1 . value1)
+ (attribute2 . value2)
+ ...)
+@end lisp
+
+Here's an example:
+
+@example
+(mail-header-parse-content-type
+ "image/gif; name=\"b980912.gif\"")
+=> ("image/gif" (name . "b980912.gif"))
+@end example
+
+@item mail-header-parse-content-disposition
+@findex mail-header-parse-content-disposition
+Parse a @code{Content-Disposition} header and return a list on the same
+format as the function above.
+
+@item mail-content-type-get
+@findex mail-content-type-get
+Takes two parameters---a list on the format above, and an attribute.
+Returns the value of the attribute.
+
+@example
+(mail-content-type-get
+ '("image/gif" (name . "b980912.gif")) 'name)
+=> "b980912.gif"
+@end example
+
+@item mail-header-remove-comments
+@findex mail-header-remove-comments
+Return a comment-free version of a header.
+
+@example
+(mail-header-remove-comments
+ "Gnus/5.070027 (Pterodactyl Gnus v0.27) (Finnish Landrace)")
+=> "Gnus/5.070027 "
+@end example
+
+@item mail-header-remove-whitespace
+@findex mail-header-remove-whitespace
+Remove linear white space from a header. Space inside quoted strings
+and comments is preserved.
+
+@example
+(mail-header-remove-whitespace
+ "image/gif; name=\"Name with spaces\"")
+=> "image/gif;name=\"Name with spaces\""
+@end example
+
+@item mail-header-get-comment
+@findex mail-header-get-comment
+Return the last comment in a header.
+
+@example
+(mail-header-get-comment
+ "Gnus/5.070027 (Pterodactyl Gnus v0.27) (Finnish Landrace)")
+=> "Finnish Landrace"
+@end example
+
+@item mail-header-parse-address
+@findex mail-header-parse-address
+Parse an address and return a list containing the mailbox and the
+plaintext name.
+
+@example
+(mail-header-parse-address
+ "Hrvoje Niksic <hniksic@@srce.hr>")
+=> ("hniksic@@srce.hr" . "Hrvoje Niksic")
+@end example
+
+@item mail-header-parse-addresses
+@findex mail-header-parse-addresses
+Parse a string with list of addresses and return a list of elements like
+the one described above.
+
+@example
+(mail-header-parse-addresses
+ "Hrvoje Niksic <hniksic@@srce.hr>, Steinar Bang <sb@@metis.no>")
+=> (("hniksic@@srce.hr" . "Hrvoje Niksic")
+ ("sb@@metis.no" . "Steinar Bang"))
+@end example
+
+@item mail-header-parse-date
+@findex mail-header-parse-date
+Parse a date string and return an Emacs time structure.
+
+@item mail-narrow-to-head
+@findex mail-narrow-to-head
+Narrow the buffer to the header section of the buffer. Point is placed
+at the beginning of the narrowed buffer.
+
+@item mail-header-narrow-to-field
+@findex mail-header-narrow-to-field
+Narrow the buffer to the header under point.
+
+@item mail-encode-encoded-word-region
+@findex mail-encode-encoded-word-region
+Encode the non-ASCII words in the region. For instance,
+@samp{Naïve} is encoded as @samp{=?iso-8859-1?q?Na=EFve?=}.
+
+@item mail-encode-encoded-word-buffer
+@findex mail-encode-encoded-word-buffer
+Encode the non-ASCII words in the current buffer. This function is
+meant to be called narrowed to the headers of a message.
+
+@item mail-encode-encoded-word-string
+@findex mail-encode-encoded-word-string
+Encode the words that need encoding in a string, and return the result.
+
+@example
+(mail-encode-encoded-word-string
+ "This is naïve, baby")
+=> "This is =?iso-8859-1?q?na=EFve,?= baby"
+@end example
+
+@item mail-decode-encoded-word-region
+@findex mail-decode-encoded-word-region
+Decode the encoded words in the region.
+
+@item mail-decode-encoded-word-string
+@findex mail-decode-encoded-word-string
+Decode the encoded words in the string and return the result.
+
+@example
+(mail-decode-encoded-word-string
+ "This is =?iso-8859-1?q?na=EFve,?= baby")
+=> "This is naïve, baby"
+@end example
+
+@end table
+
+Currently, @code{mail-parse} is an abstraction over @code{drums},
+@code{rfc2047} and @code{rfc2231}. These are documented in the
+subsequent sections.
+
+
+@node rfc2231
+@section rfc2231
+
+RFC2231 defines a syntax for the @code{Content-Type} and
+@code{Content-Disposition} headers. Its snappy name is @dfn{MIME
+Parameter Value and Encoded Word Extensions: Character Sets, Languages,
+and Continuations}.
+
+In short, these headers look something like this:
+
+@example
+Content-Type: application/x-stuff;
+ title*0*=us-ascii'en'This%20is%20even%20more%20;
+ title*1*=%2A%2A%2Afun%2A%2A%2A%20;
+ title*2="isn't it!"
+@end example
+
+They usually aren't this bad, though.
+
+The following functions are defined by this library:
+
+@table @code
+@item rfc2231-parse-string
+@findex rfc2231-parse-string
+Parse a @code{Content-Type} header and return a list describing its
+elements.
+
+@example
+(rfc2231-parse-string
+ "application/x-stuff;
+ title*0*=us-ascii'en'This%20is%20even%20more%20;
+ title*1*=%2A%2A%2Afun%2A%2A%2A%20;
+ title*2=\"isn't it!\"")
+=> ("application/x-stuff"
+ (title . "This is even more ***fun*** isn't it!"))
+@end example
+
+@item rfc2231-get-value
+@findex rfc2231-get-value
+Takes one of the lists on the format above and return
+the value of the specified attribute.
+
+@end table
+
+
+@node drums
+@section drums
+
+@dfn{drums} is an IETF working group that is working on the replacement
+for RFC822.
+
+The functions provided by this library include:
+
+@table @code
+@item drums-remove-comments
+@findex drums-remove-comments
+Remove the comments from the argument and return the results.
+
+@item drums-remove-whitespace
+@findex drums-remove-whitespace
+Remove linear white space from the string and return the results.
+Spaces inside quoted strings and comments are left untouched.
+
+@item drums-get-comment
+@findex drums-get-comment
+Return the last most comment from the string.
+
+@item drums-parse-address
+@findex drums-parse-address
+Parse an address string and return a list that contains the mailbox and
+the plain text name.
+
+@item drums-parse-addresses
+@findex drums-parse-addresses
+Parse a string that contains any number of comma-separated addresses and
+return a list that contains mailbox/plain text pairs.
+
+@item drums-parse-date
+@findex drums-parse-date
+Parse a date string and return an Emacs time structure.
+
+@item drums-narrow-to-header
+@findex drums-narrow-to-header
+Narrow the buffer to the header section of the current buffer.
+
+@end table
+
+
+@node rfc2047
+@section rfc2047
+
+RFC2047 (Message Header Extensions for Non-ASCII Text) specifies how
+non-ASCII text in headers are to be encoded. This is actually rather
+complicated, so a number of variables are necessary to tweak what this
+library does.
+
+The following variables are tweakable:
+
+@table @code
+@item rfc2047-default-charset
+@vindex rfc2047-default-charset
+Characters in this charset should not be decoded by this library.
+This defaults to @code{iso-8859-1}.
+
+@item rfc2047-header-encoding-list
+@vindex rfc2047-header-encoding-list
+This is an alist of header / encoding-type pairs. Its main purpose is
+to prevent encoding of certain headers.
+
+The keys can either be header regexps, or @code{t}.
+
+The values can be either @code{nil}, in which case the header(s) in
+question won't be encoded, or @code{mime}, which means that they will be
+encoded.
+
+@item rfc2047-charset-encoding-alist
+@vindex rfc2047-charset-encoding-alist
+RFC2047 specifies two forms of encoding---@code{Q} (a
+Quoted-Printable-like encoding) and @code{B} (base64). This alist
+specifies which charset should use which encoding.
+
+@item rfc2047-encoding-function-alist
+@vindex rfc2047-encoding-function-alist
+This is an alist of encoding / function pairs. The encodings are
+@code{Q}, @code{B} and @code{nil}.
+
+@item rfc2047-q-encoding-alist
+@vindex rfc2047-q-encoding-alist
+The @code{Q} encoding isn't quite the same for all headers. Some
+headers allow a narrower range of characters, and that is what this
+variable is for. It's an alist of header regexps / allowable character
+ranges.
+
+@item rfc2047-encoded-word-regexp
+@vindex rfc2047-encoded-word-regexp
+When decoding words, this library looks for matches to this regexp.
+
+@end table
+
+Those were the variables, and these are this functions:
+
+@table @code
+@item rfc2047-narrow-to-field
+@findex rfc2047-narrow-to-field
+Narrow the buffer to the header on the current line.
+
+@item rfc2047-encode-message-header
+@findex rfc2047-encode-message-header
+Should be called narrowed to the header of a message. Encodes according
+to @code{rfc2047-header-encoding-alist}.
+
+@item rfc2047-encode-region
+@findex rfc2047-encode-region
+Encodes all encodable words in the region specified.
+
+@item rfc2047-encode-string
+@findex rfc2047-encode-string
+Encode a string and return the results.
+
+@item rfc2047-decode-region
+@findex rfc2047-decode-region
+Decode the encoded words in the region.
+
+@item rfc2047-decode-string
+@findex rfc2047-decode-string
+Decode a string and return the results.
+
+@end table
+
+
+@node time-date
+@section time-date
+
+While not really a part of the @sc{mime} library, it is convenient to
+document this library here. It deals with parsing @code{Date} headers
+and manipulating time. (Not by using tesseracts, though, I'm sorry to
+say.)
+
+These functions converts between five formats: A date string, an Emacs
+time structure, a decoded time list, a second number, and a day number.
+
+The functions have quite self-explanatory names, so the following just
+gives an overview of which functions are available.
+
+@example
+(parse-time-string "Sat Sep 12 12:21:54 1998 +0200")
+=> (54 21 12 12 9 1998 6 nil 7200)
+
+(date-to-time "Sat Sep 12 12:21:54 1998 +0200")
+=> (13818 19266)
+
+(time-to-seconds '(13818 19266))
+=> 905595714.0
+
+(seconds-to-time 905595714.0)
+=> (13818 19266 0)
+
+(time-to-day '(13818 19266))
+=> 729644
+
+(days-to-time 729644)
+=> (961933 65536)
+
+(time-since '(13818 19266))
+=> (0 430)
+
+(time-less-p '(13818 19266) '(13818 19145))
+=> nil
+
+(subtract-time '(13818 19266) '(13818 19145))
+=> (0 121)
+
+(days-between "Sat Sep 12 12:21:54 1998 +0200"
+ "Sat Sep 07 12:21:54 1998 +0200")
+=> 5
+
+(date-leap-year-p 2000)
+=> t
+
+(time-to-day-in-year '(13818 19266))
+=> 255
+
+@end example
+
+And finally, we have @code{safe-date-to-time}, which does the same as
+@code{date-to-time}, but returns a zero time if the date is
+syntactically malformed.
+
+
+
+@node qp
+@section qp
+
+This library deals with decoding and encoding Quoted-Printable text.
+
+Very briefly explained, qp encoding means translating all 8-bit
+characters (and lots of control characters) into things that look like
+@samp{=EF}; that is, an equal sign followed by the byte encoded as a hex
+string.
+
+The following functions are defined by the library:
+
+@table @code
+@item quoted-printable-decode-region
+@findex quoted-printable-decode-region
+QP-decode all the encoded text in the specified region.
+
+@item quoted-printable-decode-string
+@findex quoted-printable-decode-string
+Decode the QP-encoded text in a string and return the results.
+
+@item quoted-printable-encode-region
+@findex quoted-printable-encode-region
+QP-encode all the encodable characters in the specified region. The third
+optional parameter @var{fold} specifies whether to fold long lines.
+(Long here means 72.)
+
+@item quoted-printable-encode-string
+@findex quoted-printable-encode-string
+QP-encode all the encodable characters in a string and return the
+results.
+
+@end table
+
+
+@node base64
+@section base64
+
+Base64 is an encoding that encodes three bytes into four characters,
+thereby increasing the size by about 33%. The alphabet used for
+encoding is very resistant to mangling during transit.
+
+The following functions are defined by this library:
+
+@table @code
+@item base64-encode-region
+@findex base64-encode-region
+base64 encode the selected region. Return the length of the encoded
+text. Optional third argument @var{no-line-break} means do not break
+long lines into shorter lines.
+
+@item base64-encode-string
+@findex base64-encode-string
+base64 encode a string and return the result.
+
+@item base64-decode-region
+@findex base64-decode-region
+base64 decode the selected region. Return the length of the decoded
+text. If the region can't be decoded, return @code{nil} and don't
+modify the buffer.
+
+@item base64-decode-string
+@findex base64-decode-string
+base64 decode a string and return the result. If the string can't be
+decoded, @code{nil} is returned.
+
+@end table
+
+
+@node mailcap
+@section mailcap
+
+The @file{~/.mailcap} file is parsed by most @sc{mime}-aware message
+handlers and describes how elements are supposed to be displayed.
+Here's an example file:
+
+@example
+image/*; xv -8 %s
+audio/x-pn-realaudio; rvplayer %s
+@end example
+
+This says that all image files should be displayed with @samp{xv}, and
+that realaudio files should be played by @samp{rvplayer}.
+
+The @code{mailcap} library parses this file, and provides functions for
+matching types.
+
+@table @code
+@item mailcap-mime-data
+@vindex mailcap-mime-data
+This variable is an alist of alists containing backup viewing rules.
+
+@end table
+
+Interface functions:
+
+@table @code
+@item mailcap-parse-mailcaps
+@findex mailcap-parse-mailcaps
+Parse the @code{~/.mailcap} file.
+
+@item mailcap-mime-info
+Takes a @sc{mime} type as its argument and returns the matching viewer.
+
+@end table
+
+
+
+
+@node Decoding and Viewing
+@chapter Decoding and Viewing
+
+This chapter deals with decoding and viewing @sc{mime} messages on a
+higher level.
+
+The main idea is to first analyze a @sc{mime} article, and then allow
+other programs to do things based on the list of @dfn{handles} that are
+returned as a result of this analyzation.
+
+@menu
+* Dissection:: Analyzing a @sc{mime} message.
+* Handles:: Handle manipulations.
+* Display:: Displaying handles.
+@end menu
+
+
+@node Dissection
+@section Dissection
+
+The @code{mm-dissect-buffer} is the function responsible for dissecting
+a @sc{mime} article. If given a multipart message, it will recursively
+descend the message, following the structure, and return a tree of
+@sc{mime} handles that describes the structure of the message.
+
+
+@node Handles
+@section Handles
+
+A @sc{mime} handle is a list that fully describes a @sc{mime}
+component.
+
+The following macros can be used to access elements in a handle:
+
+@table @code
+@item mm-handle-buffer
+@findex mm-handle-buffer
+Return the buffer that holds the contents of the undecoded @sc{mime}
+part.
+
+@item mm-handle-type
+@findex mm-handle-type
+Return the parsed @code{Content-Type} of the part.
+
+@item mm-handle-encoding
+@findex mm-handle-encoding
+Return the @code{Content-Transfer-Encoding} of the part.
+
+@item mm-handle-undisplayer
+@findex mm-handle-undisplayer
+Return the object that can be used to remove the displayed part (if it
+has been displayed).
+
+@item mm-handle-set-undisplayer
+@findex mm-handle-set-undisplayer
+Set the undisplayer object.
+
+@item mm-handle-disposition
+@findex mm-handle-disposition
+Return the parsed @code{Content-Disposition} of the part.
+
+@item mm-handle-disposition
+@findex mm-handle-disposition
+Return the description of the part.
+
+@item mm-get-content-id
+Returns the handle(s) referred to by @code{Content-ID}.
+
+@end table
+
+
+@node Display
+@section Display
+
+Functions for displaying, removing and saving.
+
+@table @code
+@item mm-display-part
+@findex mm-display-part
+Display the part.
+
+@item mm-remove-part
+@findex mm-remove-part
+Remove the part (if it has been displayed).
+
+@item mm-inlinable-p
+@findex mm-inlinable-p
+Say whether a @sc{mime} type can be displayed inline.
+
+@item mm-automatic-display-p
+@findex mm-automatic-display-p
+Say whether a @sc{mime} type should be displayed automatically.
+
+@item mm-destroy-part
+@findex mm-destroy-part
+Free all resources occupied by a part.
+
+@item mm-save-part
+@findex mm-save-part
+Offer to save the part in a file.
+
+@item mm-pipe-part
+@findex mm-pipe-part
+Offer to pipe the part to some process.
+
+@item mm-interactively-view-part
+@findex mm-interactively-view-part
+Prompt for a mailcap method to use to view the part.
+
+@end table
+
+
+
+@node Index
+@chapter Index
+@printindex cp
+
+@summarycontents
+@contents
+@bye
+
+@c End:
--- /dev/null
+\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$$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
+
+
--- /dev/null
+\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
\input texinfo @c -*-texinfo-*-
@setfilename gnus
-@settitle Pterodactyl Gnus 0.17 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
\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}{
@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.
@tex
@titlepage
-@title Pterodactyl Gnus 0.17 Manual
+@title Semi-gnus 6.7.8 Manual
@author by Lars Magne Ingebrigtsen
@page
@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.17.
+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
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.
@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
@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.
@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:
@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
@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.
@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.
@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
@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
@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.)
@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.
@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
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
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
@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
@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
@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.
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.
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
@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},
@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.
@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.
@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
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.
@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
@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
@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
@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
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
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)
@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
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)
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}).
@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
@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)
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}).
@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)
@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}.
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
@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
(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:
@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.
@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
@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:
@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
@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)
@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.
@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
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}).
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
@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
. "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
@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
@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
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
@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
@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)
@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
@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}:
* 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.
@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.
+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
@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
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.
+This restriction may disappear in later versions of gnus.
@node Summary Buffer Mode Line
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.
@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
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
@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
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)
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.
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}).
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
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
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
+in the article, and gnus will jump to this bookmark the next time it
encounters the article. @xref{Setting Marks}
@item
@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!
@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
@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}).
@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
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.
@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
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
@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)
@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
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
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
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.
(@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
@vindex gnus-default-article-saver
You can customize the @code{gnus-default-article-saver} variable to make
-Gnus do what you want it to. You can use any of the four ready-made
+gnus do what you want it to. You can use any of the four ready-made
functions below, or you can create your own.
@table @code
@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")
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
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]+).*$}.
(@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}.
@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
@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.
@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)
@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
@end table
-@xref{Customizing Articles} for how to highlight articles automatically.
-
@node Article Fontisizing
@subsection Article Fontisizing
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
(copy-face 'red 'gnus-emphasis-italic)
@end lisp
-@xref{Customizing Articles} for how to fontize articles automatically.
-
@node Article Hiding
@subsection Article Hiding
@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)
@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)
@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
@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
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
@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
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
@end table
-@xref{Customizing Articles} for how to wash articles automatically.
-
@node Article Buttons
@subsection Article Buttons
@end table
-@xref{Customizing Articles} for how to buttonize articles automatically.
-
@node Article Date
@subsection Article Date
@end table
-@xref{Customizing Articles} for how to display the date in your
-preferred format automatically.
-
@node Article Signature
@subsection Article Signature
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}).
-
-@end table
-
-
@node Article Commands
@section Article Commands
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)
@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.
@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
@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)
@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
@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.
@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
@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.
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)
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
@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
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.
@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
@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
@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
@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
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.
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.
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:")
@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
@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.
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.
other naughty stuff in innocent-looking articles.
@vindex gnus-show-mime
-@vindex gnus-show-mime-method
+@vindex gnus-article-display-method-for-mime
@vindex gnus-strict-mime
-@findex metamail-buffer
+@findex gnus-article-display-mime-message
Gnus handles @sc{mime} by pushing the articles through
-@code{gnus-show-mime-method}, which is @code{metamail-buffer} by
-default. This function calls the external @code{metamail} program to
-actually do the work. One common problem with this program is that is
-thinks that it can't display 8-bit things in the Emacs buffer. To tell
-it the truth, put something like the following in your
-@file{.bash_profile} file. (You do use @code{bash}, don't you?)
-
-@example
-export MM_CHARSET="iso-8859-1"
-@end example
-
-For more information on @code{metamail}, see its manual page.
+@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
set, then you'll see some unfortunate display glitches in the article
buffer. These can't be avoided.
-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.)
+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
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
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
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
@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
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
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
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
@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
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
@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
@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
@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
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
("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
@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
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.
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.
@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
@item forward
Forwarded articles.
-@item mime-parts
-MIME multipart messages, besides digests.
-
@item mime-digest
@cindex digest
@cindex MIME digest
@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
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.
@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.
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
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
@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
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}).
@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.
@item h
Score on the head.
-
-@item t
-Score on thead.
-
@end table
@item
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
@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.
@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)
@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
@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}.
@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
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
@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}.
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.
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.
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'' --
@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
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
@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
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
Christopher Davis,
Andrew Eskilsson,
Kai Grossjohann,
-David KÃ¥gedal,
+David K\e$BiH\e(Bedal,
Richard Pieri,
Fabrice Popineau,
Daniel Quinlan,
Zlatko Calusic,
Massimo Campostrini,
Castor,
-David Charlap,
Dan Christensen,
Kevin Christian,
Michael R. Cook,
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
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,
Stephen Peters,
Jens-Ulrik Holger Petersen,
Ulrich Pfeifer,
-Matt Pharr,
John McClary Prevost,
-Bill Pringlemeir,
Mike Pullen,
Jim Radford,
Colin Rafferty,
Chuck Thompson,
Philippe Troin,
James Troup,
-Trung Tran-Duc,
Aaron M. Ucko,
Aki Vehtari,
Didier Verna,
* 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
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
@node Quassia Gnus
@subsubsection Quassia Gnus
-New features in Gnus 5.6:
+New features in Gnus 5.6.22:
@itemize @bullet
@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
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
@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.
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.
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
@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
@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
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
Solve the halting problem.
@c TODO
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
@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
\input texinfo @c -*-texinfo-*-
@setfilename message
-@settitle Pterodactyl Message 0.17 Manual
+@settitle Message 5.6.22 Manual
@synindex fn cp
@synindex vr cp
@synindex pg cp
@tex
@titlepage
-@title Pterodactyl Message 0.17 Manual
+@title Message 5.6.22 Manual
@author by Lars Magne Ingebrigtsen
@page
* Key Index:: List of Message mode keys.
@end menu
-This manual corresponds to Pterodactyl Message 0.17. Message is
-distributed with the Gnus distribution bearing the same version number
-as this manual has.
+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
@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
@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
@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
@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
@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
+++ /dev/null
-\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