This commit was generated by cvs2svn to compensate for changes in r2834,
authoryamaoka <yamaoka>
Wed, 7 Jul 1999 21:54:19 +0000 (21:54 +0000)
committeryamaoka <yamaoka>
Wed, 7 Jul 1999 21:54:19 +0000 (21:54 +0000)
which included commits to RCS files with non-trunk default branches.

132 files changed:
ChangeLog
GNUS-NEWS
Makefile [deleted file]
Makefile.in
README-gnus-bbdb.en [new file with mode: 0644]
README-gnus-bbdb.ja [new file with mode: 0644]
README.branch [new file with mode: 0644]
README.branch.ja [new file with mode: 0644]
README.semi [new file with mode: 0644]
README.semi.ja [new file with mode: 0644]
TODO.ja [new file with mode: 0644]
etc/gnus/x-splash [deleted file]
lisp/ChangeLog
lisp/Makefile [deleted file]
lisp/Makefile.in
lisp/base64.el [deleted file]
lisp/binhex.el [deleted file]
lisp/date.el [deleted file]
lisp/dgnushack.el
lisp/drums.el [deleted file]
lisp/earcon.el
lisp/gnus-agent.el
lisp/gnus-art.el
lisp/gnus-async.el
lisp/gnus-bbdb.el [new file with mode: 0644]
lisp/gnus-bcklg.el
lisp/gnus-cache.el
lisp/gnus-cus.el
lisp/gnus-demon.el
lisp/gnus-draft.el
lisp/gnus-dup.el
lisp/gnus-eform.el
lisp/gnus-ems.el
lisp/gnus-gl.el
lisp/gnus-group.el
lisp/gnus-i18n.el [new file with mode: 0644]
lisp/gnus-int.el
lisp/gnus-kill.el
lisp/gnus-logic.el
lisp/gnus-mailcap.el [deleted file]
lisp/gnus-mh.el
lisp/gnus-move.el
lisp/gnus-msg.el
lisp/gnus-nocem.el
lisp/gnus-range.el
lisp/gnus-salt.el
lisp/gnus-score.el
lisp/gnus-setup.el
lisp/gnus-soup.el
lisp/gnus-spec.el
lisp/gnus-srvr.el
lisp/gnus-start.el
lisp/gnus-sum.el
lisp/gnus-topic.el
lisp/gnus-undo.el
lisp/gnus-util.el
lisp/gnus-uu.el
lisp/gnus-win.el
lisp/gnus-xmas.el
lisp/gnus.el
lisp/ietf-drums.el [deleted file]
lisp/lpath.el
lisp/mail-parse.el [deleted file]
lisp/mail-prsvr.el [deleted file]
lisp/mailcap.el [deleted file]
lisp/mailheader.el
lisp/message.el
lisp/messagexmas.el
lisp/messcompat.el
lisp/mm-bodies.el [deleted file]
lisp/mm-decode.el [deleted file]
lisp/mm-encode.el [deleted file]
lisp/mm-util.el [deleted file]
lisp/mm-uu.el [deleted file]
lisp/mm-view.el [deleted file]
lisp/mm.el [deleted file]
lisp/mml.el [deleted file]
lisp/nnagent.el
lisp/nnbabyl.el
lisp/nndb.el
lisp/nndir.el
lisp/nndoc.el
lisp/nndraft.el
lisp/nneething.el
lisp/nnfolder.el
lisp/nngateway.el
lisp/nnheader.el
lisp/nnheaderxm.el
lisp/nnkiboze.el
lisp/nnlistserv.el
lisp/nnmail.el
lisp/nnmbox.el
lisp/nnmh.el
lisp/nnml.el
lisp/nnoo.el
lisp/nnsoup.el
lisp/nnspool.el
lisp/nntp.el
lisp/nnvirtual.el
lisp/nnweb.el
lisp/parse-time.el
lisp/pop3-fma.el [new file with mode: 0644]
lisp/pop3.el
lisp/qp.el [deleted file]
lisp/rfc1522.el [deleted file]
lisp/rfc1843.el [deleted file]
lisp/rfc2047.el [deleted file]
lisp/rfc2231.el [deleted file]
lisp/score-mode.el
lisp/smiley.el
lisp/smtp.el [new file with mode: 0644]
lisp/smtpmail.el [new file with mode: 0644]
lisp/time-date.el [deleted file]
lisp/uudecode.el [deleted file]
make.bat
readme [deleted file]
texi/ChangeLog
texi/Makefile [deleted file]
texi/Makefile.in
texi/TRANSLATION.ja [new file with mode: 0644]
texi/custom.texi [deleted file]
texi/dir
texi/emacs-mime.texi [deleted file]
texi/gnus-faq-ja.texi [new file with mode: 0644]
texi/gnus-ja.texi [new file with mode: 0644]
texi/gnus-terms.ja [new file with mode: 0644]
texi/gnus.texi
texi/gnusref-ja.tex [new file with mode: 0644]
texi/message-ja.texi [new file with mode: 0644]
texi/message.texi
texi/refcard-ja.tex [new file with mode: 0644]
texi/widget.texi [deleted file]

index db57397..66e3023 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
+1998-12-22  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/gnus-art.el (gnus-article-prepare-display): Set
+       `gnus-article-current-summary' to `gnus-summary-buffer'.
+
+1998-12-18  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/gnus-start.el (gnus-read-newsrc-el-file): Bug (referring to
+       unbounded variable) fix.
+
+1998-12-17  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/gnus-start.el (gnus-read-newsrc-el-file): Don't load newsrc
+       file if it does not exist.
+
+1998-12-14  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/gnus.el: (gnus-version-number): Update to 6.9.2.
+
+       * lisp/nnheader.el (nnheader-find-file-noselect): Call
+       `find-file-noselect-as-coding-system' with CODING-SYSTEM as the
+       1st arg.
+
+       * lisp/nnmail.el (nnmail-find-file): Call
+       `insert-file-contents-as-coding-system' with CODING-SYSTEM as the
+       1st arg.
+       * lisp/nnheader.el (nnheader-insert-file-contents): Likewise.
+
+       * lisp/gnus-start.el (gnus-save-newsrc-file): Call
+       `write-region-as-coding-system' with CODING-SYSTEM as the 1st arg.
+       (gnus-read-newsrc-el-file): Call
+       `insert-file-contents-as-coding-system' with CODING-SYSTEM as the
+       1st arg.
+
+       * lisp/gnus-cache.el (gnus-cache-save-buffers): Call
+       `gnus-write-buffer-as-coding-system' with CODING-SYSTEM as the 1st
+       arg.
+
+       * lisp/gnus-util.el (gnus-write-buffer-as-coding-system): Be
+       CODING-SYSTEM the 1st arg.
+
+       * lisp/nnmail.el (nnmail-write-region): Call
+       `write-region-as-coding-system' with CODING-SYSTEM as the 1st arg.
+       * lisp/gnus-start.el (gnus-save-newsrc-file): Likewise.
+       * lisp/gnus-agent.el (gnus-agent-expire): Likewise.
+       (gnus-agent-fetch-headers): Likewise.
+       (gnus-agent-flush-cache): Likewise.
+       (gnus-agent-fetch-articles): Likewise.
+       (gnus-agent-save-history): Likewise.
+       (gnus-agent-save-groups): Likewise.
+       (gnus-agent-save-active): Likewise.
+
+1998-12-14  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/nnheader.el (nnheader-find-file-noselect): Use
+       `find-file-noselect-as-coding-system' (renamed from
+       `find-file-noselect-as-specified-coding-system').
+
+       * lisp/nnmail.el (nnmail-find-file): Use
+       `insert-file-contents-as-coding-system' (renamed from
+       `insert-file-contents-as-specified-coding-system').
+       * lisp/nnheader.el (nnheader-insert-file-contents): Likewise.
+
+       * lisp/gnus-start.el (gnus-save-newsrc-file): Use
+       `write-region-as-coding-system' (renamed from
+       `write-region-as-specified-coding-system').
+       (gnus-read-newsrc-el-file): Use
+       `insert-file-contents-as-coding-system' (renamed from
+       `insert-file-contents-as-specified-coding-system').
+
+       * lisp/gnus-cache.el (gnus-cache-save-buffers): Use
+       `gnus-write-buffer-as-coding-system' (renamed from
+       `gnus-write-buffer-as-specified-coding-system').
+
+       * lisp/gnus-util.el (gnus-write-buffer-as-coding-system):
+       Renamed from `gnus-write-buffer-as-specified-coding-system'.
+
+       * lisp/nnmail.el (nnmail-write-region): Use
+       `write-region-as-coding-system' (renamed from
+       `write-region-as-specified-coding-system').
+       * lisp/gnus-start.el (gnus-save-newsrc-file): Likewise.
+       * lisp/gnus-agent.el (gnus-agent-expire): Likewise.
+       (gnus-agent-fetch-headers): Likewise.
+       (gnus-agent-flush-cache): Likewise.
+       (gnus-agent-fetch-articles): Likewise.
+       (gnus-agent-save-history): Likewise.
+       (gnus-agent-save-groups): Likewise.
+       (gnus-agent-save-active): Likewise.
+
+1998-12-11  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/nnheader.el (nnheader-find-file-noselect): Call
+       `find-file-noselect-as-specified-coding-system' directly.
+
+1998-12-10  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/pop3.el (pop3-movemail): Use `write-region-as-binary'
+       instead of `append-to-file'.
+       (pop3-movemail-file-coding-system): Abolished.
+
+       * lisp/nnheader.el (nnheader-find-file-noselect): Use
+       `find-file-noselect-as-specified-coding-system' instead of
+       `find-file-noselect'.
+
+       * lisp/nnmail.el (nnmail-find-file): Use
+       `insert-file-contents-as-specified-coding-system' instead of
+       `insert-file-contents'.
+       * lisp/nnheader.el (nnheader-insert-file-contents): Likewise.
+
+       * lisp/message.el (message-send-mail-with-qmail): Enclose
+       `call-process-region' with `as-binary-process'.
+       (message-send-mail-with-sendmail): Likewise.
+       (message-send-coding-system): Abolished.
+
+       * lisp/gnus-start.el (gnus-save-newsrc-file): Emulate
+       `save-buffer' with `write-region-as-specified-coding-system'.
+       (gnus-read-newsrc-el-file): Emulate `load' with
+       `insert-file-contents-as-specified-coding-system' and
+       `eval-region'.
+
+       * lisp/gnus-cache.el (gnus-cache-save-buffers): Use
+       `gnus-write-buffer-as-specified-coding-system' instead of
+       `gnus-write-buffer'.
+
+       * lisp/gnus-util.el (gnus-output-to-mail): Use
+       `write-region-as-binary' instead of `append-to-file'.
+       (gnus-output-to-mail): Use `gnus-write-buffer-as-binary' instead
+       of `gnus-write-buffer'.
+       (gnus-write-buffer-as-specified-coding-system): New function.
+       (gnus-write-buffer-as-binary): New function.
+
+       * lisp/nnmail.el (nnmail-write-region): Use
+       `write-region-as-specified-coding-system' instead of
+       `write-region'.
+       * lisp/gnus-start.el (gnus-save-newsrc-file): Likewise.
+       * lisp/gnus-agent.el (gnus-agent-expire): Likewise.
+       (gnus-agent-fetch-headers): Likewise.
+       (gnus-agent-flush-cache): Likewise.
+       (gnus-agent-fetch-articles): Likewise.
+       (gnus-agent-save-history): Likewise.
+       (gnus-agent-save-groups): Likewise.
+       (gnus-agent-save-active): Likewise.
+
+1998-12-08  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/smtp.el (smtp-via-smtp): Use `open-network-stream-as-binary'
+       instead of `open-network-stream'.
+       * lisp/pop3.el (pop3-open-server): Likewise.
+       * lisp/nntp.el (nntp-open-network-stream): Likewise.
+       * lisp/gnus-gl.el (bbb-connect-to-bbbd): Likewise.
+
+       * lisp/nntp.el (nntp-open-rlogin): Enclose `start-process' with
+       `as-binary-process'.
+       (nntp-open-telnet): Likewise.
+
+       * lisp/smtp.el (smtp-coding-system): Abolished.
+
+       * lisp/nntp.el (nntp-coding-system-for-write): Abolished.
+       (nntp-coding-system-for-read): Abolished.
+
+       * lisp/nntp.el: Don't require `tcp'.
+       * lisp/nndb.el: Likewise.
+
+1998-12-07  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/message.el (message-get-parameter-with-eval): Call
+       `message-get-parameter' with arg `key' first.
+
+1998-11-26  Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * lisp/gnus.el: (gnus-version-number): Update to 6.9.1.
+       (gnus-version): Modified for SEMI 1.11, FLIM 1.12.
+
+       * lisp/gnus-draft.el: (gnus-draft-decoding-buffer): Call
+       `mime-edit-decode-message-in-buffer' instead of
+       `mime-edit-decode-buffer'.
+
+       * lisp/gnus-sum.el: (gnus-structured-field-decoder): Use
+       `eword-decode-and-unfold-structured-field-body' instead of
+       'eword-decode-and-unfold-structured-field'.
+       (gnus-unstructured-field-decoder): remove `must-unfold'.
+
+1998-11-26  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/gnus-msg.el (gnus-summary-supersede-article): Bind
+       `gnus-message-setup-hook' to nil.
+
+       * lisp/message.el (message-supersede-setup-for-mime-edit): New
+       function.
+       (message-supersede-setup-function): New user option. Use
+       `message-supersede-setup-for-mime-edit' in default.
+       (message-supersede): Call `message-supersede-setup-function' if it
+       is non-nil.
+       (message-supersede-setup-hook): New user option.
+
+       * lisp/message.el (message-bounce-setup-for-mime-edit): Don't
+       delete header separator. It is up to MIME-Edit to do so.
+
+1998-11-25  Hasebe Satoshi  <hasebe@mtgcb.telcom.oki.co.jp>
+
+       * lisp/gnus-util.el: Require RMAIL in a different way.
+
+1998-11-24  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/pop3-fma.el (pop3-fma-save-password-information): New
+       variable. Do not save password information when
+       `pop3-fma-save-password-information' set to nil (in default).
+       (pop3-fma-encode-string): abolished - because of difference of
+       FLIM API.
+       (pop3-fma-decode-string): Likewise.
+
+1998-11-24  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/dgnushack.el (dgnushack-compile): Dismiss "gnus-bbdb.el"
+       from the list if BBDB has not been installed.
+
+1998-11-20  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/gnus-util.el: Require `rmail' only if RMAIL has been
+       installed.
+
+1998-11-19  Keiichi Suzuki  <kei-suzu@mail.wbs.ne.jp>
+
+       * lisp/message.el (message-get-reply-buffer): Abolished.
+       (message-get-original-reply-buffer): Abolished.
+       (message-get-parameter): New inline function.
+       (message-get-parameter-with-eval): New macro.
+       (message-fetch-reply-field): Do not use `message-get-reply-buffer'.
+       (message-yank-original): Ditto.
+       (message-setup): Use `message-get-parameter'.
+       (message-mime-insert-article): Use
+       `message-get-parameter-with-eval' instead of
+       `message-get-original-reply-buffer'.
+
+       * lisp/gnus-msg.el (gnus-inews-add-send-actions): Do not add
+       `set-window-configuration' to action when
+       `message-use-multi-frames' is non-`nil'.
+
+1998-11-19  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.8.20.
+
+       * Sync up with Gnus 5.6.45.
+
+1998-11-18  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/message.el (message-mimic-kill-buffer): Rewrite.
+
+1998-11-18  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/message.el (message-mimic-kill-buffer): New function.
+       (message-mode-map): Use it for `C-x k'.
+
+1998-11-18  Keiichi Suzuki  <kei-suzu@mail.wbs.ne.jp>
+
+       * lisp/message.el (message-dont-send): Use `message-delete-frame'.
+
+1998-11-14  Kenji Itoh  <keit@tpj.co.jp>
+
+       * lisp/nnmail.el (nnmail-read-passwd): Use `read-passwd' if it
+       exists as a function.
+
+       * lisp/pop3.el (pop3-read-passwd): Likewise.
+
+1998-11-16  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * make.bat: Replace line endings from `LF' to `CRLF'.
+
+1998-11-16  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * README-gnus-bbdb.en, README-gnus-bbdb.ja: New files.
+
+       * lisp/gnus-bbdb.el: Replace string in comment "Nana-" to "Semi-".
+
+1998-11-13  Keiichi Suzuki  <kei-suzu@mail.wbs.ne.jp>
+
+       * lisp/gnus-msg.el (gnus-setup-message): Setup
+       `message-startup-parameter-alist' for starting `message-mode'.
+
+       * lisp/message.el (message-parameter-alist): New variable.
+       (message-startup-parameter-alist): New variable.
+       (message-eval-parameter): New function.
+       (message-get-reply-buffer): New function.
+       (message-get-original-reply-buffer): New function.
+       (message-mode): Make new local variable `message-parameter-alist'.
+       (message-fetch-reply-field): Use `message-get-reply-buffer'.
+       (message-yank-original): Ditto.
+       (message-setup): Get message reply buffer from
+       `message-parameter-alist'.
+       (message-mime-insert-article): Use
+       `message-get-original-reply-buffer'.
+
+       * lisp/gnus-bbdb.el: New file. Interface for BBDB.
+
+1998-11-12  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/gnus-msg.el (gnus-summary-resend-bounced-mail): Bind
+       `gnus-message-setup-hook' to nil.
+
+       * lisp/message.el (message-bounce-setup-for-mime-edit): New
+       function.
+       (message-bounce-setup-function): New user option. Use
+       `message-bounce-setup-for-mime-edit' in default.
+       (message-bounce): Call `message-bounce-setup-function' if it is
+       non-nil.
+       (message-bounce-setup-hook): New user option.
+
+       * lisp/gnus-art.el (gnus-article-edit-done): Remove
+       `gnus-article-mime-edit-article-unwind' from
+       `gnus-article-mode-hook' before run `gnus-article-edit-exit'.
+       (gnus-article-edit-article): Call
+       `gnus-article-edit-article-setup-function' if it is non-nil.
+       (gnus-article-edit-article-setup-function): New user option. Use
+       `gnus-article-mime-edit-article-setup' in default.
+       (gnus-article-mime-edit-article-setup-hook): New hook.
+       (gnus-article-mime-edit-exit): New function. Use
+       `gnus-article-make-full-mail-header'.
+       (gnus-article-mime-edit-article-setup): Ditto.
+       (gnus-article-mime-edit-article-unwind): New function.
+       (gnus-article-make-full-mail-header): New function.
+       (gnus-article-prepare-display): New function.
+       (gnus-article-prepare): Use it.
+
+1998-11-11  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/message.el (message-mode-map): Add new command key
+       `C-x C-s' for `message-save-drafts'.
+
+1998-11-11  Keiichi Suzuki  <kei-suzu@mail.wbs.ne.jp>
+
+       * lisp/message.el (message-8bit-encoding-list): New variable.
+       (message-send-mail): Use `message-check-mail-syntax'.
+       (message-check-news-body-syntax): Use `message-check-8bit'.
+       (message-check-mail-syntax): New function.
+       (message-check-mail-header-syntax): New function.
+       (message-check-mail-body-syntax): New function.
+       (message-check-8bit): New function.
+
+1998-11-09  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/pop3-fma.el: Set the value of `nnmail-read-passwd' as a
+       symbol `pop3-fma-read-passwd'.
+
+1998-11-04  Yoshiki Hayashi  <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * lisp/message.el: (message-do-fcc): Don't run message-header-hook
+       and message-before-do-fcc-hook.
+
+1998-11-02  Yoshiki Hayashi  <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * lisp/message.el: (message-make-in-reply-to): Generate
+       In-Reply-To header according to draft-ietf-drums-msg-fmt-05.
+
+1998-10-30  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/gnus.el: Add autoload setting for `pop3-fma'.
+
+1998-10-28  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/pop3-fma.el: Determin base64 encode/decode function by FLIM.
+
+1998-10-26  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/message.el (message-save-drafts): New function.
+       To save drafts in network code.
+       (message-save-buffer): New variable.
+
+       * lisp/pop3-fma.el: Require `mel-b-el' if `mel-b' does not exist.
+
+1998-10-23  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/gnus-msg.el (gnus-message-make-user-agent): New function.
+
+1998-10-21  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/gnus-xmas.el (gnus-tilde-pad-form): Guard for non string
+       symbol.
+
+1998-10-17  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/pop3-fma.el (pop3-fma-init-message-hook): Change
+       message-send-hook to mime-edit-translate-hook.
+
+1998-10-14  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/pop3-fma.el (pop3-fma-read-char-exclusive): New macro. Use
+       `next-command-event' instead of `read-char-exclusive' under XEmacs.
+       (pop3-fma-read-noecho): Use it.
+
+1998-10-13  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/nnheaderxm.el (nnheader-xmas-Y-or-n-p): New function.
+       It will be used for the substitute of `nnheader-Y-or-n-p' under
+       XEmacs.
+
+       * lisp/nnheader.el (nnheader-Y-or-n-p): Rewrite for Emacs 19 or
+       later except for XEmacs.
+
+1998-10-08  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/message.el (message-mode-map): Define key `C-x k'.
+       (message-kill-buffer): Change the prompt string.
+       (message-kill-buffer): Refer to
+       `message-kill-buffer-query-function'.
+       (message-kill-buffer-query-function): New user option.
+
+       * lisp/nnheader.el (nnheader-Y-or-n-p): New function.
+
+1998-10-07  Yoshiki Hayashi   <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * lisp/nnagent.el (nnagent-open-server): Small bug fix.
+
+1998-10-07  Keiichi Suzuki  <kei-suzu@mail.wbs.ne.jp>
+
+       * TODO.ja: New file.
+
+1998-10-05  Yoshiki Hayashi   <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * lisp/gnus.el (gnus-info-filename): New variable.
+       (gnus-info-find-node): Use `gnus-info-filename' and
+       `current-language-environment'.
+
+1998-10-03  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus-draft.el (gnus-draft-send): Call
+       `message-send-news-function' or `message-send-mail-function'
+       instead of `message-send-and-exit'.
+
+1998-10-01  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/pop3-fma.el (pop3-fma-movemail): Bug fix.
+       Delete variable pop3-fma-movemail options.
+       Add new variabel pop3-fma-commandline-arguments.
+
+1998-09-30  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/message.el (message-make-user-agent): New implementation.
+
+1998-08-25  Shuhei KOBAYASHI  <shuhei-k@jaist.ac.jp>
+
+       * lisp/gnus-msg.el (gnus-bug-message): About Semi-gnus.
+       (gnus-extended-version): Return gnus version only.
+       (gnus-bug): Add Semi-gnus developers to recipients.
+
+       * lisp/message.el (message-make-user-agent): New function.
+       (message-generate-headers): Use it.
+
+1998-06-12  Shuhei KOBAYASHI  <shuhei-k@jaist.ac.jp>
+
+       * lisp/message.el (message-required-news-headers): `X-Newsreader'
+       was replaced by `User-Agent'.
+       (message-required-mail-headers): `X-Mailer' was replaced by
+       `User-Agent'.
+       (message-header-format-alist): `X-Mailer' and `X-Newsreader' were
+       replaced by `User-Agent'.
+       (message-generate-headers): Ditto.
+
+       (message-user-agent): New variable.
+       (message-newsreader): Replaced by `message-user-agent'.
+       (message-mailer): Ditto.
+       (message-mode): `message-mailer' and `message-newsreader' were
+       replaced by `message-user-agent'.
+
+       * lisp/gnus-msg.el (gnus-inews-add-send-actions): `message-mailer'
+       and `message-newsreader' were replaced by `message-user-agent'.
+       (gnus-extended-version): Generate "PRODUCT/VERSION" style strings.
+
+       * lisp/gnus-soup.el (gnus-soup-send-packet): `message-mailer' and
+       `message-newsreader' were replaced by `message-user-agent'.
+
+1998-09-17  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/gnus-draft.el (gnus-draft-edit-message): Use
+       `gnus-draft-setup-for-editing' instead of `gnus-draft-setup'.
+       (gnus-draft-send): Use `gnus-draft-setup-for-sending' instead of
+       `gnus-draft-setup'.
+       (gnus-draft-setup-for-editing): New function (renamed from
+       `gnus-draft-setup').
+       (gnus-draft-setup-for-sending): New function.
+       (gnus-draft-send-draft-buffer): New variable.
+
+1998-09-26  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.8.19.
+
+       * Sync up with Gnus 5.6.44.
+
+1998-09-16  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * Makefile.in: Add entry `info-ja'.
+       * texi/Makefile.in: Add entry `ja'.
+
+1998-09-11  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/message.el (message-send): Don't call
+       `message-fix-before-sending' before `message-encode-function' is
+       called.
+
+1998-09-06  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/pop3-fma.el: Add error handle and fix typo.
+
+1998-08-28  Keiichi Suzuki  <kei-suzu@mail.wbs.ne.jp>
+
+       * lisp/message.el: Repair `multi frame control'.
+
+1998-08-27  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.8.16.
+
+       * Sync up with Gnus 5.6.41.
+
+1998-08-26  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/gnus-spec.el (gnus-parse-simple-format): Use
+       `gnus-tilde-pad-form' instead of the padding faculty of `format'
+       under XEmacs-mule.
+
+       * lisp/gnus-xmas.el
+       (gnus-xmas-redefine): Redifine `gnus-truncate-string',
+       `gnus-tilde-max-form' and `gnus-tilde-cut-form' for XEmacs-mule.
+       (gnus-xmas-define): New function 'gnus-tilde-pad-form' for
+       XEmacs-mule.
+
+1998-08-26  Shuhei KOBAYASHI  <shuhei-k@jaist.ac.jp>
+
+       * lisp/gnus-art.el (gnus-article-narrow-to-signature):
+       Removed TM stuff.
+       (gnus-article-display-mime-message):
+       Set `mime-button-mother-dispatcher' in correct buffer.
+       (gnus-url-mailto): Use `gnus-setup-message'.
+       (gnus-button-mailto): Ditto.
+       (gnus-button-reply): Ditto.
+
+       * lisp/gnus-ems.el (gnus-mule-max-width-function): Removed.
+       (gnus-truncate-string): Use `truncate-string-to-width' if available.
+       (gnus-tilde-max-form): New implementation.
+       (gnus-tilde-cut-form): Ditto.
+
+       * lisp/gnus-msg.el (gnus-summary-mail-digest): New function.
+       (gnus-summary-post-digest): New function.
+
+       * lisp/gnus-sum.el (gnus-summary-make-menu-bar): Use
+       `gnus-summary-mail-digest' and `gnus-summary-post-digest' instead
+       of `gnus-uu-digest-mail-forward' and `gnus-uu-digest-post-forward'.
+
+       * lisp/gnus-util.el (gnus-truncate-string): Ignore more than two
+       arguments.
+
+       * lisp/message.el (message-forward-end-separator): Use
+       `text/plain' tag.
+
+1998-08-23  Shuhei KOBAYASHI  <shuhei-k@jaist.ac.jp>
+
+       * lisp/message.el: Suppress some byte-compile warnings.
+       (message-make-forward-subject): Failed to sync.
+       (message-setup): Ditto.
+       (message-clone-locals): Modify regexp.
+
+1998-08-23  Shuhei KOBAYASHI  <shuhei-k@jaist.ac.jp>
+
+       * lisp/gnus-agent.el (gnus-agent-braid-nov): Use
+       `nnheader-insert-file-contents'.
+
+       * lisp/gnus-i18n.el (gnus-set-summary-default-charset): Sync up
+       with "akr" branch.
+
+1998-08-23  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.8.15.
+
+       * Sync up with Gnus 5.6.39.
+
+       * lisp/pop3-fma.el (pop3-fma-movemail): Enable to get from APOP server.
+       (pop3-fma-set-pop3-password) Enable to get from APOP server.
+
+1998-08-20  Yoshiki Hayashi   <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * lisp/message.el (message-clone-locals): Add `user-full-name'
+       and `user-mail-address' to regexp.
+
+1998-08-20  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.8.14.
+
+       * Sync up with Gnus 5.6.38.
+
+1998-08-20  Keiichi Suzuki  <kei-suzu@mail.wbs.ne.jp>
+
+       * lisp/message.el (message-frames): New custom group.
+       (message-original-frame): New variable.
+       (message-use-multi-frames): New variable.
+       (message-delete-frame-on-exit): New variable.
+       (message-send-and-exit): Delete frame which made for editing
+       message.
+       (message-kill-buffer): Ditto.
+       (message-delete-frame): New function.
+       (message-pop-to-buffer): Make new frame when edit message.
+
+1998-08-18  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.8.13.
+
+       * Sync up with Gnus 5.6.37.
+
+1998-08-16  Yoshiki Hayashi   <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * lisp/gnus-sum.el (gnus-summary-scroll-down): Failed to sync.
+
+1998-08-16  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.8.12.
+
+       * Sync up with Gnus 5.6.36.
+
+1998-08-15  Yoshiki Hayashi   <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * texi/gnus-ja.texi: Update.
+
+1998-08-14  Katsumi Yamaoka   <yamaoka@jpl.org>
+
+       * lisp/gnus-start.el (gnus-save-newsrc-file): Bind
+       `coding-system-for-write' by `gnus-startup-file-coding-system'
+       while saving the quick newsrc file.
+
+       * lisp/gnus-start.el (gnus-startup-file-coding-system): Change
+       default value to `ctext'.
+
+1998-08-13  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/gnus.el (gnus-version-number): Fix typo.
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.8.11.
+
+       * Sync up with Gnus 5.6.34.
+
+1998-08-12  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.8.10.
+
+       * Sync up with Gnus 5.6.33.
+
+1998-08-11  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.8.9.
+
+       * Sync up with Gnus 5.6.31.
+
+1998-08-10  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.8.8.
+
+       * Sync up with Gnus 5.6.30.
+
+1998-08-10  Keiichi Suzuki  <kei-suzu@mail.wbs.ne.jp>
+
+       * lisp/message.el (message-yank-original): For citing any message.
+
+1998-08-10  Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.8.7.
+
+1998-08-06  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/smtp.el: Do not insert empty line at the end of message.
+
+1998-08-06  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.8.6.
+
+       * Sync up with Gnus 5.6.29.
+
+1998-08-05  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/gnus-start.el (gnus-read-init-file): Fix indent.
+       * lisp/gnus-ems.el (gnus-tilde-max-form): Redefine instead of
+       (gnus-summary-line-format-spec) to display Japanese character
+       correctly in Gnus summaly.
+
+1998-08-05  Keiichi Suzuki  <kei-suzu@mail.wbs.ne.jp>
+
+       * lisp/gnus-start.el (gnus-read-init-file): Don't restrict
+       `coding-system-for-read' by `binary' when loading `.gnus'.
+
+1998-08-04  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.8.5.
+
+       * Sync up with Gnus 5.6.28.
+
+1998-07-27  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.8.4.
+
+       * Sync up with Gnus 5.6.27.
+
+1998-07-27  Yoshiki Hayashi   <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * texi/message-ja.texi: Japanese translation of "message.texi".
+
+1998-07-26  Tatsuya Ichikawa  <t-ichi@po.shiojiri.ne.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.8.3.
+
+       * Sync up with Gnus 5.6.26.
+
+1998-07-23  Shuhei KOBAYASHI  <shuhei-k@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.8.2.
+       (gnus-version): Change to "Semi-gnus". Change comment format.
+
+1998-07-21  Keisuke Mori   <ksk@ntts.com>
+
+       * texi/gnus-ja.texi: Add "Appendices".
+
+1998-07-21  Yoshiki Hayashi   <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * texi/gnus-ja.texi: Add "Appendices".
+
+1998-07-16  Shuhei KOBAYASHI  <shuhei-k@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.8.1.
+
+       * Sync up with Gnus 5.6.24.
+
+1998-07-10  Keiichi Suzuki  <kei-suzu@mail.wbs.ne.jp>
+
+       * lisp/gnus-ems.el (gnus-mule-cite-add-face): Fix problem when multi
+       bytes charactors are used in cite prefix. (for Emacs 20.1 and 20.2)
+       (gnus-ems-redefine): for Emacs 20.1 and 20.2
+
+       * lisp/gnus-cite.el (gnus-cite-add-face): Abolish my last bogus change.
+
+1998-07-09  Keiichi Suzuki  <kei-suzu@mail.wbs.ne.jp>
+
+       * lisp/gnus-cite.el (gnus-cite-add-face): Fix problem when multi
+       bytes charactors are used in cite prefix.
+
+1998-07-07  Yoshiki Hayashi   <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * texi/gnus-ja.texi: Add "The End".
+
+1998-07-06  Keisuke Mori   <ksk@ntts.com>
+
+       * texi/gnus-ja.texi: Add "Various".
+
+1998-07-06  Yoshiki Hayashi   <g740685@komaba.ecc.u-tokyo.ac.jp>
+
+       * texi/gnus-ja.texi: Add "Various".
+       * texi/gnus-ja.texi: Sync up with Gnus 5.6.22
+
+1998-07-02  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/message.el (message-header-format-alist): Repair to use
+       `message-fill-references' for References.
+
+1998-07-01  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus-art.el (gnus-article-header-presentation-method):
+       Delete nil optional arguments.
+       - Delete setting for `mime-raw-representation-type-alist'.
+
+1998-07-01  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
+
+       * lisp/gnus.el (gnus-version-number): Update to 6.8.0.
+       (gnus-version): Modify for FLIM 1.8.
+
+       * lisp/gnus-art.el (gnus-article-header-presentation-method):
+       Modify for FLIM 1.8.
+
+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
index a725d82..0c5b11a 100644 (file)
--- a/GNUS-NEWS
+++ b/GNUS-NEWS
 ** Gnus changes.
 
-The Gnus NEWS entries are short, but they reflect sweeping changes in
-four areas: Article display treatment, MIME treatment,
-internationalization and mail-fetching.
+*** 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:
 
-*** The mail-fetching functions have changed.  See the manual for the
-many details.  In particular, all procmail fetching variables are gone.
+     (push "~/lisp/custom" load-path)
 
-*** Gnus is now a MIME-capable reader.  This affects many parts of
-Gnus, and adds a slew of new commands.  See the manual for details.
+Modify to suit your needs.
 
-*** Gnus has also been multilingualized.  This also affects too
-many parts of Gnus to summarize here, and adds many new variables.
+*** 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.
 
-*** gnus-auto-select-first can now be a function to be
-called to position point.
+*** 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.
 
-*** The user can now decide which extra headers should be included in
-summary buffers and NOV files.
+*** `gnus-alter-header-function' can now be used to alter header
+values.
 
-*** `gnus-article-display-hook' has been removed.  Instead, a number
-of variables starting with `gnus-treat-' have been added.
+*** `gnus-summary-goto-article' now accept Message-ID's.
 
-*** The Gnus posting styles have been redone again and now works in a
-subtly different manner.
+*** 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.
diff --git a/Makefile b/Makefile
deleted file mode 100644 (file)
index 05503f4..0000000
--- a/Makefile
+++ /dev/null
@@ -1,36 +0,0 @@
-EMACS=emacs
-XEMACS=xemacs
-
-all: lick info
-
-lick:
-       cd lisp; $(MAKE) EMACS=$(EMACS) all
-
-# Rule for Lars and nobody else.
-some:
-       cd lisp; $(MAKE) EMACS=$(EMACS) some
-l:
-       cd lisp; $(MAKE) EMACS=$(EMACS) clever
-
-info:
-       cd texi; $(MAKE) EMACS=$(EMACS) all
-
-clean:
-       rm -f */*.orig */*.rej *.orig *.rej
-
-xsome: 
-       cd lisp; $(MAKE) EMACS=$(XEMACS) some
-
-elclean:
-       rm lisp/*.elc
-
-x:
-       make EMACS=xemacs
-
-distclean:
-       make clean
-       rm -r *~
-       for i in lisp texi; do (cd $$i; make distclean); done
-
-osome:
-       make EMACS=emacs-19.34 some
index a91fabc..f486fd0 100644 (file)
@@ -5,46 +5,49 @@ 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
+
+info-ja:
+       cd texi && $(MAKE) EMACS=$(EMACS) MAKEINFO=no ja
 
 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 *~
        for i in lisp texi; do (cd $$i; make distclean); done
-       rm -f config.log config.status config.cache Makefile
+       rm -f config.log config.status Makefile
 
 osome:
-       make EMACS=xemacs21 some
+       make EMACS=emacs-19.34 some
 
 config.status: $(srcdir)/configure
        $(SHELL) ./config.status --recheck
diff --git a/README-gnus-bbdb.en b/README-gnus-bbdb.en
new file mode 100644 (file)
index 0000000..b99d805
--- /dev/null
@@ -0,0 +1,104 @@
+-*- mode: text; fill-column: 70; -*-
+
+---
+ If BBDB is used then, bbdb-gnus.elc can't be shared with them before
+Semi-gnus 6.8.X. It is necessary to byte-compile it again.
+
+;; It is a simple way that only bbdb-gnus.el is byte-compiled after
+;; gnus starts.
+
+---
+gnus-bbdb.el
+
+ This is the BBDB API module for Semi-gnus. `mime-bbdb' should not be
+necessary for Semi-gnus, if that module were used.
+
+ You need FLIM 1.11.3 or later.
+
+ If you are using bbdb-auto-notes-hook, the patch listed at the end
+of this file should be applied. If not, it might not.
+
+ EXAMPLE:
+
+;; You need to set nothing for `mime-bbdb'.
+;(setq mime-bbdb/use-mail-extr nil)
+;(eval-after-load "mail-extr" '(require 'mime-bbdb))
+
+(require 'bbdb)
+(require 'gnus-bbdb)
+(bbdb-initialize 'sc)  ;; 'Gnus or 'gnus should be deleted.
+(add-hook 'gnus-startup-hook 'gnus-bbdb-insinuate)
+
+ If you would like to decode the quoted encoded words forcibly, even
+though FLIM does not decode them, put the following lines in your
+.gnus file.
+
+(setq gnus-bbdb/decode-field-body-function
+      (function
+       (lambda (field-body field-name)
+         (eword-decode-string field-body))))
+
+---
+ This is a patch for bbdb.el / bbdb-hooks.el.
+
+------ cut here ------ cut here ------ cut here ------ cut here ------
+--- bbdb-hooks.el~     Tue Oct 13 03:13:50 1998
++++ bbdb-hooks.el      Fri Oct 30 17:05:53 1998
+@@ -352,12 +352,22 @@
+       (marker (bbdb-header-start))
+       field pairs fieldval  ; do all bindings here for speed
+       regexp string notes-field-name notes
+-       replace-p replace-or-add-msg)
++      replace-p replace-or-add-msg
++      extract-field-value-funtion)
+     (set-buffer (marker-buffer marker))
+     (save-restriction
+-      (widen)
+-      (goto-char marker)
+-      (if (and (setq fieldval (bbdb-extract-field-value "From"))
++      (let ((function-list bbdb-extract-field-value-function-list)
++          function)
++      (or (progn
++            (while (and (not extract-field-value-funtion)
++                        (setq function (pop function-list)))
++              (setq extract-field-value-funtion (funcall function)))
++            extract-field-value-funtion)
++          (progn
++            (widen)
++            (goto-char marker)
++            (setq extract-field-value-funtion 'bbdb-extract-field-value))))
++      (if (and (setq fieldval (funcall extract-field-value-funtion "From"))
+              (string-match (bbdb-user-mail-names) fieldval))
+         ;; Don't do anything if this message is from us.  Note that we have
+         ;; to look at the message instead of the record, because the record
+@@ -368,7 +378,7 @@
+         (goto-char marker)
+         (setq field (car (car ignore-all))
+               regexp (cdr (car ignore-all))
+-              fieldval (bbdb-extract-field-value field))
++              fieldval (funcall extract-field-value-funtion field))
+         (if (and fieldval
+                  (string-match regexp fieldval))
+             (setq ignore t)
+@@ -382,7 +392,7 @@
+               pairs (cdr (car rest))  ; (REGEXP . STRING) or
+                                       ; (REGEXP FIELD-NAME STRING) or
+                                       ; (REGEXP FIELD-NAME STRING REPLACE-P)
+-              fieldval (bbdb-extract-field-value field)) ; e.g., Subject line
++              fieldval (funcall extract-field-value-funtion field)) ; e.g., Subject line
+         (if fieldval
+             (while pairs
+               (setq regexp (car (car pairs))
+--- bbdb.el~   Tue Oct 13 03:14:55 1998
++++ bbdb.el    Fri Oct 30 17:05:53 1998
+@@ -620,6 +620,7 @@
+ (defvar bbdb-showing-changed-ones nil)
+ (defvar bbdb-modified-p nil)
+ (defvar bbdb-elided-display nil)
++(defvar bbdb-extract-field-value-function-list nil)
+ (defvar bbdb-debug t)
+ (defmacro bbdb-debug (&rest body)
+------ cut here ------ cut here ------ cut here ------ cut here ------
+
+---
diff --git a/README-gnus-bbdb.ja b/README-gnus-bbdb.ja
new file mode 100644 (file)
index 0000000..18f3e9b
--- /dev/null
@@ -0,0 +1,104 @@
+-*- mode: text; fill-column: 70; -*-
+
+---
+BBDB \e$B$r;HMQ$5$l$F$$$kJ}$O!"\e(B bbdb-gnus.elc \e$B$r\e(B Semi-gnus 6.8.X \e$B0JA0$N$b\e(B
+\e$B$N$H6&M-$9$k$3$H$O$G$-$^$;$s!#I,$:!"\e(B byte-compile \e$B$7D>$7$F$/$@$5$$!#\e(B
+
+;; gnus \e$B$r5/F0$7$?$"$H$G!"\e(B bbdb-gnus.el \e$B$N$_$r\e(B byte-compile \e$B$9$k$H$$$&\e(B
+;; \e$B$N$,$*<j7Z$G$9!#\e(B :-)
+
+---
+gnus-bbdb.el
+
+Semi-gnus \e$B$KFC2=$7$?\e(B BBDB API \e$B%b%8%e!<%k$G$9!#$3$N%b%8%e!<%k$r;HMQ$9$k\e(B
+\e$B$3$H$K$h$C$F!"\e(B Semi-gnus \e$B$G;HMQ$9$k>l9g$K$O\e(B mime-bbdb \e$B$,ITMW$K$J$j$^$9!#\e(B
+
+1.11.3 \e$B0J9_$N\e(B FLIM \e$B$,I,MW$G$9!#\e(B
+
+bbdb-auto-notes-hook \e$B$r;HMQ$7$F$$$J$$J}$K$OITMW$G$9$,!";HMQ$7$F$$$kJ}\e(B
+\e$B$O\e(B bbdb.el / bbdb-hooks.el \e$B$K$3$N%U%!%$%k$N:G8e$K$"$k\e(B patch \e$B$r$"$F$kI,\e(B
+\e$BMW$,$"$j$^$9!#\e(B
+
+\e$B@_DjNc\e(B:
+
+;; mime-bbdb \e$B$K4X$9$k@_Dj$OITMW$G$9!#\e(B
+;(setq mime-bbdb/use-mail-extr nil)
+;(eval-after-load "mail-extr" '(require 'mime-bbdb))
+
+(require 'bbdb)
+(require 'gnus-bbdb)
+(bbdb-initialize 'sc)  ;; 'gnus / 'Gnus \e$B$O$O$:$7$F$/$@$5$$!#\e(B
+(add-hook 'gnus-startup-hook 'gnus-bbdb-insinuate)
+
+FLIM \e$B$G$O\e(B quote \e$B$5$l$?\e(B eword encoded word \e$B$O\e(B decode \e$B$5$l$^$;$s$,!"$=$l\e(B
+\e$B$r6/@)E*$K\e(B decode \e$B$7$?$$>l9g$K$O!"<!$N@_Dj$r2C$($F$/$@$5$$!#\e(B
+
+(setq gnus-bbdb/decode-field-body-function
+      (function
+       (lambda (field-body field-name)
+         (eword-decode-string field-body))))
+
+---
+\e$B0J2<$O\e(B bbdb.el / bbdb-hooks.el \e$B$K$"$F$k\e(B patch \e$B$G$9!#\e(B
+
+------ cut here ------ cut here ------ cut here ------ cut here ------
+--- bbdb-hooks.el~     Tue Oct 13 03:13:50 1998
++++ bbdb-hooks.el      Fri Oct 30 17:05:53 1998
+@@ -352,12 +352,22 @@
+       (marker (bbdb-header-start))
+       field pairs fieldval  ; do all bindings here for speed
+       regexp string notes-field-name notes
+-       replace-p replace-or-add-msg)
++      replace-p replace-or-add-msg
++      extract-field-value-funtion)
+     (set-buffer (marker-buffer marker))
+     (save-restriction
+-      (widen)
+-      (goto-char marker)
+-      (if (and (setq fieldval (bbdb-extract-field-value "From"))
++      (let ((function-list bbdb-extract-field-value-function-list)
++          function)
++      (or (progn
++            (while (and (not extract-field-value-funtion)
++                        (setq function (pop function-list)))
++              (setq extract-field-value-funtion (funcall function)))
++            extract-field-value-funtion)
++          (progn
++            (widen)
++            (goto-char marker)
++            (setq extract-field-value-funtion 'bbdb-extract-field-value))))
++      (if (and (setq fieldval (funcall extract-field-value-funtion "From"))
+              (string-match (bbdb-user-mail-names) fieldval))
+         ;; Don't do anything if this message is from us.  Note that we have
+         ;; to look at the message instead of the record, because the record
+@@ -368,7 +378,7 @@
+         (goto-char marker)
+         (setq field (car (car ignore-all))
+               regexp (cdr (car ignore-all))
+-              fieldval (bbdb-extract-field-value field))
++              fieldval (funcall extract-field-value-funtion field))
+         (if (and fieldval
+                  (string-match regexp fieldval))
+             (setq ignore t)
+@@ -382,7 +392,7 @@
+               pairs (cdr (car rest))  ; (REGEXP . STRING) or
+                                       ; (REGEXP FIELD-NAME STRING) or
+                                       ; (REGEXP FIELD-NAME STRING REPLACE-P)
+-              fieldval (bbdb-extract-field-value field)) ; e.g., Subject line
++              fieldval (funcall extract-field-value-funtion field)) ; e.g., Subject line
+         (if fieldval
+             (while pairs
+               (setq regexp (car (car pairs))
+--- bbdb.el~   Tue Oct 13 03:14:55 1998
++++ bbdb.el    Fri Oct 30 17:05:53 1998
+@@ -620,6 +620,7 @@
+ (defvar bbdb-showing-changed-ones nil)
+ (defvar bbdb-modified-p nil)
+ (defvar bbdb-elided-display nil)
++(defvar bbdb-extract-field-value-function-list nil)
+ (defvar bbdb-debug t)
+ (defmacro bbdb-debug (&rest body)
+------ cut here ------ cut here ------ cut here ------ cut here ------
+
+---
diff --git a/README.branch b/README.branch
new file mode 100644 (file)
index 0000000..eaf63bf
--- /dev/null
@@ -0,0 +1,110 @@
+README.branch --- description of branches and tags. (DRAFT)
+========================================================================
+
+Semi-gnus revision tree (1998-07-16)
+
+    vendor      personal    main trunk      public
+    branch      branches                    branches
+------------------------------------------------------------------------
+qGnus 0.??  ------> Semi-gnus 6.0.0
+       :                        :
+       :        himi     <--  6.0.7
+       :        ichikawa <--  6.0.8
+       :        akr      <--  6.2.3
+       :        shuhei-k <--  6.3.1
+Gnus 5.6.11 ------>           6.3.3
+       :                      6.4.0 (for SEMI 1.5)
+       :                     (6.4.?)------> for SEMI 1.5
+       :                        |    \
+       :                        |     \
+(Synch with original Gnus       |      ---> for SEMI 1.6
+ was done many times, but    (6.4.?)------> 6.5 (for SEMI 1.7)
+ we don't include them.)        |        /    6.5.0
+       :                        |    (?)/
+       :                        |   <---
+       :                     (6.5.?)------> 6.6 (for SEMI 1.8, FLIM 1.7)
+       :                        |    \        6.6.0        stable branch
+       :                        |     \
+       :                        |      ---> 6.7 (for SEMI 1.8, FLIM 1.7)
+       :                        |             6.7.0       develop branch
+       :     sync               |               :
+Gnus 5.6.22 ------>             |   feedback  6.7.7
+       :                     (6.7.8)<------   6.7.8
+       :                        |    \
+       :                        |     \
+       :                        |      ---> 6.8 (for SEMI 1.8, FLIM 1.8)
+       :     sync               |             6.8.0
+Gnus 5.6.24 ------>             |             6.8.1
+       :                        :               :
+       :                        :               :
+========================================================================
+
+The Vendor Branch
+
+    Original version of Gnus.
+    Each version has a tag of the form "qgnus-0_XY" or "gnus-5_X_Y" or
+    "pgnus-0_XY".
+
+    The branch tag for the vendor branch is "larsi".
+
+The Main Trunk
+
+    Semi-gnus was developed on the main trunk until current branch-
+    management plan (See "Public Branches" below) was introduced.
+    Each version has a tag of the form "gnus-6_N2_N3". (0 < N2 < 5)
+
+Public Branches
+
+    Current main stream of Semi-gnus development.
+
+    [Goal and policy of public branches here ???]
+
+    Each branch has a tag of the form "gnus-N1_N2" and each version
+    has a tag of the form "gnus-N1_N2_N3".
+
+    N1, N2, and N3 are changed by the following rules.
+
+    N1 will be incremented if any fundamental architecture change is
+    made.  Of cource, in this case, N2 and N3 will be reset to zero.
+
+    N2 will be incremented and new branch will be made if any "major
+    changes" are made.  "major changes" include API changes, major
+    version up of original Gnus, or synchronization with original Gnus
+    which requires design decision.
+
+    N3 will be incremented if some "minor changes" are made.  "minor
+    changes" include small bug fix or synchronization with original Gnus
+    without design decision.
+
+    The following branch tags are currently available.
+
+       for-semi-1_5    Semi-gnus for SEMI 1.5 API
+       for-semi-1_6    Semi-gnus for SEMI 1.6 API
+       gnus-6_5        Semi-gnus for SEMI 1.7 API
+       gnus-6_6        Semi-gnus for SEMI 1.8, FLIM 1.7 API
+       gnus-6_7        Semi-gnus for SEMI 1.8, FLIM 1.7 API
+       gnus-6_8        Semi-gnus for SEMI 1.8, FLIM 1.8 API (stable)
+       gnus-6_9        Semi-gnus for SEMI 1.11, FLIM 1.12 API (develop)
+
+Personal Branches
+
+    Some Semi-gnus developers have their own "personal branches".
+    Each personal branch may have its own goal and/or policy.
+    See README.${tag} (if exists) for information of each branch.
+
+    The following branch tags are curretly available.
+
+       himi            Owner: Miyashita Hisashi
+       ichikawa        Owner: Tatsuya Ichikawa
+       akr             Owner: Tanaka Akira
+       shuhei-k        Owner: Shuhei KOBAYASHI
+
+"semi-gnus" Tag
+
+    Was assigned to the latest stable version.
+    Currently not maintained. (XXX: ???)
+
+"for-semi-N1_N2" Tags
+
+    Were assigned to corresponding version of SEMI API N1.N2.
+    We will not use this convention any longer. (XXX: ???)
diff --git a/README.branch.ja b/README.branch.ja
new file mode 100644 (file)
index 0000000..bbb2875
--- /dev/null
@@ -0,0 +1,111 @@
+README.branch.ja --- branch \e$B$H\e(B tag \e$B$N@bL@\e(B (\e$BAp9F\e(B)
+========================================================================
+
+Semi-gnus revision tree (1998-07-16)
+
+    vendor      personal    main trunk      public
+    branch      branches                    branches
+------------------------------------------------------------------------
+qGnus 0.??  ------> Semi-gnus 6.0.0
+       :                        :
+       :        himi     <--  6.0.7
+       :        ichikawa <--  6.0.8
+       :        akr      <--  6.2.3
+       :        shuhei-k <--  6.3.1
+Gnus 5.6.11 ------>           6.3.3
+       :                      6.4.0 (for SEMI 1.5)
+       :                     (6.4.?)------> for SEMI 1.5
+       :                        |    \
+       :                        |     \
+(\e$B85$N\e(B Gnus \e$B$H$N\e(B Sync \e$B$O2?EY\e(B     |      ---> for SEMI 1.6
\e$B$b$J$5$l$F$$$^$9$,!"$3$3$K\e(B  (6.4.?)------> 6.5 (for SEMI 1.7)
\e$B$O=q$-$^$;$s!#\e(B)                |        /    6.5.0
+       :                        |    (?)/
+       :                        |   <---
+       :                     (6.5.?)------> 6.6 (for SEMI 1.8, FLIM 1.7)
+       :                        |    \        6.6.0        stable branch
+       :                        |     \
+       :                        |      ---> 6.7 (for SEMI 1.8, FLIM 1.7)
+       :                        |             6.7.0       develop branch
+       :     sync               |               :
+Gnus 5.6.22 ------>             |   feedback  6.7.7
+       :                     (6.7.8)<------   6.7.8
+       :                        |    \
+       :                        |     \
+       :                        |      ---> 6.8 (for SEMI 1.8, FLIM 1.8)
+       :     sync               |             6.8.0
+Gnus 5.6.24 ------>             |             6.8.1
+       :                        :               :
+       :                        :               :
+========================================================================
+
+The Vendor Branch
+
+    Gnus \e$B$N85$N%P!<%8%g%s$G$9!#\e(B
+    \e$B$=$l$>$l$N%P!<%8%g%s$O\e(B "qgnus-0_XY" \e$B$d\e(B "gnus-5_X_Y" \e$B$d\e(B
+    "pgnus-0_XY" \e$B$H$$$&7A<0$N\e(B tag \e$B$,IU$$$F$$$^$9!#\e(B
+
+    vendor branch \e$B$N\e(B branch tag \e$B$O\e(B "larsi" \e$B$G$9!#\e(B
+
+The Main Trunk
+
+    \e$B8=:_$N\e(B branch \e$B4IM}7W2h$,F3F~$5$l$k$^$G!"\e(BSemi-gnus \e$B$O\e(B main trunk \e$B$G\e(B
+    \e$B3+H/$5$l$F$$$^$7$?\e(B (\e$B2<$N\e(B "Public Branches" \e$B$rFI$s$G$/$@$5$$\e(B)\e$B!#$=$l\e(B
+    \e$B$>$l$N%P!<%8%g%s$O\e(B "gnus-6_N2_N3" \e$B$H$$$&7A<0$G$9!#\e(B(0 < N2 < 5)
+
+Public Branches
+
+    \e$B8=:_$N\e(B Semi-gnus \e$B3+H/$N<gN.$G$9!#\e(B
+
+    [public branch \e$B$NL\I8$H<g5A$r=q$/\e(B ???]
+
+    \e$B$=$l$>$l$N\e(B branch \e$B$O\e(B "gnus-N1_N2" \e$B$H$$$&7A<0$N\e(B tag \e$B$,IU$$$F$$$F!"\e(B
+    \e$B$=$l$>$l$N%P!<%8%g%s$O\e(B "gnus-N1_N2_N3" \e$B$H$$$&7A<0$N\e(B tag \e$B$,IU$$$F$$\e(B
+    \e$B$^$9!#\e(B
+
+    N1, N2, N3 \e$B$O0J2<$N5,B'$K=>$C$FJQ99$5$l$^$9!#\e(B
+
+    N1 \e$B$O4pACE*$J;EAH$_$NJQ99$,$J$5$l$?$H$-$KA}$d$5$l$^$9!#$b$A$m$s!"\e(B
+    \e$B$3$N>l9g$O\e(B N2 \e$B$H\e(B N3 \e$B$O\e(B 0 \e$B$K$J$j$^$9!#\e(B
+
+    N2 \e$B$O?7$7$$\e(B branch \e$B$,\e(B "\e$B<g$JJQ99\e(B" \e$B$r9T$C$?$H$-$KA}$d$5$l$^$9!#\e(B "\e$B<g\e(B
+    \e$B$JJQ99\e(B" \e$B$H$O!"\e(BAPI \e$B$NJQ99!"85$N\e(B Gnus \e$B$NBg$-$J99?7!"@_7W$N7hDj$rH<$&\e(B
+    \e$B$h$&$J85$N\e(B Gnus \e$B$H$NF14|$J$I$G$9!#\e(B
+
+    N3 \e$B$O\e(B "\e$B>.$5$JJQ99\e(B" \e$B$,$J$5$l$?$H$-$KA}$d$5$l$^$9!#\e(B"\e$B>.$5$JJQ99\e(B" \e$B$O>.\e(B
+    \e$B$5$J%P%0=$@5$d!"@_7W$N7hDj$rH<$o$J$$85$N\e(B Gnus \e$B$H$NF14|$J$I$G$9!#\e(B
+
+    \e$B8=:_$O0J2<$N\e(B branch tag \e$B$,;HMQ2DG=$G$9!#\e(B
+    The following branch tags are currently available.
+
+       for-semi-1_5    Semi-gnus for SEMI 1.5 API
+       for-semi-1_6    Semi-gnus for SEMI 1.6 API
+       gnus-6_5        Semi-gnus for SEMI 1.7 API
+       gnus-6_6        Semi-gnus for SEMI 1.8, FLIM 1.7 API
+       gnus-6_7        Semi-gnus for SEMI 1.8, FLIM 1.7 API
+       gnus-6_8        Semi-gnus for SEMI 1.8, FLIM 1.8 API (stable)
+       gnus-6_9        Semi-gnus for SEMI 1.11 FLIM 1.12 API (develop)
+
+Personal Branches
+
+    Semi-gnus \e$B3+H/<T$NCf$K$O<+J,$N\e(B "personal branch" \e$B$r;}$C$F$$$k?M$b\e(B
+    \e$B$$$^$9!#$=$l$>$l$N\e(B personal branch \e$B$OL\I8!"<g5A$r;}$C$F$$$k$G$7$g\e(B
+    \e$B$&!#$=$l$>$l$N\e(B branch \e$B$N>pJs$O\e(B (\e$BB8:_$9$k$J$i$P!"\e(B) README.${tag} \e$B$r\e(B
+    \e$BFI$s$G$/$@$5$$!#\e(B
+
+    \e$B0J2<$N\e(B branch tag \e$B$,8=:_;HMQ2DG=$G$9!#\e(B
+
+       himi            Owner: Miyashita Hisashi
+       ichikawa        Owner: Tatsuya Ichikawa
+       akr             Owner: Tanaka Akira
+       shuhei-k        Owner: Shuhei KOBAYASHI
+
+"semi-gnus" Tag
+
+    \e$B$3$l$O:G?7$N0BDjHG$K3d$jEv$F$i$l$F$$$^$7$?!#8=:_$O0];}$5$l$F$$$^$;\e(B
+    \e$B$s!#\e(B(XXX: ???)
+
+"for-semi-N1_N2" Tags
+
+    \e$B$3$l$O\e(B SEMI API N1.N2 \e$B$KBP1~$9$k%P!<%8%g%s$K3d$jEv$F$i$l$F$$$^$7$?!#\e(B
+    \e$B$3$N=,47$O$b$&;H$o$l$^$;$s!#\e(B(XXX: ???)
diff --git a/README.semi b/README.semi
new file mode 100644 (file)
index 0000000..3dd5f49
--- /dev/null
@@ -0,0 +1,102 @@
+This package contains Semi-gnus 6.9.
+
+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. Semi-gnus 6.9 requires SEMI 1.11. You can get
+SEMI from
+ftp://ftp.jaist.ac.jp/pub/elisp/semi/
+Required environment for SEMI is written in README.en of SEMI package.
+
+How to get? (via CVS)
+=====================
+
+(0) cvs login (first time only)
+
+    % 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
+
+    pgnus-ichikawa     ichikawa branch. Based on pGnus
+
+    akr                        akr branch
+
+    shuhei-k           shuhei-k branch
+                       Mail-Followup-To/Mail-Reply-To, gnus-cache fix.
+
+For more detailed information, please read README.branch.
+
+
+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 with your account name
+and UNIX /etc/passwd style crypted password.
diff --git a/README.semi.ja b/README.semi.ja
new file mode 100644 (file)
index 0000000..e944dbc
--- /dev/null
@@ -0,0 +1,110 @@
+\e$B$3$N%Q%C%1!<%8$K$O\e(B Semi-gnus 6.9 \e$B$,F~$C$F$$$^$9!#\e(B
+
+Semi-gnus \e$B$H$O!)\e(B
+==================
+
+  Semi-gnus \e$B$O\e(B SEMI \e$B$N$?$a$N\e(B gnus-mime \e$B$H\e(B Gnus \e$B$NAH9g$;$rCV$-49$($k$b\e(B
+\e$B$N$G$9!#\e(BGnus \e$B$H\e(B gnus-mime \e$B$NA4$F$N5!G=$r;}$C$F$$$^$9$N$G!"$3$l$r;HMQ$9\e(B
+\e$B$k$?$a$K\e(B Gnus \e$B$r%$%s%9%H!<%k$9$kI,MW$O$J$/!"\e(BSEMI \e$B$N$?$a$N\e(B gnus-mime \e$B$O\e(B
+\e$B;HMQ$7$F$O$$$1$^$;$s!#\e(B
+
+  SEMI \e$B%Q%C%1!<%8$rMW5a$7$^$9$N$G!"%$%s%9%H!<%k$9$kA0$K\e(B SEMI \e$B%Q%C%1!<\e(B
+\e$B%8$r%$%s%9%H!<%k$7$F$/$@$5$$!#\e(BSemi-gnus 6.9 \e$B$O\e(B SEMI 1.11 \e$B$rMW5a$7$^$9!#\e(B
+SEMI \e$B$O\e(B
+ftp://ftp.jaist.ac.jp/pub/elisp/semi/ 
+\e$B$+$i<hF@$9$k$3$H$,$G$-$^$9!#I,MW$J4D6-$O\e(B SEMI \e$B$N\e(B README.ja \e$B$r;2>H$7$F\e(B
+\e$B$/$@$5$$!#\e(B
+
+
+\e$B<hF@J}K!\e(B (CVS)
+=====================
+
+(0) cvs login (\e$B=i2s$N$_\e(B)
+
+    % cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \
+       login
+
+    CVS password: [CR] # \e$B6uJ8;zNs\e(B
+
+(1) checkout
+
+    % cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \
+       checkout [-r TAG] gnus
+
+(2) compile
+
+    % cd gnus
+    % make EMACS=<file name of your emacs>
+
+(3) update
+
+    % cvs update [-r TAG]
+
+\e$B<g$J%?%0$O0J2<$N$h$&$K$J$C$F$$$^$9\e(B:
+
+    semi-gnus          \e$B:G?7$N0BDjHG$K3d$jEv$F$i$l$^$9!#Hs>o$KJ]<iE*$G\e(B
+                       \e$B$9!#\e(B(\e$B8=:_$O;HMQ$5$l$F$$$^$;$s!#\e(B)
+
+    for-semi-N1_N2     SEMI API N1.N2 (N1 \e$B$H\e(B N2 \e$B$O<+A3?t\e(B) \e$B$KBP1~$7$F\e(B
+                       \e$B:G?7$N0BDjHG$K3d$jEv$F$i$l$^$9!#\e(B(\e$BNc\e(B
+                       `for-semi-1_3' \e$B$O\e(B SEMI API 1.3 \e$BMQ$G$9!#\e(B)
+                       (\e$B8=:_$O;HMQ$5$l$F$$$^$;$s!#\e(B)
+
+    gnus-N1_N2_N3      gnus(Gnus) N1.N2.N3 \e$B$K3d$jEv$F$i$l$^$9!#\e(B
+                       (\e$BNc\e(B `gnus-6_2_1' \e$B$O\e(B gnus 6.2.1 \e$B$G$9!#\e(B)
+
+    larsi              \e$B85$N\e(B Gnus
+
+    himi               himi branch
+
+    ichikawa           ichikawa branch
+
+    pgnus-ichikawa     ichikawa branch. Based on pGnus
+       
+    akr                        akr branch
+
+    shuhei-k           shuhei-k branch
+                       Mail-Followup-To/Mail-Reply-To, gnus-cache fix.
+
+\e$B>\$7$/$O!"\e(BREADME.branch.ja \e$B$r;2>H$7$F$/$@$5$$!#\e(B
+
+
+\e$B<hF@J}K!\e(B (ftp)
+=====================
+
+  \e$B$[$\KhF|$N\e(B snapshot \e$B$,\e(B
+
+    ftp://ftp.jaist.ac.jp/pub/GNU/elisp/semi-gnus/
+
+  \e$B$+$i<hF@2DG=$G$9!#\e(B
+
+  \e$BCm0U\e(B: \e$B$3$l$i$N\e(B snapshot \e$B$O$=$NF|$N4V$K\e(B repository \e$B$K2?$+JQ99$,$"$C$?\e(B
+  \e$B$H$-$K<+F0E*$K:n@.$5$l!"IaDL$O%F%9%H$5$l$F$$$^$;$s!#\e(B
+
+
+\e$B3+H/$X$N;22CJ}K!\e(B
+=======================
+
+  Gnus \e$B$N%P%0$r8+$D$1$?$H$-$O!"\e(B`M-x gnus-bug' \e$B$H$7$F!"\e(BGnus \e$B$N0];}<T$K\e(B
+  \e$B%P%0Js9p$rAw$C$F$/$@$5$$!#\e(B
+
+  Semi-gnus \e$B$N%P%0$r8+$D$1$?$+!"\e(BGnus \e$B$N%P%0$G$"$k$+$I$&$+$,J,$+$i$J$$\e(B
+  \e$B$H$-$O!"%P%0Js9p$r\e(B Semi-gnus \e$B%a!<%j%s%0%j%9%H$KAw$C$F$/$@$5$$\e(B:
+
+    semi-gnus-en@meadow.scphys.kyoto-u.ac.jp   (\e$B1Q8l\e(B)
+    semi-gnus-ja@meadow.scphys.kyoto-u.ac.jp   (\e$BF|K\8l\e(B)
+
+Semi-gnus \e$B$N2~A1$N$?$a$NDs0F$b4?7^$5$l$^$9!#\e(B
+
+  Semi-gnus ML \e$B$G$O!"\e(BSemi-gnus \e$B4XO"$N%P%0$rJs9p$7$?$j!":G?7$N\e(B
+  Semi-gnus \e$B$N%j%j!<%9$r<hF@$7$?$j!"\e(BSemi-gnus \e$B$N>-Mh$N3HD%$r5DO@$7$?$j\e(B
+  \e$B$9$k$3$H$,$G$-$^$9!#\e(BSemi-gnus ML \e$B$K;22C$9$k$?$a$K$O\e(B
+
+    semi-gnus-en-help@meadow.scphys.kyoto-u.ac.jp      (\e$B1Q8l\e(B)
+    semi-gnus-ja-help@meadow.scphys.kyoto-u.ac.jp      (\e$BF|K\8l\e(B)
+
+  \e$B$K6u$N%a!<%k$rAw$C$F$/$@$5$$!#\e(B
+
+  \e$B2C$($F!"3+H/<T$rI,MW$H$7$F$$$^$9!#3+H/$K;22C$7$?$$>l9g$O!"\e(B
+cvs@chamonix.jaist.ac.jp \e$B$K%"%+%&%s%HL>$H\e(B UNIX \e$B$N\e(B /etc/passwd \e$B$NMM<0$G\e(B
+\e$B0E9f2=$5$l$?%Q%9%o!<%I$r%a!<%k$rAw$C$F$/$@$5$$!#\e(B
diff --git a/TODO.ja b/TODO.ja
new file mode 100644 (file)
index 0000000..0dbd5cf
--- /dev/null
+++ b/TODO.ja
@@ -0,0 +1,116 @@
+-*- mode: text; left-margin: 4; fill-column: 70; -*-
+
+To do list.
+
+;; \e$BBP:v:Q$N$b$N$O!"E,Ev$J%?%$%_%s%0\e(B(\e$B%j%j!<%9;~\e(B?)\e$B$G:o=|$7$F$/$@$5$$!#\e(B
+;; \e$B$^$?!"3F\e(B personal branch \e$B$GBP:vCf!"$^$?$OBP:v:Q$N$b$N$K4X$7$F$O$=$N\e(B
+;; \e$B;]$r5-:\$7$F$/$@$5$$!#\e(B
+
+------------ \e$BITL@\e(B ------------
+
+*1998/10/02-2 \e$B@_Dj%U%!%$%k72FI$_9~$_;~$N\e(B coding-system \e$BLdBj\e(B
+
+----------- \e$BL$BP:v\e(B -----------
+
+*1998/09/25-1 message/partial \e$B$N7k9g5!G=$N2~NI\e(B
+
+    Subject \e$B$G\e(B summary \e$B$r8!:w$9$kBe$o$j$K!"\e(Bgnus-newsgroup-headers \e$B$J$I\e(B
+    \e$B$N>pJs$r;H$C$F!"3N<B$K<+F07k9g$G$-$k$h$&$K$9$k!#\e(B
+
+*1998/10/02-1 Draft \e$B$NJT=8!&Aw?.;~$N\e(B encode / decode \e$BLdBj\e(B
+
+    \e$BJT=8Cf$N%a%C%;!<%8$r\e(B draft \e$BFb$KJ]B8$9$k>l9g!"DL>o$N%F%-%9%H!&%G!<\e(B
+    \e$B%?$H$7$FJ]B8$7$F$$$k$,!"$3$l$r\e(B network \e$B7A<0$GJ]B8$9$k$h$&$KJQ99$7!"\e(B
+    \e$B:FJT=8$O\e(B decode \e$B$7$F$+$i9T$$!"Aw?.$O$=$N$^$^$N7A<0$G9T$&$h$&$K$9$k!#\e(B
+
+*1998/10/02-4 Offline \e$B;~$K:n@.$7$?%a%C%;!<%8$N\e(B Message-Id \e$BLdBj\e(B
+
+    Offline \e$B;~$K%a%C%;!<%8$r:n@.$7$?>l9g!"\e(B Message-Id \e$B$N7A<0$,ITEv$J$b\e(B
+    \e$B$N$K$J$C$F$7$^$&!#\e(B
+
+*1998/10/02-6 smtpmail.el \e$B:o=|\e(B
+
+    \e$B8=:_!"\e(B Semi-gnus \e$B$G$O\e(B smtpmail.el \e$B$r;HMQ$7$F$$$J$$$N$G:o=|$9$k!#\e(B
+
+*1998/10/02-7 smtp.el \e$B0\F0\e(B
+
+    smtp.el \e$B$O!"B>$N\e(B package \e$B$G$b;HMQ$9$k2DG=@-$,$"$k$N$G!"\e(B FLIM \e$B$K0\\e(B
+    \e$BF0$9$k!#\e(B
+    \e$B$=$NA0$K!"\e(B shuhei-k \e$B;^$N\e(B smtp.el \e$B$H$N;EMM$r6&DL2=$9$kI,MW$,$"$k!#\e(B
+
+*1998/10/02-10 \e$B$O$8$a$F\e(B gnus-agent \e$B$r;HMQ$7$?$H$-$NLdBj\e(B
+
+    \e$B0J2<$N$h$&$JJ}K!\e(B(\e$B5/F0;~$+$i\e(B unplugged \e$B$K$9$k\e(B)\e$B$G!"$O$8$a$F\e(B
+    gnus-agent \e$B$r;HMQ$7$?>l9g!"5/F0;~$K!H\e(Bnntp open error\e$B!I$H$J$k!#\e(B
+
+    (gnus-agentize)
+    (gnus-agent-toggle-plugged nil)
+
+    [\e$BJdB-\e(B]
+
+    .emacs \e$B$K\e(B (setq gnus-plugged nil)
+    .gnus.el \e$B$K\e(B (gnus-agentize) \e$B$H$7$F;HMQ$7$?J}$,$h$$$N$G$O$J$$$+\e(B?
+
+*1998/10/02-11 message.el \e$B$NFHN)$7$?;HMQ;~$NLdBj\e(B
+
+    message.el \e$B$OC1FH\e(B(Semi-gnus\e$B$,5/F0$5$l$F$$$J$$>uBV\e(B)\e$B$G;HMQ$5$l$k2DG=\e(B
+    \e$B@-$,$"$k$N$G!"\e(B Semi-gnus \e$BK\BN$K0MB8$7$F$$$kItJ,$rGS=|$9$k!#\e(B
+
+*1998/10/02-12 \e$B%X%C%@!<!&%U%#!<%k%I$KBP$9$kITMW$J\e(B decode \e$B$rGS=|\e(B
+
+    \e$B4{$K\e(B decode \e$B$5$l$F$$$k%X%C%@!<!&%U%#!<%k%I$r:FEY\e(B decode \e$B$7$F$7$^$&\e(B
+    \e$B8D=j$,$"$k$h$&$J$N$G!"$=$l$rGS=|$9$k!#\e(B
+
+*1998/10/02-13 .gnus.el \e$B$N%F%s%W%l!<%H:n@.\e(B
+
+    .gnus.el \e$B$N%F%s%W%l!<%H!&%U%!%$%k$H!"$=$N2r@b=q$r:n@.$9$k!#\e(B
+
+*1998/10/05-1 \e$BBg@9$j%Q%C%1!<%8:n@.\e(B
+
+    SEMI / FLIM / APEL / Semi-gnus \e$B$N%P!<%8%g%sIT0lCW$K$h$k:.Mp$rHr$1\e(B
+    \e$B$k$?$a$K$3$l$i$r0l$D$N%Q%C%1!<%8$H$7$F!"G[I[$9$k$h$&$K$9$k!#\e(B
+
+----------- \e$BBP:vCf\e(B -----------
+
+    \e$B$3$3$K$O!"B>%V%i%s%A$GBP:vCf$^$?$O!"BP:v:Q$G\e(B gnus-V1_V2 \e$B;^$K<h$j9~\e(B
+    \e$B$^$l$F$$$J$$$b$N$r4^$`!#\e(B
+
+*1998/10/02-3 message/partial \e$B;HMQ;~$N\e(B Message-Id \e$BLdBj\e(B
+
+    message/partial \e$B7A<0$G%a%C%;!<%8$rAw?.$7$?>l9g!"A4%Q!<%H$N\e(B
+    Messge-Id \e$B$,F1$8$b$N$K$J$C$F$7$^$&!#\e(B
+
+    [\e$BBP:v\e(B]
+
+    \e$B8=>u$G$O!"3F%a%C%;!<%8$K\e(B Message-Id \e$B$rIU2C$7$J$$$H$$$&J}K!$GBP:v:Q!#\e(B
+
+    [\e$B0F\e(B]
+
+    \e$B$?$@$7!"$=$l$>$l$K\e(B Message-Id \e$B$rIU2C$9$k<BAu$,$"$l$P!"$=$A$i$KJQ99\e(B
+    \e$B$9$k!#\e(B(ichikawa \e$B;^$N<BAu\e(B?)
+
+*1998/10/03-01 \e$BG$0U%a%C%;!<%8\e(B cite \e$B5!G=$N<BAuJ}K!JQ99\e(B (keiichi branch)
+
+    \e$BG$0U$N%a%C%;!<%8$r\e(B cite \e$B$9$k$?$a$N5!G=$r0JA0DI2C$7$?$,!"$3$NJQ99$K\e(B
+    \e$B$h$C$F\e(B message-mime-insert-article() \e$B$G%a%C%;!<%8$rGK2u$7$F$7$^$&\e(B
+    \e$B$h$&$K$J$C$?!#\e(B
+
+----------- \e$BBP:v:Q\e(B -----------
+
+*1998/10/02-8 User-Agent \e$B%X%C%@!<!&%U%#!<%k%I:NMQ\e(B
+
+    1998/10/05 - \e$B40N;\e(B
+
+*1998/10/02-9 In-Reply-To \e$B%X%C%@!<7A<0JQ99\e(B
+
+    draft-ietf-drums-msg-fmt-05.txt \e$B$K=>$C$?7A<0$KJQ99$9$k!#\e(B
+
+    1998/11/02 - \e$B40N;\e(B
+
+*1998/10/03-2 Info (gnus/gnus-ja) \e$B$NA*Br\e(B
+
+    \e$B40N;\e(B
+
+*1998/10/02-5 Edit article \e$B;~$K%a%C%;!<%8$rGK2u$9$kLdBj\e(B
+
+    1998/11/12 - \e$B40N;\e(B
diff --git a/etc/gnus/x-splash b/etc/gnus/x-splash
deleted file mode 100644 (file)
index cbd1c2c..0000000
Binary files a/etc/gnus/x-splash and /dev/null differ
index 826fa9f..459c782 100644 (file)
-Wed Jul  7 13:09:51 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Thu Nov 19 04:37:45 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.93 is released.
+       * gnus.el: Gnus v5.6.45 is released.
 
-1999-07-07 10:41:11  Stainless Steel Rat  <ratinox@peorth.gweep.net>
+1998-11-08 00:42:58  Andrew Innes  <andrewi@harlequin.co.uk>
 
-       * pop3.el: New version.
+       * nntp.el (nntp-request-group): Allow for error codes.
 
-1999-07-05  Simon Josefsson  
+1998-10-12  Andrew Innes  <andrewi@harlequin.co.uk>
 
-        * gnus-srvr.el (gnus-browse-foreign-server): Use read.
+       * gnus/nntp.el (nntp-possibly-change-group): Allow for unexpected
+       responses to GROUP command, since this may be called from a timer
+       with quit inhibited.
 
-1999-07-07 10:37:26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-10-11 01:16:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-art.el (gnus-mime-display-alternative): Do treatment. 
+       * gnus-agent.el (gnus-agent-expire): Check (car expired).
 
-1999-07-06  Shenghuo ZHU  <zsh@cs.rochester.edu>
+1998-10-02 04:49:27  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-util.el (gnus-write-active-file): Use real name.
+       * gnus-cache.el (gnus-cache-generate-active): Ignore directories
+       that start with a dot.
 
-       * gnus-agent.el (gnus-agent-expire): Update active file 
-       method by method.
+1998-10-01 07:42:40  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-07-06  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * nnmail.el (nnmail-article-group): Expand properly.
 
-       * nndraft.el (nndraft-request-article): Use difference
-       coding-systems for queue and drafts.
+       * gnus-group.el (gnus-group-apropos): Also do non-active groups. 
 
-       * gnus-sum.el (gnus-summary-setup-default-charset): Special-case
-       nndraft:drafts.
+1998-09-29 13:12:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * mm-util.el (mm-auto-save-coding-system): New coding system.
+       * gnus-async.el (gnus-make-async-article-function): Don't use
+       push. 
 
-       * message.el (message-draft-coding-system): Use it.
+Thu Sep 24 19:29:43 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1999-07-06  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus.el: Gnus v5.6.44 is released.
 
-       * mm-uu.el: More customizable and less aggressive.
+1998-09-23 20:34:27  Markus Rost  <markus.rost@mathematik.uni-regensburg.de>
 
-1999-07-07 07:53:23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el: Extend autoloads.
 
-       * gnus-start.el (gnus-groups-to-gnus-format): Only gnus-active
-       when plugged.
+1998-09-15 18:57:48  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * mml.el (mml-generate-mime-1): Don't insert nofile files.
-       (mml-insert-mml-markup): Accept a nofile.
-       (mml-insert-mime): Insert nofile.
+       * gnus-draft.el (gnus-draft-send): Bind required headers to nil. 
+       (gnus-draft-send): No.
 
-       * gnus-art.el (gnus-treat-strip-blank-lines): Removed.
+1998-09-14 15:16:42  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * mm-decode.el (mm-handle-media-type): New function.
-       (mm-handle-media-supertype): New function.
-       (mm-handle-media-subtype): New function.
-       Use new functions throughout. "/"))
+       * message.el (message-fix-before-sending): Comment out invisible
+       text things.
 
-1999-05-18 03:03:50  Katsumi Yamaoka  <yamaoka@jpl.org>
+1998-09-14 14:30:09  Tatsuya Ichikawa  <ichikawa@hv.epson.co.jp>
 
-       * gnus-art.el (gnus-treat-predicate): Typo.
+       * gnus-agent.el (gnus-agent-file-coding-system): Renamed.
 
-1999-07-07 06:21:36  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-score.el (gnus-summary-score-entry): Made un-interactive.
-
-1999-07-06 17:57:16  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (article-date-ut): UT!  Default it!
-
-Tue Jul  6 10:59:24 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
-
-       * gnus.el: Pterodactyl Gnus v0.92 is released.
-
-1999-07-06 12:30:59  Johannes Weinert  <Johannes.Weinert@Informatik.Uni-Oldenburg.DE>
-
-       * gnus-sum.el (gnus-summary-catchup-and-exit): Doc fix. 
-
-1999-07-06 07:41:07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nntp.el (nntp-retrieve-groups): Don't do anything when not
-       connected. 
-
-       * gnus-start.el (gnus-active-to-gnus-format): Only save active
-       when plugged.
-
-       * mm-view.el (mm-inline-message): Ignore remove-spec.
-
-       * gnus-agent.el (gnus-agent-write-active): Check whether orig sym
-       is bound.
-
-       * gnus-msg.el (gnus-summary-mail-forward): Rename From_ lines. 
-
-       * nndoc.el (nndoc-guess-type): Remove blank lines at the start. 
-
-       * nnfolder.el (nnfolder-read-folder): Remove blank lines at the
-       start. 
-
-       * message.el (message-fill-yanked-message): Remove `t' arg.
-
-       * gnus-group.el (gnus-group-kill-group): Message killing of
-       groups. 
-
-       * mm-util.el (mm-preferred-coding-system): New function.
-       (mm-mime-charset): Use it.
-
-       * mml.el (mml-generate-mime-1): Charset-encode message parts.
-
-1999-07-06 07:03:31  Alexandre Oliva  <oliva@dcc.unicamp.br>
-
-       * gnus-mlsplt.el: New file.
-
-1999-07-06 05:47:57  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mm-decode.el (mm-inline-Media-tests): Changed from forms to
-       functions. 
-       (mm-attachment-override-p): Take a handle instead of a type.
-       (mm-inlined-p): Ditto.
-       (mm-automatic-display-p): Ditto,
-       (mm-inlinable-p): Ditto.
-
-       * nndraft.el (nndraft-request-expire-articles): Delete backup
-       files. 
-
-       * mailcap.el (mailcap-parse-mailcap): Regexp-quote stuff.
-
-       * gnus-sum.el (gnus-summary-limit-to-extra): Typo.
-
-1999-07-06 05:37:46  Alexandre Oliva  <oliva@dcc.unicamp.br>
-
-       * nnmail.el (nnmail-split-it): Allow .*.
-
-1999-07-05 05:04:57  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mm-decode.el (mm-inline-large-images-p): Renamed.
-
-       * gnus-art.el (article-date-ut): Always look in the current buffer 
-       for the Date header.
-
-       * mml.el (mml-validate): New command.
-
-       * mailcap.el (mailcap-possible-viewers): Revert to string-match
-       since we are dealing with regexps.
-
-Sun Jul  4 06:31:01 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
-
-       * gnus.el: Pterodactyl Gnus v0.91 is released.
-
-1999-07-04 04:35:28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-agent.el (gnus-agent-save-active-1): New function.
-       (gnus-agent-save-active): use it.
-       (gnus-agent-save-groups): Ditto.
-
-       * gnus-cache.el (gnus-cache-write-active): Use it.
-
-       * gnus-agent.el (gnus-agent-write-active): Use it.
-
-       * gnus-util.el (gnus-write-active-file): New function.
-
-       * gnus-agent.el (gnus-agent-write-active): New function to keep
-       lower boundaries and canceled groups.
-       (gnus-agent-save-groups): Use it.
-       (gnus-agent-save-active): Use it.
-       (gnus-agent-save-group-info): Only write active files.
-       (gnus-agent-expire): Update active file.
-
-       * mm-decode.el (mm-inlinable-part-p): Removed.
-       (mm-user-display-methods): Default to nil.
-       (mm-user-display-methods): Removed.
-       (add-mime-display-method): Removed.
-       (mm-automatic-display): Renamed.
-       (mm-automatic-display-p): Use it.
-       (mm-inlined-types): New variable.
-       (mm-inlined-p): New function.
-
-       * message.el (message-reply): Bind message-this-is-mail.
-
-1999-07-03 13:16:31  Michael Klingbeil  <mklingbeil@knuut.de>
-
-       * smiley.el (smiley-buffer): Fix for NT.
-
-1999-07-03 11:26:47  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mm-encode.el (mm-encode-buffer): Check whether we have 7bit.
-
-       * message.el (message-check-news-header-syntax): Protect against
-       nil froms.
-
-       * mm-util.el (mm-auto-mode-alist): New.
-
-       * mml.el (mml-generate-mime-1): Ditto.
-
-       * gnus.el: Use mm-insert-file-contents throughout instead of
-       nnheader. 
-
-       * mm-util.el (mm-insert-file-contents): New function.
-
-Sat Jul  3 07:35:35 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
-
-       * gnus.el: Pterodactyl Gnus v0.90 is released.
-
-1999-07-03 09:31:10  Sven Fischer  <herpes@kawo2.rwth-aachen.de>
-
-       * mailcap.el (mailcap-possible-viewers): Use string=.
-
-1999-07-01  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-uu.el (mm-uu-forward-begin-line): New variable.
-       (mm-uu-forward-end-line): New variable.
-       (mm-uu-begin-line): Handle forwarded message.
-       (mm-uu-identifier-alist): Ditto.
-       (mm-uu-dissect): Ditto.
-
-1999-06-29  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * lpath.el: Two free variables.
-
-1999-07-02  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnheader.el (nnheader-file-coding-system): Use raw-text.
-       * gnus-agent.el (gnus-agent-file-coding-system): Ditto.
-       * gnus-cache.el (gnus-cache-coding-system): Ditto.
-
-       * nnfolder.el (nnfolder-file-coding-system): Use mm-text-coding-system.
-       (nnfolder-file-coding-system-for-write): New variable.
-       (nnfolder-active-file-coding-system): New variable.
-       (nnfolder-active-file-coding-system-for-write): New variable.
-       (nnfolder-save-active): New function.
-       (nnfolder-save-buffer): Use them.
-       (nnfolder-possibly-change-group): Ditto.
-       (nnfolder-request-list-newsgroups): Ditto.
-       (nnfolder-request-create-group): Ditto.
-       (nnfolder-request-expire-articles): Ditto.
-       (nnfolder-request-move-article): Ditto.
-       (nnfolder-request-accept-article): Ditto.
-       (nnfolder-request-delete-group): Ditto.
-       (nnfolder-request-rename-group): Ditto.
-       (nnfolder-possibly-change-folder): Ditto.
-       (nnfolder-read-folder): Ditto.
-       (nnfolder-request-list): Remove pathname-coding-system.
-       (nnfolder-possibly-change-group): Use nnmail-pathname-coding-system.
-
-       * nnmail.el (nnmail-file-coding-system): Use raw-text.
-       (nnmail-file-coding-system-1): Removed.
-       (nnmail-find-file): Use nnmail-pathname-coding-system.
-       (nnmail-write-region): Ditto.
-
-       * nnmbox.el (nnmbox-file-coding-system): New variable.
-       (nnmbox-file-coding-system-for-write): New variable.
-       (nnmbox-active-file-coding-system): New variable.
-       (nnmbox-active-file-coding-system-for-write): New variable.
-       (nnmbox-save-buffer): New function.
-       (nnmbox-save-active): New function.
-       (nnmbox-request-scan): Use them.
-       (nnmbox-request-expire-articles): Ditto.
-       (nnmbox-request-move-article): Ditto.
-       (nnmbox-request-accept-article): Ditto.
-       (nnmbox-request-replace-article): Ditto.
-       (nnmbox-request-delete-group): Ditto.
-       (nnmbox-request-rename-group): Ditto.
-       (nnmbox-request-create-group): Ditto.
-
-       * mm-util.el (mm-text-coding-system): raw-text or -dos.
-       (mm-running-ntemacs): Removed.
-
-       * nnml.el (nnml-file-coding-system): Use nnmail-file-coding-system.
-
-1999-07-02  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnfolder.el (nnfolder-read-folder): Use nnheader-file-coding-system.
-
-1999-07-01  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * qp.el (quoted-printable-encoding-characters): Support lower case.
-
-1999-07-01  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * rfc2047.el (rfc2047-encode): Fold before B-encoding.
-       (rfc2047-b-encode-region): Encode line by line.
-
-1999-07-03 09:20:16  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mm-util.el (mm-find-mime-charset-region): Fix.
-
-1999-06-30  KOSEKI Yoshinori  <kose@yk.NetLaputa.ne.jp>
-
-       * mm-util.el (mm-mime-mule-charset-alist): Fix iso-2022-jp(-2) bug.
-       (mm-find-mime-charset-region): Ditto.
-
-1999-07-03 09:15:35  Simon Josefsson  <jas@pdc.kth.se>
-
-       * gnus-sum.el (gnus-summary-move-article): Fix something or
-       other. 
-
-1999-06-29  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-newsgroup-ephemeral-charset): New variable.
-       (gnus-newsgroup-ephemeral-ignored-charsets): New variable.
-       (gnus-summary-enter-digest-group): Use them.
-       (gnus-summary-setup-default-charset): Ditto.
-
-1999-06-15  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * base64.el (base64-run-command-on-region): Use unibyte buffer.
-
-1999-06-15  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-msg.el (gnus-configure-posting-styles): Fix bug when
-          gnus-newsgroup-name is nil.
-
-1999-06-15  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * rfc2047.el (rfc2047-encode): Chop the tail newline.
-
-1999-06-15  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (article-emphasize): Use correct
-       gnus-article-emphasis-alist.
-
-1999-06-15  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-view.el (mm-inline-text): Fix text/html bug.
-
-Mon Jun 28 17:54:01 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
-
-       * gnus.el: Pterodactyl Gnus v0.89 is released.
-
-1999-06-24  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * nnmail.el (nnmail-file-coding-system-1): For NTEmacs in Windows.
-       * message.el (message-draft-coding-system): Ditto.
-       * mm-util.el (mm-running-ntemacs): Ditto.
-
-1999-06-23  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-xmas.el (gnus-xmas-summary-recenter): A blank line may
-       cause problem.
-
-1999-06-23  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-view.el (mm-inline-text): Ignore error in w3-region.
-
-1999-06-23  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml.el: require mm-decode.
-
-1999-06-23  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-display-mime): Treat as head only if necessary.
-
-1999-06-23  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-view.el (mm-inline-image): Fix image undisplayer.
-
-1999-06-22  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * mml.el (mml-insert-multipart): Error in compeling-read.
-       (mml-insert-tag): Match tags.
-
-1999-06-19  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-cache.el (gnus-cache-braid-nov): Fix coding-system bug.
-       (gnus-cache-braid-heads): Ditto.
-       (gnus-cache-retrieve-headers): Ditto.
-
-1999-06-16  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-draft.el (gnus-draft-send): Fix encoding bug.
-
-1999-06-16 10:17:29  Katsumi Yamaoka  <yamaoka@jpl.org>
-
-       * gnus-art.el (gnus-article-read-summary-keys): Convert key events
-       to string under XEmacs.
-
-1999-06-28 19:34:03  Petersen Jens-Ulrik  <jens-ulrik.petersen@nokia.com>
-
-       * gnus-start.el (gnus-find-new-newsgroups): Doc fix.
-
-1999-06-22  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-view.el (mm-inline-message): Fix message view bug.
-       * gnus-art.el (gnus-article-prepare): Ditto.
-
-1999-06-16  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-cache.el (gnus-cache-possibly-enter-article): Fetch headers.
-
-Tue Jun 15 04:13:01 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
-
-       * gnus.el: Pterodactyl Gnus v0.88 is released.
-
-1999-06-15 04:13:45  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-summary-save-parts): Destroy handles after
-       usage. 
-
-       * nnmail.el (nnmail-get-new-mail): Save info.
-
-Mon Jun 14 01:15:59 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
-
-       * gnus.el: Pterodactyl Gnus v0.87 is released.
-
-1999-06-14 02:46:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mail-source.el (mail-source-fetch-file): Use prescript-delay. 
-       (mail-source-run-script): New function.
-       (mail-source-fetch-pop): Use it.
-
-1999-06-13 09:52:11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-article-setup-highlight-words): Moved here. 
-
-Sun Jun 13 07:30:40 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
-
-       * gnus.el: Pterodactyl Gnus v0.86 is released.
-
-1999-06-13 08:51:25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-treat-translate): New variable.
-       (gnus-treat-predicate): Accept a list of regexps.
-       (gnus-article-treat-custom): Allow a list of regexps.
-
-1999-06-09  Markus Rost  <markus.rost@mathematik.uni-regensburg.de>
-
-       * gnus/gnus-group.el (gnus-permanently-visible-groups): Fix custom
-       type.
-
-1999-06-13 05:15:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (article-babel): Narrow a bit.
-
-       * gnus-agent.el (gnus-agent-get-undownloaded-list): Was too slow. 
-
-1999-06-12  Simon Josefsson  <jas@pdc.kth.se>
-
-        (gnus-agent-get-undownloaded-list): Operate on all articles, not
-        only unread ones.
-        (gnus-agent-fetch-headers): Fetch headers from unread and marked
-        articles, not only unread ones.
-
-1999-06-13 03:01:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-summary-limit-to-extra): New command and
-       keystroke. 
-
-       * gnus-art.el (gnus-article-x-face-command): Ditto.
-
-       * gnus-uu.el (gnus-uu-default-view-rules): Default to "display".
-
-       * gnus.el (gnus-method-simplify): Accept server names.
-
-1999-06-13 02:36:15  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * gnus-art.el (article-babel-prompt): New function.
-       (article-babel): New command.
-
-1999-06-13 01:01:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-article-part-wrapper): Go to part.
-
-       * mml.el (mml-generate-mime-1): Don't insert literally.
-
-       * gnus-util.el (gnus-parse-netrc): Skip lines with #'s.
-       (gnus-netrc-syntax-table): Removed.
-       (gnus-parse-netrc): Don't use syntax table; just use whitespace. 
-
-Wed May  5 13:51:13 1999  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-view.el (mm-inline-text): Fix charset for text/html.
-
-Wed May  5 01:15:08 1999  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * message.el (message-draft-coding-system): Use emacs-mule-dos.
-
-1999-06-12 07:29:39  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnmail.el (nnmail-split-incoming): Return the number of split
-       mails. 
-       (nnmail-process-babyl-mail-format): Ditto.
-       (nnmail-process-unix-mail-format): Ditto.
-       (nnmail-process-mmdf-mail-format): Ditto.
-       (nnmail-process-maildir-mail-format): Ditto.
-
-       * mail-source.el (mail-source-callback): Return the number from
-       the callback.
-
-       * message.el (message-send-mail): Generate Lines.
-
-       * mail-source.el (mail-source-call-script): New function.
-       (mail-source-call-script): New function.
-
-Sun May  2 02:00:27 1999  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-setup-highlight-words): New function.
-       (gnus-select-newsgroup): Use it.
-       (gnus-group-highlight-words-alist): New variable.
-       (gnus-newsgroup-emphasis-alist): New variable.
-       (gnus-summary-local-variables):  Use it.
-       * lpath.el: Use it.
-       * gnus-art.el (article-emphasize): Use it.
-       (gnus-emphasis-highlight-words): New face.
-       * gnus-cus.el (gnus-group-parameters): New parameter.
-
-Sun May  2 01:00:02 1999  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-cache.el (gnus-cache-possibly-enter-article): Remove
-       parameter `headers'.
-       (gnus-cache-enter-article): Ditto.
-       (gnus-cache-update-article): Ditto.  
-       * gnus-sum.el (gnus-summary-move-article): Ditto.
-       (gnus-summary-mark-article-as-unread): Ditto.
-       (gnus-summary-mark-article): Ditto.
-
-1999-06-12 03:59:56  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-msg.el (gnus-message-insert-stylings): Removed.
-       (gnus-posting-style-alist): Removed.
-       (gnus-message-style-insertions): Ditto.
-       (gnus-configure-posting-styles): Reimplementation.
-
-       * mail-source.el (mail-source-fetch): Error the message.
-
-       * gnus-msg.el (gnus-inews-do-gcc): Do mml and encoding.
-
-Sat Jun 12 00:19:57 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
-
-       * gnus.el: Pterodactyl Gnus v0.85 is released.
-
-1999-04-20  Michael Cook  <cook@sightpath.com>
-
-       * gnus-cite.el (gnus-cite-attribution-prefix): Tweak for MS
-         Outlook citation regex.
-
-1999-06-12 02:09:49  Lars Magne Ingebrigtsen  <pinard@iro.umontreal.ca>
-
-       * nndoc.el (nndoc-mime-parts-type-p): Accept space before
-       semicolon. 
-
-1999-05-24  Simon Josefsson  <jas@pdc.kth.se>
-
-       * gnus-range.el (gnus-remove-from-range): Document range1
-       modification, protect range2.
-
-1999-05-24  Simon Josefsson  <jas@pdc.kth.se>
-
-       * gnus-sum.el (gnus-update-marks): Protect lists from
-       gnus-remove-from-range, don't sort twice.
-
-1999-05-21  Simon Josefsson  <jas@pdc.kth.se>
-
-        * gnus-start.el (gnus-read-descriptions-file): Protect if no
-        function in backend.
-
-1999-05-15  Simon Josefsson  <jas@pdc.kth.se>
-
-       * gnus-sum.el (gnus-valid-move-group-p): Check for a
-       request-accept-article function in the backend instead of using
-       the 'respool capability.
-
-1999-04-18  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * mm-bodies.el (mm-decode-content-transfer-encoding): Handle
-       spurious whitespace at eob.
-
-1999-06-12 02:02:06  Adrian Aichner  <aichner@ecf.teradyne.com>
-
-       * nnmail.el (nnmail-get-new-mail): Check right variable.
-
-1999-06-12 01:57:39  Karl Kleinpaste  <karl@justresearch.com>
-
-       * mailcap.el (mailcap-mime-data): Fix rfc822.
-
-1999-06-11 23:48:50  TOZAWA Akihiko  <miles@is.s.u-tokyo.ac.jp>
-
-       * nndoc.el (nndoc-nsmail-type-p): New function.
-       (nndoc-type-alist): Recognize nsmail.
-
-1999-05-12  Mike McEwan  <mike@lotusland.demon.co.uk>
-
-       * gnus-art.el (gnus-treatment-function-alist): Display `x-face'
-       *before* `article-hide-headers' deletes the information.
-
-1999-05-22 00:26:46  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-summary-save-parts): New command and
-       keystroke. 
-       (gnus-summary-save-parts-1): New function.
-       (gnus-summary-iterate): Buggy.
-
-       * mm-decode.el (mm-save-part-to-file): Made into own function. 
-
-1999-05-11 05:53:16  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-group.el (gnus-group-set-info): Resist nils.
-
-1999-05-04 19:26:08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mailcap.el (mailcap-mime-data): Ditto.
-
-       * gnus-uu.el (gnus-uu-default-view-rules): Ditto.
-
-       * gnus-art.el (gnus-article-x-face-command): Default to ee.
-
-1999-05-02  Gareth Jones  <gdj1@gdjones.demon.co.uk>
-
-       * gnus-art.el (article-make-date-line): Put X-Sent below Date if
-       gnus-article-date-lapsed-new-header is t.
-
-Sat May  1 20:27:43 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
-
-       * gnus.el: Pterodactyl Gnus v0.84 is released.
-
-1999-05-01 22:23:21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-msg.el (gnus-bug-message): Mime change.
-
-1999-04-22  Simon Josefsson  <jas@pdc.kth.se>
-
-       * gnus-sum.el (gnus-update-marks): Process null mark lists.
-
-1999-04-21  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * mm-bodies.el (mm-decode-content-transfer-encoding): Recognize
-       `x-uue'.
-
-1999-03-04  Aaron M. Ucko  <amu@mit.edu>
-
-       * mail-source.el (mail-source-fetch-pop): Only prompt for password
-       when authentication is 'password.
-
-1999-05-01 22:17:55    <pinard@iro.umontreal.ca>
-
-       * gnus-win.el (gnus-configure-windows): Accept a setting.
-
-1999-04-21 20:51:13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mm-util.el (mm-quote-arg): Moved here.
-
-       * mm-decode.el (mm-quote-arg): Quote more chars.
-
-1999-04-18 20:12:49  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnheader.el (nnheader-parse-head): Message-ID in In-Reply-To
-       with newlines would create buggy .nov files.
-
-       * gnus-art.el (gnus-article-date-lapsed-new-header): Default to nil.
-
-       * qp.el (quoted-printable-encode-region): Encode whitespace at the 
-       end of lines.
-
-       * message.el (message-mode): Doc fix.
-
-       * gnus-art.el (article-hide-headers): Delete the hidden headers. 
-
-       * gnus-msg.el (gnus-setup-posting-charset): Default group to "". 
-
-       * gnus-art.el (article-date-ut): Rewrite.
-
-       * mm-decode.el (mm-preferred-alternative-precedence): Reverse the
-       order. 
-
-       * gnus-msg.el (gnus-message-insert-stylings): Remove duplicate
-       headers. 
-
-       * gnus-art.el (gnus-article-date-lapsed-new-header): Doc fix. 
-
-1999-04-18  Didier Verna  <verna@inf.enst.fr>
-
-       * gnus-art.el (gnus-article-date-lapsed-new-header): new variable.
-       (article-date-ut): use it.
-
-1999-04-18 20:06:20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mail-source.el (mail-source-fetch-pop): Call script
-       asynchronously. 
-
-Sun Apr 18 12:40:04 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
-
-       * gnus.el: Pterodactyl Gnus v0.83 is released.
-
-1999-04-18 10:55:57  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-draft.el (gnus-draft-mode): Use mml minor mode.
-
-       * gnus-cite.el (gnus-dissect-cited-text): Off-by-one error.
-
-       * gnus-uu.el (gnus-uu-mark-thread): Save hidden threads.
-
-       * gnus-art.el (gnus-mime-inline-part): Don't do a charset param. 
-
-       * gnus-msg.el (gnus-bug): Use application/x-emacs-lisp.
-
-       * message.el (message-generate-headers): Accept continuation
-       headers. 
-
-1999-04-18 10:48:57  Renaud Rioboo  <Renaud.Rioboo@lip6.fr>
-
-       * gnus-demon.el (gnus-demon-time-to-step): Not strings.
-
-1999-04-18 08:21:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-treatment-function-alist): use
-       maybe-hide-headers.
-
-       * message.el (message-inhibit-body-encoding): Typo.
-       (message-resend): Inhibit encoding.
-
-       * gnus-sum.el (gnus-summary-toggle-header): Decode rfc2047. 
-
-       * gnus-art.el (article-remove-cr): Use re-search.
-
-       * rfc2231.el (rfc2231-parse-string): Allow broken elm MIME
-       headers. 
-
-       * mm-decode.el (mm-quote-arg): Quote '.
-
-       * gnus-ems.el (gnus-x-splash): Would place splash wrongly.
-
-       * mm-decode.el (mm-insert-part): Use multibyte for text.
-
-       * gnus-start.el (gnus-read-newsrc-file): New variable.
-       (gnus-read-newsrc-file): Use it.
-
-1999-04-17 18:51:54  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnvirtual.el (nnvirtual-request-expire-articles): New function. 
-
-       * gnus-group.el (gnus-group-expire-articles-1): Made into own
-       function. 
-
-Sat Apr 17 16:41:30 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
-
-       * gnus.el: Pterodactyl Gnus v0.82 is released.
-
-1999-04-15  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * gnus-sum.el (gnus-group-charset-alist): Include Croatian groups
-       for iso8859-2.
-
-1999-04-17 18:23:50  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mm-util.el (mm-charset-synonym-alist): Remove iso-2022-jp-2 from 
-       synonym alist.
-
-1999-04-17 18:03:38  Adam P. Jenkins  <ajenkins@netway.com>
-
-       * gnus-sum.el (gnus-summary-local-variables): Mark as global.
-
-1999-04-17 18:02:05  Ettore Perazzoli  <ettore@comm2000.it>
-
-       * mail-source.el (mail-source-fetch): Ask before bugging out. 
-
-1999-03-19  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * uudecode.el (uudecode-decode-region-external): Don't assume
-       uudecode-temporary-file-directory ends with a slash.
-
-1999-03-18  Simon Josefsson  <jas@pdc.kth.se>
-
-       * gnus-sum.el (gnus-update-marks):
-       (gnus-update-read-articles): 
-       (gnus-summary-expire-articles): Check server.
-
-1999-03-16  Simon Josefsson  <jas@pdc.kth.se>
-
-       * mml.el (mml-preview): New function.
-
-1999-04-17 17:10:21  William M. Perry  <wmperry@aventail.com>
-
-       * mail-source.el (mail-source-fetch-file): Return the right
-       value. 
-
-1999-04-17 07:52:17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mml.el (mml-insert-parameter): New function.
-       (mml-insert-parameter-string): New function.
-
-       * nnmail.el (nnmail-get-new-mail): Say how many new articles.
-
-       * gnus-art.el (gnus-mime-multipart-functions): New variable.
-       (gnus-mime-display-part): Use it.
-
-       * mm-decode.el (mm-alternative-precedence): Removed.
-       (mm-discouraged-alternatives): New variable.
-       (mm-preferred-alternative-precedence): New function.
-
-       * nnmail.el (nnmail-get-new-mail): Use mail-sources.
-
-       * mail-source.el (mail-sources): New variable.
-
-       * gnus-art.el (article-remove-cr): Remove several trailing CRs. 
-
-       * mm-decode.el (mm-valid-image-format-p): New function.
-       (mm-inline-media-tests): Use it.
-       (mm-valid-and-fit-image-p): New function.
-
-       * gnus-agent.el (gnus-agent-fetch-groups): Error when unplugged.
-       (gnus-agent-fetch-group): Ditto.
-
-1999-04-12  Didier Verna  <verna@inf.enst.fr>
-
-       * nnmail.el (nnmail-article-group): in case of a group name
-       containing "\\n" constructs, be sure to pass the expanded value to 
-       nn*-save-mail.
-
-Sat Apr 17 05:40:45 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
-
-       * gnus.el: Pterodactyl Gnus v0.81 is released.
-
-1999-04-16 15:54:02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-get-split-value): Reverse result.
-
-1999-04-03 00:17:24  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-start.el (gnus-always-read-dribble-file): Doc fix.
-
-1999-04-02 15:33:43  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mml.el (mml-insert-tag): Insert concluding part.
-
-       * message.el (message-send-mail): Encode later.
-       (message-send-news): Ditto.
-
-       * nnfolder.el: Don't use mail delim.
-
-1999-03-28 19:14:27  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-cus.el (gnus-group-customize): Put point at min.
-
-       * mm-view.el (mm-inline-text): Allow toggling html.
-
-1999-03-28 17:11:15  William M. Perry  <wmperry@aventail.com>
-
-       * mail-source.el: Added prescript and postscript to file.
-
-1999-03-28 13:46:00  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nnmail.el: Reverted.
-
-       * gnus-msg.el (gnus-setup-posting-charset): Didn't work.
-       (gnus-setup-posting-charset): Did work.
-
-1999-03-28 13:19:50  Jae-you Chung  <jay@pllab.kaist.ac.kr>
-
-       * gnus.el (gnus-short-group-name): Use
-       gnus-group-uncollapsed-levels. 
-
-1999-03-28 13:11:43  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-cite.el (gnus-dissect-cited-text): Don't remove overlays.
-
-1999-03-26 13:18:45  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-treat-strip-headers-in-body): New variable.
-       (article-strip-headers-from-body): New command and keystroke.
-
-1999-03-14 16:09:10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mail-source.el (mail-source-fetch-pop): Check for symbol first. 
-
-       * nnheader.el (nnheader-insert-file-contents): Bind
-       enable-local-eval to nil.
-       (nnheader-find-file-noselect): Ditto.
-
-       * nnmail.el (nnmail-article-group): Don't remove long lines.
-       (nnmail-remove-long-lines): New function.
-       (nnmail-split-header-length-limit): Removed.
-
-       * mml.el (mml-generate-mime-1): Use unibyte buffers.
-
-       * gnus-group.el (gnus-group-kill-all-zombies): Query user.
-
-1999-03-06 07:20:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-summary-generic-mark): New function.
-
-       * nnmail.el (nnmail-split-header-length-limit): Increased.
-       (nnmail-article-group): Allow nil.
-
-       * gnus-cite.el (gnus-cite-parse-wrapper): Inhibit point-motion. 
-
-       * nndoc.el (nndoc-generate-mime-parts-head): Insert real headers
-       first. 
-
-       * mml.el (mml-minibuffer-read-type): Include types from
-       mailcap-mime-data. 
-
-       * nndraft.el (nndraft-request-article): Would clobber Japanese. 
-
-1999-03-05  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * mml.el (mml-insert-tag): New function.
-       (mml-read-file): Renamed to mml-minibuffer-read-file to avoid
-       confusion with functions like `mml-read-tag'.
-       (mml-read-type): Ditto with `mml-minibuffer-read-type'.
-       (mml-minibuffer-read-description): Ditto with
-       `mml-minibuffer-read-description'.
-       (mml-attach-buffer): New function.
-       (mml-mode-map): New entry for /.
-       (mml-minibuffer-read-type): Accept DEFAULT.
-
-       * mml.el (mml-quote-region): Narrow the region.
-
-       * message.el (message-mode-menu): message-mime-attach-file is now
-       mml-attach-file.
-
-1999-03-05 21:24:23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-09-13  Mike McEwan  <mike@lotusland.demon.co.uk>
 
-       * gnus-art.el (gnus-treatment-function-alist): Do emphasis earlier.
+       * gnus-agent.el (gnus-agent-expire): Stop expiry barfing on killed 
+       groups.
 
-1999-03-05 21:08:10  Robert Bihlmeyer  <robbe@orcus.priv.at>
+1998-09-13 07:02:04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * mml.el (mml-attach-buffer): New command.
+       * gnus-agent.el (gnus-agent-save-group-info): Create proper active
+       lines. 
 
-1999-02-27  Simon Josefsson  <jas@pdc.kth.se>
+1998-09-10 02:40:28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-sum.el (gnus-update-marks): Call gnus-remove-from-range
-       with a proper range. Compress range.
+       * gnus-draft.el (gnus-draft-edit-message): Save the buffer. 
 
-       * gnus-range.el (gnus-remove-from-range): Protect arguments.
+Sun Sep  6 20:09:36 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1999-03-05 20:59:54  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el: Gnus v5.6.43 is released.
 
-       * mm-decode.el (mm-get-image): Create a temporary file for xbms.
+1998-09-06 19:41:54  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-03-04 04:20:25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-remove-thread): Unhide threads before
+       removing. 
+       (gnus-data-compute-positions): Ditto.
 
-       * gnus-picon.el (gnus-picons-x-face-file-name): Removed.
-       (gnus-picons-convert-x-face): Removed.
-       (gnus-picons-article-display-x-face): Removed.
-       (gnus-picons-x-face-sentinel): Ditto. 
-       (gnus-picons-display-x-face): Ditto.
+1998-08-31 11:40:13  Shuhei KOBAYASHI  <shuhei-k@jaist.ac.jp>
 
-Thu Mar  4 01:38:00 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * nnmail.el (nnmail-date-to-time): Parse time locally if no
+       timezone. 
 
-       * gnus.el: Pterodactyl Gnus v0.80 is released.
+1998-08-31 11:21:53  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-03-02 16:04:30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-srvr.el (gnus-browse-foreign-server): Protect against
+       out-of-range articles.
 
-       * gnus-art.el (gnus-mm-display-part): Narrow to the part itself. 
+       * gnus-msg.el (gnus-summary-reply): Don't inhibit posting styles.
 
-       * gnus-sum.el (gnus-with-article): Moved here.
+1998-08-30 22:33:33  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * mail-source.el (mail-source-fetch-pop): Ask for password even
-       when program.
+       * gnus-score.el (gnus-summary-increase-score): Temporary third
+       majuscle. 
 
-1999-02-28 13:16:12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-08-30 22:32:31  Dan Christensen  <jdc@playmate.mat.jhu.edu>
 
-       * gnus-msg.el (gnus-bug): Add description.
+       * gnus-score.el (gnus-summary-increase-score): Score thread on
+       Message-ID. 
 
-       * mml.el (mml-insert-mml-markup): Insert disposition.
+1998-08-29 02:46:00  Simon Josefsson  <jas@pdc.kth.se>
 
-       * message.el (message-send-mail): Always encode mail headers.
+       * gnus-sum.el (gnus-summary-mark-article-as-read): 
+       (gnus-summary-mark-article-as-unread): 
+       (gnus-summary-mark-article): Call gnus-request-update-mark.
 
-       * smiley.el (gnus-smiley-display): Goto body.
+1998-08-29  Mike McEwan  <mike@lotusland.demon.co.uk>
 
-1999-02-28 13:15:47  Petr Konecny  <pekon@informatics.muni.cz>
+       * gnus-agent.el (gnus-agent-fetch-headers): Cater for when there's 
+       no .agentview, all articles have been expired, or everything bar a 
+       few downloaded arts have been expired.
+       (gnus-agent-expire): Mark *all* expired articles as read.
 
-       * smiley.el (gnus-smiley-display): Don't search to blank line.
+Sat Aug 29 19:17:19 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1999-02-28 00:38:40  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el: Gnus v5.6.42 is released.
 
-       * gnus-art.el (gnus-treat-article): Only run the highlight stuff
-       when requested.
+1998-08-29 17:06:27  Simon Josefsson  <jas@pdc.kth.se>
 
-       * nnmail.el (nnmail-current-spool): Removed.
+       * gnus-sum.el (gnus-summary-make-menu-bar): Typo.
 
-       * gnus-salt.el (gnus-tree-inhibit): New varible.
+1998-08-29 12:47:42  Tatsuya Ichikawa  <ichikawa@hv.epson.co.jp>
 
-       * gnus.el (mm-util): Required.
+       * gnus-agent.el: Use nnheader-insert-file-contents.
 
-1999-02-27 23:44:52  paul stevenson  <spaul@mail.phy.ornl.gov>
+1998-08-29 12:18:18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-sum.el (gnus-summary-toggle-header): Narrow to head first. 
+       * nnvirtual.el (nnvirtual-request-group): Update the right group. 
 
-1999-02-27 17:17:47  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-08-27 16:46:38  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * mail-source.el (mail-source-bind): Doc fix.
+       * gnus-sum.el (gnus-data-compute-positions): Didn't work on hidden
+       threads.
 
-1999-02-26 20:35:57  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnvirtual.el (nnvirtual-request-group): Work when always
+       updating. 
+       (nnvirtual-always-rescan): Default to t.
 
-       * message.el (message-mode): Doc fix.
+Thu Aug 27 11:03:59 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * mm-encode.el (mm-content-transfer-encoding-defaults): Use 8bit
-       encoding. 
+       * gnus.el: Gnus v5.6.41 is released.
 
-       * gnus.el (gnus-methods-equal-p): Moved here.
+1998-08-27  Mike McEwan  <mike@lotusland.demon.co.uk>
 
-       * mail-source.el: pop at 110.
+       * gnus-agent.el (gnus-agent-fetch-group-1): Leave the calculation
+       of `articles' to `gnus-agent-fetch-headers'.
+       (gnus-agent-fetch-headers): We only want headers that are after
+       the last entry in `gnus-group-alist'.
 
-       * pop3.el (pop3-movemail): Use write-region instead of
-       append-to-file to avoid excessive messaging.
+1998-08-27 09:45:42  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-02-27  lantz moore  <lmoore@contigo.com>
+       * Makefile.in (warn): New.
 
-       * nnmail.el (nnmail-get-new-mail): honor suffix for spool-files of 
-       type directory.
+       * gnus.el: Removed unreferenced bound variables all over.
 
-1999-03-04  Robert Bihlmeyer  <robbe@orcus.priv.at>
+       * gnus-group.el (gnus-update-group-mark-positions): Removed topic.
 
-       * gnus-art.el (article-hide-boring-headers): Field names must not
-       contain whitespace.
+       * gnus-cus.el (gnus-group-customize): No part.
 
-Fri Feb 26 18:54:16 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-agent.el (gnus-category-line-format-alist): Renamed specs.
+       (gnus-category-insert-line): Use it.
 
-       * gnus.el: Pterodactyl Gnus v0.79 is released.
+Thu Aug 27 09:29:53 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1999-02-26 18:11:04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el: Gnus v5.6.40 is released.
 
-       * gnus-cite.el (gnus-cite-toggle): Don't remove highlighting. 
+1998-08-27 09:19:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * mml.el (mml-mode): Don't use add-minor-mode.
+       * gnus-agent.el (gnus-agent-mode): Only toggle plugged in group
+       mode. 
 
-       * message.el (messgage-inhibit-body-encoding): New variable.
-       (message-encode-message-body): Use it.
+1998-08-27 07:25:47  Lars Balker Rasmussen  <gnort@daimi.aau.dk>
 
-Fri Feb 26 17:00:25 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * message.el (message-supersede): Check the right headers. 
 
-       * gnus.el: Pterodactyl Gnus v0.78 is released.
+1998-08-26 13:51:18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-02-26 07:45:30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-sort-threads): Changed level.
 
-       * message.el (message-mode): Switch on MML mode.
+1998-08-26  Mike McEwan  <mike@lotusland.demon.co.uk>
 
-       * mml.el: Included commands and functions.
-       (mml-mode-map): New keymap.
+       * gnus-sum.el (gnus-build-all-threads): `save-excursion' and
+       `set-buffer' back to `gnus-summary-buffer' in order to access
+       buffer-local variables.
 
-       * message.el: Removed the insertion commands and functions.
+1998-08-26 06:00:44  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-ems.el (gnus-mule-cite-add-face): Removed.
+       * gnus-sum.el (gnus-data-compute-positions): More and faster. 
 
-       * gnus-sum.el (gnus-summary-sort-by-chars): New command and
-       keystroke. 
+1998-08-26 05:41:15  Matt Pharr  <mmp@Graphics.Stanford.EDU>
 
-       * gnus-art.el (gnus-narrow-to-page): Revert.
+       * message.el (message-wash-subject): Remove more.
 
-       * gnus-cite.el (gnus-cite-delete-overlays): New function.
-       (gnus-cite-parse-maybe): Always reparse.
+1998-08-25 11:33:28  Tatsuya Ichikawa  <ichikawa@hv.epson.co.jp>
 
-       * message.el (message-encode-message-body): Don't insert
-       "multipart warning". 
+       * gnus-cache.el (gnus-cache-overview-coding-system): New
+       variable. 
 
-       * gnus-art.el (gnus-article-treat-head-custom): New variable.
+1998-08-25 08:23:05  Albert L. Ting  <alt@artisan.com>
 
-1999-02-25  Miles Bader  <miles@ccs.mt.nec.co.jp>
+       * gnus-group.el (gnus-fetch-group-other-frame): New command.
 
-       * mail-source.el (mail-source-fetch-pop): Return 1 for success.
+1998-08-25 07:24:51  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * nnmail.el: Require mm-util.
+       * gnus-uu.el (gnus-uu-grab-articles): Check for pseudos.
 
-1999-02-26 07:39:33  Justin Sheehy  <justin@linus.mitre.org>
+       * gnus-art.el (gnus-ignored-headers): More headers.
 
-       * nnmail.el (nnmail-get-new-mail): Only get mail for the one
+       * gnus-sum.el (gnus-summary-move-article): Update the right
        group. 
 
-1999-02-26 07:38:08  SeokChan LEE  <chan@smoky-blue.com>
-
-       * mm-bodies.el (mm-body-charset-encoding-alist): Add euc-kr.
-
-1999-02-21  Simon Josefsson  <jas@pdc.kth.se>
-
-       * gnus-msg.el (gnus-extended-version): Better regexp.
-
-1999-02-25  Didier Verna  <verna@inf.enst.fr>
-
-       * nnmail.el (nnmail-split-it): new syntax: `(! FUNC SPLIT)'. FUNC
-       is called with the result of SPLIT and should return a new split.
-
-        * gnus.texi: update the doc.
-
-1999-02-23  Didier Verna  <verna@inf.enst.fr>
-
-       * gnus-picon.el (gnus-picons-display-bar-p): when picons are
-       displayed in the article buffer, output bars if
-       `gnus-picons-display-article-move-p'.
-
-1999-02-20  Aaron M. Ucko  <amu@mit.edu>
-
-       * mail-source.el (mail-source-fetch-pop): Typo.
-
-1999-02-26 07:15:12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-summary-toggle-header): Save restriction.
-
-1999-02-23 03:07:58  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-cite.el (gnus-cite-parse-wrapper): Always parse.
-
-1999-02-21 11:11:39  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mml.el (mml-insert-buffer): New function.
-
-       * message.el (message-forward): Insert the buffer in the buffer. 
-
-Sun Feb 21 01:20:50 1999  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-view.el (mm-inline-message): Insert part in narrowed region.
-
-Sat Feb 20 23:09:40 1999  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-sum.el (gnus-summary-toggle-header): Save restriction.
-
-Sat Feb 20 21:34:28 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
-
-       * gnus.el: Pterodactyl Gnus v0.77 is released.
-
-1999-02-20 17:32:17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (gnus-displaying-mime): New variable.
-       (article-narrow-to-head): New function.
-
-       * mail-source.el (mail-source-fetch-pop): Include pre/postscript. 
-       Default to pop instead of pop3.
-
-1999-02-19 16:16:04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (article-hide-pgp): Goto body.
-
-       * gnus-uu.el (gnus-uu-digest-mail-forward): Don't kill buffer. 
-
-       * gnus-cite.el: Don't use goto-line.
-
-       * gnus-art.el (gnus-article-treat-html): Removed.
-       (gnus-treat-article): Save restriction.
-
-1999-02-17  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * message.el (message-send-mail): Don't untabify.
-       (message-mode): Don't use tabs for indentation.
-
-1999-02-19 14:54:13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * message.el (message-send-mail): Don't untabify.
-
-       * nnml.el (nnml-save-mail): Typo fix.
-
-1999-02-19  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * message.el (message-cite-function): Add
-       `message-cite-original-without-signature' customization option.
-
-1999-02-18  Per Abrahamsen  <abraham@dina.kvl.dk>
-
-       * nnmail.el (nnmail-fix-eudora-headers): Mark as option to
-       `nnmail-prepare-incoming-header-hook'.
-
-1999-02-19 14:41:43  Justin Sheehy  <justin@linus.mitre.org>
-
-       * gnus-util.el (gnus-make-sort-function-1): Typo fix.
-
-1999-02-19 14:40:37  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-group.el (gnus-group-get-new-news): Require nnmail. 
-
-1999-02-18  Michael Cook  <cook@sightpath.com>
-
-       * Recognize Microsoft Outlook's cite attribution conventions.
-
-1999-02-19 14:33:11  James H. Cloos, Jr.  <cloos@jhcloos.com>
-
-       * gnus-sum.el: Bind M.
-
-1999-02-19 14:31:29  Neil Crellin  <neilc@wallaby.cc>
-
-       * mail-source.el (mail-source-fetch-pop): Bind pop3-port.
-
-1999-02-15  Didier Verna  <verna@inf.enst.fr>
-
-       * gnus-picon.el (gnus-group-display-picons): ensures that
-       `article-goto-body' really goes to the article body.
-
-1999-02-19 12:57:19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mm-view.el (mm-inline-text): Bind url-standalone-mode.
-
-       * gnus-msg.el (gnus-summary-mail-forward): Create unique names.
-
-       * mm-view.el (mm-view-message): Enable multibyte.
-
-1999-02-11 18:37:15  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-08-23 14:31:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * nnmail.el (nnmail-get-new-mail): Message later.
+       * gnus-art.el (gnus-ignored-headers): More headers.
 
-       * mm-util.el (mm-find-charset-region): Revert to checking
-       multibyte.
+1998-08-23  Mike McEwan  <mike@lotusland.demon.co.uk>
 
-1999-02-11  Matt Pharr  <mmp@graphics.stanford.edu>
+       * gnus-agent.el (gnus-agent-copy-nov-line): Return to beginning of 
+       line before next read.
+       (gnus-agent-braid-nov): Remove redundant `let'. 
 
-      * gnus-msg.el (gnus-bug): Encode environment info as a MIME
-      attachment. 
+1998-08-22 10:40:54  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-Thu Feb 11 04:58:51 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-art.el (article-display-x-face): Allow multiple X-Faces
+       under XEmacs.
 
-       * gnus.el: Pterodactyl Gnus v0.76 is released.
+Sat Aug 22 10:28:25 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1999-02-06  Felix Lee  <flee@cygnus.com>
+       * gnus.el: Gnus v5.6.39 is released.
 
-       * gnus.el (gnus-group-change-level-function): Typo.
+1998-08-22 10:06:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-02-11 05:47:51  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-art.el (gnus-ignored-headers): Added more headers.
 
-       * gnus-sum.el (gnus-nov-skip-field): Removed.
-       (gnus-nov-field): Ditto.
-       (gnus-nov-parse-extra): Ditto.
-       (gnus-nov-read-integer): Ditto.
+1998-08-21 02:49:56  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-02-05 09:44:20  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * nnweb.el (nnweb-type): Doc fix.
 
-       * nnheader.el (nnheader-nov-read-message-id): New macro.
-       (nnheader-parse-nov): Use it.
+       * gnus-sum.el (gnus-summary-set-process-mark): Move to the right
+       article. 
 
-       * gnus-sum.el (gnus-nov-read-message-id): New macro.
-       (gnus-nov-parse-line): Use it; use `(eobp)' instead of
-       `(eq (char-after) ?\n)'.
+1998-08-20 23:10:01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-02-11 05:16:26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnmail.el (nnmail-spool-file): Allow lists of files.
 
-       * gnus.el (gnus-other-frame): Always pop up a new frame.
+1998-08-20  Per Starback  <starback@update.uu.se>
 
-Wed Feb 10 01:03:43 1999  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus/gnus-start.el (gnus-check-first-time-used): Change current
+       buffer before creating help group.
 
-       * gnus-range.el (gnus-range-add): Rewrite.
+1998-08-20 01:33:08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-02-02 18:12:00  Carsten Leonhardt  <leo@arioch.oche.de>
+       * gnus-msg.el (gnus-message-style-insertions): New variable.
+       (gnus-message-insert-stylings): New function.
+       (gnus-configure-posting-styles): Use them.
 
-       * nnmail.el (nnmail-split-incoming): Added detection of maildir
-       format.
-       (nnmail-process-maildir-mail-format): New function.
+       * gnus-topic.el (gnus-topic-mode): Don't alter summary-exit-hook. 
 
-       * mail-source.el (mail-source-fetch-maildir): New function.
-       (mail-source-keyword-map): Add default for maildir method.
-       (mail-source-fetcher-alist): Changed "qmail" to "maildir".
+       * gnus-sum.el (gnus-select-newsgroup): Don't update group.
 
-1999-02-10 02:29:28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-msg.el (gnus-setup-message): Bind message-mode-hook.
+       (gnus-inhibit-posting-styles): New variable.
+       (gnus-summary-reply): Use it.
+       (gnus-configure-posting-styles): Ditto.
 
-       * mail-source.el (mail-source-fetcher-alist): Remove apop.
+       * gnus-group.el (gnus-group-suspend): Don't kill dribble buffer. 
 
-       * nndoc.el (nndoc-type-alist): Remove MIME-digest.
-       (nndoc-mime-digest-type-p): Removed.
+Thu Aug 20 00:28:35 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1999-02-09 15:25:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el: Gnus v5.6.38 is released.
 
-       * gnus-art.el (gnus-article-read-summary-keys): Set the point
-       where it is supposed to be.
-       (gnus-treat-play-sounds): New variable.
+1998-08-20 00:02:50  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-sum.el (gnus-newsgroup-ignored-charsets): New variable.
+       * message.el (message-mail): Doc fix.
 
-       * gnus-art.el (article-display-x-face): Narrow to head.
-       (gnus-article-washed-types): New variable.
-       (article-hide-pgp): Is not a toggle.
-       (gnus-article-hide-text-type): Save types.
-       (article-decode-charset): Use it.
+1998-08-19 23:22:02  Bill Pringlemeir  <bpringle@my-dejanews.com>
 
-       * nnmail.el (nnmail-get-new-mail): Ignore procmail.
+       * messcompat.el (message-send-mail-function): Initialized from
+       send-mail-function. 
 
-       * message.el (message-forward-start-separator): Removed.
-       (message-forward-end-separator): Removed.
-       (message-signature-before-forwarded-message): Removed.
-       (message-included-forward-headers): Removed.
-       (message-check-news-body-syntax): Don't check forward.
-       (message-forward): Use MIME.
+1998-08-19 23:20:42  Martin Larose  <larosem@IRO.UMontreal.CA>
 
-       * nnvirtual.el (nnvirtual-request-article): Bind
-       gnus-article-decode-hook to nil.
+       * message.el (message-send-coding-system): New variable.
 
-1999-02-06 16:55:25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-08-19 19:00:37  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * mml.el (mml-parse-singlepart-with-multiple-charsets): Check for
-       us-ascii.
+       * gnus-msg.el (gnus-configure-posting-styles): Reinstated most of
+       old code.
 
-1999-02-04 00:00:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-start.el (gnus-save-newsrc-file): Use coding system.
 
-       * format-spec.el (format-spec): Be more robust.
+1980-06-08 03:53:56  Mike McEwan  <mike@lotusland.demon.co.uk>
 
-       * message.el (message-encode-message-body): Default
-       mail-parse-charset to mail-parse-charset.
+       * gnus-agent.el (gnus-agent-braid-nov): Go to right place. 
 
-       * gnus-sum.el (gnus-summary-edit-article-done): Don't encode.
-       (gnus-summary-edit-article): Bind mail-parse-charset.
+1980-06-08 03:01:48  Shuhei KOBAYASHI  <shuhei-k@jaist.ac.jp>
 
-       * mml.el (mml-read-tag): Ignore white space after end of tag.
+       * gnus-group.el (gnus-group-suspend): Fix.
 
-       * message.el (message-goto-body): Also work in separatorless
-       articles.
-
-       * mml.el (mml-translate-from-mime): New function.
-       (mml-insert-mime): Ditto.
-       (mml-to-mime): New function.
-       (mime-to-mml): New name.
-
-       * gnus-sum.el (gnus-summary-edit-article): Always select raw
-       article.
-
-       * gnus-group.el (gnus-group-catchup-current): Unmark groups.
-
-       * gnus-sum.el (gnus-summary-setup-default-charset): Don't
-       special-case nndraft groups.
-
-1999-02-03 16:44:19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-sum.el (gnus-get-newsgroup-headers): Bind charset.
-       (gnus-get-newsgroup-headers): Already bound.
+1998-08-18 00:25:11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * message.el (message-encode-message-body): Use posting charset.
+       * gnus-cite.el (gnus-cited-opened-text-button-line-format-alist):
+       New n spec.
 
-       * mm-bodies.el (mm-encode-body): Use MIME charsets.
-       (mm-body-encoding): Do CTE.
-       (mm-body-7-or-8): New function.
+       * gnus-group.el (gnus-group-suspend): Use mapcar.
 
-       * mm-util.el (mm-mime-charset): Always fall back on alist.
-       (mm-mime-mule-charset-alist): Include katakana-jisx0201.
-       (mm-mime-mule-charset-alist): Add arabic-*-column.
-       (mm-find-mime-charset-region): New function.
+1998-08-17 14:35:33  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * format-spec.el (format-spec-make): New function.
+       * gnus-ems.el (gnus-add-minor-mode): Set mode var.
 
-       * mail-source.el (format-spec): Required.
-       (mail-source-fetch-with-program): Removed.
-       (mail-source-fetch-with-program): New function.
+       * gnus-start.el (gnus-slave-mode): New function.
 
-       * format-spec.el: New file.
+       * gnus-msg.el (gnus-post-method): Work with current in nndraft. 
 
-1999-02-03 16:00:41  Tatsuya Ichikawa  <ichikawa@hv.epson.co.jp>
+1998-08-16 23:30:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * mail-source.el (mail-source-fetch-with-program): Take optional
-       parameter.
-
-1999-02-03 00:31:21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-start.el: Ignore some groups.
-       (gnus-setup-news): Bind nnmail-fetched-sources.
-
-       * message.el (message-send-mail): Remove all tabs.
+       * gnus-art.el (gnus-request-article-this-buffer): Allow recursive
+       selection of nneething groups.
 
-       * mm-util.el (mm-find-charset-region): Just check whether
-       find-charset-region is defined.
+       * nneething.el (nneething-address): Renamed from directory.
 
-1999-02-02 23:35:20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Aug 16 18:59:41 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-group.el (gnus-group-get-new-news): Use
-       nnmail-fetched-sources.
+       * gnus.el: Gnus v5.6.37 is released.
 
-       * nnmail.el (nnmail-fetched-sources): New variable.
-       (nnmail-get-new-mail): Use it.
+1998-08-16 14:52:43  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * mail-source.el (mail-source-fetched-sources): New variable.
-       (mail-source-fetch): Use it.
+       * gnus.el: Autoload gnus-summary-wide-reply.
 
-1999-02-02 23:20:20  Mark W. Eichin  <eichin@thok.org>
+       * gnus-sum.el (gnus-get-newsgroup-headers): Return the value of
+       In-Reply-To. 
 
-       * gnus.el (gnus-getenv-nntpserver): if the file that
-       gnus-nntpserver-file names has a trailing newline, the
-       string-match will always match, and thus the file will never be
-       read.  (^ matches start of "line", \\` matches start of "buffer",
-       which is what was intended...)
+       * gnus-msg.el (gnus-setup-message): Posting styles have to be
+       configured in message-mode-hook.
 
-1999-02-02 23:17:40  Kim-Minh Kaplan  <kmkaplan@western.fr>
+       * nntp.el (nntp-connection-timeout): Restored.
+       (nntp-open-connection): Use it.
 
-       * gnus-picon.el (gnus-picons-parse-filenames): Quote group names.
+1998-08-15 22:46:49  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-01-28 04:15:46  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * gnus-group.el (gnus-group-make-useful-group): Doc fix.
 
-       * gnus-start.el (gnus-read-active-file): Eliminate duplicated
-       select methods.
+       * gnus-art.el (gnus-article-push-button): Place point where you
+       click.
 
-1999-01-27  Simon Josefsson  <jas@pdc.kth.se>
+1998-08-15  Mike McEwan  <mike@lotusland.demon.co.uk>
 
-       * gnus-range.el (gnus-remove-from-range): Sort second argument.
+       * gnus-agent.el (gnus-agent-save-group-info): Update "groups" file 
+       if `nntp-server-list-active-group' is nil.
 
-1999-02-02 10:55:23  Scott Hofmann  <shofmann@mindspring.com>
+1998-08-15 00:35:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * nntp.el: Use mail-source-read-passwd instead of nnmail-read-passwd.
+       * gnus-score.el (gnus-summary-increase-score): Swap t and r.
 
-Mon Feb  1 23:23:03 1999  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-sum.el (gnus-remove-thread): Didn't work with sparse
+       threads. 
 
-       * gnus-cus.el (gnus-group-parameters): Charset as symbol, and fix
-       a typo.
-       * gnus-sum.el (gnus-summary-setup-default-charset): Set nndraft's
-       charset to nil.
-       * gnus-agent.el (gnus-agent-queue-setup): Remove charset setting.
-       * gnus-start.el (gnus-start-draft-setup): Ditto.
+1998-08-14  François Pinard  <pinard@iro.umontreal.ca>
 
-1999-02-02 22:13:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nndoc.el (nndoc-generate-mime-parts-head): Use original Subject,
+       Message-ID, and References in fully blown articles.
 
-       * mail-source.el (mail-source-fetch-directory): Use the predicate.
-       (mail-source-value): Don't do variables.
+Fri Aug 14 23:03:51 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * nnmail.el (nnmail-get-new-mail): Set the predicate.
+       * gnus.el: Gnus v5.6.36 is released.
 
-       * gnus-sum.el (gnus-summary-toggle-header): Fix, and bound to t.
+1998-08-14 21:49:22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-02-01  Michael Cook  <cook@sightpath.com>
+       * gnus.el (load): Push onto list.
 
-       * Defenestrate spurious ?a.
+       * gnus-group.el (gnus-group-get-new-news-this-group): Store active
+       info. 
 
-1999-02-02 21:59:51  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Fri Aug 14 21:41:59 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * mail-source.el (mail-source-fetch-pop): Instead use
-       :authentication.
+       * gnus.el: Gnus v5.6.35 is released.
 
-1999-02-01  Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
+1998-08-14 00:00:15  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * lisp/mail-source.el : Support APOP authentication scheme.
+       * gnus-srvr.el (gnus-server-scan-server): Error better.
 
-1999-02-02 21:56:14  Tatsuya Ichikawa  <t-ichi@niagara.shiojiri.ne.jp>
+       * nndir.el: Make independent of nnmh.
+       Revert.
 
-       * pop3.el (pop3-movemail): Return t.
+       * message.el (message-remove-text-with-property): New function.
+       (message-fix-before-sending): Check for invisible text.
 
-1999-02-02 21:48:46  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el (load): Create the Gnus buffer even when no splash.
 
-       * rfc2047.el (rfc2047-fold-region): New function.
-       (rfc2047-encode-message-header): Use it.
+       * gnus-msg.el (gnus-setup-message): Add buffer to list.
 
-1999-02-02 21:07:27  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
+       * gnus-win.el (gnus-remove-some-windows): Use new buffer system. 
+       (gnus-delete-windows-in-gnusey-frames): Ditto.
 
-       * gnus-sum.el (gnus-group-charset-alist): Add more.
+       * gnus.el (gnus-add-buffer): New function.
 
-Mon Feb  1 21:18:00 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+1998-08-13 23:38:21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus.el: Pterodactyl Gnus v0.75 is released.
+       * gnus-xmas.el (gnus-buffer-list): Removed.
 
-1999-02-01 21:54:26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el (gnus-buffers): New variable.
+       (gnus-get-buffer-create): New function; used throughout.
+       (gnus-buffers): New function.
 
-       * gnus-art.el (article-display-x-face): Don't narrow to head.
+       * gnus-msg.el (gnus-configure-posting-styles): Go to eoh
+       reliably. 
 
-1999-02-01 21:48:39  Michael Cook  <cook@sightpath.com>
+       * message.el (message-goto-eoh): New command.
 
-       * gnus-cite.el (gnus-cited-lines-visible): Accept a cons.
+1998-08-13 23:13:53  Simon Josefsson  <jas@pdc.kth.se>
 
-1999-02-01 20:59:38  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-msg.el (gnus-setup-message): use message-setup-hook
+       instead
+       (gnus-configure-posting-styles): new posting-style 'body
+       (gnus-configure-posting-styles): insert headers immediately
 
-       * mail-source.el (mail-source-fetch-directory): Ignore
-       directories.
+1998-08-13 13:05:36  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-cus.el (gnus-group-parameters): Addition.
+       * gnus-score.el (gnus-summary-increase-score): Change thread to
+       "r". 
 
-       * gnus-art.el (article-strip-banner): Do symbolic banners.
-       (article-strip-banner): New keystroke.
-
-1999-02-01 20:54:32  Michael Cook  <cook@sightpath.com>
-
-       * gnus-art.el (article-strip-banner): New command.
+       * gnus-sum.el (gnus-summary-scroll-down): New command and
+       keystroke. 
 
-1999-02-01 20:53:45  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-agent.el (gnus-agent-expire): Check that directories
+       exist. 
 
-       * gnus-art.el (gnus-treat-strip-banners): New variable.
+1998-08-12 20:56:41  Simon Josefsson  <jas@pdc.kth.se>
 
-1999-01-28 05:34:56  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * gnus-cache.el (gnus-uncacheable-groups): doc change
+       (gnus-cacheable-groups): new variable
+       (gnus-cache-possibly-enter-article): use it
 
-       * mail-source.el (mail-source-read-passwd): Use `read-passwd' if it
-       has been exist.
+1998-08-12 22:30:16  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-Thu Jan 28 01:38:34 1999  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * nntp.el (nntp-encode-text): Too much text.
 
-       * message.el (message-draft-coding-system): Check coding-system.
-       * mm-util.el (mm-text-coding-system): Ditto.
+1998-08-12 21:58:50  Matt Pharr  <mmp@Graphics.Stanford.EDU>
 
-1999-01-28 12:11:31  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * message.el (message-make-forward-subject-function): New
+       variable. 
+       (message-wash-forwarded-subjects): Ditto.
 
-       * mail-source.el (mail-source-fetch-pop): Save excursion.
+Wed Aug 12 21:09:58 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1999-01-28 08:14:21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el: Gnus v5.6.34 is released.
 
-       * mail-source.el (mail-source-movemail-args): Not constant.
-       (mail-source-movemail-args): Removed.
-       (mail-source-fetch-with-program): New function.
-       (mail-source-fetch-pop): Use program and function.
-       (mail-source-movemail-program): Removed.
+1998-08-12 13:32:38  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-art.el (gnus-treat-date-iso8601): New variable.
-       (gnus-treat-date-user-defined): New variable.
+       * gnus-msg.el (gnus-post-method): Don't use `current' in drafts.
 
-1999-01-28 08:07:12  Per Abrahamsen  <abraham@dina.kvl.dk>
+       * gnus-score.el (gnus-summary-increase-score): Changed T to h and
+       downcase. 
 
-       * nnmail.el (nnmail-fix-eudora-headers): New function.
+Tue Aug 11 20:46:25 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1999-01-28 08:05:19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el: Gnus v5.6.33 is released.
 
-       * mm-bodies.el (mm-encode-body): Use mail-parse-charset.
+1998-08-11 20:07:55  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-01-27 08:06:38  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-group.el (gnus-group-apropos): Check symbol value.
 
-       * smiley.el (smiley-deformed-regexp-alist): Removed =>.
-       (smiley-nosey-regexp-alist): Ditto.
+       * gnus-cite.el (gnus-cited-closed-text-button-line-format):
+       Changed.
 
-       * gnus-art.el (gnus-treatment-function-alist): Do
-       gnus-article-add-buttons-to-head later.
-       (gnus-treat-capitalize-sentences): New variable.
-       (article-capitalize-sentences): New command and keystroke.
+Tue Aug 11 19:42:42 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-group.el (gnus-group-catchup-current): Do group.
+       * gnus.el: Gnus v5.6.32 is released.
 
-       * message.el (message-default-charset): Add group.
+1998-08-11 13:36:56  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-Wed Jan 27 05:24:53 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * nndoc.el (nndoc-type-alist): Do MIME digests before multiparts.
 
-       * gnus.el: Pterodactyl Gnus v0.74 is released.
+       * gnus.el (gnus-predefined-server-alist): Expand vars.
 
-1999-01-27 05:56:29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-08-09  Dave Love  <d.love@dl.ac.uk>
 
-       * gnus-art.el (article-fill-long-lines): Renamed.
-       (article-fill-long-lines): New keystroke.
+       * gnus-art.el (article-display-x-face): Don't try (and fail) to
+       display multiple faces.
 
-1999-01-26 06:35:07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-08-11 11:41:43  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-msg.el (gnus-setup-posting-charset): Check for group.
+       * gnus-art.el (gnus-header-newsgroups-face): Don't bold so much.
 
-       * gnus-group.el (gnus-group-catchup-current): Skip groups now
-       displayed.
-       (gnus-group-catchup-current): Be more robus.
+       * gnus-group.el (gnus-group-rename-group): Remove old group name
+       from list of killed groups.
 
-       * gnus-sum.el (gnus-summary-select-article): Reselect for showing
-       headers.
+       * gnus-int.el (gnus-get-function): Error better.
 
-1999-01-25  Dave Love  <fx@gnu.org>
+       * gnus-art.el (gnus-article-narrow-to-signature): Inhibit motion
+       hooks.
+       (article-hide-pgp): Delete text instead of hiding it.
 
-       * message.el (message-mode-menu): Add message-mime-attach-file.
-       (message-mode): Doc fix.
+       * gnus-group.el (gnus-group-find-new-groups): Ditto.
 
-1999-01-26 05:24:19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-start.el (gnus-find-new-newsgroups): Accept C-u C-u as a
+       total query.
 
-       * nnmail.el (nnmail-check-duplication): Insert the mail source
-       string.
+1998-08-10 09:31:36  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * mail-source.el (mail-source-fetch-pop): Bind mail-source-string.
-       (mail-source-fetch-directory): Ditto.
-       (mail-source-fetch-file): Ditto.
-       (mail-source-string): New variable.
+       * gnus-art.el (gnus-article-prepare): Place point at the beginning
+       of the body.
 
-       * gnus-start.el (gnus-get-unread-articles): Nix out groups over
-       the level.
+       * gnus-cite.el (gnus-cite-attribution-face): Changed to italic.
 
-       * rfc2047.el (rfc2047-encodable-p): Convert to MIME charsets
-       before handling.
+       * gnus-art.el (gnus-article-edit-article): Delete "annotation"
+       text.
+       (gnus-insert-prev-page-button): Mark as annotation.
+       (gnus-insert-next-page-button): Ditto.
 
-       * mm-util.el (mm-mime-charset): Use the parameters.
-       (mm-mime-charset): Removed region paremeters.
+       * gnus-cite.el (gnus-cited-closed-text-button-line-format): New
+       variable.
+       (gnus-cited-closed-text-button-line-format-alist): Ditto.
+       (gnus-article-toggle-cited-text): Toggle between different
+       symbols.
 
-       * nnmail.el (nnmail-get-new-mail): Don't message the entire
-       source.
+1998-08-09 19:58:36  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-01-25 12:05:16  Lloyd Zusman  <ljz@asfast.com>
+       * gnus.el (gnus-version): Remove backend info.
 
-       * nnmail.el (nnmail-get-split-group): Quote right.
+Sun Aug  9 19:37:40 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1999-01-25 05:55:41  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el: Gnus v5.6.31 is released.
 
-       * mail-source.el (mail-source-movemail): Would kill an arbitrary
-       buffer.
+1998-08-09  François Pinard  <pinard@iro.umontreal.ca>
 
-1999-01-24 03:02:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nndoc.el: Split MIME multipart messages, maybe recursively.
+       (nndoc-mime-parts-type-p, nndoc-transform-mime-parts,
+       nndoc-generate-mime-parts-head, nndoc-dissect-mime-parts,
+       nndoc-dissect-mime-parts-sub): New functions.
 
-       * gnus-group.el (gnus-clear-inboxes-moved): Removed.
-       (gnus-group-mode): Don't hook.
+       * nndoc.el: Quoting boundaries is optional, for multipart digests.
 
-       * mail-source.el (mail-source-bind): Doc fix.
-       (mail-source-bind): Take only one param.
+1998-08-09 17:51:25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-art.el (gnus-treat-highlight-signature): typep.
+       * gnus-agent.el (gnus-agent-save-group-info): Check whether file
+       exists.
 
-       * mail-source.el (mail-source-movemail): Ignore empty file.
-       (mail-source-callback): Check before deleting.
+       * message.el (message-goto-signature): Return nil if no sig.
+       (message-delete-not-region): Delete properly if no sig.
 
-       * message.el (message-mime-attach-file): Include name.
+1998-08-09 17:26:30  Simon Josefsson  <jas@pdc.kth.se>
 
-1999-01-23 17:01:12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+        * gnus-srvr.el (gnus-browse-make-menu-bar): select did read
 
-       * mm-util.el (mm-read-charset): Return a symbol.
+1998-08-09 15:51:43  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * mm-view.el (mm-inline-text): Insert signature separator.
+       * gnus-sum.el (t): Added keystroke for W W C.
 
-       * gnus-art.el (gnus-treat-predicate): New function.
-       (gnus-treat-article): Allow all types to be checked.
+       * gnus-cite.el (gnus-article-hide-citation-maybe): hiden->hidden.
 
-       * gnus-util.el (gnus-or): New function.
-       (gnus-and): Ditto.
+Sun Aug  9 15:46:16 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-art.el (gnus-mime-display-single): Use override.
+       * gnus.el: Gnus v5.6.30 is released.
 
-       * mm-decode.el (mm-attachment-override-types): New variable.
-       (mm-attachment-override-p): New function.
+1998-08-09 10:48:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-picon.el (gnus-group-display-picons): Don't go backward.
+       * message.el (message-cite-original-without-signature): Peel off
+       blank lines.
 
-1999-01-23 16:45:06  Andrew J. Cosgriff  <ajc@bing.wattle.id.au>
+       * gnus-art.el (gnus-article-maybe-highlight): Doc fix.
 
-       * mm-view.el (mm-inline-text): Do vcards.
+       * gnus-sum.el (gnus-data-enter-list): Threw away all new list data
+       at the beginning of the buffer.
 
-Sat Jan 23 14:23:27 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+1998-08-07 01:41:29  Gareth Jones  <gdj1@gdjones.demon.co.uk>
 
-       * gnus.el: Pterodactyl Gnus v0.73 is released.
+       * gnus-score.el (gnus-summary-increase-score): Don't downcase
+       before lookin in char-to-header.
 
-1999-01-23 11:38:36  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-08-07 01:33:22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * nnmail.el (nnmail-spool-file): Changed to use mail-source.
-       (nnmail-crash-box, nnmail-use-procmail, nnmail-procmail-directory,
-       nnmail-procmail-suffix, nnmail-resplit-incoming): Removed.
-       (nnmail-movemail-program): Removed.
-       (nnmail-movemail-args): Removed.
-       (nnmail-pop-password-required): Ditto.
-       (nnmail-tmp-directory): Ditto.
-       (nnmail-delete-incoming): Removed.
-       (nnmail-pop-password, nnmail-moved-inboxes,
-       nnmail-internal-password, nnmail-move-inbox): Removed.
-       (nnmail-read-passwd): Ditto.
-       (nnmail-get-spool-files): Removed.
-       (nnmail-resplit-incoming): Reinstated.
+       * gnus.el (gnus-predefined-server-alist): Too many parentheses.
 
-       * mail-source.el: New file.
+1998-08-06 11:20:08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-01-23 09:08:31  James H. Cloos, Jr.  <cloos@jhcloos.com>
+       * gnus.el (gnus-continuum-version): Include quassia.
 
-       * gnus-art.el (gnus-article-mode-map): Bind backspace.
+       * gnus-sum.el (gnus-data-enter-list): Check before entering list.
 
-1999-01-23 09:05:04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-08-06 11:13:56  Francois Felix Ingrand  <felix@dial.oleane.com>
 
-       * gnus-art.el (article-make-date-line): Fix iso8601 display.
+       * gnus-salt.el (gnus-generate-vertical-tree): Don't go too far to
+       the left.
 
-1999-01-20 02:53:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Thu Aug  6 07:58:17 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-art.el (gnus-treat-display-smileys): Check xpm.
+       * gnus.el: Gnus v5.6.29 is released.
 
-       * gnus-picon.el (gnus-group-display-picons): Goto body.
+1998-08-06 07:10:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus.el: Indented all functions; broke long lines; changed all
-       instances of illegal/legal to invalid/valid.  Yes, I'm bored.
+       * gnus-agent.el (gnus-agent-expire): Check whether (caar
+       gnus-agent-article-alist) is nil.
 
-Wed Jan 20 00:50:53 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus.el (gnus-read-method): Allow selecting predefined servers.
 
-       * gnus.el: Pterodactyl Gnus v0.72 is released.
+       * gnus-topic.el (gnus-topic-update-topic-line): Compute right
+       number when inserting missing topic lines.
 
-1999-01-20 01:39:48  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-start.el (gnus-get-unread-articles): Check that the group
+       is alive.
 
-       * gnus.el: Cleaned up trailing whitespace.
+       * gnus-score.el (gnus-score-load-score-alist): Better error
+       messaging.
 
-       * mm-util.el (mm-read-charset): Work.
+Tue Aug  4 09:42:31 1998  Kurt Swanson  <ksw@dna.lth.se>
 
-1999-01-17  Matt Armstrong  <mattdav+matt@best.com>
+       * gnus-salt.el (gnus-pick-mouse-pick-region): Fix picking bug due
+       to use of gnus-read-event-char.
 
-       * gnus-score.el (gnus-score-find-bnews): Match regexp on the
-       nnheader-translate-file-chars'd group name.
+1998-07-28  Dave Love  <d.love@dl.ac.uk>
 
-1999-01-20 01:30:30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-group.el (gnus-group-fetch-faq): Don't mung dots in group
+       name.
 
-       * message.el (message-encode-message-body): Fold case.
+1998-07-27  Dave Love  <d.love@dl.ac.uk>
 
-1999-01-20 01:28:16  Alexei V. Barantsev  <barancev@ispras.ru>
+       * gnus-topic.el (gnus-topic-mode-map): Provide Emacs tty
+       alternatives to [tab], [(meta tab)].
 
-       * gnus-xmas.el (gnus-xmas-modeline-glyph): Backquote.
+1998-08-06 04:41:38  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-01-20 00:46:15  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-start.el (gnus-startup-file-coding-system): New variable.
+       (gnus-read-init-file): Use it.
+       (gnus-read-newsrc-el-file): Ditto.
 
-       * mailcap.el (mailcap-add): New function.
+       * gnus-sum.el (gnus-thread-ignore-subject): Changed default.
 
-1999-01-18 09:40:37  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-08-06 04:38:02  Richard Stallman  <rms@gnu.org>
 
-       * gnus-art.el (article-goto-body-goes-to-point-min-p): New variable.
-       (article-goto-body): Use it.
-       (gnus-treat-article): Ditto.
+       * message.el (sendmail): Required.
 
-       * gnus-agent.el (gnus-agent-get-undownloaded-list): Remove the
-       downloaded articles from the downloadeble list.
+1998-08-06 02:11:37  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-01-16 17:31:08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-auto-select-same): Dix fix.
 
-       * message.el (message-encode-message-body): Bind
-       mail-parse-charset.
+1998-08-04  Mike McEwan  <mike@lotusland.demon.co.uk>
 
-       * mm-util.el (mm-charset-synonym-alist): New variable.
-       (mm-charset-to-coding-system): Use it.
-       (mm-charset-coding-system-alist): Removed.
-       (mm-charset-to-coding-system): Don't use it.
-       (mm-find-charset-region): Use mail-parse-charset.
+       * gnus-sum.el (gnus-select-newsgroup): Set
+       `gnus-newsgroup-unselected' when selecting specific articles via
+       SELECT-ARTICLE - there may be more headers to fetch if
+       `gnus-fetch-old-headers' is non-nil.
+       (gnus-summary-read-group): pass SELECT-ARTICLE to
+       `gnus-summary-read-group-1' and reset to nil when going to next group.
+       (gnus-summary-read-group): Change `select-article' to
+       `select-articles' for consistency.
 
-       * gnus-art.el (gnus-treatment-function-alist): Use
-       gnus-article-display-picons.
-       (gnus-treat-display-xface): Only do if we have xface feature.
-       (gnus-part-display-hook): New function.
-       (gnus-treat-article): Use it.
-       (gnus-treat-article): Use gnus-visual.
+Tue Aug  4 05:25:01 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-msg.el (gnus-setup-posting-charset): Check elem.
+       * gnus.el: Gnus v5.6.28 is released.
 
-       * gnus-art.el (gnus-mm-display-part): Fix the MIME button after
-       displaying.
+1998-08-03 22:00:25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * mm-decode.el (mm-insert-part): Use insert-buffer-substring.
+       * nndoc.el (nndoc-set-delims): Removed article-end.
+       (nndoc-dissect-buffer): Use eobp.
 
-       * gnus-score.el (gnus-score-find-bnews): Protect against invalid
-       regexp file names.
+1998-08-03 19:59:36  Trung Tran-Duc  <trung.tranduc@prague.ixoskillspam.cz>
 
-Sat Jan 16 03:15:57 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * nntp.el (nntp-open-connection): Bind coding-system-for-write.
 
-       * gnus.el: Pterodactyl Gnus v0.71 is released.
+1998-07-31 16:45:36  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-01-16 00:13:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-group.el (gnus-group-read-ephemeral-group): Make the server
+       unique.
 
-       * mm-view.el (mm-inline-image): Don't add a dot.
+1998-07-28  François Pinard  <pinard@iro.umontreal.ca>
 
-       * gnus-art.el (gnus-treat-article): New function.
+       * gnus-uu.el (gnus-uu-reginize-string): Consider the number of
+       parts as part of the fixed subject, instead of a wild quantity.
 
-       * gnus.el (gnus-article-display-hook): Removed.
+1998-07-30 21:47:23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-art.el (gnus-article-treat-custom): New variable.
+       * gnus-cache.el (gnus-summary-insert-cached-articles): Sort
+       articles.
 
-       * gnus-start.el (gnus-ignored-newsgroups-has-to-p): Removed.
+       * nndir.el (nndir): Use nnml functions.
 
-       * gnus-msg.el (gnus-setup-posting-charset): Allow variables and
-       functions.
+Mon Jul 27 03:26:00 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * message.el (message-posting-charset): New variable.
-       (message-send-mail): Use it.
+       * gnus.el: Gnus v5.6.27 is released.
 
-       * gnus-msg.el (gnus-group-posting-charset-alist): Moved here.
-       (gnus-setup-posting-charset): New function.
-       (gnus-setup-message): Use it.
+1998-07-27 02:27:11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * message.el (message-encode-message-body): Just look for
-       Content-Type before inserting a new one.
+       * gnus-topic.el (gnus-topic-update-unreads): New function.
 
-1999-01-15 23:08:47  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-summary-limit): Update mode line.
 
-       * rfc2047.el (rfc2047-default-charset): Removed.
+       * gnus-soup.el (gnus-soup-add-article): Update mode line.
 
-       * mail-prsvr.el: New file.
-       (mail-parse-charset): New variable.
+       * gnus-group.el (gnus-group-make-menu-bar): Bug.
 
-       * gnus-sum.el (gnus-newsgroup-charset): Changed name.
-       Changed name.
+       * gnus-art.el (gnus-article-make-menu-bar): Menu.
 
-       * gnus.el (gnus-charset): New group.
+       * gnus-sum.el (gnus-summary-make-menu-bar): Bug reports.
 
-       * nnmail.el (nnmail-pathname-coding-system): Default to binary.
+       * gnus-topic.el (gnus-topic-mode-map): h -> H.
 
-       * gnus-sum.el (gnus-default-charset): Default to nil.
-       (gnus-newsgroup-iso-8859-1-forced-regexp): Removed.
-       (gnus-newsgroup-iso-8859-1-forced): Removed.
+1998-07-19 16:59  Simon Josefsson  <jas@pdc.kth.se>
 
-       * mm-util.el (mm-known-charsets): Removed.
-       (mm-default-coding-system): Removed.
-       (mm-default-charset): Removed.
-       (mm-read-charset): New function.
+       * gnus-util.el (gnus-netrc-syntax-table): @ is whitespace
 
-       * message.el (message-default-charset): Removed.
+1998-07-17  Gordon Matzigkeit  <gord@fig.org>
 
-       * rfc2047.el (rfc2047-default-charset): Default to nil.
+       * gnus-uu.el (gnus-uu-reginize-string): Simplify by looking
+       from back to front for part numbers, rather than skipping
+       leading ``version numbers.''
 
-       * mm-util.el (mm-charset-iso-8859-1-forced): Removed.
+       (gnus-uu-part-number): Make consistent with
+       gnus-uu-reginize-string.
 
-Fri Jan 15 20:50:38 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+1998-07-26 19:01:58  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus.el: Pterodactyl Gnus v0.70 is released.
+       * gnus-art.el (gnus-request-article-this-buffer): Pass along
+       header.
 
-1999-01-15 00:06:04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-summary-update-article): Don't pass along
+       iheader to regeneration routine.
 
-       * mm-decode.el (mm-save-part): Use mm-get-part.
-       (mm-insert-part): New function.
-       (mm-get-part): Use it.
-       (mm-get-image): Ditto.
-       (mm-display-external): Ditto.
+1998-07-27  KOSEKI Yoshinori  <kose@yk.NetLaputa.ne.jp>
 
-       * mm-view.el (mm-inline-text): Ditto.
+       * nnmail.el (nnmail-move-inbox): Clear nnmail-internal-password,
+       when supplied Password is incorrect.
 
-       * gnus-move.el (gnus-move-group-to-server): Protect against nil
-       ranges.
+Sat Jul 25 19:31:36 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * mm-decode.el (mm-display-external): Save the buffer.
-       (mm-remove-part): Kill it.
+       * gnus.el: Gnus v5.6.26 is released.
 
-       * qp.el (quoted-printable-decode-region): Do the right thing at eobp.
+1998-07-25 14:53:24  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * nnagent.el (nnagent-request-set-mark): Defined stub.
+       * gnus-salt.el (gnus-pick-mouse-pick-region): Use
+       gnus-read-event-char.
 
-1999-01-14 23:05:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Jul 25 02:43:35 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-score.el (gnus-score-load-score-alist): Bind
-       coding-system-for-read.
+       * gnus.el: Gnus v5.6.25 is released.
 
-       * gnus-sum.el (gnus-summary-exit): Do adaptive scoring before
-       prepare-exit-hook.
+1998-07-25 00:03:24  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * mm-view.el (mm-setup-w3): Require w3.
+       * gnus-group.el (gnus-group-read-ephemeral-group): Ditto.
 
-1999-01-13  Kiyokazu SUTO  <suto@merry.xmath.ous.ac.jp>
+       * gnus-sum.el (gnus-summary-read-group-1): Ditto.
 
-       * lisp/nnspool.el (nnspool-retrieve-headers): Protect against empty
-       body.
+       * gnus-group.el (gnus-group-read-group): Accept article list.
 
-1999-01-14 21:17:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-07-24 14:35:02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * mm-encode.el: Ditto.
+       * gnus-msg.el (gnus-configure-posting-styles): Quote some.
 
-       * mm-bodies.el (mm-decode-content-transfer-encoding): Message the
-       error.
+       * message.el (message-ignored-supersedes-headers): Added X-Trace
+       and X-Complaints-To.
 
-       * mailcap.el (mailcap-mime-data): SAFER ps.
+       * nnmail.el (gnus-util): Required.
 
-       * message.el (message-encode-message-body): Always insert a
-       Content-Type header.
+1998-07-21 23:03:13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * mm-decode.el (mm-inline-media-tests): Default all text/* to be
-       shown inline.
+       * gnus.el (gnus-news-group-p): Bogosity in params.
 
-       * mm-view.el (mm-inline-text): Handle all sorts of text.
+1998-07-21 16:14:32  Robert Bihlmeyer  <robbe@orcus.priv.at>
 
-       * mailcap.el (mailcap-mime-data): non-viewer for viewers that
-       don't view.
+       * gnus-util.el (gnus-globalify-regexp): New function.
 
-       * mm-decode.el (mm-display-external): Use it.
+1998-07-18 21:49:01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-art.el (gnus-visible-headers): Added bcc, gcc, fcc.
+       * gnus-sum.el (gnus-list-of-unread-articles): Peel off articles
+       outside active range.
 
-       * mm-decode.el (mm-save-part): Removed double code.
+1998-07-15 10:47:39  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-01-12  Dave Love  <fx@gnu.org>
+       * nnvirtual.el (nnvirtual-request-type): Handle non-numerical
+       articles.
 
-       * mm-decode.el (mm-save-part): Avoid doubly-compressed
-       application/octet-stream .gz & al files with jka-compr.
+       * gnus.el (gnus-news-group-p): Do something sensible with negative
+       articlies.
 
-1999-01-12  Dave Love  <fx@gnu.org>
+Wed Jul 15 10:27:05 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-ems.el (gnus-down-mouse-3): New variable.
-       * gnus-art.el (gnus-mime-button-map): Use it.
-       (gnus-mime-button-menu): Set the clicked-on buffer initially.
+       * gnus-salt.el (gnus-tree-minimize-window): Allow numbers.
 
-1999-01-13 19:41:57  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Wed Jul 15 10:25:29 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mailcap.el (mailcap-mime-data): Added ImageMagic and ee.
+       * gnus-agent.el (gnus-agent-expire): Ignored ticks.
 
-1999-01-12 17:34:43  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Wed Jul 15 10:15:28 1998  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
 
-       * gnus-picon.el (gnus-picons-kill-buffer): Don't kill article
-       buffers.
+       * nntp.el (nntp-send-authinfo): Message better and stuff.
 
-       * gnus-sum.el (gnus-summary-exit): Destroy all MIME.
+Wed Jul 15 10:10:07 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-cache.el (gnus-cache-read-active): Reversed check.
+       * gnus.el (gnus-message-archive-group): Allow sexp.
 
-1999-01-12 17:18:25  Matt Armstrong  <matta@geoworks.com>
+Wed Jul 15 09:56:47 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mml.el (mml-parameter-string): Strip directory component.
+       * gnus-sum.el (gnus-select-newsgroup): Accept select-articles
+       para,
 
-1999-01-12 17:02:58  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-07-13  Mike McEwan  <mike@lotusland.demon.co.uk>
 
-       * gnus.el (gnus-use-demon): Removed.
+       * gnus-sum.el (gnus-select-newsgroup): Don't call the Agent to
+       mark articles as read until *all* headers have been retrieved.
 
-1999-01-12 05:53:23  Katsumi Yamaoka  <yamaoka@jpl.org>
+Wed Jul 15 09:06:18 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * nnmail.el (nnmail-article-group): Don't infloop.
+       * nndir.el (nndir): Use nnml to request article.
 
-1999-01-11  Colin Rafferty  <colin@xemacs.org>
+1998-07-11  SL Baur  <steve@altair.xemacs.org>
 
-       * gnus-art.el (article-update-date-lapsed): Made it work with
-       picons, and make it update on all visible frames.
-       (article-date-ut): Get summary-buffer's current-headers.
+       * gnus-topic.el (gnus-topic-mode-map): Use modern key syntax.
 
-1999-01-12 07:20:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Jul 12 04:01:22 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-picon.el (gnus-picons-setup-buffer): Don't set major mode.
-       (gnus-picons-setup-p): New variable.
+       * gnus-score.el (gnus-current-home-score-file): New function.
 
-1999-01-11 02:13:12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-07-11  Mike McEwan  <mike@lotusland.demon.co.uk>
 
-       * nnmail.el (nnmail-split-header-length-limit): Lowered to 512.
+       * gnus-agent.el (gnus-agent-fetch-headers): Note last fetched
+       headers per sesion to aid expiry in `headers only' groups.
 
-1999-01-04 12:58:13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-agent.el (gnus-agent-expire): Update group info to add
+       expired articles to list of read articles and prevent
+       re-fetching.
 
-       * gnus-sum.el (gnus-summary-exit-no-update): Don't use run-hooks.
-       (gnus-summary-exit-no-update): Use mapcar.
+1998-07-12  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1999-01-02 14:36:32  Simon Josefsson  <jas@pdc.kth.se>
+       * nnmail.el (nnmail-active-file-coding-system): Changed to
+       binary.
 
-       * gnus-agent.el (gnus-category-write): Make directory.
+Sun Jul 12 03:16:18 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-26 19:39:31 Simon Josefsson <jas@pdc.kth.se>
+       * gnus-score.el (gnus-score-load-file): Specify which alist to
+       decay.
 
-       * gnus-sum.el (gnus-update-read-articles):
-       (gnus-update-marks): Request backend update of mark.
+1998-07-12  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1999-01-03 15:29:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-start.el (gnus-startup-file-coding-system): New variable.
+       (gnus-read-newsrc-el-file): Use it.
 
-       * mm-bodies.el (mm-body-encoding): Use mm-find.
+Sat Jul 11 03:03:53 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1999-01-03 15:28:27  Kim-Minh Kaplan  <kmkaplan@western.fr>
+       * gnus.el: Gnus v5.6.24 is released.
 
-       * gnus-picon.el (gnus-article-display-picons): Fix.
+Fri Jul 10 04:23:24 1998  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
 
-Sun Jan  3 13:32:02 1999  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-util.el (gnus-parse-netrc): Allow "default" values.
 
-       * gnus.el: Pterodactyl Gnus v0.69 is released.
+Fri Jul 10 04:15:35 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1999-01-03 06:45:10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nntp.el (nntp-server-opened-hook): Doc change.
 
-       * gnus-picon.el (gnus-picons-setup-buffer): Run the hook.
+Fri Jul 10 03:03:48 1998  François Pinard  <pinard@iro.umontreal.ca>
 
-       * gnus-agent.el (gnus-agent-remove-group): New command and
+       * gnus-sum.el (gnus-summary-respool-trace): New command and
        keystroke.
 
-       * rfc2047.el (rfc2047-decode-region): Check for us-ascii.
-
-1999-01-02 14:12:41  Simon Josefsson  <jas@pdc.kth.se>
-
-       * gnus-agent.el (gnus-agent-write-servers): Make directory.
-
-1998-12-26 02:38:01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mm-view.el (mm-inline-text): Bind current id.
-
-       * mm-decode.el (mm-handle-id): New macro.
-       (mm-make-handle): Accept id.
-       (mm-dissect-singlepart): Use it.
-
-1998-12-23  Matt Pharr  <mmp@graphics.stanford.edu>
-
-      * message.el (message-cite-original-without-signature): Use
-      message-signature-separator when searching for signature in
-      message-cite-original-without-signature.
-
-1998-12-24 16:25:38  Simon Josefsson  <jas@pdc.kth.se>
-
-       * gnus.el (gnus-server-to-method): Check named methods.
-
-1998-12-24 03:27:02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Fri Jul 10 02:18:01 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-view.el (mm-view-message): Goto point-min.
+       * gnus-util.el (gnus-prin1): Bind print-escape-multibyte to nil.
 
-       * nnmail.el (nnmail-article-group): Don't delete lines, only
-       shorten them.
+Mon Jul  6 01:02:59 1998  Simon Josefsson  <jas@pdc.kth.se>
 
-       * gnus-msg.el (gnus-configure-posting-styles): Also do nil
-       values.
+       * gnus-range.el (gnus-sorted-complement): Fix comments.
 
-       * nnheader.el (nnheader-temp-directory): New variable.
-       (nnheader-temp-directory): Removed.
+Thu Jul  2 11:16:14 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-12-22  Jack Vinson  <jvinson@chevax.ecs.umass.edu>
+       * gnus-sum.el (gnus-summary-iterate): New macro.
 
-       * mailcap.el (mailcap-parse-mailcaps): Add "~/.mailcaps" to the
-       list of files to check for mailcap entries under windows-nt.
+       * message.el (message-pop-to-buffer): Clone locals.
 
-1998-12-24 03:02:15  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-msg.el (gnus-posting-styles): Reinstated.
+       (gnus-posting-style-alist): Ditto.
 
-       * gnus-art.el (gnus-article-maybe-hide-headers): Check whether the
-       summary buffer exists.
+Wed Jul  1 18:02:31 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-12-22  Aaron M. Ucko  <amu@mit.edu>
+       * gnus-int.el (gnus-get-function): Set funct to nil.
 
-       * nnsoup.el (nnsoup-store-reply): Remove code to deal with
-       irrelevant Sun sendmail bug.
-       (nnsoup-store-reply): Stop mucking with mail-header-separator.
+1998-07-01 16:57:38  Simon Josefsson  <jas@pdc.kth.se>
 
-       * message.el (message-send-news): Bind mail-header-separator to
-       "" when asking backend to post.
+       * gnus-int.el (gnus-get-function): returned non-nil when
+        function wasn't bound, if noerror=t
 
-1998-12-22  Karl Kleinpaste  <karl@justresearch.com>
+Wed Jul  1 17:30:41 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-uu.el (mm-dissect-disposition): New variable.
-       (mm-uu-dissect): Use it.
+       * gnus-topic.el (gnus-topic-mode-map): Bind TAB and M-TAB.
 
-1998-12-21 21:34:22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-build-sparse-threads): Make sure no dates are
+       nil.
+       (gnus-summary-limit-mark-excluded-as-read): Use the intersection.
 
-       * mm-view.el (mm-inline-text): Bind url-current-object.
+       * gnus-msg.el (gnus-setup-message): Clone all local variables from
+       the summary buffer.
 
-1998-12-06 03:05:41  Simon Josefsson  <jas@pdc.kth.se>
+Wed Jul  1 14:03:52 1998  Richard Stallman  <rms@santafe.edu>
 
-       * gnus-range.el (gnus-remove-from-range): Rewrite.
+       * message.el (message-cite-original): Use mail-citation-hook.
+       (message-cite-function): Ditto.
 
-1998-12-09  SL Baur  <steve@altair.xemacs.org>
+Wed Jul  1 14:00:53 1998  Rajappa Iyer  <rsi@lucent.com>
 
-       * gnus-picon.el (annotations): Remove bogus require 'xpm.
+       * gnus-salt.el (gnus-pick-mode-map): Changed keymap.
 
-1998-12-18  Hrvoje Niksic  <hniksic@srce.hr>
+Wed Jul  1 13:33:26 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * message.el (message-encode-message-body): Insert `MIME-Version'
-       instead of `Mime-Version'.
+       * gnus.el: Gnus v5.6.23 is released.
 
-1998-12-04  Hrvoje Niksic  <hniksic@srce.hr>
+Wed Jul  1 12:52:32 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.el (message-insert-mime-part): Add the attachment
-       disposition.
-       (message-insert-mime-part): Make TYPE and DESCRIPTION optional.
-       (message-mime-query-type): New function.
-       (message-mime-query-description): Ditto.
-       (message-mime-query-file): Ditto.
-       (message-insert-mime-part): Use them.
-       (message-mime-insert-external): Use the new stuff.
+       * nntp.el (nntp-record-command): Give more precise time info.
+       (nntp-next-result-arrived-p): Look for the end of error lines.
 
-1998-12-19 23:02:26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Wed Jul  1 12:24:06 1998  François Pinard  <pinard@iro.umontreal.ca>
 
-       * nnmail.el (nnmail-split-header-length-limit): New variable.
+       * gnus-util.el (gnus-delete-if): Would do the opposite.
 
-       * mm-decode.el (mm-dissect-buffer): Check syntax.
+Wed Jul  1 01:53:31 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * rfc2231.el (rfc2231-parse-string): Remove check for syntax.
+       * gnus-sum.el (gnus-build-sparse-threads): Didn't work at all.
 
-       * rfc2047.el (rfc2047-encodable-p): Use mm-find-charset-region.
-       (rfc2047-dissect-region): Ditto.
+Tue Jun 30 15:56:54 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-12-17 18:36:43  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nntp.el (nntp-send-authinfo): Store the user name.
+       (nntp-authinfo-user): New variable.
 
-       * mm-view.el (mm-view-message): Decode charset.
+       * gnus-sum.el (gnus-summary-limit-mark-excluded-as-read): Would
+       mark some articles as unread.
 
-1998-12-16 16:01:22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-agent.el (gnus-agent-expire): Don't sort lines.
 
-       * rfc2231.el (rfc2231-parse-string): Ignore syntactically invalid
-       CT headers.
+Tue Jun 30 15:56:31 1998  Mike McEwan  <mike@lotusland.demon.co.uk>
 
-Wed Dec 16 01:44:40 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-agent.el (gnus-agent-expire): Use a fresh hash table.
 
-       * mm-bodies.el (mm-decode-content-transfer-encoding): Use
-       mm-uu-*-function.
-       * mm-uu.el (mm-uu-dissect): Use x-uuencode.
+Mon Jun 29 22:49:49 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1998-12-16 10:20:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el: Gnus v5.6.22 is released.
 
-       * message.el (message-send-mail): Do MML first.
-       (message-send-news): Ditto.
+Mon Jun 29 21:22:46 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-12-15 20:57:18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-salt.el (gnus-pick-mode-map): Remove gnus-mouse.
 
-       * gnus-picon.el (gnus-picons-face): New face.
-       (gnus-picons-try-face): Use it.
+       * gnus-sum.el (gnus-dependencies-add-header): `debug' left in.
+       Eh.  Eh.
 
-Tue Dec 15 19:17:43 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-salt.el (gnus-summary-pick-line-format): Missing %.-
 
-       * gnus.el: Pterodactyl Gnus v0.68 is released.
+       * gnus-topic.el (gnus-topic-rename): Fix error message.
 
-Tue Dec 15 18:28:24 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Sun Jun 28 14:32:08 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.67 is released.
+       * gnus-spec.el (gnus-face-face-function): Double quoting removed.
 
-Tue Dec 15 17:31:44 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Sun Jun 28 09:54:52 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.66 is released.
+       * gnus.el: Gnus v5.6.21 is released.
 
-1998-12-13 11:00:43  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Jun 28 08:51:39 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-insert-mime-button): Decode description.
+       * gnus-sum.el (gnus-summary-edit-article-done): Copy the buffer to
+       a temp buffer before replacing.
 
-Sat Dec  5 16:50:49 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-msg.el (gnus-post-news): Treat broken-reply-to in
+       followups.
 
-       * gnus-art.el (article-decode-encoded-words): Rollback to 0.55.
-       (gnus-decode-header-methods): Ditto.
-       (gnus-decode-with-mail-decode-encoded-word-region): Ditto.
+       * gnus-sum.el (gnus-summary-goto-subject): Position point.
 
-1998-12-13 10:04:39  Lloyd Zusman  <ljz@asfast.com>
+Sat Jun 27 09:19:20 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-xmas.el (gnus-xmas-summary-recenter): Allow numbers.
+       * gnus-demon.el (gnus-util): Required.
 
-1998-12-13 09:32:38  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-score.el (gnus-score-body): Message fix.
 
-       * mml.el (mml-insert-mime-headers): Encode description.
+       * gnus-group.el (gnus-group-highlight-line): Use it.
 
-       * nnfolder.el (nnfolder-request-expire-articles): Go to the date
-       line.
-
-       * gnus-sum.el (gnus-default-charset): Doc fix.
-
-Wed Dec  9 15:18:39 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-decode.el (mm-display-part): Forward a line.
-
-Wed Dec  9 13:30:29 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-util.el (mm-running-ntemacs): New variable.
-       (mm-text-coding-system): Ditto.
-       * nnmail.el (nnmail-incoming-coding-system): Ditto.
-       (nnmail-split-incoming): Use nnmail-incoming-coding-system.
-
-1998-12-13 08:52:45  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-picon.el (gnus-picons-network-display-internal): Don't set
-       buffer.
-
-       * message.el (message-insert-headers): New command and keystroke.
-
-1998-12-07 23:42:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mm-decode.el (mm-inline-media-tests): Recognize x-xbitmap.
-       (mm-get-image): Ditto.
-
-       * mm-bodies.el (mm-decode-content-transfer-encoding): Only for
-       base64, uudecode and binhex.
-
-Sun Dec  6 21:58:31 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-bodies.el (mm-decode-content-transfer-encoding): Replace CRLF
-       in text/plain.
-       * mm-uu.el (mm-uu-dissect): Use inline.
-
-1998-12-07 23:19:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mm-view.el (mm-view-message): New function.
-
-       * mm-encode.el (mm-content-transfer-encoding-defaults): Changed to
-       qp.
-
-1998-12-07  Karl Kleinpaste  <karl@justresearch.com>
+       * gnus-util.el
+       (gnus-put-text-properties-excluding-characters-with-faces): New
+       function.
 
-       * mm-encode.el (mm-content-transfer-encoding-defaults): Add an
-       entry for message/rfc822 as 8bit.
+Sat Jun 27 08:56:08 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1998-12-07 23:16:54  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el: Gnus v5.6.20 is released.
 
-       * mailcap.el (mailcap-mime-extensions): Add patch.
+Sat Jun 27 08:49:51 1998  Arne Georg Gleditsch  <argggh@ifi.uio.no>
 
-1998-12-05  Dale Hagglund  <rdh@best.com>
+       * gnus-sum.el (gnus-parent-headers): Check better for headers.
 
-       * gnus-sum.el (gnus-summary-display-buttonized): Use prefix
-       argument to force all multipart/* to look like multipart/mixed.
+Sat Jun 27 08:45:09 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-mime-display-multipart-as-mixed): New
-       variable.
-       (gnus-mime-display-part): Use it.
+       * message.el (message-check-news-body-syntax): Buggy checksum
+       check.
 
-1998-12-07 22:46:37  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Jun 27 07:59:22 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-draft.el (gnus-draft-send): Only disable checks for
-       non-interactive use.
-       (gnus-draft-send-message): Use it.
+       * gnus.el: Gnus v5.6.19 is released.
 
-Sun Dec  6 19:36:53 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Sat Jun 27 07:50:50 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.65 is released.
+       * gnus.el: Gnus v5.6.18 is released.
 
-1998-12-06 20:11:02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Jun 27 03:18:57 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-article-prepare-display): Don't init w3.
+       * gnus-soup.el (gnus-soup-save-areas): Made interactive.
 
-       * mm-view.el (mm-inline-text): Bind url-standalone-mode here.
+       * nnfolder.el (nnfolder-request-replace-article): Check all X-From
+       headers.
 
-Sat Dec  5 18:35:42 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-sum.el (gnus-update-marks): Don't nix out cache lists.
 
-       * gnus.el: Pterodactyl Gnus v0.64 is released.
+       * nngateway.el (nngateway-mail2news-header-transformation):
+       Changed semantics.
 
-1998-12-05 18:51:13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-check-news-body-syntax): Don't look at
+       buffer size to see whether text has been added.
 
-       * mm-view.el (mm-setup-w3): Don't load.
+Fri Jun 26 15:46:05 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-msg.el (gnus-setup-message): Set group name.
-       (gnus-group-mail): Avoid leaking local vars.
+       * gnus.el: Gnus v5.6.16 is released.
 
-       * message.el (message-attach-file): Renamed.
-       (message-mime-attach-file): Renamed again.
+Fri Jun 26 15:36:25 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-12-05  Hrvoje Niksic  <hniksic@srce.hr>
+       * gnus-util.el (gnus-delete-assq): Removed.
+       (gnus-delete-assoc): Ditto.
 
-       * gnus-art.el (article-decode-encoded-words): Bind
-       rfc2047-default-charset here.
+       * gnus.el: Use throughout.
 
-       * gnus-art.el (gnus-insert-mime-button): Nix slashes in file name.
+       * gnus-util.el (gnus-pull): New macro.
 
-1998-12-05 18:33:27  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-06-26  Simon Josefsson  <jas@pdc.kth.se>
 
-       * gnus-picon.el (gnus-picons-setup-buffer): Run picons hook.
-       (gnus-picons-setup-hook): New hook.
+       * gnus-sum.el (gnus-get-newsgroup-headers): parse Chars: headers
 
-1998-12-05  Per Abrahamsen  <abraham@dina.kvl.dk>
+Fri Jun 26 13:45:24 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mailcap.el (mailcap-mime-data): Remove "*" from documentation
-       string.
-       (mailcap-mime-extensions): Ditto.  Made first sentense fit a
-       line.
+       * gnus-sum.el (gnus-update-marks): Use it.
 
-1998-12-05 17:11:04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-util.el (gnus-delete-alist): New function.
 
-       * gnus-art.el (gnus-article-prepare-display): Setup w3.
-       (gnus-mime-view-part): Ditto.
-       (gnus-mime-inline-part): Dotii.
-       (gnus-mime-externalize-part): Daddo.
-       (gnus-mime-internalize-part): Tutti frutti.
-       (gnus-widget-press-button): Da da do.
+       * gnus-sum.el (gnus-update-marks): Don't save list of cached
+       articles.
 
-       * mm-view.el (mm-setup-w3): Require url-vars.
+       * message.el (message-mode-menu): Include kill-buffer.
 
-Fri Dec  4 12:13:12 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * nnmail.el (nnmail-purge-split-history): Use it.
 
-       * message.el (message-draft-coding-system): Fix for XEmacs-NT.
-       * mm-util.el (mm-find-charset-region): Ditto.
+       * gnus-util.el (gnus-delete-if): New function.
 
-1998-12-05 16:30:01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnmail.el (nnmail-article-group): Use gnus-remove-duplicates.
 
-       * message.el (message-send): Don't encode here.
-       (message-send-mail): But here.
-       (message-send-news): And here.
+Fri Jun 26 13:45:09 1998  Richard Stallman  <rms@santafe.edu>
 
-1998-12-04 15:29:02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-util.el (gnus-remove-duplicates): New function.
 
-       * gnus-msg.el (gnus-message-insert-stylings): Don't insert twice.
+Fri Jun 26 13:30:42 1998  Kevin Christian  <Kevin.Christian@symbios.com>
 
-Fri Dec  4 04:09:15 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-score.el (gnus-score-string): Do updating of scores after
+       fuzzies.
 
-       * gnus.el: Pterodactyl Gnus v0.63 is released.
+Fri Jun 26 07:26:03 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-12-04 04:59:20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-mode): Don't do the intern dance.
 
-       * mml.el (mml-base-boundary): Shorten.
+Fri Jun 26 07:13:49 1998  Richard Stallman  <rms@santafe.edu>
 
-       * message.el (message-insert-mime-part): Use default.
+       * message.el (message-mode): Adaptive fill changes.
 
-       * gnus-art.el (gnus-insert-mime-button): Bind gnus-tmp-type-long.
+Fri Jun 26 04:29:44 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-12-03  Per Abrahamsen  <abraham@dina.kvl.dk>
+       * gnus-sum.el (gnus-summary-mode-line-format-alist): Allow article
+       score.
 
-       * gnus-art.el (gnus-mime-display-alternative): Use (*) for radio
-       buttons, not [*].
+       * gnus-score.el (gnus-score-load-file): Would ignore all score
+       files without un-advanced rules.
 
-1998-12-04  Hrvoje Niksic  <hniksic@srce.hr>
+       * gnus-ems.el ((fboundp 'split-string)): Use it where it exists.
 
-       * gnus-art.el (gnus-insert-mime-button): Do proper help-echo.
+Fri Jun 26 04:23:12 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1998-12-04 04:48:37  Hrvoje Niksic  <hniksic@srce.hr>
+       * gnus.el: Gnus v5.6.15 is released.
 
-       * gnus-art.el (gnus-insert-mime-button): Fix.
+Fri Jun 26 03:39:32 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-12-03  Hrvoje Niksic  <hniksic@srce.hr>
+       * nnfolder.el (nnfolder-request-replace-article): Delete old
+       delimiter.
 
-       * message.el (message-insert-mime-part): Nicify prompts.
-       (message-insert-mime-part): Really delete duplicates.
-       (message-insert-mime-part): Check against common errors.
-       (message-insert-mime-part): Fix docstring.
+       * gnus-msg.el (gnus-summary-reply): Use it.
 
-1998-12-04 04:41:58  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-reply): Removed parameter.
+       (message-wide-reply): Ditto.
 
-       * gnus-art.el (gnus-mime-internalize-part): Bugged out.
+       * gnus-msg.el (gnus-msg-treat-broken-reply-to): New function.
 
-1998-12-03  Hrvoje Niksic  <hniksic@srce.hr>
+       * gnus-art.el (gnus-check-group-server): New function.
+       (gnus-request-article-this-buffer): Don't try to waken the server
+       before needing to.
 
-       * gnus-art.el (gnus-mime-button-line-format): Nicify.
-       (gnus-insert-mime-button): Modify accordingly.
+Thu Jun 25 10:35:48 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-12-04 01:50:53  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-summary-delete-article): Sort the articles
+       before deleting.
 
-       * gnus-art.el (gnus-display-mime): Set window point.
+       * nngateway.el (nngateway-request-post): Return success.
 
-       * mm-decode.el (mm-display-external): Only decode when not
-       saving.
-       (mm-alternative-precedence): Prefer multiparts.
-       (mm-inline-media-tests): Inline multiparts.
+       * nnheader.el (nnheader-insert-file-contents): Bind more hooks.
 
-       * gnus-picon.el (gnus-picons-next-job-internal): Do bar if asked.
-       Ignore errors when requiring url.
+       * gnus-sum.el (gnus-summary-limit-to-age): Reverse logic.
 
-       * mml.el (mml-quote-region): New command.
+       * gnus-score.el (gnus-summary-score-entry): Removed interactive
+       spec.
+       ((gnus-summary-score-map "V" gnus-summary-mode-map)): Removed
+       keystroke.
 
-       * message.el (message-cite-original): Use it.
-       (message-cite-original-without-signature): Ditto.
+       * gnus-art.el (gnus-article-show-summary): Position point.
 
-Thu Dec  3 12:53:58 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-cache.el (gnus-cache-update-article): Change group first.
 
-       * gnus.el: Pterodactyl Gnus v0.62 is released.
+       * gnus.el (gnus-short-group-name): Collapse more.
 
-1998-12-03 13:38:36  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Thu Jun 25 08:48:06 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-art.el (gnus-mime-view-all-parts): Work with multiparts.
+       * gnus.el: Gnus v5.6.14 is released.
 
-1998-12-03  Hrvoje Niksic  <hniksic@srce.hr>
+Thu Jun 25 05:13:31 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-view.el (mm-inline-text): Use `point-min-marker' and
-       `point-max-marker'.
+       * gnus-sum.el (gnus-rebuild-thread): Accept a line argument.
+       (gnus-rebuild-thread): Would skip around a lot when `P'-ing past
+       the beginning.
 
-1998-12-03 13:22:57  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-msg.el (gnus-post-method): Present all known servers if
+       `C-u 0'.
 
-       * mailcap.el (mailcap-mime-extensions): Use image/xpm for xpms.
+       * gnus-salt.el (gnus-pick-mode-map): Reinstated keymap.
 
-       * gnus-art.el (gnus-mime-display-single): Check for attachment
-       before other tests.
+       * gnus-sum.el (gnus-build-sparse-threads): Put the proper date
+       in.
 
-1998-12-03  Didier Verna  <verna@inf.enst.fr>
+Wed Jun 24 07:52:30 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-msg.el (gnus-configure-posting-styles): find a
-       posting-style entry in the group parameters, if any, and honor it
-       at the end.
+       * gnus.el: Gnus v5.6.13 is released.
 
-1998-12-03 13:03:37  Felix Lee  <flee@teleport.com>
+Wed Jun 24 07:47:04 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * nntp.el (nntp-after-change-function): Fix.
+       * gnus-topic.el (gnus-topic-rename): Disallow "nil".
 
-1998-12-03 12:44:30  Mike McEwan  <mike@lotusland.demon.co.uk>
+Wed Jun 24 07:33:17 1998  Vladimir Alexiev  <vladimir@cs.ualberta.ca>
 
-       * mml.el (mml-generate-mime-1): Insert literally.
+       * nnvirtual.el (nnvirtual-update-xref-header): Regexp-quote group
+       name.
 
-1998-12-03 00:23:17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Wed Jun 24 06:15:27 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mml.el (mml-insert-mime-headers): Removed debug.
+       * gnus-sum.el (gnus-build-sparse-threads): Give all the sparse
+       articles the date of the current child.
 
-1998-12-02 22:22:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-topic.el (gnus-group-topic-parameters): Didn't compute.
 
-       * gnus-sum.el (gnus-summary-show-article): Destroy parts when
-       prefixed.
+Wed Jun 24 03:27:44 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * mm-encode.el (mm-content-transfer-encoding-defaults): Default
-       application/emacs-lisp to 8bit.
+       * gnus.el: Gnus v5.6.12 is released.
 
-1998-12-03  Dale Hagglund  <rdh@best.com>
+Wed Jun 10 11:06:35 1998  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
 
-       * mm-decode.el (mm-quote-arg): Add quoting of '()', '<>', and '|'.
+       * 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.
 
-Wed Dec  2 20:24:27 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+1998-06-09  Sam Steingold  <sds@goems.com>
 
-       * gnus.el: Pterodactyl Gnus v0.61 is released.
+        * gnus-uu.el (gnus-uu-default-view-rules): make sed kill ^M only
+        at the end of line.
 
-1998-12-02 21:12:56  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-06-05  Hrvoje Niksic  <hniksic@srce.hr>
 
-       * mml.el (mml-parse-1): Skipped parts.
-       (mml-insert-mime-headers): Nil is a list.
-       (mml-generate-mime-1): Don't insert literally.
-       (mml-read-tag): Drop text props.
-       (mml-read-part): Ditto.
-       (mml-parse-singlepart-with-multiple-charsets): Ditto.
+       * nnmail.el (nnmail-get-split-group): Don't regexp-quote
+       nnmail-procmail-suffix.
 
-Wed Dec  2 20:07:16 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Wed Jun 24 03:04:05 1998  Kim-Minh Kaplan  <kaplan@sky.fr>
 
-       * gnus.el: Pterodactyl Gnus v0.60 is released.
+       * gnus-sum.el (gnus-build-get-header): Fix obarray.
 
-1998-12-02 20:11:28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Wed Jun 24 02:49:57 1998  Castor  <castor@my-dejanews.com>
 
-       * mml.el (mml-parse-1): Don't throw contents away.
+       * nntp.el (nntp-open-ssl-stream):
 
-1998-12-02  Hrvoje Niksic  <hniksic@srce.hr>
+Wed Jun 24 02:31:46 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mml.el (mml-compute-boundary-1): Regexp-quote the boundary.
+       * gnus-sum.el (gnus-nov-parse-line): Cleaned up.
+       (gnus-build-all-threads): Put things in the wrong obarray.
 
-1998-12-02 18:42:24  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Wed Jun 24 01:43:26 1998  Decklin Foster  <djarum@base.org>
 
-       * mml.el (mml-parse-singlepart-with-multiple-charsets): New
+       * nngateway.el (nngateway-mail2news-header-transformation): New
        function.
-       (mml-parse-1): Use it.
-
-Tue Dec  1 23:04:25 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-decode-with-mail-decode-encoded-word-region):
-       Use gnus-newsgroup-default-charset.
-       (article-decode-encoded-words): Remove charset codes.
-       * gnus-sum.el (gnus-newsgroup-default-charset): Use
-       gnus-default-charset.
-
-1998-12-02 03:14:20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * message.el (message-send-mail): Don't encode here.
-       (message-send-news): Nor here.
-       (message-send): ... but here instead.
-
-       * gnus-picon.el (gnus-picons-display-article-move-p): Changed
-       default to nil.
-       (gnus-article-display-picons): Replace From line.
-       (gnus-group-display-picons): Replace Newsgroups line.
-       (gnus-picons-display-glyph): Set baseline.
-       (gnus-group-display-picons): Piconize the entire Newsgroups line.
-       (gnus-picons-xbm-face): Revert to old, standard colors.
-
-       * message.el (message-fetch-field): Remove text props.
-
-       * gnus-art.el (gnus-article-normalized-header-length): New
-       variable.
-       (article-normalize-headers): New command and keystroke.
-
-       * gnus-picon.el (gnus-picons-xbm-face): Changed colors.
-
-Wed Dec  2 01:43:48 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
-
-       * gnus.el: Pterodactyl Gnus v0.59 is released.
-
-1998-12-02 01:38:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mml.el (mml-insert-mime-headers): Beep at multiple charsets.
-
-       * gnus-art.el (gnus-mime-copy-part): Set buffer-file-name.
-
-1998-11-30  Hrvoje Niksic  <hniksic@srce.hr>
-
-       * mml.el (mml-generate-mime-1): Handle unquoting end-tags.
-
-1998-12-02 00:15:30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mm-decode.el (mm-all-images-fit): New variable.
-       (mm-image-fit-p): Use it.
-
-       * gnus-art.el (gnus-mime-display-single): Use it.
-       (gnus-mime-internalize-part): New command and keystroke.
-
-       * mm-decode.el (mm-user-automatic-external-display): New
-       variable.
-       (mm-automatic-external-display-p): New function.
-
-       * gnus-picon.el (gnus-picons-xbm-face): Default to sensible
-       colors.
-
-1998-12-01 23:52:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus-sum.el (gnus-summary-repair-multipart): Reselect article.
+Wed Jun 24 00:25:45 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-with-article): Work in the original article
-       buffer.
-       (gnus-with-article): Work in read-only groups.
+       * message.el (message-shorten-references): New function.
+       (message-header-format-alist): Use it.
 
-Tue Dec  1 00:15:36 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-start.el (gnus-always-read-dribble-file): Customized.
 
-       * mm-bodies.el (mm-decode-string): Return original string if not
-       decode.
+       * message.el (message-generate-new-buffers): Dox fox.
 
-Mon Nov 30 23:38:02 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+Tue Jun 23 23:58:48 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-uu.el (mm-uu-dissect): Use mm-make-handle.
+       * gnus-topic.el (gnus-topic-prepare-topic): Respect visible topic
+       param.
+       (gnus-topic-hierarchical-parameters): New function.
 
-1998-12-01 01:53:49  François Pinard  <pinard@iro.umontreal.ca>
+1998-06-02  Didier Verna  <verna@inf.enst.fr>
 
-       * nndoc.el (nndoc-mime-parts-type-p): Do related.
+       * gnus-picon.el (gnus-get-buffer-name): use get-buffer-create
+       instead of get-buffer
 
-Tue Dec  1 00:46:20 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Wed Jun  3 04:41:45 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.58 is released.
+       * nnkiboze.el (nnkiboze-request-delete-group): Delete .newsrc
+       file.
 
-1998-11-30  Hrvoje Niksic  <hniksic@srce.hr>
+       * nnmail.el (nnmail-article-group): Nuke looong lines.
 
-       * mm-decode.el (mm-get-image): Return a glyph, not an image
-       specifier.
+       * gnus-art.el (gnus-button-alist): Buggy default.
 
-1998-11-29  Hrvoje Niksic  <hniksic@srce.hr>
+Wed Jun  3 04:03:37 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * rfc2047.el (rfc2047-decode): Bind mm-default-charset.
+       * gnus.el: Gnus v5.6.11 is released.
 
-1998-12-01 01:23:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Wed Jun  3 03:33:50 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mail-parse.el (rfc2045): Required.
+       * gnus.el: Checked doc string syntax throughout.
 
-1998-12-01 00:59:53  William M. Perry  <wmperry@aventail.com>
+       * message.el (message-subject-re-regexp): Renamed.
 
-       * mm-view.el (mm-inline-text): Remove props.
+Wed Jun  3 03:33:05 1998  Simon Josefsson  <jas@pdc.kth.se>
 
-1998-12-01 00:18:47  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-ignored-subject-re): New variable.
 
-       * mm-view.el (mm-setup-w3): Protect url-misc.
+Wed Jun  3 03:25:13 1998  Sam Steingold  <sds@usa.net>
 
-       * message.el (message-ignored-resent-headers): Remove
-       Gnus-Warning.
+       * gnus-msg.el (gnus-bug-create-help-buffer): New variable.
+       (gnus-bug): Use it.
 
-       * mml.el (mml-insert-mime-headers): Use encoding.
-       (mml-parameter-string): Ditto.
+1998-05-07  Hrvoje Niksic  <hniksic@srce.hr>
 
-       * rfc2045.el: New file.
-       (rfc2045-encode-string): New function.
+       * nnmail.el: (nnmail-get-split-group): Use `regexp-quote'
+       when file name is a part of pattern.
 
-1998-11-30 23:11:22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnmail.el (nnmail-crosspost-link-function): Ditto.
 
-       * mail-parse.el (mail-header-encode-parameter): New function.
+       * gnus-ems.el: Use `symbol-name' instead of `(format "%s" ...)'.
 
-       * rfc2231.el (rfc2231-encode-string): New function.
+       * gnus-score.el (gnus-score-load-file): Use `regexp-quote'
+       when file name is a part of pattern.
 
-Mon Nov 30 13:52:50 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+1998-05-06  Hrvoje Niksic  <hniksic@srce.hr>
 
-       * mm-bodies.el (mm-decode-string): New function.
-       * mm-view.el (mm-inline-text): Use mm-decode-string.
+       * gnus-cache.el (gnus-cache-generate-active): Use `regexp-quote'
+       when file name is a part of pattern.
 
-Mon Nov 30 21:57:00 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Wed Jun  3 03:13:34 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.57 is released.
+       * nnfolder.el (nnfolder-delete-mail): Changed parameters.
+       (nnfolder-request-replace-article): Rename X-From-Line.
 
-1998-11-23  Felix Lee  <flee@cygnus.com>
+Wed Jun  3 03:10:04 1998  Dan Christensen  <jdc@chow.mat.jhu.edu>
 
-       * nntp.el (nntp-async-needs-kluge): new setting.
-       (nntp-async-timer): new var.
-       (nntp-async-process-list): new var.
-       (nntp-async-kluge): new function.
-       (nntp-async-timer-handler): new function.
-       (nntp-async-wait): new function.
-       (nntp-async-stop): new function.
-       (nntp-after-change-function): renamed, and split apart.
-       (nntp-async-trigger): new function.
-       (nntp-do-callback): new function.
-       (nntp-accept-process-output): add optional timeout arg.
+       * nnfolder.el (nnfolder-adjust-min-active): Work.
 
-       * gnus-async.el (gnus-async-request-fetched-article): fixed.
-       (gnus-async-wait-for-article): new function.
-       (gnus-async-with-semaphore): s/asynch/async/.
+Mon Jun  1 05:27:28 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-11-30 16:54:56  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-summary-limit-to-age): Reversed time and
+       almost collapsed space!
 
-       * gnus-art.el (gnus-with-article): Don't encode.
-       (gnus-insert-mime-button): Fall back on filename from C-D.
-       (gnus-mime-display-single): Have dots right on text/plain
-       attachments.
+       * nnmail.el (nnmail-days-to-time): Computed wrong time.
 
-       * mm-decode.el (mm-dissect-buffer): Respect Content-Disposition in
-       broken parts.
+Mon Jun  1 05:19:46 1998  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
 
-       * gnus-art.el (gnus-with-article): Flush cache and backlog.
+       * gnus-sum.el (gnus-dependencies-add-header): Break loops.
 
-       * mm-bodies.el (mm-decode-content-transfer-encoding): Also do
-       binhex.
+Mon Jun  1 05:13:34 1998  Fabrice POPINEAU  <popineau@esemetz.ese-metz.fr>
 
-       * gnus-sum.el (gnus-summary-reparent-thread): Use new macro.
-       (gnus-summary-repair-multipart): New command and keystroke.
+       * gnus-cache.el (gnus-cache-generate-active): Regexp-quote.
 
-       * gnus-art.el (gnus-with-article-buffer): New macro.
+Mon Jun  1 04:31:23 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-Sun Nov 29 23:51:57 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus.el: Gnus v5.6.10 is released.
 
-       * gnus-art.el (gnus-mime-inline-part): Do not get part when
-       undisplay the part.
+Mon Jun  1 03:25:33 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-11-30 03:38:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-art.el (gnus-button-alist): Recognize bare mailto buttons
+       for Gnus.
 
-       * gnus-util.el (gnus-make-sort-function-1): Allow lambdas.
+       * nntp.el: Replaced all `message' calls.
 
-       * mml.el (mml-read-part): Partition right.
+Mon Jun  1 03:13:46 1998  Wolfgang Rupprecht  <wolfgang@dailyplanet.wsrcc.com>
 
-       * mm-decode.el (mm-handle-set-cache): New macro.
-       (mm-handle-cache): Ditto.
-       (mm-make-handle): Ditto.
-       (mm-dissect-singlepart): Use it.
-       (mm-get-image): Use the cache.
+       * nntp.el (nntp-encode-text): Removed spurious forward-line.
 
-1998-11-29 23:44:44  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat May 23 19:44:43 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-mime-display-mixed): Rewrite.
-       (gnus-mime-display-single): Don't insert lines between parts.
+       * gnus-agent.el (gnus-agent-fetch-session): Would infloop if
+       opening failed.
 
-Sun Nov 29 04:55:40 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+Tue May 19 04:11:33 1998  Yoshiki Hayashi  <g740685@komaba.ecc.u-tokyo.ac.jp>
 
-       * nnmail.el (nnmail-file-coding-system-1): New variable.
-       * nnfolder.el (nnfolder-file-coding-system): Ditto.
-       (nnfolder-read-folder): Use nnfolder-file-coding-system.
-       * nnml.el (nnml-file-coding-system): New variable.
-       (nnml-request-article): Use nnml-file-coding-system.
+       * nnheader.el (nnheader-translate-file-chars): Don't change
+       string.
 
-Sun Nov 29 15:12:52 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Tue May 19 03:07:45 1998  P. E. Jareth Hein  <jareth@camelot-soft.com>
 
-       * gnus.el: Pterodactyl Gnus v0.56 is released.
+       * gnus-util.el (gnus-dd-mmm): New version.
 
-1998-11-29 00:52:53  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Tue May 19 03:00:39 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-mime-display-part): New function.
-       (gnus-mime-display-mixed): Use it.
+       * gnus.el: Changed address.
 
-       * mm-view.el (mm-setup-w3): Don't register.
+Tue May 12 06:12:42 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.el (message-cite-original): Cite parts.
+       * gnus-agent.el (gnus-agent-expire): Delete more.
 
-1998-11-28 23:51:25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun May 10 19:08:28 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mml.el (mml-parameter-string): New function.
-       (mml-insert-mime-headers): Separated into new function.
+       * gnus-group.el (gnus-group-read-ephemeral-group): Don't add
+       `address'.
 
-1998-11-28  Hrvoje Niksic  <hniksic@srce.hr>
+Sun May  3 18:01:01 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mml.el (mml-make-boundary): Use `make-string'.
+       * nnmail.el (nnmail-within-headers-p): Renamed.
 
-1998-11-27  Hrvoje Niksic  <hniksic@srce.hr>
+       * message.el (message-cancel-news): If a Sender header doesn't
+       exist, compare From against `message-make-from'.
 
-       * binhex.el (binhex-insert-char): Ditto.
+Sun May  3 15:07:25 1998  Lars Balker Rasmussen  <lbr@image.dk>
 
-       * base64.el (base64-insert-char): Ditto.
+       * gnus-agent.el (gnus-agent-save-group-info): Fix
+       re-search-forward params.
 
-       * uudecode.el (uudecode-insert-char): Code correctly.
+Sun May  3 15:04:02 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-11-28 01:08:19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-agent.el (gnus-agent-expire): Check for the size.
 
-       * mml.el (mml-generate-mime): Don't generate multiparts for
-       empties.
+Sat May  2 01:50:20 1998  Dan Christensen  <jdc@chow.mat.jhu.edu>
 
-       * gnus-art.el (gnus-display-mime): Save excursion.
+       * nnfolder.el (nnfolder-goto-article): New version.
+       (nnfolder-read-folder): Fix.
 
-       * message.el (message-remove-first-header): New function.
-       (message-encode-message-body): Use it.
+       * nnmail.el (nnmail-within-headers): New function.
 
-Fri Nov 27 12:26:10 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Sat May  2 01:36:37 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.55 is released.
+       * nnfolder.el (nnfolder-goto-article): Thinkotypo search arguments.
 
-1998-11-27 12:38:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnheader.el (nnheader-find-file-noselect): Also bind
+       `find-file-hooks' to nil.
 
-       * mm-view.el (mm-setup-w3): New function.
+       * nnmail.el (nnmail-process-unix-mail-format): Don't use
+       `find-file-noselect'.
 
-       * mm-decode.el (mm-content-id-get-contents): New function.
-       (mm-content-id-get-type): Ditto.
-       (mm-content-id-get-encoding): Ditto.
-       (mm-get-handle-by-content-id): Removed.
+       * gnus-group.el (gnus-group-make-menu-bar): Typo.
 
-1998-11-25  Colin Rafferty  <colin@xemacs.org>
+Fri May  1 21:59:35 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * message.el (message-generate-new-buffers): Fix tag.
+       * gnus.el: Gnus v5.6.9 is released.
 
-1998-11-25 10:43:28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Fri May  1 21:54:30 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.el (message-buffer-name): Check for unique first.
+       * nnfolder.el (nnfolder-goto-article): Would infloop.
 
-       * gnus-art.el (gnus-unbuttonized-mime-type-p): use
-       gnus-inhibit-mime-unbuttonizing.
+Fri May  1 19:45:50 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-sum.el (t): Bind M-t.
-       (gnus-inhibit-unbuttonizing): New variable.
-       (gnus-summary-toggle-display-buttonized): New command.
+       * gnus.el: Gnus v5.6.8 is released.
 
-       * gnus-art.el (gnus-display-mime): Select article window.
-       (article-strip-trailing-space): New command and keystroke.
+Fri May  1 18:51:21 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * nneething.el (nneething-include-files): New variable.
-       (nneething-create-mapping): Use it.
+       * nntp.el (nntp-request-newgroups): Use format-time-string.
 
-       * nntp.el (nntp-possibly-change-group): Use nntp-send-command.
+       * message.el (message-fetch-field): Inhibit point-motion hooks.
 
-       * nnvirtual.el (nnvirtual-request-update-mark): Only yodate
-       ayto-expirable marks.
+Fri May  1 18:33:06 1998  Wes Hardaker  <wjhardaker@ucdavis.edu>
 
-1998-11-24 21:00:02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-score.el (gnus-adaptive-word-no-group-words): New variable.
 
-       * gnus-art.el (gnus-mime-view-all-parts): Set buffer.
+Fri May  1 16:56:32 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-sum.el (gnus-summary-display-buttonized): Don't pass on
-       ARG.
+       * gnus-agent.el (gnus-agent-expire): Put point at the start of the
+       buffer.
 
-       * gnus-art.el (gnus-article-mode-line-format): Doc fix.
+       * gnus-soup.el (gnus-soup-parse-areas): Check whether the file
+       exists.
 
-Tue Nov 24 14:57:41 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-draft.el (gnus-draft-send): Use meta-information.
 
-       * mm-util.el (mm-binary-coding-system): New variable.
-       (mm-with-unibyte-buffer): Use mm-binary-coding-system.
-       * mm-decode.el (mm-display-external): Ditto.
+       * nnagent.el (nnagent-request-post): Store meta-information.
 
-Tue Nov 24 10:43:06 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-agent.el (gnus-agent-meta-information-header): New variable.
+       (gnus-agent-insert-meta-information): New function.
 
-       * gnus.el: Pterodactyl Gnus v0.54 is released.
+Fri May  1 16:43:35 1998  Paul Franklin  <paul@cs.washington.edu>
 
-1998-11-24 11:21:32  Katsumi Yamaoka  <yamaoka@jpl.org>
+       * message.el (message-generate-headers): Insert Sender when
+       required.
 
-       * gnus-sum.el (gnus-newsgroup-default-charset-alist): Note fj.
+Fri May  1 15:28:55 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-11-24 11:14:54  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-util.el (gnus-dd-mmm): Accept "" dates.
 
-       * mm-decode.el (mm-save-part): Unquote.
+       * gnus-cite.el (gnus-article-hide-citation): Don't remove button
+       when hiding.
 
-1998-11-24 11:14:39  Matt Armstrong  <matta@geoworks.com>
+       * gnus-msg.el (gnus-post-method): Allow ARG to override
+       `current'.
 
-       * mm-decode.el (mm-save-part): Bind coding system for write.
+       * gnus-sum.el (gnus-remove-thread): Remove the dummy root
+       properly.
 
-1998-11-24 10:42:30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnfolder.el (nnfolder-goto-article): New function.
+       (nnfolder-retrieve-headers): Use it.
+       (nnfolder-request-article): Ditto.
 
-       * gnus-art.el (gnus-article-mode-line-format): New default.
-       (gnus-article-mime-part-status): New function.
+Wed Apr 29 22:48:33 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * message.el (message-send-news): Check the body syntax before
-       encoding.
+       * gnus.el: Gnus v5.6.7 is released.
 
-       * gnus-art.el (gnus-unbuttonized-mime-type): New function.
-       (gnus-mime-display-single): Use it.
-       (gnus-mime-display-alternative): Ditto.
+Wed Apr 29 20:54:35 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el: Check for whether we are running under a term.
+       * gnus-sum.el (gnus-summary-update-info): Bind
+       gnuis-newsgroup-scored later.
+       (gnus-summary-prepare-threads): Check some more before inserting
+       dummy roots.
 
-1998-11-22 08:12:25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-cache.el (gnus-cache-enter-article): Update marks
+       properly.
 
-       * mm-decode.el (mm-preferred-alternative): Default to first
-       alternative.
-       (mm-preferred-alternative): No, we dont.
+       * gnus-xmas.el (gnus-xmas-draft-menu-add): New function.
 
-Tue Nov 24 03:01:48 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * nntp.el (nntp-connection-timeout): Removed.
 
-       * mm-decode.el (mm-display-external): Use binary instead of
-       no-conversion.
-       * gnus-agent.el (gnus-agent-file-coding-system): Ditto.
-       * nnheader.el (nnheader-file-coding-system): Ditto.
-       * mm-util.el (mm-with-unibyte-buffer): Use binary instead of nil.
+       * gnus-move.el (gnus-move-group-to-server): Delete nils.
 
-Mon Nov 23 01:51:57 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * nntp.el (nntp-close-server): Close more connections.
 
-       * gnus-sum.el (gnus-newsgroup-setup-default-charset): Use group
-       name without method.
+       * gnus-art.el (gnus-button-alist): Accept white space after colons
+       in <URL:news:> things.
 
-Mon Nov 23 01:26:40 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+Wed Apr 29 20:18:45 1998  Kurt Swanson  <kurt@dna.lth.se>
 
-       * gnus-sum.el (gnus-newsgroup-default-charset): Rename
-       coding-system -> default-charset.
-       (gnus-newsgroup-default-charset-alist): Ditto.
-       (gnus-summary-local-variables): Ditto.
-       (gnus-set-global-variables): Ditto.
-       (gnus-get-newsgroup-headers): Ditto.
-       (gnus-summary-from-or-to-or-newsgroups): Ditto.
-       (gnus-get-newsgroup-headers-xover): Ditto.
-       (gnus-newsgroup-setup-default-charset): Ditto.
-       (article-decode-mime-words): Ditto.
-       (article-decode-charset): Ditto.
-       (article-decode-encoded-words): Ditto.
-       (article-de-quoted-unreadable): Ditto.
-       (gnus-mime-view-all-parts): Ditto.
-       (gnus-mime-externalize-part): Ditto.
-       (gnus-mm-display-part): Ditto.
-       (gnus-mime-display-single): Ditto.
-       (gnus-mime-display-alternative): Ditto.
-       * lpath.el : Ditto.
+       * gnus-art.el (article-update-date-lapsed): Bind
+       `deactivate-mark'.
 
-Mon Nov 23 00:54:33 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-salt.el (gnus-pick-mode-map): Moved keys around to avoid
+       shadowing.
 
-       * rfc2047.el (rfc2047-decode-region): Do not decode nil charset.
-       * gnus-art.el (article-decode-charset): Overlay
-       rfc2047-default-charset.
-       * message.el (message-draft-coding-system): New variable.
-       (message-set-auto-save-file-name): Use message-draft-coding-system.
-       * nndraft.el (nndraft-request-article): Ditto.
-       * gnus-start.el (gnus-start-draft-setup): Set charset nil.
-       * gnus-agent.el (gnus-agent-queue-setup): Ditto.
+       * gnus-art.el (gnus-article-read-summary-keys): New version.
 
-Sun Nov 22 04:42:22 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-sum.el (gnus-summary-make-menu-bar): New for article mode.
 
-       * mm-uu.el (mm-uu-test): New function.
-       (mm-uu-dissect): Inherit charset and cte from head.
-       * gnus-art.el (article-decode-charset): Use mm-uu-test.
+       * gnus-msg.el (gnus-post-method): `current' custom.
 
-Sat Nov 21 09:57:01 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Wed Apr 29 19:04:27 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.53 is released.
+       * gnus-sum.el (gnus-summary-set-local-parameters): Ignore
+       quit-config.
+       (gnus-select-newsgroup): Use the value of gnus-fetch-old-headers.
 
-1998-11-21 05:54:19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-post-method): Doc fix.
 
-       * mm-decode.el (mm-get-image): New function.
-       (mm-image-fit-p): New function.
+       * gnus.el (gnus-directory): dox fix.
 
-       * gnus-xmas.el (gnus-xmas-annotation-in-region-p): Ditto.
+Tue Apr 28 03:32:17 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-util.el (gnus-annotation-in-region-p): New definition.
+       * gnus-group.el (gnus-group-timestamp): Really get timestamp.
 
-       * gnus-art.el (gnus-article-insert-newline): New function.
-       (article-goto-body): New function.
+       * gnus.el (gnus-group-parameter-value): Use explicit iteration.
 
-1998-11-20 10:34:04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Tue Apr 28 03:15:50 1998  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
 
-       * gnus-art.el (gnus-mime-display-single): Insert blank line before
-       buttons.
+       * gnus-util.el (gnus-alive-p): Check for binding.
 
-       * gnus-sum.el (gnus-summary-display-buttonized): New command and
-       keystroke.
+Tue Apr 28 03:00:16 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-mime-display-single): Don't insert a blank
-       line between parts.
+       * gnus-sum.el (gnus-parent-headers): Don't infloop on nil
+       References.
 
-       * message.el (message-remove-header): Go to end if wanted.
+       * gnus-art.el (gnus-article-mode): Don't kill local vars.
 
-1998-11-20  Karl Kleinpaste  <karl@justresearch.com>
+       * score-mode.el (score-mode-syntax-table): Change syntax.
 
-       * gnus-art.el (gnus-mime-display-alternative): Avoid window
-       movement with save-window-excursion.
+Mon Apr 27 00:26:01 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-Fri Nov 20 03:50:30 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus.el: Gnus v5.6.6 is released.
 
-       * gnus-art.el (gnus-mime-inline-part): Use argument as charset.
+Mon Apr 27 00:07:11 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Fri Nov 20 03:37:53 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-art.el (gnus-request-article-this-buffer): Viewing pseudos
+       in nneething groups bugged.
 
-       * mm-bodies.el (mm-decode-body): Remove buffer-file-coding-system.
+       * gnus-sum.el (gnus-summary-prepare-threads): Dummy roots and
+       dormants and stuff.
 
-Fri Nov 20 01:20:38 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+Sun Apr 26 23:34:40 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-sum.el (gnus-summary-from-or-to-or-newsgroups): Use
-       gnus-newsgroup-coding-system.
-       (gnus-get-newsgroup-headers): Ditto.
-       (gnus-get-newsgroup-headers-xover): Ditto.
-       (gnus-set-global-variables): Ditto.
-       * gnus-art.el (article-decode-mime-words): Ditto.
-       (article-decode-charset): Ditto.
-       (article-decode-encoded-words): Ditto.
-       (article-de-quoted-unreadable): Ditto.
-       (gnus-mime-view-all-parts): Ditto.
-       (gnus-mime-externalize-part): Ditto.
-       (gnus-mm-display-part): Ditto.
-       (gnus-mime-display-alternative): Ditto.
-       (gnus-mime-display-single): Ditto.
-       * mm-view.el (mm-inline-text): Use default coding system.
+       * gnus-cache.el (gnus-cache-file-name): Use FULL.
 
-Fri Nov 20 00:54:37 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * nnheader.el (nnheader-translate-file-chars): Allow FULL
+       parameter.
 
-       * gnus-sum.el (gnus-newsgroup-coding-system-alist): New variable.
-       (gnus-newsgroup-iso-8859-1-forced-regexp): New variable.
-       (gnus-newsgroup-coding-system): New local variable.
-       (gnus-newsgroup-iso-8859-1-forced): New local variable.
-       (gnus-summary-local-variables): Add two new local variables.
-       (gnus-newsgroup-setup-coding-system): New function.
-       (gnus-select-newsgroup): Setup coding system.
-       * lpath.el: Add two new variables.
-       * mm-util.el (mm-charset-iso-8859-1-forced): New variable.
-       (mm-charset-to-coding-system): Use mm-charset-iso-8859-1-forced.
-       * gnus-cus.el (gnus-group-parameters): Customizable
-       iso-8859-1-forced.
+       * gnus-cache.el (gnus-cache-file-name): Translate all colons.
 
-Fri Nov 20 05:30:26 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Sun Apr 26 19:27:56 1998  Justin Sheehy  <justin@linus.mitre.org>
 
-       * gnus.el: Pterodactyl Gnus v0.52 is released.
+       * nntp.el (nntp-rlogin-parameters): Doc fix.
 
-1998-11-20 04:32:23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Apr 26 19:21:12 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * rfc2047.el (rfc2047-encode-message-header): Encode the default
-       encoding.
+       * gnus-art.el (gnus-summary-save-in-mail): Not a command.
 
-       * gnus-art.el (gnus-mime-display-single): Insert buttons for
-       undisplayed text types.
+Sun Apr 26 19:16:03 1998  James Troup  <J.J.Troup@scm.brad.ac.uk>
 
-       * mm-decode.el (mm-automatic-display-p): Only prefer inlinable
-       types.
+       * gnus-sum.el (gnus-summary-expire-articles-now): Work.
 
-1998-11-19  Felix Lee  <flee@cygnus.com>
+Sun Apr 26 14:34:06 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * nntp.el (nntp-after-change-function-callback): recover from C-g.
+       * gnus-sum.el (gnus-build-sparse-threads): Break loops.
+       (gnus-summary-print-article): Save excursion to try to preserve
+       local/bound variable messup.
 
-1998-11-19  Felix Lee  <flee@cygnus.com>
+       * gnus-salt.el (gnus-tree-read-summary-keys): Put point in article
+       buffer.
 
-       * gnus-async.el (gnus-asynch-obarray): rename to
-       gnus-async-hashtb, and don't buffer-local it.
+       * gnus-undo.el (gnus-undo): New group.
+       (gnus-undo-limit): New variable.
+       (gnus-undo-register-1): Use it.
 
-       (gnus-async-article-callback): new function.
-       (gnus-make-async-article-function): use it.
+       * gnus-sum.el (gnus-summary-update-info): Don't nix out scores.
 
-       (gnus-async-current-prefetch-group): new var.
-       (gnus-async-current-prefetch-article): new var.
-       (gnus-async-request-fetched-article): are we fetching it already?
+       * gnus-start.el (gnus-active-to-gnus-format): Removed "." from
+       quoting.
 
-       (gnus-async-delete-prefected-entry): s/prefected/prefetched/
+       * gnus.el (gnus-cache-directory): Moved here.
+       (gnus-predefined-server-alist): Use.
 
-1998-11-20 02:49:21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-autosave-directory): Put back in.
+       (message-set-auto-save-file-name): Use if Gnus isn't running.
 
-       * gnus-sum.el (gnus-summary-show-article): Require.
+       * gnus-util.el (gnus-alive-p): Moved here.
 
-       * message.el: Provide before hooks.
-       (message-send-news): Do MIME before headers.
+       * message.el (message-autosave-directory): Removed.
+       (message-set-auto-save-file-name): Don't use it.
 
-       * gnus-art.el (gnus-article-check-buffer): New function.
-       (gnus-article-read-summary-keys): Use it.
+       * gnus.el: Use gnus-buffer-exists-p throughout.
 
-       * mm-decode.el (mm-user-automatic-display): Display all inline
-       images.
+       * gnus-uu.el (gnus-uu-save-article): Use gnus-kill-buffer.
 
-       * gnus-art.el (gnus-mime-display-single): Don't buttonize so
-       much.
-       (gnus-unbuttonized-mime-types): New variable.
+       * message.el (message-make-in-reply-to): Check more for strange
+       From lines.
 
-1998-11-19 06:29:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-art.el (gnus-article-mode): Don't nix out vars.
 
-       * gnus-sum.el (gnus-inhibit-user-auto-expire): Changed to t.
+Sun Apr 26 14:05:40 1998  Frank Bennett  <bennett@rumple.soas.ac.uk>
 
-       * mm-decode.el (mm-quote-arg): Quote semicolons.
+       * nnmail.el (nnmail-move-inbox): Push error'ed mailboxes onto the
+       list.
 
-       * gnus-art.el (gnus-mime-display-single): Don't display
-       attachments.
-       (gnus-mime-externalize-part): New command and keystroke.
+Sun Apr 26 13:01:53 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el (mm-dissect-buffer): Pass on the description info.
-       (mm-alternative-precedence): Changed order.
+       * gnus-score.el (gnus-score-save): Use it.
 
-1998-11-07 17:41:47  Simon Josefsson  <jas@pdc.kth.se>
+       * score-mode.el (score-mode-syntax-table): New table.
 
-       * gnus.el (gnus-method-simplify): New function.
-       (gnus-native-method-p): New function.
-       (gnus-secondary-method-p): Use gnus-method-equal.
+       * nnmbox.el: Commentary fix.
 
-       * gnus-start.el (gnus-group-change-level): Shorten select method.
+Sun Apr 26 12:59:00 1998  Richard Stallman  <rms@santafe.edu>
 
-Thu Nov 19 04:48:42 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * message.el (message-mode): New adaptive fill defaults.
 
-       * gnus.el: Pterodactyl Gnus v0.51 is released.
+Sun Apr 26 12:50:38 1998  Jim Radford  <radford@robby.caltech.edu>
 
-1998-11-19 04:02:34  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-start.el (gnus-active-to-gnus-format): Groups that start
+       with dots.
 
-       * gnus.el: Applied patches from 5.6.45.
+1998-04-11  Richard Stallman  <rms@sucrose.gnu.org>
 
-       * gnus-score.el (gnus-score-find-trace): Print complete file
-       paths.
-       (gnus-score-find-trace): Truncate lines.
+       * gnus/gnus-art.el (gnus-emphasis-alist): Use nth, not caddr.
 
-       * gnus.el (gnus-message-archive-group): Allow function.
+Sat Apr 25 15:33:57 1998  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
 
-       * message.el (message-encode-message-body): Remove Mime-Version
-       before inserting.
+       * gnus-sum.el (gnus-build-sparse-threads): Handle loops.
 
-       * gnus-cus.el (gnus-group-customize): Optional topic.
+Sat Apr 25 15:09:54 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-sum.el (gnus-summary-customize-parameters): New command and
-       keystroke.
+       * gnus.el (gnus-valid-select-methods): nngateway is post-mail.
 
-Wed Nov 18 13:46:08 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+Fri Apr 24 21:32:14 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * message.el (message-encode-message-body): Rewrite.
+       * gnus.el: Gnus v5.6.5 is released.
 
-1998-11-18 07:37:47  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Fri Apr 24 21:19:21 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mml.el (mml-base-boundary): New variable.
-       (mml-make-boundary): New function.
+       * gnus-msg.el (gnus-post-method): Doc fix.
+       (gnus-post-method): Reversed semantics.
 
-       * gnus-cache.el (gnus-cache-coding-system): New variable.
-       (gnus-cache-request-article): Use it.
+1998-04-01  Jan Vroonhof  <vroonhof@math.ethz.ch>
 
-       * message.el (message-insert-mime-part): Delete duplicates.
+       * gnus-msg.el (gnus-post-method): Customized. Added 'native
+       option. In the function, added support for new value.
 
-Wed Nov 18 11:52:19 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+Fri Apr 24 20:04:15 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-mime-display-alternative): Set end of
-       multipart and display even when nothing is preferred.
+       * nnmbox.el (nnmbox-request-create-group): New function.
 
-Wed Nov 18 05:06:44 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Sun Apr 12 07:55:16 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.50 is released.
+       * gnus-agent.el (gnus-agent-save-group-info): Only do those that
+       are covered.
 
-1998-11-18 04:42:01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Tue Apr  7 11:26:31 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el (mm-inline-media-tests): Check that device-type is
-       fbound.
+       * nntp.el (nntp-authinfo-file): Doc fix.
 
-       * gnus-sum.el (gnus-summary-sort): Didn't do reverse.
+1998-03-31  Ken Raeburn  <raeburn@cygnus.com>
 
-1998-11-07 23:39:48  Simon Josefsson  <jas@pdc.kth.se>
+       * nnml.el (nnml-request-expire-articles): Sort active-articles,
+       then only expire the intersection of that set with the requested
+       articles.
 
-       * gnus.el (gnus-similar-server-opened): Compare backend.
+Wed Apr  1 16:01:44 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-11-08 03:37:42  Simon Josefsson  <jas@pdc.kth.se>
+       * message.el (message-supersede): Check Sender.
+       (message-cancel-news): Fix Sender check.
 
-       * gnus-topic.el (gnus-topic-expire-articles): New function.
-       (gnus-topic-mode-map): Bind it.
+Sun Mar 29 11:54:33 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Topic Commands): New expiry command. Reordered.
+       * nnkiboze.el (nnkiboze-generate-group): Would mess up newsrs
+       hashtb.
+       (nnkiboze-enter-nov): Created bogus Xrefs headers.
 
-1998-11-10  Miles Bader  <miles@ccs.mt.nec.co.jp>
+       * gnus-agent.el (gnus-agent-save-group-info): New function.
 
-       * gnus-sum.el
-       (gnus-auto-expirable-marks): New variable.
-       (gnus-inhibit-user-auto-expire): New variable.
-       (gnus-summary-mark-article-as-read, gnus-summary-mark-article):
-       When looking to see if we should expire instead, check
-       gnus-auto-expirable-marks instead of using a hard-wired list.
-       (gnus-summary-mark-as-read-forward,
-       gnus-summary-mark-as-read-backward):
-       Pass gnus-inhibit-user-auto-expire for the no-expire argument to
-       gnus-summary-mark-forward, instead of `t'.
+       * gnus-start.el (gnus-get-unread-articles): Use it.
 
-1998-11-18 03:30:26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-expand-group): Allow completion from in the
+       middle of strings.
+       (message-font-lock-keywords): Work when mail-header-separator is
+       "".
 
-       * mml.el (mml-compute-boundary): New function.
-       (mml-compute-boundary-1): New function.
-       (mml-generate-mime-1): Use it.
+Sun Mar 29 09:56:00 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1998-11-18  Hrvoje Niksic  <hniksic@srce.hr>
+       * gnus.el: Gnus v5.6.4 is released.
 
-       * mml.el (mml-generate-mime-1): Always precede closing boundary
-       with newline.
+Sun Mar 29 09:47:58 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-11-18 02:36:37  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnkiboze.el (nnkiboze-request-delete-group): Would bug out when
+       deleting files.
 
-       * mml.el (mml-generate-mime-1): Do right boundaries when several
-       multiparts.
+Sat Mar 28 08:48:31 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el (mm-user-automatic-display): Default to inline
-       jpeg.
+       * nntp.el (nntp-encode-text): Use `nntp-end-of-line'.
 
-       * mml.el (mml-generate-mime-1): Encode non-text parts.
+Thu Mar 26 15:29:51 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Wed Nov 18 02:22:23 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-agent.el (gnus-agent-expire): Check size of history file.
 
-       * gnus.el: Pterodactyl Gnus v0.49 is released.
+       * message.el (message-mode): Doc fix.
 
-1998-11-18 00:37:43  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Mon Mar 23 14:21:34 1998  Mike McEwan  <mike@lotusland.demon.co.uk>
 
-       * mm-view.el (mm-inline-text): Require w3-vars.
+       * gnus-score.el (gnus-score-default-type): Doc fix.
 
-       * gnus-setup.el (gnus-use-tm): Removed.
+Mon Mar 23 14:12:01 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-article-goto-part): Don't beep.
-       (gnus-article-view-part): Check return value.
-       (gnus-mime-display-alternative): Don't display when there is
-       nothing to display.
+       * gnus-int.el (gnus-request-body): Do the same as HEAD.
 
-       * mml.el (mml-generate-mime-1): Don't use a unibyte buffer.
-       (mml-generate-mime-1): Use unibyte for binaries.
+       * gnus-art.el (gnus-article-edit-article-hook): Removed.
 
-       * gnus-art.el (gnus-display-mime): Call
-       gnus-article-mime-part-function.
-       (gnus-mime-part-function): New function.
-       (gnus-article-mime-part-function): New function.
+Mon Mar 23 14:09:56 1998  jari aalto  <jari.aalto@poboxes.com>
 
-       * mml.el (mml-generate-mime-1): Don't insert so many newlines.
+       * gnus-art.el (gnus-article-edit-article-hook): New hook.
 
-1998-11-16 06:44:19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-03-19  Jan Vroonhof  <vroonhof@math.ethz.ch>
 
-       * mml.el (mml-generate-mime-1): Do it in unibyte buffers.
+       * nntp.el (nntp-open-rlogin): Wrap in save-excursion
 
-       * message.el (message-font-lock-keywords): Highlight MML.
-       (message-mml-face): New font.
+Thu Mar 19 16:43:59 1998  Joe Buehler  <jhpb@hekimian.com>
 
-Mon Nov 16 23:34:12 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-util.el (gnus-date-iso8601): Use simple string.
 
-       * gnus-art.el (gnus-display-mime): Clean up even when no handles.
-       (gnus-mm-display-part): Do not select-window if the article window
-       is not found.
+Thu Mar 19 15:18:00 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-Mon Nov 16 02:26:40 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus.el: Gnus v5.6.3 is released.
 
-       * gnus-sum.el (gnus-summary-move-article): Use no-encode for B m.
+Thu Mar 19 15:09:14 1998  Wes Hardaker  <wjhardaker@ucdavis.edu>
 
-Mon Nov 16 02:00:05 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-win.el (gnus-delete-windows-in-gnusey-frames): Make sure
+       there are no nil buffers.
 
-       * gnus.el: Pterodactyl Gnus v0.48 is released.
+1998-03-17  Per Abrahamsen  <abraham@dina.kvl.dk>
 
-1998-11-15 23:18:56  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-uu.el (gnus-uu-digest-headers): Add `Content-Type' and
+       `Content-Transfer-Encoding'.
 
-       * mm-bodies.el (mm-encode-body): Disbabled for nonmule.
+1998-03-18  Per Abrahamsen  <abraham@dina.kvl.dk>
 
-       * mm-util.el (mm-find-charset-region): Bogus change for non-Mule.
+       * message.el (message-header-lines): Added `:format'.
 
-       * message.el (message-cite-original-without-signature): Ditto.
-       (message-cite-original): Quote parts.
+1998-03-18  Simon Josefsson  <jas@pdc.kth.se>
 
-Sun Nov 15 22:01:55 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * nndoc.el: dummy request-accept-article
 
-       * gnus.el: Pterodactyl Gnus v0.47 is released.
+Thu Mar 19 14:10:25 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-11-15 20:11:33  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-summary-next-subject): Expand threads.
 
-       * message.el (message-encode-message-body): Insert MIME warning.
+       * gnus-agent.el (gnus-agent-group-mode-hook,
+       gnus-agent-summary-mode-hook): New variables.
+       (gnus-agent-mode): Run them.
 
-       * mml.el (mml-read-tag): Look for #tag.
+1998-03-14  SL Baur  <steve@altair.xemacs.org>
 
-       * mm-util.el (mm-find-charset-region): Check whether
-       enable-multibyte-characters is bound.
+       * gnus-xmas.el (gnus-xmas-group-startup-message): Tell gnus-start
+       we've already drawn the pretty Gnu graphic.
 
-Sun Nov 15 02:01:31 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Thu Mar 19 12:44:12 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.46 is released.
+       * gnus-msg.el: Would use nil group names.
 
-1998-11-15 01:54:40  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nntp.el (nntp-send-authinfo): Send authinfo to "force"d
+       servers.
 
-       * message.el (message-encode-message-body): Insert headers at the
-       right spot.
+       * gnus-util.el (gnus-parse-netrc): Accept the "force" token.
 
-Sun Nov 15 01:13:41 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * message.el (message-cancel-news): Compare Sender header, not
+       From header.
 
-       * gnus.el: Pterodactyl Gnus v0.45 is released.
+Tue Mar 17 15:07:18 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-11-15 00:28:49  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-art.el (article-hide-headers): Fold case.
 
-       * nndraft.el (nndraft-save-mime-part): Removed.
-       (nndraft-get-mime-part): Ditto.
+Sat Mar 14 17:57:35 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.el (message-format-mime-old): Removed.
-       (message-encode-message-body): Removed.
-       (message-encode-message-body): Renamed.
+       * gnus-util.el (gnus-horizontal-recenter): New window-end may
+       return nil.
 
-1998-11-14 18:27:19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Fri Mar 13 22:12:30 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-sum.el (gnus-get-newsgroup-headers): Translate \r's.
+       * gnus-agent.el (gnus-agent-fetch-session): Check whether server
+       is up before fetching.
 
-       * message.el (message-format-mime): Check message-mime-part.
+       * gnus-win.el (gnus-window-frame-focus): New variable.
+       (gnus-configure-windows): Use it.
 
-       * mm-encode.el (mm-mime-file-types): Removed.
-       (mm-default-file-encoding): New definition.
+       * gnus-sum.el (gnus-summary-catchup-and-exit): Don't select next
+       when in an ephemeral group.
 
-Sat Nov 14 01:29:39 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-agent.el (gnus-agent-expire): Message end.
+       (gnus-agent-expire-all): New variable.
+       (gnus-agent-expire): Use it.
 
-       * mm-view.el (mm-inline-image): Use mm-insert-inline.
-       * gnus-art.el (gnus-mm-display-part): Go to correct position.
+Fri Mar 13 22:07:17 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
 
-Sat Nov 14 05:47:57 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-agent.el (gnus-agent-high-scored-p): Wrong value.
 
-       * gnus.el: Pterodactyl Gnus v0.44 is released.
+Fri Mar 13 21:10:24 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-11-14 03:59:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnvirtual.el (nnvirtual-request-group): Force updating of info.
 
-       * message.el (message-format-mime): New function.
+Sun Mar  8 20:46:51 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * nndraft.el (nndraft-save-mime-part): New function.
-       (nndraft-get-mime-part): New function.
+       * nnmail.el (nnmail-delete-incoming): Changed default.
 
-       * mm-encode.el (mm-default-file-encoding): New function.
-       (mm-content-transfer-encoding): New function.
-       (mm-encode-buffer): New function.
+Sun Mar  8 14:05:25 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * message.el: New command.
-       (message-mime-part): New variable.
-       (message-insert-mime-part): New command.
+       * gnus.el: Gnus v5.6.2 is released.
 
-       * mm-encode.el (mm-encode-content-transfer-encoding): New
-       function.
+Sun Mar  8 00:35:09 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-util.el (mm-content-transfer-encoding-defaults): New
+       * gnus-picon.el (gnus-get-buffer-name): Look in the assoc for the
        variable.
-       (mm-mime-file-types): Taken from TM.
-
-Sat Nov 14 01:51:06 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
-
-       * gnus.el: Pterodactyl Gnus v0.43 is released.
 
-1998-11-07  Karl Kleinpaste  <karl@jprc.com>
+       * nntp.el (nntp-wait-for): Check more for dead connections.
 
-       * gnus-cus.el (gnus-score-customize): Add "Extra" element.
-       * gnus-score.el (gnus-score-default-header): Ditto.
-       (gnus-header-index): Ditto.
-       (gnus-summary-increase-score): Ditto, & process "extra" requests.
-       (gnus-summary-header): Handle extra headers.
-       (gnus-summary-score-entry): Ditto, & provide new score element.
-       (gnus-summary-score-effect): Ditto.
-       (gnus-score-string): Avoid "extra" string sort, & modify match in
-       "extra" case.
-       * gnus-sum.el (gnus-make-score-map): Add "extra" element.
+       * gnus-eform.el (gnus-edit-form-buffer): Moved back here.
 
-1998-11-13 20:30:40  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-win.el (gnus-window-to-buffer-helper): Return nil when
+       buffers don't exist.
 
-       * message.el (message-resend): Bind message-required-mail-headers
-       to nil.
+       * nndraft.el (nndraft-request-restore-buffer): Remove Xref header,
+       not Xrefs.
 
-       * mm-view.el (mm-inline-text): Bind w3-strict-width.
+Sun Mar  8 00:00:04 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * nngateway.el (require): Require cl.
+       * gnus.el: Gnus v5.6.1 is released.
 
-       * gnus-art.el (gnus-button-alist): Exclude more chars from news:
-       things.
+Sat Mar  7 22:15:46 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Wed Nov 11 02:15:06 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus.el (gnus-edit-form-buffer): Moved here.
 
-       * gnus-agent.el (gnus-agent-fetch-headers): Create directory even
-       when no articles.
+       * gnus-agent.el (gnus-agent-expire-old): Removed.
+       (gnus-agent-expire-directory): Ditto.
+       (gnus-agent-expire-group): Even more ditto.
 
-1998-11-13 19:25:10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Mar  7 21:59:18 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * message.el (message-ignored-resent-headers): Remove X-Gnus.
+       * gnus.el: Quassia Gnus v0.37 is released.
 
-1998-11-10  Colin Rafferty  <colin@xemacs.org>
+Sat Mar  7 20:10:42 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-sum.el (gnus-ignored-from-addresses): Only quote
-       user-mail-address if non-nil.
+       * gnus-agent.el (gnus-agent-expire-days): New variable.
+       (gnus-agent-expire): New function.
 
-1998-11-13 18:50:18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Mar  7 17:35:53 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-util.el (gnus-make-sort-function): Do `reverse'.
-       (gnus-make-sort-function-1): Ditto.
+       * gnus.el: Quassia Gnus v0.36 is released.
 
-       * gnus-art.el (gnus-mm-display-part): Switch to mm in right
-       window.
-
-1998-11-12 22:31:58  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * mm-util.el (mm-with-unibyte-buffer): Ditto.
-
-       * binhex.el (binhex-decode-region): Quote.
-
-1998-11-10 05:32:28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (article-decode-charset): Don't downcase charset.
-
-       * gnus-sum.el (gnus-get-newsgroup-headers-xover): Translate CR's.
-
-Sun Nov  8 23:17:24 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
-
-       * gnus.el: Pterodactyl Gnus v0.42 is released.
-
-Sun Nov  8 02:36:33 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-art.el (gnus-display-mime): Add id for alternative part.
-
-1998-11-08 02:24:47  Simon Josefsson  <jas@pdc.kth.se>
-
-       * nntp.el (nntp-send-mode-reader): Revert.
-
-Sun Nov  8 00:45:13 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-agent-fetch-articles): Use with-temp-buffer.
-
-Sat Nov  7 23:07:24 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+Sat Mar  7 17:29:20 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.el (message-make-date): Fix for negative time zones.
+       * nntp.el (nntp-wait-for): Reversed logic.
 
-Sun Nov  8 01:00:16 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Sat Mar  7 17:19:04 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.41 is released.
+       * gnus.el: Quassia Gnus v0.35 is released.
 
-1998-11-08 00:52:38  Hrvoje Niksic  <hniksic@srce.hr>
+Sat Mar  7 15:01:57 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el (mm-dissect-multipart): Quote regexp.
+       * gnus-picon.el (gnus-picons-x-face-sentinel): Check whether
+       gnus-picons-x-face-file-name exists.
 
-1998-10-29  Sudish Joseph  <sj@eng.mindspring.net>
+       * gnus-art.el (gnus-article-read-summary-keys): Move window point
+       in the summary buffer.
 
-       * gnus.el (gnus-short-group-name): When shortening foreign select
-       methods, do not scan for plusses beyond the first colon.
+       * nndoc.el (nndoc-type-alist): Allow spaces around separator.
 
-1998-11-07  Mike McEwan  <mike@lotusland.demon.co.uk>
+       * gnus-sum.el (gnus-summary-edit-parameters): Interactive.
 
-       * gnus-agent.el (gnus-agent-save-group-info): Cater for group info
-       lines where `group' is the last thing on the line.
+Sat Mar  7 15:00:05 1998  Wes Hardaker  <wjhardaker@ucdavis.edu>
 
-1998-11-08 00:35:09  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-art.el (gnus-article-prepare): Mark articles as
+       downloadable.
 
-       * gnus-art.el (gnus-article-view-part): Do alternative.
-       (gnus-mime-display-alternative): Insert marker.
+Wed Mar  4 22:33:27 1998  Ken Raeburn  <raeburn@cygnus.com>
 
-1998-11-07 14:33:46  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-int.el (gnus-get-function): New version, caches symbol
+       names.
 
-       * mm-decode.el (mm-dissect-multipart): Quote regexp.
+Fri Mar  6 01:10:22 1998  Ken Raeburn  <raeburn@cygnus.com>
 
-       * nnmail.el (nnmail-expired-article-p): Protect against bogus
-       dates.
+       * nnml.el (nnml-article-to-file): Build pathname using
+       expand-file-name.  (Thanks, Colin Rafferty, for catching
+       this.)
 
-       * gnus-cus.el (gnus-topic): Required.
+Sat Feb 28 23:33:40 1998  Ken Raeburn  <raeburn@cygnus.com>
 
-       * nnheader.el (nnheader-parse-nov): Parse extra.
-       (nnheader-nov-parse-extra): New macro.
+       * nnml.el (nnml-article-to-file): Don't add extra "/" when
+       building pathname.
 
-1998-10-31 12:33:22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnheader.el (nnheader-file-to-number): Check value of
+       nnheader-numerical-short-files instead of checking if jka-compr is
+       loaded.
 
-       * gnus-art.el (gnus-article-view-part): Internal move.
+1998-03-03  Dave Love  <d.love@dl.ac.uk>
 
-1998-10-28  Per Abrahamsen  <abraham@dina.kvl.dk>
+       * nnheader.el (nnheader-parse-head): Fix in-reply-to code. Return
+       nil consistently if not found.
 
-       * gnus-cus-new.el (gnus-custom-topic): New free variable.
-       (gnus-group-customize): Support editing topic parameters.
+Sat Mar  7 13:50:44 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-10-29 12:09:20  Karl Kleinpaste  <karl@jprc.com>
+       * nntp.el: Check whether the connection died.
 
-       * gnus-sum.el (gnus-summary-from-or-to-or-newsgroups): Add
-       indicators.
+1998-03-01  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
 
-1998-10-29 11:31:11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.texi (Easy Picons): Removed references to
+       `gnus-group-display-picons'.
+       (Hard Picons): Ditto.
 
-       * gnus-art.el (gnus-mm-display-part): Return.
-       (gnus-article-view-part): Only go if external.
-       (gnus-article-dumbquotes-map): Do 205.
+Mon Mar  2 16:17:36 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el (mm-display-part): Return what was done.
+       * gnus-sum.el (gnus-summary-exit-no-update): Run
+       gnus-summary-prepare-exit-hook here as well.
 
-       * message.el (message-buffer-naming-style): New variable.
-       (message-generate-new-buffers): Extended.
-       (message-buffer-naming-style): Removed.
-       (message-buffer-name): Use it.
-       (message-do-send-housekeeping): Rename new styling.
+Sat Feb 28 13:35:26 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-sum.el (gnus-summary-recenter): Allow
-       gnus-auto-center-summary to be a number.
+       * nntp.el (nntp-authinforc-file): Changed default.
+       (nntp-authinfo-file): Changed name.
+       (nntp-record-commands): New variable.
+       (nntp-record-command): New function.
 
-Wed Nov  4 02:24:39 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-agent.el (gnus-agent-group-path): Use real name of group.
 
-       * pop3.el (pop3-open-server): Use "binary" instead of
-       "no-conversion".
-
-Sun Nov  1 01:26:42 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-srvr.el (gnus-browse-foreign-server): Set
-       gnus-browse-current-method to the result of gnus-server-to-method.
-
-Thu Oct 29 01:47:44 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-util.el (gnus-pull): Another optional argument.
-       * nnweb.el (nnweb-request-delete-group): Delete from
-       nnweb-group-alist and update active file.
-
-Thu Oct 29 01:05:08 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-group.el (gnus-group-make-group): Accept group of new
-       method.
-
-Wed Oct 28 02:19:16 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * gnus-agent.el (gnus-agent-fetch-group-1): Update dribble.
-
-Tue Oct 27 11:59:31 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-view.el (mm-inline-text): Postion of html portion.
-
-1998-10-29 10:26:54  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * nntp.el (nntp-list-active-group): Waited for short strings.
-       (nntp-send-mode-reader): Ditto.
-       (nntp-open-connection): Ditto.
-
-       * gnus-int.el (gnus-request-group-articles): New function.
-
-       * nntp.el (nntp-request-listgroup): New function.
-       (nntp-request-group-articles): Renamed.
-
-1998-10-27 10:37:52  Karl Kleinpaste  <karl@jprc.com>
+       * gnus-sum.el (gnus-summary-insert-subject): Don't allow nil
+       articles.
+       (gnus-summary-read-group): Respect backward movement.
 
-       * nnheader.el (nnheader-parse-nov): Supply extra.
+1998-03-01  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
 
-1998-10-26 23:03:48  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-win.el (gnus-window-to-buffer): change "*Picons*" to
+       `gnus-picons-buffer'.
+       (gnus-window-to-buffer-helper): Support dynamic picon buffer
+       name (i.e a symbol that names a function to be called).
+       (gnus-configure-frame): Use it.
+       (gnus-delete-windows-in-gnusey-frames): Use it.
+       (gnus-all-windows-visible-p): Use it.
+       (gnus-remove-some-windows): Use it.
 
-       * gnus-art.el (gnus-button-push): Don't go to
-       gnus-article-buffer.
+       * 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.
 
-       * mm-view.el (mm-inline-image): Add a newline.
+Sat Feb 28 08:27:20 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-start.el (gnus-check-first-time-used): Check more.
+       * gnus.el: Quassia Gnus v0.34 is released.
 
-1998-10-26 23:03:29  Francois Felix Ingrand  <felix@laas.fr>
+Sat Feb 28 08:17:37 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-start.el (gnus-check-first-time-used): Check current.
+       * gnus.el: Quassia Gnus v0.33 is released.
 
-1998-10-26 22:07:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Feb 28 08:10:27 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-util.el (mm-find-charset-region): New function.
+       * gnus-picon.el (gnus-picons-display-x-face): `buf' -- unbound
+       var.
 
-       * ietf-drums.el (ietf-drums-narrow-to-header): Work when no header.
+Sat Feb 28 08:03:23 1998  François Pinard  <pinard@iro.umontreal.ca>
 
-       * gnus-art.el (gnus-mime-button-menu): Fix.
+       * gnus: configure'd.
 
-1998-10-26 22:07:43  Michael Welsh Duggan  <md5i@cs.cmu.edu>
+Sat Feb 28 07:43:00 1998  Nelson Jose dos Santos Ferreira  <Nelson.Ferreira@inesc.pt>
 
-       * gnus-art.el (gnus-mime-button-menu): New definition.
+       * nnsoup.el (nnsoup-store-reply): Fix double sep error.
 
-1998-10-26 01:46:11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Feb 28 07:01:17 1998  Lasse Rasinen  <lrasinen@iki.fi>
 
-       * gnus-art.el (article-decode-charset): Downcase charset.
-       (article-decode-charset): Pass on type.
-       (article-decode-charset): Check nil charsets.
-       (article-remove-cr): Translate CR to LF.
-       (gnus-ignored-mime-types): Default to nil.
+       * gnus-start.el (gnus-ask-server-for-new-groups): Message more.
 
-       * nnheader.el (nnheader-insert-nov): Work when not Xref.
+Fri Feb 27 13:26:34 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-sum.el (gnus-ignored-from-addresses): Default to
-       user-mail-address.
-       (gnus-nov-parse-extra): Didn't return right thing.
+       * message.el (message-resend): Allow arbitrary Also's.
 
-1998-10-25 23:25:27  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-02-27  Dave Love  <d.love@dl.ac.uk>
 
-       * gnus-xmas.el: Use compiled-function-p.
+       * gnus-sum.el (gnus-simplify-subject-functions): Fix
+       customization, doc.
 
-Mon Oct 26 14:37:19 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+1998-02-25  Dave Love  <d.love@dl.ac.uk>
 
-       * mm-decode.el (mm-copy-Yo-buffer): Make it works when no header.
+       * gnus-art.el (gnus-article-x-face-command): Replace leading `{'.
 
-Sun Oct 25 23:11:44 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Mon Feb 23 18:26:48 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.40 is released.
+       * gnus-agent.el (gnus-plugged): New command and keystroke.
 
-1998-10-25 21:41:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-ems.el (gnus-ems-redefine): Define
+       'gnus-summary-set-display-table as a function that takes no
+       params.
 
-       * gnus-sum.el (gnus-summary-mark-forward): Show thread.
+       * gnus.el (gnus-interactive): Don't use gnus-sum macros.
+       (gnus-valid-select-methods): Include nnlistserv.
 
-       * gnus-start.el (gnus-check-first-time-used): Ignore dribble.
+       * gnus.el: Autoloaded things to make byte-comp silent.
 
-       * gnus-agent.el (gnus-agent-fetch-group-1): Bind name.
+Mon Feb 23 18:06:47 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * nnml.el (nnml-possibly-create-directory): Check before making.
+       * gnus.el: Quassia Gnus v0.32 is released.
 
-1998-10-25 19:43:08  Kai Grossjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+Mon Feb 23 17:48:42 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * nnheader.el (nnheader-insert-nov): Don't infloop.
+       * gnus-cite.el (gnus-article-hide-citation-maybe): Wrong
+       interactive specs.
+       (gnus-cite-toggle): Maybe parse.
 
-1998-10-25 19:26:11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Mon Feb 23 05:26:11 1998  Rui-Tao Dong ~{6-HpLN~}  <rdong@internetmci.com>
 
-       * gnus-sum.el (gnus-set-mode-line): Check that the spec has been
-       set up.
+       * nnweb.el (nnweb-type-definition): Fixed.
 
-1998-10-25 19:22:03  Joerg Lenneis  <lenneis@statrix2.wu-wien.ac.at>
+Sun Feb 22 18:10:53 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * nneething.el (nneething-file-name): New definition.
+       * gnus-agent.el (gnus-agent-group-path): Translate right chars.
+       (gnus-agent-toggle-plugged): Allow proper closing.
 
-1998-10-25 17:56:23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-srvr.el (gnus-browse-read-group): Allow entering
+       non-ephemeral groups.
 
-       * gnus-art.el (gnus-treatment-function-alist): Fix.
-       (gnus-summary-save-in-rmail): Use gnus-output-to-rmail.
+Sun Feb 22 04:21:15 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * nndoc.el (nndoc-dissect-mime-parts-sub): Recognize first part.
+       * gnus.el: Quassia Gnus v0.31 is released.
 
-Sun Oct 25 06:23:13 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Sun Feb 22 02:09:35 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.39 is released.
+       * gnus-sum.el (gnus-summary-highlight): Give undownloaded marks a
+       better face.
 
-1998-10-25 00:34:39  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-score.el (gnus-score-set): Take optional "warn".
+       (gnus-summary-score-entry): Use it.
 
-       * gnus-art.el (gnus-ignored-mime-types): New variable.
-       (gnus-mime-display-single): Use it.
-       (gnus-treatment-function-alist): New variable.
+       * gnus.el: Removed spurious * in defcustoms.
 
-       * gnus.el (gnus-mime): New group.
+       * gnus-score.el (gnus-score-load-file): Reverse logic.
 
-       * gnus-art.el (gnus-mime-display-alternative): Don't destroy
-       things for other parts.
-       (gnus-mime-display-alternative): Place point.
+       * gnus-cite.el (gnus-article-hide-citation): Use markers to make
+       things work when wrapping.
 
-       * gnus.el: autoload gnus-uu-post-news.
+       * gnus-sum.el (gnus-summary-exit): Stop prefetch.
 
-       * mailcap.el (mailcap-mailcap-entry-passes-test): Also check
-       needsterm/DISPLAY.
+Sat Feb 21 02:12:42 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el (mm-display-part): Default to inline text/.*
-       parts.
+       * gnus-sum.el (gnus-get-newsgroup-headers): Buggy regexp.
 
-       * mm-bodies.el (mm-decode-content-transfer-encoding): Default to
-       8bit.
+Sat Feb 21 00:51:22 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-art.el (gnus-mime-copy-part): Use normal-mode.
-       (gnus-mime-display-single): Inline all text parts.
-       (gnus-article-narrow-to-signature): Removed mime:: stubs.
+       * gnus.el: Quassia Gnus v0.30 is released.
 
-1998-10-24 21:38:37  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Feb 21 00:09:14 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * nnml.el (nnml-possibly-create-directory): Rewrite.
-       (nnml-request-create-group): Change to right server.
+       * gnus-sum.el (gnus-summary-mark-article): Don't do anything if
+       the mark doesn't change.
 
-       * gnus-xmas.el (gnus-xmas-define): Use byte-code-function-p.
+       * gnus-art.el (gnus-article-prepare): Don't enter article into
+       cache.
 
-       * gnus-sum.el (gnus-set-mode-line): Use truncate-string-to-width.
+       * gnus-sum.el (gnus-summary-reparent-thread): Don't mark as read.
+       (gnus-summary-mark-article): Don't do cache things here.
 
-       * gnus.el: rmail-output-to-rmail-file autoload.
+       * gnus-util.el (gnus-parse-netrc): Skip past macdefs.
 
-       * gnus-util.el (gnus-output-to-rmail): Didn't work if not in
-       Gnus.
+Fri Feb 20 22:56:22 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * nnheader.el (nnheader-parse-head): Checked wrong variable.
+       * gnus-srvr.el (gnus-browse-unsubscribe-group): Wouldn't allow
+       unsubscription.
 
-       * gnus-sum.el (gnus-summary-update-mark): Ignore nil'd marks.
+       * gnus-sum.el (gnus-summary-insert-subject): Allow inserting
+       articles outside limits.
 
-Tue Oct 20 23:37:43 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-start.el (gnus-dribble-enter): Update mode line.
 
-       * gnus-art.el (gnus-mime-display-mixed): Multipart in
-       mixed part.
+       * gnus-srvr.el (gnus-browse-unsubscribe-group): Allow
+       unsubscription.
 
-Tue Oct 20 23:36:43 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-picon.el (gnus-article-display-picons): Check that the
+       extents are live first.
 
-       * gnus-sum.el (gnus-summary-exit): Use mm-destroy-parts.
+Thu Feb 19 15:13:44 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-sum.el (gnus-summary-exit-no-update): Ditto.
+       * gnus-group.el (gnus-useful-groups): Include gnus-bug.
 
-Tue Oct 20 16:22:51 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+Thu Feb 19 02:28:17 1998  Jens-Ulrik Holger Petersen  <petersen@kurims.kyoto-u.ac.jp>
 
-       * mm-uu.el (mm-uu-dissect): Create pseudo multipart head.
+       * gnus.el (gnus-group-history): Defined twice.
 
-1998-10-24 20:51:53  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Thu Feb 19 01:58:47 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-sum.el (gnus-valid-move-group-p): Make sure group has a
+       * gnus-sum.el (gnus-get-newsgroup-headers): Just use the header
        value.
+       (gnus-summary-exit): Set global vars.
 
-       * gnus-art.el (gnus-article-hidden-text-p): Return nil when not
-       hidden.
-
-       * gnus-spec.el (gnus-update-format-specifications): Use the
-       article mode line spec.
-
-       * gnus-art.el (gnus-insert-mime-button): Put right type.
-       (gnus-insert-prev-page-button): Ditto.
-       (gnus-insert-next-page-button): Dutti.
-
-       * pop3.el: New version installed.
-
-Sat Oct 24 16:48:51 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
-
-       * mm-uu.el (mm-uu-dissect): Delete the begining spurious newline
-       and display last part.
-
-Sat Oct 24 20:31:55 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
-
-       * gnus.el: Pterodactyl Gnus v0.38 is released.
-
-1998-10-24 07:54:58  Lars Magne Ingebrigtsen  <larsi@gnus.org>
-
-       * gnus-art.el (article-mime-decode-quoted-printable-buffer):
-       Removed.
-       (article-de-quoted-unreadable): Narrow to default.
-
-       * qp.el (quoted-printable-encode-region): Encode before QP-ing.
-
-       * gnus-art.el (article-decode-charset): Decode even when broken
-       MIME.
-
-       * gnus-sum.el (gnus-summary-from-or-to-or-newsgroups): Return
-       name.
-
-       * gnus-msg.el (gnus-copy-article-buffer): Delete headers.
-
-       * gnus-cache.el (gnus-cache-possibly-enter-article): Use
-       nnheader.
+Tue Feb 17 07:17:49 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * nnmail.el (nnmail-extra-headers): New variable.
+       * gnus-sum.el (gnus-summary-stop-page-breaking): Mark page as no
+       longer broken.
+       (gnus-summary-exit): Purge the real name.
 
-       * nnheader.el (nnheader-insert-nov): Insert extra.
+Tue Feb 17 07:00:43 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus.el (gnus-summary-line-format): Doc fix.
+       * gnus.el: Quassia Gnus v0.29 is released.
 
-       * gnus-sum.el (gnus-get-newsgroup-headers): Parse extra.
-       (gnus-nov-parse-line): Ditto.
-       (gnus-nov-parse-extra): New macro.
-       (gnus-header): New function.
-       (gnus-update-summary-mark-positions): Change.
-       (gnus-ignored-from-addresses): New variable.
-       (gnus-summary-insert-from-or-to): New function.
+Tue Feb 17 06:15:03 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el (gnus-extra-headers): New variable.
+       * nnmail.el (nnmail-purge-split-history): List of alists, not
+       alist.
 
-       * nnheader.el (make-mail-header): Expand.
-       (mail-header-extra): New macro.
-       (mail-header-set-extra): Ditto.
-       (make-full-mail-header): Expand.
+Mon Feb 16 20:22:04 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-Sat Oct 24 07:41:42 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus.el: Quassia Gnus v0.28 is released.
 
-       * gnus.el: Pterodactyl Gnus v0.37 is released.
+1998-02-16  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-10-24 07:29:11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-dont-send): Make sure the article really is
+       saved.
 
-       * mm-bodies.el (mm-decode-body): Check for multibyticity.
+       * nnmail.el (nnmail-purge-split-history): Alist; not a list of
+       alists.
 
-       * mm-util.el (mm-enable-multibyte): Don't always switch multibyte
-       on.
+1998-02-16  Hrvoje Niksic  <hniksic@srce.hr>
 
-1998-10-22  Didier Verna  <verna@inf.enst.fr>
+       * message.el (message-kill-to-signature): Do the right thing when
+       there is no signature.
 
-       * gnus-spec.el (gnus-balloon-face-function): new function
-       (gnus-parse-format): understand the %< %> specifiers
-       (gnus-parse-complex-format): ditto.
+1998-02-16  Hrvoje Niksic  <hniksic@srce.hr>
 
-1998-10-24 06:31:33  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-elide-elipsis): Add type and group.
+       (message-elide-region): Docfix.
 
-       * gnus.el: Changed following-char to char-after throughout.
+1998-02-16  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-10-22 04:05:55  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-util.el (gnus-run-hooks): Use unwind-protect instead of
+       save-excursion.
 
-       * mm-decode.el (mm-display-external): Protect more and message.
+1998-02-16  Per Abrahamsen  <abraham@dina.kvl.dk>
 
-Wed Oct 21 03:26:30 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * nntp.el (nntp-authinforc-file): Customized.
 
-       * gnus-xmas.el (gnus-xmas-article-push-button): Go to the
-       position.
+Mon Feb 16 03:18:33 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Tue Oct 20 23:37:43 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-nocem.el (gnus-nocem-unwanted-article-p): Don't look if the
+       hashtable doesn't exist.
 
-       * gnus-art.el (gnus-mime-display-mixed): Multipart in
-       mixed part.
+       * gnus-start.el (gnus-ask-server-for-new-groups): Make sure the
+       killed groups hashtable exists.
 
-Tue Oct 20 23:36:43 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+Sun Feb 15 23:02:11 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-sum.el (gnus-summary-exit): Use mm-destroy-parts.
+       * nntp.el (nntp-authinforc-file): Changed name and default.
+       (nntp-send-authinfo): Use it.
 
-       * gnus-sum.el (gnus-summary-exit-no-update): Ditto.
+Sun Feb 15 19:50:10 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-Tue Oct 20 16:22:51 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus.el: Quassia Gnus v0.27 is released.
 
-       * mm-uu.el (mm-uu-dissect): Create pseudo multipart head.
+Sun Feb 15 19:41:14 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-10-21  Hrvoje Niksic  <hniksic@srce.hr>
+       * gnus.el (gnus-ephemeral-servers): New variable.
+       * gnus-srvr.el (gnus-server-prepare): Use it.
+       * gnus-group.el (gnus-group-read-ephemeral-group): Ditto.
 
-       * mailcap.el (mailcap-save-binary-file): Use unwind-protect.
+Sun Feb 15 19:35:11 1998  Kurt Swanson  <kurt@dna.lth.se>
 
-       * mm-decode.el (mm-display-external): Set undisplayer to mm
-       buffer, not the current buffer; use unwind-protect.
+       * gnus-art.el (gnus-article-read-summary-keys): Go to top on
+       some.
 
-1998-10-21 00:07:59  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Feb 15 19:26:21 1998  SeokChan LEE  <chan@xfer.kren.nm.kr>
 
-       * gnus-sum.el (gnus-summary-exit): Destroy parts.
-       (gnus-summary-exit-no-update): Ditto.
+       * message.el (message-ignored-supersedes-headers): Fix.
 
-1998-10-20 22:02:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Feb 15 18:39:15 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el (mm-inline-media-tests): Look for w3.
+       * gnus-salt.el (gnus-tree-close): Start killing buffer again.
 
-       * mailcap.el (mailcap-mime-data): Inline html.
+       * gnus-sum.el (gnus-mark-article-as-read): Return t.
 
-Tue Oct 20 20:25:03 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-art.el (gnus-article-edit-mode): Run text mode hook.
 
-       * gnus.el: Pterodactyl Gnus v0.36 is released.
+Sun Feb 15 17:31:19 1998  Roland Roberts  <rroberts@muller.com>
 
-1998-10-20 18:13:08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-nov-parse-line): Would bug out on bogus
+       References headers.
 
-       * gnus-art.el (article-translate-strings):
-       (gnus-article-dumbquotes-map): Don't dot.
+Sun Feb 15 14:23:51 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * pop3.el (pop3-open-server): Set point right.
+       * gnus-art.el (gnus-article-current-summary): New variable.
+       (gnus-article-mode): Make it local.
 
-       * mm-decode.el (mm-dissect-multipart): Dissect hierarchically.
-       (mm-dissect-buffer): Ditto.
-       (mm-destroy-part): Ignore non-handles.
-       (mm-remove-part): Ditto.
-       (mm-destroy-parts): New function.
-       (mm-remove-parts): Ditto.
+       * gnus-score.el (gnus-summary-increase-score): Find the right
+       global score file.
 
-       * gnus-art.el (gnus-mm-display-part): Don't move point.
+       * gnus-start.el (gnus-setup-news): Don't find new newsgroups
+       unless plugged.
 
-Tue Oct 20 02:16:36 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * message.el (message-mode): Set font-lock things before running
+       mode hook.
 
-       * mm-uu.el : New file.
+       * gnus-agent.el (gnus-agent-group-path): Respect long file names.
 
-       * gnus-art.el (gnus-display-mime): Dissect uu stuffs.
+Sat Feb 14 21:31:25 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-bodies.el (mm-decode-content-transfer-encoding): Encoding as
-       a function.
+       * gnus-sum.el (gnus-summary-goto-last-article): Force jumping to
+       articles outside limit.
 
-1998-10-20 00:35:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-agent.el (gnus-agent-toggle-plugged): un/plug before hook.
 
-       * mm-decode.el (mm-display-external): Check before selecting.
+Sat Feb 14 21:08:03 1998  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
 
-Sat Sep 26 02:03:00 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-xmas.el (gnus-xmas-article-display-xface): t t would make
+       faces disappear.
 
-       * gnus-sum.el (gnus-multi-decode-encoded-word-string): Rewrite.
+Sat Feb 14 20:52:34 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-sum.el (gnus-decode-encoded-word-methods): New variable.
+       * nntp.el (nntp-netrc-file): New variable.
 
-       * gnus-sum.el (gnus-decode-encoded-word-methods-cache): New
-       variable.
-
-       * gnus-sum.el (gnus-encoded-word-method-alist): Deleted.
-
-       * gnus-art.el (gnus-decode-header-methods): New variable.
-
-       * gnus-art.el (gnus-decode-header-methods-cache): New variable.
+Sat Feb 14 19:28:01 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-art.el (gnus-multi-decode-header): New function.
+       * gnus.el: Quassia Gnus v0.26 is released.
 
-Tue Oct 20 00:24:16 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Sat Feb 14 18:40:55 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.35 is released.
+       * gnus-agent.el (gnus-agent-directory): Translate file chars.
 
-1998-10-20 00:00:36  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-summary-print-article): Don't display all
+       headers.
+       (gnus-summary-edit-parameters): New command and keystroke.
 
-       * uudecode.el (uudecode-decode-region-external): Insert
-       literally.
+       * gnus-group.el (gnus-group-rename-group): Mark dribble.
 
-       * gnus-xmas.el (gnus-xmas-mime-button-menu): Moved here.
+Sat Feb 14 18:39:45 1998  Fred Oberhauser  <foberhauser@psipenta.de>
 
-       * mm-bodies.el (mm-decode-body): Optional encoding.
+       * nnmail.el (nnmail-process-babyl-mail-format): Fix point
+       movement.
 
-1998-10-19 23:57:57  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Feb 14 18:31:39 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-ems.el (gnus-mouse-3): New variable.
+       * gnus.el (gnus-group-get-parameter): Dix fix.
 
-       * binhex.el (binhex-decode-region-external): Don't use -internally.
+Sat Feb 14 18:29:12 1998  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
 
-1998-10-16 14:54:02  Simon Josefsson  <jas@pdc.kth.se>
+       * gnus-picon.el: Updated documentation.
 
-       * mailcap.el (mailcap-parse-mailcaps): Only open regular
-       files.
+Sat Feb 14 18:26:53 1998  Joev Dubach  <dubach@dcepea.harvard.edu>
 
-1998-09-26 22:28:01  Simon Josefsson  <jas@pdc.kth.se>
+       * nntp.el (nntp-send-authinfo-from-file): Doc fix.
 
-       * gnus-group.el (gnus-add-marked-articles): Request backend update
-       of flags.
+Sun Jan 11 23:44:12 1998  Ken Raeburn  <raeburn@cygnus.com>
 
-1998-09-26 19:39:31  Simon Josefsson  <jas@pdc.kth.se>
+       * nnagent.el (nnagent-request-update-info): New no-op fn.
 
-       * gnus-sum.el (gnus-update-read-articles):
-       (gnus-update-marks): Request backend update of mark.
+Sat Feb 14 17:41:44 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-26 19:33:58  Simon Josefsson  <jas@pdc.kth.se>
+       * gnus-srvr.el (gnus-browse-unsubscribe-group): Wouldn't allow
+       subscription of visited groups.
 
-       * gnus.texi (Optional Backend Functions): New item,
-       nnchoke-request-set-mark.
+       * gnus-util.el (gnus-run-hooks): New function.
+       Use it everywhere.
 
-1998-09-26 16:27:27  Simon Josefsson  <jas@pdc.kth.se>
+       * nntp.el (nntp-authinfo-password): New variable.
+       (nntp-send-authinfo): Cache authinfo password.
 
-       * gnus-range.el (gnus-remove-from-range): Don't add stuff in
-          list to range.
+       * gnus-sum.el (gnus-summary-mark-article-as-unread): Don't do
+       anything if the mark doesn't change.
 
-1998-10-19 23:45:13  Simon Josefsson  <jas@pdc.kth.se>
+1998-01-17  Simon Josefsson  <jas@pdc.kth.se>
 
-       * gnus-sum.el (gnus-summary-exit-no-update): Don't expire.
+       * gnus-sum.el (gnus-summary-work-articles): change buffer
+       before looking at marked articles
+       (gnus-summary-work-articles): better check of marked articles
 
-1998-10-14  SL Baur  <steve@altair.xemacs.org>
+Sat Feb 14 15:10:36 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-sum.el: Move gnus-save-hidden-threads above where it is
-       first used.
+       * nntp.el (nntp-send-authinfo): Use new .netrc functionality.
 
-1998-10-10  SL Baur  <steve@altair.xemacs.org>
+       * gnus-util.el (gnus-netrc-syntax-table): New variable.
+       (gnus-parse-netrc): New function.
+       (gnus-netrc-machine): Ditto.
+       (gnus-netrc-get): Ditto.
 
-       * mm-view.el: Require mm-decode for macros.
+       * gnus-draft.el (gnus-draft-make-menu-bar): Added deletion.
 
-       * mm-decode.el (mm-handle-type): Move macro declarations above the
-       place where they are used.
+       * gnus.el (gnus-expert-user): Dix fox.
 
-Sun Oct 18 13:59:07 1998  Kurt Swanson  <ksw@dna.lth.se>
+       * nnmail.el (nnmail-article-group): Remove duplicates from split.
 
-        * gnus-msg.el (gnus-summary-mail-forward): Erase old forward
-        buffer.
+       * message.el (message-check-news-header-syntax): Check more on
+       Message-ID.
 
-1998-10-19 23:38:11  Katsumi Yamaoka  <yamaoka@ga.sony.co.jp>
+       * nnmh.el: Don't call nnmail-activate.
 
-       * nnagent.el (nnagent-open-server): Error message.
+       * gnus.el: User-variabelize all custom vars.
 
-1998-10-19 23:35:08  Joerg Lenneis  <lenneis@statrix2.wu-wien.ac.at>
+Fri Feb 13 22:40:39 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * nnheader.el (nnheader-article-p): Recognize lower-case headers.
+       * gnus.el: Quassia Gnus v0.25 is released.
 
-1998-10-19  Hrvoje Niksic  <hniksic@srce.hr>
+Fri Feb 13 19:01:19 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * score-mode.el (gnus-score-mode-map): Ditto.
+       * nndoc.el (nndoc-type-alist): Allow blank lines to separate
+       headers from bodies.
 
-       * message.el (message-mode-map): Ditto.
+       * gnus-art.el (gnus-article-edit): Restore Date header.
 
-       * gnus-uu.el (gnus-uu-post-news): Ditto.
+       * gnus-async.el (gnus-asynch-obarray): New variable.
+       (gnus-async-prefetched-article-entry): Use it.
+       (gnus-async-set-buffer): Use it.
 
-       * gnus-kill.el (gnus-kill-file-mode-map): Ditto.
+       * nnmh.el (nnmh-active-number): Create parent dirs.
 
-       * gnus-eform.el (gnus-edit-form-mode-map): Ditto.
+       * nntp.el (nntp-last-command): New variable.
+       (nntp-handle-authinfo): New function.
 
-       * gnus-art.el (gnus-article-edit-mode-map): Use
-       `set-keymap-parent' rather than `copy-keymap'.
+       * gnus-sum.el (gnus-summary-exit): Call purging function.
 
-1998-10-18  Hrvoje Niksic  <hniksic@srce.hr>
+Fri Feb 13 18:59:16 1998  François Pinard  <pinard@iro.umontreal.ca>
 
-       * gnus-art.el (gnus-mime-button-commands): New variable.
-       (gnus-mime-button-map): Initialize it from
-       `gnus-mime-button-commands'.
-       (gnus-mime-button-menu): New function.
-       (gnus-insert-mime-button): Use `gnus-mime-button-map'.
+       * nnmail.el (nnmail-get-new-mail): Don't clear split-history.
+       (nnmail-purge-split-history): New function.
 
-1998-10-11  Hrvoje Niksic  <hniksic@srce.hr>
+Fri Feb 13 18:36:16 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.el (message-insert-to): Make `nobody' and `poster'
-       synonymous to `never' and `always' in Mail-Copies-To.
-       (message-reply): Ditto.
-       (message-followup): Ditto.
+       * nntp.el (nntp-telnet-shell-prompt): Renamed.
 
-1998-10-19 23:17:41  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Fri Feb 13 18:35:23 1998  Sam Falkner  <samf@channelpoint.com>
 
-       * mailcap.el (mailcap-mime-data): Save sound.
+       * nntp.el (nntp-open-telnet-envuser): New variable.
 
-1998-09-24  Hrvoje Niksic  <hniksic@srce.hr>
+Fri Feb 13 18:29:23 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.el (message-ignored-supersedes-headers): Include
-       `NNTP-Posting-Date'.
+       * message.el (message-send-mail-function): Added smtpmail-send-it.
 
-1998-10-19 01:25:27  Jonas Steverud  <d4jonas@dtek.chalmers.se>
+1998-02-11  Dave Love  <d.love@dl.ac.uk>
 
-       * gnus-art.el (gnus-article-dumbquotes-table): New variable.
+       * 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.
 
-1998-10-19 00:50:22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Fri Feb 13 17:10:31 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-bodies.el (mm-decode-content-transfer-encoding): Use
-       uudecode.
+       * gnus-cite.el (gnus-cite-localize): New function.
+       (gnus-cite-close): Renamed.
+       (gnus-cite-parse-maybe): Use it.
 
-1998-10-18 18:20:34  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-summary-move-article): Move back to summary
+       buffer.
 
-       * mm-decode.el (mm-display-external): Don't switch on save.
+       * nnfolder.el (nnfolder-request-accept-article): Save excursion.
+       (nnfolder-request-move-article): Ditto.
 
-1998-10-18 18:14:06  Andy Piper  <andyp@parallax.co.uk>
+       * nntp.el (nntp-find-connection): Don't message.
 
-       * nnmail.el (nnmail-movemail-args): New variable.
+Fri Feb 13 14:51:56 1998  MORIOKA Tomohiko  <steve@xemacs.org>
 
-1998-10-18 00:17:02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-send-mail-with-qmail): Fix.
 
-       * gnus-art.el (article-translate-strings):
+1998-02-13  Per Abrahamsen  <abraham@dina.kvl.dk>
 
-1998-10-17 22:51:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-draft.el (gnus-draft-make-menu-bar): Added missing commands.
 
-       * gnus-art.el (gnus-article-view-part): Use it.
-       (gnus-mm-display-part): New function.
-       (article-de-quoted-unreadable): Yse mm-default-coding-system.
+1998-01-06  Per Abrahamsen  <abraham@dina.kvl.dk>
 
-       * mm-decode.el (mm-handle-displayed-p): New function.
+       * gnus/gnus-cus.el (gnus-score-parameters): Make `files' and
+       `exclude-files' widgets inline.
 
-       * gnus-art.el (gnus-mime-copy-part): Create better names.
-       (gnus-mime-button-line-format): Include dots spec.
+Fri Feb 13 12:46:23 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-10-15  Matt Pharr  <mmp@graphics.stanford.edu>
+       * gnus-sum.el (gnus-article-mark): Dox dox.
 
-      * gnus-msg.el (gnus-summary-mail-forward): Erase contents of old
-      forward buffer first.
+Wed Feb 11 15:05:03 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1998-10-17 21:16:46  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el: Quassia Gnus v0.24 is released.
 
-       * gnus-util.el (gnus-set-window-start): New function.
+Tue Feb 10 21:59:53 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.el (message-send): Don't check changed.
+       * gnus-agent.el (gnus-agent-fetch-session): Reversed reversal.
 
-1998-10-12 15:26:41  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-topic.el (gnus-topic-rename): Check whether the new name
+       exists.
 
-       * gnus-art.el (gnus-article-setup-buffer): Set params.
+Tue Feb 10 21:39:47 1998  dave edmondson  <dme@sco.com>
 
-       * mm-decode.el (mm-user-display-methods): Inline
-       "message/delivery-status".
+       * message.el (message-font-lock-keywords): Allow : as a citation
+       ending.
 
-1998-10-11 07:06:38  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Tue Feb 10 20:09:02 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.el (message-auto-save-directory): Rename.
-       (message-mode): Dof fix.
+       * message.el (message-send): Removed dead code.
 
-       * gnus-art.el (gnus-summary-save-in-pipe): Default to "cat".
-       (gnus-summary-save-in-pipe): No, check gnus-last-shell-command.
+Mon Feb  9 17:02:09 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * nndoc.el (nndoc-mime-parts-type-p): Be a bit more forgiving.
+       * message.el (message-fill-header): Fill to column 990.
 
-       * message.el (message-make-date): Avoid locale.
+       * gnus-score.el (gnus-score-load-file): Exclude all excluded
+       files.
 
-       * gnus-art.el (gnus-article-edit-done): Allow update before doing
-       cache.
+Mon Feb  9 16:55:41 1998  jari aalto  <jari.aalto@poboxes.com>
 
-       * mm-decode.el (mm-display-inline): Goto point-min.
+       * gnus-art.el (gnus-article-time-format): Extended variable.
 
-       * gnus-art.el (gnus-article-prepare-display): Not read-only.
+Mon Feb  9 16:27:59 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el (mm-display-external): Reverse before sorting.
+       * gnus-art.el (article-make-date-line): Make 8601 Dates.
+       (article-date-iso8601): New command and keystroke.
 
-       * gnus-draft.el (gnus-draft-send): Allow mail.
+Sun Feb  8 21:19:15 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-10-10 -SL Baur  <steve@altair.xemacs.org>
+       * message.el (message-ignored-mail-headers): Remove Xrefs.
 
-       * message.el (message-check): Move message-check macro above where
-       it is first used.
+       * nndoc.el (nndoc-open-document-hook): New variable.
 
-       * gnus-art.el (article-hide-pgp): Hide the PGP 5/GNUPG Hash: line.
+Sun Feb  8 21:01:33 1998  Istvan Marko  <istvan@cmdmail.amd.com>
 
-1998-10-11 06:45:37  Lloyd Zusman  <ljz@asfast.com>
+       * gnus-agent.el (gnus-unplugged): Typo fix.
 
-       * gnus-sum.el (gnus-summary-make-menu-bar): Fix.
+Sun Feb  8 18:34:31 1998  Kurt Swanson  <kurt@dna.lth.se>
 
-Sun Oct 11 02:28:40 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-score.el (gnus-score-thread-simplify): New variable.
 
-       * gnus.el: Pterodactyl Gnus v0.34 is released.
+Sun Feb  8 18:31:35 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-10-11 02:15:41  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-uu.el (gnus-uu-post-encode-mime): Call mmencode with
+       correct params.
 
-       * mm-decode.el (mm-inline-media-tests): delivery-status.
+Sun Feb  8 18:13:58 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * mm-view.el (mm-inline-text): Provide default.
+       * gnus.el: Quassia Gnus v0.23 is released.
 
-1998-10-11 01:01:37  Lloyd Zusman  <ljz@asfast.com>
+Sun Feb  8 17:20:40 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mailcap.el (mailcap-possible-viewers): Fix nils.
+       * gnus-group.el (gnus-update-group-mark-positions): Bind `topic'.
 
-1998-10-11 00:03:37  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-expand-group): Added doc string.
 
-       * gnus-art.el (gnus-article-edit-exit): Don't do updates.
-       (article-update-date-lapsed): Record the buffer.
-       (article-update-date-lapsed): Do all windows that display article
-       buffers.
+       * nntp.el (nntp-wait-for): Don't change limit until after
+       accepting output.
 
-       * nnml.el (nnml-generate-nov-databases-1): Ditto.
+Sun Feb  8 16:44:36 1998  Richard Hoskins  <rmh@interlaced.net>
 
-       * gnus-score.el (gnus-score-score-files-1): Ignore dotted files.
+       * message.el (message-kill-to-signature): Don't kill the
+       delimiter.
 
-       * gnus-art.el (gnus-insert-mime-button): Mark buttons as
-       annoations.
+Sun Feb  8 16:15:33 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-msg.el (gnus-summary-mail-forward): Decode properly.
+       * gnus-sum.el (gnus-summary-prepared-hook): New hook.
+       (gnus-summary-read-group-1): Use it.
 
-1998-10-10 22:07:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-cite-original-without-signature): New
+       function.
+       (message-cite-function): Added to custom.
 
-       * gnus-agent.el (gnus-category-add): Change default category to
-       'false.
+1998-01-13  Per Abrahamsen  <abraham@dina.kvl.dk>
 
-       * nnvirtual.el (nnvirtual-update-read-and-marked): Don't nix out
-       scores.
+       * gnus/message.el (message-cite-original): Don't quote signature.
 
-       * gnus-draft.el (gnus-draft-send): Check server more.
+Sun Feb  8 15:50:20 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-article-view-part): New command and keystroke.
-       (gnus-article-goto-part): New function.
+       * gnus-group.el (gnus-group-unsubscribe-group): Protest against
+       empty group names.
 
-       * mm-view.el (mm-inline-text): Insert richtext properly.
+Mon Feb  2 18:56:22 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-insert-mime-button): Store handle in alist.
+       * gnus-draft.el (gnus-draft-setup): Associate with drafts group.
 
-1998-10-03 15:04:27  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-header-format-alist): Fill references.
 
-       * parse-time.el (parse-time-rules): Accept dates far into the past
-       and the future, and parse single-digit numbers as years.
+       * gnus-agent.el (gnus-category-read): Changed default.
+       (gnus-agent-handle-level): New variable.
+       (gnus-agent-fetch-session): Use it.
 
-1998-10-02 04:46:46  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-art.el (article-strip-all-blank-lines): New command and
+       keystroke.
 
-       * mm-decode.el (mm-display-external): Chop off directories.
+Sun Feb  1 18:00:54 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-10-01 07:33:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-msg.el (gnus-inews-reject-message): Removed function.
+       (gnus-sent-message-ids-file): Removed.
+       (gnus-sent-message-ids-length): Ditto.
 
-       * uudecode.el (uu-decode-region-external): Use
-       insert-file-contents-literally.
+       * gnus-xmas.el (gnus-xmas-summary-set-display-table): Ditto.
 
-       * gnus-cache.el (gnus-cache-generate-active): Translate _ to :.
+       * gnus-sum.el (gnus-simplify-subject-fuzzy): Respect
+       `gnus-simplify-ignored-prefixes'.
+       (gnus-summary-set-display-table): Keep TAB.
 
-1998-10-01 07:02:11  Shenghuo ZHU  <zsh@cs.rochester.edu>
+Thu Jan 15 22:47:38 1998   <Use-Author-Address-Header@[127.1]>
 
-       * uudecode.el: New file.
+       * gnus-art.el (gnus-request-article-this-buffer): Put it into the
+       backlog.
 
-       * mm-bodies.el (mm-decode-content-transfer-encoding): Do
-       x-uuencode.
+Mon Jan 12 23:30:59 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-10-01 05:19:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-get-newsgroup-headers): Use the longest ID.
 
-       * gnus-art.el (gnus-mime-display-alternative): Set faces.
+       * nnheader.el (nnheader-parse-head): Ditto.
 
-       * message.el (message-fetch-field): Unfold properly.
+Thu Jan  8 09:47:18 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-bodies.el (mm-decode-content-transfer-encoding): Replace CRLF
-       in text/plain.
+       * gnus-start.el (gnus-1): Use gnus-alive-p.
 
-1998-09-30 05:47:49  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Tue Jan  6 11:53:09 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-sum.el (gnus-summary-first-unread-subject): New command.
-       (gnus-auto-select-first): Removed.
-       (gnus-auto-select-first): Extended.
-       (gnus-summary-read-group-1): Use new value.
+       * gnus-art.el (gnus-article-prepare): Bind coding systems.
 
-1998-09-29 13:21:06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Tue Jan  6 07:45:39 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * message.el (message-fix-before-sending): Space.
+       * gnus.el: Quassia Gnus v0.22 is released.
 
-       * nnmail.el (nnmail-find-file): Don't erase.
+Tue Jan  6 07:32:02 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Wed Sep 30 23:49:03 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * message.el (message-kill-to-signature): Don't use mark.
 
-       * gnus-agent.el (gnus-agent-fetch-headers): Do not decode headers.
+Tue Jan  6 07:30:46 1998  Russ Allbery  <rra@stanford.edu>
 
-Wed Sep 30 23:46:29 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * message.el (message-kill-to-signature): New command and keystroke.
 
-       * gnus-soup.el (gnus-soup-add-article): Do not decode headers.
+Tue Jan  6 06:39:29 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Wed Sep 30 23:44:08 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus-sum.el (gnus-summary-print-article): New defaults for
+       headers and stuff.
 
-       * gnus-soup.el (gnus-soup-pack-packet): Pack only if necesary.
+       * gnus-agent.el (gnus-agent-batch): New command.
 
-Sat Sep 26 03:04:18 1998  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * nnoo.el (nnoo-execute): Copy vars from parent into child.
+       (nnoo-parent-function): Ditto.
 
-       * mm-util.el (mm-with-unibyte-buffer): Make it work in XEmacs
-       20.4.
+       * gnus-draft.el (gnus-draft-setup): Removed message.
 
-1998-09-29 11:35:09  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-start.el (gnus-read-descriptions-file): Naked muleism.
 
-       * gnus-art.el (gnus-mime-view-all-parts): New command and
-       keystroke.
+Mon Jan  5 05:20:16 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el (mm-display-external): Translate slashes.
+       * nnml.el (nnml-generate-nov-databases-1): Fix lower bound on
+       empty groups.
 
-       * nnmail.el (nnmail-find-file): Restrict auto-mode-alist.
+Sun Jan  4 14:38:36 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * nndraft.el (nndraft-retrieve-headers): Don't copy so much.
+       * gnus.el: Quassia Gnus v0.21 is released.
 
-       * mm-decode.el (mm-quote-arg): Quote spaces.
-       (mm-display-external): Quote args.
+Sun Jan  4 14:28:35 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1998-09-24 22:27:55  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el: Quassia Gnus v0.20 is released.
 
-       * mm-decode.el (mm-inlinable-part-p): New function.
+1997-12-10  Per Abrahamsen  <abraham@dina.kvl.dk>
 
-1998-09-25 22:28:01  Simon Josefsson  <jas@pdc.kth.se>
+       * gnus/gnus-msg.el (gnus-inews-insert-mime-headers): Added
+       documentation.
+       (gnus-inews-insert-mime-headers): Made it work with Emacs MULE.
+       (gnus-inews-insert-mime-headers): Added as option to
+       `message-header-hook'.
 
-       * mm-util.el (mm-disable-multibyte): New function.
+1997-12-22  Per Abrahamsen  <abraham@dina.kvl.dk>
 
-Thu Sep 24 20:28:31 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus/gnus-art.el (gnus-button-alist): Assume msg-id after "in
+       message".
 
-       * gnus.el: Pterodactyl Gnus v0.33 is released.
+1997-12-22  Simon Josefsson  <jas@faun.nada.kth.se>
 
-1998-09-24 18:47:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnmail.el (nnmail-get-new-mail): Make nnmail-tmp-directory
 
-       * gnus-art.el (gnus-insert-mime-button): Get buffer size.
+1997-12-28  Per Abrahamsen  <abraham@dina.kvl.dk>
 
-       * mm-decode.el (mm-display-external): Don't switch for externals.
-       (mm-dissect-multipart): Don't include end-sep.
+       * gnus/gnus-group.el (gnus-group-fetch-faq): Convert `.' in group
+       name to `/'.
 
-       * mm-util.el (mm-get-coding-system-list): New function.
-       (mm-coding-system-list): New variable.
+Sun Jan  4 13:35:14 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Thu Sep 24 02:08:10 1998  ZHU Shenghuo  <zsh@cs.rochester.edu>
+       * nndraft.el (nndraft-request-associate-buffer): Open the damn
+       server first.  Sheesh.
 
-       * gnus-cus.el (gnus-group-parameters): Add charset as a parameter
+       * gnus-draft.el (gnus-draft-send): Bind message-send-hook to nil.
 
-Thu Sep 24 02:05:48 1998  ZHU Shenghuo  <zsh@cs.rochester.edu>
+       * gnus-sum.el (gnus-summary-catchup): Don't nix out downloadable.
+       (gnus-summary-highlight): Highlight down/un as unread.
 
-       * gnus-cus.el (gnus-group-customize): Use variable as cons not as
-       group
+Sun Jan  4 13:27:31 1998  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
 
-Thu Sep 24 01:41:03 1998  ZHU Shenghuo  <zsh@cs.rochester.edu>
+       * gnus-start.el (gnus-strip-killed-list): Fix syntax.
 
-       * base64.el (base64-run-command-on-region): External base64
-       decoder do not use coding system
+Sun Jan  4 13:18:04 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Thu Sep 24 01:39:44 1998  ZHU Shenghuo  <zsh@cs.rochester.edu>
+       * nnsoup.el (nnsoup-store-reply): Bind mail-header-separator to
+       "".
 
-       * mm-decode.el (mm-interactively-view-part): Typo.
+       * gnus-xmas.el (gnus-xmas-agent-server-menu-add): New.
 
-Thu Sep 24 01:37:30 1998  ZHU Shenghuo  <zsh@cs.rochester.edu>
+       * nnoo.el (nnoo-change-server): Get the right values.
 
-       * mm-decode.el (mm-dissect-multipart): Display last part when the
-       article has no close-delimiter
+1998-01-04  Aki Vehtari  <Aki.Vehtari@hut.fi>
 
-Thu Sep 24 01:28:54 1998  ZHU Shenghuo  <zsh@cs.rochester.edu>
+       * 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.
 
-       * mm-decode.el (mm-dissect-buffer): Display parts which have no
-       content-type.
+       * gnus-score.el (gnus-home-score-file): Add non-nil default for
+       function.
+       (gnus-home-adapt-file): Ditto.
 
-Thu Sep 24 01:23:57 1998  ZHU Shenghuo  <zsh@cs.rochester.edu>
+       * gnus-sum.el (gnus-move-split-methods): Add default values for
+       choices.
 
-       * gnus-art.el (gnus-display-mime): Typo.
+       * nnmail.el (nnmail-list-identifiers): Add default values for
+       choices suggested by Per Abrahamsen <abraham@dina.kvl.dk>.
 
-Thu Sep 24 02:29:57 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Sun Jan  4 11:31:42 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.32 is released.
+       * gnus.el: Quassia Gnus v0.19 is released.
 
-1998-09-24 00:27:11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Jan  4 10:42:53 1998  Felix Lee  <flee@teleport.com>
 
-       * gnus-kill.el (gnus-batch-score): Protect against errors.
+       * nntp.el (nntp-open-rlogin): Use a list of parameters.
 
-       * gnus-art.el: Protect against broken headers.
+Sun Jan  4 10:25:05 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el (mm-display-external): Respect needsterm.
-       (mm-display-external): Create buffer for external commands.
+       * gnus-agent.el (gnus-agent-fetch-groups): New command.
 
-1998-09-23 22:04:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-summary-print-article): Changed order of
+       parameters.
 
-       * mailcap.el (mailcap-mime-info): Return the proper viewer.
+Sun Jan  4 10:24:07 1998  Michael R. Cook  <mcook@cognex.com>
 
-       * mm-decode.el (mm-display-external): Use file name.
+       * gnus-sum.el (gnus-summary-print-article): Use process/prefix.
 
-1998-09-22  Markus Rost  <markus.rost@mathematik.uni-regensburg.de>
+Sun Jan  4 05:29:38 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-util.el (gnus-output-to-rmail):  adjust to
-          `rmail-output-to-rmail-file'
+       * gnus-uu.el: Changed spurious defconsts to defvars.
 
-1998-09-23 20:07:00  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnmail.el (nnmail-get-spool-files): Quote group name.
 
-       * gnus-util.el (gnus-output-to-rmail): Reinstated function.
+       * gnus-agent.el (gnus-agent-fetch-group-1): Fetch ticked articles.
+       (gnus-agent-fetch-group-1): Never mind.
 
-       * gnus-sum.el (gnus-select-newsgroup): Set global variables before
-       headers.
+Sat Dec 20 22:33:17 1997  Pete Ware  <ware@cis.ohio-state.edu>
 
-       * gnus-art.el (article-decode-charset): Fold case.
+       * message.el (message-rename-buffer): Check for nil dirs.
 
-1998-09-17 15:49:10  Simon Josefsson  <jas@pdc.kth.se>
+Fri Dec 19 21:45:59 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-        * mailcap.el (mailcap-save-binary-file): Goto point-min.
+       * nnml.el (nnml-request-create-group): Check for files.
 
-1998-09-23 19:48:52  Aaron M. Ucko  <amu@mit.edu>
+Fri Dec 19 21:39:43 1997  Hrvoje Niksic  <hniksic@srce.hr>
 
-       * nnmail.el (nnmail-check-duplication): Enter into duplicate list
-       after being stored.
+       * message.el (message-mode): Fixed font-lock.
 
-Tue Sep 15 16:15:16 1998  Kurt Swanson  <ksw@dna.lth.se>
+Fri Dec 19 21:26:08 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-salt.el (gnus-pick-setup-message): Return from whence ye
-       come.
+       * gnus-cache.el (gnus-cache-read-active): Check for empty files.
 
-1998-09-23 19:42:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Dec 14 11:46:50 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-xmas.el (wid-edit): Required.
+       * gnus-uu.el (gnus-uu-save-article): Quote all lines beginning
+       with a dash.
 
-       * gnus-ems.el (gnus-widget-button-keymap): New variable.
+1997-12-10  SL Baur  <steve@altair.xemacs.org>
 
-Sun Sep 20 00:27:55 1998  ZHU Shenghuo  <zsh@cs.rochester.edu>
+       * gnus-start.el (gnus-read-descriptions-file): Really bind and gag
+       Mule.
 
-       * gnus-art.el (gnus-mime-inline-part): remove part if necessary
+Fri Dec  5 15:15:05 1997  Danny Siu  <dsiu@adobe.com>
 
-1998-09-23 19:30:52  Matt Armstrong  <matta@geoworks.com>
+       * nndoc.el (nndoc-babyl-body-begin): quote the regexp for the
+       string "*** EOOH ***" properly.
+       (nndoc-babyl-head-begin): Same as above.
 
-       * gnus-art.el (article-decode-charset): Narrow to the correct
-       region.
+Sun Dec 14 11:11:22 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-bodies.el: Fix autoload.
+       * gnus-uu.el (gnus-uu-pre-uudecode-hook): New hook.
 
-1998-09-22 18:35:12  Lee Willis  <lee@gbdirect.co.uk>
+       * gnus-sum.el (gnus-summary-read-group-1): Set mode line after
+       configuring.
 
-       * gnus-art.el (gnus-mime-button-line-format): Doc fix.
+Sun Dec 14 11:03:26 1997  Wes Hardaker  <wjhardaker@ucdavis.edu>
 
-1998-09-22 14:53:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-score.el (gnus-adaptive-word-minimum): New variable.
+       (gnus-score-adaptive): Use it.
 
-       * rfc2047.el (rfc2047-decode): Use rfc2047-default-charset.
+Sun Dec 14 09:19:18 1997  Roland B. Roberts  <roberts@panix.com>
 
-1998-09-19 13:58:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-group.el: Fixed hardcoded levels.
 
-       * gnus-art.el (gnus-insert-mime-button): Specify keymap.
-       (gnus-article-add-button): Ditto.
+Sat Dec  6 17:40:33 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-sum.el (gnus-summary-insert-pseudos): Use mm.
+       * gnus.el: Quassia Gnus v0.18 is released.
 
-       * gnus-art.el (gnus-article-prepare-display): Make article mode.
-       (gnus-article-prepare-display): Bind url-standalone-mode.
+Sat Dec  6 17:27:04 1997  Kim-Minh Kaplan  <KimMinh.Kaplan@Utopia.EUnet.fr>
 
-       * mm-decode.el (mm-remove-part): Also delete directory.
-       (mm-display-external): Create a private sub-dir.
+       * gnus-picon.el (gnus-picons-remove): Race condition.
 
-       * mailcap.el (mailcap-binary-suffixes): New variable.
-       (mailcap-command-p): Use it.
+Sat Dec  6 17:23:26 1997  Christian von Roques  <roques@scalar.pond.sub.org>
 
-1998-09-16 10:38:21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-start.el (gnus-read-descriptions-file): Fix
+       enable-multibyte-characters.
 
-       * nnmbox.el (nnmbox-request-group): Change server.
-       (nnmbox-possibly-change-newsgroup): Enable multibyte.
+1997-12-05  Dave Love  <d.love@dl.ac.uk>
 
-       * message.el (message-encode-message-body): Don't stomp MIME
-       headers.
+       * gnus-nocem.el (gnus-nocem-message-wanted-p): Fix paren typpo.
+       (gnus-nocem-issuers): Allow sexp alternative in :type for alists.
 
-       * gnus-sum.el (gnus-summary-edit-article-done): Don't encode
-       unless useful.
-       (gnus-summary-exit): Check for a live article buffer.
-       (gnus-summary-exit-no-update): Ditto.
+1997-12-05  Dave Love  <d.love@dl.ac.uk>
 
-       * gnus-int.el (gnus-request-replace-article): Accept no-encode
-       param.
+       * gnus-art.el (gnus-visible-headers): Add X-sent:.
 
-       * gnus-sum.el (gnus-article-decoded-p): New variable.
+Sat Dec  6 17:16:28 1997  Lars Balker Rasmussen  <lbr@mjolner.dk>
 
-       * mm-decode.el (mm-display-external): Use no-conv.
+       * gnus-art.el (article-make-date-line): Don't add extra newlines.
 
-       * rfc2047.el (rfc2047-q-encode-region): Bound properly.
-       (rfc2047-charset-encoding-alist): Use B encoding for koi8-r.
+1997-11-27  MORIOKA Tomohiko  <morioka@jaist.ac.jp>
 
-       * gnus-art.el (gnus-article-mode-map): Bind button2 to
-       mouse-click.
+       * nnmail.el (nnmail-file-coding-system): Use `raw-text' in
+       default.
 
-1998-09-15 14:38:02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnheader.el (nnheader-file-coding-system): Use `raw-text' in
+       default.
 
-       * gnus-agent.el (gnus-agent-expire): Protect against nil infos.
+Sat Dec  6 17:04:40 1997  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
 
-Mon Sep 14 18:55:38 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * nnml.el (nnml-parse-head): Out-of-bounds fix.
 
-       * gnus.el: Pterodactyl Gnus v0.31 is released.
+       * nndraft.el (nndraft-request-associate-buffer): Get proper file
+       name.
 
-1998-09-14 15:12:59  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Dec  6 15:35:37 1997  Gary D. Foster  <Gary.Foster@Corp.Sun.COM>
 
-       * gnus-sum.el (gnus-summary-exit): Destroy MIME.
+       * gnus-group.el: Added backspace.
 
-       * mm-decode.el (mm-display-part): Accept no-default.
+Thu Nov 27 19:56:59 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-insert-mime-button): buffer-size doesn't take
-       a parameter.
+       * gnus-agent.el (gnus-summary-set-agent-mark): Remove marks
+       properly.
 
-       * gnus-sum.el (gnus-summary-insert-line): Don't exclude faces.
-       (gnus-summary-prepare-threads): Ditto.
+1997-11-27  Christoph Wedler  <wedler@fmi.uni-passau.de>
 
-       * gnus.el (gnus-article-mode-map): Make sparse keymap.
+       * smiley.el (smiley-buffer): Provide `help-echo'.
 
-       * gnus-art.el (gnus-mime-button-line-format-alist): Allow a %d spec.
-       (gnus-mime-button-line-format): Doc fix.
-       (gnus-insert-mime-button): Use it.
-       (gnus-article-add-button): Use widget-convert-button.
+Thu Nov 27 17:33:45 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el ((featurep 'gnus-xmas)): Defalias gnus-decode-rfc1522 to
-       ignore.
+       * gnus-util.el (gnus-output-to-rmail): Always save buffer.
 
-       * mm-decode.el (mm-alternative-precedence): Ditto.
+       * nntp.el (nntp-close-server): Don't sleep for me, Argentina.
+       (nntp-request-close): You neither.
 
-1998-09-14 15:12:49  Conrad Sauerwald  <conrad@stack.nl>
+1997-11-19  Per Abrahamsen  <abraham@dina.kvl.dk>
 
-       * mm-decode.el (mm-user-automatic-display): Use enriched.
+       * message.el (message-header-lines): New widget.
+       (message-default-headers): Use it.
+       (message-default-mail-headers): Use it.
+       (message-default-news-headers): Use it.
 
-1998-09-14 15:09:12  Paul Fisher  <rao@gnu.org>
+1997-11-24  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
 
-       * mm-decode.el (mm-dissect-multipart): Have the part start on the
-       right place.
+       * gnus-start.el (gnus-read-descriptions-file): Add missing quote.
 
-1998-09-14 14:33:34  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Wed Nov 26 18:19:29 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-msg.el (gnus-inews-add-send-actions): Mark silently.
+       * nnweb.el (nnweb-type-definition): Rescued dejanewsold.
 
-       * gnus-art.el (article-update-date-lapsed): Only update header if
-       buffer is dispalyed in frame.
-       (gnus-article-prepare-display): New function.
-       (gnus-article-prepare): Use it.
+       * gnus-mh.el (gnus-summary-save-in-folder): Reverted to old
+       version.
 
-1998-09-14 08:16:43  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-kill-or-deaden-summary): Save excursion.
 
-       * gnus-art.el (gnus-mime-inline-part): New command and keystroke.
+       * gnus.el: Only require gnus-load in Emacsen 19.
 
-       * mm-view.el (mm-insert-inline): New function.
+       * gnus-start.el (gnus-setup-news): Always push archive server.
 
-       * mm-decode.el (mm-pipe-part): Bugged.
+       * gnus-sum.el (gnus-read-header): Would bug out on sparse
+       articles.
 
-       * gnus-agent.el (gnus-agent-send-mail): Don't encode.
+Wed Nov 26 17:50:41 1997  Kurt Swanson  <kurt@dna.lth.se>
 
-       * mm-bodies.el (mm-encode-body): Move over the body.
+       * gnus-ems.el (gnus-mule-cite-add-face): Work.
 
-       * nnmbox.el (nnmbox-read-mbox): Enable multibyte.
+Wed Nov 26 17:40:57 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * rfc2047.el (rfc2047-q-encode-region): Would bug out.
+       * gnus.el: Quassia Gnus v0.17 is released.
 
-1998-09-13  François Pinard  <pinard@iro.umontreal.ca>
+Wed Nov 26 16:04:25 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * nndoc.el: Make nndoc-dissection-alist simpler for MIME, adjust all
-          related functions.  Handle message/rfc822 parts.  Display subject on
-          multipart summary lines.  Display name on sub-parts when available.
+       * gnus-sum.el (gnus-summary-move-article): Don't work on canceled
+       articles.
 
-1998-09-14 07:36:38  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
+       * gnus-start.el (gnus-subscribe-hierarchical-interactive): Use
+       `read-char-exclusive'.
 
-       * mailcap.el (mailcap-command-p): New version.
+       * gnus-sum.el (gnus-summary-mode): Localize
+       gnus-summary-dummy-line-format.
 
-1998-09-13  Mike McEwan  <mike@lotusland.demon.co.uk>
+       * nnml.el (nnml-open-nov): Check that the file exists before
+       inserting it.
 
-       * gnus-agent.el (gnus-agent-expire): Stop expiry barfing on killed
-       groups.
+       * gnus-art.el (article-date-ut): Insert a newline if needed.
 
-1998-09-13 18:34:06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-score.el (gnus-score-edit-current-scores): Protect against
+       nil score files.
 
-       * message.el (message-make-date): Remove weekday name.
+       * gnus-start.el (gnus-newsrc-parse-options): Be more correct --
+       match only hierarchies.
+       (gnus-gnus-to-quick-newsrc-format): Changed warning.
 
-       * mm-decode.el (mm-dissect-buffer): Protect against broken
-       headers.
+Wed Nov 26 15:47:40 1997  Greg Klanderman  <greg@alphatech.com>
 
-       * mailcap.el (mailcap-command-in-path-p): New function.
-       (mailcap-command-p): Renamed.
+       * messagexmas.el (message-xmas-maybe-fontify): New definition.
 
-1998-09-13 17:58:47  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
+Wed Nov 26 15:43:53 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * rfc2047.el (eval): Autoload.
+       * gnus-start.el (gnus-setup-news): Protect against nil
+       gnus-message-archive-method.
 
-1998-09-13 12:22:40  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1997-11-26  Christoph Wedler  <wedler@fmi.uni-passau.de>
 
-       * gnus-sum.el (gnus-decode-encoded-word-functions): New variable.
-       (gnus-multi-decode-encoded-word-string): New function.
-       (gnus-encoded-word-method-alist): New variable.
-       (gnus-decode-encoded-word-functions): Removed.
+       * gnus-art.el (gnus-article-edit-done): Update headers "Lines:",
+       "Content-Length:" and "X-Content-Length:" when present.
 
-1998-09-13  Shenghuo ZHU  <zsh@cs.rochester.edu>
+Wed Nov 26 15:08:17 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-int.el (gnus-request-replace-article): Replace
-       message-narrow-to-headers with message-narrow-to-head
+       * nnmail.el (nnmail-process-unix-mail-format): Pop to the right
+       buffer on error.
+       (nnmail-process-mmdf-mail-format): Ditto.
 
-1998-09-13 12:05:41  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Wed Nov 26 13:54:04 1997  Joe Reiss  <jreiss@sprynet.com>
 
-       * drums.el (drums-quote-string): Reversed match.
+       * gnus-art.el (gnus-summary-save-in-rmail): Return the name of the
+       file.
 
-       * message.el (message-make-date): Use weekday name.
+Wed Nov 26 13:50:01 1997  Alastair Burt <alastair.burt@dfki.de>
 
-Sun Sep 11 10:27:15 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * smiley.el: Balloon help, etc.
 
-       * gnus.el: Pterodactyl Gnus v0.30 is released.
+Wed Nov 26 13:45:35 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-13 08:00:41  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-util.el (gnus-kill-all-overlays): Remove check for XEmacs.
 
-       * gnus-art.el (article-decode-encoded-words): Use it.
-       (gnus-decode-header-function): New variable.
+1997-09-30  Dave Love  <d.love@dl.ac.uk>
 
-       * gnus-sum.el (gnus-nov-parse-line): Use it.
-       (gnus-decode-encoded-word-function): New variable.
+       * message.el: Don't require rmail.
 
-       * gnus-msg.el (gnus-copy-article-buffer): Decode the right
-       buffer.
+Wed Nov 26 13:37:50 1997  Kurt Swanson  <kurt@dna.lth.se>
 
-       * gnus-art.el (gnus-insert-mime-button): Use widget.
-       (gnus-widget-press-button): New function.
-       (gnus-article-prev-button): Removed.
-       (gnus-article-next-button): Ditto.
-       (gnus-article-add-button): Ditto.
+       * gnus-group.el (gnus-group-setup-buffer): set-buffer.
 
-       * gnus.el (gnus-article-mode-map): Inherit from widget.
-       (gnus-article-mode-map): No, don't.
+Wed Nov 26 13:31:54 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el (mm-dissect-buffer): Store Content-ID things.
-       (mm-content-id-alist): New variable.
-       (mm-get-content-id): New function.
+       * gnus-score.el (gnus-score-load-file): Don't create empty score
+       files when doing decays.
 
-       * gnus-art.el (gnus-request-article-this-buffer): Only decode
-       articles if we are fetching to the article buffer.
+Wed Nov 26 13:28:04 1997  Renaud Rioboo  <rioboo@calfor.lip6.fr>
 
-1998-09-13 07:58:59  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * nnmail.el (nnmail-move-inbox): Only bind default-directory when
+       calling external function.
 
-       * gnus-sum.el (gnus-summary-move-article): Don't decode accepting
-       articles.
+Wed Nov 26 13:03:45 1997  IWAMURO Motonori  <iwa@mmp.fujitsu.co.jp>
 
-1998-09-13 07:23:28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-kill.el (gnus-batch-score): Newsrc thinko.
 
-       * mm-util.el (mm-mime-charset): Try to use safe-charsets.
-       (mm-default-mime-charset): New variable.
+Wed Nov 26 10:31:17 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * rfc2047.el (rfc2047-dissect-region): Dissect using tspecials.
+       * nnheader.el (nnheader-parse-head): Would break on Message-ID's
+       that spanned several lines.
 
-       * drums.el (drums-quote-string): Reversed test.
+       * gnus-util.el (gnus-date-iso8601): Didn't pick out the date
+       header.
 
-1998-09-12 14:29:21  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-demon.el (gnus-demon-scan-mail): Clean inboxes.
 
-       * mm-util.el (mm-insert-rfc822-headers): Possibly not quote
-       string.
+1997-11-25  Christoph Wedler  <wedler@fmi.uni-passau.de>
 
-       * drums.el (drums-quote-string): New function.
+       * gnus-picon.el (gnus-picons-x-face-sentinel): Would bug out in
+       headers with two X-Face lines.
 
-       * rfc2047.el (rfc2047-encode-message-header): Goto point-min.
-       (rfc2047-b-encode-region): Chop lines.
-       (rfc2047-q-encode-region): Ditto.
+Wed Nov 26 08:54:26 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Sat Sep 12 13:27:15 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-sum.el (gnus-summary-update-info): Would use wrong group
+       name.
 
-       * gnus.el: Pterodactyl Gnus v0.29 is released.
+1997-11-26  Hrvoje Niksic  <hniksic@srce.hr>
 
-1998-09-12 12:46:30  Istvan Marko  <imarko@pacificnet.net>
+       * gnus-spec.el (gnus-compile): Avoid multiple `c*addr's.
+       (gnus-compile): Require `bytecomp'.
 
-       * mm-decode.el (mm-save-part): Message right.
+1997-11-25  Hrvoje Niksic  <hniksic@srce.hr>
 
-1998-09-12 11:30:01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-util.el (gnus-prin1): Bind `print-readably' to t.
 
-       * drums.el (drums-parse-address): Returned a list instead of a
-       string.
-       (drums-remove-whitespace): Skip comments.
-       (drums-parse-addresses): Didn't work.
+       * gnus-xmas.el (gnus-xmas-kill-all-overlays): New function.
+       (gnus-xmas-define): Use it.
 
-Sat Sep 12 09:17:30 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-art.el (gnus-stop-date-timer): Use `nnheader-cancel-timer'.
 
-       * gnus.el: Pterodactyl Gnus v0.28 is released.
+       * message.el (message-header-lines): Specify format.
 
-1998-09-12 04:57:25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-xmas.el (gnus-xmas-move-overlay): Use BUFFER.
+       (gnus-byte-code): Use `indirect-function'.
 
-       * gnus-art.el (gnus-mime-button-map): Use the article keymap as a
-       starting point.
-       (article-decode-encoded-words): Rename.
+       * gnus-cite.el (gnus-cite-add-face): Would assign free variable.
 
-       * message.el (message-narrow-to-headers-or-head): New function.
+Wed Nov 26 08:31:28 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-int.el (gnus-request-accept-article): Narrow to the right
-       region.
+       * gnus-art.el (gnus-stop-date-timer): Cancel instead of delete.
+       (gnus-start-date-timer): Use the numerical prefix.
 
-       * message.el (message-send-news): Encode body after checking
-       syntax.
+Tue Nov 25 20:03:34 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-mime-button-line-format): Allow descriptions.
+       * gnus-draft.el (gnus-group-send-drafts): Activate group first.
 
-       * mm-decode.el (mm-save-part): Use Content-Disposition filename.
+Tue Nov 25 19:57:55 1997  Dan Christensen  <jdc@chow.mat.jhu.edu>
 
-       * gnus-art.el (gnus-display-mime): Respect disposition.
+       * gnus-group.el (gnus-group-process-prefix): Skip topics.
 
-       * mm-decode.el (mm-preferred-alternative): Respect disposition.
+Tue Nov 25 19:54:00 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (article-strip-multiple-blank-lines): Don't delete
-       text with annotations.
+       * gnus-move.el (gnus-move-group-to-server): Protect agains
+       nil-ness.
 
-       * message.el (message-make-date): Fix sign for negative time
-       zones.
+Tue Nov 25 19:03:38 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * mm-view.el (mm-inline-image): Insert a space at the end of the
-       image.
+       * gnus.el: Quassia Gnus v0.16 is released.
 
-       * mail-parse.el: New file.
+Tue Nov 25 16:05:01 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * rfc2231.el: New file.
+       * gnus-sum.el (gnus-read-header): Remove thread entry before
+       rebuilding.
 
-       * drums.el (drums-content-type-get): Removed.
-       (drums-parse-content-type): Ditto.
+       * gnus-cite.el (gnus-cite-add-face): Keep track of all overlays.
 
-       * mailcap.el (mailcap-mime-data): Use symbols instead of strings.
+       * 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.
 
-Fri Sep 11 18:23:34 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-group.el (gnus-group-read-ephemeral-group): Accept server
+       names.
 
-       * gnus.el: Pterodactyl Gnus v0.27 is released.
+       * gnus-srvr.el (gnus-browse-foreign-server): Use proper server
+       names.
 
-1998-09-11 12:42:07  Lars Magne Ingebrigtsen- <larsi@gnus.org>
+       * gnus.el (gnus-group-prefixed-name): Give the right result for
+       native groups.
 
-       * mm-decode.el (mm-alternative-precedence): New variable.
-       (mm-preferred-alternative): New function.
+       * nnheader.el (nnheader-directory-files): New function.
 
-       * gnus-art.el (gnus-mime-copy-part): New command.
+       * nnmh.el (nnmh-request-list-1): Reversed check.
 
-       * mm-decode.el (mm-get-part): New function.
+       * nnfolder.el (nnfolder-delete-mail): Would skip backwards one
+       line too much.
 
-       * mm-view.el: New file.
+Tue Nov 25 14:44:02 1997  SeokChan LEE  <chan@xfer.kren.nm.kr>
 
-       * mm-decode.el (mm-dissect-buffer): Downcase cte.
-       (mm-display-part): Default to mailcap-save-binary-file.
+       * message.el (message-ignored-supersedes-headers): Typo.
 
-Fri Sep 11 12:32:50 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Mon Nov 24 18:46:37 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.26 is released.
+       * gnus.el: Quassia Gnus v0.15 is released.
 
-1998-09-11 08:25:33  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Mon Nov 24 18:07:21 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el (mm-interactively-view-part): New function.
+       * gnus-ems.el: Also check major version names.
 
-       * gnus-art.el (gnus-mime-view-part): New command.
+1997-10-05  SL Baur  <steve@altair.xemacs.org>
 
-       * mm-decode.el (mm-last-shell-command): New variable.
+       * message.el (require 'rmail): Put guard around.
+       * nnbabyl.el (require 'rmail): Ditto.
 
-       * mailcap.el (mailcap-mime-info): Allow returning all matches.
+Mon Nov 24 17:36:00 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-decode.el (mm-save-part): New function.
+       * message.el (message-reply): Respect Mail-Copies-To even when
+       `to-address'.
 
-       * gnus-art.el (article-decode-charset): Protect against buggy
-       content-types.
-       (gnus-mime-pipe-part): New command.
-       (gnus-mime-save-part): New command.
-       (gnus-mime-button-map): New keymap.
-       (gnus-mime-button-line-format): New variable.
-       (gnus-insert-mime-button): New function.
-       (gnus-display-mime): Use it.
+Mon Nov 24 17:32:47 1997  Thor Kristoffersen  <thor@unik.no>
 
-       * gnus-util.el (gnus-dd-mmm): Removed length spec.
+       * nntp.el (nntp-request-close): Sleep one second.
 
-       * mm-decode.el (mm-inline-text): Decode charsets.
+Mon Nov 24 16:18:19 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-article-save): Comment fix.
+       * gnus-sum.el (gnus-summary-read-group-1): Update marks when not
+       entering group.
 
-       * gnus-int.el (gnus-start-news-server): When in batch, don't
-       prompt.
+       * gnus-start.el (gnus-setup-news): Get correct value of archive
+       server.
 
-       * gnus-cache.el (gnus-cache-possibly-enter-article): Don't
-       decode.
+Wed Oct  8 20:29:35 1997  Robert Bihlmeyer  <robbe@orcus.priv.at>
 
-       * mm-decode.el (mm-inline-media-tests): Add audio.
-       (mm-inline-audio): New function.
+       * message.el (message-make-organization): Don't let the
+       environment variable override a user-set organization.
 
-1998-09-11 08:19:22  Katsumi Yamaoka  <yamaoka@ga.sony.co.jp>
+Mon Nov 24 14:09:00 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (article-make-date-line): Didn't work.
+       * nnml.el (nnml-open-nov): Don't use find-file.
 
-       * parse-time.el (parse-time-string): One too many nils.
+       * 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.
 
-Fri Sep 11 08:09:40 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * nnml.el (nnml-parse-head): Work in empty buffers.
 
-       * gnus.el: Pterodactyl Gnus v0.25 is released.
+1997-10-14  Hrvoje Niksic  <hniksic@srce.hr>
 
-1998-09-11 07:38:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-xmas.el (gnus-xmas-group-startup-message): Check for image
+       formats correctly.
+       (gnus-xmas-modeline-glyph): Ditto.
 
-       * gnus-art.el (article-remove-trailing-blank-lines): Don't remove
-       annotations.
+Mon Nov 24 13:58:12 1997  Hrvoje Niksic  <hniksic@srce.hr>
 
-       * gnus.el ((featurep 'gnus-xmas)): New
-       'gnus-annotation-in-region-p alias.
+       * gnus-spec.el (gnus-compile): Work under XEmacs.
 
-1998-09-10 06:20:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Mon Nov 24 07:15:45 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-util.el (mm-with-unibyte-buffer): New function.
+       * nnoo.el (nnoo-change-server): Push the right parent packend onto
+       the alist.
 
-       * gnus-uu.el (gnus-quote-arg-for-sh-or-csh): Renamed.
+Sun Nov 23 16:21:41 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * mm-decode.el (mm-inline-media-tests): New variable.
+       * gnus.el: Quassia Gnus v0.14 is released.
 
-       * gnus-sum.el (gnus-summary-exit): Destroy handles.
+Sun Nov 23 14:04:07 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-article-mime-handles): New variable.
+       * gnus-start.el (gnus-read-descriptions-file): Make sure Mule is
+       bound.  And gagged.
 
-       * drums.el (drums-narrow-to-header): New function.
+       * message.el (message-send-mail-with-mh): Use
+       `mh-new-draft-name'.
 
-       * gnus-art.el (article-decode-charset): Use it.
+       * nnfolder.el (nnfolder-read-folder): Save new buffers.
 
-       * drums.el (drums-content-type-get): New function.
+       * gnus-sum.el (gnus-summary-make-menu-bar): Removed "write to
+       file".
 
-       * mm-util.el (mm-content-type-charset): Removed.
+       * gnus-util.el (gnus-byte-code): Use indirect-function.
 
-       * drums.el (drums-syntax-table): @ is word.
-       (drums-parse-content-type): New function.
+       * nntp.el (nntp-open-telnet): Also accept 201.
 
-       * parse-time.el (parse-time-rules): Parse "Wed, 29 Apr 98 0:26:01
-       EDT" times.
+       * gnus-sum.el (gnus-summary-reparent-thread): Update thread.
 
-       * gnus-util.el (gnus-date-get-time): Use safe date.
+       * gnus-score.el (gnus-all-score-files): Don't do anything unless
+       GROUP.
 
-       * gnus-sum.el (gnus-show-mime): Removed.
-       (gnus-summary-toggle-mime): Removed.
+       * nnmail.el (nnmail-split-it): Save-excursion.
+       (nnmail-group-pathname): Translate file chars.
 
-       * gnus-art.el (gnus-strict-mime): Removed.
-       (gnus-article-prepare): Don't do MIME.
-       (gnus-decode-encoded-word-method): Removed.
-       (gnus-show-mime-method): Removed.
+Sun Nov 23 13:41:10 1997  Gunnar Horrigmo  <horrigmo@online.no>
 
-Thu Sep 10 04:03:29 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-sum.el (gnus-summary-exit): Don't skip if group
+       disappeared.
 
-       * gnus.el: Pterodactyl Gnus v0.24 is released.
+Sun Nov 23 13:32:55 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-10 01:58:24  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnfolder.el (nnfolder-normalize-buffer): New function.
+       (nnfolder-save-mail): Use it.
+       (nnfolder-request-replace-article): Ditto.
 
-       * gnus-sum.el (gnus-summary-show-article): Don't decode chars if
-       PREFIX.
+1997-11-19  Per Abrahamsen  <abraham@dina.kvl.dk>
 
-       * parse-time.el (parse-time-rules): Accept times that look like
-       "h:mm".
+       * message.el (message-header-lines): New widget.
+       (message-default-headers): Use it.
+       (message-default-mail-headers): Use it.
+       (message-default-news-headers): Use it.
 
-       * message.el (message-make-date): Use zone properly.
+Sun Nov 23 12:44:38 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Autoload gnus-batch.
+       * gnus-win.el (gnus-remove-some-windows): Also delete dead summary
+       windows.
 
-       * gnus-art.el (article-de-quoted-unreadable): Do not do
-       gnus-article-decode-rfc1522.
+       * gnus-score.el (gnus-score-adaptive): Check whether functions are
+       bound.
 
-       * gnus-msg.el (gnus-inews-do-gcc): Use it.
+Sun Nov 23 12:15:00 1997  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
 
-       * gnus-int.el (gnus-request-accept-article): Accept a no-encode
-       param.
+       * gnus-sum.el (gnus-summary-limit-include-thread): Interactive
+       fix.
 
-       * message.el (message-encode-message-body): Check for us-ascii.
+Sun Nov 23 07:06:58 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-msg.el (gnus-extended-version): Move Gnus version comments
-       to the left.
+       * gnus-sum.el (gnus-summary-reparent-thread): Insert Message-ID in
+       proper place.
 
-1998-09-09 13:18:13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Nov 22 18:30:33 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (article-decode-charset): Rename.
+       * gnus-cus.el (gnus-group-parameters): Add visible.
 
-Wed Sep  9 12:25:48 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Sat Nov 22 18:19:39 1997  Kim-Minh Kaplan  <kkaplan@lpthe.jussieu.fr>
 
-       * gnus.el: Pterodactyl Gnus v0.23 is released.
+       * message.el (message-setup): Add a newline, if necessary.
 
-1998-09-09 12:14:47  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Nov 22 18:04:34 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-util.el (gnus-parent-id): Ditto.
-       (gnus-put-text-property-excluding-newlines): Ditto.
+       * gnus-mh.el (gnus-summary-save-in-folder): Fix for default.
 
-       * gnus-sum.el (gnus-dependencies-add-header): Make into subst.
+Sat Nov 22 18:01:26 1997  Didier Verna  <verna@inf.enst.fr>
 
-1998-09-08  Karl Kleinpaste  <karl@jprc.com>
+       * gnus-sum.el (gnus-summary-remove-bookmark): Interactive spec.
 
-       * message.el (message-generate-headers): Generate User-Agent
-       instead of X-Mailer & X-Newsreader.
+Mon Nov 17 23:50:51 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-msg.el (gnus-extended-version): Reformat for USEFOR
-       User-Agent header format.
+       * gnus-art.el (article-display-x-face): Fold case.
 
-Tue Sep  8 22:38:27 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Thu Nov 13 22:57:23 1997  Kenichi Handa  <handa@etl.go.jp>
 
-       * gnus.el: Pterodactyl Gnus v0.22 is released.
+       * gnus/gnus-start.el (gnus-read-descriptions-file): Decode
+       description if necessary.
 
-1998-09-08 22:36:54  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus/nntp.el (nntp-coding-system-for-read): Set default value to
+       binary.
+       (nntp-coding-system-for-write): Likewise.
 
-       * mm-util.el (mm-multibyte-p): Typo.
+Thu Nov 13 22:30:19 1997  seokchan lee  <chan@xfer.kren.nm.kr>
 
-Tue Sep  8 22:25:53 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * message.el (message-ignored-supersedes-headers): Ignore more
+       headers.
 
-       * gnus.el: Pterodactyl Gnus v0.21 is released.
+Thu Nov 13 22:28:13 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-08  Hrvoje Niksic  <hniksic@srce.hr>
+       * message.el (message-separator-face): Lightened up.
+       (message-header-other-face): Ditto.
 
-       * gnus-art.el (article-treat-dumbquotes): Handle \224 correctly.
+Thu Nov 13 22:22:11 1997  jari aalto  <jari.aalto@poboxes.com>
 
-1998-09-08 22:18:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nnmail.el (nnmail-process-mmdf-mail-format): Pop to buffer.
 
-       * mm-util.el (mm-multibyte-p): New function.
+Thu Nov 13 22:09:39 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Tue Sep  8 21:43:03 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-start.el (gnus-start-draft-setup): Always create group.
 
-       * gnus.el: Pterodactyl Gnus v0.20 is released.
+       * gnus-agent.el (gnus-agent-fetch-headers): Translate file chars.
 
-1998-09-08 11:40:45  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Thu Nov  6 20:43:05 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * rfc2047.el (rfc2047-decode-region): Only decode when in
-       multibyte.
+       * gnus.el: Quassia Gnus v0.13 is released.
 
-       * nnheader.el (nnheader-pathname-coding-system): Changed to binary.
+Thu Nov  6 20:30:14 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-int.el (gnus-request-replace-article): Encode.
-       (gnus-request-accept-article): Encode.
+       * nnlistserv.el: New backend.
 
-       * gnus-art.el (gnus-request-article-this-buffer): Decode charsets
-       here.
+Thu Nov  6 01:53:51 1997  Stefan Waldherr  <swa@cs.cmu.edu>
 
-       * gnus.el (gnus-article-display-hook): Take the charset functions
-       out.
+       * nnweb.el (nnweb-dejanewsold-search): New function.
 
-       * time-date.el (safe-date-to-time): New function.
+Thu Nov  6 01:52:43 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-util.el (gnus-dd-mmm): Protect against bogus dates.
+       * gnus-topic.el (gnus-topic-change-level): Really delete multiple
+       instances.
 
-Tue Sep  8 07:09:28 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Wed Nov  5 14:04:54 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.19 is released.
+       * gnus-topic.el (gnus-topic-update-topic-line): Possibly fix nil
+       numbers.
 
-1998-09-08 04:51:39  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-summary-show-article): New command and
+       keystroke.
 
-       * base64.el (base64-encode-region): Accept no-line-break.
+Tue Nov  4 06:29:58 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-util.el (mm-mime-charset): New function.
+       * gnus-score.el (gnus-score-adaptive): Use the home score file.
 
-       * gnus-draft.el (gnus-draft-edit-message): Delete article.
+Sat Oct 25 05:52:22 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Tue Sep  8 04:29:23 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-art.el (gnus-article-save): Hide headers in the right
+       buffer.
 
-       * gnus.el: Pterodactyl Gnus v0.18 is released.
+       * gnus-picon.el (gnus-picons-xbm-face): New face.
 
-1998-09-08 02:21:36  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Oct 25 00:39:42 1997  Lars Balker Rasmussen  <lbr@mjolner.dk>
 
-       * message.el (message-send-and-exit): Return t on success.
-       (message-make-date): Make a proper time zone.
+       * gnus-art.el (gnus-article-fill-paragraph): New command and
+       keystroke.
 
-       * gnus-draft.el (gnus-draft-send): Only remove article if the
-       sending is successful.
+1997-10-16  Colin Rafferty  <craffert@ml.com>
 
-       * drums.el (drums-get-comment): Return the last comment.
-       (drums-parse-address): Parse old-style From headers.
+       * message.el (message-make-fqdn): Made certain that user-mail is
+                 not nil.
 
-1998-09-07  SL Baur  <steve@altair.xemacs.org>
+Sat Oct 25 00:18:32 1997  David S. Goldberg  <dsg@linus.mitre.org>
 
-       * gnus-sum.el (gnus-data-compute-positions): Move below
-       `gnus-save-hidden-threads' so the former is correctly detected as
-       a macro.
+       * gnus-art.el (article-hide-boring-headers): Use many-to.
 
-1998-09-06  Dave Love  <fx@gnu.org>
+Fri Oct 24 23:48:39 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus/nnweb.el (require): Wrap requirement of w3 and url in
-       ignore-errors too, eval'd when compile.  Require w3 stuff at load
-       time for nicer failure if it's not available.
+       * 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.
 
-1998-09-08 00:38:39  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Mon Oct 13 00:01:35 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * time-date.el (time-to-seconds): Renamed.
+       * gnus-agent.el (gnus-agent-group-path): Translate file chars.
+       (gnus-agent-batch-fetch): New command.
+       (gnus-agent-fetch-group): Message.
 
-       * parse-time.el (parse-time-string): Downcase before handling.
-       (parse-time-rules): Times without seconds have 0 seconds.
+Sun Oct 12 23:54:55 1997  ISO-2022-JP  <ichikawa@hv.epson.co.jp>
 
-       * rfc2047.el (rfc2047-encode-region): New version.
-       (rfc2047-dissect-region): New function.
+       * gnus-agent.el (gnus-agent-article-file-coding-system): New
+       variable.
 
-1998-09-07 01:08:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Oct 12 16:46:11 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.el (message-make-date): Use symbolic zone.
+       * dgnushack.el (lpath): Reversed.
 
-1998-09-06 23:23:06  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-msg.el (gnus-summary-cancel-article): Use sym prefix.
 
-       * time-date.el (parse-time): Always use parse-time.
+       * gnus-art.el (article-translate-characters): New function.
+       (article-treat-dumbquotes): New command and keystroke.
 
-       * parse-time.el (parse-time-syntax): Use vectors.
+Sun Oct  5 20:09:31 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Sun Sep  6 21:19:26 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-art.el (gnus-button-alist): No ' and " in News:.
 
-       * gnus.el: Pterodactyl Gnus v0.17 is released.
+       * gnus-msg.el (gnus-inews-insert-archive-gcc): Comp warn.
 
-1998-09-06 05:45:17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Oct  4 00:53:55 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * time-date.el: Renamed from "date".
+       * gnus.el: Quassia Gnus v0.12 is released.
 
-       * gnus.el: Removed all timezone dependencies.
+Sat Oct  4 00:16:39 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * score-mode.el: Removed.
-       (gnus-score-edit-insert-date): Use date.
+       * gnus.el (gnus-plugged): Moved here.
 
-       * date.el (float-to-time): New function.
+       * nnmail.el (nnmail-delete-incoming): Changed default to nil.
 
-       * nnspool.el (nnspool-seconds-since-epoch): Removed.
+       * gnus-int.el (gnus-request-scan): Don't do anything if
+       unplugged.
 
-       * date.el (time-to-float): New function.
+Fri Oct  3 21:09:19 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.el (message-make-date): Use format-time-string.
-       (message-make-expires): Use make-date.
+       * gnus-art.el (gnus-ignored-headers): Doc fix.
 
-       * gnus-xmas.el (gnus-xmas-seconds-since-epoch): Removed.
+       * gnus-demon.el (gnus-demon-add-nntp-close-connection): New
+       function.
+       (gnus-demon-nntp-close-connection): Ditto.
 
-       * gnus-util.el (gnus-dd-mmm): Use date.
-       (gnus-sortable-date): Ditto.
+       * nntp.el (nntp-last-command-time): New variable.
+       (nntp-retrieve-data): Use it.
 
-       * message.el (message-make-date): Take an optional time.
+       * message.el (message-news-p): Messages with Posted-To aren't
+       news.
+       (message-mode): Heed message-yank-prefix when filling.
 
-       * gnus: Applied patches from 5.6.43.
+       * nndraft.el (nndraft-request-restore-buffer): Remove Xrefs and
+       Lines headers.
 
-       * date.el (if): Use parse-time.
+       * nntp.el (nntp-encode-text): Encode according to RFC977.
 
-       * gnus-score.el (gnus-summary-score-entry): Make into a command
-       again.
+Wed Oct  1 18:27:26 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-group.el (gnus-group-get-new-news-this-group): Only call if
-       gnus-agent.
+       * gnus-msg.el (gnus-inews-insert-archive-gcc): gcc-self didn't
+       work if `gnus-message-archive-method' was nil.
 
-       * gnus.el (gnus-agent-meta-information-header): Moved here.
+       * nnmail.el (nnmail-article-group): Allow \\1 substitution.
 
-1998-09-05  Mike McEwan  <mike@lotusland.demon.co.uk>
+Sat Sep 27 12:57:44 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * 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-salt.el (gnus-pick-mouse-pick-region): Use it.
 
-1998-09-06 01:56:02  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-xmas.el (gnus-xmas-window-edges): New function.
 
-       * gnus-score.el (gnus-score-load-score-alist): Bind coding system.
+       * gnus-score.el (gnus-score-edit-current-scores): Don't select
+       window.
 
-       * gnus-art.el (gnus-article-setup-buffer): Enable multibyte.
+Sat Sep 27 12:52:31 1997  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
 
-       * score-mode.el (score-mode-coding-system): New variable.
-       (gnus-score-edit-exit): Use it.
+       * messcompat.el ((boundp 'mail-mode-hook)): Check.
 
-1998-09-04  Jason R Mastaler  <jason@4b.org>
+Sat Sep 27 09:22:15 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * drums.el: Corrected typo.
+       * nndraft.el (nndraft-possibly-change-group): Always open server.
 
-1998-09-05 23:24:43  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
+       * gnus-sum.el (gnus-summary-pop-article): Force.
 
-       * mm-bodies.el (mm-body-encoding): Faster version.
+       * gnus-art.el (gnus-article-prepare): Push the article onto the
+       history.
 
-1998-09-05 22:23:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-summary-pop-article): Pop to the right
+       article.
 
-       * gnus-art.el (gnus-article-decode-charset): Only decode text
-       things.
+       * gnus-demon.el (gnus-demon-scan-news): Save excursion.
 
-       * message.el (message-output): Use rmail.
+Sat Sep 27 09:06:55 1997  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
 
-       * rfc2047.el (rfc2047-encoded-word-regexp): Allow spaces in the
-       word part.
+       * gnus-cache.el (gnus-summary-limit-include-cached): New command
+       and keystroke.
 
-       * mm-util.el (mm-charset-to-coding-system): Use
-       rfc2047-default-charset.
-       (mm-known-charsets): New variable.
+Sat Sep 27 06:45:58 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.el (message-caesar-region): Bugged out.
+       * gnus-uu.el (gnus-uu-invert-processable): Make interactive.
 
-1998-09-06  Mike McEwan  <mike@lotusland.demon.co.uk>
+Sat Sep 27 06:43:38 1997  Kim-Minh Kaplan  <kimminh.kaplan@utopia.eunet.fr>
 
-       * gnus-agent.el (gnus-agent-fetch-group-1): Allow lists when
-       specifying `agent-predicate' in a group's parameters.
+       * gnus-picon.el: Doc fixes.
 
-Sat Sep  5 21:55:01 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+1997-09-23  Hrvoje Niksic  <hniksic@srce.hr>
 
-       * gnus.el: Pterodactyl Gnus v0.16 is released.
+       * gnus.el: Removed definition of `custom-face-lookup'.
 
-1998-09-05 17:30:11  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Sep 27 05:36:11 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * nnmail.el (nnmail-expired-article-p): Use predicate.
+       * nndraft.el: Would block nnmh.
 
-       * date.el (time-less-p): Renamed.
+       * gnus-sum.el (gnus-mark-article-as-unread): Don't allow marking
+       negative articles.
 
-       * gnus-art.el (gnus-article-decode-charset): Really fetch headers
-       from the headers.
+       * gnus-group.el (gnus-fetch-group): Use `gnus-no-server'.
 
-       * rfc2047.el (rfc2047-decode-region): Use the mm decoding
-       functions.
+       * gnus-agent.el (gnus-agent-with-fetch): Moved.
 
-       * 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-sum.el (gnus-nov-read-integer): Really skip to next field.
 
-Sat Sep  5 01:45:52 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Sat Sep 27 04:32:45 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.15 is released.
+       * gnus.el: Quassia Gnus v0.11 is released.
 
-1998-09-05 00:21:22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Sep 27 03:50:12 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * date.el: New file.
+       * 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-encode-date): Removed.
-       (gnus-time-less): Ditto.
+Thu Sep 25 00:13:41 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * nnmail.el (nnmail-date-to-time): Removed.
-       (nnmail-time-less): Ditto.
-       (nnmail-days-to-time): Ditto.
-       (nnmail-time-since): Ditto.
+       * nnmail.el (nnmail-activate): Init server buffer.
 
-       * drums.el: New file.
+Wed Sep 24 04:11:59 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-04 00:25:52  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-draft.el (gnus-draft-setup): Inexplicable binding problem
+       worked around.
 
-       * message.el (message-encode-message-body): Encode headers with
-       body encoding.
+       * nnsoup.el (nnsoup-always-save): Renamed.
 
-       * rfc2047.el (rfc2047-default-charset): Renamed.
-       (rfc2047-encodable-p): Use it.
+Wed Sep 24 04:11:02 1997  Nelson Jose dos Santos Ferreira  <Nelson.Ferreira@inesc.pt>
 
-       * base64.el (mm-util): Required.
+       * nnsoup.el (nnsoup-commit-reply-now): New variable.
+       (nnsoup-store-reply): Use it.
 
-1998-09-03 16:28:30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Wed Sep 24 02:30:44 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-msg.el (gnus-post-method): Peel off real info from opened
-       servers.
+       * gnus-ems.el (gnus-deactivate-mark): New alias.
 
-       * gnus-util.el (gnus-output-to-rmail): Removed.
+Tue Sep 23 07:56:07 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-art.el (gnus-summary-save-in-rmail): Use
-       gnus-output-to-rmailrmail-output-to-rmail-file.
+       * gnus.el: Win-away!
 
-       * rfc2047.el (rfc2047-decode-region): Fold case.
-       (rfc2047-decode): Use decode-string.
+       * gnus-msg.el (gnus-setup-message): Don't trust make-symbol.
 
-       * mm-util.el: Provide mm-char-int.
+Tue Sep 23 07:45:11 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-Thu Sep  3 15:23:22 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus.el: Quassia Gnus v0.10 is released.
 
-       * gnus.el: Pterodactyl Gnus v0.14 is released.
+Tue Sep 23 01:41:04 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-03 15:08:30  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-read-all-headers): New function.
+       (gnus-select-newsgroup): Use it.
+       (gnus-summary-refer-thread): Ditto.
+       (gnus-refer-thread-limit): New variable.
+       (gnus-summary-refer-thread): Use it.
 
-       * mm-bodies.el (mm-body-encoding): Go through the buffer to make
-       sure we have 7bit.
+       * gnus-nocem.el (gnus-nocem-message-wanted-p): New function.
+       (gnus-nocem-check-article): Use it.
+       (gnus-nocem-issuers): Dox ofx.
 
-1998-09-02 14:38:18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * dgnushack.el (dgnushack-compile): Check for cus-edit.
 
-       * gnus-msg.el (gnus-post-method): Use opened servers, and remove
-       ducplicates.
-       (gnus-inews-insert-mime-headers): Removed.
+       * message.el (message-included-forward-headers): Include Mime
+       headers.
+       (message-send): Allow posting without confirming from Agent.
 
-       * message.el (message-caesar-region): Protect against MULE chars.
+Mon Sep 22 05:43:14 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-02 00:36:23  Hallvard B. Furuseth  <h.b.furuseth@usit.uio.no>
+       * dgnushack.el (byte-compile-warnings): Don't warn about obsolete
+       variables.
 
-       * mm-util.el (if): fset the right function.
+       * gnus-sum.el (gnus-summary-refer-thread): New command and
+       keystroke.
+       (gnus-summary-limit-include-thread): New command and keystroke.
+       (gnus-summary-articles-in-thread): New function.
+       (gnus-articles-in-thread): Renamed.
 
-1998-09-02 00:31:53  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Sep 21 23:54:50 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-art.el (gnus-article-decode-charset): Use real
-       read-coding-system.
+       * gnus.el: Quassia Gnus v0.9 is released.
 
-1998-09-01 17:58:40  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Sep 21 23:38:46 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-bodies.el (mm-decode-body): Protect against malformed
-       base64.
-       (mm-decode-body): Check that buffer-file-coding-system is
-       non-nil.
+       * gnus.el (gnus-splash-face): ForestGreen everywhere.
 
-Tue Sep  1 10:29:33 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-sum.el (gnus-simplify-subject-fully): Use new variable.
+       (gnus-general-simplify-subject): Ditto.
 
-       * gnus.el: Pterodactyl Gnus v0.13 is released.
+Sun Sep 21 23:34:13 1997  Kurt Swanson  <kurt@dna.lth.se>
 
-1998-09-01 09:14:33  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-simplify-subject-functions): New variable.
+       (gnus-simplify-whitespace): New function.
 
-       * gnus-util.el (gnus-strip-whitespace): Already defined.
-       Removed.
+       * gnus-util.el (gnus-map-function): New function.
 
-       * gnus-art.el (gnus-article-decode-charset): Strip whitespace.
+Sun Sep 21 23:22:04 1997  Michelangelo Grigni  <mic@mathcs.emory.edu>
 
-       * gnus-util.el (gnus-strip-whitespace): New function.
+       * gnus-score.el (gnus-score-regexp-bad-p): New function.
 
-       * mm-util.el (mm-content-type-charset): Downcase.
+Sun Sep 21 00:14:40 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-08-31 23:04:29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-score.el (gnus-summary-lower-score): Use sym pref.
+       (gnus-summary-increase-score): Use it.
 
-       * gnus-art.el (gnus-article-decode-charset): Accept a prefix.
-       (gnus-article-decode-charset): Don't fetch all headers.
+       * gnus.el (gnus-current-prefix-symbol): New variable.
+       (gnus-current-prefix-symbols): New variable.
 
-       * mm-util.el (mm-read-coding-system): New function.
+       * gnus-score.el (gnus-summary-increase-score): Take symbolic
+       prefix.
 
-       * mm-bodies.el (mm-decode-body): Check the right charset.
+       * gnus.el (gnus-interactive): Removed.
+       (gnus-interactive): Renamed from gnus-interactive-1.
+       (gnus-symbolic-argument): New command.
 
-       * gnus-sum.el (gnus-summary-mode-line-format): Ditto.
+       * gnus-draft.el (gnus-draft-send-message): Disable message
+       checks.
+       (gnus-draft-send): Ditto.
+       (gnus-draft-setup): Don't save buffer.
 
-       * gnus-art.el (gnus-article-mode-line-format): Use short group
-       format.
+       * dgnushack.el (dgnushack-compile): Warn people about Custom.
 
-Mon Aug 31 23:03:13 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-group.el (gnus-group-iterate): Use gensymmed variables.
 
-       * gnus.el: Pterodactyl Gnus v0.12 is released.
+       * pop3.el (pop3-md5): `with-temp-buffer' doesn't exist in Emacs
+       19.34.
 
-1998-08-31 22:39:36  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * nneething.el (nneething-directory): Defvarred.
 
-       * mm-bodies.el (mm-decode-body): Don't do charset unless MULE.
+       * message.el: Autoloaded nndraft things.
+       (message-set-auto-save-file-name): Use it.
 
-       * gnus-art.el (gnus-article-decode-charset): Supply cte.
-       (gnus-article-decode-charset): Always run.
+       * dgnushack.el (dgnushack-compile): Warn about things.
 
-       * mm-bodies.el (mm-decode-body): Decode cte.
+       * gnus-art.el: Autoload w3-region.
 
-Mon Aug 31 22:14:50 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-vm.el (gnus-summary-save-in-vm): Simplified.
 
-       * gnus.el: Pterodactyl Gnus v0.11 is released.
+       * gnus.el: Changed `compiled-function-p' to `byte-code-function-p'
+       throughout.
 
-1998-08-31 14:27:25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-sum.el (gnus-summary-edit-article): Supply additional
+       param.
 
-       * message.el (message-encode-message-body): Ditto.
+       * gnus-group.el (gnus-group-iterate): Undo bogus change.
 
-       * gnus-art.el (gnus-article-decode-mime-words): New command and
-       keystroke.
-       (gnus-article-decode-charset): Ditto.
-       (gnus-article-decode-charset): Only work under MULE.
+       * gnus-agent.el (gnus-agentize): Just call gnus-open-agent
+       directly.
 
-       * mm-util.el (mm-content-type-charset): New function.
+       * gnus.el (gnus-interactive): New macro.
+       (gnus-interactive-1): New function.
 
-       * nnmail.el (nnmail-delete-incoming): Changed to nil.
+       * 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.
 
-       * message.el (message-send-mail): Insert MIME headers.
-       (message-check-news-body-syntax): Don't warn for escape sequences.
-       (message-check-news-body-syntax): Insert MIME headers.
+       * gnus-art.el (gnus-article-edit-done): Accept a prefix arg.
+       (gnus-boring-article-headers): Allow `long-to' param.
+       (article-hide-boring-headers): Use it.
 
-       * mm-bodies.el (mm-body-encoding): New function.
+       * gnus-sum.el (gnus-summary-edit-article-done): Accept a
+       no-highlight param.
 
-       * message.el (message-encode-message-body): New function.
+       * nntp.el (nntp-rlogin-program): New variable.
+       (nntp-open-rlogin): Use it.
 
-       * mm-bodies.el: New file.
+       * nnvirtual.el (nnvirtual-request-post): New function.
 
-       * mm-util.el (mm-narrow-to-head): New function.
+       * gnus-msg.el (gnus-message-group-art): New variable.
 
-       * rfc2047.el (rfc2047-encode): Use it.
+       * gnus-draft.el (gnus-draft-setup): Don't use message-setup.
 
-       * mm-util.el: Provide mm-encode-coding-region.
+       * nndraft.el (nndraft): Allow editing articles.
 
-       * gnus-sum.el (gnus-summary-mode): Enable multibyte.
+       * gnus-ems.el (gnus-x-splash): Ditto.
 
-       * gnus-util.el (gnus-set-work-buffer): Enable multibyte.
+       * gnus.el (gnus-splash-face): Darker face.
 
-       * mm-util.el (mm-enable-multibyte): New function.
+       * gnus-draft.el (gnus-draft-setup): Clobbered variables.
 
-       * message.el (message-set-work-buffer): Set multibyte.
+Sat Sep 20 23:23:49 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus.el (gnus-continuum-version): Be valid forever and ever.
+       * gnus.el: Quassia Gnus v0.8 is released.
 
-       * gnus-util.el (gnus-point-at-eol): Removed.
-       (gnus-point-at-bol): Ditto.
+Sat Sep 20 20:41:16 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * base64.el (base64-decode-region): Commented out messaging.
+       * gnus-start.el (gnus-setup-news-hook): New hook.
 
-1998-08-31  Didier Verna  <verna@inf.enst.fr>
+       * gnus-agent.el (gnus-agentize): Really set up queue group.
+       (gnus-open-agent): Setup queue here.
 
-       * 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).
+Sat Sep 20 20:23:07 1997  Matt Simmons  <simmonmt@acm.org>
 
-1998-08-31 12:53:32  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-set-auto-save-file-name): Make things work
+       without drafts.
 
-       * gnus.el (gnus-article-display-hook): Added
-       gnus-article-decode-rfc1522 to hook.
+Sat Sep 20 18:32:02 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Mon Aug 31 12:43:46 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * nnmh.el (nnmh-request-list-1): Check for links to ".".
 
-       * gnus.el: Pterodactyl Gnus v0.10 is released.
+       * nndraft.el (nndraft-possibly-change-group): New function.
 
-1998-08-31 11:45:13  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-agent.el (gnus-agent-queue-setup): New function.
 
-       * nnfolder.el (nnfolder-delete-mail): Narrow to mail and allow
-       hook to be run.
+Thu Sep 18 04:54:59 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-1998-08-30 17:59:07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el: Quassia Gnus v0.7 is released.
 
-       * rfc2047.el (rfc2047-encodable-p): Use find-charset-region.
+Thu Sep 18 03:33:54 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * mm-util.el (mm-charsets-in-region): Removed.
+       * gnus-msg.el (gnus-setup-message): Slap a progn around forms.
 
-       * rfc2047.el: Renamed file.
+       * nndraft.el (nndraft-articles): Make sure directory exists.
 
-       * gnus-msg.el (gnus-copy-article-buffer): Multibyte.
+       * message.el (message-mode): Don't delete article.
 
-       * message.el (message-mode): Set multibyte.
+       * nnmh.el (nnmh-request-accept-article): Don't save when
+       noinsert.
 
-       * mm-util.el (mm-charsets-in-region): Copied here.
+Wed Sep 17 03:37:59 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-util.el: Removed gnus-truncate-string.
+       * nndraft.el (nndraft-directory): Changed defaults.
 
-       * gnus-art.el (gnus-article-decode-mime-words): Use 1522.
+       * gnus-agent.el (gnus-agent-fetch-session): Bind command method.
 
-       * rfc1522.el (rfc1522-unencoded-charsets): New variable.
-       (rfc1522-encodable-p): New function.
-       (rfc1522-encode-message-header): Use it.
+Wed Sep 17 03:28:36 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-Sun Aug 30 17:46:01 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus.el: Quassia Gnus v0.6 is released.
 
-       * gnus.el: Pterodactyl Gnus v0.9 is released.
+1997-08-17  SL Baur  <steve@altair.xemacs.org>
 
-1998-08-30 16:13:08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * dgnushack.el (dgnushack-compile): Ignore .el files beginning
+       with an `=' character.
 
-       * mm-util.el: Shadow encode-coding-string.
+Wed Sep 17 02:30:04 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * base64.el (base64-encode-region): Don't add newline.
+       * gnus-sum.el (gnus-build-sparse-threads): Allow display of looped
+       References.
 
-       * rfc1522.el (rfc1522-narrow-to-field): Copied here.
+       * gnus-agent.el (gnus-agent-fetch-group-1): Separated out into
+       function.
 
-       * mm-util.el: New file.
+       * message.el (message-delete-not-region): New command and
+       keystroke.
 
-       * mm-decode.el: Somewhat depleted.
-       * mm-encode.el: Ditto.
+Tue Sep 16 00:58:26 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * rfc1522.el: New file.
+       * nndraft.el (nndraft-directory): Changed value.
 
-       * mm-util.el (mm-replace-chars-in-string): Copied here.
+       * message.el (message-kill-buffer): Disassociate draft.
+       (message-mode): Use kill hook to disassociate.
+       (message-disassociate-draft): Double-check.
 
-       * mm-encode.el (mm-q-encode-region): New function.
+       * gnus-agent.el (gnus-agentize): Don't set twice.
 
-       * qp.el (quoted-printable-encode-region): Take an optional CLASS
-       param.
+       * gnus-art.el (gnus-article-prepare): Go to the right line before
+       marking.
 
-       * mm-encode.el (mm-encode-word-region): Downcase.
+       * gnus-start.el: Renamed the drafts group.
 
-Sun Aug 30 15:28:01 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-agent.el (gnus-agent-lib-file): Changed name of directory.
 
-       * gnus.el: Pterodactyl Gnus v0.8 is released.
+       * gnus-draft.el (gnus-draft-mode): Simplify.
 
-1998-08-30 12:23:03  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Tue Sep 16 00:18:11 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * message.el (message-send-mail): Encode headers.
+       * gnus.el: Quassia Gnus v0.5 is released.
 
-       * qp.el (quoted-printable-encode-region): Encode 8-bit words.
-       (quoted-printable-encode-region): Upcase.
+Mon Sep 15 00:53:50 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.el (message-default-charset): New variable.
+       * gnus-sum.el (gnus-alter-header-function): New variable.
+       (gnus-nov-parse-line): Use it.
+       (gnus-get-newsgroup-headers): Ditto.
 
-       * qp.el (quoted-printable-encode-region): Optional param FOLD.
+       * gnus-draft.el (gnus-group-send-drafts): Don't send when
+       unplugged.
 
-       * message.el (message-narrow-to-field): Changed name.
+       * gnus-sum.el (gnus-summary-read-group): Don't show-all when
+       skipping groups.
 
-       * mm-encode.el: New file.
+       * gnus-start.el (gnus-start-draft-setup): Changed name.
 
-       * message.el (message-narrow-to-header): New function.
+Mon Sep 15 00:40:09 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-art.el (gnus-article-decode-mime-words): Place point in the
-       right buffer.
+       * gnus.el: Quassia Gnus v0.4 is released.
 
-Sun Aug 30 12:15:54 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Mon Sep 15 00:19:07 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Pterodactyl Gnus v0.7 is released.
+       * gnus-sum.el (gnus-summary-goto-article): Accept Message-ID's.
 
-1998-08-30 01:26:12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Sep 14 21:41:35 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.el: Remove autoload for
-       gnus-article-mime-decode-quoted-printable.
+       * gnus-sum.el (gnus-group-make-articles-read): No params.
 
-       * mm-decode.el (mm-charset-to-coding-system): Allow iso-8859-1 to
-       be decoded in non-MULE Emacsen.
+       * nndraft.el (nndraft-status-string): Fix.
 
-       * gnus-xmas.el (gnus-xmas-logo-color-alist): More brown.
+       * gnus-draft.el (gnus-group-send-drafts): New command.
 
-1998-08-29  SL Baur  <steve@altair.xemacs.org>
+       * gnus-sum.el (gnus-compute-read-articles): Separated.
+       (gnus-update-read-articles): Allow computation.
 
-       * gnus-xmas.el (gnus-xmas-logo-color-alist): Try shades of brown.
+       * nndraft.el (nndraft-articles): New function.
 
-1998-08-30 01:04:57  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-send): Disabled test.
 
-       * mm-decode.el: Check for coding-system-list.
+Sun Sep 14 21:17:34 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-Sun Aug 30 00:59:15 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus.el: Quassia Gnus v0.3 is released.
 
-       * gnus.el: Pterodactyl Gnus v0.6 is released.
+Sun Sep 14 01:51:45 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-08-30 00:36:28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus-agent.el (gnus-agent-short-article): New variables.
 
-       * nnheader.el (fboundp): Protect code-coding-string.
+       * message.el (message-set-auto-save-file-name): Use drafts.
 
-       * gnus-art.el (gnus-article-mode): Check that set-buffer-multibyte
-       is available.
+       * nndraft.el (nndraft-request-expire-articles): Use it.
 
-Sat Aug 29 23:24:31 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * nnmh.el (nnmh-deletable-article-p): Change.
+       (nnmh-allow-delete-final): New variable.
 
-       * gnus.el: Pterodactyl Gnus v0.5 is released.
+       * gnus-msg.el (gnus-summary-send-draft): Removed.
 
-1998-08-29 22:38:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.el (gnus-article-mark-lists): Save unsendable marks.
 
-       * gnus-art.el (gnus-article-mode): Make article buffer multibyte.
-       (gnus-hack-decode-rfc1522): Removed.
+       * gnus-sum.el (gnus-newsgroup-unsendable): New variable.
 
-       * mm-decode.el (mm-charset-coding-system-alist): Check better.
+       * gnus-draft.el: New file.
 
-Sat Aug 29 22:20:39 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * gnus-sum.el (gnus-unsendable-mark): New variable.
 
-       * gnus.el: Gnus v0.4 is released.
+       * nndraft.el (nndraft-execute-nnmh-command): Cleanup.
 
-1998-08-29 20:53:29  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.el (message-send-news): Use `gnus-request-post'.
 
-       * gnus-art.el (gnus-article-decode-mime-words): New command and
-       keystroke.
+       * gnus-agent.el (gnus-agentize): New command.
 
-       * qp.el (quoted-printable-decode-region): Don't use hexl.
+       * gnus-bcklg.el (gnus-backlog-remove-article): Remove the ident
+       from the list.
 
-       * gnus-xmas.el (gnus-xmas-logo-color-style): Changed to dino.
+Sun Sep 14 00:26:47 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus-sum.el (gnus-parse-headers-hook): Default to nil.
-       (gnus-structured-field-decoder): Removed.
-       (gnus-unstructured-field-decoder): Ditto.
+       * gnus.el: Quassia Gnus v0.2 is released.
 
-       * mm-decode.el: New file.
+Sun Sep 14 00:24:52 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * qp.el: New file.
+       * gnus-score.el (gnus-score-headers): Make sure the summary buffer
+       exists.
 
-       * gnus-art.el (article-mime-decode-quoted-printable): Removed.
+Sat Sep 13 23:35:28 1997  Greg Stark  <gsstark@mit.edu>
 
-       * gnus-ems.el (fboundp): Removed gnus-split-string.
+       * gnus-ems.el (gnus-x-splash): New function.
 
-       * gnus.el (gnus-splash-face): Doc fix.
+Sat Sep 13 22:46:16 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus-ems.el (fboundp): Don't bind mail-file-babyl-p.
+       * gnus-start.el (gnus-1): Use it.
 
-       * gnus-art.el (article-mime-decode-quoted-printable): Don't use
-       hexl.
+       * gnus-ems.el (gnus-decode-coding-string): New alias.
 
-       * nnheader.el (nnheader-temp-write): Removed.
+       * message.el (message-unix-mail-delimiter): Dox fox.
 
-Sat Aug 29 20:34:17 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+       * nnmh.el (nnmh-request-list-1): Don't use coding system.
 
-       * gnus.el: Gnus v0.3 is released.
+       * gnus-sum.el (gnus-summary-catchup): Reverse logic.
 
-Sat Aug 29 19:32:06 1998  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
+Sat Sep 13 21:21:38 1997  Lars Magne Ingebrigtsen  <larsi@menja.ifi.uio.no>
 
-       * gnus.el: Gnus v0.2 is released.
+       * gnus.el: Quassia Gnus v0.1 is released.
diff --git a/lisp/Makefile b/lisp/Makefile
deleted file mode 100644 (file)
index b949400..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-SHELL = /bin/sh
-EMACS=emacs
-FLAGS=-batch -q -no-site-file -l ./dgnushack.el
-
-total:
-       rm -f *.elc ; $(EMACS) $(FLAGS) -f dgnushack-compile
-
-all:
-       rm -f *.elc ; $(EMACS) $(FLAGS) -f dgnushack-compile
-
-clever:
-       $(EMACS) $(FLAGS) -f dgnushack-compile
-
-some:
-       $(EMACS) $(FLAGS) -f dgnushack-compile
-
-tags:
-       etags *.el
-
-separately:
-       rm -f *.elc ; for i in *.el; do $(EMACS) $(FLAGS) -f batch-byte-compile $$i; done
-
-pot:
-       xpot -drgnus -r`cat ./version` *.el > rgnus.pot
-
-gnus-load.el: 
-       echo ";;; gnus-load.el --- automatically extracted custom dependencies" > gnus-load.el
-       echo ";;" >> gnus-load.el
-       echo ";;; Code:" >> gnus-load.el
-       echo >> gnus-load.el
-       $(EMACS)  $(FLAGS) -l ./dgnushack.el -l cus-edit.el *.el \
-               -f custom-make-dependencies >> gnus-load.el
-       echo >> gnus-load.el
-       echo "(provide 'gnus-load)" >> gnus-load.el
-       echo >> gnus-load.el
-       echo ";;; gnus-load.el ends here" >> gnus-load.el
-
-distclean:
-       rm -f *.orig *.rej *.elc *~
-
index 93dd3d5..d143e8f 100644 (file)
@@ -12,19 +12,22 @@ INSTALL_DATA = @INSTALL_DATA@
 SHELL = /bin/sh
 VPATH = @srcdir@
 
-all total:
+total:
+       rm -f *.elc ; $(EMACS) $(FLAGS) -f dgnushack-compile
+
+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"
 
-# The "clever" rule is unsafe, since redefined macros are loaded from
-# .elc files, and not the .el file.
-clever some:
+clever:
+       $(EMACS) $(FLAGS) -f dgnushack-compile
+
+some:
        $(EMACS) $(FLAGS) -f dgnushack-compile
 
 install: clever
-       rm -f dgnushack.elc
        $(SHELL) $(top_srcdir)/mkinstalldirs $(lispdir)
        for p in *.elc; do \
          echo " $(INSTALL_DATA) $$p $(lispdir)/$$p"; \
diff --git a/lisp/base64.el b/lisp/base64.el
deleted file mode 100644 (file)
index 0eec5f4..0000000
+++ /dev/null
@@ -1,275 +0,0 @@
-;;; base64.el,v --- Base64 encoding functions
-;; Author: Kyle E. Jones
-;; Created: 1997/03/12 14:37:09
-;; Version: 1.6
-;; Keywords: extensions
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Copyright (C) 1997 Kyle E. Jones
-;;;
-;;; This file is not part of GNU Emacs, but the same permissions apply.
-;;;
-;;; GNU Emacs is free software; you can redistribute it and/or modify
-;;; it under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 2, or (at your option)
-;;; any later version.
-;;;
-;;; GNU Emacs is distributed in the hope that it will be useful,
-;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;;; Boston, MA 02111-1307, USA.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;; For non-MULE
-(if (not (fboundp 'char-int))
-    (fset 'char-int 'identity))
-
-(defvar base64-alphabet
-  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")
-
-(defvar base64-decoder-program nil
-  "*Non-nil value should be a string that names a MIME base64 decoder.
-The program should expect to read base64 data on its standard
-input and write the converted data to its standard output.")
-
-(defvar base64-decoder-switches nil
-  "*List of command line flags passed to the command named by
-base64-decoder-program.")
-
-(defvar base64-encoder-program nil
-  "*Non-nil value should be a string that names a MIME base64 encoder.
-The program should expect arbitrary data on its standard
-input and write base64 data to its standard output.")
-
-(defvar base64-encoder-switches nil
-  "*List of command line flags passed to the command named by
-base64-encoder-program.")
-
-(defconst base64-alphabet-decoding-alist
-  '(
-    ( ?A . 00) ( ?B . 01) ( ?C . 02) ( ?D . 03) ( ?E . 04) ( ?F . 05)
-    ( ?G . 06) ( ?H . 07) ( ?I . 08) ( ?J . 09) ( ?K . 10) ( ?L . 11)
-    ( ?M . 12) ( ?N . 13) ( ?O . 14) ( ?P . 15) ( ?Q . 16) ( ?R . 17)
-    ( ?S . 18) ( ?T . 19) ( ?U . 20) ( ?V . 21) ( ?W . 22) ( ?X . 23)
-    ( ?Y . 24) ( ?Z . 25) ( ?a . 26) ( ?b . 27) ( ?c . 28) ( ?d . 29)
-    ( ?e . 30) ( ?f . 31) ( ?g . 32) ( ?h . 33) ( ?i . 34) ( ?j . 35)
-    ( ?k . 36) ( ?l . 37) ( ?m . 38) ( ?n . 39) ( ?o . 40) ( ?p . 41)
-    ( ?q . 42) ( ?r . 43) ( ?s . 44) ( ?t . 45) ( ?u . 46) ( ?v . 47)
-    ( ?w . 48) ( ?x . 49) ( ?y . 50) ( ?z . 51) ( ?0 . 52) ( ?1 . 53)
-    ( ?2 . 54) ( ?3 . 55) ( ?4 . 56) ( ?5 . 57) ( ?6 . 58) ( ?7 . 59)
-    ( ?8 . 60) ( ?9 . 61) ( ?+ . 62) ( ?/ . 63)
-   ))
-
-(defvar base64-alphabet-decoding-vector
-  (let ((v (make-vector 123 nil))
-       (p base64-alphabet-decoding-alist))
-    (while p
-      (aset v (car (car p)) (cdr (car p)))
-      (setq p (cdr p)))
-    v))
-
-(defvar base64-binary-coding-system 'binary)
-
-(defun base64-run-command-on-region (start end output-buffer command
-                                          &rest arg-list)
-  (let ((tempfile nil) status errstring default-process-coding-system 
-       (coding-system-for-write base64-binary-coding-system)
-       (coding-system-for-read base64-binary-coding-system))
-    (unwind-protect
-       (progn
-         (setq tempfile (make-temp-name "base64"))
-         (setq status
-               (apply 'call-process-region
-                      start end command nil
-                      (list output-buffer tempfile)
-                      nil arg-list))
-         (cond ((equal status 0) t)
-               ((zerop (save-excursion
-                         (set-buffer (find-file-noselect tempfile))
-                         (buffer-size)))
-                t)
-               (t (save-excursion
-                    (set-buffer (find-file-noselect tempfile))
-                    (setq errstring (buffer-string))
-                    (kill-buffer nil)
-                    (cons status errstring)))))
-      (ignore-errors
-       (delete-file tempfile)))))
-
-(if (string-match "XEmacs" emacs-version)
-    (defalias 'base64-insert-char 'insert-char)
-  (defun base64-insert-char (char &optional count ignored buffer)
-    (if (or (null buffer) (eq buffer (current-buffer)))
-       (insert-char char count)
-      (with-current-buffer buffer
-       (insert-char char count))))
-  (setq base64-binary-coding-system 'no-conversion))
-
-(defun base64-decode-region (start end)
-  (interactive "r")
-  ;;(message "Decoding base64...")
-  (let ((work-buffer nil)
-       (done nil)
-       (counter 0)
-       (bits 0)
-       (lim 0) inputpos
-       (non-data-chars (concat "^=" base64-alphabet)))
-    (unwind-protect
-       (save-excursion
-         (setq work-buffer (generate-new-buffer " *base64-work*"))
-         (buffer-disable-undo work-buffer)
-         (if base64-decoder-program
-             (let* ((binary-process-output t) ; any text already has CRLFs
-                    (status (apply 'base64-run-command-on-region
-                                  start end work-buffer
-                                  base64-decoder-program
-                                  base64-decoder-switches)))
-               (if (not (eq status t))
-                   (error "%s" (cdr status))))
-           (goto-char start)
-           (skip-chars-forward non-data-chars end)
-           (while (not done)
-             (setq inputpos (point))
-             (cond
-              ((> (skip-chars-forward base64-alphabet end) 0)
-               (setq lim (point))
-               (while (< inputpos lim)
-                 (setq bits (+ bits
-                               (aref base64-alphabet-decoding-vector
-                                     (char-int (char-after inputpos)))))
-                 (setq counter (1+ counter)
-                       inputpos (1+ inputpos))
-                 (cond ((= counter 4)
-                        (base64-insert-char (lsh bits -16) 1 nil work-buffer)
-                        (base64-insert-char (logand (lsh bits -8) 255) 1 nil
-                                        work-buffer)
-                        (base64-insert-char (logand bits 255) 1 nil
-                                            work-buffer)
-                        (setq bits 0 counter 0))
-                       (t (setq bits (lsh bits 6)))))))
-             (cond
-              ((= (point) end)
-               (if (not (zerop counter))
-                   (error "at least %d bits missing at end of base64 encoding"
-                          (* (- 4 counter) 6)))
-               (setq done t))
-              ((eq (char-after (point)) ?=)
-               (setq done t)
-               (cond ((= counter 1)
-                      (error "at least 2 bits missing at end of base64 encoding"))
-                     ((= counter 2)
-                      (base64-insert-char (lsh bits -10) 1 nil work-buffer))
-                     ((= counter 3)
-                      (base64-insert-char (lsh bits -16) 1 nil work-buffer)
-                      (base64-insert-char (logand (lsh bits -8) 255)
-                                          1 nil work-buffer))
-                     ((= counter 0) t)))
-              (t (skip-chars-forward non-data-chars end)))))
-         (or (markerp end) (setq end (set-marker (make-marker) end)))
-         (goto-char start)
-         (insert-buffer-substring work-buffer)
-         (delete-region (point) end))
-      (and work-buffer (kill-buffer work-buffer))))
-  ;;(message "Decoding base64... done")
-  )
-
-(defun base64-encode-region (start end &optional no-line-break)
-  (interactive "r")
-  (message "Encoding base64...")
-  (let ((work-buffer nil)
-       (counter 0)
-       (cols 0)
-       (bits 0)
-       (alphabet base64-alphabet)
-       inputpos)
-    (unwind-protect
-       (save-excursion
-         (setq work-buffer (generate-new-buffer " *base64-work*"))
-         (buffer-disable-undo work-buffer)
-         (if base64-encoder-program
-             (let ((status (apply 'base64-run-command-on-region
-                                  start end work-buffer
-                                  base64-encoder-program
-                                  base64-encoder-switches)))
-               (if (not (eq status t))
-                   (error "%s" (cdr status))))
-           (setq inputpos start)
-           (while (< inputpos end)
-             (setq bits (+ bits (char-int (char-after inputpos))))
-             (setq counter (1+ counter))
-             (cond ((= counter 3)
-                    (base64-insert-char (aref alphabet (lsh bits -18)) 1 nil
-                                        work-buffer)
-                    (base64-insert-char
-                     (aref alphabet (logand (lsh bits -12) 63))
-                     1 nil work-buffer)
-                    (base64-insert-char
-                     (aref alphabet (logand (lsh bits -6) 63))
-                     1 nil work-buffer)
-                    (base64-insert-char
-                     (aref alphabet (logand bits 63))
-                     1 nil work-buffer)
-                    (setq cols (+ cols 4))
-                    (cond ((and (= cols 72)
-                                (not no-line-break))
-                           (base64-insert-char ?\n 1 nil work-buffer)
-                           (setq cols 0)))
-                    (setq bits 0 counter 0))
-                   (t (setq bits (lsh bits 8))))
-             (setq inputpos (1+ inputpos)))
-           ;; write out any remaining bits with appropriate padding
-           (if (= counter 0)
-               nil
-             (setq bits (lsh bits (- 16 (* 8 counter))))
-             (base64-insert-char (aref alphabet (lsh bits -18)) 1 nil
-                                 work-buffer)
-             (base64-insert-char (aref alphabet (logand (lsh bits -12) 63))
-                                 1 nil work-buffer)
-             (if (= counter 1)
-                 (base64-insert-char ?= 2 nil work-buffer)
-               (base64-insert-char (aref alphabet (logand (lsh bits -6) 63))
-                                   1 nil work-buffer)
-               (base64-insert-char ?= 1 nil work-buffer)))
-           (if (and (> cols 0)
-                    (not no-line-break))
-               (base64-insert-char ?\n 1 nil work-buffer)))
-         (or (markerp end) (setq end (set-marker (make-marker) end)))
-         (goto-char start)
-         (insert-buffer-substring work-buffer)
-         (delete-region (point) end))
-      (and work-buffer (kill-buffer work-buffer))))
-  (message "Encoding base64... done"))
-
-(defun base64-encode (string)
-  (save-excursion
-    (set-buffer (get-buffer-create " *base64-encode*"))
-    (erase-buffer)
-    (insert string)
-    (base64-encode-region (point-min) (point-max))
-    (skip-chars-backward " \t\r\n")
-    (delete-region (point-max) (point))
-    (prog1
-       (buffer-string)
-      (kill-buffer (current-buffer)))))
-
-(defun base64-decode (string)
-  (save-excursion
-    (set-buffer (get-buffer-create " *base64-decode*"))
-    (erase-buffer)
-    (insert string)
-    (base64-decode-region (point-min) (point-max))
-    (goto-char (point-max))
-    (skip-chars-backward " \t\r\n")
-    (delete-region (point-max) (point))
-    (prog1
-       (buffer-string)
-      (kill-buffer (current-buffer)))))
-
-(fset 'base64-decode-string 'base64-decode)
-
-(provide 'base64)
diff --git a/lisp/binhex.el b/lisp/binhex.el
deleted file mode 100644 (file)
index ddad17e..0000000
+++ /dev/null
@@ -1,307 +0,0 @@
-;;; binhex.el -- elisp native binhex decode
-;; Copyright (c) 1998 by Shenghuo Zhu <zsh@cs.rochester.edu>
-
-;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
-;; Create Date: Oct 1, 1998
-;; $Revision: 1.1.1.10 $
-;; Time-stamp: <Tue Oct  6 23:48:38 EDT 1998 zsh>
-;; Keywords: binhex
-
-;; This file is not part of GNU Emacs, but the same permissions
-;; apply.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;;; Code:
-
-(if (not (fboundp 'char-int))
-    (fset 'char-int 'identity))
-
-(defvar binhex-decoder-program "hexbin"
-  "*Non-nil value should be a string that names a uu decoder.
-The program should expect to read binhex data on its standard
-input and write the converted data to its standard output.")
-
-(defvar binhex-decoder-switches '("-d")
-  "*List of command line flags passed to the command named by binhex-decoder-program.")
-
-(defconst binhex-alphabet-decoding-alist
-  '(( ?\! . 0) ( ?\" . 1) ( ?\# . 2) ( ?\$ . 3) ( ?\% . 4) ( ?\& . 5)
-    ( ?\' . 6) ( ?\( . 7) ( ?\) . 8) ( ?\* . 9) ( ?\+ . 10) ( ?\, . 11)
-    ( ?\- . 12) ( ?0 . 13) ( ?1 . 14) ( ?2 . 15) ( ?3 . 16) ( ?4 . 17)
-    ( ?5 . 18) ( ?6 . 19) ( ?8 . 20) ( ?9 . 21) ( ?@ . 22) ( ?A . 23)
-    ( ?B . 24) ( ?C . 25) ( ?D . 26) ( ?E . 27) ( ?F . 28) ( ?G . 29)
-    ( ?H . 30) ( ?I . 31) ( ?J . 32) ( ?K . 33) ( ?L . 34) ( ?M . 35)
-    ( ?N . 36) ( ?P . 37) ( ?Q . 38) ( ?R . 39) ( ?S . 40) ( ?T . 41)
-    ( ?U . 42) ( ?V . 43) ( ?X . 44) ( ?Y . 45) ( ?Z . 46) ( ?\[ . 47)
-    ( ?\` . 48) ( ?a . 49) ( ?b . 50) ( ?c . 51) ( ?d . 52) ( ?e . 53)
-    ( ?f . 54) ( ?h . 55) ( ?i . 56) ( ?j . 57) ( ?k . 58) ( ?l . 59)
-    ( ?m . 60) ( ?p . 61) ( ?q . 62) ( ?r . 63)))
-
-(defun binhex-char-map (char)
-  (cdr (assq char binhex-alphabet-decoding-alist)))
-
-;;;###autoload
-(defconst binhex-begin-line
-  "^:...............................................................$")
-(defconst binhex-body-line
-  "^[^:]...............................................................$")
-(defconst binhex-end-line ":$")
-
-(defvar binhex-temporary-file-directory
-  (cond ((fboundp 'temp-directory) (temp-directory))
-       ((boundp 'temporary-file-directory) temporary-file-directory)
-       ("/tmp/")))
-
-(if (string-match "XEmacs" emacs-version)
-    (defalias 'binhex-insert-char 'insert-char)
-  (defun binhex-insert-char (char &optional count ignored buffer)
-    (if (or (null buffer) (eq buffer (current-buffer)))
-       (insert-char char count)
-      (with-current-buffer buffer
-       (insert-char char count)))))
-
-(defvar binhex-crc-table
-  [0  4129  8258  12387  16516  20645  24774  28903
-      33032  37161  41290  45419  49548  53677  57806  61935
-      4657  528  12915  8786  21173  17044  29431  25302
-      37689  33560  45947  41818  54205  50076  62463  58334
-      9314  13379  1056  5121  25830  29895  17572  21637
-      42346  46411  34088  38153  58862  62927  50604  54669
-      13907  9842  5649  1584  30423  26358  22165  18100
-      46939  42874  38681  34616  63455  59390  55197  51132
-      18628  22757  26758  30887  2112  6241  10242  14371
-      51660  55789  59790  63919  35144  39273  43274  47403
-      23285  19156  31415  27286  6769  2640  14899  10770
-      56317  52188  64447  60318  39801  35672  47931  43802
-      27814  31879  19684  23749  11298  15363  3168  7233
-      60846  64911  52716  56781  44330  48395  36200  40265
-      32407  28342  24277  20212  15891  11826  7761  3696
-      65439  61374  57309  53244  48923  44858  40793  36728
-      37256  33193  45514  41451  53516  49453  61774  57711
-      4224  161  12482  8419  20484  16421  28742  24679
-      33721  37784  41979  46042  49981  54044  58239  62302
-      689  4752  8947  13010  16949  21012  25207  29270
-      46570  42443  38312  34185  62830  58703  54572  50445
-      13538  9411  5280  1153  29798  25671  21540  17413
-      42971  47098  34713  38840  59231  63358  50973  55100
-      9939  14066  1681  5808  26199  30326  17941  22068
-      55628  51565  63758  59695  39368  35305  47498  43435
-      22596  18533  30726  26663  6336  2273  14466  10403
-      52093  56156  60223  64286  35833  39896  43963  48026
-      19061  23124  27191  31254  2801  6864  10931  14994
-      64814  60687  56684  52557  48554  44427  40424  36297
-      31782  27655  23652  19525  15522  11395  7392  3265
-      61215  65342  53085  57212  44955  49082  36825  40952
-      28183  32310  20053  24180  11923  16050  3793  7920])
-
-(defun binhex-update-crc (crc char &optional count)
-  (if (null count) (setq count 1))
-  (while (> count 0)
-    (setq crc (logxor (logand (lsh crc 8) 65280)
-                     (aref binhex-crc-table
-                           (logxor (logand (lsh crc -8) 255)
-                                   char)))
-         count (1- count)))
-  crc)
-
-(defun binhex-verify-crc (buffer start end)
-  (with-current-buffer buffer
-    (let ((pos start) (crc 0) (last (- end 2)))
-      (while (< pos last)
-       (setq crc (binhex-update-crc crc (char-after pos))
-             pos (1+ pos)))
-      (if (= crc (binhex-string-big-endian (buffer-substring last end)))
-         nil
-       (error "CRC error")))))
-
-(defun binhex-string-big-endian (string)
-  (let ((ret 0) (i 0) (len (length string)))
-    (while (< i len)
-      (setq ret (+ (lsh ret 8) (char-int (aref string i)))
-           i (1+ i)))
-    ret))
-
-(defun binhex-string-little-endian (string)
-  (let ((ret 0) (i 0) (shift 0) (len (length string)))
-    (while (< i len)
-      (setq ret (+ ret (lsh (char-int (aref string i)) shift))
-           i (1+ i)
-           shift (+ shift 8)))
-    ret))
-
-(defun binhex-header (buffer)
-  (with-current-buffer buffer
-    (let ((pos (point-min)) len)
-      (vector
-       (prog1
-          (setq len (char-int (char-after pos)))
-        (setq pos (1+ pos)))
-       (buffer-substring pos (setq pos (+ pos len)))
-       (prog1
-          (setq len (char-int (char-after pos)))
-        (setq pos (1+ pos)))
-       (buffer-substring pos (setq pos (+ pos 4)))
-       (buffer-substring pos (setq pos (+ pos 4)))
-       (binhex-string-big-endian
-       (buffer-substring pos (setq pos (+ pos 2))))
-       (binhex-string-big-endian
-       (buffer-substring pos (setq pos (+ pos 4))))
-       (binhex-string-big-endian
-       (buffer-substring pos (setq pos (+ pos 4))))))))
-
-(defvar binhex-last-char)
-(defvar binhex-repeat)
-
-(defun binhex-push-char (char &optional count ignored buffer)
-  (cond
-   (binhex-repeat
-    (if (eq char 0)
-       (binhex-insert-char (setq binhex-last-char 144) 1
-                           ignored buffer)
-      (binhex-insert-char binhex-last-char (- char 1)
-                         ignored buffer)
-      (setq binhex-last-char nil))
-    (setq binhex-repeat nil))
-   ((= char 144)
-    (setq binhex-repeat t))
-   (t
-    (binhex-insert-char (setq binhex-last-char char) 1 ignored buffer))))
-
-(defun binhex-decode-region (start end &optional header-only)
-  "Binhex decode region between START and END.
-If HEADER-ONLY is non-nil only decode header and return filename."
-  (interactive "r")
-  (let ((work-buffer nil)
-       (counter 0)
-       (bits 0) (tmp t)
-       (lim 0) inputpos
-       (non-data-chars " \t\n\r:")
-       file-name-length data-fork-start
-       header
-       binhex-last-char binhex-repeat)
-    (unwind-protect
-       (save-excursion
-         (goto-char start)
-         (when (re-search-forward binhex-begin-line end t)
-           (if (boundp 'enable-multibyte-characters)
-               (let ((multibyte
-                      (default-value 'enable-multibyte-characters)))
-                 (setq-default enable-multibyte-characters nil)
-                 (setq work-buffer
-                       (generate-new-buffer " *binhex-work*"))
-                 (setq-default enable-multibyte-characters multibyte))
-             (setq work-buffer (generate-new-buffer " *binhex-work*")))
-           (buffer-disable-undo work-buffer)
-           (beginning-of-line)
-           (setq bits 0 counter 0)
-           (while tmp
-             (skip-chars-forward non-data-chars end)
-             (setq inputpos (point))
-             (end-of-line)
-             (setq lim (point))
-             (while (and (< inputpos lim)
-                         (setq tmp (binhex-char-map (char-after inputpos))))
-               (setq bits (+ bits tmp)
-                     counter (1+ counter)
-                     inputpos (1+ inputpos))
-               (cond ((= counter 4)
-                      (binhex-push-char (lsh bits -16) 1 nil work-buffer)
-                      (binhex-push-char (logand (lsh bits -8) 255) 1 nil
-                                        work-buffer)
-                      (binhex-push-char (logand bits 255) 1 nil
-                                        work-buffer)
-                      (setq bits 0 counter 0))
-                     (t (setq bits (lsh bits 6)))))
-             (if (null file-name-length)
-                 (with-current-buffer work-buffer
-                   (setq file-name-length (char-after (point-min))
-                         data-fork-start (+ (point-min)
-                                            file-name-length 22))))
-             (if (and (null header)
-                      (with-current-buffer work-buffer
-                        (>= (buffer-size) data-fork-start)))
-                 (progn
-                   (binhex-verify-crc work-buffer
-                                      1 data-fork-start)
-                   (setq header (binhex-header work-buffer))
-                   (if header-only (setq tmp nil counter 0))))
-             (setq tmp (and tmp (not (eq inputpos end)))))
-           (cond
-            ((= counter 3)
-             (binhex-push-char (logand (lsh bits -16) 255) 1 nil
-                               work-buffer)
-             (binhex-push-char (logand (lsh bits -8) 255) 1 nil
-                               work-buffer))
-            ((= counter 2)
-             (binhex-push-char (logand (lsh bits -10) 255) 1 nil
-                               work-buffer))))
-      (if header-only nil
-       (binhex-verify-crc work-buffer
-                          data-fork-start
-                          (+ data-fork-start (aref header 6) 2))
-       (or (markerp end) (setq end (set-marker (make-marker) end)))
-       (goto-char start)
-       (insert-buffer-substring work-buffer
-                                data-fork-start (+ data-fork-start
-                                                   (aref header 6)))
-       (delete-region (point) end)))
-      (and work-buffer (kill-buffer work-buffer)))
-    (if header (aref header 1))))
-
-(defun binhex-decode-region-external (start end)
-  "Binhex decode region between START and END using external decoder"
-  (interactive "r")
-  (let ((cbuf (current-buffer)) firstline work-buffer status
-       (file-name (concat binhex-temporary-file-directory
-                          (binhex-decode-region start end t)
-                          ".data")))
-    (save-excursion
-      (goto-char start)
-      (when (re-search-forward binhex-begin-line nil t)
-       (let ((cdir default-directory) default-process-coding-system)
-         (unwind-protect
-             (progn
-               (set-buffer (setq work-buffer
-                                 (generate-new-buffer " *binhex-work*")))
-               (buffer-disable-undo work-buffer)
-               (insert-buffer-substring cbuf firstline end)
-               (cd binhex-temporary-file-directory)
-               (apply 'call-process-region
-                      (point-min)
-                      (point-max)
-                      binhex-decoder-program
-                      nil
-                      nil
-                      nil
-                      binhex-decoder-switches))
-           (cd cdir) (set-buffer cbuf)))
-       (if (and file-name (file-exists-p file-name))
-           (progn
-             (goto-char start)
-             (delete-region start end)
-             (let (format-alist)
-               (insert-file-contents-literally file-name)))
-         (error "Can not binhex")))
-      (and work-buffer (kill-buffer work-buffer))
-      (ignore-errors
-       (if file-name (delete-file file-name))))))
-
-(provide 'binhex)
-
-;;; binhex.el ends here
diff --git a/lisp/date.el b/lisp/date.el
deleted file mode 100644 (file)
index b593e1c..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-;;; date.el --- Date and time handling functions
-;; Copyright (C) 1998 Free Software Foundation, Inc.
-
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;;     Masanobu Umeda <umerin@mse.kyutech.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:
-
-(require 'timezone)
-
-(defun parse-time-string (date)
-  "Convert DATE into time."
-  (decode-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 date-to-time (date)
-  "Convert DATE into time."
-  (apply 'encode-time (parse-time-string date)))
-
-(defun time-less-p (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 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 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 (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)))))
-
-(defun subtract-time (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 date-to-day (date)
-  "Return the number of days between year 1 and DATE."
-  (time-to-day (date-to-time date)))
-  
-(defun days-between (date1 date2)
-  "Return the number of days between DATE1 and DATE2."
-  (- (date-to-day date1) (date-to-day date2)))
-
-(defun date-leap-year-p (year)
-  "Return t if YEAR is a leap year."
-  (or (and (zerop (% year 4))
-          (not (zerop (% year 100))))
-      (zerop (% year 400))))
-
-(defun time-to-day-in-year (time)
-  "Return the day number within the year of the date month/day/year."
-  (let* ((tim (decode-time time))
-        (month (nth 4 tim))
-        (day (nth 3 tim))
-        (year (nth 5 tim))
-        (day-of-year (+ day (* 31 (1- month)))))
-    (when (> month 2)
-      (setq day-of-year (- day-of-year (/ (+ 23 (* 4 month)) 10)))
-      (when (date-leap-year-p year)
-       (setq day-of-year (1+ day-of-year))))
-    day-of-year))
-
-(defun time-to-day (time)
-  "The number of days between the Gregorian date 0001-12-31bce and TIME.
-The Gregorian date Sunday, December 31, 1bce is imaginary."
-  (let* ((tim (decode-time time))
-        (month (nth 4 tim))
-        (day (nth 3 tim))
-        (year (nth 5 tim)))
-    (+ (time-to-day-in-year time)      ;       Days this year
-       (* 365 (1- year))               ;       + Days in prior years
-       (/ (1- year) 4)                 ;       + Julian leap years
-       (- (/ (1- year) 100))           ;       - century years
-       (/ (1- year) 400))))            ;       + Gregorian leap years
-
-(provide 'date)
-
-;;; date.el ends here
index a75ab30..73e457f 100644 (file)
@@ -1,5 +1,5 @@
 ;;; dgnushack.el --- a hack to set the load path for byte-compiling
-;; Copyright (C) 1994,95,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1994,95,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Version: 4.19
@@ -30,6 +30,7 @@
 
 (require 'cl)
 (require 'bytecomp)
+(push "~/lisp/custom" load-path)
 (push "." load-path)
 (load "./lpath.el" nil t)
 
@@ -67,6 +68,9 @@ Modify to suit your needs."))
     (condition-case ()
        (require 'w3-forms)
       (error (setq files (delete "nnweb.el" (delete "nnlistserv.el" files)))))
+    (condition-case ()
+       (require 'bbdb)
+      (error (setq files (delete "gnus-bbdb.el" files))))
     (while (setq file (pop files))
       (when (or (and (not xemacs)
                     (not (member file '("gnus-xmas.el" "gnus-picon.el"
diff --git a/lisp/drums.el b/lisp/drums.el
deleted file mode 100644 (file)
index 6b4a0d8..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-;;; drums.el --- Functions for parsing RFC822bis headers
-;; Copyright (C) 1998 Free Software Foundation, Inc.
-
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; DRUMS is an IETF Working Group that works (or worked) on the
-;; successor to RFC822, "Standard For The Format Of Arpa Internet Text
-;; Messages".  This library is based on
-;; draft-ietf-drums-msg-fmt-05.txt, released on 1998-08-05.
-
-;;; Code:
-
-(require 'time-date)
-(require 'mm-util)
-
-(defvar drums-no-ws-ctl-token "\001-\010\013\014\016-\037\177"
-  "US-ASCII control characters excluding CR, LF and white space.")
-(defvar drums-text-token "\001-\011\013\014\016-\177"
-  "US-ASCII characters exlcuding CR and LF.")
-(defvar drums-specials-token "()<>[]:;@\\,.\""
-  "Special characters.")
-(defvar drums-quote-token "\\"
-  "Quote character.")
-(defvar drums-wsp-token " \t"
-  "White space.")
-(defvar drums-fws-regexp
-  (concat "[" drums-wsp-token "]*\n[" drums-wsp-token "]+")
-  "Folding white space.")
-(defvar drums-atext-token "-^a-zA-Z0-9!#$%&'*+/=?_`{|}~"
-  "Textual token.")
-(defvar drums-dot-atext-token "-^a-zA-Z0-9!#$%&'*+/=?_`{|}~."
-  "Textual token including full stop.")
-(defvar drums-qtext-token
-  (concat drums-no-ws-ctl-token "\041\043-\133\135-\177")
-  "Non-white-space control characaters, plus the rest of ASCII excluding backslash and doublequote.")
-(defvar drums-tspecials "][()<>@,;:\\\"/?="
-  "Tspecials.")
-
-(defvar drums-syntax-table
-  (let ((table (copy-syntax-table emacs-lisp-mode-syntax-table)))
-    (modify-syntax-entry ?\\ "/" table)
-    (modify-syntax-entry ?< "(" table)
-    (modify-syntax-entry ?> ")" table)
-    (modify-syntax-entry ?@ "w" table)
-    (modify-syntax-entry ?/ "w" table)
-    (modify-syntax-entry ?= " " table)
-    (modify-syntax-entry ?* " " table)
-    (modify-syntax-entry ?\; " " table)
-    (modify-syntax-entry ?\' " " table)
-    table))
-
-(defun drums-token-to-list (token)
-  "Translate TOKEN into a list of characters."
-  (let ((i 0)
-       b e c out range)
-    (while (< i (length token))
-      (setq c (mm-char-int (aref token i)))
-      (incf i)
-      (cond
-       ((eq c (mm-char-int ?-))
-       (if b
-           (setq range t)
-         (push c out)))
-       (range
-       (while (<= b c)
-         (push (mm-make-char 'ascii b) out)
-         (incf b))
-       (setq range nil))
-       ((= i (length token))
-       (push (mm-make-char 'ascii c) out))
-       (t
-       (setq b c))))
-    (nreverse out)))
-
-(defsubst drums-init (string)
-  (set-syntax-table drums-syntax-table)
-  (insert string)
-  (drums-unfold-fws)
-  (goto-char (point-min)))
-
-(defun drums-remove-comments (string)
-  "Remove comments from STRING."
-  (with-temp-buffer
-    (let (c)
-      (drums-init string)
-      (while (not (eobp))
-       (setq c (following-char))
-       (cond
-        ((eq c ?\")
-         (forward-sexp 1))
-        ((eq c ?\()
-         (delete-region (point) (progn (forward-sexp 1) (point))))
-        (t
-         (forward-char 1))))
-      (buffer-string))))
-
-(defun drums-remove-whitespace (string)
-  "Remove comments from STRING."
-  (with-temp-buffer
-    (drums-init string)
-    (let (c)
-      (while (not (eobp))
-       (setq c (following-char))
-       (cond
-        ((eq c ?\")
-         (forward-sexp 1))
-        ((eq c ?\()
-         (forward-sexp 1))
-        ((memq c '(? ?\t ?\n))
-         (delete-char 1))
-        (t
-         (forward-char 1))))
-      (buffer-string))))
-
-(defun drums-get-comment (string)
-  "Return the first comment in STRING."
-  (with-temp-buffer
-    (drums-init string)
-    (let (result c)
-      (while (not (eobp))
-       (setq c (following-char))
-       (cond
-        ((eq c ?\")
-         (forward-sexp 1))
-        ((eq c ?\()
-         (setq result
-               (buffer-substring
-                (1+ (point))
-                (progn (forward-sexp 1) (1- (point))))))
-        (t
-         (forward-char 1))))
-      result)))
-
-(defun drums-parse-address (string)
-  "Parse STRING and return a MAILBOX / DISPLAY-NAME pair."
-  (with-temp-buffer
-    (let (display-name mailbox c display-string)
-      (drums-init string)
-      (while (not (eobp))
-       (setq c (following-char))
-       (cond
-        ((or (eq c ? )
-             (eq c ?\t))
-         (forward-char 1))
-        ((eq c ?\()
-         (forward-sexp 1))
-        ((eq c ?\")
-         (push (buffer-substring
-                (1+ (point)) (progn (forward-sexp 1) (1- (point))))
-               display-name))
-        ((looking-at (concat "[" drums-atext-token "@" "]"))
-         (push (buffer-substring (point) (progn (forward-sexp 1) (point)))
-               display-name))
-        ((eq c ?<)
-         (setq mailbox
-               (drums-remove-whitespace
-                (drums-remove-comments
-                 (buffer-substring
-                  (1+ (point))
-                  (progn (forward-sexp 1) (1- (point))))))))
-        (t (error "Unknown symbol: %c" c))))
-      ;; If we found no display-name, then we look for comments.
-      (if display-name
-         (setq display-string
-               (mapconcat 'identity (reverse display-name) " "))
-       (setq display-string (drums-get-comment string)))
-      (if (not mailbox)
-         (when (string-match "@" display-string)
-           (cons
-            (mapconcat 'identity (nreverse display-name) "")
-            (drums-get-comment string)))
-       (cons mailbox display-string)))))
-
-(defun drums-parse-addresses (string)
-  "Parse STRING and return a list of MAILBOX / DISPLAY-NAME pairs."
-  (with-temp-buffer
-    (drums-init string)
-    (let ((beg (point))
-         pairs c)
-      (while (not (eobp))
-       (setq c (following-char))
-       (cond
-        ((memq c '(?\" ?< ?\())
-         (forward-sexp 1))
-        ((eq c ?,)
-         (push (drums-parse-address (buffer-substring beg (point)))
-               pairs)
-         (forward-char 1)
-         (setq beg (point)))
-        (t
-         (forward-char 1))))
-      (push (drums-parse-address (buffer-substring beg (point)))
-           pairs)
-      (nreverse pairs))))
-
-(defun drums-unfold-fws ()
-  "Unfold folding white space in the current buffer."
-  (goto-char (point-min))
-  (while (re-search-forward drums-fws-regexp nil t)
-    (replace-match " " t t))
-  (goto-char (point-min)))
-
-(defun drums-parse-date (string)
-  "Return an Emacs time spec from STRING."
-  (apply 'encode-time (parse-time-string string)))
-
-(defun drums-narrow-to-header ()
-  "Narrow to the header section in the current buffer."
-  (narrow-to-region
-   (goto-char (point-min))
-   (if (search-forward "\n\n" nil 1)
-       (1- (point))
-     (point-max)))
-  (goto-char (point-min)))
-
-(defun drums-quote-string (string)
-  "Quote string if it needs quoting to be displayed in a header."
-  (if (not (string-match (concat "[^" drums-atext-token "]") string))
-      (concat "\"" string "\"")
-    string))
-
-(provide 'drums)
-
-;;; drums.el ends here
index a698479..4302182 100644 (file)
@@ -74,6 +74,8 @@
 (defvar earcon-button-marker-list nil)
 (make-variable-buffer-local 'earcon-button-marker-list)
 
+
+
 ;;; FIXME!! clone of code from gnus-vis.el FIXME!!
 (defun earcon-article-push-button (event)
   "Check text under the mouse pointer for a callback function.
@@ -154,6 +156,7 @@ If N is negative, move backward instead."
        (setq entry nil)))
     entry))
 
+
 (defun earcon-button-push (marker)
   ;; Push button starting at MARKER.
   (save-excursion
index b0a543c..d37bd7b 100644 (file)
@@ -1,5 +1,5 @@
-;;; gnus-agent.el --- unplugged support for Gnus
-;; Copyright (C) 1997,98,99 Free Software Foundation, Inc.
+;;; gnus-agent.el --- unplugged support for Semi-gnus
+;; Copyright (C) 1997,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; This file is part of GNU Emacs.
@@ -27,9 +27,7 @@
 (require 'gnus-cache)
 (require 'nnvirtual)
 (require 'gnus-sum)
-(eval-when-compile
-  (require 'cl)
-  (require 'gnus-score))
+(eval-when-compile (require 'cl))
 
 (defcustom gnus-agent-directory (nnheader-concat gnus-directory "agent/")
   "Where the Gnus agent will store its files."
@@ -79,6 +77,8 @@ If nil, only read articles will be expired."
 
 ;;; Internal variables
 
+(defvar gnus-agent-meta-information-header "X-Gnus-Agent-Meta-Information")
+
 (defvar gnus-agent-history-buffers nil)
 (defvar gnus-agent-buffer-alist nil)
 (defvar gnus-agent-article-alist nil)
@@ -92,11 +92,7 @@ If nil, only read articles will be expired."
 (defvar gnus-agent-spam-hashtb nil)
 (defvar gnus-agent-file-name nil)
 (defvar gnus-agent-send-mail-function nil)
-(defvar gnus-agent-file-coding-system 'raw-text)
-
-(defconst gnus-agent-scoreable-headers
-  '("subject" "from" "date" "message-id" "references" "chars" "lines" "xref")
-  "Headers that are considered when scoring articles for download via the Agent.")
+(defvar gnus-agent-file-coding-system 'no-conversion)
 
 ;; Dynamic variables
 (defvar gnus-headers)
@@ -112,8 +108,6 @@ If nil, only read articles will be expired."
   (gnus-category-read)
   (setq gnus-agent-overview-buffer
        (gnus-get-buffer-create " *Gnus agent overview*"))
-  (with-current-buffer gnus-agent-overview-buffer
-    (mm-enable-multibyte))
   (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))
@@ -133,9 +127,9 @@ If nil, only read articles will be expired."
 
 (defun gnus-agent-read-file (file)
   "Load FILE and do a `read' there."
-  (with-temp-buffer
+  (nnheader-temp-write nil
     (ignore-errors
-      (mm-insert-file-contents file)
+      (nnheader-insert-file-contents file)
       (goto-char (point-min))
       (read (current-buffer)))))
 
@@ -221,8 +215,7 @@ If nil, only read articles will be expired."
   "Jj" gnus-agent-toggle-plugged
   "Js" gnus-agent-fetch-session
   "JS" gnus-group-send-drafts
-  "Ja" gnus-agent-add-group
-  "Jr" gnus-agent-remove-group)
+  "Ja" gnus-agent-add-group)
 
 (defun gnus-agent-group-make-menu-bar ()
   (unless (boundp 'gnus-agent-group-menu)
@@ -318,7 +311,7 @@ agent minor mode in all Gnus buffers."
   (interactive)
   (gnus-open-agent)
   (add-hook 'gnus-setup-news-hook 'gnus-agent-queue-setup)
-  (unless gnus-agent-send-mail-function
+  (unless gnus-agent-send-mail-function 
     (setq gnus-agent-send-mail-function message-send-mail-function
          message-send-mail-function 'gnus-agent-send-mail))
   (unless gnus-agent-covered-methods
@@ -341,7 +334,7 @@ agent minor mode in all Gnus buffers."
      (concat "^" (regexp-quote mail-header-separator) "\n"))
     (replace-match "\n")
     (gnus-agent-insert-meta-information 'mail)
-    (gnus-request-accept-article "nndraft:queue" nil t t)))
+    (gnus-request-accept-article "nndraft:queue")))
 
 (defun gnus-agent-insert-meta-information (type &optional method)
   "Insert meta-information into the message that says how it's to be posted.
@@ -364,15 +357,11 @@ be a select method."
 (defun gnus-agent-fetch-groups (n)
   "Put all new articles in the current groups into the Agent."
   (interactive "P")
-  (unless gnus-plugged
-    (error "Groups can't be fetched when Gnus is unplugged"))
   (gnus-group-iterate n 'gnus-agent-fetch-group))
 
 (defun gnus-agent-fetch-group (group)
   "Put all new articles in GROUP into the Agent."
   (interactive (list (gnus-group-group-name)))
-  (unless gnus-plugged
-    (error "Groups can't be fetched when Gnus is unplugged"))
   (unless group
     (error "No group on the current line"))
   (let ((gnus-command-method (gnus-find-method-for-group group)))
@@ -401,16 +390,6 @@ be a select method."
     (setf (cadddr cat) (nconc (cadddr cat) groups))
     (gnus-category-write)))
 
-(defun gnus-agent-remove-group (arg)
-  "Remove the current group from its agent category, if any."
-  (interactive "P")
-  (let (c)
-    (gnus-group-iterate arg
-      (lambda (group)
-       (when (cadddr (setq c (gnus-group-category group)))
-         (setf (cadddr c) (delete group (cadddr c))))))
-    (gnus-category-write)))
-
 ;;;
 ;;; Server mode commands
 ;;;
@@ -448,8 +427,7 @@ be a select method."
 
 (defun gnus-agent-write-servers ()
   "Write the alist of covered servers."
-  (gnus-make-directory (nnheader-concat gnus-agent-directory "lib"))
-  (with-temp-file (nnheader-concat gnus-agent-directory "lib/servers")
+  (nnheader-temp-write (nnheader-concat gnus-agent-directory "lib/servers")
     (prin1 gnus-agent-covered-methods (current-buffer))))
 
 ;;;
@@ -514,23 +492,12 @@ the actual number of articles toggled is returned."
     (when (and (not gnus-plugged)
               (gnus-agent-method-p gnus-command-method))
       (gnus-agent-load-alist gnus-newsgroup-name)
-      ;; First mark all undownloaded articles as undownloaded.
-      (let ((articles (append gnus-newsgroup-unreads
-                             gnus-newsgroup-marked
-                             gnus-newsgroup-dormant))
+      (let ((articles gnus-newsgroup-unreads)
            article)
        (while (setq article (pop articles))
          (unless (or (cdr (assq article gnus-agent-article-alist))
-                     (memq article gnus-newsgroup-downloadable))
-           (push article gnus-newsgroup-undownloaded))))
-      ;; Then mark downloaded downloadable as not-downloadable,
-      ;; if you get my drift.
-      (let ((articles gnus-newsgroup-downloadable)
-           article)
-       (while (setq article (pop articles))
-         (when (cdr (assq article gnus-agent-article-alist))
-           (setq gnus-newsgroup-downloadable
-                 (delq article gnus-newsgroup-downloadable))))))))
+                 (memq article gnus-newsgroup-downloadable))
+           (push article gnus-newsgroup-undownloaded)))))))
 
 (defun gnus-agent-catchup ()
   "Mark all undownloaded articles as read."
@@ -546,55 +513,45 @@ the actual number of articles toggled is returned."
 ;;;
 
 (defun gnus-agent-save-active (method)
-  (gnus-agent-save-active-1 method 'gnus-active-to-gnus-format))
-
-(defun gnus-agent-save-active-1 (method function)
   (when (gnus-agent-method-p method)
     (let* ((gnus-command-method method)
-          (new (gnus-make-hashtable (count-lines (point-min) (point-max))))
           (file (gnus-agent-lib-file "active")))
-      (funcall function nil new)
-      (gnus-agent-write-active file new)
-      (erase-buffer)
-      (insert-file-contents-literally file))))
-
-(defun gnus-agent-write-active (file new)
-  (let ((orig (gnus-make-hashtable (count-lines (point-min) (point-max))))
-       (file (gnus-agent-lib-file "active"))
-       elem osym)
-    (when (file-exists-p file)
-      (with-temp-buffer
-       (insert-file-contents file)
-       (gnus-active-to-gnus-format nil orig))
-      (mapatoms
-       (lambda (sym)
-        (when (and sym (boundp sym))
-          (if (and (boundp (setq osym (intern (symbol-name sym) orig)))
-                   (setq elem (symbol-value osym)))
-              (setcdr elem (cdr (symbol-value sym)))
-            (set (intern (symbol-name sym) orig) (symbol-value sym)))))
-       new))
-    (gnus-make-directory (file-name-directory file))
-    (let ((coding-system-for-write gnus-agent-file-coding-system))
-      (gnus-write-active-file file orig))))
+      (gnus-make-directory (file-name-directory file))
+      (write-region-as-coding-system
+       gnus-agent-file-coding-system (point-min) (point-max) file nil 'silent)
+      (when (file-exists-p (gnus-agent-lib-file "groups"))
+       (delete-file (gnus-agent-lib-file "groups"))))))
 
 (defun gnus-agent-save-groups (method)
-  (gnus-agent-save-active-1 method 'gnus-groups-to-gnus-format))
+  (let* ((gnus-command-method method)
+        (file (gnus-agent-lib-file "groups")))
+    (gnus-make-directory (file-name-directory file))
+    (write-region-as-coding-system
+     gnus-agent-file-coding-system (point-min) (point-max) file nil 'silent)
+    (when (file-exists-p (gnus-agent-lib-file "active"))
+      (delete-file (gnus-agent-lib-file "active")))))
 
 (defun gnus-agent-save-group-info (method group active)
   (when (gnus-agent-method-p method)
     (let* ((gnus-command-method method)
-          (file (gnus-agent-lib-file "active")))
+          (file (if nntp-server-list-active-group
+                    (gnus-agent-lib-file "active")
+                  (gnus-agent-lib-file "groups"))))
       (gnus-make-directory (file-name-directory file))
-      (with-temp-file file
+      (nnheader-temp-write file
        (when (file-exists-p file)
-         (mm-insert-file-contents file))
+         (nnheader-insert-file-contents file))
        (goto-char (point-min))
-       (when (re-search-forward
-              (concat "^" (regexp-quote group) " ") nil t)
-         (gnus-delete-line))
-       (insert group " " (number-to-string (cdr active)) " "
-               (number-to-string (car active)) " y\n")))))
+       (if nntp-server-list-active-group
+           (progn
+             (when (re-search-forward
+                    (concat "^" (regexp-quote group) " ") nil t)
+               (gnus-delete-line))
+             (insert group " " (number-to-string (cdr active)) " "
+                     (number-to-string (car active)) " y\n"))
+         (when (re-search-forward (concat (regexp-quote group) " ") nil t)
+           (gnus-delete-line))
+         (insert-buffer-substring nntp-server-buffer))))))
 
 (defun gnus-agent-group-path (group)
   "Translate GROUP into a path."
@@ -641,9 +598,9 @@ the actual number of articles toggled is returned."
   (save-excursion
     (set-buffer gnus-agent-current-history)
     (gnus-make-directory (file-name-directory gnus-agent-file-name))
-    (let ((coding-system-for-write gnus-agent-file-coding-system))
-      (write-region (1+ (point-min)) (point-max)
-                   gnus-agent-file-name nil 'silent))))
+    (write-region-as-coding-system
+     gnus-agent-file-coding-system
+     (1+ (point-min)) (point-max) gnus-agent-file-name nil 'silent)))
 
 (defun gnus-agent-close-history ()
   (when (gnus-buffer-live-p gnus-agent-current-history)
@@ -689,7 +646,7 @@ the actual number of articles toggled is returned."
     ;; Prune off articles that we have already fetched.
     (while (and articles
                (cdr (assq (car articles) gnus-agent-article-alist)))
-     (pop articles))
+      (pop articles))
     (let ((arts articles))
       (while (cdr arts)
        (if (cdr (assq (cadr arts) gnus-agent-article-alist))
@@ -699,7 +656,7 @@ the actual number of articles toggled is returned."
       (let ((dir (concat
                  (gnus-agent-directory)
                  (gnus-agent-group-path group) "/"))
-           (date (time-to-days (current-time)))
+           (date (gnus-time-to-day (current-time)))
            (case-fold-search t)
            pos crosses id elem)
        (gnus-make-directory dir)
@@ -707,7 +664,7 @@ the actual number of articles toggled is returned."
        ;; Fetch the articles from the backend.
        (if (gnus-check-backend-function 'retrieve-articles group)
            (setq pos (gnus-retrieve-articles articles group))
-         (with-temp-buffer
+         (nnheader-temp-write nil
            (let (article)
              (while (setq article (pop articles))
                (when (gnus-request-article article group)
@@ -740,11 +697,10 @@ the actual number of articles toggled is returned."
            (if (not (re-search-forward "^Message-ID: *<\\([^>\n]+\\)>" nil t))
                (setq id "No-Message-ID-in-article")
              (setq id (buffer-substring (match-beginning 1) (match-end 1))))
-           (let ((coding-system-for-write
-                  gnus-agent-file-coding-system))
-             (write-region (point-min) (point-max)
-                           (concat dir (number-to-string (caar pos)))
-                           nil 'silent))
+           (write-region-as-coding-system
+            gnus-agent-file-coding-system
+            (point-min) (point-max)
+            (concat dir (number-to-string (caar pos))) nil 'silent)
            (when (setq elem (assq (caar pos) gnus-agent-article-alist))
              (setcdr elem t))
            (gnus-agent-enter-history
@@ -773,7 +729,7 @@ the actual number of articles toggled is returned."
        (when (= (point-max) (point-min))
          (push (cons group (current-buffer)) gnus-agent-buffer-alist)
          (ignore-errors
-           (mm-insert-file-contents
+           (nnheader-insert-file-contents
             (gnus-agent-article-name ".overview" group))))
        (nnheader-find-nov-line (string-to-number (cdar crosses)))
        (insert (string-to-number (cdar crosses)))
@@ -784,57 +740,51 @@ the actual number of articles toggled is returned."
   (save-excursion
     (while gnus-agent-buffer-alist
       (set-buffer (cdar gnus-agent-buffer-alist))
-      (let ((coding-system-for-write
-            gnus-agent-file-coding-system))
-       (write-region (point-min) (point-max)
-                     (gnus-agent-article-name ".overview"
-                                              (caar gnus-agent-buffer-alist))
-                     nil 'silent))
+      (write-region-as-coding-system
+       gnus-agent-file-coding-system
+       (point-min) (point-max)
+       (gnus-agent-article-name ".overview"
+                               (caar gnus-agent-buffer-alist))
+       nil 'silent)
       (pop gnus-agent-buffer-alist))
     (while gnus-agent-group-alist
-      (with-temp-file (caar gnus-agent-group-alist)
+      (nnheader-temp-write (caar gnus-agent-group-alist)
        (princ (cdar gnus-agent-group-alist))
        (insert "\n"))
       (pop gnus-agent-group-alist))))
 
 (defun gnus-agent-fetch-headers (group &optional force)
-  (let ((articles (gnus-list-of-unread-articles group))
-       (gnus-decode-encoded-word-function 'identity)
-       (file (gnus-agent-article-name ".overview" group)))
-    ;; add article with marks to list of article headers we want to fetch
-    (dolist (arts (gnus-info-marks (gnus-get-info group)))
-      (setq articles (union (gnus-uncompress-sequence (cdr arts))
-                           articles)))
-    (setq articles (sort articles '<))
-    ;; remove known articles
-    (when (gnus-agent-load-alist group)
-      (setq articles (gnus-sorted-intersection
-                     articles
-                     (gnus-uncompress-range
-                      (cons (1+ (caar (last gnus-agent-article-alist)))
-                            (cdr (gnus-active group)))))))
+  (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))))
     ;; Fetch them.
-    (gnus-make-directory (nnheader-translate-file-chars
-                         (file-name-directory file)))
     (when articles
       (gnus-message 7 "Fetching headers for %s..." group)
       (save-excursion
-       (set-buffer nntp-server-buffer)
-       (unless (eq 'nov (gnus-retrieve-headers articles group))
-         (nnvirtual-convert-headers))
-       ;; Save these headers for later processing.
-       (copy-to-buffer gnus-agent-overview-buffer (point-min) (point-max))
-       (when (file-exists-p file)
-         (gnus-agent-braid-nov group articles file))
-       (let ((coding-system-for-write
-              gnus-agent-file-coding-system))
-         (write-region (point-min) (point-max) file nil 'silent))
-       (gnus-agent-save-alist group articles nil)
-       (gnus-agent-enter-history
-        "last-header-fetched-for-session"
-        (list (cons group (nth (- (length  articles) 1) articles)))
-        (time-to-days (current-time)))
-       articles))))
+       (set-buffer nntp-server-buffer)
+       (unless (eq 'nov (gnus-retrieve-headers articles group))
+         (nnvirtual-convert-headers))
+       ;; 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-as-coding-system
+          gnus-agent-file-coding-system
+          (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)))
+          (gnus-time-to-day (current-time)))
+         articles)))))
 
 (defsubst gnus-agent-copy-nov-line (article)
   (let (b e)
@@ -853,7 +803,7 @@ the actual number of articles toggled is returned."
   (goto-char (point-min))
   (set-buffer nntp-server-buffer)
   (erase-buffer)
-  (mm-insert-file-contents file)
+  (nnheader-insert-file-contents file)
   (goto-char (point-max))
   (if (or (= (point-min) (point-max))
          (progn
@@ -895,9 +845,9 @@ the actual number of articles toggled is returned."
 
 (defun gnus-agent-save-alist (group &optional articles state dir)
   "Save the article-state alist for GROUP."
-  (with-temp-file (if dir
-                     (concat dir ".agentview")
-                   (gnus-agent-article-name ".agentview" group))
+  (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))
@@ -942,7 +892,6 @@ the actual number of articles toggled is returned."
 (defun gnus-agent-fetch-group-1 (group method)
   "Fetch GROUP."
   (let ((gnus-command-method method)
-       (gnus-newsgroup-name group)
        gnus-newsgroup-dependencies gnus-newsgroup-headers
        gnus-newsgroup-scored gnus-headers gnus-score
        gnus-use-cache articles arts
@@ -953,64 +902,27 @@ the actual number of articles toggled is returned."
       ;; Parse them and see which articles we want to fetch.
       (setq gnus-newsgroup-dependencies
            (make-vector (length articles) 0))
-      ;; No need to call `gnus-get-newsgroup-headers-xover' with
-      ;; the entire .overview for group as we still have the just
-      ;; downloaded headers in `gnus-agent-overview-buffer'.
-      (let ((nntp-server-buffer gnus-agent-overview-buffer))
-       (setq gnus-newsgroup-headers
-             (gnus-get-newsgroup-headers-xover articles nil nil group)))
+      (setq gnus-newsgroup-headers
+           (gnus-get-newsgroup-headers-xover articles nil nil group))
       (setq category (gnus-group-category group))
       (setq predicate
-           (gnus-get-predicate
-            (or (gnus-group-get-parameter group 'agent-predicate t)
+           (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)))
@@ -1021,11 +933,7 @@ the actual number of articles toggled is returned."
       (gnus-agent-fetch-articles
        group (gnus-uncompress-range (cdr arts)))
       (setq marks (delq arts (gnus-info-marks info)))
-      (gnus-info-set-marks info marks)
-      (gnus-dribble-enter
-       (concat "(gnus-group-set-info '"
-              (gnus-prin1-to-string info)
-              ")")))))
+      (gnus-info-set-marks info marks))))
 
 ;;;
 ;;; Agent Category Mode
@@ -1127,7 +1035,7 @@ The following commands are available:
   (gnus-set-default-directory)
   (setq mode-line-process nil)
   (use-local-map gnus-category-mode-map)
-  (buffer-disable-undo)
+  (buffer-disable-undo (current-buffer))
   (setq truncate-lines t)
   (setq buffer-read-only t)
   (gnus-run-hooks 'gnus-category-mode-hook))
@@ -1179,13 +1087,12 @@ The following commands are available:
        (or (gnus-agent-read-file
             (nnheader-concat gnus-agent-directory "lib/categories"))
            (list (list 'default 'short nil nil)))))
-
+    
 (defun gnus-category-write ()
   "Write the category alist."
   (setq gnus-category-predicate-cache nil
        gnus-category-group-cache nil)
-  (gnus-make-directory (nnheader-concat gnus-agent-directory "lib"))
-  (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)
@@ -1198,7 +1105,7 @@ The following commands are available:
        (setf (cadr (assq ',category gnus-category-alist)) predicate)
        (gnus-category-write)
        (gnus-category-list)))))
-
+  
 (defun gnus-category-edit-score (category)
   "Edit the score expression for CATEGORY."
   (interactive (list (gnus-category-name)))
@@ -1246,7 +1153,7 @@ The following commands are available:
   (interactive "SCategory name: ")
   (when (assq category gnus-category-alist)
     (error "Category %s already exists" category))
-  (push (list category 'false nil nil)
+  (push (list category 'true nil nil)
        gnus-category-alist)
   (gnus-category-write)
   (gnus-category-list))
@@ -1313,7 +1220,7 @@ The following commands are available:
 (defun gnus-agent-false ()
   "Return nil."
   nil)
-
+  
 (defun gnus-category-make-function-1 (cat)
   "Make a function from category CAT."
   (cond
@@ -1359,19 +1266,13 @@ The following commands are available:
   "Expire all old articles."
   (interactive)
   (let ((methods gnus-agent-covered-methods)
-       (day (- (time-to-days (current-time)) gnus-agent-expire-days))
+       (day (- (gnus-time-to-day (current-time)) gnus-agent-expire-days))
        gnus-command-method sym group articles
        history overview file histories elem art nov-file low info
-       unreads marked article orig lowest highest)
+       unreads marked article)
     (save-excursion
       (setq overview (gnus-get-buffer-create " *expire overview*"))
       (while (setq gnus-command-method (pop methods))
-       (with-temp-buffer
-         (insert-file-contents (gnus-agent-lib-file "active"))
-         (gnus-active-to-gnus-format 
-          gnus-command-method
-          (setq orig (gnus-make-hashtable
-                      (count-lines (point-min) (point-max))))))
        (let ((expiry-hashtb (gnus-make-hashtable 1023)))
        (gnus-agent-open-history)
        (set-buffer
@@ -1408,17 +1309,15 @@ The following commands are available:
                                 (gnus-uncompress-range
                                  (cdr (assq 'dormant
                                             (gnus-info-marks info)))))
-                  nov-file (gnus-agent-article-name ".overview" group)
-                  lowest nil
-                  highest nil)
-            (gnus-agent-load-alist group)
+                  nov-file (gnus-agent-article-name ".overview" 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)
-              (mm-insert-file-contents 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)
@@ -1434,11 +1333,7 @@ The following commands are available:
                   (if (file-exists-p
                        (gnus-agent-article-name
                         (number-to-string art) group))
-                      (progn
-                        (unless lowest
-                          (setq lowest art))
-                        (setq highest art)
-                        (forward-line 1))
+                      (forward-line 1)
                     ;; Remove old NOV lines that have no articles.
                     (gnus-delete-line)))
                 (if (or (eobp)
@@ -1453,9 +1348,9 @@ The following commands are available:
                 ;; Schedule the history line for nuking.
                 (push (cdr elem) histories)))
             (gnus-make-directory (file-name-directory nov-file))
-            (let ((coding-system-for-write
-                   gnus-agent-file-coding-system))
-              (write-region (point-min) (point-max) nov-file nil 'silent))
+            (write-region-as-coding-system
+             gnus-agent-file-coding-system
+             (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))
@@ -1477,9 +1372,8 @@ The following commands are available:
                   (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.
+              ;;; Mark all articles up to the first article
+              ;;; in `gnus-article-alist' as read.
               (when (and info (caar gnus-agent-article-alist))
                 (setcar (nthcdr 2 info)
                         (gnus-range-add
@@ -1488,11 +1382,10 @@ The following commands are available:
               ;; Maybe everything has been expired from `gnus-article-alist'
               ;; and so the above marking as read could not be conducted,
               ;; or there are expired article within the range of the alist.
-              (when (and info
-                         expired
+              (when (and (car expired)
                          (or (not (caar gnus-agent-article-alist))
                              (> (car expired)
-                                (caar gnus-agent-article-alist))))
+                                (caar gnus-agent-article-alist))) )
                 (setcar (nthcdr 2 info)
                         (gnus-add-to-range
                          (nth 2 info)
@@ -1500,11 +1393,7 @@ The following commands are available:
               (gnus-dribble-enter
                (concat "(gnus-group-set-info '"
                        (gnus-prin1-to-string info)
-                       ")")))
-            (when lowest
-              (if (gnus-gethash group orig)
-                  (setcar (gnus-gethash group orig) lowest)
-                (gnus-sethash group (cons lowest highest) orig))))
+                       ")"))))
           expiry-hashtb)
          (set-buffer history)
          (setq histories (nreverse (sort histories '<)))
@@ -1512,9 +1401,7 @@ The following commands are available:
            (goto-char (pop histories))
            (gnus-delete-line))
          (gnus-agent-save-history)
-         (gnus-agent-close-history)
-         (gnus-write-active-file
-          (gnus-agent-lib-file "active") orig))
+         (gnus-agent-close-history))
        (gnus-message 4 "Expiry...done"))))))
 
 ;;;###autoload
index 90505b8..b46cf8b 100644 (file)
@@ -1,8 +1,10 @@
-;;; gnus-art.el --- article mode commands for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;;; 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>
+;;     Katsumi Yamaoka  <yamaoka@jpl.org>
+;; Keywords: mail, news, MIME
 
 ;; This file is part of GNU Emacs.
 
 (require 'gnus-spec)
 (require 'gnus-int)
 (require 'browse-url)
-(require 'mm-bodies)
-(require 'mail-parse)
-(require 'mm-decode)
-(require 'mm-view)
-(require 'wid-edit)
-(require 'mm-uu)
+(require 'alist)
+(require 'mime-view)
 
 (defgroup gnus-article nil
   "Article display."
   :link '(custom-manual "(gnus)The Article Buffer")
   :group 'gnus)
 
-(defgroup gnus-article-treat nil
-  "Treating article parts."
-  :link '(custom-manual "(gnus)Article Hiding")
-  :group 'gnus-article)
-
 (defgroup gnus-article-hiding nil
   "Hiding article parts."
   :link '(custom-manual "(gnus)Article Hiding")
 
 (defcustom gnus-ignored-headers
   '("^Path:" "^Expires:" "^Date-Received:" "^References:" "^Xref:" "^Lines:"
-    "^Relay-Version:" "^Message-ID:" "^Approved:" "^Sender:" "^Received:"
+    "^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-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:"
+    "^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:" "^X-Gnus-Mail-Source:" "^Cancel-Lock:")
+    "^Status:")
   "*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."
@@ -130,7 +123,7 @@ If `gnus-visible-headers' is non-nil, this variable will be ignored."
   :group 'gnus-article-hiding)
 
 (defcustom gnus-visible-headers
-  "^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^Followup-To:\\|^Reply-To:\\|^Organization:\\|^Summary:\\|^Keywords:\\|^To:\\|^[BGF]?Cc:\\|^Posted-To:\\|^Mail-Copies-To:\\|^Apparently-To:\\|^Gnus-Warning:\\|^Resent-From:\\|^X-Sent:"
+  "From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^\\(Mail-\\)?Followup-To:\\|^\\(Mail-\\)?Reply-To:\\|^Mail-Copies-To:\\|^Organization:\\|^Summary:\\|^Keywords:\\|^To:\\|^Cc:\\|^Posted-To:\\|^Apparently-To:\\|^Gnus-Warning:\\|^Resent-From:\\|X-Sent:"
   "*All headers that do not match this regexp will be hidden.
 This variable can also be a list of regexp of headers to remain visible.
 If this variable is non-nil, `gnus-ignored-headers' will be ignored."
@@ -193,7 +186,7 @@ regexp.  If it matches, the text in question is not a signature."
   :group 'gnus-article-hiding)
 
 (defcustom gnus-article-x-face-command
-  "{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | display -"
+  "{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | xv -quit -"
   "*String or function to be executed to display an X-Face header.
 If it is a string, the command will be executed in a sub-shell
 asynchronously.         The compressed face will be piped to this command."
@@ -271,11 +264,6 @@ is the face used for highlighting."
 Esample: (_/*word*/_)."
   :group 'gnus-article-emphasis)
 
-(defface gnus-emphasis-highlight-words
-  '((t (:background "black" :foreground "yellow")))
-  "Face used for displaying highlighted words."
-  :group 'gnus-article-emphasis)
-
 (defcustom gnus-article-time-format "%a, %b %d %Y %T %Z"
   "Format for display of Date headers in article bodies.
 See `format-time-string' for the possible values.
@@ -288,6 +276,8 @@ be fed to `format-time-string'."
   :group 'gnus-article-washing)
 
 (eval-and-compile
+  (autoload 'hexl-hex-string-to-integer "hexl")
+  (autoload 'timezone-make-date-arpa-standard "timezone")
   (autoload 'mail-extract-address-components "mail-extr"))
 
 (defcustom gnus-save-all-headers t
@@ -389,6 +379,32 @@ be used as possible file names."
                         (cons :value ("" "") regexp (repeat string))
                         (sexp :value nil))))
 
+(defcustom gnus-strict-mime t
+  "*If nil, MIME-decode even if there is no MIME-Version header."
+  :group 'gnus-article-mime
+  :type 'boolean)
+
+(defcustom gnus-article-display-method-for-mime
+  'gnus-article-display-mime-message
+  "Function to display a MIME message.
+The function is called from the article buffer."
+  :group 'gnus-article-mime
+  :type 'function)
+
+(defcustom gnus-article-display-method-for-encoded-word
+  'gnus-article-display-message-with-encoded-word
+  "*Function to display a message with MIME encoded-words.
+The function is called from the article buffer."
+  :group 'gnus-article-mime
+  :type 'function)
+
+(defcustom gnus-article-display-method-for-traditional
+  'gnus-article-display-traditional-message
+  "*Function to display a traditional message.
+The function is called from the article buffer."
+  :group 'gnus-article-mime
+  :type 'function)
+
 (defcustom gnus-page-delimiter "^\^L"
   "*Regexp describing what to use as article page delimiters.
 The default value is \"^\^L\", which is a form linefeed at the
@@ -396,14 +412,9 @@ beginning of a line."
   :type 'regexp
   :group 'gnus-article-various)
 
-(defcustom gnus-article-mode-line-format "Gnus: %g %S%m"
+(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.
-
-The following additional specs are available:
-
-%w  The article washing status.
-%m  The number of MIME parts in the article."
+See `gnus-summary-mode-line-format' for a closer description."
   :type 'string
   :group 'gnus-article-various)
 
@@ -418,7 +429,8 @@ The following additional specs are available:
   :group 'gnus-article-various)
 
 (defcustom gnus-article-prepare-hook nil
-  "*A hook called after an article has been prepared in the article buffer."
+  "*A hook called after an article has been prepared in the article buffer.
+If you want to run a special decoding program like nkf, use this hook."
   :type 'hook
   :group 'gnus-article-various)
 
@@ -547,385 +559,8 @@ displayed by the first non-nil matching CONTENT face."
                               (item :tag "skip" nil)
                               (face :value default)))))
 
-(defcustom gnus-article-decode-hook
-  '(article-decode-charset article-decode-encoded-words)
-  "*Hook run to decode charsets in articles."
-  :group 'gnus-article-headers
-  :type 'hook)
-
-(defcustom gnus-display-mime-function 'gnus-display-mime
-  "Function to display MIME articles."
-  :group 'gnus-article-mime
-  :type 'function)
-
-(defvar gnus-decode-header-function 'mail-decode-encoded-word-region
-  "Function used to decode headers.")
-
-(defvar gnus-article-dumbquotes-map
-  '(("\202" ",")
-    ("\203" "f")
-    ("\204" ",,")
-    ("\205" "...")
-    ("\213" "<")
-    ("\214" "OE")
-    ("\221" "`")
-    ("\222" "'")
-    ("\223" "``")
-    ("\224" "\"")
-    ("\225" "*")
-    ("\226" "---")
-    ("\227" "-")
-    ("\231" "(TM)")
-    ("\233" ">")
-    ("\234" "oe")
-    ("\264" "'"))
-  "Table for MS-to-Latin1 translation.")
-
-(defcustom gnus-ignored-mime-types nil
-  "List of MIME types that should be ignored by Gnus."
-  :group 'gnus-article-mime
-  :type '(repeat regexp))
-
-(defcustom gnus-unbuttonized-mime-types '(".*/.*")
-  "List of MIME types that should not be given buttons when rendered."
-  :group 'gnus-article-mime
-  :type '(repeat regexp))
-
-(defcustom gnus-article-mime-part-function nil
-  "Function called with a MIME handle as the argument.
-This is meant for people who want to do something automatic based
-on parts -- for instance, adding Vcard info to a database."
-  :group 'gnus-article-mime
-  :type 'function)
-
-(defcustom gnus-mime-multipart-functions nil
-  "An alist of MIME types to functions to display them.")
-
-(defcustom gnus-article-date-lapsed-new-header nil
-  "Whether the X-Sent and Date headers can coexist.
-When using `gnus-treat-date-lapsed', the \"X-Sent:\" header will
-either replace the old \"Date:\" header (if this variable is nil), or
-be added below it (otherwise)."
-  :group 'gnus-article-headers
-  :type 'boolean)
-
-;;;
-;;; The treatment variables
-;;;
-
-(defvar gnus-part-display-hook nil
-  "Hook called on parts that are to receive treatment.")
-
-(defvar gnus-article-treat-custom
-  '(choice (const :tag "Off" nil)
-          (const :tag "On" t)
-          (const :tag "Header" head)
-          (const :tag "Last" last)
-          (integer :tag "Less")
-          (repeat :tag "Groups" regexp)
-          (sexp :tag "Predicate")))
-
-(defvar gnus-article-treat-head-custom
-  '(choice (const :tag "Off" nil)
-          (const :tag "Header" head)))
-
-(defvar gnus-article-treat-types '("text/plain")
-  "Parts to treat.")
-
-(defvar gnus-inhibit-treatment nil
-  "Whether to inhibit treatment.")
-
-(defcustom gnus-treat-highlight-signature '(or last (typep "text/x-vcard"))
-  "Highlight the signature.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-custom)
-(put 'gnus-treat-highlight-signature 'highlight t)
-
-(defcustom gnus-treat-buttonize t
-  "Add buttons.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-custom)
-(put 'gnus-treat-buttonize 'highlight t)
-
-(defcustom gnus-treat-buttonize-head 'head
-  "Add buttons to the head.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-head-custom)
-(put 'gnus-treat-buttonize-head 'highlight t)
-
-(defcustom gnus-treat-emphasize t
-  "Emphasize text.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-custom)
-(put 'gnus-treat-emphasize 'highlight t)
-
-(defcustom gnus-treat-strip-cr nil
-  "Remove carriage returns.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-custom)
-
-(defcustom gnus-treat-hide-headers 'head
-  "Hide headers.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-head-custom)
-
-(defcustom gnus-treat-hide-boring-headers nil
-  "Hide boring headers.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-head-custom)
-
-(defcustom gnus-treat-hide-signature nil
-  "Hide the signature.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-custom)
-
-(defcustom gnus-treat-fill-article nil
-  "Fill the article.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-custom)
-
-(defcustom gnus-treat-hide-citation nil
-  "Hide cited text.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-custom)
-
-(defcustom gnus-treat-strip-pgp t
-  "Strip PGP signatures.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-custom)
-
-(defcustom gnus-treat-strip-pem nil
-  "Strip PEM signatures.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-custom)
-
-(defcustom gnus-treat-strip-banner t
-  "Strip banners from articles.
-The banner to be stripped is specified in the `banner' group parameter.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-custom)
-
-(defcustom gnus-treat-highlight-headers 'head
-  "Highlight the headers.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-head-custom)
-(put 'gnus-treat-highlight-headers 'highlight t)
-
-(defcustom gnus-treat-highlight-citation t
-  "Highlight cited text.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-custom)
-(put 'gnus-treat-highlight-citation 'highlight t)
-
-(defcustom gnus-treat-date-ut nil
-  "Display the Date in UT (GMT).
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-head-custom)
-
-(defcustom gnus-treat-date-local nil
-  "Display the Date in the local timezone.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-head-custom)
-
-(defcustom gnus-treat-date-lapsed nil
-  "Display the Date header in a way that says how much time has elapsed.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-head-custom)
-
-(defcustom gnus-treat-date-original nil
-  "Display the date in the original timezone.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-head-custom)
-
-(defcustom gnus-treat-date-iso8601 nil
-  "Display the date in the ISO8601 format.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-head-custom)
-
-(defcustom gnus-treat-date-user-defined nil
-  "Display the date in a user-defined format.
-The format is defined by the `gnus-article-time-format' variable.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-head-custom)
-
-(defcustom gnus-treat-strip-headers-in-body t
-  "Strip the X-No-Archive header line from the beginning of the body.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-custom)
-
-(defcustom gnus-treat-strip-trailing-blank-lines nil
-  "Strip trailing blank lines.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-custom)
-
-(defcustom gnus-treat-strip-leading-blank-lines nil
-  "Strip leading blank lines.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-custom)
-
-(defcustom gnus-treat-strip-multiple-blank-lines nil
-  "Strip multiple blank lines.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-custom)
-
-(defcustom gnus-treat-overstrike t
-  "Treat overstrike highlighting.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-custom)
-(put 'gnus-treat-overstrike 'highlight t)
-
-(defcustom gnus-treat-display-xface (if (and gnus-xemacs (featurep 'xface))
-                                       'head nil)
-  "Display X-Face headers.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-head-custom)
-(put 'gnus-treat-display-xface 'highlight t)
-
-(defcustom gnus-treat-display-smileys (if (and gnus-xemacs
-                                              (featurep 'xpm))
-                                         t nil)
-  "Display smileys.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-custom)
-(put 'gnus-treat-display-smileys 'highlight t)
-
-(defcustom gnus-treat-display-picons (if gnus-xemacs 'head nil)
-  "Display picons.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-head-custom)
-(put 'gnus-treat-display-picons 'highlight t)
-
-(defcustom gnus-treat-capitalize-sentences nil
-  "Capitalize sentence-starting words.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-custom)
-
-(defcustom gnus-treat-fill-long-lines nil
-  "Fill long lines.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-custom)
-
-(defcustom gnus-treat-play-sounds nil
-  "Play sounds.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-custom)
-
-(defcustom gnus-treat-translate nil
-  "Translate articles from one language to another.
-Valid values are nil, t, `head', `last', an integer or a predicate.
-See the manual for details."
-  :group 'gnus-article-treat
-  :type gnus-article-treat-custom)
-
 ;;; Internal variables
 
-(defvar article-goto-body-goes-to-point-min-p nil)
-(defvar gnus-article-wash-types nil)
-(defvar gnus-article-emphasis-alist nil)
-
-(defvar gnus-article-mime-handle-alist-1 nil)
-(defvar gnus-treatment-function-alist
-  '((gnus-treat-strip-banner gnus-article-strip-banner)
-    (gnus-treat-strip-headers-in-body gnus-article-strip-headers-in-body)
-    (gnus-treat-highlight-signature gnus-article-highlight-signature)
-    (gnus-treat-buttonize gnus-article-add-buttons)
-    (gnus-treat-fill-article gnus-article-fill-cited-article)
-    (gnus-treat-fill-long-lines gnus-article-fill-long-lines)
-    (gnus-treat-strip-cr gnus-article-remove-cr)
-    (gnus-treat-emphasize gnus-article-emphasize)
-    (gnus-treat-display-xface gnus-article-display-x-face)
-    (gnus-treat-hide-headers gnus-article-maybe-hide-headers)
-    (gnus-treat-hide-boring-headers gnus-article-hide-boring-headers)
-    (gnus-treat-hide-signature gnus-article-hide-signature)
-    (gnus-treat-hide-citation gnus-article-hide-citation)
-    (gnus-treat-strip-pgp gnus-article-hide-pgp)
-    (gnus-treat-strip-pem gnus-article-hide-pem)
-    (gnus-treat-highlight-headers gnus-article-highlight-headers)
-    (gnus-treat-highlight-citation gnus-article-highlight-citation)
-    (gnus-treat-highlight-signature gnus-article-highlight-signature)
-    (gnus-treat-date-ut gnus-article-date-ut)
-    (gnus-treat-date-local gnus-article-date-local)
-    (gnus-treat-date-lapsed gnus-article-date-lapsed)
-    (gnus-treat-date-original gnus-article-date-original)
-    (gnus-treat-date-user-defined gnus-article-date-user)
-    (gnus-treat-date-iso8601 gnus-article-date-iso8601)
-    (gnus-treat-strip-trailing-blank-lines
-     gnus-article-remove-trailing-blank-lines)
-    (gnus-treat-strip-leading-blank-lines
-     gnus-article-strip-leading-blank-lines)
-    (gnus-treat-strip-multiple-blank-lines
-     gnus-article-strip-multiple-blank-lines)
-    (gnus-treat-overstrike gnus-article-treat-overstrike)
-    (gnus-treat-buttonize-head gnus-article-add-buttons-to-head)
-    (gnus-treat-display-smileys gnus-smiley-display)
-    (gnus-treat-display-picons gnus-article-display-picons)
-    (gnus-treat-play-sounds gnus-earcon-display)))
-
-(defvar gnus-article-mime-handle-alist nil)
 (defvar article-lapsed-timer nil)
 (defvar gnus-article-current-summary nil)
 
@@ -941,8 +576,7 @@ Initialized from `text-mode-syntax-table.")
 (defvar gnus-save-article-buffer nil)
 
 (defvar gnus-article-mode-line-format-alist
-  (nconc '((?w (gnus-article-wash-status) ?s)
-          (?m (gnus-article-mime-part-status) ?s))
+  (nconc '((?w (gnus-article-wash-status) ?s))
         gnus-summary-mode-line-format-alist))
 
 (defvar gnus-number-of-articles-to-be-saved nil)
@@ -956,6 +590,7 @@ Initialized from `text-mode-syntax-table.")
     (put-text-property
      (max (1- b) (point-min))
      b 'intangible (cddr (memq 'intangible props)))))
+
 (defsubst gnus-article-unhide-text (b e)
   "Remove hidden text properties from region between B and E."
   (remove-text-properties b e gnus-hidden-properties)
@@ -965,14 +600,11 @@ Initialized from `text-mode-syntax-table.")
 
 (defun gnus-article-hide-text-type (b e type)
   "Hide text of TYPE between B and E."
-  (push type gnus-article-wash-types)
   (gnus-article-hide-text
    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."
-  (setq gnus-article-wash-types
-       (delq type gnus-article-wash-types))
   (remove-text-properties
    b e (cons 'article-type (cons type gnus-hidden-properties)))
   (when (memq 'intangible gnus-hidden-properties)
@@ -1021,59 +653,79 @@ Initialized from `text-mode-syntax-table.")
     i))
 
 (defun article-hide-headers (&optional arg delete)
-  "Hide unwanted headers and possibly sort them as well."
-  (interactive)
-  ;; This function might be inhibited.
-  (unless gnus-inhibit-hiding
-    (save-excursion
-      (save-restriction
-       (let ((buffer-read-only nil)
-             (case-fold-search t)
-             (max (1+ (length gnus-sorted-header-list)))
-             (ignored (when (not gnus-visible-headers)
-                        (cond ((stringp gnus-ignored-headers)
-                               gnus-ignored-headers)
-                              ((listp gnus-ignored-headers)
-                               (mapconcat 'identity gnus-ignored-headers
-                                          "\\|")))))
-             (visible
-              (cond ((stringp gnus-visible-headers)
-                     gnus-visible-headers)
-                    ((and gnus-visible-headers
-                          (listp gnus-visible-headers))
-                     (mapconcat 'identity gnus-visible-headers "\\|"))))
-             (inhibit-point-motion-hooks t)
-             beg)
-         ;; First we narrow to just the headers.
-         (article-narrow-to-head)
-         ;; Hide any "From " lines at the beginning of (mail) articles.
-         (while (looking-at "From ")
-           (forward-line 1))
-         (unless (bobp)
-           (delete-region (point-min) (point)))
-         ;; Then treat the rest of the header lines.
-         ;; Then we use the two regular expressions
-         ;; `gnus-ignored-headers' and `gnus-visible-headers' to
-         ;; select which header lines is to remain visible in the
-         ;; article buffer.
-         (while (re-search-forward "^[^ \t]*:" nil t)
-           (beginning-of-line)
-           ;; Mark the rank of the header.
-           (put-text-property
-            (point) (1+ (point)) 'message-rank
-            (if (or (and visible (looking-at visible))
-                    (and ignored
-                         (not (looking-at ignored))))
-                (gnus-article-header-rank)
-              (+ 2 max)))
-           (forward-line 1))
-         (message-sort-headers-1)
-         (when (setq beg (text-property-any
-                          (point-min) (point-max) 'message-rank (+ 2 max)))
-           ;; We delete the unwanted headers.
-           (add-text-properties (point-min) (+ 5 (point-min))
-                                '(article-type headers dummy-invisible t))
-           (delete-region beg (point-max))))))))
+  "Toggle whether to hide unwanted headers and possibly sort them as well.
+If given a negative prefix, always show; if given a positive prefix,
+always hide."
+  (interactive (gnus-article-hidden-arg))
+  (current-buffer)
+  (if (gnus-article-check-hidden-text 'headers arg)
+      ;; Show boring headers as well.
+      (gnus-article-show-hidden-text 'boring-headers)
+    ;; This function might be inhibited.
+    (unless gnus-inhibit-hiding
+      (save-excursion
+       (save-restriction
+         (let ((buffer-read-only nil)
+               (case-fold-search t)
+               (props (nconc (list 'article-type 'headers)
+                             gnus-hidden-properties))
+               (max (1+ (length gnus-sorted-header-list)))
+               (ignored (when (not gnus-visible-headers)
+                          (cond ((stringp gnus-ignored-headers)
+                                 gnus-ignored-headers)
+                                ((listp gnus-ignored-headers)
+                                 (mapconcat 'identity gnus-ignored-headers
+                                            "\\|")))))
+               (visible
+                (cond ((stringp gnus-visible-headers)
+                       gnus-visible-headers)
+                      ((and gnus-visible-headers
+                            (listp gnus-visible-headers))
+                       (mapconcat 'identity gnus-visible-headers "\\|"))))
+               (inhibit-point-motion-hooks t)
+               beg)
+           ;; First we narrow to just the headers.
+           (widen)
+           (goto-char (point-min))
+           ;; Hide any "From " lines at the beginning of (mail) articles.
+           (while (looking-at "From ")
+             (forward-line 1))
+           (unless (bobp)
+             (if delete
+                 (delete-region (point-min) (point))
+               (gnus-article-hide-text (point-min) (point) props)))
+           ;; Then treat the rest of the header lines.
+           (narrow-to-region
+            (point)
+            (if (search-forward "\n\n" nil t) ; if there's a body
+                (progn (forward-line -1) (point))
+              (point-max)))
+           ;; Then we use the two regular expressions
+           ;; `gnus-ignored-headers' and `gnus-visible-headers' to
+           ;; select which header lines is to remain visible in the
+           ;; article buffer.
+           (goto-char (point-min))
+           (while (re-search-forward "^[^ \t]*:" nil t)
+             (beginning-of-line)
+             ;; Mark the rank of the header.
+             (put-text-property
+              (point) (1+ (point)) 'message-rank
+              (if (or (and visible (looking-at visible))
+                      (and ignored
+                           (not (looking-at ignored))))
+                  (gnus-article-header-rank)
+                (+ 2 max)))
+             (forward-line 1))
+           (message-sort-headers-1)
+           (when (setq beg (text-property-any
+                            (point-min) (point-max) 'message-rank (+ 2 max)))
+             ;; We make the unwanted headers invisible.
+             (if delete
+                 (delete-region beg (point-max))
+               ;; Suggested by Sudish Joseph <joseph@cis.ohio-state.edu>.
+               (gnus-article-hide-text-type beg (point-max) 'headers))
+             ;; Work around XEmacs lossage.
+             (put-text-property (point-min) beg 'invisible nil))))))))
 
 (defun article-hide-boring-headers (&optional arg)
   "Toggle hiding of headers that aren't very interesting.
@@ -1088,14 +740,14 @@ always hide."
              (list gnus-boring-article-headers)
              (inhibit-point-motion-hooks t)
              elem)
-         (article-narrow-to-head)
+         (nnheader-narrow-to-headers)
          (while list
            (setq elem (pop list))
            (goto-char (point-min))
            (cond
             ;; Hide empty headers.
             ((eq elem 'empty)
-             (while (re-search-forward "^[^: \t]+:[ \t]*\n[^ \t]" nil t)
+             (while (re-search-forward "^[^:]+:[ \t]*\n[^ \t]" nil t)
                (forward-line -1)
                (gnus-article-hide-text-type
                 (progn (beginning-of-line) (point))
@@ -1124,13 +776,13 @@ always hide."
                       from reply-to
                       (ignore-errors
                         (equal
-                         (nth 1 (mail-extract-address-components from))
-                         (nth 1 (mail-extract-address-components reply-to)))))
+                         (nth 1 (funcall gnus-extract-address-components from))
+                         (nth 1 (funcall gnus-extract-address-components reply-to)))))
                  (gnus-article-hide-header "reply-to"))))
             ((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)
@@ -1165,50 +817,18 @@ always hide."
           (point-max)))
        'boring-headers))))
 
-(defvar gnus-article-normalized-header-length 40
-  "Length of normalized headers.")
-
-(defun article-normalize-headers ()
-  "Make all header lines 40 characters long."
-  (interactive)
-  (let ((buffer-read-only nil)
-       column)
-    (save-excursion
-      (save-restriction
-       (article-narrow-to-head)
-       (while (not (eobp))
-         (cond
-          ((< (setq column (- (gnus-point-at-eol) (point)))
-              gnus-article-normalized-header-length)
-           (end-of-line)
-           (insert (make-string
-                    (- gnus-article-normalized-header-length column)
-                    ? )))
-          ((> column gnus-article-normalized-header-length)
-           (gnus-put-text-property
-            (progn
-              (forward-char gnus-article-normalized-header-length)
-              (point))
-            (gnus-point-at-eol)
-            'invisible t))
-          (t
-           ;; Do nothing.
-           ))
-         (forward-line 1))))))
-
 (defun article-treat-dumbquotes ()
-  "Translate M******** sm*rtq**t*s into proper text.
-Note that this function guesses whether a character is a sm*rtq**t* or
-not, so it should only be used interactively."
+  "Translate M******** sm*rtq**t*s into proper text."
   (interactive)
-  (article-translate-strings gnus-article-dumbquotes-map))
+  (article-translate-characters "\221\222\223\223" "`'\"\""))
 
 (defun article-translate-characters (from to)
   "Translate all characters in the body of the article according to FROM and TO.
 FROM is a string of characters to translate from; to is a string of
 characters to translate to."
   (save-excursion
-    (when (article-goto-body)
+    (goto-char (point-min))
+    (when (search-forward "\n\n" nil t)
       (let ((buffer-read-only nil)
            (x (make-string 225 ?x))
            (i -1))
@@ -1220,26 +840,15 @@ characters to translate to."
          (incf i))
        (translate-region (point) (point-max) x)))))
 
-(defun article-translate-strings (map)
-  "Translate all string in the body of the article according to MAP.
-MAP is an alist where the elements are on the form (\"from\" \"to\")."
-  (save-excursion
-    (when (article-goto-body)
-      (let ((buffer-read-only nil)
-           elem)
-       (while (setq elem (pop map))
-         (save-excursion
-           (while (search-forward (car elem) nil t)
-             (replace-match (cadr elem)))))))))
-
 (defun article-treat-overstrike ()
   "Translate overstrikes into bold text."
   (interactive)
   (save-excursion
-    (when (article-goto-body)
+    (goto-char (point-min))
+    (when (search-forward "\n\n" nil t)
       (let ((buffer-read-only nil))
        (while (search-forward "\b" nil t)
-         (let ((next (char-after))
+         (let ((next (following-char))
                (previous (char-after (- (point) 2))))
            ;; We do the boldification/underlining by hiding the
            ;; overstrikes and putting the proper text property
@@ -1258,46 +867,32 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")."
              (put-text-property
               (point) (1+ (point)) 'face 'underline)))))))))
 
-(defun article-fill-long-lines ()
-  "Fill lines that are wider than the window width."
-  (interactive)
-  (save-excursion
-    (let ((buffer-read-only nil)
-         (width (window-width (get-buffer-window (current-buffer)))))
-      (save-restriction
-       (article-goto-body)
-       (let ((adaptive-fill-mode nil))
-         (while (not (eobp))
-           (end-of-line)
-           (when (>= (current-column) (min fill-column width))
-             (narrow-to-region (point) (gnus-point-at-bol))
-             (fill-paragraph nil)
-             (goto-char (point-max))
-             (widen))
-           (forward-line 1)))))))
-
-(defun article-capitalize-sentences ()
-  "Capitalize the first word in each sentence."
+(defun article-fill ()
+  "Format too long lines."
   (interactive)
   (save-excursion
-    (let ((buffer-read-only nil)
-         (paragraph-start "^[\n\^L]"))
-      (article-goto-body)
-      (while (not (eobp))
-       (capitalize-word 1)
-       (forward-sentence)))))
+    (let ((buffer-read-only nil))
+      (widen)
+      (goto-char (point-min))
+      (search-forward "\n\n" nil t)
+      (end-of-line 1)
+      (let ((paragraph-start "^[>|#:<;* ]*[ \t]*$")
+           (adaptive-fill-regexp "[ \t]*\\([|#:<;>*]+ *\\)?")
+           (adaptive-fill-mode t))
+       (while (not (eobp))
+         (and (>= (current-column) (min fill-column (window-width)))
+              (/= (preceding-char) ?:)
+              (fill-paragraph nil))
+         (end-of-line 2))))))
 
 (defun article-remove-cr ()
-  "Remove trailing CRs and then translate remaining CRs into LFs."
+  "Remove carriage returns from an article."
   (interactive)
   (save-excursion
     (let ((buffer-read-only nil))
       (goto-char (point-min))
-      (while (re-search-forward "\r+$" nil t)
-       (replace-match "" t t))
-      (goto-char (point-min))
       (while (search-forward "\r" nil t)
-       (replace-match "\n" t t)))))
+       (replace-match "" t t)))))
 
 (defun article-remove-trailing-blank-lines ()
   "Remove all trailing blank lines from the article."
@@ -1309,9 +904,7 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")."
        (point)
        (progn
         (while (and (not (bobp))
-                    (looking-at "^[ \t]*$")
-                    (not (gnus-annotation-in-region-p
-                          (point) (gnus-point-at-eol))))
+                    (looking-at "^[ \t]*$"))
           (forward-line -1))
         (forward-line 1)
         (point))))))
@@ -1327,8 +920,7 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")."
          (case-fold-search t)
          from last)
       (save-restriction
-       (article-narrow-to-head)
-       (goto-char (point-min))
+       (nnheader-narrow-to-headers)
        (setq from (message-fetch-field "from"))
        (goto-char (point-min))
        (while (and gnus-article-x-face-command
@@ -1367,99 +959,29 @@ MAP is an alist where the elements are on the form (\"from\" \"to\")."
                  (process-send-region "article-x-face" beg end)
                  (process-send-eof "article-x-face"))))))))))
 
-(defun article-decode-mime-words ()
-  "Decode all MIME-encoded words in the article."
-  (interactive)
-  (save-excursion
-    (set-buffer gnus-article-buffer)
-    (let ((inhibit-point-motion-hooks t)
-         buffer-read-only
-         (mail-parse-charset gnus-newsgroup-charset)
-         (mail-parse-ignored-charsets 
-          (save-excursion (set-buffer gnus-summary-buffer)
-                          gnus-newsgroup-ignored-charsets)))
-      (mail-decode-encoded-word-region (point-min) (point-max)))))
-
-(defun article-decode-charset (&optional prompt)
-  "Decode charset-encoded text in the article.
-If PROMPT (the prefix), prompt for a coding system to use."
-  (interactive "P")
-  (save-excursion
-    (save-restriction
-      (article-narrow-to-head)
-      (let* ((inhibit-point-motion-hooks t)
-            (case-fold-search t)
-            (ct (message-fetch-field "Content-Type" t))
-            (cte (message-fetch-field "Content-Transfer-Encoding" t))
-            (ctl (and ct (ignore-errors
-                           (mail-header-parse-content-type ct))))
-            (charset (cond
-                      (prompt
-                       (mm-read-coding-system "Charset to decode: "))
-                      (ctl
-                       (mail-content-type-get ctl 'charset))))
-            (mail-parse-charset gnus-newsgroup-charset)
-            (mail-parse-ignored-charsets 
-             (save-excursion (set-buffer gnus-summary-buffer)
-                             gnus-newsgroup-ignored-charsets))
-            buffer-read-only)
-       (goto-char (point-max))
-       (widen)
-       (forward-line 1)
-       (narrow-to-region (point) (point-max))
-       (when (and (or (not ctl)
-                      (equal (car ctl) "text/plain"))
-                  (not (mm-uu-test)))
-         (mm-decode-body
-          charset (and cte (intern (downcase
-                                    (gnus-strip-whitespace cte))))
-          (car ctl)))))))
-
-(defun article-decode-encoded-words ()
-  "Remove encoded-word encoding from headers."
-  (let ((inhibit-point-motion-hooks t)
-       (mail-parse-charset gnus-newsgroup-charset)
-       (mail-parse-ignored-charsets 
-        (save-excursion (set-buffer gnus-summary-buffer)
-                        gnus-newsgroup-ignored-charsets))
-       buffer-read-only)
-    (save-restriction
-      (article-narrow-to-head)
-      (funcall gnus-decode-header-function (point-min) (point-max)))))
-
-(defun article-de-quoted-unreadable (&optional force)
-  "Translate a quoted-printable-encoded article.
-If FORCE, decode the article whether it is marked as quoted-printable
-or not."
-  (interactive (list 'force))
-  (save-excursion
-    (let ((buffer-read-only nil)
-         (type (gnus-fetch-field "content-transfer-encoding"))
-         (charset gnus-newsgroup-charset))
-      (when (or force
-               (and type (string-match "quoted-printable" (downcase type))))
-       (article-goto-body)
-       (save-restriction
-         (narrow-to-region (point) (point-max))
-         (quoted-printable-decode-region (point-min) (point-max))
-         (when charset
-           (mm-decode-body charset)))))))
-
-(defun article-hide-pgp ()
-  "Remove any PGP headers and signatures in the current article."
-  (interactive)
-  (save-excursion
-    (save-restriction
+(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.
+If given a negative prefix, always show; if given a positive prefix,
+always hide."
+  (interactive (gnus-article-hidden-arg))
+  (unless (gnus-article-check-hidden-text 'pgp arg)
+    (save-excursion
       (let ((inhibit-point-motion-hooks t)
            buffer-read-only beg end)
-       (article-goto-body)
+       (widen)
+       (goto-char (point-min))
        ;; Hide the "header".
-       (when (re-search-forward "^-----BEGIN PGP SIGNED MESSAGE-----\n" nil t)
-         (push 'pgp gnus-article-wash-types)
-         (delete-region (match-beginning 0) (match-end 0))
-         ;; PGP 5 and GNU PG add a `Hash: <>' comment, hide that too
-         (when (looking-at "Hash:.*$")
-           (delete-region (point) (1+ (gnus-point-at-eol))))
+       (when (search-forward "\n-----BEGIN PGP SIGNED MESSAGE-----\n" nil t)
+         (delete-region (1+ (match-beginning 0)) (match-end 0))
          (setq beg (point))
          ;; Hide the actual signature.
          (and (search-forward "\n-----BEGIN PGP SIGNATURE-----\n" nil t)
@@ -1489,72 +1011,25 @@ always hide."
   (unless (gnus-article-check-hidden-text 'pem arg)
     (save-excursion
       (let (buffer-read-only end)
+       (widen)
        (goto-char (point-min))
-       ;; Hide the horrendously ugly "header".
-       (when (and (search-forward
-                   "\n-----BEGIN PRIVACY-ENHANCED MESSAGE-----\n"
-                   nil t)
-                  (setq end (1+ (match-beginning 0))))
-         (push 'pem gnus-article-wash-types)
-         (gnus-article-hide-text-type
-          end
-          (if (search-forward "\n\n" nil t)
-              (match-end 0)
-            (point-max))
-          'pem)
-         ;; Hide the trailer as well
-         (when (search-forward "\n-----END PRIVACY-ENHANCED MESSAGE-----\n"
-                               nil t)
-           (gnus-article-hide-text-type
-            (match-beginning 0) (match-end 0) 'pem)))))))
-
-(defun article-strip-banner ()
-  "Strip the banner specified by the `banner' group parameter."
-  (interactive)
-  (save-excursion
-    (save-restriction
-      (let ((inhibit-point-motion-hooks t)
-           (banner (gnus-group-get-parameter gnus-newsgroup-name 'banner))
-           (gnus-signature-limit nil)
-           buffer-read-only beg end)
-       (when banner
-         (article-goto-body)
-         (cond
-          ((eq banner 'signature)
-           (when (gnus-article-narrow-to-signature)
-             (widen)
-             (forward-line -1)
-             (delete-region (point) (point-max))))
-          ((stringp banner)
-           (while (re-search-forward banner nil t)
-             (delete-region (match-beginning 0) (match-end 0))))))))))
-
-(defun article-babel-prompt ()
-  "Prompt for a babel translation."
-  (require 'babel)
-  (completing-read "Translate from: "
-                  babel-translations nil t
-                  (car (car babel-translations))
-                  babel-history))
-
-(defun article-babel (translation)
-  "Translate article according to TRANSLATION using babelfish."
-  (interactive (list (article-babel-prompt)))
-  (require 'babel)
-  (save-excursion
-    (set-buffer gnus-article-buffer)
-    (when (article-goto-body)
-      (let* ((buffer-read-only nil)
-            (start (point))
-            (end (point-max))
-            (msg (buffer-substring start end)))
-       (save-restriction
-         (narrow-to-region start end)
-         (delete-region start end)
-         (babel-fetch msg (cdr (assoc translation babel-translations)))
-         (save-restriction
-           (narrow-to-region start (point-max))
-           (babel-wash)))))))
+       ;; hide the horrendously ugly "header".
+       (and (search-forward "\n-----BEGIN PRIVACY-ENHANCED MESSAGE-----\n"
+                            nil
+                            t)
+            (setq end (1+ (match-beginning 0)))
+            (gnus-article-hide-text-type
+             end
+             (if (search-forward "\n\n" nil t)
+                 (match-end 0)
+               (point-max))
+             'pem))
+       ;; hide the trailer as well
+       (and (search-forward "\n-----END PRIVACY-ENHANCED MESSAGE-----\n"
+                            nil
+                            t)
+            (gnus-article-hide-text-type
+             (match-beginning 0) (match-end 0) 'pem))))))
 
 (defun article-hide-signature (&optional arg)
   "Hide the signature in the current article.
@@ -1569,50 +1044,18 @@ always hide."
            (gnus-article-hide-text-type
             (point-min) (point-max) 'signature)))))))
 
-(defun article-strip-headers-in-body ()
-  "Strip offensive headers from bodies."
-  (interactive)
-  (save-excursion
-    (article-goto-body)
-    (let ((case-fold-search t))
-      (when (looking-at "x-no-archive:")
-       (gnus-delete-line)))))
-
 (defun article-strip-leading-blank-lines ()
   "Remove all blank lines from the beginning of the article."
   (interactive)
   (save-excursion
     (let ((inhibit-point-motion-hooks t)
          buffer-read-only)
-      (when (article-goto-body)
+      (goto-char (point-min))
+      (when (search-forward "\n\n" nil t)
        (while (and (not (eobp))
                    (looking-at "[ \t]*$"))
          (gnus-delete-line))))))
 
-(defun article-narrow-to-head ()
-  "Narrow the buffer to the head of the message.
-Point is left at the beginning of the narrowed-to region."
-  (narrow-to-region
-   (goto-char (point-min))
-   (if (search-forward "\n\n" nil 1)
-       (1- (point))
-     (point-max)))
-  (goto-char (point-min)))
-
-(defun article-goto-body ()
-  "Place point at the start of the body."
-  (goto-char (point-min))
-  (cond
-   ;; This variable is only bound when dealing with separate
-   ;; MIME body parts.
-   (article-goto-body-goes-to-point-min-p
-    t)
-   ((search-forward "\n\n" nil t)
-    t)
-   (t
-    (goto-char (point-max))
-    nil)))
-
 (defun article-strip-multiple-blank-lines ()
   "Replace consecutive blank lines with one empty line."
   (interactive)
@@ -1620,17 +1063,15 @@ Point is left at the beginning of the narrowed-to region."
     (let ((inhibit-point-motion-hooks t)
          buffer-read-only)
       ;; First make all blank lines empty.
-      (article-goto-body)
+      (goto-char (point-min))
+      (search-forward "\n\n" nil t)
       (while (re-search-forward "^[ \t]+$" nil t)
-       (unless (gnus-annotation-in-region-p
-                (match-beginning 0) (match-end 0))
-         (replace-match "" nil t)))
+       (replace-match "" nil t))
       ;; Then replace multiple empty lines with a single empty line.
-      (article-goto-body)
+      (goto-char (point-min))
+      (search-forward "\n\n" nil t)
       (while (re-search-forward "\n\n\n+" nil t)
-       (unless (gnus-annotation-in-region-p
-                (match-beginning 0) (match-end 0))
-         (replace-match "\n\n" t t))))))
+       (replace-match "\n\n" t t)))))
 
 (defun article-strip-leading-space ()
   "Remove all white space from the beginning of the lines in the article."
@@ -1638,20 +1079,11 @@ Point is left at the beginning of the narrowed-to region."
   (save-excursion
     (let ((inhibit-point-motion-hooks t)
          buffer-read-only)
-      (article-goto-body)
+      (goto-char (point-min))
+      (search-forward "\n\n" nil t)
       (while (re-search-forward "^[ \t]+" nil t)
        (replace-match "" t t)))))
 
-(defun article-strip-trailing-space ()
-  "Remove all white space from the end of the lines in the article."
-  (interactive)
-  (save-excursion
-    (let ((inhibit-point-motion-hooks t)
-         buffer-read-only)
-      (article-goto-body)
-      (while (re-search-forward "[ \t]+$" nil t)
-       (replace-match "" t t)))))
-
 (defun article-strip-blank-lines ()
   "Strip leading, trailing and multiple blank lines."
   (interactive)
@@ -1665,12 +1097,14 @@ Point is left at the beginning of the narrowed-to region."
   (save-excursion
     (let ((inhibit-point-motion-hooks t)
          buffer-read-only)
-      (article-goto-body)
+      (goto-char (point-min))
+      (search-forward "\n\n" nil t)
       (while (re-search-forward "^[ \t]*\n" nil t)
        (replace-match "" t t)))))
 
 (defun gnus-article-narrow-to-signature ()
   "Narrow to the signature; return t if a signature is found, else nil."
+  (widen)
   (let ((inhibit-point-motion-hooks t))
     (when (gnus-article-search-signature)
       (forward-line 1)
@@ -1711,6 +1145,38 @@ Put point at the beginning of the signature separator."
       (goto-char cur)
       nil)))
 
+(eval-and-compile
+  (autoload 'w3-display "w3-parse")
+  (autoload 'w3-do-setup "w3" "" t)
+  (autoload 'w3-region "w3-display" "" t))
+
+(defun gnus-article-treat-html ()
+  "Render HTML."
+  (interactive)
+  (let ((cbuf (current-buffer)))
+    (set-buffer gnus-article-buffer)
+    (let (buf buffer-read-only b e)
+      (w3-do-setup)
+      (goto-char (point-min))
+      (narrow-to-region
+       (if (search-forward "\n\n" nil t)
+          (setq b (point))
+        (point-max))
+       (setq e (point-max)))
+      (nnheader-temp-write nil
+       (insert-buffer-substring gnus-article-buffer b e)
+       (require 'url)
+       (save-window-excursion
+         (w3-region (point-min) (point-max))
+         (setq buf (buffer-substring-no-properties (point-min) (point-max)))))
+      (when buf
+       (delete-region (point-min) (point-max))
+       (insert buf))
+      (widen)
+      (goto-char (point-min))
+      (set-window-start (get-buffer-window (current-buffer)) (point-min))
+      (set-buffer cbuf))))
+
 (defun gnus-article-hidden-arg ()
   "Return the current prefix arg as a number, or 0 if no prefix."
   (list (if current-prefix-arg
@@ -1723,6 +1189,7 @@ Arg can be nil or a number.  Nil and positive means hide, negative
 means show, 0 means toggle."
   (save-excursion
     (save-restriction
+      (widen)
       (let ((hide (gnus-article-hidden-text-p type)))
        (cond
         ((or (null arg)
@@ -1739,13 +1206,12 @@ means show, 0 means toggle."
   "Say whether the current buffer contains hidden text of type TYPE."
   (let ((pos (text-property-any (point-min) (point-max) 'article-type type)))
     (while (and pos
-               (not (get-text-property pos 'invisible))
-               (not (get-text-property pos 'dummy-invisible)))
+               (not (get-text-property pos 'invisible)))
       (setq pos
            (text-property-any (1+ pos) (point-max) 'article-type type)))
     (if pos
        'hidden
-      nil)))
+      'shown)))
 
 (defun gnus-article-show-hidden-text (type &optional hide)
   "Show all hidden text of type TYPE.
@@ -1778,148 +1244,144 @@ If HIDE, hide the text instead."
 (defun article-date-ut (&optional type highlight header)
   "Convert DATE date to universal time in the current article.
 If TYPE is `local', convert to local time; if it is `lapsed', output
-how much time has lapsed since DATE. For `lapsed', the value of
-`gnus-article-date-lapsed-new-header' says whether the \"X-Sent:\" header
-should replace the \"Date:\" one, or should be added below it."
+how much time has lapsed since DATE."
   (interactive (list 'ut t))
   (let* ((header (or header
+                    (mail-header-date gnus-current-headers)
                     (message-fetch-field "date")
                     ""))
-        (tdate-regexp "^Date:[ \t]\\|^X-Sent:[ \t]")
-        (date-regexp
-         (cond
-          ((not gnus-article-date-lapsed-new-header)
-           tdate-regexp)
-          ((eq type 'lapsed)
-           "^X-Sent:[ \t]")
-          (t
-           "^Date:[ \t]")))
         (date (if (vectorp header) (mail-header-date header)
                 header))
+        (date-regexp "^Date:[ \t]\\|^X-Sent:[ \t]")
         (inhibit-point-motion-hooks t)
-        (newline t)
-        bface eface)
+        bface eface newline)
     (when (and date (not (string= date "")))
       (save-excursion
        (save-restriction
-         (article-narrow-to-head)
-         (when (re-search-forward tdate-regexp nil t)
-           (setq bface (get-text-property (gnus-point-at-bol) 'face)
-                 eface (get-text-property (1- (gnus-point-at-eol))
-                                          'face))
-           (forward-line 1))
-         (goto-char (point-min))
+         (nnheader-narrow-to-headers)
          (let ((buffer-read-only nil))
-           ;; Delete any old Date headers.
-           (while (re-search-forward date-regexp nil t)
-             (if newline
+           ;; Delete any old Date headers.
+           (if (re-search-forward date-regexp nil t)
+               (progn
+                 (setq bface (get-text-property (gnus-point-at-bol) 'face)
+                       eface (get-text-property (1- (gnus-point-at-eol))
+                                                'face))
                  (delete-region (progn (beginning-of-line) (point))
                                 (progn (end-of-line) (point)))
-               (delete-region (progn (beginning-of-line) (point))
-                              (progn (forward-line 1) (point))))
-             (setq newline nil))
-           (when (re-search-forward tdate-regexp nil t)
-             (forward-line 1))
-           (insert (article-make-date-line date (or type 'ut)))
-           (when newline
-             (insert "\n")
-             (forward-line -1))
+                 (beginning-of-line))
+             (goto-char (point-max))
+             (setq newline t))
+           (insert (article-make-date-line date type))
            ;; Do highlighting.
            (beginning-of-line)
            (when (looking-at "\\([^:]+\\): *\\(.*\\)$")
              (put-text-property (match-beginning 1) (1+ (match-end 1))
                                 'face bface)
              (put-text-property (match-beginning 2) (match-end 2)
-                                'face eface))))))))
+                                'face eface))
+           (when newline
+             (end-of-line)
+             (insert "\n"))))))))
 
 (defun article-make-date-line (date type)
   "Return a DATE line of TYPE."
-  (let ((time (condition-case ()
-                 (date-to-time date)
-               (error '(0 0)))))
-    (cond
-     ;; Convert to the local timezone.  We have to slap a
-     ;; `condition-case' round the calls to the timezone
-     ;; functions since they aren't particularly resistant to
-     ;; buggy dates.
-     ((eq type 'local)
-      (let ((tz (car (current-time-zone))))
-       (format "Date: %s %s%04d" (current-time-string time)
-               (if (> tz 0) "+" "-") (abs (/ tz 36)))))
-     ;; Convert to Universal Time.
-     ((eq type 'ut)
-      (concat "Date: "
-             (current-time-string
-              (let* ((e (parse-time-string date))
-                    (tm (apply 'encode-time e))
-                    (ms (car tm))
-                    (ls (- (cadr tm) (car (current-time-zone)))))
-                (cond ((< ls 0) (list (1- ms) (+ ls 65536)))
-                      ((> ls 65535) (list (1+ ms) (- ls 65536)))
-                      (t (list ms ls)))))
-             " UT"))
-     ;; Get the original date from the article.
-     ((eq type 'original)
-      (concat "Date: " (if (string-match "\n+$" date)
-                          (substring date 0 (match-beginning 0))
-                        date)))
-     ;; Let the user define the format.
-     ((eq type 'user)
-      (if (gnus-functionp gnus-article-time-format)
-         (funcall gnus-article-time-format time)
-       (concat
-        "Date: "
-        (format-time-string gnus-article-time-format time))))
-     ;; ISO 8601.
-     ((eq type 'iso8601)
+  (cond
+   ;; Convert to the local timezone.  We have to slap a
+   ;; `condition-case' round the calls to the timezone
+   ;; functions since they aren't particularly resistant to
+   ;; buggy dates.
+   ((eq type 'local)
+    (concat "Date: " (condition-case ()
+                        (timezone-make-date-arpa-standard date)
+                      (error date))))
+   ;; Convert to Universal Time.
+   ((eq type 'ut)
+    (concat "Date: "
+           (condition-case ()
+               (timezone-make-date-arpa-standard date nil "UT")
+             (error date))))
+   ;; Get the original date from the article.
+   ((eq type 'original)
+    (concat "Date: " date))
+   ;; Let the user define the format.
+   ((eq type 'user)
+    (if (gnus-functionp gnus-article-time-format)
+       (funcall
+        gnus-article-time-format
+        (ignore-errors
+          (gnus-encode-date
+           (timezone-make-date-arpa-standard
+            date nil "UT"))))
       (concat
        "Date: "
-       (format-time-string "%Y%m%dT%H%M%S" time)))
-     ;; Do an X-Sent lapsed format.
-     ((eq type 'lapsed)
-      ;; If the date is seriously mangled, the timezone functions are
-      ;; liable to bug out, so we ignore all errors.
-      (let* ((now (current-time))
-            (real-time (subtract-time now time))
-            (real-sec (and real-time
-                           (+ (* (float (car real-time)) 65536)
-                              (cadr real-time))))
-            (sec (and real-time (abs real-sec)))
-            num prev)
-       (cond
-        ((null real-time)
-         "X-Sent: Unknown")
-        ((zerop sec)
-         "X-Sent: Now")
-        (t
-         (concat
-          "X-Sent: "
-          ;; This is a bit convoluted, but basically we go
-          ;; through the time units for years, weeks, etc,
-          ;; and divide things to see whether that results
-          ;; in positive answers.
-          (mapconcat
-           (lambda (unit)
-             (if (zerop (setq num (ffloor (/ sec (cdr unit)))))
-                 ;; The (remaining) seconds are too few to
-                 ;; be divided into this time unit.
-                 ""
-               ;; It's big enough, so we output it.
-               (setq sec (- sec (* num (cdr unit))))
-               (prog1
-                   (concat (if prev ", " "") (int-to-string
-                                              (floor num))
-                           " " (symbol-name (car unit))
-                           (if (> num 1) "s" ""))
-                 (setq prev t))))
-           article-time-units "")
-          ;; If dates are odd, then it might appear like the
-          ;; article was sent in the future.
-          (if (> real-sec 0)
-              " ago"
-            " in the future"))))))
-     (t
-      (error "Unknown conversion type: %s" type)))))
+       (format-time-string gnus-article-time-format
+                          (ignore-errors
+                            (gnus-encode-date
+                             (timezone-make-date-arpa-standard
+                              date nil "UT")))))))
+   ;; ISO 8601.
+   ((eq type 'iso8601)
+    (concat
+     "Date: "
+     (format-time-string "%Y%M%DT%h%m%s"
+                        (ignore-errors
+                          (gnus-encode-date
+                           (timezone-make-date-arpa-standard
+                            date nil "UT"))))))
+   ;; Do an X-Sent lapsed format.
+   ((eq type 'lapsed)
+    ;; If the date is seriously mangled, the timezone functions are
+    ;; liable to bug out, so we ignore all errors.
+    (let* ((now (current-time))
+          (real-time
+           (ignore-errors
+             (gnus-time-minus
+              (gnus-encode-date
+               (timezone-make-date-arpa-standard
+                (current-time-string now)
+                (current-time-zone now) "UT"))
+              (gnus-encode-date
+               (timezone-make-date-arpa-standard
+                date nil "UT")))))
+          (real-sec (and real-time
+                         (+ (* (float (car real-time)) 65536)
+                            (cadr real-time))))
+          (sec (and real-time (abs real-sec)))
+          num prev)
+      (cond
+       ((null real-time)
+       "X-Sent: Unknown")
+       ((zerop sec)
+       "X-Sent: Now")
+       (t
+       (concat
+        "X-Sent: "
+        ;; This is a bit convoluted, but basically we go
+        ;; through the time units for years, weeks, etc,
+        ;; and divide things to see whether that results
+        ;; in positive answers.
+        (mapconcat
+         (lambda (unit)
+           (if (zerop (setq num (ffloor (/ sec (cdr unit)))))
+               ;; The (remaining) seconds are too few to
+               ;; be divided into this time unit.
+               ""
+             ;; It's big enough, so we output it.
+             (setq sec (- sec (* num (cdr unit))))
+             (prog1
+                 (concat (if prev ", " "") (int-to-string
+                                            (floor num))
+                         " " (symbol-name (car unit))
+                         (if (> num 1) "s" ""))
+               (setq prev t))))
+         article-time-units "")
+        ;; If dates are odd, then it might appear like the
+        ;; article was sent in the future.
+        (if (> real-sec 0)
+            " ago"
+          " in the future"))))))
+   (t
+    (error "Unknown conversion type: %s" type))))
 
 (defun article-date-local (&optional highlight)
   "Convert the current article date to the local timezone."
@@ -1943,14 +1405,11 @@ function and want to see what the date was before converting."
   (let (deactivate-mark)
     (save-excursion
       (ignore-errors
-       (walk-windows
-        (lambda (w)
-          (set-buffer (window-buffer w))
-          (when (eq major-mode 'gnus-article-mode)
-            (goto-char (point-min))
-            (when (re-search-forward "^X-Sent:" nil t)
-              (article-date-lapsed t))))
-        nil 'visible)))))
+        (when (gnus-buffer-live-p gnus-article-buffer)
+          (set-buffer gnus-article-buffer)
+          (goto-char (point-min))
+          (when (re-search-forward "^X-Sent:" nil t)
+            (article-date-lapsed t)))))))
 
 (defun gnus-start-date-timer (&optional n)
   "Start a timer to update the X-Sent header in the article buffers.
@@ -1993,14 +1452,13 @@ This format is defined by the `gnus-article-time-format' variable."
   (interactive (gnus-article-hidden-arg))
   (unless (gnus-article-check-hidden-text 'emphasis arg)
     (save-excursion
-      (let ((alist (or (with-current-buffer gnus-summary-buffer 
-                        gnus-article-emphasis-alist) 
-                      gnus-emphasis-alist))
+      (let ((alist gnus-emphasis-alist)
            (buffer-read-only nil)
            (props (append '(article-type emphasis)
                           gnus-hidden-properties))
            regexp elem beg invisible visible face)
-       (article-goto-body)
+       (goto-char (point-min))
+       (search-forward "\n\n" nil t)
        (setq beg (point))
        (while (setq elem (pop alist))
          (goto-char beg)
@@ -2018,26 +1476,6 @@ This format is defined by the `gnus-article-time-format' variable."
               (match-beginning visible) (match-end visible) 'face face)
              (goto-char (match-end invisible)))))))))
 
-(defun gnus-article-setup-highlight-words (&optional highlight-words)
-  "Setup newsgroup emphasis alist."
-  (unless gnus-article-emphasis-alist
-    (let ((name (and gnus-newsgroup-name
-                    (gnus-group-real-name gnus-newsgroup-name))))
-      (make-local-variable 'gnus-article-emphasis-alist)
-      (setq gnus-article-emphasis-alist 
-           (nconc 
-            (let ((alist gnus-group-highlight-words-alist) elem highlight)
-              (while (setq elem (pop alist))
-                (when (and name (string-match (car elem) name))
-                  (setq alist nil
-                        highlight (copy-list (cdr elem)))))
-              highlight)
-            (copy-list highlight-words)
-            (if gnus-newsgroup-name
-                (copy-list (gnus-group-find-parameter 
-                            gnus-newsgroup-name 'highlight-words t)))
-            gnus-emphasis-alist)))))
-
 (defvar gnus-summary-article-menu)
 (defvar gnus-summary-post-menu)
 
@@ -2057,7 +1495,7 @@ This format is defined by the `gnus-article-time-format' variable."
     (if (not gnus-default-article-saver)
        (error "No default saver is defined")
       ;; !!! Magic!  The saving functions all save
-      ;; `gnus-save-article-buffer' (or so they think), but we
+      ;; `gnus-original-article-buffer' (or so they think), but we
       ;; bind that variable to our save-buffer.
       (set-buffer gnus-article-buffer)
       (let* ((gnus-save-article-buffer save-buffer)
@@ -2191,7 +1629,7 @@ Directory to save to is default to `gnus-article-save-directory'."
        (widen)
        (if (and (file-readable-p filename)
                 (mail-file-babyl-p filename))
-           (rmail-output-to-rmail-file filename t)
+           (gnus-output-to-rmail filename t)
          (gnus-output-to-mail filename)))))
   filename)
 
@@ -2231,7 +1669,8 @@ The directory to save in defaults to `gnus-article-save-directory'."
     (save-excursion
       (save-restriction
        (widen)
-       (when (article-goto-body)
+       (goto-char (point-min))
+       (when (search-forward "\n\n" nil t)
          (narrow-to-region (point) (point-max)))
        (gnus-output-to-file filename))))
   filename)
@@ -2239,8 +1678,7 @@ The directory to save in defaults to `gnus-article-save-directory'."
 (defun gnus-summary-save-in-pipe (&optional command)
   "Pipe this article to subprocess."
   (setq command
-       (cond ((and (eq command 'default)
-                   gnus-last-shell-command)
+       (cond ((eq command 'default)
               gnus-last-shell-command)
              (command command)
              (t (read-string
@@ -2349,37 +1787,26 @@ If variable `gnus-use-long-file-name' is non-nil, it is
    '(article-hide-headers
      article-hide-boring-headers
      article-treat-overstrike
-     article-fill-long-lines
-     article-capitalize-sentences
+     (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-strip-banner
-     article-babel
      article-hide-pem
      article-hide-signature
-     article-strip-headers-in-body
      article-remove-trailing-blank-lines
      article-strip-leading-blank-lines
      article-strip-multiple-blank-lines
      article-strip-leading-space
-     article-strip-trailing-space
      article-strip-blank-lines
      article-strip-all-blank-lines
      article-date-local
      article-date-iso8601
      article-date-original
      article-date-ut
-     article-decode-mime-words
-     article-decode-charset
-     article-decode-encoded-words
      article-date-user
      article-date-lapsed
      article-emphasize
      article-treat-dumbquotes
-     article-normalize-headers
      (article-show-all . gnus-article-show-all-headers))))
 \f
 ;;;
@@ -2388,18 +1815,19 @@ If variable `gnus-use-long-file-name' is non-nil, it is
 
 (put 'gnus-article-mode 'mode-class 'special)
 
-(set-keymap-parent gnus-article-mode-map widget-keymap)
-
 (gnus-define-keys gnus-article-mode-map
   " " gnus-article-goto-next-page
   "\177" gnus-article-goto-prev-page
   [delete] gnus-article-goto-prev-page
-  [backspace] gnus-article-goto-prev-page
   "\C-c^" gnus-article-refer-article
   "h" gnus-article-show-summary
   "s" gnus-article-show-summary
   "\C-c\C-m" gnus-article-mail
   "?" gnus-article-describe-briefly
+  gnus-mouse-2 gnus-article-push-button
+  "\r" gnus-article-press-button
+  "\t" gnus-article-next-button
+  "\M-\t" gnus-article-prev-button
   "e" gnus-article-edit
   "<" beginning-of-buffer
   ">" end-of-buffer
@@ -2436,7 +1864,7 @@ If variable `gnus-use-long-file-name' is non-nil, it is
        ["Hide citation" gnus-article-hide-citation t]
        ["Treat overstrike" gnus-article-treat-overstrike t]
        ["Remove carriage return" gnus-article-remove-cr t]
-       ["Remove quoted-unreadable" gnus-article-de-quoted-unreadable t]))
+       ))
 
     ;; Note "Commands" menu is defined in gnus-sum.el for consistency
 
@@ -2468,21 +1896,18 @@ commands:
   (setq mode-name "Article")
   (setq major-mode 'gnus-article-mode)
   (make-local-variable 'minor-mode-alist)
+  (unless (assq 'gnus-show-mime minor-mode-alist)
+    (push (list 'gnus-show-mime " MIME") minor-mode-alist))
   (use-local-map gnus-article-mode-map)
   (gnus-update-format-specifications nil 'article-mode)
   (set (make-local-variable 'page-delimiter) gnus-page-delimiter)
   (make-local-variable 'gnus-page-broken)
   (make-local-variable 'gnus-button-marker-list)
   (make-local-variable 'gnus-article-current-summary)
-  (make-local-variable 'gnus-article-mime-handles)
-  (make-local-variable 'gnus-article-decoded-p)
-  (make-local-variable 'gnus-article-mime-handle-alist)
-  (make-local-variable 'gnus-article-washed-types)
   (gnus-set-default-directory)
-  (buffer-disable-undo)
+  (buffer-disable-undo (current-buffer))
   (setq buffer-read-only t)
   (set-syntax-table gnus-article-mode-syntax-table)
-  (mm-enable-multibyte)
   (gnus-run-hooks 'gnus-article-mode-hook))
 
 (defun gnus-article-setup-buffer ()
@@ -2495,7 +1920,6 @@ commands:
                         (substring name (match-end 0))))))
     (setq gnus-article-buffer name)
     (setq gnus-original-article-buffer original)
-    (setq gnus-article-mime-handle-alist nil)
     ;; This might be a variable local to the summary buffer.
     (unless gnus-single-article-buffer
       (save-excursion
@@ -2503,17 +1927,16 @@ commands:
        (setq gnus-article-buffer name)
        (setq gnus-original-article-buffer original)
        (gnus-set-global-variables)))
-    (gnus-article-setup-highlight-words)
     ;; Init original article buffer.
     (save-excursion
       (set-buffer (gnus-get-buffer-create gnus-original-article-buffer))
-      (mm-enable-multibyte)
+      (buffer-disable-undo (current-buffer))
       (setq major-mode 'gnus-original-article-mode)
       (make-local-variable 'gnus-original-article))
     (if (get-buffer name)
        (save-excursion
          (set-buffer name)
-         (buffer-disable-undo)
+         (buffer-disable-undo (current-buffer))
          (setq buffer-read-only t)
          (unless (eq major-mode 'gnus-article-mode)
            (gnus-article-mode))
@@ -2522,7 +1945,6 @@ commands:
        (set-buffer (gnus-get-buffer-create name))
        (gnus-article-mode)
        (make-local-variable 'gnus-summary-buffer)
-       (gnus-summary-set-local-parameters gnus-newsgroup-name)
        (current-buffer)))))
 
 ;; Set article window start at LINE, where LINE is the number of lines
@@ -2540,6 +1962,76 @@ commands:
        (forward-line line)
        (point)))))
 
+;;; @@ article filters
+;;;
+
+(defun gnus-article-display-mime-message ()
+  "Article display method for MIME message."
+  ;; called from `gnus-original-article-buffer'.
+  (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))
+  ;; `mime-display-message' changes current buffer to `gnus-article-buffer'.
+  (make-local-variable 'mime-button-mother-dispatcher)
+  (setq mime-button-mother-dispatcher
+       (function gnus-article-push-button))
+  (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-make-full-mail-header (&optional number charset)
+  "Create a new mail header structure in a raw article buffer."
+  (unless (and number charset)
+    (save-current-buffer
+      (set-buffer gnus-summary-buffer)
+      (unless number
+       (setq number (or (cdr gnus-article-current) 0)))
+      (unless charset
+       (setq charset (or default-mime-charset 'x-ctext)))))
+  (goto-char (point-min))
+  (let ((header-end (if (search-forward "\n\n" nil t)
+                       (1- (point))
+                     (goto-char (point-max))))
+       (chars (- (point-max) (point)))
+       (lines (count-lines (point) (point-max)))
+       (default-mime-charset charset)
+       xref)
+    (narrow-to-region (point-min) header-end)
+    (setq xref (std11-fetch-field "xref"))
+    (prog1
+       (make-full-mail-header
+        number
+        (std11-fetch-field "subject")
+        (std11-fetch-field "from")
+        (std11-fetch-field "date")
+        (std11-fetch-field "message-id")
+        (std11-fetch-field "references")
+        chars
+        lines
+        (when xref (concat "Xref: " xref)))
+      (widen))))
+
 (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.
@@ -2557,7 +2049,7 @@ If ALL-HEADERS is non-nil, no headers are hidden."
           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)
@@ -2595,9 +2087,7 @@ If ALL-HEADERS is non-nil, no headers are hidden."
                      (gnus-configure-windows 'summary)
                    (gnus-configure-windows 'article))
                  (gnus-set-global-variables))
-               (let ((gnus-article-mime-handle-alist-1
-                      gnus-article-mime-handle-alist))
-                 (gnus-set-mode-line 'article)))
+               (gnus-set-mode-line 'article))
            ;; The result from the `request' was an actual article -
            ;; or at least some text that is now displayed in the
            ;; article buffer.
@@ -2628,6 +2118,8 @@ If ALL-HEADERS is non-nil, no headers are hidden."
                (when (gnus-visual-p 'article-highlight 'highlight)
                  (gnus-run-hooks 'gnus-visual-mark-article-hook))
                ;; Set the global newsgroup variables here.
+               ;; Suggested by Jim Sisolak
+               ;; <sisolak@trans4.neep.wisc.edu>.
                (gnus-set-global-variables)
                (setq gnus-have-all-headers
                      (or all-headers gnus-show-all-headers))))
@@ -2640,620 +2132,53 @@ If ALL-HEADERS is non-nil, no headers are hidden."
                    (when gnus-break-pages
                      (gnus-narrow-to-page)
                      t)))
-           (let ((gnus-article-mime-handle-alist-1
-                  gnus-article-mime-handle-alist))
-             (gnus-set-mode-line 'article))
-           (article-goto-body)
-           (set-window-point (get-buffer-window (current-buffer)) (point))
+           (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))))))
 
-;;;###autoload
 (defun gnus-article-prepare-display ()
   "Make the current buffer look like a nice article."
-  ;; Hooks for getting information from the article.
-  ;; This hook must be called before being narrowed.
-  (let ((gnus-article-buffer (current-buffer))
-       buffer-read-only)
-    (unless (eq major-mode 'gnus-article-mode)
-      (gnus-article-mode))
-    (setq buffer-read-only nil)
+  (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)))
     (gnus-run-hooks 'gnus-tmp-internal-hook)
     (gnus-run-hooks 'gnus-article-prepare-hook)
-    (when gnus-display-mime-function
-      (funcall gnus-display-mime-function))))
-
-;;;
-;;; Gnus MIME viewing functions
-;;;
-
-(defvar gnus-mime-button-line-format "%{%([%p. %d%T]%)%}%e\n"
-  "The following specs can be used:
-%t  The MIME type
-%T  MIME type, along with additional info
-%n  The `name' parameter
-%d  The description, if any
-%l  The length of the encoded part
-%p  The part identifier number
-%e  Dots if the part isn't displayed")
-
-(defvar gnus-mime-button-line-format-alist
-  '((?t gnus-tmp-type ?s)
-    (?T gnus-tmp-type-long ?s)
-    (?n gnus-tmp-name ?s)
-    (?d gnus-tmp-description ?s)
-    (?p gnus-tmp-id ?s)
-    (?l gnus-tmp-length ?d)
-    (?e gnus-tmp-dots ?s)))
-
-(defvar gnus-mime-button-commands
-  '((gnus-article-press-button "\r"    "Toggle Display")
-    (gnus-mime-view-part       "v"     "View Interactively...")
-    (gnus-mime-save-part       "o"     "Save...")
-    (gnus-mime-copy-part       "c"     "View As Text, In Other Buffer")
-    (gnus-mime-inline-part     "i"     "View As Text, In This Buffer")
-    (gnus-mime-internalize-part        "E"     "View Internally")
-    (gnus-mime-externalize-part        "e"     "View Externally")
-    (gnus-mime-pipe-part       "|"     "Pipe To Command...")))
-
-(defun gnus-article-mime-part-status ()
-  (if gnus-article-mime-handle-alist-1
-      (format " (%d parts)" (length gnus-article-mime-handle-alist-1))
-    ""))
-
-(defvar gnus-mime-button-map nil)
-(unless gnus-mime-button-map
-  (setq gnus-mime-button-map (make-sparse-keymap))
-  (set-keymap-parent gnus-mime-button-map gnus-article-mode-map)
-  (define-key gnus-mime-button-map gnus-mouse-2 'gnus-article-push-button)
-  (define-key gnus-mime-button-map gnus-down-mouse-3 'gnus-mime-button-menu)
-  (mapcar (lambda (c)
-           (define-key gnus-mime-button-map (cadr c) (car c)))
-         gnus-mime-button-commands))
-
-(defun gnus-mime-button-menu (event)
-  "Construct a context-sensitive menu of MIME commands."
-  (interactive "e")
-  (save-excursion
-    (let ((pos (event-start event)))
-      (set-buffer (window-buffer (posn-window pos)))
-      (goto-char (posn-point pos))
-      (gnus-article-check-buffer)
-      (let ((response (x-popup-menu
-                      t `("MIME Part"
-                          ("" ,@(mapcar (lambda (c)
-                                          (cons (caddr c) (car c)))
-                                        gnus-mime-button-commands))))))
-       (if response
-           (funcall response))))))
-
-(defun gnus-mime-view-all-parts (&optional handles)
-  "View all the MIME parts."
-  (interactive)
-  (save-current-buffer
-    (set-buffer gnus-article-buffer)
-    (let ((handles (or handles gnus-article-mime-handles))
-         (mail-parse-charset gnus-newsgroup-charset)
-         (mail-parse-ignored-charsets 
-          (save-excursion (set-buffer gnus-summary-buffer)
-                          gnus-newsgroup-ignored-charsets)))
-      (if (stringp (car handles))
-         (gnus-mime-view-all-parts (cdr handles))
-       (mapcar 'mm-display-part handles)))))
-
-(defun gnus-mime-save-part ()
-  "Save the MIME part under point."
-  (interactive)
-  (gnus-article-check-buffer)
-  (let ((data (get-text-property (point) 'gnus-data)))
-    (mm-save-part data)))
-
-(defun gnus-mime-pipe-part ()
-  "Pipe the MIME part under point to a process."
-  (interactive)
-  (gnus-article-check-buffer)
-  (let ((data (get-text-property (point) 'gnus-data)))
-    (mm-pipe-part data)))
-
-(defun gnus-mime-view-part ()
-  "Interactively choose a viewing method for the MIME part under point."
-  (interactive)
-  (gnus-article-check-buffer)
-  (let ((data (get-text-property (point) 'gnus-data)))
-    (mm-interactively-view-part data)))
-
-(defun gnus-mime-copy-part (&optional handle)
-  "Put the the MIME part under point into a new buffer."
-  (interactive)
-  (gnus-article-check-buffer)
-  (let* ((handle (or handle (get-text-property (point) 'gnus-data)))
-        (contents (mm-get-part handle))|
-        (base (file-name-nondirectory
-               (or
-                (mail-content-type-get (mm-handle-type handle) 'name)
-                (mail-content-type-get (mm-handle-type handle)
-                                       'filename)
-                "*decoded*")))
-        (buffer (generate-new-buffer base)))
-    (switch-to-buffer buffer)
-    (insert contents)
-    ;; We do it this way to make `normal-mode' set the appropriate mode.
-    (unwind-protect
-       (progn
-         (setq buffer-file-name (expand-file-name base))
-         (normal-mode))
-      (setq buffer-file-name nil))
-    (goto-char (point-min))))
-
-(defun gnus-mime-inline-part (&optional handle)
-  "Insert the MIME part under point into the current buffer."
-  (interactive)
-  (gnus-article-check-buffer)
-  (let* ((handle (or handle (get-text-property (point) 'gnus-data)))
-        contents
-        (b (point))
-        buffer-read-only)
-    (if (mm-handle-undisplayer handle)
-       (mm-remove-part handle)
-      (setq contents (mm-get-part handle))
-      (forward-line 2)
-      (mm-insert-inline handle contents)
-      (goto-char b))))
-
-(defun gnus-mime-externalize-part (&optional handle)
-  "View the MIME part under point with an external viewer."
-  (interactive)
-  (gnus-article-check-buffer)
-  (let* ((handle (or handle (get-text-property (point) 'gnus-data)))
-        (mm-user-display-methods nil)
-        (mm-inline-large-images nil)
-        (mail-parse-charset gnus-newsgroup-charset)
-        (mail-parse-ignored-charsets 
-         (save-excursion (set-buffer gnus-summary-buffer)
-                         gnus-newsgroup-ignored-charsets)))
-    (if (mm-handle-undisplayer handle)
-       (mm-remove-part handle)
-      (mm-display-part handle))))
-
-(defun gnus-mime-internalize-part (&optional handle)
-  "View the MIME part under point with an internal viewer."
-  (interactive)
-  (gnus-article-check-buffer)
-  (let* ((handle (or handle (get-text-property (point) 'gnus-data)))
-        (mm-user-display-methods '((".*" . inline)))
-        (mm-inline-large-images t)
-        (mail-parse-charset gnus-newsgroup-charset)
-        (mail-parse-ignored-charsets 
-         (save-excursion (set-buffer gnus-summary-buffer)
-                         gnus-newsgroup-ignored-charsets)))
-    (if (mm-handle-undisplayer handle)
-       (mm-remove-part handle)
-      (mm-display-part handle))))
-
-(defun gnus-article-part-wrapper (n function)
-  (save-current-buffer
-    (set-buffer gnus-article-buffer)
-    (when (> n (length gnus-article-mime-handle-alist))
-      (error "No such part"))
-    (gnus-article-goto-part n)
-    (let ((handle (cdr (assq n gnus-article-mime-handle-alist))))
-      (funcall function handle))))
-
-(defun gnus-article-pipe-part (n)
-  "Pipe MIME part N, which is the numerical prefix."
-  (interactive "p")
-  (gnus-article-part-wrapper n 'mm-pipe-part))
-
-(defun gnus-article-save-part (n)
-  "Save MIME part N, which is the numerical prefix."
-  (interactive "p")
-  (gnus-article-part-wrapper n 'mm-save-part))
-
-(defun gnus-article-interactively-view-part (n)
-  "View MIME part N interactively, which is the numerical prefix."
-  (interactive "p")
-  (gnus-article-part-wrapper n 'mm-interactively-view-part))
-
-(defun gnus-article-copy-part (n)
-  "Copy MIME part N, which is the numerical prefix."
-  (interactive "p")
-  (gnus-article-part-wrapper n 'gnus-mime-copy-part))
-
-(defun gnus-article-externalize-part (n)
-  "View MIME part N externally, which is the numerical prefix."
-  (interactive "p")
-  (gnus-article-part-wrapper n 'gnus-mime-externalize-part))
-
-(defun gnus-article-inline-part (n)
-  "Inline MIME part N, which is the numerical prefix."
-  (interactive "p")
-  (gnus-article-part-wrapper n 'gnus-mime-inline-part))
-
-(defun gnus-article-view-part (n)
-  "View MIME part N, which is the numerical prefix."
-  (interactive "p")
-  (save-current-buffer
-    (set-buffer gnus-article-buffer)
-    (when (> n (length gnus-article-mime-handle-alist))
-      (error "No such part"))
-    (let ((handle (cdr (assq n gnus-article-mime-handle-alist))))
-      (when (gnus-article-goto-part n)
-       (if (equal (car handle) "multipart/alternative")
-           (gnus-article-press-button)
-         (when (eq (gnus-mm-display-part handle) 'internal)
-           (gnus-set-window-start)))))))
-
-(defun gnus-mm-display-part (handle)
-  "Display HANDLE and fix MIME button."
-  (let ((id (get-text-property (point) 'gnus-part))
-       (point (point))
-       buffer-read-only)
-    (forward-line 1)
-    (prog1
-       (let ((window (selected-window))
-             (mail-parse-charset gnus-newsgroup-charset)
-             (mail-parse-ignored-charsets 
-              (save-excursion (set-buffer gnus-summary-buffer)
-                              gnus-newsgroup-ignored-charsets)))
-         (save-excursion
-           (unwind-protect
-               (let ((win (get-buffer-window (current-buffer) t))
-                     (beg (point)))
-                 (when win
-                   (select-window win))
-                 (goto-char point)
-                 (forward-line)
-                 (if (mm-handle-displayed-p handle)
-                     ;; This will remove the part.
-                     (mm-display-part handle)
-                   (save-restriction
-                     (narrow-to-region (point) (1+ (point)))
-                     (mm-display-part handle)
-                     ;; We narrow to the part itself and
-                     ;; then call the treatment functions.
-                     (goto-char (point-min))
-                     (forward-line 1)
-                     (narrow-to-region (point) (point-max))
-                     (gnus-treat-article
-                      nil id
-                      (1- (length gnus-article-mime-handles))
-                      (mm-handle-media-type handle)))))
-             (select-window window))))
-      (goto-char point)
-      (delete-region (gnus-point-at-bol) (progn (forward-line 1) (point)))
-      (gnus-insert-mime-button
-       handle id (list (mm-handle-displayed-p handle)))
-      (goto-char point))))
-
-(defun gnus-article-goto-part (n)
-  "Go to MIME part N."
-  (let ((point (text-property-any (point-min) (point-max) 'gnus-part n)))
-    (when point
-      (goto-char point))))
-
-(defun gnus-insert-mime-button (handle gnus-tmp-id &optional displayed)
-  (let ((gnus-tmp-name
-        (or (mail-content-type-get (mm-handle-type handle)
-                                   'name)
-            (mail-content-type-get (mm-handle-disposition handle)
-                                   'filename)
-            ""))
-       (gnus-tmp-type (mm-handle-media-type handle))
-       (gnus-tmp-description
-        (mail-decode-encoded-word-string (or (mm-handle-description handle)
-                                             "")))
-       (gnus-tmp-dots
-        (if (if displayed (car displayed)
-              (mm-handle-displayed-p handle))
-            "" "..."))
-       (gnus-tmp-length (with-current-buffer (mm-handle-buffer handle)
-                          (buffer-size)))
-       gnus-tmp-type-long b e)
-    (when (string-match ".*/" gnus-tmp-name)
-      (setq gnus-tmp-name (replace-match "" t t gnus-tmp-name)))
-    (setq gnus-tmp-type-long (concat gnus-tmp-type
-                                    (and (not (equal gnus-tmp-name ""))
-                                         (concat "; " gnus-tmp-name))))
-    (or (equal gnus-tmp-description "")
-       (setq gnus-tmp-type-long (concat " --- " gnus-tmp-type-long)))
-    (unless (bolp)
-      (insert "\n"))
-    (setq b (point))
-    (gnus-eval-format
-     gnus-mime-button-line-format gnus-mime-button-line-format-alist
-     `(local-map ,gnus-mime-button-map
-                keymap ,gnus-mime-button-map
-                gnus-callback gnus-mm-display-part
-                gnus-part ,gnus-tmp-id
-                article-type annotation
-                gnus-data ,handle))
-    (setq e (point))
-    (widget-convert-button 'link b e
-                          :mime-handle handle
-                          :action 'gnus-widget-press-button
-                          :button-keymap gnus-mime-button-map
-                          :help-echo
-                          (lambda (widget)
-                            ;; Needed to properly clear the message
-                            ;; due to a bug in wid-edit
-                            (setq help-echo-owns-message t)
-                            (format
-                             "Click to %s the MIME part; %s for more options"
-                             (if (mm-handle-displayed-p
-                                  (widget-get widget :mime-handle))
-                                 "hide" "show")
-                             (if gnus-xemacs "button3" "mouse-3"))))))
-
-(defun gnus-widget-press-button (elems el)
-  (goto-char (widget-get elems :from))
-  (gnus-article-press-button))
-
-(defvar gnus-displaying-mime nil)
-
-(defun gnus-display-mime (&optional ihandles)
-  "Display the MIME parts."
-  (save-excursion
-    (save-selected-window
-      (let ((window (get-buffer-window gnus-article-buffer))
-           (point (point)))
-       (when window
-         (select-window window)
-         ;; We have to do this since selecting the window
-         ;; may change the point.  So we set the window point.
-         (set-window-point window point)))
-      (let* ((handles (or ihandles (mm-dissect-buffer) (mm-uu-dissect)))
-            buffer-read-only handle name type b e display)
-       (when (and (not ihandles)
-                  (not gnus-displaying-mime))
-         ;; Top-level call; we clean up.
-         (when gnus-article-mime-handles
-           (mm-destroy-parts gnus-article-mime-handles)
-           (setq gnus-article-mime-handle-alist nil)) ;; A trick.
-         (setq gnus-article-mime-handles handles)
-         ;; We allow users to glean info from the handles.
-         (when gnus-article-mime-part-function
-           (gnus-mime-part-function handles)))
-       (if (and handles
-                (or (not (stringp (car handles)))
-                    (cdr handles)))
-           (progn
-             (when (and (not ihandles)
-                        (not gnus-displaying-mime))
-               ;; Clean up for mime parts.
-               (article-goto-body)
-               (delete-region (point) (point-max)))
-             (let ((gnus-displaying-mime t))
-               (gnus-mime-display-part handles)))
-         (save-restriction
-           (article-goto-body)
-           (narrow-to-region (point) (point-max))
-           (gnus-treat-article nil 1 1)
-           (widen)))
-       (if (not ihandles)
-           ;; Highlight the headers.
-           (save-excursion
-             (save-restriction
-               (article-goto-body)
-               (narrow-to-region (point-min) (point))
-               (gnus-treat-article 'head))))))))
-
-(defvar gnus-mime-display-multipart-as-mixed nil)
-
-(defun gnus-mime-display-part (handle)
-  (cond
-   ;; Single part.
-   ((not (stringp (car handle)))
-    (gnus-mime-display-single handle))
-   ;; User-defined multipart
-   ((cdr (assoc (car handle) gnus-mime-multipart-functions))
-    (funcall (cdr (assoc (car handle) gnus-mime-multipart-functions))
-            handle))
-   ;; multipart/alternative
-   ((and (equal (car handle) "multipart/alternative")
-        (not gnus-mime-display-multipart-as-mixed))
-    (let ((id (1+ (length gnus-article-mime-handle-alist))))
-      (push (cons id handle) gnus-article-mime-handle-alist)
-      (gnus-mime-display-alternative (cdr handle) nil nil id)))
-   ;; multipart/related
-   ((and (equal (car handle) "multipart/related")
-        (not gnus-mime-display-multipart-as-mixed))
-    ;;;!!!We should find the start part, but we just default
-    ;;;!!!to the first part.
-    (gnus-mime-display-part (cadr handle)))
-   ;; Other multiparts are handled like multipart/mixed.
-   (t
-    (gnus-mime-display-mixed (cdr handle)))))
-
-(defun gnus-mime-part-function (handles)
-  (if (stringp (car handles))
-      (mapcar 'gnus-mime-part-function (cdr handles))
-    (funcall gnus-article-mime-part-function handles)))
-
-(defun gnus-mime-display-mixed (handles)
-  (mapcar 'gnus-mime-display-part handles))
-
-(defun gnus-mime-display-single (handle)
-  (let ((type (mm-handle-media-type handle))
-       (ignored gnus-ignored-mime-types)
-       (not-attachment t)
-       (move nil)
-       display text)
-    (catch 'ignored
-      (progn
-       (while ignored
-         (when (string-match (pop ignored) type)
-           (throw 'ignored nil)))
-       (if (and (setq not-attachment
-                      (or (not (mm-handle-disposition handle))
-                          (equal (car (mm-handle-disposition handle))
-                                 "inline")
-                          (mm-attachment-override-p handle)))
-                (mm-automatic-display-p handle)
-                (or (mm-inlined-p handle)
-                    (mm-automatic-external-display-p type)))
-           (setq display t)
-         (when (equal (mm-handle-media-supertype handle) "text")
-           (setq text t)))
-       (let ((id (1+ (length gnus-article-mime-handle-alist))))
-         (push (cons id handle) gnus-article-mime-handle-alist)
-         (when (or (not display)
-                   (not (gnus-unbuttonized-mime-type-p type)))
-           (gnus-article-insert-newline)
-           (gnus-insert-mime-button
-            handle id (list (or display (and not-attachment text))))
-           (gnus-article-insert-newline)
-           (gnus-article-insert-newline)
-           (setq move t)))
-       (let ((beg (point)))
-         (cond
-          (display
-           (when move
-             (forward-line -2))
-           (let ((mail-parse-charset gnus-newsgroup-charset)
-                 (mail-parse-ignored-charsets 
-                  (save-excursion (set-buffer gnus-summary-buffer)
-                                  gnus-newsgroup-ignored-charsets)))
-             (mm-display-part handle t))
-           (goto-char (point-max)))
-          ((and text not-attachment)
-           (when move
-             (forward-line -2))
-           (gnus-article-insert-newline)
-           (mm-insert-inline handle (mm-get-part handle))
-           (goto-char (point-max))))
-         ;; Do highlighting.
-         (save-excursion
-           (save-restriction
-             (narrow-to-region beg (point))
-             (gnus-treat-article
-              nil (length gnus-article-mime-handle-alist)
-              (1- (length gnus-article-mime-handles))
-              (mm-handle-media-type handle)))))))))
-
-(defun gnus-unbuttonized-mime-type-p (type)
-  "Say whether TYPE is to be unbuttonized."
-  (unless gnus-inhibit-mime-unbuttonizing
-    (catch 'found
-      (let ((types gnus-unbuttonized-mime-types))
-       (while types
-         (when (string-match (pop types) type)
-           (throw 'found t)))))))
-
-(defun gnus-article-insert-newline ()
-  "Insert a newline, but mark it as undeletable."
-  (gnus-put-text-property
-   (point) (progn (insert "\n") (point)) 'gnus-undeletable t))
-
-(defun gnus-mime-display-alternative (handles &optional preferred ibegend id)
-  (let* ((preferred (or preferred (mm-preferred-alternative handles)))
-        (ihandles handles)
-        (point (point))
-        handle buffer-read-only from props begend not-pref)
-    (save-window-excursion
-      (save-restriction
-       (when ibegend
-         (narrow-to-region (car ibegend)
-                           (or (cdr ibegend)
-                               (progn
-                                 (goto-char (car ibegend))
-                                 (forward-line 2)
-                                 (point))))
-         (delete-region (point-min) (point-max))
-         (mm-remove-parts handles))
-       (setq begend (list (point-marker)))
-       ;; Do the toggle.
-       (unless (setq not-pref (cadr (member preferred ihandles)))
-         (setq not-pref (car ihandles)))
-       (when (or ibegend
-                 (not (gnus-unbuttonized-mime-type-p
-                       "multipart/alternative")))
-         (gnus-add-text-properties
-          (setq from (point))
-          (progn
-            (insert (format "%d.  " id))
-            (point))
-          `(gnus-callback
-            (lambda (handles)
-              (unless ,(not ibegend)
-                (setq gnus-article-mime-handle-alist
-                      ',gnus-article-mime-handle-alist))
-              (gnus-mime-display-alternative
-               ',ihandles ',not-pref ',begend ,id))
-            local-map ,gnus-mime-button-map
-            ,gnus-mouse-face-prop ,gnus-article-mouse-face
-            face ,gnus-article-button-face
-            keymap ,gnus-mime-button-map
-            gnus-part ,id
-            gnus-data ,handle))
-         (widget-convert-button 'link from (point)
-                                :action 'gnus-widget-press-button
-                                :button-keymap gnus-widget-button-keymap)
-         ;; Do the handles
-         (while (setq handle (pop handles))
-           (gnus-add-text-properties
-            (setq from (point))
-            (progn
-              (insert (format "(%c) %-18s"
-                              (if (equal handle preferred) ?* ? )
-                              (mm-handle-media-type handle)))
-              (point))
-            `(gnus-callback
-              (lambda (handles)
-                (unless ,(not ibegend)
-                  (setq gnus-article-mime-handle-alist
-                        ',gnus-article-mime-handle-alist))
-                (gnus-mime-display-alternative
-                 ',ihandles ',handle ',begend ,id))
-              local-map ,gnus-mime-button-map
-              ,gnus-mouse-face-prop ,gnus-article-mouse-face
-              face ,gnus-article-button-face
-              keymap ,gnus-mime-button-map
-              gnus-part ,id
-              gnus-data ,handle))
-           (widget-convert-button 'link from (point)
-                                  :action 'gnus-widget-press-button
-                                  :button-keymap gnus-widget-button-keymap)
-           (insert "  "))
-         (insert "\n\n"))
-       (when preferred
-         (if (stringp (car preferred))
-             (gnus-display-mime preferred)
-           (let ((mail-parse-charset gnus-newsgroup-charset)
-                 (mail-parse-ignored-charsets 
-                  (save-excursion (set-buffer gnus-summary-buffer)
-                                  gnus-newsgroup-ignored-charsets)))
-             (mm-display-part preferred)
-             ;; Do highlighting.
-             (save-excursion
-               (save-restriction
-                 (narrow-to-region (car begend) (point-max))
-                 (gnus-treat-article
-                  nil (length gnus-article-mime-handle-alist)
-                  (1- (length gnus-article-mime-handles))
-                  (mm-handle-media-type handle))))))
-         (goto-char (point-max))
-         (setcdr begend (point-marker)))))
-    (when ibegend
-      (goto-char point))))
+    ;; Display message.
+    (funcall method)
+    ;; Associate this article with the current summary buffer.
+    (setq gnus-article-current-summary gnus-summary-buffer)
+    ;; Perform the article display hooks.
+    (gnus-run-hooks 'gnus-article-display-hook)))
 
 (defun gnus-article-wash-status ()
   "Return a string which display status of article washing."
   (save-excursion
     (set-buffer gnus-article-buffer)
-    (let ((cite (memq 'cite gnus-article-wash-types))
-         (headers (memq 'headers gnus-article-wash-types))
-         (boring (memq 'boring-headers gnus-article-wash-types))
-         (pgp (memq 'pgp gnus-article-wash-types))
-         (pem (memq 'pem gnus-article-wash-types))
-         (signature (memq 'signature gnus-article-wash-types))
-         (overstrike (memq 'overstrike gnus-article-wash-types))
-         (emphasis (memq 'emphasis gnus-article-wash-types)))
-      (format "%c%c%c%c%c%c"
+    (let ((cite (gnus-article-hidden-text-p 'cite))
+         (headers (gnus-article-hidden-text-p 'headers))
+         (boring (gnus-article-hidden-text-p 'boring-headers))
+         (pgp (gnus-article-hidden-text-p 'pgp))
+         (pem (gnus-article-hidden-text-p 'pem))
+         (signature (gnus-article-hidden-text-p 'signature))
+         (overstrike (gnus-article-hidden-text-p 'overstrike))
+         (emphasis (gnus-article-hidden-text-p 'emphasis))
+         (mime gnus-show-mime))
+      (format "%c%c%c%c%c%c%c"
              (if cite ?c ? )
              (if (or headers boring) ?h ? )
              (if (or pgp pem) ?p ? )
              (if signature ?s ? )
              (if overstrike ?o ? )
+             (if mime ?m ? )
              (if emphasis ?e ? )))))
 
 (fset 'gnus-article-hide-headers-if-wanted 'gnus-article-maybe-hide-headers)
@@ -3261,18 +2186,16 @@ If ALL-HEADERS is non-nil, no headers are hidden."
 (defun gnus-article-maybe-hide-headers ()
   "Hide unwanted headers if `gnus-have-all-headers' is nil.
 Provided for backwards compatibility."
-  (when (and (or (not (gnus-buffer-live-p gnus-summary-buffer))
-                (not (save-excursion (set-buffer gnus-summary-buffer)
-                                     gnus-have-all-headers)))
-            (not gnus-inhibit-hiding))
-    (gnus-article-hide-headers)))
+  (or (save-excursion (set-buffer gnus-summary-buffer) gnus-have-all-headers)
+      gnus-inhibit-hiding
+      (gnus-article-hide-headers)))
 
 ;;; Article savers.
 
 (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.
@@ -3406,7 +2329,8 @@ Argument LINES specifies lines to be scrolled down."
 (defun gnus-article-describe-briefly ()
   "Describe article mode commands briefly."
   (interactive)
-  (gnus-message 6 (substitute-command-keys "\\<gnus-article-mode-map>\\[gnus-article-goto-next-page]:Next page  \\[gnus-article-goto-prev-page]:Prev page  \\[gnus-article-show-summary]:Show summary  \\[gnus-info-find-node]:Run Info  \\[gnus-article-describe-briefly]:This help")))
+  (gnus-message 6
+               (substitute-command-keys "\\<gnus-article-mode-map>\\[gnus-article-goto-next-page]:Next page     \\[gnus-article-goto-prev-page]:Prev page  \\[gnus-article-show-summary]:Show summary  \\[gnus-info-find-node]:Run Info  \\[gnus-article-describe-briefly]:This help")))
 
 (defun gnus-article-summary-command ()
   "Execute the last keystroke in the summary buffer."
@@ -3429,15 +2353,9 @@ Argument LINES specifies lines to be scrolled down."
     (setq func (lookup-key (current-local-map) (this-command-keys)))
     (call-interactively func)))
 
-(defun gnus-article-check-buffer ()
-  "Beep if not in an article buffer."
-  (unless (equal major-mode 'gnus-article-mode)
-    (error "Command invoked outside of a Gnus article buffer")))
-
 (defun gnus-article-read-summary-keys (&optional arg key not-restore-window)
   "Read a summary buffer key sequence and execute it from the article buffer."
   (interactive "P")
-  (gnus-article-check-buffer)
   (let ((nosaves
          '("q" "Q"  "c" "r" "R" "\C-c\C-f" "m"  "a" "f" "F"
            "Zc" "ZC" "ZE" "ZQ" "ZZ" "Zn" "ZR" "ZG" "ZN" "ZP"
@@ -3453,10 +2371,7 @@ Argument LINES specifies lines to be scrolled down."
       (set-buffer gnus-article-current-summary)
       (let (gnus-pick-mode)
         (push (or key last-command-event) unread-command-events)
-        (setq keys (if gnus-xemacs
-                      (events-to-keys (read-key-sequence nil))
-                    (read-key-sequence nil)))))
-                    
+        (setq keys (read-key-sequence nil))))
     (message "")
 
     (if (or (member keys nosaves)
@@ -3498,12 +2413,9 @@ Argument LINES specifies lines to be scrolled down."
           (set-buffer obuf)
           (unless not-restore-window
             (set-window-configuration owin))
-          (when (eq selected 'old)
-           (article-goto-body)
-            (set-window-start (get-buffer-window (current-buffer))
-                              1)
+          (unless (or (not (eq selected 'old)) (member keys up-to-top))
             (set-window-point (get-buffer-window (current-buffer))
-                              (point)))
+                              opoint))
           (let ((win (get-buffer-window gnus-article-current-summary)))
             (when win
               (set-window-point win new-sum-point))))))))
@@ -3602,15 +2514,6 @@ If given a prefix, show the hidden text instead."
                            (assq article gnus-newsgroup-reads)))
                     gnus-canceled-mark))
            nil)
-          ;; We first check `gnus-original-article-buffer'.
-          ((and (get-buffer gnus-original-article-buffer)
-                (numberp article)
-                (save-excursion
-                  (set-buffer gnus-original-article-buffer)
-                  (and (equal (car gnus-original-article) group)
-                       (eq (cdr gnus-original-article) article))))
-           (insert-buffer-substring gnus-original-article-buffer)
-           'article)
           ;; Check the backlog.
           ((and gnus-keep-backlog
                 (gnus-backlog-request-article group article (current-buffer)))
@@ -3656,18 +2559,13 @@ If given a prefix, show the hidden text instead."
          (if (get-buffer gnus-original-article-buffer)
              (set-buffer gnus-original-article-buffer)
            (set-buffer (gnus-get-buffer-create gnus-original-article-buffer))
-           (buffer-disable-undo)
+           (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)))
-
-       ;; Decode charsets.
-       (run-hooks 'gnus-article-decode-hook)
-       ;; Mark article as decoded or not.
-       (setq gnus-article-decoded-p gnus-article-decode-hook))
+         (setq gnus-original-article (cons group article))))
 
       ;; Update sparse articles.
       (when (and do-update-line
@@ -3690,14 +2588,18 @@ If given a prefix, show the hidden text instead."
   :group 'gnus-article-various
   :type 'hook)
 
+(defcustom gnus-article-edit-article-setup-function
+  'gnus-article-mime-edit-article-setup
+  "Function called to setup an editing article buffer."
+  :group 'gnus-article-various
+  :type 'function)
+
 (defvar gnus-article-edit-done-function nil)
 
 (defvar gnus-article-edit-mode-map nil)
 
-;; Should we be using derived.el for this?
 (unless gnus-article-edit-mode-map
-  (setq gnus-article-edit-mode-map (make-sparse-keymap))
-  (set-keymap-parent gnus-article-edit-mode-map text-mode-map)
+  (setq gnus-article-edit-mode-map (copy-keymap text-mode-map))
 
   (gnus-define-keys gnus-article-edit-mode-map
     "\C-c\C-c" gnus-article-edit-done
@@ -3734,22 +2636,23 @@ groups."
     (error "The current newsgroup does not support article editing"))
   (gnus-article-date-original)
   (gnus-article-edit-article
-   'ignore
    `(lambda (no-highlight)
-      'ignore
       (gnus-summary-edit-article-done
        ,(or (mail-header-references gnus-current-headers) "")
        ,(gnus-group-read-only-p) ,gnus-summary-buffer no-highlight))))
 
-(defun gnus-article-edit-article (start-func exit-func)
+(defun gnus-article-edit-article (exit-func)
   "Start editing the contents of the current article buffer."
   (let ((winconf (current-window-configuration)))
     (set-buffer gnus-article-buffer)
     (gnus-article-edit-mode)
-    (funcall start-func)
+    (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)
     (setq gnus-prev-winconf winconf)
+    (when gnus-article-edit-article-setup-function
+      (funcall gnus-article-edit-article-setup-function))
     (gnus-message 6 "C-c C-c to end edits")))
 
 (defun gnus-article-edit-done (&optional arg)
@@ -3758,7 +2661,8 @@ groups."
   (save-excursion
     (save-restriction
       (widen)
-      (when (article-goto-body)
+      (goto-char (point-min))
+      (when (search-forward "\n\n" nil 1)
        (let ((lines (count-lines (point) (point-max)))
              (length (- (point-max) (point)))
              (case-fold-search t)
@@ -3779,23 +2683,13 @@ groups."
   (let ((func gnus-article-edit-done-function)
        (buf (current-buffer))
        (start (window-start)))
+    (remove-hook 'gnus-article-mode-hook
+                'gnus-article-mime-edit-article-unwind)
     (gnus-article-edit-exit)
     (save-excursion
       (set-buffer buf)
       (let ((buffer-read-only nil))
-       (funcall func arg))
-      ;; The cache and backlog have to be flushed somewhat.
-      (when gnus-keep-backlog
-       (gnus-backlog-remove-article
-        (car gnus-article-current) (cdr gnus-article-current)))
-      ;; Flush original article as well.
-      (save-excursion
-       (when (get-buffer gnus-original-article-buffer)
-         (set-buffer gnus-original-article-buffer)
-         (setq gnus-original-article nil)))
-      (when gnus-use-cache
-       (gnus-cache-update-article
-        (car gnus-article-current) (cdr gnus-article-current))))
+       (funcall func arg)))
     (set-buffer buf)
     (set-window-start (get-buffer-window buf) start)
     (set-window-point (get-buffer-window buf) (point))))
@@ -3812,12 +2706,25 @@ groups."
     (insert buf)
     (let ((winconf gnus-prev-winconf))
       (gnus-article-mode)
+      ;; The cache and backlog have to be flushed somewhat.
+      (when gnus-use-cache
+       (gnus-cache-update-article
+        (car gnus-article-current) (cdr gnus-article-current)))
+      (when gnus-keep-backlog
+       (gnus-backlog-remove-article
+        (car gnus-article-current) (cdr gnus-article-current)))
+      ;; Flush original article as well.
+      (save-excursion
+       (when (get-buffer gnus-original-article-buffer)
+         (set-buffer gnus-original-article-buffer)
+         (setq gnus-original-article nil)))
       (set-window-configuration winconf)
       ;; Tippy-toe some to make sure that point remains where it was.
-      (save-current-buffer
+      (let ((buf (current-buffer)))
        (set-buffer curbuf)
        (set-window-start (get-buffer-window (current-buffer)) window-start)
-       (goto-char p)))))
+       (goto-char p)
+       (set-buffer buf)))))
 
 (defun gnus-article-edit-full-stops ()
   "Interactively repair spacing at end of sentences."
@@ -3829,6 +2736,86 @@ groups."
       (query-replace-regexp "\\([.!?][])}]* \\)\\([[({A-Z]\\)" "\\1 \\2"))))
 
 ;;;
+;;; Article editing with MIME-Edit
+;;;
+
+(defcustom gnus-article-mime-edit-article-setup-hook nil
+  "Hook run after setting up a MIME editing article buffer."
+  :group 'gnus-article-various
+  :type 'hook)
+
+(defun gnus-article-mime-edit-article-unwind ()
+  "Unwind `gnus-article-buffer' if article editing was given up."
+  (remove-hook 'gnus-article-mode-hook 'gnus-article-mime-edit-article-unwind)
+  (when mime-edit-mode-flag
+    (mime-edit-exit 'nomime 'no-error)
+    (message ""))
+  (when (featurep 'font-lock)
+    (setq font-lock-defaults nil)
+    (font-lock-mode 0)))
+
+(defun gnus-article-mime-edit-article-setup ()
+  "Convert current buffer to MIME-Edit buffer and turn on MIME-Edit mode
+after replacing with the original article."
+  (setq gnus-show-mime t)
+  (setq gnus-article-edit-done-function
+       `(lambda (&rest args)
+          (when mime-edit-mode-flag
+            (mime-edit-exit)
+            (message ""))
+          (goto-char (point-min))
+          (let (case-fold-search)
+            (when (re-search-forward
+                   (format "^%s$" (regexp-quote mail-header-separator))
+                   nil t)
+              (replace-match "")))
+          (when (featurep 'font-lock)
+            (setq font-lock-defaults nil)
+            (font-lock-mode 0))
+          (apply ,gnus-article-edit-done-function args)
+          (set-buffer gnus-original-article-buffer)
+          (erase-buffer)
+          (insert-buffer gnus-article-buffer)
+          (setq gnus-current-headers (gnus-article-make-full-mail-header))
+          (gnus-article-prepare-display)))
+  (define-key (current-local-map) "\C-c\C-k" 'gnus-article-mime-edit-exit)
+  (erase-buffer)
+  (insert-buffer gnus-original-article-buffer)
+  (mime-edit-again)
+  (when (featurep 'font-lock)
+    (set (make-local-variable 'font-lock-defaults)
+        '(message-font-lock-keywords t))
+    (font-lock-set-defaults)
+    (turn-on-font-lock))
+  (add-hook 'gnus-article-mode-hook 'gnus-article-mime-edit-article-unwind)
+  (gnus-run-hooks 'gnus-article-mime-edit-article-setup-hook))
+
+(defun gnus-article-mime-edit-exit ()
+  "Exit the article MIME editing without updating."
+  (interactive)
+  (let ((winconf gnus-prev-winconf)
+       buf)
+    (when mime-edit-mode-flag
+      (mime-edit-exit)
+      (message ""))
+    (goto-char (point-min))
+    (let (case-fold-search)
+      (when (re-search-forward
+            (format "^%s$" (regexp-quote mail-header-separator)) nil t)
+       (replace-match "")))
+    (when (featurep 'font-lock)
+      (setq font-lock-defaults nil)
+      (font-lock-mode 0))
+    ;; We remove all text props from the article buffer.
+    (setq buf (format "%s" (buffer-string)))
+    (set-buffer (get-buffer-create gnus-original-article-buffer))
+    (erase-buffer)
+    (insert buf)
+    (setq gnus-current-headers (gnus-article-make-full-mail-header))
+    (gnus-article-prepare-display)
+    (set-window-configuration winconf)))
+
+;;;
 ;;; Article highlights
 ;;;
 
@@ -3842,9 +2829,9 @@ groups."
   :type 'regexp)
 
 (defcustom gnus-button-alist
-  `(("<\\(url:[>\n\t ]*?\\)?news:[>\n\t ]*\\([^>\n\t ]*@[^>\n\t ]*\\)>"
-     0 t gnus-button-message-id 2)
-    ("\\bnews:\\([^>\n\t ]*@[^>)!;:,\n\t ]*\\)" 0 t gnus-button-message-id 1)
+  `(("<\\(url:[>\n\t ]*?\\)?news:[>\n\t ]*\\([^>\n\t ]*@[^>\n\t ]*\\)>" 0 t
+     gnus-button-message-id 2)
+    ("\\bnews:\\([^>\n\t ]*@[^>\n\t ]*\\)" 0 t gnus-button-message-id 1)
     ("\\(\\b<\\(url:[>\n\t ]*\\)?news:[>\n\t ]*\\(//\\)?\\([^>\n\t ]*\\)>\\)"
      1 t
      gnus-button-fetch-group 4)
@@ -3852,7 +2839,7 @@ groups."
     ("\\bin\\( +article\\| +message\\)? +\\(<\\([^\n @<>]+@[^\n @<>]+\\)>\\)" 2
      t gnus-button-message-id 3)
     ("\\(<URL: *\\)mailto: *\\([^> \n\t]+\\)>" 0 t gnus-url-mailto 2)
-    ("mailto:\\([-a-zA-Z.@_+0-9%]+\\)" 0 t gnus-url-mailto 1)
+    ("mailto:\\([a-zA-Z.-@_+0-9%]+\\)" 0 t gnus-url-mailto 1)
     ("\\bmailto:\\([^ \n\t]+\\)" 0 t gnus-url-mailto 1)
     ;; This is how URLs _should_ be embedded in text...
     ("<URL: *\\([^>]*\\)>" 0 t gnus-button-embedded-url 1)
@@ -3942,6 +2929,40 @@ call it with the value of the `gnus-data' text property."
     (when fun
       (funcall fun data))))
 
+(defun gnus-article-prev-button (n)
+  "Move point to N buttons backward.
+If N is negative, move forward instead."
+  (interactive "p")
+  (gnus-article-next-button (- n)))
+
+(defun gnus-article-next-button (n)
+  "Move point to N buttons forward.
+If N is negative, move backward instead."
+  (interactive "p")
+  (let ((function (if (< n 0) 'previous-single-property-change
+                   'next-single-property-change))
+       (inhibit-point-motion-hooks t)
+       (backward (< n 0))
+       (limit (if (< n 0) (point-min) (point-max))))
+    (setq n (abs n))
+    (while (and (not (= limit (point)))
+               (> n 0))
+      ;; Skip past the current button.
+      (when (get-text-property (point) 'gnus-callback)
+       (goto-char (funcall function (point) 'gnus-callback nil limit)))
+      ;; Go to the next (or previous) button.
+      (gnus-goto-char (funcall function (point) 'gnus-callback nil limit))
+      ;; Put point at the start of the button.
+      (when (and backward (not (get-text-property (point) 'gnus-callback)))
+       (goto-char (funcall function (point) 'gnus-callback nil limit)))
+      ;; Skip past intangible buttons.
+      (when (get-text-property (point) 'intangible)
+       (incf n))
+      (decf n))
+    (unless (zerop n)
+      (gnus-message 5 "No more buttons"))
+    n))
+
 (defun gnus-article-highlight (&optional force)
   "Highlight current article.
 This function calls `gnus-article-highlight-headers',
@@ -3976,7 +2997,7 @@ do the highlighting.  See the documentation for those functions."
            (case-fold-search t)
            (inhibit-point-motion-hooks t)
            entry regexp header-face field-face from hpoints fpoints)
-       (article-narrow-to-head)
+       (message-narrow-to-head)
        (while (setq entry (pop alist))
          (goto-char (point-min))
          (setq regexp (concat "^\\("
@@ -4051,7 +3072,9 @@ specified by `gnus-button-alist'."
                               'gnus-callback nil))
          (set-marker marker nil)))
       ;; We skip the headers.
-      (article-goto-body)
+      (goto-char (point-min))
+      (unless (search-forward "\n\n" nil t)
+       (goto-char (point-max)))
       (setq beg (point))
       (while (setq entry (pop alist))
        (setq regexp (car entry))
@@ -4077,38 +3100,38 @@ specified by `gnus-button-alist'."
   (interactive)
   (save-excursion
     (set-buffer gnus-article-buffer)
-    (save-restriction
-      (let ((buffer-read-only nil)
-           (inhibit-point-motion-hooks t)
-           (case-fold-search t)
-           (alist gnus-header-button-alist)
-           entry beg end)
-       (article-narrow-to-head)
-       (while alist
-         ;; Each alist entry.
-         (setq entry (car alist)
-               alist (cdr alist))
-         (goto-char (point-min))
-         (while (re-search-forward (car entry) nil t)
-           ;; Each header matching the entry.
-           (setq beg (match-beginning 0))
-           (setq end (or (and (re-search-forward "^[^ \t]" nil t)
-                              (match-beginning 0))
-                         (point-max)))
-           (goto-char beg)
-           (while (re-search-forward (nth 1 entry) end t)
-             ;; Each match within a header.
-             (let* ((entry (cdr entry))
-                    (start (match-beginning (nth 1 entry)))
-                    (end (match-end (nth 1 entry)))
-                    (form (nth 2 entry)))
-               (goto-char (match-end 0))
-               (when (eval form)
-                 (gnus-article-add-button
-                  start end (nth 3 entry)
-                  (buffer-substring (match-beginning (nth 4 entry))
-                                    (match-end (nth 4 entry)))))))
-           (goto-char end)))))))
+    (let ((buffer-read-only nil)
+         (inhibit-point-motion-hooks t)
+         (case-fold-search t)
+         (alist gnus-header-button-alist)
+         entry beg end)
+      (nnheader-narrow-to-headers)
+      (while alist
+       ;; Each alist entry.
+       (setq entry (car alist)
+             alist (cdr alist))
+       (goto-char (point-min))
+       (while (re-search-forward (car entry) nil t)
+         ;; Each header matching the entry.
+         (setq beg (match-beginning 0))
+         (setq end (or (and (re-search-forward "^[^ \t]" nil t)
+                            (match-beginning 0))
+                       (point-max)))
+         (goto-char beg)
+         (while (re-search-forward (nth 1 entry) end t)
+           ;; Each match within a header.
+           (let* ((entry (cdr entry))
+                  (start (match-beginning (nth 1 entry)))
+                  (end (match-end (nth 1 entry)))
+                  (form (nth 2 entry)))
+             (goto-char (match-end 0))
+             (when (eval form)
+               (gnus-article-add-button
+                start end (nth 3 entry)
+                (buffer-substring (match-beginning (nth 4 entry))
+                                  (match-end (nth 4 entry)))))))
+         (goto-char end))))
+    (widen)))
 
 ;;; External functions:
 
@@ -4122,9 +3145,7 @@ specified by `gnus-button-alist'."
    (nconc (and gnus-article-mouse-face
               (list gnus-mouse-face-prop gnus-article-mouse-face))
          (list 'gnus-callback fun)
-         (and data (list 'gnus-data data))))
-  (widget-convert-button 'link from to :action 'gnus-widget-press-button
-                        :button-keymap gnus-widget-button-keymap))
+         (and data (list 'gnus-data data)))))
 
 ;;; Internal functions:
 
@@ -4156,6 +3177,7 @@ specified by `gnus-button-alist'."
 (defun gnus-button-push (marker)
   ;; Push button starting at MARKER.
   (save-excursion
+    (set-buffer gnus-article-buffer)
     (goto-char marker)
     (let* ((entry (gnus-button-entry))
           (inhibit-point-motion-hooks t)
@@ -4200,7 +3222,7 @@ specified by `gnus-button-alist'."
 
 (defun gnus-url-parse-query-string (query &optional downcase)
   (let (retval pairs cur key val)
-    (setq pairs (split-string query "&"))
+    (setq pairs (gnus-split-string query "&"))
     (while pairs
       (setq cur (car pairs)
             pairs (cdr pairs))
@@ -4260,26 +3282,29 @@ forbidden in URL encoding."
       (setq to (gnus-url-unhex-string url)))
     (setq args (cons (list "to" to) args)
           subject (cdr-safe (assoc "subject" args)))
-    (message-mail)
-    (while args
-      (setq func (intern-soft (concat "message-goto-" (downcase (caar args)))))
-      (if (fboundp func)
-          (funcall func)
-        (message-position-on-field (caar args)))
-      (insert (mapconcat 'identity (cdar args) ", "))
-      (setq args (cdr args)))
-    (if subject
-        (message-goto-body)
-      (message-goto-subject))))
+    (gnus-setup-message 'reply
+      (message-mail)
+      (while args
+       (setq func (intern-soft (concat "message-goto-" (downcase (caar args)))))
+       (if (fboundp func)
+           (funcall func)
+         (message-position-on-field (caar args)))
+       (insert (mapconcat 'identity (cdar args) ", "))
+       (setq args (cdr args)))
+      (if subject
+         (message-goto-body)
+       (message-goto-subject)))))
 
 (defun gnus-button-mailto (address)
   ;; Mail to ADDRESS.
   (set-buffer (gnus-copy-article-buffer))
-  (message-reply address))
+  (gnus-setup-message 'reply
+    (message-reply address)))
 
 (defun gnus-button-reply (address)
   ;; Reply to ADDRESS.
-  (message-reply address))
+  (gnus-setup-message 'reply
+    (message-reply address)))
 
 (defun gnus-button-url (address)
   "Browse ADDRESS."
@@ -4312,7 +3337,7 @@ forbidden in URL encoding."
      gnus-prev-page-line-format nil
      `(gnus-prev t local-map ,gnus-prev-page-map
                 gnus-callback gnus-article-button-prev-page
-                article-type annotation))))
+                gnus-type annotation))))
 
 (defvar gnus-next-page-map nil)
 (unless gnus-next-page-map
@@ -4343,7 +3368,7 @@ forbidden in URL encoding."
                      `(gnus-next
                        t local-map ,gnus-next-page-map
                        gnus-callback gnus-article-button-next-page
-                       article-type annotation))))
+                       gnus-type annotation))))
 
 (defun gnus-article-button-next-page (arg)
   "Go to the next page."
@@ -4361,112 +3386,44 @@ forbidden in URL encoding."
     (gnus-article-prev-page)
     (select-window win)))
 
-(defvar gnus-decode-header-methods
-  '(mail-decode-encoded-word-region)
-  "List of methods used to decode headers.
-
-This variable is a list of FUNCTION or (REGEXP . FUNCTION). If item is
-FUNCTION, FUNCTION will be apply to all newsgroups. If item is a
-(REGEXP . FUNCTION), FUNCTION will be only apply to thes newsgroups
-whose names match REGEXP.
-
-For example:
-((\"chinese\" . gnus-decode-encoded-word-region-by-guess)
- mail-decode-encoded-word-region
- (\"chinese\" . rfc1843-decode-region))
-")
-
-(defvar gnus-decode-header-methods-cache nil)
-
-(defun gnus-multi-decode-header (start end)
-  "Apply the functions from `gnus-encoded-word-methods' that match."
-  (unless (and gnus-decode-header-methods-cache
-              (eq gnus-newsgroup-name
-                  (car gnus-decode-header-methods-cache)))
-    (setq gnus-decode-header-methods-cache (list gnus-newsgroup-name))
-    (mapc '(lambda (x)
-            (if (symbolp x)
-                (nconc gnus-decode-header-methods-cache (list x))
-              (if (and gnus-newsgroup-name
-                       (string-match (car x) gnus-newsgroup-name))
-                  (nconc gnus-decode-header-methods-cache
-                         (list (cdr x))))))
-         gnus-decode-header-methods))
-  (let ((xlist gnus-decode-header-methods-cache))
-    (pop xlist)
-    (save-restriction
-      (narrow-to-region start end)
-      (while xlist
-       (funcall (pop xlist) (point-min) (point-max))))))
 
-;;;
-;;; Treatment top-level handling.
+;;; @ for mime-view
 ;;;
 
-(defun gnus-treat-article (condition &optional part-number total-parts type)
-  (let ((length (- (point-max) (point-min)))
-       (alist gnus-treatment-function-alist)
-       (article-goto-body-goes-to-point-min-p t)
-       (treated-type
-        (or (not type)
-            (catch 'found
-              (let ((list gnus-article-treat-types))
-                (while list
-                  (when (string-match (pop list) type)
-                    (throw 'found t)))))))
-       (highlightp (gnus-visual-p 'article-highlight 'highlight))
-       val elem)
-    (gnus-run-hooks 'gnus-part-display-hook)
-    (while (setq elem (pop alist))
-      (setq val (symbol-value (car elem)))
-      (when (and (or (consp val)
-                    treated-type)
-                (gnus-treat-predicate val)
-                (or (not (get (car elem) 'highlight))
-                    highlightp))
-       (save-restriction
-         (funcall (cadr elem)))))))
-
-;; Dynamic variables.
-(defvar part-number)
-(defvar total-parts)
-(defvar type)
-(defvar condition)
-(defvar length)
-(defun gnus-treat-predicate (val)
-  (cond
-   (condition
-    (eq condition val))
-   ((null val)
-    nil)
-   ((eq val t)
-    t)
-   ((eq val 'head)
-    nil)
-   ((eq val 'last)
-    (eq part-number total-parts))
-   ((numberp val)
-    (< length val))
-   ((and (listp val)
-        (stringp (car val)))
-    (apply 'gnus-or (mapcar `(lambda (s)
-                              (string-match s ,(or gnus-newsgroup-name "")))
-                           val)))
-   ((listp val)
-    (let ((pred (pop val)))
-      (cond
-       ((eq pred 'or)
-       (apply 'gnus-or (mapcar 'gnus-treat-predicate val)))
-       ((eq pred 'and)
-       (apply 'gnus-and (mapcar 'gnus-treat-predicate val)))
-       ((eq pred 'not)
-       (not (gnus-treat-predicate val)))
-       ((eq pred 'typep)
-       (equal (cadr val) type))
-       (t
-       (error "%S is not a valid predicate" pred)))))
-   (t
-    (error "%S is not a valid value" val))))
+(defun gnus-article-header-presentation-method (entity situation)
+  (mime-insert-decoded-header entity)
+  )
+
+(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-preview-quitting-method-alist
+          'gnus-original-article-mode #'gnus-mime-preview-quitting-method)
+
+(defun gnus-following-method (buf)
+  (set-buffer buf)
+  (message-followup)
+  (message-yank-original)
+  (kill-buffer buf)
+  (goto-char (point-min))
+  )
+
+(set-alist 'mime-preview-following-method-alist
+          'gnus-original-article-mode #'gnus-following-method)
+
+
+;;; @ end
+;;;
 
 (gnus-ems-redefine)
 
index 6cfc152..870192f 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-async.el --- asynchronous support for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -77,9 +77,7 @@ It should return non-nil if the article is to be prefetched."
 (defvar gnus-async-article-alist nil)
 (defvar gnus-async-article-semaphore '(nil))
 (defvar gnus-async-fetch-list nil)
-(defvar gnus-async-hashtb nil)
-(defvar gnus-async-current-prefetch-group nil)
-(defvar gnus-async-current-prefetch-article nil)
+(defvar gnus-asynch-obarray nil)
 
 (defvar gnus-async-prefetch-headers-buffer " *Async Prefetch Headers*")
 (defvar gnus-async-header-prefetched nil)
@@ -108,8 +106,8 @@ It should return non-nil if the article is to be prefetched."
         ,@forms)
      (gnus-async-release-semaphore 'gnus-async-article-semaphore)))
 
-(put 'gnus-async-with-semaphore 'lisp-indent-function 0)
-(put 'gnus-async-with-semaphore 'edebug-form-spec '(body))
+(put 'gnus-asynch-with-semaphore 'lisp-indent-function 0)
+(put 'gnus-asynch-with-semaphore 'edebug-form-spec '(body))
 
 ;;;
 ;;; Article prefetch
@@ -119,14 +117,14 @@ It should return non-nil if the article is to be prefetched."
 (defun gnus-async-close ()
   (gnus-kill-buffer gnus-async-prefetch-article-buffer)
   (gnus-kill-buffer gnus-async-prefetch-headers-buffer)
-  (setq gnus-async-hashtb nil
-       gnus-async-article-alist nil
+  (setq gnus-async-article-alist nil
        gnus-async-header-prefetched nil))
 
 (defun gnus-async-set-buffer ()
   (nnheader-set-temp-buffer gnus-async-prefetch-article-buffer t)
-  (unless gnus-async-hashtb
-    (setq gnus-async-hashtb (gnus-make-hashtable 1023))))
+  (unless gnus-asynch-obarray
+    (set (make-local-variable 'gnus-asynch-obarray)
+        (gnus-make-hashtable 1023))))
 
 (defun gnus-async-halt-prefetch ()
   "Stop prefetching."
@@ -206,33 +204,26 @@ It should return non-nil if the article is to be prefetched."
                  (when do-message
                    (gnus-message 9 "Prefetching article %d in group %s"
                                  article group))
-                 (setq gnus-async-current-prefetch-group group)
-                 (setq gnus-async-current-prefetch-article article)
                  (gnus-request-article article group))))))))))
 
 (defun gnus-make-async-article-function (group article mark summary next)
   "Return a callback function."
   `(lambda (arg)
-     (gnus-async-article-callback arg ,group ,article ,mark ,summary ,next)))
-
-(defun gnus-async-article-callback (arg group article mark summary next)
-  "Function called when an async article is done being fetched."
-  (save-excursion
-    (setq gnus-async-current-prefetch-article nil)
-    (when arg
-      (gnus-async-set-buffer)
-      (gnus-async-with-semaphore
-       (setq
-       gnus-async-article-alist
-       (cons (list (intern (format "%s-%d" group article)
-                           gnus-async-hashtb)
-                   mark (set-marker (make-marker) (point-max))
-                   group article)
-             gnus-async-article-alist))))
-    (if (not (gnus-buffer-live-p summary))
-       (gnus-async-with-semaphore
-        (setq gnus-async-fetch-list nil))
-      (gnus-async-prefetch-article group next summary t))))
+     (save-excursion
+       (when arg
+        (gnus-async-set-buffer)
+        (gnus-async-with-semaphore
+         (setq
+          gnus-async-article-alist
+          (cons (list ',(intern (format "%s-%d" group article)
+                                gnus-asynch-obarray)
+                      ,mark (set-marker (make-marker) (point-max))
+                      ,group ,article)
+                gnus-async-article-alist))))
+       (if (not (gnus-buffer-live-p ,summary))
+          (gnus-async-with-semaphore
+           (setq gnus-async-fetch-list nil))
+        (gnus-async-prefetch-article ,group ,next ,summary t)))))
 
 (defun gnus-async-unread-p (data)
   "Return non-nil if DATA represents an unread article."
@@ -241,9 +232,6 @@ It should return non-nil if the article is to be prefetched."
 (defun gnus-async-request-fetched-article (group article buffer)
   "See whether we have ARTICLE from GROUP and put it in BUFFER."
   (when (numberp article)
-    (when (and (equal group gnus-async-current-prefetch-group)
-              (eq article gnus-async-current-prefetch-article))
-      (gnus-async-wait-for-article article))
     (let ((entry (gnus-async-prefetched-article-entry group article)))
       (when entry
        (save-excursion
@@ -251,40 +239,10 @@ It should return non-nil if the article is to be prefetched."
          (copy-to-buffer buffer (cadr entry) (caddr entry))
          ;; Remove the read article from the prefetch buffer.
          (when (memq 'read gnus-prefetched-article-deletion-strategy)
-           (gnus-async-delete-prefetched-entry entry))
+           (gnus-async-delete-prefected-entry entry))
          t)))))
 
-(defun gnus-async-wait-for-article (article)
-  "Wait until ARTICLE is no longer the currently-being-fetched article."
-  (save-excursion
-    (gnus-async-set-buffer)
-    (let ((proc (nntp-find-connection (current-buffer)))
-         (nntp-server-buffer (current-buffer))
-         (nntp-have-messaged nil)
-         (tries 0))
-      (condition-case nil
-         ;; FIXME: we could stop waiting after some
-         ;; timeout, but this is the wrong place to do it.
-         ;; rather than checking time-spent-waiting, we
-         ;; should check time-since-last-output, which
-         ;; needs to be done in nntp.el.
-         (while (eq article gnus-async-current-prefetch-article)
-           (incf tries)
-           (when (nntp-accept-process-output proc 1)
-             (setq tries 0))
-           (when (and (not nntp-have-messaged) (eq 3 tries))
-             (gnus-message 5 "Waiting for async article...")
-             (setq nntp-have-messaged t)))
-       (quit
-        ;; if the user interrupted on a slow/hung connection,
-        ;; do something friendly.
-        (when (< 3 tries)
-          (setq gnus-async-current-prefetch-article nil))
-        (signal 'quit nil)))
-      (when nntp-have-messaged
-       (gnus-message 5 "")))))
-
-(defun gnus-async-delete-prefetched-entry (entry)
+(defun gnus-async-delete-prefected-entry (entry)
   "Delete ENTRY from buffer and alist."
   (ignore-errors
     (delete-region (cadr entry) (caddr entry))
@@ -303,7 +261,7 @@ It should return non-nil if the article is to be prefetched."
        (gnus-async-set-buffer)
        (while alist
          (when (equal group (nth 3 (car alist)))
-           (gnus-async-delete-prefetched-entry (car alist)))
+           (gnus-async-delete-prefected-entry (car alist)))
          (pop alist))))))
 
 (defun gnus-async-prefetched-article-entry (group article)
@@ -311,7 +269,7 @@ It should return non-nil if the article is to be prefetched."
   (let ((entry (save-excursion
                 (gnus-async-set-buffer)
                 (assq (intern (format "%s-%d" group article)
-                              gnus-async-hashtb)
+                              gnus-asynch-obarray)
                       gnus-async-article-alist))))
     ;; Perhaps something has emptied the buffer?
     (if (and entry
diff --git a/lisp/gnus-bbdb.el b/lisp/gnus-bbdb.el
new file mode 100644 (file)
index 0000000..10b1acc
--- /dev/null
@@ -0,0 +1,581 @@
+;; gnus-bbdb.el --- Interface to Semi-gnus.
+
+;; Copyright (c) 1991,1992,1993 Jamie Zawinski <jwz@netscape.com>.
+;; Copyright (C) 1995,1996,1997 Shuhei KOBAYASHI
+;; Copyright (C) 1997,1998 MORIOKA Tomohiko
+;; Copyright (C) 1998 Keiichi Suzuki <kei-suzu@mail.wbs.ne.jp>
+
+;; Author: Keiichi Suzuki <kei-suzu@mail.wbs.ne.jp>
+;; Author: Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
+;; Keywords: BBDB, MIME, multimedia, multilingual, mail, news
+
+;; This file is part of Semi-gnus.
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2, or (at
+;; your option) any later version.
+
+;; This program is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with 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:
+
+(require 'bbdb)
+(require 'gnus)
+(require 'std11)
+(eval-when-compile
+  (require 'gnus-win))
+
+(defvar gnus-bbdb/decode-field-body-function 'eword-decode-string
+  "*Field body decoder.")
+
+(defmacro gnus-bbdb/decode-field-body (field-body field-name)
+  `(or (and (functionp gnus-bbdb/decode-field-body-function)
+           (funcall gnus-bbdb/decode-field-body-function
+                    ,field-body))
+       ,field-body))
+
+;;;###autoload
+(defun gnus-bbdb/update-record (&optional offer-to-create)
+  "returns the record corresponding to the current GNUS message, creating 
+or modifying it as necessary.  A record will be created if 
+bbdb/news-auto-create-p is non-nil, or if OFFER-TO-CREATE is true and
+the user confirms the creation."
+  (if bbdb-use-pop-up
+      (gnus-bbdb/pop-up-bbdb-buffer offer-to-create)
+    (save-excursion
+      (save-restriction
+       (let (from)
+         (set-buffer gnus-original-article-buffer)
+         (widen)
+         (narrow-to-region (point-min)
+                           (progn (goto-char (point-min))
+                                  (or (search-forward "\n\n" nil t)
+                                      (error "message unexists"))
+                                  (- (point) 2)))
+         (when (setq from (mail-fetch-field "from"))
+           (setq from (gnus-bbdb/extract-address-components
+                       (gnus-bbdb/decode-field-body from 'From))))
+         (when (and (car (cdr from))
+                    (string-match (bbdb-user-mail-names)
+                                  (car (cdr from))))
+           ;; if logged-in user sent this, use recipients.
+           (let ((to (mail-fetch-field "to")))
+             (when to
+               (setq from
+                     (gnus-bbdb/extract-address-components
+                      (gnus-bbdb/decode-field-body to 'To))))))
+       (when from
+         (bbdb-annotate-message-sender from t
+                                       (or (bbdb-invoke-hook-for-value
+                                            bbdb/news-auto-create-p)
+                                           offer-to-create)
+                                       offer-to-create)))))))
+
+;;;###autoload
+(defun gnus-bbdb/annotate-sender (string &optional replace)
+  "Add a line to the end of the Notes field of the BBDB record 
+corresponding to the sender of this message.  If REPLACE is non-nil,
+replace the existing notes entry (if any)."
+  (interactive (list (if bbdb-readonly-p
+                        (error "The Insidious Big Brother Database is read-only.")
+                        (read-string "Comments: "))))
+  (bbdb-annotate-notes (gnus-bbdb/update-record t) string 'notes replace))
+
+(defun gnus-bbdb/edit-notes (&optional arg)
+  "Edit the notes field or (with a prefix arg) a user-defined field
+of the BBDB record corresponding to the sender of this message."
+  (interactive "P")
+  (let ((record (or (gnus-bbdb/update-record t) (error ""))))
+    (bbdb-display-records (list record))
+    (if arg
+       (bbdb-record-edit-property record nil t)
+      (bbdb-record-edit-notes record t))))
+
+;;;###autoload
+(defun gnus-bbdb/show-sender ()
+  "Display the contents of the BBDB for the sender of this message.
+This buffer will be in bbdb-mode, with associated keybindings."
+  (interactive)
+  (let ((record (gnus-bbdb/update-record t)))
+    (if record
+       (bbdb-display-records (list record))
+       (error "unperson"))))
+
+
+(defun gnus-bbdb/pop-up-bbdb-buffer (&optional offer-to-create)
+  "Make the *BBDB* buffer be displayed along with the GNUS windows,
+displaying the record corresponding to the sender of the current message."
+  (let ((bbdb-gag-messages t)
+       (bbdb-use-pop-up nil)
+       (bbdb-electric-p nil))
+    (let ((record (gnus-bbdb/update-record offer-to-create))
+         (bbdb-elided-display (bbdb-pop-up-elided-display))
+         (b (current-buffer)))
+      ;; display the bbdb buffer iff there is a record for this article.
+      (cond (record
+            (bbdb-pop-up-bbdb-buffer
+             (function (lambda (w)
+                         (let ((b (current-buffer)))
+                           (set-buffer (window-buffer w))
+                           (prog1 (or (eq major-mode 'mime-veiw-mode)
+                                      (eq major-mode 'gnus-article-mode))
+                                  (set-buffer b))))))
+            (bbdb-display-records (list record)))
+           (t
+            (or bbdb-inside-electric-display
+                (not (get-buffer-window bbdb-buffer-name))
+                (let (w)
+                  (delete-other-windows)
+                  (if (assq 'article gnus-buffer-configuration)
+                      (gnus-configure-windows 'article)
+                    (gnus-configure-windows 'SelectArticle))
+                  (if (setq w (get-buffer-window gnus-summary-buffer))
+                      (select-window w))
+                  ))))
+      (set-buffer b)
+      record)))
+
+;;
+;; Announcing BBDB entries in the summary buffer
+;;
+
+(defcustom gnus-bbdb/lines-and-from-length 18
+  "*The number of characters used to display From: info in Gnus, if you have
+set gnus-optional-headers to 'gnus-bbdb/lines-and-from."
+  :group 'bbdb-mua-specific-gnus
+  :type 'integer)
+
+(defcustom gnus-bbdb/summary-mark-known-posters t
+  "*If t, mark messages created by people with records in the BBDB.
+In GNUS, this marking will take place in the subject list (assuming
+`gnus-optional-headers' contains `gnus-bbdb/lines-and-from').  In Gnus, the
+marking will take place in the Summary buffer if the format code defined by
+`gnus-bbdb/summary-user-format-letter' is used in `gnus-summary-line-format'.
+This variable has no effect on the marking controlled by
+`gnus-bbdb/summary-in-bbdb-format-letter'."
+  :group 'bbdb-mua-specific-gnus
+  :type '(choice (const :tag "Mark known posters" t)
+                (const :tag "Do not mark known posters" nil)))
+(defvaralias 'gnus-bbdb/mark-known-posters
+  'gnus-bbdb/summary-mark-known-posters)
+
+(defcustom gnus-bbdb/summary-known-poster-mark "+"
+  "This is the default character to prefix author names with if
+gnus-bbdb/summary-mark-known-posters is t.  If the poster's record has
+an entry in the field named by bbdb-message-marker-field, then that will
+be used instead."
+  :group 'bbdb-mua-specific-gnus
+  :type 'character)
+
+(defcustom gnus-bbdb/summary-show-bbdb-names t
+  "*If both this variable and `gnus-bbdb/summary-prefer-real-names' are true,
+then for messages from authors who are in your database, the name
+displayed will be the primary name in the database, rather than the
+one in the From line of the message.  This doesn't affect the names of
+people who aren't in the database, of course.  (`gnus-optional-headers'
+must be `gnus-bbdb/lines-and-from' for GNUS users.)"
+  :group 'bbdb-mua-specific-gnus
+  :type 'boolean)
+(defvaralias 'gnus-bbdb/header-show-bbdb-names
+  'gnus-bbdb/summary-show-bbdb-names)
+
+(defcustom gnus-bbdb/summary-prefer-bbdb-data t
+  "If t, then for posters who are in our BBDB, replace the information
+provided in the From header with data from the BBDB."
+  :group 'bbdb-mua-specific-gnus
+  :type 'boolean)
+
+(defcustom gnus-bbdb/summary-prefer-real-names t
+  "If t, then display the poster's name from the BBDB if we have one,
+otherwise display his/her primary net address if we have one.  If it
+is set to the symbol bbdb, then real names will be used from the BBDB
+if present, otherwise the net address in the post will be used.  If
+gnus-bbdb/summary-prefer-bbdb-data is nil, then this has no effect.
+See `gnus-bbdb/lines-and-from' for GNUS users, or
+`gnus-bbdb/summary-user-format-letter' for Gnus users."
+  :group 'bbdb-mua-specific-gnus
+  :type '(choice (const :tag "Prefer real names" t)
+                (const :tag "Prefer network addresses" nil)))
+(defvaralias 'gnus-bbdb/header-prefer-real-names
+  'gnus-bbdb/summary-prefer-real-names)
+
+(defcustom gnus-bbdb/summary-user-format-letter "B"
+  "This is the gnus-user-format-function- that will be used to insert
+the information from the BBDB in the summary buffer (using
+`gnus-bbdb/summary-get-author').  This format code is meant to replace
+codes that insert sender names or addresses (like %A or %n). Unless
+you've alread got other code using user format B, you might as well
+stick with the default.  Additionally, if the value of this variable
+is nil, no format function will be installed for
+`gnus-bbdb/summary-get-author'.  See also
+`gnus-bbdb/summary-in-bbdb-format-letter', which installs a format
+code for `gnus-bbdb/summary-author-in-bbdb'"
+  :group 'bbdb-mua-specific-gnus
+  :type 'character)
+
+(defcustom gnus-bbdb/summary-in-bbdb-format-letter "b"
+  "This is the gnus-user-format-function- that will be used to insert
+`gnus-bbdb/summary-known-poster-mark' (using
+`gnus-bbdb/summary-author-in-bbdb') if the poster is in the BBDB, and
+\" \" if not.  If the value of this variable is nil, no format code
+will be installed for `gnus-bbdb/summary-author-in-bbdb'.  See also
+`gnus-bbdb/summary-user-format-letter', which installs a format code
+for `gnus-bbdb/summary-get-author'."
+  :group 'bbdb-mua-specific-gnus
+  :type 'character)
+
+(defcustom bbdb-message-marker-field 'mark-char
+  "*The field whose value will be used to mark messages by this user in Gnus."
+  :group 'bbdb-mua-specific-gnus
+  :type 'symbol)
+
+;;;###autoload
+(defun gnus-bbdb/lines-and-from (header)
+  "Useful as the value of gnus-optional-headers in *GNUS* (not Gnus).
+NOTE: This variable no longer seems to be present in Gnus.  It seems
+to have been replaced by `message-default-headers', which only takes
+strings.  In the future this should change."
+  (let* ((length gnus-bbdb/lines-and-from-length)
+        (lines (mail-header-lines header))
+        (from (mail-header-from header))
+        (data (and (or gnus-bbdb/summary-mark-known-posters
+                       gnus-bbdb/summary-show-bbdb-names)
+                   (condition-case ()
+                       (gnus-bbdb/extract-address-components from)
+                     (error nil))))
+        (name (car data))
+        (net (car (cdr data)))
+        (record (and data 
+                     (bbdb-search-simple name 
+                      (if (and net bbdb-canonicalize-net-hook)
+                          (bbdb-canonicalize-address net)
+                        net))))
+        string L)
+
+    (if (and record name (member (downcase name) (bbdb-record-net record)))
+       ;; bogon!
+       (setq record nil))
+
+    (setq name 
+         (or (and gnus-bbdb/summary-prefer-bbdb-data
+                  (or (and gnus-bbdb/summary-prefer-real-names
+                           (and record (bbdb-record-name record)))
+                      (and record (bbdb-record-net record)
+                           (nth 0 (bbdb-record-net record)))))
+             (and gnus-bbdb/summary-prefer-real-names
+                  (or (and (equal gnus-bbdb/summary-prefer-real-names 'bbdb)
+                           net)
+                      name))
+             net from "**UNKNOWN**"))
+      ;; GNUS can't cope with extra square-brackets appearing in the summary.
+      (if (and name (string-match "[][]" name))
+         (progn (setq name (copy-sequence name))
+                (while (string-match "[][]" name)
+                  (aset name (match-beginning 0) ? ))))
+      (setq string (format "%s%3d:%s"
+                          (if (and record gnus-bbdb/summary-mark-known-posters)
+                              (or (bbdb-record-getprop
+                                   record bbdb-message-marker-field)
+                                  "*")
+                            " ")
+                          lines (or name from))
+           L (length string))
+      (cond ((> L length) (substring string 0 length))
+           ((< L length) (concat string (make-string (- length L) ? )))
+           (t string))))
+
+(defun gnus-bbdb/summary-get-author (header)
+  "Given a Gnus message header, returns the appropriate piece of
+information to identify the author in a Gnus summary line, depending on
+the settings of the various configuration variables.  See the
+documentation for the following variables for more details:
+  `gnus-bbdb/summary-mark-known-posters'
+  `gnus-bbdb/summary-known-poster-mark'
+  `gnus-bbdb/summary-prefer-bbdb-data'
+  `gnus-bbdb/summary-prefer-real-names'
+This function is meant to be used with the user function defined in
+  `gnus-bbdb/summary-user-format-letter'"
+  (let* ((from (mail-header-from header))
+        (data (and gnus-bbdb/summary-show-bbdb-names
+                   (condition-case ()
+                       (gnus-bbdb/extract-address-components from)
+                     (error nil))))
+        (name (car data))
+        (net (car (cdr data)))
+        (record (and data 
+                     (bbdb-search-simple name 
+                      (if (and net bbdb-canonicalize-net-hook)
+                          (bbdb-canonicalize-address net)
+                        net)))))
+    (if (and record name (member (downcase name) (bbdb-record-net record)))
+       ;; bogon!
+       (setq record nil))
+    (setq name 
+         (or (and gnus-bbdb/summary-prefer-bbdb-data
+                  (or (and gnus-bbdb/summary-prefer-real-names
+                           (and record (bbdb-record-name record)))
+                      (and record (bbdb-record-net record)
+                           (nth 0 (bbdb-record-net record)))))
+             (and gnus-bbdb/summary-prefer-real-names
+                  (or (and (equal gnus-bbdb/summary-prefer-real-names 'bbdb)
+                           net)
+                      name))
+             net from "**UNKNOWN**"))
+    (format "%s%s"
+           (or (and record gnus-bbdb/summary-mark-known-posters
+                    (or (bbdb-record-getprop
+                         record bbdb-message-marker-field)
+                        gnus-bbdb/summary-known-poster-mark))
+               " ")
+           name)))
+
+;; DEBUG: (gnus-bbdb/summary-author-in-bbdb "From: simmonmt@acm.org")
+(defun gnus-bbdb/summary-author-in-bbdb (header)
+  "Given a Gnus message header, returns a mark if the poster is in the BBDB, \" \" otherwise.  The mark itself is the value of the field indicated by `bbdb-message-marker-field' (`mark-char' by default) if the indicated field is in the poster's record, and `gnus-bbdb/summary-known-poster-mark' otherwise."
+  (let* ((from (mail-header-from header))
+        (data (condition-case ()
+                  (gnus-bbdb/extract-address-components from)
+                (error nil)))
+        (name (car data))
+        (net (cadr data))
+        record)
+    (if (and data
+            (setq record
+                  (bbdb-search-simple
+                   name (if (and net bbdb-canonicalize-net-hook)
+                            (bbdb-canonicalize-address net)
+                          net))))
+       (or (bbdb-record-getprop
+            record bbdb-message-marker-field)
+           gnus-bbdb/summary-known-poster-mark) " ")))
+
+;;
+;; Scoring
+;;
+
+(defcustom gnus-bbdb/score-field 'gnus-score
+  "This variable contains the name of the BBDB field which should be
+checked for a score to add to the net addresses in the same record."
+  :group 'bbdb-mua-specific-gnus-scoring
+  :type 'symbol)
+
+(defcustom gnus-bbdb/score-default nil
+  "If this is set, then every net address in the BBDB that does not have
+an associated score field will be assigned this score.  A value of nil
+implies a default score of zero."
+  :group 'bbdb-mua-specific-gnus-scoring
+  :type '(choice (const :tag "Do not assign default score")
+                (integer :tag "Assign this default score" 0)))
+
+(defvar gnus-bbdb/score-default-internal nil
+  "Internal variable for detecting changes to
+`gnus-bbdb/score-default'.  You should not set this variable directly -
+set `gnus-bbdb/score-default' instead.")
+
+(defvar gnus-bbdb/score-alist nil
+  "The text version of the scoring structure returned by
+gnus-bbdb/score.  This is built automatically from the BBDB.")
+
+(defvar gnus-bbdb/score-rebuild-alist t
+  "Set to t to rebuild gnus-bbdb/score-alist on the next call to
+gnus-bbdb/score.  This will be set automatically if you change a BBDB
+record which contains a gnus-score field.")
+
+(defun gnus-bbdb/score-invalidate-alist (rec)
+  "This function is called through bbdb-after-change-hook, and sets
+gnus-bbdb/score-rebuild-alist to t if the changed record contains a
+gnus-score field."
+  (if (bbdb-record-getprop rec gnus-bbdb/score-field)
+      (setq gnus-bbdb/score-rebuild-alist t)))
+
+;;;###autoload
+(defun gnus-bbdb/score (group)
+  "This returns a score alist for GNUS.  A score pair will be made for
+every member of the net field in records which also have a gnus-score
+field.  This allows the BBDB to serve as a supplemental global score
+file, with the advantage that it can keep up with multiple and changing
+addresses better than the traditionally static global scorefile."
+  (list (list
+   (condition-case nil
+       (read (gnus-bbdb/score-as-text group))
+     (error (setq gnus-bbdb/score-rebuild-alist t)
+           (message "Problem building BBDB score table.")
+           (ding) (sit-for 2)
+           nil)))))
+
+(defun gnus-bbdb/score-as-text (group)
+  "Returns a SCORE file format string built from the BBDB."
+  (cond ((or (cond ((/= (or gnus-bbdb/score-default 0)
+                       (or gnus-bbdb/score-default-internal 0))
+                   (setq gnus-bbdb/score-default-internal
+                         gnus-bbdb/score-default)
+                   t))
+           (not gnus-bbdb/score-alist)
+           gnus-bbdb/score-rebuild-alist)
+    (setq gnus-bbdb/score-rebuild-alist nil)
+    (setq gnus-bbdb/score-alist
+         (concat "((touched nil) (\"from\"\n"
+                 (mapconcat
+                  (lambda (rec)
+                    (let ((score (or (bbdb-record-getprop rec
+                                                          gnus-bbdb/score-field)
+                                     gnus-bbdb/score-default))
+                          (net (bbdb-record-net rec)))
+                      (if (not (and score net)) nil
+                        (mapconcat
+                         (lambda (addr)
+                           (concat "(\"" addr "\" " score ")\n"))
+                         net ""))))
+                  (bbdb-records) "")
+                 "))"))))
+  gnus-bbdb/score-alist)
+
+(defun gnus-bbdb/extract-field-value-init ()
+  (when (or (and (eq (current-buffer) (get-buffer gnus-article-buffer))
+                (buffer-live-p gnus-original-article-buffer)
+                (set-buffer gnus-original-article-buffer))
+           (eq (current-buffer) (get-buffer gnus-original-article-buffer)))
+    (widen)
+    (narrow-to-region (point-min)
+                     (progn (goto-char (point-min))
+                            (or (search-forward "\n\n" nil t)
+                                (error "message unexists"))
+                            (- (point) 2)))
+    'gnus-bbdb/extract-field-value))
+
+(defun gnus-bbdb/extract-field-value (field-name)
+  "Given the name of a field (like \"Subject\") this returns the value of
+that field in the current message, or nil.  This works whether you're in
+Semi-gnus, Rmail, or VM.  This works on multi-line fields, but if more than
+one field of the same name is present, only the last is returned.  It is
+expected that the current buffer has a message in it, and (point) is at the
+beginning of the message headers."
+  ;; we can't special-case VM here to use its cache, because the cache has
+  ;; divided real-names from addresses; the actual From: and Subject: fields
+  ;; exist only in the message.
+  (let (value)
+    (when (setq value (mail-fetch-field field-name))
+      (gnus-bbdb/decode-field-body value field-name))))
+
+;;; @ mail-extr
+;;;
+
+(defvar gnus-bbdb/canonicalize-full-name-methods
+  '(gnus-bbdb/canonicalize-dots
+    gnus-bbdb/canonicalize-spaces))
+
+(defun gnus-bbdb/extract-address-components (str)
+  (let* ((ret     (std11-extract-address-components str))
+         (phrase  (car ret))
+         (address (car (cdr ret)))
+         (methods gnus-bbdb/canonicalize-full-name-methods))
+    (while (and phrase methods)
+      (setq phrase  (funcall (car methods) phrase)
+            methods (cdr methods)))
+    (if (string= address "") (setq address nil))
+    (if (string= phrase "") (setq phrase nil))
+    (when (or phrase address)
+      (list phrase address))
+    ))
+
+;;; @ full-name canonicalization methods
+;;;
+
+(defun gnus-bbdb/canonicalize-spaces (str)
+  (let (dest)
+    (while (string-match "\\s +" str)
+      (setq dest (cons (substring str 0 (match-beginning 0)) dest))
+      (setq str (substring str (match-end 0)))
+      )
+    (or (string= str "")
+        (setq dest (cons str dest)))
+    (setq dest (nreverse dest))
+    (mapconcat 'identity dest " ")
+    ))
+
+(defun gnus-bbdb/canonicalize-dots (str)
+  (let (dest)
+    (while (string-match "\\." str)
+      (setq dest (cons (substring str 0 (match-end 0)) dest))
+      (setq str (substring str (match-end 0)))
+      )
+    (or (string= str "")
+        (setq dest (cons str dest)))
+    (setq dest (nreverse dest))
+    (mapconcat 'identity dest " ")
+    ))
+
+;;
+;; Insinuation
+;;
+
+;;;###autoload
+(defun gnus-bbdb-insinuate ()
+  "Call this function to hook BBDB into Semi-gnus."
+;;  (setq gnus-optional-headers 'gnus-bbdb/lines-and-from)
+  (when (boundp 'bbdb-extract-field-value-function-list)
+    (add-to-list 'bbdb-extract-field-value-function-list
+                'gnus-bbdb/extract-field-value-init))
+  (add-hook 'gnus-article-prepare-hook 'gnus-bbdb/update-record)
+  (add-hook 'gnus-save-newsrc-hook 'bbdb-offer-save)
+  (define-key gnus-summary-mode-map ":" 'gnus-bbdb/show-sender)
+  (define-key gnus-summary-mode-map ";" 'gnus-bbdb/edit-notes)
+
+  ;; Set up user field for use in gnus-summary-line-format
+  (let ((get-author-user-fun (intern
+                             (concat "gnus-user-format-function-"
+                                     gnus-bbdb/summary-user-format-letter)))
+       (in-bbdb-user-fun (intern
+                          (concat "gnus-user-format-function-"
+                                  gnus-bbdb/summary-in-bbdb-format-letter))))
+                                       ; The big one - whole name
+    (cond (gnus-bbdb/summary-user-format-letter
+          (if (and (fboundp get-author-user-fun)
+                   (not (eq (symbol-function get-author-user-fun)
+                            'gnus-bbdb/summary-get-author)))
+              (bbdb-warn
+               (format "`gnus-user-format-function-%s' already seems to be in use.
+Please redefine `gnus-bbdb/summary-user-format-letter' to a different letter."
+                       gnus-bbdb/summary-user-format-letter))
+            (fset get-author-user-fun 'gnus-bbdb/summary-get-author))))
+    
+    ; One tick.  One tick only, please
+    (cond (gnus-bbdb/summary-in-bbdb-format-letter
+          (if (and (fboundp in-bbdb-user-fun)
+                   (not (eq (symbol-function in-bbdb-user-fun)
+                            'gnus-bbdb/summary-author-in-bbdb)))
+              (bbdb-warn
+               (format "`gnus-user-format-function-%s' already seems to be in use.
+Redefine `gnus-bbdb/summary-in-bbdb-format-letter' to a different letter."
+                       gnus-bbdb/summary-in-bbdb-format-letter))
+            (fset in-bbdb-user-fun 'gnus-bbdb/summary-author-in-bbdb)))))
+  
+  ;; Scoring
+  (add-hook 'bbdb-after-change-hook 'gnus-bbdb/score-invalidate-alist)
+;  (setq gnus-score-find-score-files-function
+;      (if (boundp 'gnus-score-find-score-files-function)
+;          (cond ((functionp gnus-score-find-score-files-function)
+;                 (list gnus-score-find-score-files-function
+;                       'gnus-bbdb/score))
+;                ((listp gnus-score-find-score-files-function)
+;                 (append gnus-score-find-score-files-function
+;                         'gnus-bbdb/score))
+;                (t 'gnus-bbdb/score))
+;        'gnus-bbdb/score))
+  )
+
+;;;###autoload
+(defun gnus-bbdb-insinuate-message ()
+  "Call this function to hook BBDB into message-mode."
+  (define-key message-mode-map "\M-\t" 'bbdb-complete-name))
+
+(provide 'gnus-bbdb)
index 9badf94..d370673 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-bcklg.el --- backlog functions for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -42,7 +42,7 @@
   (or (get-buffer gnus-backlog-buffer)
       (save-excursion
        (set-buffer (gnus-get-buffer-create gnus-backlog-buffer))
-       (buffer-disable-undo)
+       (buffer-disable-undo (current-buffer))
        (setq buffer-read-only t)
        (get-buffer gnus-backlog-buffer))))
 
index 0f009f3..436baad 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-cache.el --- cache interface for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -77,9 +77,6 @@ it's not cached."
 (defvar gnus-cache-overview-coding-system 'raw-text
   "Coding system used on Gnus cache files.")
 
-(defvar gnus-cache-coding-system 'raw-text
-  "Coding system used on Gnus cache files.")
-
 \f
 
 ;;; Internal variables.
@@ -127,9 +124,8 @@ it's not cached."
          (set-buffer buffer)
          (if (> (buffer-size) 0)
              ;; Non-empty overview, write it to a file.
-             (let ((coding-system-for-write
-                    gnus-cache-overview-coding-system))
-               (gnus-write-buffer overview-file))
+             (gnus-write-buffer-as-coding-system
+              gnus-cache-overview-coding-system overview-file)
            ;; Empty overview file, remove it
            (when (file-exists-p overview-file)
              (delete-file overview-file))
@@ -145,17 +141,20 @@ it's not cached."
       (setq gnus-cache-buffer nil))))
 
 (defun gnus-cache-possibly-enter-article
-  (group article ticked dormant unread &optional force)
+  (group article headers ticked dormant unread &optional force)
   (when (and (or force (not (eq gnus-use-cache 'passive)))
             (numberp article)
-            (> article 0))             ; This might be a dummy article.
-    (let ((number article) file headers)
-      ;; If this is a virtual group, we find the real group.
-      (when (gnus-virtual-group-p group)
-       (let ((result (nnvirtual-find-group-art
-                      (gnus-group-real-name group) article)))
-         (setq group (car result)
-               number (cdr result))))
+            (> article 0)
+            (vectorp headers))         ; This might be a dummy article.
+    ;; If this is a virtual group, we find the real group.
+    (when (gnus-virtual-group-p group)
+      (let ((result (nnvirtual-find-group-art
+                    (gnus-group-real-name group) article)))
+       (setq group (car result)
+             headers (copy-sequence headers))
+       (mail-header-set-number headers (cdr result))))
+    (let ((number (mail-header-number headers))
+         file)
       (when (and number
                 (> number 0)           ; Reffed article.
                 (or force
@@ -175,13 +174,10 @@ it's not cached."
            t                           ; The article already is saved.
          (save-excursion
            (set-buffer nntp-server-buffer)
-           (let ((gnus-use-cache nil)
-                 (gnus-article-decode-hook nil))
+           (let ((gnus-use-cache nil))
              (gnus-request-article-this-buffer number group))
            (when (> (buffer-size) 0)
              (gnus-write-buffer file)
-             (setq headers (nnheader-parse-head t))
-             (mail-header-set-number headers number)
              (gnus-cache-change-buffer group)
              (set-buffer (cdr gnus-cache-buffer))
              (goto-char (point-max))
@@ -203,7 +199,17 @@ it's not cached."
                    (beginning-of-line))
                (forward-line 1))
              (beginning-of-line)
-             (nnheader-insert-nov headers)
+             ;; [number subject from date id references chars lines xref]
+             (insert (format "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n"
+                             (mail-header-number headers)
+                             (mail-header-subject headers)
+                             (mail-header-from headers)
+                             (mail-header-date headers)
+                             (mail-header-id headers)
+                             (or (mail-header-references headers) "")
+                             (or (mail-header-chars headers) "")
+                             (or (mail-header-lines headers) "")
+                             (or (mail-header-xref headers) "")))
              ;; Update the active info.
              (set-buffer gnus-summary-buffer)
              (gnus-cache-update-active group number)
@@ -257,8 +263,7 @@ it's not cached."
     (when (file-exists-p file)
       (erase-buffer)
       (gnus-kill-all-overlays)
-      (let ((coding-system-for-read gnus-cache-coding-system))
-       (insert-file-contents file))
+      (nnheader-insert-file-contents file)
       t)))
 
 (defun gnus-cache-possibly-alter-active (group active)
@@ -304,9 +309,7 @@ it's not cached."
            ;; unsuccessful), so we use the cached headers exclusively.
            (set-buffer nntp-server-buffer)
            (erase-buffer)
-           (let ((coding-system-for-read 
-                  gnus-cache-overview-coding-system))
-             (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
@@ -331,6 +334,7 @@ Returns the list of articles entered."
       (if (natnump article)
          (when (gnus-cache-possibly-enter-article
                 gnus-newsgroup-name article
+                (gnus-summary-article-header article)
                 nil nil nil t)
            (push article out))
        (gnus-message 2 "Can't cache article %d" article))
@@ -390,11 +394,12 @@ Returns the list of articles removed."
            (cons group
                  (set-buffer (gnus-get-buffer-create
                               " *gnus-cache-overview*"))))
+      (buffer-disable-undo (current-buffer))
       ;; Insert the contents of this group's cache overview.
       (erase-buffer)
       (let ((file (gnus-cache-file-name group ".overview")))
        (when (file-exists-p file)
-         (mm-insert-file-contents file)))
+         (nnheader-insert-file-contents file)))
       ;; We have a fresh (empty/just loaded) buffer,
       ;; mark it as unmodified to save a redundant write later.
       (set-buffer-modified-p nil))))
@@ -423,10 +428,10 @@ Returns the list of articles removed."
 (defun gnus-cache-update-article (group article)
   "If ARTICLE is in the cache, remove it and re-enter it."
   (gnus-cache-change-buffer group)
-  (when (gnus-cache-possibly-remove-article article nil nil nil t)
+  (when (gnus-cache-possibly-remove-article article nil nil nil t)    
     (let ((gnus-use-cache nil))
       (gnus-cache-possibly-enter-article
-       gnus-newsgroup-name article
+       gnus-newsgroup-name article (gnus-summary-article-header article)
        nil nil nil t))))
 
 (defun gnus-cache-possibly-remove-article (article ticked dormant unread
@@ -481,11 +486,9 @@ Returns the list of articles removed."
     (gnus-cache-save-buffers)
     (save-excursion
       (set-buffer cache-buf)
+      (buffer-disable-undo (current-buffer))
       (erase-buffer)
-      (let ((coding-system-for-read 
-           gnus-cache-overview-coding-system))
-       (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)))
@@ -513,6 +516,7 @@ Returns the list of articles removed."
   (let ((cache-buf (gnus-get-buffer-create " *gnus-cache*")))
     (save-excursion
       (set-buffer cache-buf)
+      (buffer-disable-undo (current-buffer))
       (erase-buffer))
     (set-buffer nntp-server-buffer)
     (goto-char (point-min))
@@ -527,9 +531,7 @@ Returns the list of articles removed."
       (save-excursion
        (set-buffer cache-buf)
        (erase-buffer)
-       (let ((coding-system-for-read 
-              gnus-cache-coding-system))
-         (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))
@@ -573,14 +575,14 @@ $ emacs -batch -l ~/.emacs -l gnus -f gnus-jog-cache"
   "Read the cache active file."
   (gnus-make-directory gnus-cache-directory)
   (if (or (not (file-exists-p gnus-cache-active-file))
-         (zerop (nth 7 (file-attributes gnus-cache-active-file)))
+         (not (zerop (nth 7 (file-attributes gnus-cache-active-file))))
          force)
       ;; There is no active file, so we generate one.
       (gnus-cache-generate-active)
     ;; 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
@@ -592,7 +594,14 @@ $ emacs -batch -l ~/.emacs -l gnus -f gnus-jog-cache"
   (when (or force
            (and gnus-cache-active-hashtb
                 gnus-cache-active-altered))
-    (gnus-write-active-file gnus-cache-active-file gnus-cache-active-hashtb)
+    (nnheader-temp-write gnus-cache-active-file
+      (mapatoms
+       (lambda (sym)
+        (when (and sym (boundp sym))
+          (insert (format "%s %d %d y\n"
+                          (symbol-name sym) (cdr (symbol-value sym))
+                          (car (symbol-value sym))))))
+       gnus-cache-active-hashtb))
     ;; Mark the active hashtb as unaltered.
     (setq gnus-cache-active-altered nil)))
 
index 71c36af..025273b 100644 (file)
@@ -28,7 +28,6 @@
 
 (require 'wid-edit)
 (require 'gnus-score)
-(require 'gnus-topic)
 
 ;;; Widgets:
 
@@ -104,11 +103,6 @@ is present and a string, this string will be inserted literally as a
 `gcc' header (this symbol takes precedence over any default `Gcc'
 rules as described later).")
 
-    (banner (choice :tag "Banner"
-                   (const signature)
-                   string ) "\
-Banner to be removed from articles.")
-
     (auto-expire (const :tag "Automatic Expire" t) "\
 All articles that are read will be marked as expirable.")
 
@@ -165,30 +159,7 @@ An arbitrary comment on the group.")
 
     (visible (const :tag "Permanently visible" t) "\
 Always display this group, even when there are no unread articles
-in it..")
-
-    (charset (symbol :tag "Charset") "\
-The default charset to use in the group.")
-            
-    (ignored-charsets 
-     (choice :tag "Ignored charsets" 
-            :value nil
-            (repeat (symbol))) "\
-List of charsets that should be ignored.
-
-When these charsets are used in the \"charset\" parameter, the
-default charset will be used instead.")
-            
-    (highlight-words 
-     (choice :tag "Highlight words"
-            :value nil
-            (repeat (list (regexp :tag "Highlight regexp")
-                          (number :tag "Group for entire word" 0)
-                          (number :tag "Group for displayed part" 0)
-                          (symbol :tag "Face" 
-                                  gnus-emphasis-highlight-words))))
-  "highlight regexps.
-See gnus-emphasis-alist."))
+in it.."))
   "Alist of valid group parameters.
 
 Each entry has the form (NAME TYPE DOC), where NAME is the parameter
@@ -198,11 +169,10 @@ DOC is a documentation string for the parameter.")
 (defvar gnus-custom-params)
 (defvar gnus-custom-method)
 (defvar gnus-custom-group)
-(defvar gnus-custom-topic)
 
-(defun gnus-group-customize (group &optional topic)
-  "Edit the group or topic on the current line."
-  (interactive (list (gnus-group-group-name) (gnus-group-topic-name)))
+(defun gnus-group-customize (group)
+  "Edit the group on the current line."
+  (interactive (list (gnus-group-group-name)))
   (let (info
        (types (mapcar (lambda (entry)
                         `(cons :format "%v%h\n"
@@ -210,11 +180,9 @@ DOC is a documentation string for the parameter.")
                                (const :format "" ,(nth 0 entry))
                                ,(nth 1 entry)))
                       gnus-group-parameters)))
-    (unless (or group topic)
+    (unless group
       (error "No group on current line"))
-    (when (and group topic)
-      (error "Both a group an topic on current line"))
-    (unless (or topic (setq info (gnus-get-info group)))
+    (unless (setq info (gnus-get-info group))
       (error "Killed group; can't be edited"))
     ;; Ready.
     (kill-buffer (gnus-get-buffer-create "*Gnus Customize*"))
@@ -222,20 +190,13 @@ DOC is a documentation string for the parameter.")
     (gnus-custom-mode)
     (make-local-variable 'gnus-custom-group)
     (setq gnus-custom-group group)
-    (make-local-variable 'gnus-custom-topic)
-    (setq gnus-custom-topic topic)
     (widget-insert "Customize the ")
-    (if group
-       (widget-create 'info-link
-                      :help-echo "Push me to learn more."
-                      :tag "group parameters"
-                      "(gnus)Group Parameters")
-      (widget-create 'info-link
-                    :help-echo "Push me to learn more."
-                    :tag  "topic parameters"
-                    "(gnus)Topic Parameters"))
+    (widget-create 'info-link
+                  :help-echo "Push me to learn more."
+                  :tag "group parameters"
+                  "(gnus)Group Parameters")
     (widget-insert " for <")
-    (widget-insert (or group topic))
+    (widget-insert group)
     (widget-insert "> and press ")
     (widget-create 'push-button
                   :tag "done"
@@ -245,17 +206,15 @@ DOC is a documentation string for the parameter.")
     (make-local-variable 'gnus-custom-params)
     (setq gnus-custom-params
          (widget-create 'group
-                        :value (if group
-                                   (gnus-info-params info)
-                                 (gnus-topic-parameters topic))
+                        :value (gnus-info-params info)
                         `(set :inline t
                               :greedy t
                               :tag "Parameters"
                               :format "%t:\n%h%v"
                               :doc "\
 These special paramerters are recognized by Gnus.
-Check the [ ] for the parameters you want to apply to this group or
-to the groups in this topic, then edit the value to suit your taste."
+Check the [ ] for the parameters you want to apply to this group, then
+edit the value to suit your taste."
                               ,@types)
                         '(repeat :inline t
                                  :tag "Variables"
@@ -273,7 +232,7 @@ like.  If you want to hear a beep when you enter a group, you could
 put something like `(dummy-variable (ding))' in the parameters of that
 group.  `dummy-variable' will be set to the result of the `(ding)'
 form, but who cares?"
-                                 (cons :format "%v" :value (nil .  nil)
+                                 (group :value (nil nil)
                                         (symbol :tag "Variable")
                                         (sexp :tag
                                               "Value")))
@@ -281,31 +240,26 @@ form, but who cares?"
                         '(repeat :inline t
                                  :tag "Unknown entries"
                                  sexp)))
-    (when group
-      (widget-insert "\n\nYou can also edit the ")
-      (widget-create 'info-link
-                    :tag "select method"
-                    :help-echo "Push me to learn more about select methods."
-                    "(gnus)Select Methods")
-      (widget-insert " for the group.\n")
-      (setq gnus-custom-method
-           (widget-create 'sexp
-                          :tag "Method"
-                          :value (gnus-info-method info))))
+    (widget-insert "\n\nYou can also edit the ")
+    (widget-create 'info-link
+                  :tag "select method"
+                  :help-echo "Push me to learn more about select methods."
+                  "(gnus)Select Methods")
+    (widget-insert " for the group.\n")
+    (setq gnus-custom-method
+         (widget-create 'sexp
+                        :tag "Method"
+                        :value (gnus-info-method info)))
     (use-local-map widget-keymap)
-    (widget-setup)
-    (goto-char (point-min))))
+    (widget-setup)))
 
 (defun gnus-group-customize-done (&rest ignore)
   "Apply changes and bury the buffer."
   (interactive)
-  (if gnus-custom-topic
-      (gnus-topic-set-parameters gnus-custom-topic
-                                (widget-value gnus-custom-params))
-    (gnus-group-edit-group-done 'params gnus-custom-group
-                               (widget-value gnus-custom-params))
-    (gnus-group-edit-group-done 'method gnus-custom-group
-                               (widget-value gnus-custom-method)))
+  (gnus-group-edit-group-done 'params gnus-custom-group
+                             (widget-value gnus-custom-params))
+  (gnus-group-edit-group-done 'method gnus-custom-group
+                             (widget-value gnus-custom-method))
   (bury-buffer))
 
 ;;; Score Customization:
@@ -626,7 +580,6 @@ if you do all your changes will be lost.  ")
                                     (gnus-score-string :tag "Subject")
                                     (gnus-score-string :tag "References")
                                     (gnus-score-string :tag "Xref")
-                                    (gnus-score-string :tag "Extra")
                                     (gnus-score-string :tag "Message-ID")
                                     (gnus-score-integer :tag "Lines")
                                     (gnus-score-integer :tag "Chars")
index 7c1fa49..0015a90 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-demon.el --- daemonic Gnus behaviour
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -82,6 +82,10 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's."
 (defvar gnus-inhibit-demon nil
   "*If non-nil, no daemonic function will be run.")
 
+(eval-and-compile
+  (autoload 'timezone-parse-date "timezone")
+  (autoload 'timezone-make-arpa-date "timezone"))
+
 ;;; Functions.
 
 (defun gnus-demon-add-handler (function time idle)
@@ -115,7 +119,8 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's."
                   (nth 2 handler)))
           gnus-demon-handlers))
     (setq gnus-demon-idle-time 0)
-    (setq gnus-demon-idle-has-been-called nil)))
+    (setq gnus-demon-idle-has-been-called nil)
+    (setq gnus-use-demon t)))
 
 (gnus-add-shutdown 'gnus-demon-cancel 'gnus)
 
@@ -125,6 +130,7 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's."
   (when gnus-demon-timer
     (nnheader-cancel-timer gnus-demon-timer))
   (setq gnus-demon-timer nil
+       gnus-use-demon nil
        gnus-demon-idle-has-been-called nil)
   (condition-case ()
       (nnheader-cancel-function-timers 'gnus-demon)
@@ -149,11 +155,11 @@ time Emacs has been idle for IDLE `gnus-demon-timestep's."
       time
     (let* ((now (current-time))
            ;; obtain NOW as discrete components -- make a vector for speed
-           (nowParts (decode-time now))
+           (nowParts (apply 'vector (decode-time now)))
            ;; obtain THEN as discrete components
-           (thenParts (parse-time-string time))
-           (thenHour (elt thenParts 0))
-           (thenMin (elt thenParts 1))
+           (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.
            (then (encode-time 0
                               thenMin
@@ -262,7 +268,8 @@ minutes, the connection is closed."
 
 (defun gnus-demon-nntp-close-connection ()
   (save-window-excursion
-    (when (time-less-p '(0 300) (time-since nntp-last-command-time))
+    (when (nnmail-time-less '(0 300)
+                           (nnmail-time-since nntp-last-command-time))
       (nntp-close-server))))
 
 (defun gnus-demon-add-scanmail ()
@@ -273,6 +280,7 @@ minutes, the connection is closed."
   (save-window-excursion
     (let ((servers gnus-opened-servers)
          server)
+      (gnus-clear-inboxes-moved)
       (while (setq server (car (pop servers)))
        (and (gnus-check-backend-function 'request-scan (car server))
             (or (gnus-server-opened server)
index 13830b7..d794f0d 100644 (file)
@@ -1,8 +1,9 @@
-;;; gnus-draft.el --- draft message support for Gnus
-;; Copyright (C) 1997,98,99 Free Software Foundation, Inc.
+;;; 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.
 
@@ -73,7 +74,6 @@
       (when (gnus-visual-p 'draft-menu 'menu)
        (gnus-draft-make-menu-bar))
       (gnus-add-minor-mode 'gnus-draft-mode " Draft" gnus-draft-mode-map)
-      (mml-mode)
       (gnus-run-hooks 'gnus-draft-mode-hook))))
 
 ;;; Commands
@@ -95,7 +95,7 @@
   (interactive)
   (let ((article (gnus-summary-article-number)))
     (gnus-summary-mark-as-read article gnus-canceled-mark)
-    (gnus-draft-setup article gnus-newsgroup-name)
+    (gnus-draft-setup-for-editing article gnus-newsgroup-name)
     (set-buffer-modified-p t)
     (save-buffer)
     (let ((gnus-verbose-backends nil))
     (while (setq article (pop articles))
       (gnus-summary-remove-process-mark article)
       (unless (memq article gnus-newsgroup-unsendable)
-       (gnus-draft-send article gnus-newsgroup-name t)
+       (gnus-draft-send article gnus-newsgroup-name)
        (gnus-summary-mark-article article gnus-canceled-mark)))))
 
-(defun gnus-draft-send (article &optional group interactive)
+(defun gnus-draft-send (article &optional group)
   "Send message ARTICLE."
-  (gnus-draft-setup article (or group "nndraft:queue"))
-  (let ((message-syntax-checks (if interactive nil
-                                'dont-check-for-anything-just-trust-me))
-       (message-inhibit-body-encoding (or (not group) 
-                                          (equal group "nndraft:queue")
-                                          message-inhibit-body-encoding))
-       (message-send-hook (and group (not (equal group "nndraft:queue"))
-                               message-send-hook))
-       type method)
+  (gnus-draft-setup-for-sending article (or group "nndraft:queue"))
+  (let ((message-syntax-checks 'dont-check-for-anything-just-trust-me)
+       message-send-hook type method)
     ;; We read the meta-information that says how and where
     ;; this message is to be sent.
     (save-restriction
        (message-remove-header gnus-agent-meta-information-header)))
     ;; Then we send it.  If we have no meta-information, we just send
     ;; it and let Message figure out how.
-    (when (and (or (null method)
-                  (gnus-server-opened method)
-                  (gnus-open-server method))
-              (if type
-                  (let ((message-this-is-news (eq type 'news))
-                        (message-this-is-mail (eq type 'mail))
-                        (gnus-post-method method)
-                        (message-post-method method))
-                    (message-send-and-exit))
-                (message-send-and-exit)))
+    (when (let ((mail-header-separator ""))
+           (cond ((eq type 'news)
+                  (mime-edit-maybe-split-and-send
+                   (function
+                    (lambda ()
+                      (interactive)
+                      (funcall message-send-news-function method)
+                      )))
+                  (funcall message-send-news-function method)
+                  )
+                 ((eq type 'mail)
+                  (mime-edit-maybe-split-and-send
+                   (function
+                    (lambda ()
+                      (interactive)
+                      (funcall message-send-mail-function)
+                      )))
+                  (funcall message-send-mail-function)
+                  t)))
       (let ((gnus-verbose-backends nil))
        (gnus-request-expire-articles
         (list article) (or group "nndraft:queue") t)))))
 
 ;;; Utility functions
 
+(defcustom gnus-draft-decoding-function
+  (function
+   (lambda ()
+     (mime-edit-decode-message-in-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,
 ;;;!!!but for the time being, we'll just run this tiny function uncompiled.
 
-(progn
-(defun gnus-draft-setup (narticle group)
+(defun gnus-draft-setup-for-editing (narticle group)
   (gnus-setup-message 'forward
     (let ((article narticle))
       (message-mail)
       (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)
        (insert mail-header-separator)
        (forward-line 1)
-       (message-set-auto-save-file-name))))))
+       (message-set-auto-save-file-name)))))
+;;
+(defvar gnus-draft-send-draft-buffer " *send draft*")
+(defun gnus-draft-setup-for-sending (narticle group)
+  (let ((article narticle))
+    (if (not (get-buffer gnus-draft-send-draft-buffer))
+       (get-buffer-create gnus-draft-send-draft-buffer))
+    (set-buffer gnus-draft-send-draft-buffer)
+    (erase-buffer)
+    (if (not (gnus-request-restore-buffer article group))
+       (error "Couldn't restore the article")
+      )))
+;; For draft TEST
 
 (defun gnus-draft-article-sendable-p (article)
   "Say whether ARTICLE is sendable."
index 691381f..6958f02 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-dup.el --- suppression of duplicate articles in Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -98,7 +98,7 @@ seen in the same session."
   "Save the duplicate suppression list."
   (when (and gnus-save-duplicate-list
             gnus-dup-list-dirty)
-    (with-temp-file gnus-duplicate-file
+    (nnheader-temp-write gnus-duplicate-file
       (gnus-prin1 `(setq gnus-dup-list ',gnus-dup-list))))
   (setq gnus-dup-list-dirty nil))
 
index 09f2bb5..6a93242 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-eform.el --- a mode for editing forms for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -53,8 +53,7 @@
 
 (defvar gnus-edit-form-mode-map nil)
 (unless gnus-edit-form-mode-map
-  (setq gnus-edit-form-mode-map (make-sparse-keymap))
-  (set-keymap-parent gnus-edit-form-mode-map emacs-lisp-mode-map)
+  (setq gnus-edit-form-mode-map (copy-keymap emacs-lisp-mode-map))
   (gnus-define-keys gnus-edit-form-mode-map
     "\C-c\C-c" gnus-edit-form-done
     "\C-c\C-k" gnus-edit-form-exit))
index 8cfa6e2..f798e12 100644 (file)
@@ -1,7 +1,8 @@
-;;; gnus-ems.el --- functions for making Gnus work under different Emacsen
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;;; gnus-ems.el --- functions for making Semi-gnus work under different Emacsen
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;;         Tatsuya Ichikawa <t-ichi@niagara.shiojiri.ne.jp>
 ;; Keywords: news
 
 ;; This file is part of GNU Emacs.
@@ -33,9 +34,7 @@
   "Non-nil if running under XEmacs.")
 
 (defvar gnus-mouse-2 [mouse-2])
-(defvar gnus-down-mouse-3 [down-mouse-3])
 (defvar gnus-down-mouse-2 [down-mouse-2])
-(defvar gnus-widget-button-keymap nil)
 (defvar gnus-mode-line-modified
   (if (or gnus-xemacs
          (< emacs-major-version 20))
   (autoload 'gnus-xmas-redefine "gnus-xmas")
   (autoload 'appt-select-lowest-window "appt"))
 
+(or (fboundp 'mail-file-babyl-p)
+    (fset 'mail-file-babyl-p 'rmail-file-p))
+
 ;;; Mule functions.
 
-(defun gnus-mule-max-width-function (el max-width)
-  (` (let* ((val (eval (, el)))
-           (valstr (if (numberp val)
-                       (int-to-string val) val)))
-       (if (> (length valstr) (, max-width))
-          (truncate-string-to-width valstr (, max-width))
-        valstr))))
+(defun gnus-mule-cite-add-face (number prefix face)
+  ;; At line NUMBER, ignore PREFIX and add FACE to the rest of the line.
+  (when face
+    (let ((inhibit-point-motion-hooks t)
+         from to)
+      (goto-line number)
+      (unless (eobp)            ; Sometimes things become confused (broken).
+       (forward-char (chars-in-string prefix))
+        (skip-chars-forward " \t")
+        (setq from (point))
+        (end-of-line 1)
+        (skip-chars-backward " \t")
+        (setq to (point))
+        (when (< from to)
+          (push (setq overlay (gnus-make-overlay from to))
+                gnus-cite-overlay-list)
+          (gnus-overlay-put (gnus-make-overlay from to) 'face face))))))
+
+(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)
    ((string-match "XEmacs\\|Lucid" emacs-version)
     (gnus-xmas-define))
 
+   ((or (not (boundp 'emacs-minor-version))
+       (and (< emacs-major-version 20)
+            (< emacs-minor-version 30)))
+    ;; Remove the `intangible' prop.
+    (let ((props (and (boundp 'gnus-hidden-properties)
+                     gnus-hidden-properties)))
+      (while (and props (not (eq (car (cdr props)) 'intangible)))
+       (setq props (cdr props)))
+      (when props
+       (setcdr props (cdr (cdr (cdr props))))))
+    (unless (fboundp 'buffer-substring-no-properties)
+      (defun buffer-substring-no-properties (beg end)
+       (format "%s" (buffer-substring beg end)))))
+
    ((boundp 'MULE)
     (provide 'gnusutil))))
 
       (while funcs
        (unless (fboundp (car funcs))
          (fset (car funcs) 'gnus-dummy-func))
-       (setq funcs (cdr funcs)))))))
+       (setq funcs (cdr funcs))))))
+  (unless (fboundp 'file-regular-p)
+    (defun file-regular-p (file)
+      (and (not (file-directory-p file))
+          (not (file-symlink-p file))
+          (file-exists-p file))))
+  (unless (fboundp 'face-list)
+    (defun face-list (&rest args))))
 
 (eval-and-compile
   (let ((case-fold-search t))
 
     (defvar gnus-summary-display-table nil
       "Display table used in summary mode buffers.")
-    (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)
+
+    (if (fboundp 'truncate-string-to-width)
+       (fset 'gnus-truncate-string 'truncate-string-to-width)
+      (fset 'gnus-truncate-string 'truncate-string))
+
+    (defun gnus-tilde-max-form (el max-width)
+      "Return a form that limits EL to MAX-WIDTH."
+      (let ((max (abs max-width)))
+       (if (symbolp el)
+           `(if (> (string-width ,el) ,max)
+                ,(if (< max-width 0)
+                     `(gnus-truncate-string
+                       ,el (string-width ,el)
+                       (- (string-width ,el) ,max))
+                   `(gnus-truncate-string ,el ,max))
+              ,el)
+         `(let ((val (eval ,el)))
+            (if (> (string-width val) ,max)
+                ,(if (< max-width 0)
+                     `(gnus-truncate-string
+                       val (string-width val)
+                       (- (string-width val) ,max))
+                   `(gnus-truncate-string val ,max))
+              val)))))
+
+    (defun gnus-tilde-cut-form (el cut-width)
+      "Return a form that cuts CUT-WIDTH off of EL."
+      (let ((cut (abs cut-width)))
+       (if (symbolp el)
+           `(if (> (string-width ,el) ,cut)
+                ,(if (< cut-width 0)
+                     `(gnus-truncate-string
+                       ,el (- (string-width ,el) ,cut))
+                   `(gnus-truncate-string
+                     ,el (- (string-width ,el) ,cut) ,cut))
+              ,el)
+         `(let ((val (eval ,el)))
+            (if (> (string-width val) ,cut)
+                ,(if (< cut-width 0)
+                     `(gnus-truncate-string
+                       val (- (string-width val) ,cut))
+                   `(gnus-truncate-string
+                     val (- (string-width val) ,cut) ,cut))
+              val)))))
+
+    (when 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
                  (delq 'control-chars gnus-check-before-posting))))
 
-    (defun gnus-summary-line-format-spec ()
-      (insert gnus-tmp-unread gnus-tmp-replied
-             gnus-tmp-score-char gnus-tmp-indentation)
-      (put-text-property
-       (point)
-       (progn
-        (insert
-         gnus-tmp-opening-bracket
-         (format "%4d: %-20s"
-                 gnus-tmp-lines
-                 (if (> (length gnus-tmp-name) 20)
-                     (truncate-string-to-width gnus-tmp-name 20)
-                   gnus-tmp-name))
-         gnus-tmp-closing-bracket)
-        (point))
-       gnus-mouse-face-prop gnus-mouse-face)
-      (insert " " gnus-tmp-subject-or-nil "\n"))
+    (when (fboundp 'chars-in-string)
+      (fset 'gnus-cite-add-face 'gnus-mule-cite-add-face))
+
     )))
 
 (defun gnus-region-active-p ()
        (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
              (setq pixmap (read (current-buffer))))))
        (when pixmap
+         (erase-buffer)
          (unless (facep 'gnus-splash)
            (make-face 'gnus-splash))
          (setq height (/ (car pixmap) (frame-char-height))
                width (/ (cadr pixmap) (frame-char-width)))
-         (set-face-foreground 'gnus-splash "Brown")
+         (set-face-foreground 'gnus-splash "ForestGreen")
          (set-face-stipple 'gnus-splash pixmap)
          (insert-char ?\n (* (/ (window-height) 2 height) height))
          (setq i height)
          (while (> i 0)
-           (insert-char ?  (* (/ (window-width) 2 width) width))
+           (insert-char ?  (* (+ (/ (window-width) 2 width) 1) width))
            (setq beg (point))
            (insert-char ?  width)
            (set-text-properties beg (point) '(face gnus-splash))
          (goto-char (point-min))
          (sit-for 0))))))
 
+(if (fboundp 'split-string)
+    (fset 'gnus-split-string 'split-string)
+  (defun gnus-split-string (string pattern)
+    "Return a list of substrings of STRING which are separated by PATTERN."
+    (let (parts (start 0))
+      (while (string-match pattern string start)
+       (setq parts (cons (substring string start (match-beginning 0)) parts)
+             start (match-end 0)))
+      (nreverse (cons (substring string start) parts)))))
+
 (provide 'gnus-ems)
 
 ;; Local Variables:
index 7e6381f..de68a6d 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-gl.el --- an interface to GroupLens for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Brad Miller <bmiller@cs.umn.edu>
 ;; Keywords: news, score
@@ -257,7 +257,8 @@ If this times out we give up and assume that something has died..." )
   (catch 'done
     (condition-case error
        (setq grouplens-bbb-process
-             (open-network-stream "BBBD" grouplens-bbb-buffer host port))
+             (open-network-stream-as-binary
+              "BBBD" grouplens-bbb-buffer host port))
       (error (gnus-message 3 "Error: Failed to connect to BBB")
             nil))
     (and (null grouplens-bbb-process)
@@ -765,7 +766,7 @@ If prefix argument ALL is non-nil, all articles are marked as read."
 (defun gnus-gl-get-trace ()
   "Insert the contents of the BBBD trace buffer."
   (when grouplens-bbb-buffer
-    (insert-buffer-substring grouplens-bbb-buffer)))
+    (insert-buffer grouplens-bbb-buffer)))
 
 ;;
 ;; GroupLens minor mode
index 4e8f15f..d56f5ce 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-group.el --- group mode commands for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -35,7 +35,6 @@
 (require 'gnus-range)
 (require 'gnus-win)
 (require 'gnus-undo)
-(require 'time-date)
 
 (defcustom gnus-group-archive-directory
   "*ftp@ftp.hpc.uh.edu:/pub/emacs/ding-list/"
@@ -49,7 +48,7 @@
   :group 'gnus-group-foreign
   :type 'directory)
 
-(defcustom gnus-no-groups-message "No gnus is bad news"
+(defcustom gnus-no-groups-message "No news is no news"
   "*Message displayed by Gnus when no groups are available."
   :group 'gnus-start
   :type 'string)
@@ -90,7 +89,7 @@ unread articles in the groups.
 
 If nil, no groups are permanently visible."
   :group 'gnus-group-listing
-  :type '(choice regexp (const nil)))
+  :type 'regexp)
 
 (defcustom gnus-list-groups-with-ticked-articles t
   "*If non-nil, list groups that have only ticked articles.
@@ -299,18 +298,6 @@ variable."
      gnus-group-news-3-empty-face)
     ((and (not mailp) (eq level 3)) .
      gnus-group-news-3-face)
-    ((and (= unread 0) (not mailp) (eq level 4)) .
-     gnus-group-news-4-empty-face)
-    ((and (not mailp) (eq level 4)) .
-     gnus-group-news-4-face)
-    ((and (= unread 0) (not mailp) (eq level 5)) .
-     gnus-group-news-5-empty-face)
-    ((and (not mailp) (eq level 5)) .
-     gnus-group-news-5-face)
-    ((and (= unread 0) (not mailp) (eq level 6)) .
-     gnus-group-news-6-empty-face)
-    ((and (not mailp) (eq level 6)) .
-     gnus-group-news-6-face)
     ((and (= unread 0) (not mailp)) .
      gnus-group-news-low-empty-face)
     ((and (not mailp)) .
@@ -776,12 +763,14 @@ The following commands are available:
   (gnus-group-set-mode-line)
   (setq mode-line-process nil)
   (use-local-map gnus-group-mode-map)
-  (buffer-disable-undo)
+  (buffer-disable-undo (current-buffer))
   (setq truncate-lines t)
   (setq buffer-read-only t)
   (gnus-set-default-directory)
   (gnus-update-format-specifications nil 'group 'group-mode)
   (gnus-update-group-mark-positions)
+  (make-local-hook 'post-command-hook)
+  (add-hook 'post-command-hook 'gnus-clear-inboxes-moved nil t)
   (when gnus-use-undo
     (gnus-undo-mode 1))
   (when gnus-slave
@@ -802,6 +791,9 @@ The following commands are available:
            (list (cons 'process (and (search-forward "\200" nil t)
                                      (- (point) 2))))))))
 
+(defun gnus-clear-inboxes-moved ()
+  (setq nnmail-moved-inboxes nil))
+
 (defun gnus-mouse-pick-group (e)
   "Enter the group under the mouse pointer."
   (interactive "e")
@@ -846,6 +838,8 @@ Also see the `gnus-group-use-permanent-levels' variable."
            (gnus-group-default-level nil t)
            gnus-group-default-list-level
            gnus-level-subscribed))))
+  ;; Just do this here, for no particular good reason.
+  (gnus-clear-inboxes-moved)
   (unless level
     (setq level (car gnus-group-list-mode)
          unread (cdr gnus-group-list-mode)))
@@ -1333,7 +1327,7 @@ If FIRST-TOO, the current line is also eligible as a target."
        (beginning-of-line)
        (forward-char (or (cdr (assq 'process gnus-group-mark-positions)) 2))
        (subst-char-in-region
-        (point) (1+ (point)) (char-after)
+        (point) (1+ (point)) (following-char)
         (if unmark
             (progn
               (setq gnus-group-marked (delete group gnus-group-marked))
@@ -1808,7 +1802,7 @@ ADDRESS."
     (gnus-read-method "From method: ")))
 
   (when (stringp method)
-    (setq method (or (gnus-server-to-method method) 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)
@@ -2161,7 +2155,7 @@ score file entries for articles to include in the group."
        (push (cons header regexps) scores))
       scores)))
   (gnus-group-make-group group "nnkiboze" address)
-  (with-temp-file (gnus-score-file-name (concat "nnkiboze:" group))
+  (nnheader-temp-write (gnus-score-file-name (concat "nnkiboze:" group))
     (let (emacs-lisp-mode-hook)
       (pp scores (current-buffer)))))
 
@@ -2306,52 +2300,46 @@ If REVERSE, sort in reverse order."
     ;; Go through all the infos and replace the old entries
     ;; with the new infos.
     (while infos
-      (setcar (car entries) (pop infos))
+      (setcar entries (pop infos))
       (pop entries))
     ;; Update the hashtable.
     (gnus-make-hashtable-from-newsrc-alist)))
 
-(defun gnus-group-sort-selected-groups-by-alphabet (&optional n reverse)
+(defun gnus-group-sort-selected-groups-by-alphabet (&optional reverse)
   "Sort the group buffer alphabetically by group name.
-Obeys the process/prefix convention.  If REVERSE (the symbolic prefix),
-sort in reverse order."
-  (interactive (gnus-interactive "P\ny"))
-  (gnus-group-sort-selected-groups n 'gnus-group-sort-by-alphabet reverse))
+If REVERSE, sort in reverse order."
+  (interactive "P")
+  (gnus-group-sort-selected-groups 'gnus-group-sort-by-alphabet reverse))
 
-(defun gnus-group-sort-selected-groups-by-unread (&optional n reverse)
+(defun gnus-group-sort-selected-groups-by-unread (&optional reverse)
   "Sort the group buffer by number of unread articles.
-Obeys the process/prefix convention.  If REVERSE (the symbolic prefix),
-sort in reverse order."
-  (interactive (gnus-interactive "P\ny"))
-  (gnus-group-sort-selected-groups n 'gnus-group-sort-by-unread reverse))
+If REVERSE, sort in reverse order."
+  (interactive "P")
+  (gnus-group-sort-selected-groups 'gnus-group-sort-by-unread reverse))
 
-(defun gnus-group-sort-selected-groups-by-level (&optional n reverse)
+(defun gnus-group-sort-selected-groups-by-level (&optional reverse)
   "Sort the group buffer by group level.
-Obeys the process/prefix convention.  If REVERSE (the symbolic prefix),
-sort in reverse order."
-  (interactive (gnus-interactive "P\ny"))
-  (gnus-group-sort-selected-groups n 'gnus-group-sort-by-level reverse))
+If REVERSE, sort in reverse order."
+  (interactive "P")
+  (gnus-group-sort-selected-groups 'gnus-group-sort-by-level reverse))
 
-(defun gnus-group-sort-selected-groups-by-score (&optional n reverse)
+(defun gnus-group-sort-selected-groups-by-score (&optional reverse)
   "Sort the group buffer by group score.
-Obeys the process/prefix convention.  If REVERSE (the symbolic prefix),
-sort in reverse order."
-  (interactive (gnus-interactive "P\ny"))
-  (gnus-group-sort-selected-groups n 'gnus-group-sort-by-score reverse))
+If REVERSE, sort in reverse order."
+  (interactive "P")
+  (gnus-group-sort-selected-groups 'gnus-group-sort-by-score reverse))
 
-(defun gnus-group-sort-selected-groups-by-rank (&optional n reverse)
+(defun gnus-group-sort-selected-groups-by-rank (&optional reverse)
   "Sort the group buffer by group rank.
-Obeys the process/prefix convention.  If REVERSE (the symbolic prefix),
-sort in reverse order."
-  (interactive (gnus-interactive "P\ny"))
-  (gnus-group-sort-selected-groups n 'gnus-group-sort-by-rank reverse))
+If REVERSE, sort in reverse order."
+  (interactive "P")
+  (gnus-group-sort-selected-groups 'gnus-group-sort-by-rank reverse))
 
-(defun gnus-group-sort-selected-groups-by-method (&optional n reverse)
+(defun gnus-group-sort-selected-groups-by-method (&optional reverse)
   "Sort the group buffer alphabetically by backend name.
-Obeys the process/prefix convention.  If REVERSE (the symbolic prefix),
-sort in reverse order."
-  (interactive (gnus-interactive "P\ny"))
-  (gnus-group-sort-selected-groups n 'gnus-group-sort-by-method reverse))
+If REVERSE, sort in reverse order."
+  (interactive "P")
+  (gnus-group-sort-selected-groups 'gnus-group-sort-by-method reverse))
 
 ;;; Sorting predicates.
 
@@ -2446,8 +2434,7 @@ The number of newsgroups that this function was unable to catch
 up is returned."
   (interactive "P")
   (let ((groups (gnus-group-process-prefix n))
-       (ret 0)
-       group)
+       (ret 0))
     (unless groups (error "No groups selected"))
     (if (not
         (or (not gnus-interactive-catchup) ;Without confirmation?
@@ -2461,21 +2448,21 @@ up is returned."
                   (car groups)
                 (format "these %d groups" (length groups)))))))
        n
-      (while (setq group (pop groups))
-       (gnus-group-remove-mark group)
+      (while groups
        ;; Virtual groups have to be given special treatment.
-       (let ((method (gnus-find-method-for-group group)))
+       (let ((method (gnus-find-method-for-group (car groups))))
          (when (eq 'nnvirtual (car method))
            (nnvirtual-catchup-group
-            (gnus-group-real-name group) (nth 1 method) all)))
-       (if (>= (gnus-info-level (gnus-get-info group))
-               gnus-level-zombie)
+            (gnus-group-real-name (car groups)) (nth 1 method) all)))
+       (gnus-group-remove-mark (car groups))
+       (if (>= (gnus-group-group-level) gnus-level-zombie)
            (gnus-message 2 "Dead groups can't be caught up")
          (if (prog1
-                 (gnus-group-goto-group group)
-               (gnus-group-catchup group all))
+                 (gnus-group-goto-group (car groups))
+               (gnus-group-catchup (car groups) all))
              (gnus-group-update-group-line)
-           (setq ret (1+ ret)))))
+           (setq ret (1+ ret))))
+       (setq groups (cdr groups)))
       (gnus-group-next-unread-group 1)
       ret)))
 
@@ -2524,35 +2511,32 @@ or nil if no action could be taken."
       (error "No groups to expire"))
     (while (setq group (pop groups))
       (gnus-group-remove-mark group)
-      (gnus-group-expire-articles-1 group)
+      (when (gnus-check-backend-function 'request-expire-articles group)
+       (gnus-message 6 "Expiring articles in %s..." group)
+       (let* ((info (gnus-get-info group))
+              (expirable (if (gnus-group-total-expirable-p group)
+                             (cons nil (gnus-list-of-read-articles group))
+                           (assq 'expire (gnus-info-marks info))))
+              (expiry-wait (gnus-group-find-parameter group 'expiry-wait)))
+         (when expirable
+           (setcdr
+            expirable
+            (gnus-compress-sequence
+             (if expiry-wait
+                 ;; We set the expiry variables to the group
+                 ;; parameter.
+                 (let ((nnmail-expiry-wait-function nil)
+                       (nnmail-expiry-wait expiry-wait))
+                   (gnus-request-expire-articles
+                    (gnus-uncompress-sequence (cdr expirable)) group))
+               ;; Just expire using the normal expiry values.
+               (gnus-request-expire-articles
+                (gnus-uncompress-sequence (cdr expirable)) group))))
+           (gnus-close-group group))
+         (gnus-message 6 "Expiring articles in %s...done" group)))
       (gnus-dribble-touch)
       (gnus-group-position-point))))
 
-(defun gnus-group-expire-articles-1 (group)
-  (when (gnus-check-backend-function 'request-expire-articles group)
-    (gnus-message 6 "Expiring articles in %s..." group)
-    (let* ((info (gnus-get-info group))
-          (expirable (if (gnus-group-total-expirable-p group)
-                         (cons nil (gnus-list-of-read-articles group))
-                       (assq 'expire (gnus-info-marks info))))
-          (expiry-wait (gnus-group-find-parameter group 'expiry-wait)))
-      (when expirable
-       (setcdr
-        expirable
-        (gnus-compress-sequence
-         (if expiry-wait
-             ;; We set the expiry variables to the group
-             ;; parameter.
-             (let ((nnmail-expiry-wait-function nil)
-                   (nnmail-expiry-wait expiry-wait))
-               (gnus-request-expire-articles
-                (gnus-uncompress-sequence (cdr expirable)) group))
-           ;; Just expire using the normal expiry values.
-           (gnus-request-expire-articles
-            (gnus-uncompress-sequence (cdr expirable)) group))))
-       (gnus-close-group group))
-      (gnus-message 6 "Expiring articles in %s...done" group))))
-
 (defun gnus-group-expire-all-groups ()
   "Expire all expirable articles in all newsgroups."
   (interactive)
@@ -2579,7 +2563,7 @@ or nil if no action could be taken."
                              gnus-level-default-subscribed))
         s)))))
   (unless (and (>= level 1) (<= level gnus-level-killed))
-    (error "Invalid level: %d" level))
+    (error "Illegal level: %d" level))
   (let ((groups (gnus-group-process-prefix n))
        group)
     (while (setq group (pop groups))
@@ -2683,11 +2667,10 @@ N and the number of steps taken is returned."
 (defun gnus-group-kill-all-zombies ()
   "Kill all zombie newsgroups."
   (interactive)
-  (when (gnus-yes-or-no-p "Really kill all zombies? ")
-    (setq gnus-killed-list (nconc gnus-zombie-list gnus-killed-list))
-    (setq gnus-zombie-list nil)
-    (gnus-dribble-touch)
-    (gnus-group-list-groups)))
+  (setq gnus-killed-list (nconc gnus-zombie-list gnus-killed-list))
+  (setq gnus-zombie-list nil)
+  (gnus-dribble-touch)
+  (gnus-group-list-groups))
 
 (defun gnus-group-kill-region (begin end)
   "Kill newsgroups in current region (excluding current point).
@@ -2736,8 +2719,7 @@ of groups killed."
            (push (cons (car entry) (nth 2 entry))
                  gnus-list-of-killed-groups))
          (gnus-group-change-level
-          (if entry entry group) gnus-level-killed (if entry nil level))
-         (message "Killed group %s" group))
+          (if entry entry group) gnus-level-killed (if entry nil level)))
       ;; If there are lots and lots of groups to be killed, we use
       ;; this thing instead.
       (let (entry)
@@ -2823,7 +2805,7 @@ yanked) a list of yanked groups is returned."
       (gnus-make-hashtable-from-newsrc-alist)
       (gnus-group-list-groups)))
    (t
-    (error "Can't kill; invalid level: %d" level))))
+    (error "Can't kill; illegal level: %d" level))))
 
 (defun gnus-group-list-all-groups (&optional arg)
   "List all newsgroups with level ARG or lower.
@@ -2906,11 +2888,7 @@ If ARG is a number, it specifies which levels you are interested in
 re-scanning.  If ARG is non-nil and not a number, this will force
 \"hard\" re-reading of the active files from all servers."
   (interactive "P")
-  (require 'nnmail)
-  (let ((gnus-inhibit-demon t)
-       ;; Binding this variable will inhibit multiple fetchings
-       ;; of the same mail source.
-       (nnmail-fetched-sources (list t)))
+  (let ((gnus-inhibit-demon t))
     (gnus-run-hooks 'gnus-get-new-news-hook)
 
     ;; Read any slave files.
@@ -2962,9 +2940,8 @@ If N is negative, this group and the N-1 previous groups will be checked."
             (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-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)
@@ -3078,7 +3055,7 @@ to use."
       ;; Print out all the groups.
       (save-excursion
        (pop-to-buffer "*Gnus Help*")
-       (buffer-disable-undo)
+       (buffer-disable-undo (current-buffer))
        (erase-buffer)
        (setq groups (sort groups 'string<))
        (while groups
@@ -3288,60 +3265,59 @@ and the second element is the address."
   (gnus-browse-foreign-server method))
 
 (defun gnus-group-set-info (info &optional method-only-group part)
-  (when info
-    (let* ((entry (gnus-gethash
-                  (or method-only-group (gnus-info-group info))
-                  gnus-newsrc-hashtb))
-          (part-info info)
-          (info (if method-only-group (nth 2 entry) info))
-          method)
-      (when method-only-group
-       (unless entry
-         (error "Trying to change non-existent group %s" method-only-group))
-       ;; We have received parts of the actual group info - either the
-       ;; select method or the group parameters.        We first check
-       ;; whether we have to extend the info, and if so, do that.
-       (let ((len (length info))
-             (total (if (eq part 'method) 5 6)))
-         (when (< len total)
-           (setcdr (nthcdr (1- len) info)
-                   (make-list (- total len) nil)))
-         ;; Then we enter the new info.
-         (setcar (nthcdr (1- total) info) part-info)))
+  (let* ((entry (gnus-gethash
+                (or method-only-group (gnus-info-group info))
+                gnus-newsrc-hashtb))
+        (part-info info)
+        (info (if method-only-group (nth 2 entry) info))
+        method)
+    (when method-only-group
       (unless entry
-       ;; This is a new group, so we just create it.
+       (error "Trying to change non-existent group %s" method-only-group))
+      ;; We have received parts of the actual group info - either the
+      ;; select method or the group parameters.         We first check
+      ;; whether we have to extend the info, and if so, do that.
+      (let ((len (length info))
+           (total (if (eq part 'method) 5 6)))
+       (when (< len total)
+         (setcdr (nthcdr (1- len) info)
+                 (make-list (- total len) nil)))
+       ;; Then we enter the new info.
+       (setcar (nthcdr (1- total) info) part-info)))
+    (unless entry
+      ;; This is a new group, so we just create it.
+      (save-excursion
+       (set-buffer gnus-group-buffer)
+       (setq method (gnus-info-method info))
+       (when (gnus-server-equal method "native")
+         (setq method nil))
        (save-excursion
          (set-buffer gnus-group-buffer)
-         (setq method (gnus-info-method info))
-         (when (gnus-server-equal method "native")
-           (setq method nil))
-         (save-excursion
-           (set-buffer gnus-group-buffer)
-           (if method
-               ;; It's a foreign group...
-               (gnus-group-make-group
-                (gnus-group-real-name (gnus-info-group info))
-                (if (stringp method) method
-                  (prin1-to-string (car method)))
-                (and (consp method)
-                     (nth 1 (gnus-info-method info))))
-             ;; It's a native group.
-             (gnus-group-make-group (gnus-info-group info))))
-         (gnus-message 6 "Note: New group created")
-         (setq entry
-               (gnus-gethash (gnus-group-prefixed-name
-                              (gnus-group-real-name (gnus-info-group info))
-                              (or (gnus-info-method info) gnus-select-method))
-                             gnus-newsrc-hashtb))))
-      ;; Whether it was a new group or not, we now have the entry, so we
-      ;; can do the update.
-      (if entry
-         (progn
-           (setcar (nthcdr 2 entry) info)
-           (when (and (not (eq (car entry) t))
-                      (gnus-active (gnus-info-group info)))
-             (setcar entry (length (gnus-list-of-unread-articles (car info))))))
-       (error "No such group: %s" (gnus-info-group info))))))
+         (if method
+             ;; It's a foreign group...
+             (gnus-group-make-group
+              (gnus-group-real-name (gnus-info-group info))
+              (if (stringp method) method
+                (prin1-to-string (car method)))
+              (and (consp method)
+                   (nth 1 (gnus-info-method info))))
+           ;; It's a native group.
+           (gnus-group-make-group (gnus-info-group info))))
+       (gnus-message 6 "Note: New group created")
+       (setq entry
+             (gnus-gethash (gnus-group-prefixed-name
+                            (gnus-group-real-name (gnus-info-group info))
+                            (or (gnus-info-method info) gnus-select-method))
+                           gnus-newsrc-hashtb))))
+    ;; Whether it was a new group or not, we now have the entry, so we
+    ;; can do the update.
+    (if entry
+       (progn
+         (setcar (nthcdr 2 entry) info)
+         (when (and (not (eq (car entry) t))
+                    (gnus-active (gnus-info-group info)))
+           (setcar entry (length (gnus-list-of-unread-articles (car info))))))
+      (error "No such group: %s" (gnus-info-group info)))))
 
 (defun gnus-group-set-method-info (group select-method)
   (gnus-group-set-info select-method group 'method))
@@ -3351,26 +3327,26 @@ and the second element is the address."
 
 (defun gnus-add-marked-articles (group type articles &optional info force)
   ;; Add ARTICLES of TYPE to the info of GROUP.
-  ;; If INFO is non-nil, use that info.         If FORCE is non-nil, don't
+  ;; If INFO is non-nil, use that info.         If FORCE is non-nil, don't
   ;; add, but replace marked articles of TYPE with ARTICLES.
   (let ((info (or info (gnus-get-info group)))
        marked m)
     (or (not info)
        (and (not (setq marked (nthcdr 3 info)))
             (or (null articles)
-                (setcdr (nthcdr 2 info)
-                        (list (list (cons type (gnus-compress-sequence
-                                                articles t)))))))
+                (setcdr (nthcdr 2 info)
+                        (list (list (cons type (gnus-compress-sequence
+                                                articles t)))))))
        (and (not (setq m (assq type (car marked))))
             (or (null articles)
-                (setcar marked
-                        (cons (cons type (gnus-compress-sequence articles t) )
-                              (car marked)))))
+                (setcar marked
+                        (cons (cons type (gnus-compress-sequence articles t) )
+                              (car marked)))))
        (if force
            (if (null articles)
-               (setcar (nthcdr 3 info)
-                       (gnus-delete-alist type (car marked)))
-             (setcdr m (gnus-compress-sequence articles t)))
+               (setcar (nthcdr 3 info)
+                       (gnus-delete-alist type (car marked)))
+             (setcdr m (gnus-compress-sequence articles t)))
          (setcdr m (gnus-compress-sequence
                     (sort (nconc (gnus-uncompress-range (cdr m))
                                  (copy-sequence articles)) '<) t))))))
@@ -3396,7 +3372,7 @@ or `gnus-group-catchup-group-hook'."
   "Return the offset in seconds from the timestamp for GROUP to the current time, as a floating point number."
   (let* ((time (or (gnus-group-timestamp group)
                  (list 0 0)))
-         (delta (subtract-time (current-time) time)))
+         (delta (gnus-time-minus (current-time) time)))
     (+ (* (nth 0 delta) 65536.0)
        (nth 1 delta))))
 
diff --git a/lisp/gnus-i18n.el b/lisp/gnus-i18n.el
new file mode 100644 (file)
index 0000000..78eeb03
--- /dev/null
@@ -0,0 +1,95 @@
+;;; gnus-i18n.el --- Internationalization for Gnus
+
+;; Copyright (C) 1996,1997 Free Software Foundation, Inc.
+
+;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Created: 1997/11/27
+;; Keywords: internationalization, news, mail
+
+;; This file is not part of GNU Emacs yet.
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2, or (at
+;; your option) any later version.
+
+;; This program is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Code:
+
+;;; @ newsgroup default charset
+;;;
+
+(defvar gnus-newsgroup-default-charset-alist
+  '(("^\\(fj\\|tnn\\|japan\\)\\."      . iso-2022-jp-2)
+    ("^han\\."                         . euc-kr)
+    ("^relcom\\."                      . koi8-r)
+    ("^alt\\.chinese\\.text\\.big5"    . cn-big5)
+    ("^hk\\(star\\)?\\."               . cn-big5)
+    ("^tw\\."                          . cn-big5)
+    ("^alt\\.chinese"                  . hz-gb-2312)
+    )
+  "Alist of newsgroup patterns vs. corresponding default MIME charset.
+Each element looks like (REGEXP . SYMBOL).  REGEXP is pattern for
+newsgroup name.  SYMBOL is MIME charset or coding-system.")
+
+(defun gnus-set-newsgroup-default-charset (newsgroup charset)
+  "Set CHARSET for the NEWSGROUP as default MIME charset."
+  (let* ((ng-regexp (concat "^" (regexp-quote newsgroup) "\\($\\|\\.\\)"))
+        (pair (assoc ng-regexp gnus-newsgroup-default-charset-alist))
+        )
+    (if pair
+       (setcdr pair charset)
+      (setq gnus-newsgroup-default-charset-alist
+           (cons (cons ng-regexp charset)
+                 gnus-newsgroup-default-charset-alist))
+      )))
+
+
+;;; @ localization
+;;;
+
+(defun gnus-set-summary-default-charset ()
+  "Set up `default-mime-charset' of summary buffer.
+It is specified by variable `gnus-newsgroup-default-charset-alist'
+\(cf. function `gnus-set-newsgroup-default-charset')."
+  (if (buffer-live-p gnus-summary-buffer)
+      (let ((charset
+            (catch 'found
+              (let ((group
+                     (save-excursion
+                       (set-buffer gnus-summary-buffer)
+                       gnus-newsgroup-name))
+                    (alist gnus-newsgroup-default-charset-alist))
+                (while alist
+                  (let ((pair (car alist)))
+                    (if (string-match (car pair) group)
+                        (throw 'found (cdr pair))
+                      ))
+                  (setq alist (cdr alist)))
+                ))))
+       (if charset
+            (progn
+              (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))
+         (kill-local-variable 'default-mime-charset)))))
+
+
+;;; @ end
+;;;
+
+(provide 'gnus-i18n)
+
+;;; gnus-i18n.el ends here
index a382bb0..8143d0d 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-int.el --- backend interface functions for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -91,7 +91,6 @@ If CONFIRM is non-nil, the user will be asked for an NNTP server."
        ;; gnus-open-server-hook might have opened it
        (gnus-server-opened gnus-select-method)
        (gnus-open-server gnus-select-method)
-       gnus-batch-mode
        (gnus-y-or-n-p
        (format
         "%s (%s) open error: '%s'.  Continue? "
@@ -269,14 +268,6 @@ this group uses will be queried."
       (funcall (gnus-get-function gnus-command-method func)
               (gnus-group-real-name group) (nth 1 gnus-command-method)))))
 
-(defun gnus-request-group-articles (group)
-  "Request a list of existing articles in GROUP."
-  (let ((gnus-command-method (gnus-find-method-for-group group))
-       (func 'request-group-articles))
-    (when (gnus-check-backend-function func group)
-      (funcall (gnus-get-function gnus-command-method func)
-              (gnus-group-real-name group) (nth 1 gnus-command-method)))))
-
 (defun gnus-close-group (group)
   "Request the GROUP be closed."
   (let ((gnus-command-method (inline (gnus-find-method-for-group group))))
@@ -316,16 +307,6 @@ If FETCH-OLD, retrieve all headers (or some subset thereof) in the group."
       (funcall (gnus-get-function gnus-command-method 'request-type)
               (gnus-group-real-name group) article))))
 
-(defun gnus-request-set-mark (group action)
-  "Set marks on articles in the backend."
-  (let ((gnus-command-method (gnus-find-method-for-group group)))
-    (if (not (gnus-check-backend-function
-             'request-set-mark (car gnus-command-method)))
-       action
-      (funcall (gnus-get-function gnus-command-method 'request-set-mark)
-              (gnus-group-real-name group) action
-              (nth 1 gnus-command-method)))))
-
 (defun gnus-request-update-mark (group article mark)
   "Allow the backend to change the mark the user tries to put on an article."
   (let ((gnus-command-method (gnus-find-method-for-group group)))
@@ -442,8 +423,7 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
             article (gnus-group-real-name group)
             (nth 1 gnus-command-method) accept-function last)))
 
-(defun gnus-request-accept-article (group &optional gnus-command-method last
-                                         no-encode)
+(defun gnus-request-accept-article (group &optional gnus-command-method last)
   ;; Make sure there's a newline at the end of the article.
   (when (stringp gnus-command-method)
     (setq gnus-command-method (gnus-server-to-method gnus-command-method)))
@@ -453,11 +433,6 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
   (goto-char (point-max))
   (unless (bolp)
     (insert "\n"))
-  (unless no-encode
-    (save-restriction
-      (message-narrow-to-head)
-      (mail-encode-encoded-word-buffer))
-    (message-encode-message-body))
   (let ((func (car (or gnus-command-method
                       (gnus-find-method-for-group group)))))
     (funcall (intern (format "%s-request-accept-article" func))
@@ -465,12 +440,7 @@ If GROUP is nil, all groups on GNUS-COMMAND-METHOD are scanned."
             (cadr gnus-command-method)
             last)))
 
-(defun gnus-request-replace-article (article group buffer &optional no-encode)
-  (unless no-encode
-    (save-restriction
-      (message-narrow-to-head)
-      (mail-encode-encoded-word-buffer))
-    (message-encode-message-body))
+(defun gnus-request-replace-article (article group buffer)
   (let ((func (car (gnus-group-name-to-method group))))
     (funcall (intern (format "%s-request-replace-article" func))
             article (gnus-group-real-name group) buffer)))
index 6121552..abcc401 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-kill.el --- kill commands for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -429,7 +429,7 @@ Returns the number of articles marked as read."
 (defun gnus-score-insert-help (string alist idx)
   (save-excursion
     (pop-to-buffer "*Score Help*")
-    (buffer-disable-undo)
+    (buffer-disable-undo (current-buffer))
     (erase-buffer)
     (insert string ":\n\n")
     (while alist
@@ -444,7 +444,7 @@ Returns the number of articles marked as read."
             (setq beg (point))
             (setq form (ignore-errors (read (current-buffer)))))
       (unless (listp form)
-       (error "Invalid kill entry (possibly rn kill file?): %s" form))
+       (error "Illegal kill entry (possibly rn kill file?): %s" form))
       (if (or (eq (car form) 'gnus-kill)
              (eq (car form) 'gnus-raise)
              (eq (car form) 'gnus-lower))
@@ -524,7 +524,7 @@ COMMAND must be a lisp expression or a string representing a key sequence."
                  ;; It's on the form (regexp . date).
                  (if (zerop (gnus-execute field (car kill-list)
                                           command nil (not all)))
-                     (when (> (days-between date (cdr kill-list))
+                     (when (> (gnus-days-between date (cdr kill-list))
                               gnus-kill-expiry-days)
                        (setq regexp nil))
                    (setcdr kill-list date))
@@ -535,7 +535,7 @@ COMMAND must be a lisp expression or a string representing a key sequence."
                        (setq kdate (cdr kill))
                        (if (zerop (gnus-execute
                                    field (car kill) command nil (not all)))
-                           (when (> (days-between date kdate)
+                           (when (> (gnus-days-between date kdate)
                                     gnus-kill-expiry-days)
                              ;; Time limit has been exceeded, so we
                              ;; remove the match.
@@ -566,7 +566,7 @@ COMMAND must be a lisp expression or a string representing a key sequence."
       (concat "\n" (gnus-prin1-to-string object))
     (save-excursion
       (set-buffer (gnus-get-buffer-create "*Gnus PP*"))
-      (buffer-disable-undo)
+      (buffer-disable-undo (current-buffer))
       (erase-buffer)
       (insert (format "\n(%S %S\n  '(" (nth 0 object) (nth 1 object)))
       (let ((klist (cadr (nth 2 object)))
@@ -702,8 +702,7 @@ Usage: emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score"
                 (and (car entry)
                      (or (eq (car entry) t)
                          (not (zerop (car entry))))))
-       (ignore-errors
-         (gnus-summary-read-group group nil t nil t))
+       (gnus-summary-read-group group nil t nil t)
        (when (eq (current-buffer) (get-buffer gnus-summary-buffer))
          (gnus-summary-exit))))
     ;; Exit Emacs.
index 0b14ce0..c276a0b 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-logic.el --- advanced scoring code for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
      ((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)))))
 
                      ((memq type '(s S string String))
                       'search-forward)
                      (t
-                      (error "Invalid match type: %s" type)))))
+                      (error "Illegal match type: %s" type)))))
          (goto-char (point-min))
          (prog1
              (funcall search-func match nil t)
diff --git a/lisp/gnus-mailcap.el b/lisp/gnus-mailcap.el
deleted file mode 100644 (file)
index a352f5b..0000000
+++ /dev/null
@@ -1,850 +0,0 @@
-;;; mailcap.el --- Functions for displaying MIME parts
-;; Copyright (C) 1998 Free Software Foundation, Inc.
-
-;; Author: William M. Perry <wmperry@aventail.com>
-;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: news, mail
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;;; Code:
-
-(eval-and-compile
-  (require 'cl))
-(require 'mail-parse)
-
-(defvar mailcap-parse-args-syntax-table
-  (let ((table (copy-syntax-table emacs-lisp-mode-syntax-table)))
-    (modify-syntax-entry ?' "\"" table)
-    (modify-syntax-entry ?` "\"" table)
-    (modify-syntax-entry ?{ "(" table)
-    (modify-syntax-entry ?} ")" table)
-    table)
-  "A syntax table for parsing sgml attributes.")
-
-(defvar mailcap-mime-data
-  '(("application"
-     ("x-x509-ca-cert"
-      (viewer . ssl-view-site-cert)
-      (test . (fboundp 'ssl-view-site-cert))
-      (type . "application/x-x509-ca-cert"))
-     ("x-x509-user-cert"
-      (viewer . ssl-view-user-cert)
-      (test . (fboundp 'ssl-view-user-cert))
-      (type . "application/x-x509-user-cert"))
-     ("octet-stream"
-      (viewer . mailcap-save-binary-file)
-      (type ."application/octet-stream"))
-     ("dvi"
-      (viewer . "open %s")
-      (type   . "application/dvi")
-      (test   . (eq (mm-device-type) 'ns)))
-     ("dvi"
-      (viewer . "xdvi %s")
-      (test   . (eq (mm-device-type) 'x))
-      ("needsx11")
-      (type   . "application/dvi"))
-     ("dvi"
-      (viewer . "dvitty %s")
-      (test   . (not (getenv "DISPLAY")))
-      (type   . "application/dvi"))
-     ("emacs-lisp"
-      (viewer . mailcap-maybe-eval)
-      (type   . "application/emacs-lisp"))
-     ("x-tar"
-      (viewer . mailcap-save-binary-file)
-      (type   . "application/x-tar"))
-     ("x-latex"
-      (viewer . tex-mode)
-      (test   . (fboundp 'tex-mode))
-      (type   . "application/x-latex"))
-     ("x-tex"
-      (viewer . tex-mode)
-      (test   . (fboundp 'tex-mode))
-      (type   . "application/x-tex"))
-     ("latex"
-      (viewer . tex-mode)
-      (test   . (fboundp 'tex-mode))
-      (type   . "application/latex"))
-     ("tex"
-      (viewer . tex-mode)
-      (test   . (fboundp 'tex-mode))
-      (type   . "application/tex"))
-     ("texinfo"
-      (viewer . texinfo-mode)
-      (test   . (fboundp 'texinfo-mode))
-      (type   . "application/tex"))
-     ("zip"
-      (viewer . mailcap-save-binary-file)
-      (type   . "application/zip")
-      ("copiousoutput"))
-     ("pdf"
-      (viewer . "acroread %s")
-      (type   . "application/pdf"))
-     ("postscript"
-      (viewer . "open %s")
-      (type   . "application/postscript")
-      (test   . (eq (mm-device-type) 'ns)))
-     ("postscript"
-      (viewer . "ghostview %s")
-      (type . "application/postscript")
-      (test   . (eq (mm-device-type) 'x))
-      ("needsx11"))
-     ("postscript"
-      (viewer . "ps2ascii %s")
-      (type . "application/postscript")
-      (test . (not (getenv "DISPLAY")))
-      ("copiousoutput")))
-    ("audio"
-     ("x-mpeg"
-      (viewer . "maplay %s")
-      (type   . "audio/x-mpeg"))
-     (".*"
-      (viewer . mailcap-save-binary-file)
-      (test   . (or (featurep 'nas-sound)
-                     (featurep 'native-sound)))
-      (type   . "audio/*"))
-     (".*"
-      (viewer . "showaudio")
-      (type   . "audio/*")))
-    ("message"
-     ("rfc-*822"
-      (viewer . gnus-article-prepare-display)
-      (test   . (and (featurep 'gnus)
-                    (gnus-alive-p)))
-      (type   . "message/rfc-822"))
-     ("rfc-*822"
-      (viewer . vm-mode)
-      (test   . (fboundp 'vm-mode))
-      (type   . "message/rfc-822"))
-     ("rfc-*822"
-      (viewer . w3-mode)
-      (test   . (fboundp 'w3-mode))
-      (type   . "message/rfc-822"))
-     ("rfc-*822"
-      (viewer . view-mode)
-      (test   . (fboundp 'view-mode))
-      (type   . "message/rfc-822"))
-     ("rfc-*822"
-      (viewer . fundamental-mode)
-      (type   . "message/rfc-822")))
-    ("image"
-     ("x-xwd"
-      (viewer  . "xwud -in %s")
-      (type    . "image/x-xwd")
-      ("compose" . "xwd -frame > %s")
-      (test    . (eq (mm-device-type) 'x))
-      ("needsx11"))
-     ("x11-dump"
-      (viewer . "xwud -in %s")
-      (type . "image/x-xwd")
-      ("compose" . "xwd -frame > %s")
-      (test   . (eq (mm-device-type) 'x))
-      ("needsx11"))
-     ("windowdump"
-      (viewer . "xwud -in %s")
-      (type . "image/x-xwd")
-      ("compose" . "xwd -frame > %s")
-      (test   . (eq (mm-device-type) 'x))
-      ("needsx11"))
-     (".*"
-      (viewer . "aopen %s")
-      (type   . "image/*")
-      (test   . (eq (mm-device-type) 'ns)))
-     (".*"
-      (viewer . "xv -perfect %s")
-      (type . "image/*")
-      (test   . (eq (mm-device-type) 'x))
-      ("needsx11")))
-    ("text"
-     ("plain"
-      (viewer  . w3-mode)
-      (test    . (fboundp 'w3-mode))
-      (type    . "text/plain"))
-     ("plain"
-      (viewer  . view-mode)
-      (test    . (fboundp 'view-mode))
-      (type    . "text/plain"))
-     ("plain"
-      (viewer  . fundamental-mode)
-      (type    . "text/plain"))
-     ("enriched"
-      (viewer . enriched-decode-region)
-      (test   . (fboundp 'enriched-decode))
-      (type   . "text/enriched"))
-     ("html"
-      (viewer . mm-w3-prepare-buffer)
-      (test   . (fboundp 'w3-prepare-buffer))
-      (type   . "text/html")))
-    ("video"
-     ("mpeg"
-      (viewer . "mpeg_play %s")
-      (type   . "video/mpeg")
-      (test   . (eq (mm-device-type) 'x))
-      ("needsx11")))
-    ("x-world"
-     ("x-vrml"
-      (viewer  . "webspace -remote %s -URL %u")
-      (type    . "x-world/x-vrml")
-      ("description"
-       "VRML document")))
-    ("archive"
-     ("tar"
-      (viewer . tar-mode)
-      (type . "archive/tar")
-      (test . (fboundp 'tar-mode)))))
-     "The mailcap structure is an assoc list of assoc lists.
-1st assoc list is keyed on the major content-type
-2nd assoc list is keyed on the minor content-type (which can be a regexp)
-
-Which looks like:
------------------
- ((\"application\"
-   (\"postscript\" . <info>))
-  (\"text\"
-   (\"plain\" . <info>)))
-
-Where <info> is another assoc list of the various information
-related to the mailcap RFC.  This is keyed on the lowercase
-attribute name (viewer, test, etc).  This looks like:
- ((viewer . viewerinfo)
-  (test   . testinfo)
-  (xxxx   . \"string\"))
-
-Where viewerinfo specifies how the content-type is viewed.  Can be
-a string, in which case it is run through a shell, with
-appropriate parameters, or a symbol, in which case the symbol is
-funcall'd, with the buffer as an argument.
-
-testinfo is a list of strings, or nil.  If nil, it means the
-viewer specified is always valid.  If it is a list of strings,
-these are used to determine whether a viewer passes the 'test' or
-not.")
-
-(defvar mailcap-download-directory nil
-  "*Where downloaded files should go by default.")
-
-(defvar mailcap-temporary-directory (or (getenv "TMPDIR") "/tmp")
-  "*Where temporary files go.")
-
-;;;
-;;; Utility functions
-;;;
-
-(defun mailcap-generate-unique-filename (&optional fmt)
-  "Generate a unique filename in mailcap-temporary-directory"
-  (if (not fmt)
-      (let ((base (format "mailcap-tmp.%d" (user-real-uid)))
-           (fname "")
-           (x 0))
-       (setq fname (format "%s%d" base x))
-       (while (file-exists-p
-               (expand-file-name fname mailcap-temporary-directory))
-         (setq x (1+ x)
-               fname (concat base (int-to-string x))))
-       (expand-file-name fname mailcap-temporary-directory))
-    (let ((base (concat "mm" (int-to-string (user-real-uid))))
-         (fname "")
-         (x 0))
-      (setq fname (format fmt (concat base (int-to-string x))))
-      (while (file-exists-p
-             (expand-file-name fname mailcap-temporary-directory))
-       (setq x (1+ x)
-             fname (format fmt (concat base (int-to-string x)))))
-      (expand-file-name fname mailcap-temporary-directory))))
-
-(defun mailcap-save-binary-file ()
-  (goto-char (point-min))
-  (unwind-protect
-      (let ((file (read-file-name
-                  "Filename to save as: "
-                  (or mailcap-download-directory "~/")))
-           (require-final-newline nil))
-       (write-region (point-min) (point-max) file))
-    (kill-buffer (current-buffer))))
-
-(defun mailcap-maybe-eval ()
-  "Maybe evaluate a buffer of emacs lisp code"
-  (if (yes-or-no-p "This is emacs-lisp code, evaluate it? ")
-      (eval-buffer (current-buffer))
-    (emacs-lisp-mode)))
-
-;;;
-;;; The mailcap parser
-;;;
-
-(defun mailcap-replace-regexp (regexp to-string)
-  ;; Quiet replace-regexp.
-  (goto-char (point-min))
-  (while (re-search-forward regexp nil t)
-    (replace-match to-string t nil)))
-
-(defvar mailcap-parsed-p nil)
-
-(defun mailcap-parse-mailcaps (&optional path force)
-  "Parse out all the mailcaps specified in a unix-style path string PATH.
-If FORCE, re-parse even if already parsed."
-  (interactive (list nil t))
-  (when (or (not mailcap-parsed-p)
-           force)
-    (cond
-     (path nil)
-     ((getenv "MAILCAPS") (setq path (getenv "MAILCAPS")))
-     ((memq system-type '(ms-dos ms-windows windows-nt))
-      (setq path (mapconcat 'expand-file-name '("~/mail.cap" "~/etc/mail.cap")
-                           ";")))
-     (t (setq path (mapconcat 'expand-file-name
-                             '("~/.mailcap"
-                               "/etc/mailcap:/usr/etc/mailcap"
-                               "/usr/local/etc/mailcap") ":"))))
-    (let ((fnames (reverse
-                  (split-string
-                   path (if (memq system-type
-                                  '(ms-dos ms-windows windows-nt))
-                            ";"
-                          ":"))))
-         fname)
-      (while fnames
-       (setq fname (car fnames))
-       (if (and (file-exists-p fname) (file-readable-p fname)
-                (file-regular-p fname))
-           (mailcap-parse-mailcap (car fnames)))
-       (setq fnames (cdr fnames))))
-    (setq mailcap-parsed-p t)))
-
-(defun mailcap-parse-mailcap (fname)
-  ;; Parse out the mailcap file specified by FNAME
-  (let (major                          ; The major mime type (image/audio/etc)
-       minor                           ; The minor mime type (gif, basic, etc)
-       save-pos                        ; Misc saved positions used in parsing
-       viewer                          ; How to view this mime type
-       info                            ; Misc info about this mime type
-       )
-    (with-temp-buffer
-      (insert-file-contents fname)
-      (set-syntax-table mailcap-parse-args-syntax-table)
-      (mailcap-replace-regexp "#.*" "")        ; Remove all comments
-      (mailcap-replace-regexp "\n+" "\n") ; And blank lines
-      (mailcap-replace-regexp "\\\\[ \t\n]+" " ") ; And collapse spaces
-      (mailcap-replace-regexp (concat (regexp-quote "\\") "[ \t]*\n") "")
-      (goto-char (point-max))
-      (skip-chars-backward " \t\n")
-      (delete-region (point) (point-max))
-      (goto-char (point-min))
-      (while (not (eobp))
-       (skip-chars-forward " \t\n")
-       (setq save-pos (point)
-             info nil)
-       (skip-chars-forward "^/;")
-       (downcase-region save-pos (point))
-       (setq major (buffer-substring save-pos (point)))
-       (skip-chars-forward "/ \t\n")
-       (setq save-pos (point))
-       (skip-chars-forward "^;")
-       (downcase-region save-pos (point))
-       (setq minor
-             (cond
-              ((eq ?* (or (char-after save-pos) 0)) ".*")
-              ((= (point) save-pos) ".*")
-              (t (buffer-substring save-pos (point)))))
-       (skip-chars-forward "; \t\n")
-       ;;; Got the major/minor chunks, now for the viewers/etc
-       ;;; The first item _must_ be a viewer, according to the
-       ;;; RFC for mailcap files (#1343)
-       (skip-chars-forward "; \t\n")
-       (setq save-pos (point))
-       (skip-chars-forward "^;\n")
-       (if (eq (or (char-after save-pos) 0) ?')
-           (setq viewer (progn
-                          (narrow-to-region (1+ save-pos) (point))
-                          (goto-char (point-min))
-                          (prog1
-                              (read (current-buffer))
-                            (goto-char (point-max))
-                            (widen))))
-         (setq viewer (buffer-substring save-pos (point))))
-       (setq save-pos (point))
-       (end-of-line)
-       (setq info (nconc (list (cons 'viewer viewer)
-                               (cons 'type (concat major "/"
-                                                   (if (string= minor ".*")
-                                                       "*" minor))))
-                         (mailcap-parse-mailcap-extras save-pos (point))))
-       (mailcap-mailcap-entry-passes-test info)
-       (mailcap-add-mailcap-entry major minor info)))))
-
-(defun mailcap-parse-mailcap-extras (st nd)
-  ;; Grab all the extra stuff from a mailcap entry
-  (let (
-       name                            ; From name=
-       value                           ; its value
-       results                         ; Assoc list of results
-       name-pos                        ; Start of XXXX= position
-       val-pos                         ; Start of value position
-       done                            ; Found end of \'d ;s?
-       )
-    (save-restriction
-      (narrow-to-region st nd)
-      (goto-char (point-min))
-      (skip-chars-forward " \n\t;")
-      (while (not (eobp))
-       (setq done nil)
-       (skip-chars-forward " \";\n\t")
-       (setq name-pos (point))
-       (skip-chars-forward "^ \n\t=")
-       (downcase-region name-pos (point))
-       (setq name (buffer-substring name-pos (point)))
-       (skip-chars-forward " \t\n")
-       (if (not (eq (char-after (point)) ?=)) ; There is no value
-           (setq value nil)
-         (skip-chars-forward " \t\n=")
-         (setq val-pos (point))
-         (if (memq (char-after val-pos) '(?\" ?'))
-             (progn
-               (setq val-pos (1+ val-pos))
-               (condition-case nil
-                   (progn
-                     (forward-sexp 1)
-                     (backward-char 1))
-                 (error (goto-char (point-max)))))
-           (while (not done)
-             (skip-chars-forward "^;")
-             (if (eq (char-after (1- (point))) ?\\ )
-                 (progn
-                   (subst-char-in-region (1- (point)) (point) ?\\ ? )
-                   (skip-chars-forward ";"))
-               (setq done t))))
-         (setq value (buffer-substring val-pos (point))))
-       (setq results (cons (cons name value) results)))
-      results)))
-
-(defun mailcap-mailcap-entry-passes-test (info)
-  ;; Return t iff a mailcap entry passes its test clause or no test
-  ;; clause is present.
-  (let (status                         ; Call-process-regions return value
-       (test (assq 'test info))        ; The test clause
-       )
-    (setq status (and test (split-string (cdr test) " ")))
-    (if (and (or (assoc "needsterm" info)
-                (assoc "needsx11" info))
-            (not (getenv "DISPLAY")))
-       (setq status nil)
-      (cond
-       ((and (equal (nth 0 status) "test")
-            (equal (nth 1 status) "-n")
-            (or (equal (nth 2 status) "$DISPLAY")
-                (equal (nth 2 status) "\"$DISPLAY\"")))
-       (setq status (if (getenv "DISPLAY") t nil)))
-       ((and (equal (nth 0 status) "test")
-            (equal (nth 1 status) "-z")
-            (or (equal (nth 2 status) "$DISPLAY")
-                (equal (nth 2 status) "\"$DISPLAY\"")))
-       (setq status (if (getenv "DISPLAY") nil t)))
-       (test nil)
-       (t nil)))
-    (and test (listp test) (setcdr test status))))
-
-;;;
-;;; The action routines.
-;;;
-
-(defun mailcap-possible-viewers (major minor)
-  ;; Return a list of possible viewers from MAJOR for minor type MINOR
-  (let ((exact '())
-       (wildcard '()))
-    (while major
-      (cond
-       ((equal (car (car major)) minor)
-       (setq exact (cons (cdr (car major)) exact)))
-       ((and minor (string-match (car (car major)) minor))
-       (setq wildcard (cons (cdr (car major)) wildcard))))
-      (setq major (cdr major)))
-    (nconc (nreverse exact) (nreverse wildcard))))
-
-(defun mailcap-unescape-mime-test (test type-info)
-  (let (save-pos save-chr subst)
-    (cond
-     ((symbolp test) test)
-     ((and (listp test) (symbolp (car test))) test)
-     ((or (stringp test)
-         (and (listp test) (stringp (car test))
-              (setq test (mapconcat 'identity test " "))))
-      (with-temp-buffer
-       (insert test)
-       (goto-char (point-min))
-       (while (not (eobp))
-         (skip-chars-forward "^%")
-         (if (/= (- (point)
-                    (progn (skip-chars-backward "\\\\")
-                           (point)))
-                 0)                    ; It is an escaped %
-             (progn
-               (delete-char 1)
-               (skip-chars-forward "%."))
-           (setq save-pos (point))
-           (skip-chars-forward "%")
-           (setq save-chr (char-after (point)))
-           (cond
-            ((null save-chr) nil)
-            ((= save-chr ?t)
-             (delete-region save-pos (progn (forward-char 1) (point)))
-             (insert (or (cdr (assq 'type type-info)) "\"\"")))
-            ((= save-chr ?M)
-             (delete-region save-pos (progn (forward-char 1) (point)))
-             (insert "\"\""))
-            ((= save-chr ?n)
-             (delete-region save-pos (progn (forward-char 1) (point)))
-             (insert "\"\""))
-            ((= save-chr ?F)
-             (delete-region save-pos (progn (forward-char 1) (point)))
-             (insert "\"\""))
-            ((= save-chr ?{)
-             (forward-char 1)
-             (skip-chars-forward "^}")
-             (downcase-region (+ 2 save-pos) (point))
-             (setq subst (buffer-substring (+ 2 save-pos) (point)))
-             (delete-region save-pos (1+ (point)))
-             (insert (or (cdr (assoc subst type-info)) "\"\"")))
-            (t nil))))
-       (buffer-string)))
-     (t (error "Bad value to mailcap-unescape-mime-test. %s" test)))))
-
-(defvar mailcap-viewer-test-cache nil)
-
-(defun mailcap-viewer-passes-test (viewer-info type-info)
-  ;; Return non-nil iff the viewer specified by VIEWER-INFO passes its
-  ;; test clause (if any).
-  (let* ((test-info (assq 'test viewer-info))
-        (test (cdr test-info))
-        (otest test)
-        (viewer (cdr (assoc 'viewer viewer-info)))
-        (default-directory (expand-file-name "~/"))
-        status parsed-test cache result)
-    (if (setq cache (assoc test mailcap-viewer-test-cache))
-       (cadr cache)
-      (setq
-       result
-       (cond
-       ((not test-info) t)             ; No test clause
-       ((not test) nil)                ; Already failed test
-       ((eq test t) t)                 ; Already passed test
-       ((and (symbolp test)            ; Lisp function as test
-             (fboundp test))
-        (funcall test type-info))
-       ((and (symbolp test)            ; Lisp variable as test
-             (boundp test))
-        (symbol-value test))
-       ((and (listp test)              ; List to be eval'd
-             (symbolp (car test)))
-        (eval test))
-       (t
-        (setq test (mailcap-unescape-mime-test test type-info)
-              test (list shell-file-name nil nil nil
-                         shell-command-switch test)
-              status (apply 'call-process test))
-        (= 0 status))))
-      (push (list otest result) mailcap-viewer-test-cache)
-      result)))
-
-(defun mailcap-add-mailcap-entry (major minor info)
-  (let ((old-major (assoc major mailcap-mime-data)))
-    (if (null old-major)               ; New major area
-       (setq mailcap-mime-data
-             (cons (cons major (list (cons minor info)))
-                   mailcap-mime-data))
-      (let ((cur-minor (assoc minor old-major)))
-       (cond
-        ((or (null cur-minor)          ; New minor area, or
-             (assq 'test info))        ; Has a test, insert at beginning
-         (setcdr old-major (cons (cons minor info) (cdr old-major))))
-        ((and (not (assq 'test info)) ; No test info, replace completely
-              (not (assq 'test cur-minor)))
-         (setcdr cur-minor info))
-        (t
-         (setcdr old-major (cons (cons minor info) (cdr old-major)))))))))
-
-;;;
-;;; The main whabbo
-;;;
-
-(defun mailcap-viewer-lessp (x y)
-  ;; Return t iff viewer X is more desirable than viewer Y
-  (let ((x-wild (string-match "[*?]" (or (cdr-safe (assq 'type x)) "")))
-       (y-wild (string-match "[*?]" (or (cdr-safe (assq 'type y)) "")))
-       (x-lisp (not (stringp (or (cdr-safe (assq 'viewer x)) ""))))
-       (y-lisp (not (stringp (or (cdr-safe (assq 'viewer y)) "")))))
-    (cond
-     ((and x-lisp (not y-lisp))
-      t)
-     ((and (not y-lisp) x-wild (not y-wild))
-      t)
-     ((and (not x-wild) y-wild)
-      t)
-     (t nil))))
-
-(defun mailcap-mime-info (string &optional request)
-  "Get the MIME viewer command for STRING, return nil if none found.
-Expects a complete content-type header line as its argument.
-
-Second argument REQUEST specifies what information to return.  If it is
-nil or the empty string, the viewer (second field of the mailcap
-entry) will be returned.  If it is a string, then the mailcap field
-corresponding to that string will be returned (print, description,
-whatever).  If a number, then all the information for this specific
-viewer is returned.  If `all', then all possible viewers for
-this type is returned."
-  (let (
-       major                           ; Major encoding (text, etc)
-       minor                           ; Minor encoding (html, etc)
-       info                            ; Other info
-       save-pos                        ; Misc. position during parse
-       major-info                      ; (assoc major mailcap-mime-data)
-       minor-info                      ; (assoc minor major-info)
-       test                            ; current test proc.
-       viewers                         ; Possible viewers
-       passed                          ; Viewers that passed the test
-       viewer                          ; The one and only viewer
-       ctl)
-    (save-excursion
-      (setq ctl (mail-header-parse-content-type (or string "text/plain")))
-      (setq major (split-string (car ctl) "/"))
-      (setq minor (cadr major)
-           major (car major))
-      (when (setq major-info (cdr (assoc major mailcap-mime-data)))
-       (when (setq viewers (mailcap-possible-viewers major-info minor))
-         (setq info (mapcar (lambda (a) (cons (symbol-name (car a))
-                                              (cdr a)))
-                            (cdr ctl)))
-         (while viewers
-           (if (mailcap-viewer-passes-test (car viewers) info)
-               (setq passed (cons (car viewers) passed)))
-           (setq viewers (cdr viewers)))
-         (setq passed (sort (nreverse passed) 'mailcap-viewer-lessp))
-         (setq viewer (car passed))))
-      (when (and (stringp (cdr (assq 'viewer viewer)))
-                passed)
-       (setq viewer (car passed)))
-      (cond
-       ((and (null viewer) (not (equal major "default")) request)
-       (mailcap-mime-info "default" request))
-       ((or (null request) (equal request ""))
-       (mailcap-unescape-mime-test (cdr (assq 'viewer viewer)) info))
-       ((stringp request)
-       (if (or (eq request 'test) (eq request 'viewer))
-           (mailcap-unescape-mime-test
-            (cdr-safe (assoc request viewer)) info)))
-       ((eq request 'all)
-       passed)
-       (t
-       ;; MUST make a copy *sigh*, else we modify mailcap-mime-data
-       (setq viewer (copy-tree viewer))
-       (let ((view (assq 'viewer viewer))
-             (test (assq 'test viewer)))
-         (if view (setcdr view (mailcap-unescape-mime-test (cdr view) info)))
-         (if test (setcdr test (mailcap-unescape-mime-test (cdr test) info))))
-       viewer)))))
-
-;;;
-;;; Experimental MIME-types parsing
-;;;
-
-(defvar mailcap-mime-extensions
-  '((""          . "text/plain")
-    (".abs"      . "audio/x-mpeg")
-    (".aif"      . "audio/aiff")
-    (".aifc"     . "audio/aiff")
-    (".aiff"     . "audio/aiff")
-    (".ano"      . "application/x-annotator")
-    (".au"       . "audio/ulaw")
-    (".avi"      . "video/x-msvideo")
-    (".bcpio"    . "application/x-bcpio")
-    (".bin"      . "application/octet-stream")
-    (".cdf"      . "application/x-netcdr")
-    (".cpio"     . "application/x-cpio")
-    (".csh"      . "application/x-csh")
-    (".dvi"      . "application/x-dvi")
-    (".el"       . "application/emacs-lisp")
-    (".eps"      . "application/postscript")
-    (".etx"      . "text/x-setext")
-    (".exe"      . "application/octet-stream")
-    (".fax"      . "image/x-fax")
-    (".gif"      . "image/gif")
-    (".hdf"      . "application/x-hdf")
-    (".hqx"      . "application/mac-binhex40")
-    (".htm"      . "text/html")
-    (".html"     . "text/html")
-    (".icon"     . "image/x-icon")
-    (".ief"      . "image/ief")
-    (".jpg"      . "image/jpeg")
-    (".macp"     . "image/x-macpaint")
-    (".man"      . "application/x-troff-man")
-    (".me"       . "application/x-troff-me")
-    (".mif"      . "application/mif")
-    (".mov"      . "video/quicktime")
-    (".movie"    . "video/x-sgi-movie")
-    (".mp2"      . "audio/x-mpeg")
-    (".mp3"      . "audio/x-mpeg")
-    (".mp2a"     . "audio/x-mpeg2")
-    (".mpa"      . "audio/x-mpeg")
-    (".mpa2"     . "audio/x-mpeg2")
-    (".mpe"      . "video/mpeg")
-    (".mpeg"     . "video/mpeg")
-    (".mpega"    . "audio/x-mpeg")
-    (".mpegv"    . "video/mpeg")
-    (".mpg"      . "video/mpeg")
-    (".mpv"      . "video/mpeg")
-    (".ms"       . "application/x-troff-ms")
-    (".nc"       . "application/x-netcdf")
-    (".nc"       . "application/x-netcdf")
-    (".oda"      . "application/oda")
-    (".pbm"      . "image/x-portable-bitmap")
-    (".pdf"      . "application/pdf")
-    (".pgm"      . "image/portable-graymap")
-    (".pict"     . "image/pict")
-    (".png"      . "image/png")
-    (".pnm"      . "image/x-portable-anymap")
-    (".ppm"      . "image/portable-pixmap")
-    (".ps"       . "application/postscript")
-    (".qt"       . "video/quicktime")
-    (".ras"      . "image/x-raster")
-    (".rgb"      . "image/x-rgb")
-    (".rtf"      . "application/rtf")
-    (".rtx"      . "text/richtext")
-    (".sh"       . "application/x-sh")
-    (".sit"      . "application/x-stuffit")
-    (".snd"      . "audio/basic")
-    (".src"      . "application/x-wais-source")
-    (".tar"      . "archive/tar")
-    (".tcl"      . "application/x-tcl")
-    (".tcl"      . "application/x-tcl")
-    (".tex"      . "application/x-tex")
-    (".texi"     . "application/texinfo")
-    (".tga"      . "image/x-targa")
-    (".tif"      . "image/tiff")
-    (".tiff"     . "image/tiff")
-    (".tr"       . "application/x-troff")
-    (".troff"    . "application/x-troff")
-    (".tsv"      . "text/tab-separated-values")
-    (".txt"      . "text/plain")
-    (".vbs"      . "video/mpeg")
-    (".vox"      . "audio/basic")
-    (".vrml"     . "x-world/x-vrml")
-    (".wav"      . "audio/x-wav")
-    (".wrl"      . "x-world/x-vrml")
-    (".xbm"      . "image/xbm")
-    (".xpm"      . "image/xpm")
-    (".xwd"      . "image/windowdump")
-    (".zip"      . "application/zip")
-    (".ai"       . "application/postscript")
-    (".jpe"      . "image/jpeg")
-    (".jpeg"     . "image/jpeg"))
-  "An assoc list of file extensions and corresponding MIME content-types.")
-
-(defun mailcap-parse-mimetypes (&optional path)
-  ;; Parse out all the mimetypes specified in a unix-style path string PATH
-  (cond
-   (path nil)
-   ((getenv "MIMETYPES") (setq path (getenv "MIMETYPES")))
-   ((memq system-type '(ms-dos ms-windows windows-nt))
-    (setq path (mapconcat 'expand-file-name
-                         '("~/mime.typ" "~/etc/mime.typ") ";")))
-   (t (setq path (mapconcat 'expand-file-name
-                           '("~/.mime-types"
-                             "/etc/mime-types:/usr/etc/mime-types"
-                             "/usr/local/etc/mime-types"
-                             "/usr/local/www/conf/mime-types") ":"))))
-  (let ((fnames (reverse
-                (split-string path
-                              (if (memq system-type
-                                        '(ms-dos ms-windows windows-nt))
-                                  ";" ":"))))
-       fname)
-    (while fnames
-      (setq fname (car fnames))
-      (if (and (file-exists-p fname) (file-readable-p fname))
-         (mailcap-parse-mimetype-file (car fnames)))
-      (setq fnames (cdr fnames)))))
-
-(defun mailcap-parse-mimetype-file (fname)
-  ;; Parse out a mime-types file
-  (let (type                           ; The MIME type for this line
-       extns                           ; The extensions for this line
-       save-pos                        ; Misc. saved buffer positions
-       )
-    (with-temp-buffer
-      (insert-file-contents fname)
-      (mailcap-replace-regexp "#.*" "")
-      (mailcap-replace-regexp "\n+" "\n")
-      (mailcap-replace-regexp "[ \t]+$" "")
-      (goto-char (point-max))
-      (skip-chars-backward " \t\n")
-      (delete-region (point) (point-max))
-      (goto-char (point-min))
-      (while (not (eobp))
-       (skip-chars-forward " \t\n")
-       (setq save-pos (point))
-       (skip-chars-forward "^ \t")
-       (downcase-region save-pos (point))
-       (setq type (buffer-substring save-pos (point)))
-       (while (not (eolp))
-         (skip-chars-forward " \t")
-         (setq save-pos (point))
-         (skip-chars-forward "^ \t\n")
-         (setq extns (cons (buffer-substring save-pos (point)) extns)))
-       (while extns
-         (setq mailcap-mime-extensions
-               (cons
-                (cons (if (= (string-to-char (car extns)) ?.)
-                          (car extns)
-                        (concat "." (car extns))) type)
-                mailcap-mime-extensions)
-               extns (cdr extns)))))))
-
-(defun mailcap-extension-to-mime (extn)
-  "Return the MIME content type of the file extensions EXTN."
-  (if (and (stringp extn)
-          (not (eq (string-to-char extn) ?.)))
-      (setq extn (concat "." extn)))
-  (cdr (assoc (downcase extn) mailcap-mime-extensions)))
-
-(defvar mailcap-binary-suffixes
-  (if (memq system-type '(ms-dos windows-nt))
-      '(".exe" ".com" ".bat" ".cmd" ".btm" "")
-    '("")))
-
-(defun mailcap-command-p (command)
-  "Say whether COMMAND is in the exec path.
-The path of COMMAND will be returned iff COMMAND is a command."
-  (let ((path (if (file-name-absolute-p command) '(nil) exec-path))
-       file dir)
-    (catch 'found
-      (while (setq dir (pop path))
-       (let ((suffixes mailcap-binary-suffixes))
-         (while suffixes
-           (when (and (file-executable-p
-                       (setq file (expand-file-name
-                                   (concat command (pop suffixes))
-                                   dir)))
-                      (not (file-directory-p file)))
-             (throw 'found file))))))))
-
-(provide 'mailcap)
-
-;;; mailcap.el ends here
index 6fabb5c..fa01f5a 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-mh.el --- mh-e interface for Gnus
-;; Copyright (C) 1994,95,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1994,95,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
index 38de4d5..f676783 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-move.el --- commands for moving Gnus from one server to another
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -90,8 +90,6 @@ Update the .newsrc.eld file to reflect the change of nntp server."
        ;; Then we read the headers from the `from-server'.
        (when (and (gnus-request-group group nil from-server)
                   (gnus-active group)
-                  (gnus-uncompress-range
-                   (gnus-active group))
                   (setq type (gnus-retrieve-headers
                               (gnus-uncompress-range
                                (gnus-active group))
index fe632fc..116ad34 100644 (file)
@@ -1,9 +1,11 @@
-;;; gnus-msg.el --- mail and post interface for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;;; 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
+;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;;     Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
+;; Keywords: mail, news, MIME
 
 ;; This file is part of GNU Emacs.
 
@@ -100,15 +102,13 @@ the second with the current group name.")
 (defvar gnus-posting-styles nil
   "*Alist of styles to use when posting.")
 
-(defcustom gnus-group-posting-charset-alist
-  '(("^no\\." iso-8859-1)
-    (message-this-is-mail nil)
-    (".*" iso-8859-1)
-    (message-this-is-news iso-8859-1))
-  "Alist of regexps (to match group names) and default charsets to be unencoded when posting."
-  :type '(repeat (list (regexp :tag "Group")
-                      (symbol :tag "Charset")))
-  :group 'gnus-charset)
+(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.
 
@@ -121,16 +121,21 @@ the second with the current group name.")
 (defvar gnus-message-group-art nil)
 
 (defconst gnus-bug-message
-  "Sending a bug report to the Gnus Towers.
+  (format "Sending a bug report to the Gnus Towers.
+========================================
+
+This gnus is the %s%s.
+If you think the bug is a Semi-gnus bug, send a bug report to Semi-gnus
+Developers. (the addresses below are mailing list addresses)
+
 ========================================
 
 The buffer below is a mail buffer.  When you press `C-c C-c', it will
 be sent to the Gnus Bug Exterminators.
 
-The thing near the bottom of the buffer is how the environment
-settings will be included in the mail.  Please do not delete that.
-They will tell the Bug People what your environment is, so that it
-will be easier to locate the bugs.
+At the bottom of the buffer you'll see lots of variable settings.
+Please do not delete those.  They will tell the Bug People what your
+environment is, so that it will be easier to locate the bugs.
 
 If you have found a bug that makes Emacs go \"beep\", set
 debug-on-error to t (`M-x set-variable RET debug-on-error RET t RET')
@@ -139,7 +144,12 @@ and include the backtrace in your bug report.
 Please describe the bug in annoying, painstaking detail.
 
 Thank you for your help in stamping out bugs.
-")
+"
+
+         gnus-product-name
+         (if (string= gnus-product-name "Semi-gnus")
+             ""
+           ", a modified version of Semi-gnus")))
 
 (eval-and-compile
   (autoload 'gnus-uu-post-news "gnus-uu" nil t)
@@ -170,8 +180,8 @@ Thank you for your help in stamping out bugs.
   "\M-c" gnus-summary-mail-crosspost-complaint
   "om" gnus-summary-mail-forward
   "op" gnus-summary-post-forward
-  "Om" gnus-uu-digest-mail-forward
-  "Op" gnus-uu-digest-post-forward)
+  "Om" gnus-summary-mail-digest
+  "Op" gnus-summary-post-digest)
 
 (gnus-define-keys (gnus-send-bounce-map "D" gnus-summary-send-map)
   "b" gnus-summary-resend-bounced-mail
@@ -192,7 +202,11 @@ Thank you for your help in stamping out bugs.
           (,group gnus-newsgroup-name)
           (message-header-setup-hook
            (copy-sequence message-header-setup-hook))
-          (message-mode-hook (copy-sequence message-mode-hook)))
+          (message-mode-hook (copy-sequence message-mode-hook))
+          (message-startup-parameter-alist
+           '((reply-buffer . gnus-copy-article-buffer)
+             (original-buffer . gnus-original-article-buffer)
+             (user-agent . Gnus))))
        (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)
@@ -203,38 +217,22 @@ Thank you for your help in stamping out bugs.
         (setq gnus-message-buffer (current-buffer))
         (set (make-local-variable 'gnus-message-group-art)
              (cons ,group ,article))
-        (set (make-local-variable 'gnus-newsgroup-name) ,group)
-        (set (make-local-variable 'message-posting-charset)
-             (gnus-setup-posting-charset ,group))
+        (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))))
 
-(defun gnus-setup-posting-charset (group)
-  (let ((alist gnus-group-posting-charset-alist)
-       (group (or group ""))
-       elem)
-    (when group
-      (catch 'found
-       (while (setq elem (pop alist))
-         (when (or (and (stringp (car elem))
-                        (string-match (car elem) group))
-                   (and (gnus-functionp (car elem))
-                        (funcall (car elem) group))
-                   (and (symbolp (car elem))
-                        (symbol-value (car elem))))
-           (throw 'found (cadr elem))))))))
-
 (defun gnus-inews-add-send-actions (winconf buffer article)
   (make-local-hook 'message-sent-hook)
   (add-hook 'message-sent-hook 'gnus-inews-do-gcc nil t)
   (setq message-post-method
        `(lambda (arg)
           (gnus-post-method arg ,gnus-newsgroup-name)))
-  (setq message-newsreader (setq message-mailer (gnus-extended-version)))
-  (message-add-action
-   `(set-window-configuration ,winconf) 'exit 'postpone 'kill)
+  (setq message-user-agent (gnus-extended-version))
+  (when (not message-use-multi-frames)
+    (message-add-action
+     `(set-window-configuration ,winconf) 'exit 'postpone 'kill))
   (message-add-action
    `(when (gnus-buffer-exists-p ,buffer)
       (save-excursion
@@ -248,29 +246,11 @@ Thank you for your help in stamping out bugs.
 
 ;;; Post news commands of Gnus group mode and summary mode
 
-(defun gnus-group-mail (&optional arg)
-  "Start composing a mail.
-If ARG, use the group under the point to find a posting style.
-If ARG is 1, prompt for a group name to find the posting style."
-  (interactive "P")
-  ;; We can't `let' gnus-newsgroup-name here, since that leads
-  ;; to local variables leaking.
-  (let ((group gnus-newsgroup-name)
-       (buffer (current-buffer)))
-    (unwind-protect
-       (progn
-         (setq gnus-newsgroup-name
-               (if arg
-                   (if (= 1 (prefix-numeric-value arg))
-                       (completing-read "Use posting style of group: "
-                                        gnus-active-hashtb nil
-                                        (gnus-read-active-file-p))
-                     (gnus-group-group-name))
-                 ""))
-         (gnus-setup-message 'message (message-mail)))
-      (save-excursion
-       (set-buffer buffer)
-       (setq gnus-newsgroup-name group)))))
+(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.
@@ -357,8 +337,10 @@ post using the current select method."
        article)
     (while (setq article (pop articles))
       (when (gnus-summary-select-article t nil nil article)
-       (when (gnus-eval-in-buffer-window gnus-original-article-buffer
-               (message-cancel-news))
+       (when (gnus-eval-in-buffer-window gnus-article-buffer
+               (save-excursion
+                 (set-buffer gnus-original-article-buffer)
+                 (message-cancel-news)))
          (gnus-summary-mark-as-read article gnus-canceled-mark)
          (gnus-cache-remove-article 1))
        (gnus-article-hide-headers-if-wanted))
@@ -369,7 +351,8 @@ post using the current select method."
 This is done simply by taking the old article and adding a Supersedes
 header line with the old Message-ID."
   (interactive)
-  (let ((article (gnus-summary-article-number)))
+  (let ((article (gnus-summary-article-number))
+       gnus-message-setup-hook)
     (gnus-setup-message 'reply-yank
       (gnus-summary-select-article t)
       (set-buffer gnus-original-article-buffer)
@@ -391,9 +374,7 @@ header line with the old Message-ID."
   ;; if ARTICLE-BUFFER is nil, gnus-article-buffer is used
   ;; this buffer should be passed to all mail/news reply/post routines.
   (setq gnus-article-copy (gnus-get-buffer-create " *gnus article copy*"))
-  (save-excursion
-    (set-buffer gnus-article-copy)
-    (mm-enable-multibyte))
+  (buffer-disable-undo gnus-article-copy)
   (let ((article-buffer (or article-buffer gnus-article-buffer))
        end beg)
     (if (not (and (get-buffer article-buffer)
@@ -424,10 +405,10 @@ header line with the old Message-ID."
          ;; Delete the headers from the displayed articles.
          (set-buffer gnus-article-copy)
          (delete-region (goto-char (point-min))
-                        (or (search-forward "\n\n" nil t) (point-max)))
+                        (or (search-forward "\n\n" nil t) (point)))
          ;; Insert the original article headers.
          (insert-buffer-substring gnus-original-article-buffer beg end)
-         (article-decode-encoded-words)))
+         (gnus-article-decode-rfc1522)))
       gnus-article-copy)))
 
 (defun gnus-post-news (post &optional group header article-buffer yank subject
@@ -523,16 +504,14 @@ If SILENT, don't prompt the user."
                   (list gnus-post-method)))
               gnus-secondary-select-methods
               (mapcar 'cdr gnus-server-alist)
-              (mapcar 'car gnus-opened-servers)
               (list gnus-select-method)
               (list group-method)))
             method-alist post-methods method)
        ;; Weed out all mail methods.
        (while methods
          (setq method (gnus-server-get-method "" (pop methods)))
-         (when (and (or (gnus-method-option-p method 'post)
-                        (gnus-method-option-p method 'post-mail))
-                    (not (member method post-methods)))
+         (when (or (gnus-method-option-p method 'post)
+                   (gnus-method-option-p method 'post-mail))
            (push method post-methods)))
        ;; Create a name-method alist.
        (setq method-alist
@@ -556,7 +535,7 @@ If SILENT, don't prompt the user."
      ((and (eq gnus-post-method 'current)
           (not (eq (car group-method) 'nndraft))
           (not arg))
-      group-method)
+      group-method) 
      ((and gnus-post-method
           (not (eq gnus-post-method 'current)))
       gnus-post-method)
@@ -565,31 +544,55 @@ If SILENT, don't prompt the user."
 
 \f
 
-;; Dummies to avoid byte-compile warning.
+;; Dummy to avoid byte-compile warning.
 (defvar nnspool-rejected-article-hook)
 (defvar xemacs-codename)
 
 (defun gnus-extended-version ()
-  "Stringified Gnus version and Emacs version."
+  "Stringified gnus version."
   (interactive)
-  (concat
-   "Gnus/" (prin1-to-string (gnus-continuum-version gnus-version) t)
-   " (" gnus-version ")"
-   " "
-   (cond
-    ((string-match "^\\(\\([.0-9]+\\)*\\)\\.[0-9]+$" emacs-version)
-     (concat "Emacs/" (match-string 1 emacs-version)))
-    ((string-match "\\([A-Z]*[Mm][Aa][Cc][Ss]\\)[^(]*\\(\\((beta.*)\\|'\\)\\)?"
-                  emacs-version)
-     (concat (match-string 1 emacs-version)
-            (format "/%d.%d" emacs-major-version emacs-minor-version)
-            (if (match-beginning 3)
-                (match-string 3 emacs-version)
-              "")
-            (if (boundp 'xemacs-codename)
-                (concat " (" xemacs-codename ")")
-              "")))
-    (t emacs-version))))
+  (concat gnus-product-name "/" gnus-version-number))
+
+(defun gnus-message-make-user-agent (&optional include-mime-info max-column)
+  "Return user-agent info.
+INCLUDE-MIME-INFO the optional first argument if it is non-nil and the variable
+  `mime-edit-user-agent-value' exists, the return value will include it.
+MAX-COLUMN the optional second argument if it is specified, the return value
+  will be folded up in the proper way."
+  (let ((user-agent (if (and include-mime-info
+                            (boundp 'mime-edit-user-agent-value))
+                       (concat (gnus-extended-version)
+                               " "
+                               mime-edit-user-agent-value)
+                     (gnus-extended-version))))
+    (if max-column
+       (let (boundary)
+         (unless (natnump max-column) (setq max-column 76))
+         (with-temp-buffer
+           (insert "            " user-agent)
+           (goto-char 13)
+           (while (re-search-forward "[\n\t ]+" nil t)
+             (replace-match " "))
+           (goto-char 13)
+           (while (re-search-forward "[^ ()/]+\\(/[^ ()/]+\\)? ?" nil t)
+             (while (eq ?\( (char-after (point)))
+               (forward-list)
+               (skip-chars-forward " "))
+             (skip-chars-backward " ")
+             (if (> (current-column) max-column)
+                 (progn
+                   (if (or (not boundary) (eq ?\n (char-after boundary)))
+                       (progn
+                         (setq boundary (point))
+                         (unless (eobp)
+                           (delete-char 1)
+                           (insert "\n ")))
+                     (goto-char boundary)
+                     (delete-char 1)
+                     (insert "\n ")))
+               (setq boundary (point))))
+           (buffer-substring 13 (point-max))))
+      user-agent)))
 
 \f
 ;;;
@@ -638,26 +641,54 @@ The original article will be yanked."
   (interactive "P")
   (gnus-summary-reply-with-original n t))
 
-(defun gnus-summary-mail-forward (&optional not-used post)
+(defun gnus-summary-mail-forward (&optional full-headers post)
   "Forward the current message to another user.
-If POST, post instead of mail."
+If FULL-HEADERS (the prefix), include full headers when forwarding."
   (interactive "P")
   (gnus-setup-message 'forward
     (gnus-summary-select-article)
-    (let (text)
-      (save-excursion
-       (set-buffer gnus-original-article-buffer)
-       (setq text (buffer-string)))
-      (set-buffer (gnus-get-buffer-create
-                  (generate-new-buffer-name " *Gnus forward*")))
-      (erase-buffer)
-      (insert text)
-      (goto-char (point-min))
-      (when (looking-at "From ")
-       (replace-match "X-From-Line: ") )
-      (run-hooks 'gnus-article-decode-hook)
+    (let ((charset default-mime-charset))
+      (set-buffer gnus-original-article-buffer)
+      (make-local-variable 'default-mime-charset)
+      (setq default-mime-charset charset)
+      )
+    (let ((message-included-forward-headers
+          (if full-headers "" message-included-forward-headers)))
       (message-forward post))))
 
+(defun gnus-summary-post-forward (&optional full-headers)
+  "Forward the current article to a newsgroup.
+If FULL-HEADERS (the prefix), include full headers when forwarding."
+  (interactive "P")
+  (gnus-summary-mail-forward full-headers t))
+
+;;; XXX: generate Subject and ``Topics''?
+(defun gnus-summary-mail-digest (&optional n post)
+  "Digests and forwards all articles in this series."
+  (interactive "P")
+  (let ((subject "Digested Articles")
+       (articles (gnus-summary-work-articles n))
+       article)
+    (gnus-setup-message 'forward
+      (gnus-summary-select-article)
+      (if post (message-news nil subject) (message-mail nil subject))
+      (message-goto-body)
+      (while (setq article (pop articles))
+       (save-window-excursion
+         (set-buffer gnus-summary-buffer)
+         (gnus-summary-select-article nil nil nil article)
+         (gnus-summary-remove-process-mark article))
+       (insert (mime-make-tag "message" "rfc822") "\n")
+       (insert-buffer-substring gnus-original-article-buffer))
+      (push-mark)
+      (message-goto-body)
+      (mime-edit-enclose-digest-region (point)(mark t)))))
+
+(defun gnus-summary-post-digest (&optional n)
+  "Digest and forwards all articles in this series to a newsgroup."
+  (interactive "P")
+  (gnus-summary-mail-digest n t))
 (defun gnus-summary-resend-message (address n)
   "Resend the current article to ADDRESS."
   (interactive "sResend message(s) to: \nP")
@@ -669,12 +700,6 @@ If POST, post instead of mail."
        (set-buffer gnus-original-article-buffer)
        (message-resend address)))))
 
-(defun gnus-summary-post-forward (&optional full-headers)
-  "Forward the current article to a newsgroup.
-If FULL-HEADERS (the prefix), include full headers when forwarding."
-  (interactive "P")
-  (gnus-summary-mail-forward full-headers t))
-
 (defvar gnus-nastygram-message
   "The following article was inappropriately posted to %s.\n\n"
   "Format string to insert in nastygrams.
@@ -706,8 +731,7 @@ The current group name will be inserted at \"%s\".")
        (gnus-summary-select-article)
        (set-buffer gnus-original-article-buffer)
        (if (and (<= (length (message-tokenize-header
-                             (setq newsgroups
-                                   (mail-fetch-field "newsgroups"))
+                             (setq newsgroups (mail-fetch-field "newsgroups"))
                              ", "))
                     1)
                 (or (not (setq followup-to (mail-fetch-field "followup-to")))
@@ -834,7 +858,8 @@ If YANK is non-nil, include the original article."
       (insert gnus-bug-message)
       (goto-char (point-min)))
     (message-pop-to-buffer "*Gnus Bug*")
-    (message-setup `((To . ,gnus-maintainer) (Subject . "")))
+    (message-setup
+     `((To . ,gnus-maintainer) (Cc . ,semi-gnus-developers) (Subject . "")))
     (when gnus-bug-create-help-buffer
       (push `(gnus-bug-kill-buffer) message-send-actions))
     (goto-char (point-min))
@@ -846,10 +871,7 @@ If YANK is non-nil, include the original article."
               (stringp nntp-server-type))
       (insert nntp-server-type))
     (insert "\n\n\n\n\n")
-    (save-excursion
-      (set-buffer (gnus-get-buffer-create " *gnus environment info*"))
-      (gnus-debug))
-    (insert "<#part type=application/x-emacs-lisp buffer=\" *gnus environment info*\" disposition=inline description=\"User settings\"><#/part>")
+    (gnus-debug)
     (goto-char (point-min))
     (search-forward "Subject: " nil t)
     (message "")))
@@ -873,6 +895,7 @@ The source file has to be in the Emacs load path."
     ;; Go through all the files looking for non-default values for variables.
     (save-excursion
       (set-buffer (gnus-get-buffer-create " *gnus bug info*"))
+      (buffer-disable-undo (current-buffer))
       (while files
        (erase-buffer)
        (when (and (setq file (locate-library (pop files)))
@@ -931,14 +954,15 @@ this is a reply."
   (interactive "P")
   (gnus-summary-select-article t)
   (set-buffer gnus-original-article-buffer)
-  (gnus-setup-message 'compose-bounce
-    (let* ((references (mail-fetch-field "references"))
-          (parent (and references (gnus-parent-id references))))
-      (message-bounce)
-      ;; If there are references, we fetch the article we answered to.
-      (and fetch parent
-          (gnus-summary-refer-article parent)
-          (gnus-summary-show-all-headers)))))
+  (let (gnus-message-setup-hook)
+    (gnus-setup-message 'compose-bounce
+      (let* ((references (mail-fetch-field "references"))
+            (parent (and references (gnus-parent-id references))))
+       (message-bounce)
+       ;; If there are references, we fetch the article we answered to.
+       (and fetch parent
+            (gnus-summary-refer-article parent)
+            (gnus-summary-show-all-headers))))))
 
 ;;; Gcc handling.
 
@@ -950,7 +974,7 @@ this is a reply."
       (save-restriction
        (message-narrow-to-headers)
        (let ((gcc (or gcc (mail-fetch-field "gcc" nil t)))
-             (cur (current-buffer))
+             (coding-system-for-write 'raw-text)
              groups group method)
          (when gcc
            (message-remove-header "gcc")
@@ -978,17 +1002,14 @@ this is a reply."
                (gnus-request-create-group group method))
              (save-excursion
                (nnheader-set-temp-buffer " *acc*")
-               (insert-buffer-substring cur)
-               (message-encode-message-body)
-               (save-restriction
-                 (message-narrow-to-headers)
-                 (mail-encode-encoded-word-buffer))
+               (insert-buffer-substring message-encoding-buffer)
+               (gnus-run-hooks 'gnus-before-do-gcc-hook)
                (goto-char (point-min))
                (when (re-search-forward
                       (concat "^" (regexp-quote mail-header-separator) "$")
                       nil t)
                  (replace-match "" t t ))
-               (unless (gnus-request-accept-article group method t t)
+               (unless (gnus-request-accept-article group method t)
                  (gnus-message 1 "Couldn't store article in group %s: %s"
                                group (gnus-status-message method))
                  (sit-for 2))
@@ -1019,7 +1040,7 @@ this is a reply."
          (and gnus-newsgroup-name
               (gnus-group-find-parameter
                gnus-newsgroup-name 'gcc-self)))
-        result
+        result 
         (groups
          (cond
           ((null gnus-message-archive-method)
@@ -1087,118 +1108,86 @@ this is a reply."
 
 ;;; 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 ((group (or gnus-newsgroup-name ""))
-         (styles gnus-posting-styles)
-         style match variable attribute value v styles results
-         filep name address element)
-      ;; If the group has a posting-style parameter, add it at the end with a
-      ;; regexp matching everything, to be sure it takes precedence over all
-      ;; the others.
-      (when gnus-newsgroup-name
-       (let ((tmp-style (gnus-group-find-parameter group 'posting-style t)))
-         (when tmp-style
-           (setq styles (append styles (list (cons ".*" tmp-style)))))))
+    (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.
-      (dolist (style styles)
-       (setq match (pop style))
-       (when (cond
-              ((stringp match)
-               ;; Regexp string match on the group name.
-               (string-match match group))
-              ((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)))
+      (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.
-         (dolist (attribute style)
-           (setq element (pop attribute)
-                 variable nil
-                 filep nil)
-           (setq value
-                 (cond
-                  ((eq (car attribute) :file)
-                   (setq filep t)
-                   (cadr attribute))
-                  ((eq (car attribute) :value)
-                   (cadr attribute))
-                  (t
-                   (car attribute))))
-           ;; We get the value.
-           (setq v
-                 (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))))
-           ;; Translate obsolescent value.
-           (when (eq element 'signature-file)
-             (setq element 'signature
-                   filep t))
-           ;; Get the contents of file elems.
-           (when filep
-             (setq v (with-temp-buffer
-                       (insert-file-contents v)
-                       (buffer-string))))
-           (setq results (delq (assoc element results) results))
-           (push (cons element v) results))))
-      ;; Now we have all the styles, so we insert them.
-      (setq name (assq 'name results)
-           address (assq 'address results))
-      (setq results (delq name (delq address results)))
-      (make-local-variable 'message-setup-hook)
-      (dolist (result results)
-       (when (cdr result)
-         (add-hook 'message-setup-hook
-                   (cond
-                    ((eq 'body (car result))
-                     `(lambda ()
-                        (save-excursion
-                          (message-goto-body)
-                          (insert ,(cdr result)))))
-                    ((eq 'signature (car result))
-                     (set (make-local-variable 'message-signature) nil)
-                     (set (make-local-variable 'message-signature-file) nil)
-                     `(lambda ()
-                        (save-excursion
-                          (let ((message-signature ,(cdr result)))
-                            (message-insert-signature)))))
-                    (t
-                     (let ((header
-                            (if (symbolp (car result))
-                                (capitalize (symbol-name (car result)))
-                              (car result))))
-                       `(lambda ()
-                          (save-excursion
-                            (message-remove-header ,header)
-                            (message-goto-eoh)
-                            (insert ,header ": " ,(cdr result) "\n")))))))))
-      (when (or name address)
-       (add-hook 'message-setup-hook
-                 `(lambda ()
-                    (let ((user-full-name ,(or (cdr name) user-full-name))
-                          (user-mail-address
-                           ,(or (cdr address) user-mail-address)))
-                      (save-excursion
-                        (message-remove-header "From")
-                        (message-goto-eoh)
-                        (insert "From: " (message-make-from) "\n")))))))))
+         (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.
 
index 391b8e0..d678531 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-nocem.el --- NoCeM pseudo-cancellation treatment
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -146,7 +146,7 @@ matches an previously scanned and verified nocem message."
          (save-excursion
            (let ((dependencies (make-vector 10 nil))
                  headers header)
-             (with-temp-buffer
+             (nnheader-temp-write nil
                (setq headers
                      (if (eq 'nov
                              (gnus-retrieve-headers
@@ -190,9 +190,9 @@ matches an previously scanned and verified nocem message."
   (let ((date (mail-header-date header))
        issuer b e type)
     (when (or (not date)
-             (time-less-p
-              (time-since (date-to-time date))
-              (days-to-time gnus-nocem-expiry-wait)))
+             (nnmail-time-less
+              (nnmail-time-since (nnmail-date-to-time date))
+              (nnmail-days-to-time gnus-nocem-expiry-wait)))
       (gnus-request-article-this-buffer (mail-header-number header) group)
       (goto-char (point-min))
       (when (re-search-forward "-----BEGIN PGP MESSAGE-----" nil t)
@@ -271,7 +271,7 @@ matches an previously scanned and verified nocem message."
                              gnus-nocem-real-group-hashtb)
            ;; Valid group.
            (beginning-of-line)
-           (while (eq (char-after) ?\t)
+           (while (= (following-char) ?\t)
              (forward-line -1))
            (setq id (buffer-substring (point) (1- (search-forward "\t"))))
            (unless (gnus-gethash id gnus-nocem-hashtb)
@@ -279,7 +279,7 @@ matches an previously scanned and verified nocem message."
              (gnus-sethash id t gnus-nocem-hashtb)
              (push id ncm))
            (forward-line 1)
-           (while (eq (char-after) ?\t)
+           (while (= (following-char) ?\t)
              (forward-line 1))))))
       (when ncm
        (setq gnus-nocem-touched-alist t)
@@ -302,13 +302,13 @@ matches an previously scanned and verified nocem message."
   "Save the NoCeM cache."
   (when (and gnus-nocem-alist
             gnus-nocem-touched-alist)
-    (with-temp-file (gnus-nocem-cache-file)
+    (nnheader-temp-write (gnus-nocem-cache-file)
       (gnus-prin1 `(setq gnus-nocem-alist ',gnus-nocem-alist)))
     (setq gnus-nocem-touched-alist nil)))
 
 (defun gnus-nocem-save-active ()
   "Save the NoCeM active file."
-  (with-temp-file (gnus-nocem-active-file)
+  (nnheader-temp-write (gnus-nocem-active-file)
     (gnus-prin1 `(setq gnus-nocem-active ',gnus-nocem-active))))
 
 (defun gnus-nocem-alist-to-hashtb ()
@@ -316,11 +316,11 @@ matches an previously scanned and verified nocem message."
   (let* ((alist gnus-nocem-alist)
         (pprev (cons nil alist))
         (prev pprev)
-        (expiry (days-to-time gnus-nocem-expiry-wait))
+        (expiry (nnmail-days-to-time gnus-nocem-expiry-wait))
         entry)
     (setq gnus-nocem-hashtb (gnus-make-hashtable (* (length alist) 51)))
     (while (setq entry (car alist))
-      (if (not (time-less-p (time-since (car entry)) expiry))
+      (if (not (nnmail-time-less (nnmail-time-since (car entry)) expiry))
          ;; This entry has expired, so we remove it.
          (setcdr prev (cdr alist))
        (setq prev alist)
index 1964880..672e726 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-range.el --- range and sequence functions for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -224,81 +224,13 @@ Note: LIST has to be sorted over `<'."
        (setq ranges (cdr ranges)))
       out)))
 
-(defun gnus-remove-from-range (range1 range2)
-  "Return a range that has all articles from RANGE2 removed from
-RANGE1. The returned range is always a list. RANGE2 can also be a
-unsorted list of articles. RANGE1 is modified by side effects, RANGE2
-is not modified."
-  (if (or (null range1) (null range2))
-      range1
-    (let (out r1 r2 r1_min r1_max r2_min r2_max
-             (range2 (gnus-copy-sequence range2)))
-      (setq range1 (if (listp (cdr range1)) range1 (list range1))
-           range2 (sort (if (listp (cdr range2)) range2 (list range2))
-                        (lambda (e1 e2)
-                          (< (if (consp e1) (car e1) e1)
-                             (if (consp e2) (car e2) e2))))
-           r1 (car range1)
-           r2 (car range2)
-           r1_min (if (consp r1) (car r1) r1)
-           r1_max (if (consp r1) (cdr r1) r1)
-           r2_min (if (consp r2) (car r2) r2)
-           r2_max (if (consp r2) (cdr r2) r2))
-      (while (and range1 range2)
-       (cond ((< r2_max r1_min)                           ; r2 < r1
-              (pop range2)
-              (setq r2 (car range2)
-                    r2_min (if (consp r2) (car r2) r2)
-                    r2_max (if (consp r2) (cdr r2) r2)))
-             ((and (<= r2_min r1_min) (<= r1_max r2_max)) ; r2 overlap r1
-              (pop range1)
-              (setq r1 (car range1)
-                    r1_min (if (consp r1) (car r1) r1)
-                    r1_max (if (consp r1) (cdr r1) r1)))
-             ((and (<= r2_min r1_min) (<= r2_max r1_max)) ; r2 overlap min r1
-              (pop range2)
-              (setq r1_min (1+ r2_max)
-                    r2 (car range2)
-                    r2_min (if (consp r2) (car r2) r2)
-                    r2_max (if (consp r2) (cdr r2) r2)))
-             ((and (<= r1_min r2_min) (<= r2_max r1_max)) ; r2 contained in r1
-              (if (eq r1_min (1- r2_min))
-                  (push r1_min out)
-                (push (cons r1_min (1- r2_min)) out))
-              (pop range2)
-              (if (< r2_max r1_max) ; finished with r1?
-                  (setq r1_min (1+ r2_max))
-                (pop range1)
-                (setq r1 (car range1)
-                      r1_min (if (consp r1) (car r1) r1)
-                      r1_max (if (consp r1) (cdr r1) r1)))
-              (setq r2 (car range2)
-                    r2_min (if (consp r2) (car r2) r2)
-                    r2_max (if (consp r2) (cdr r2) r2)))
-             ((and (<= r2_min r1_max) (<= r1_max r2_max)) ; r2 overlap max r1
-              (if (eq r1_min (1- r2_min))
-                  (push r1_min out)
-                (push (cons r1_min (1- r2_min)) out))
-              (pop range1)
-              (setq r1 (car range1)
-                    r1_min (if (consp r1) (car r1) r1)
-                    r1_max (if (consp r1) (cdr r1) r1)))
-             ((< r1_max r2_min)                           ; r2 > r1
-              (pop range1)
-              (if (eq r1_min r1_max)
-                  (push r1_min out)
-                (push (cons r1_min r1_max) out))
-              (setq r1 (car range1)
-                    r1_min (if (consp r1) (car r1) r1)
-                    r1_max (if (consp r1) (cdr r1) r1)))))
-      (when r1
-       (if (eq r1_min r1_max)
-           (push r1_min out)
-         (push (cons r1_min r1_max) out))
-       (pop range1))
-      (while range1
-       (push (pop range1) out))
-      (nreverse out))))
+(defun gnus-remove-from-range (ranges list)
+  "Return a list of ranges that has all articles from LIST removed from RANGES.
+Note: LIST has to be sorted over `<'."
+  ;; !!! This function shouldn't look like this, but I've got a headache.
+  (gnus-compress-sequence
+   (gnus-sorted-complement
+    (gnus-uncompress-range ranges) list)))
 
 (defun gnus-member-of-range (number ranges)
   (if (not (listp (cdr ranges)))
@@ -332,59 +264,19 @@ is not modified."
     sublistp))
 
 (defun gnus-range-add (range1 range2)
-  "Add RANGE2 to RANGE1 (nondestructively)."
-  (unless (listp (cdr range1))
-    (setq range1 (list range1)))
-  (unless (listp (cdr range2))
-    (setq range2 (list range2)))
-  (let ((item1 (pop range1))
-       (item2 (pop range2))
-       range item selector)
-    (while (or item1 item2)
-      (setq selector
-           (cond 
-            ((null item1) nil)
-            ((null item2) t)
-            ((and (numberp item1) (numberp item2)) (< item1 item2))
-            ((numberp item1) (< item1 (car item2)))
-            ((numberp item2) (< (car item1) item2))
-            (t (< (car item1) (car item2)))))
-      (setq item
-           (or
-            (let ((tmp1 item) (tmp2 (if selector item1 item2)))
-              (cond 
-               ((null tmp1) tmp2)
-               ((null tmp2) tmp1)
-               ((and (numberp tmp1) (numberp tmp2))
-                (cond 
-                 ((eq tmp1 tmp2) tmp1)
-                 ((eq (1+ tmp1) tmp2) (cons tmp1 tmp2))
-                 ((eq (1+ tmp2) tmp1) (cons tmp2 tmp1))
-                 (t nil)))
-               ((numberp tmp1)
-                (cond 
-                 ((and (>= tmp1 (car tmp2)) (<= tmp1 (cdr tmp2))) tmp2)
-                 ((eq (1+ tmp1) (car tmp2)) (cons tmp1 (cdr tmp2)))
-                 ((eq (1- tmp1) (cdr tmp2)) (cons (car tmp2) tmp1))
-                 (t nil)))
-               ((numberp tmp2)
-                (cond 
-                 ((and (>= tmp2 (car tmp1)) (<= tmp2 (cdr tmp1))) tmp1)
-                 ((eq (1+ tmp2) (car tmp1)) (cons tmp2 (cdr tmp1)))
-                 ((eq (1- tmp2) (cdr tmp1)) (cons (car tmp1) tmp2))
-                 (t nil)))
-               ((< (1+ (cdr tmp1)) (car tmp2)) nil)
-               ((< (1+ (cdr tmp2)) (car tmp1)) nil)
-               (t (cons (min (car tmp1) (car tmp2)) 
-                        (max (cdr tmp1) (cdr tmp2))))))
-            (progn
-              (if item (push item range))
-              (if selector item1 item2))))
-      (if selector
-         (setq item1 (pop range1))
-       (setq item2 (pop range2))))
-    (if item (push item range))
-    (reverse range)))
+  "Add RANGE2 to RANGE1 destructively."
+  (cond
+   ;; If either are nil, then the job is quite easy.
+   ((or (null range1) (null range2))
+    (or range1 range2))
+   (t
+    ;; I don't like thinking.
+    (gnus-compress-sequence
+     (sort
+      (nconc
+       (gnus-uncompress-range range1)
+       (gnus-uncompress-range range2))
+      '<)))))
 
 (provide 'gnus-range)
 
index 60a47f4..e98762e 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-salt.el --- alternate summary mode interfaces for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -76,7 +76,8 @@ It accepts the same format specs that `gnus-summary-line-format' does."
     "u" gnus-pick-unmark-article-or-thread
     "." gnus-pick-article-or-thread
     gnus-down-mouse-2 gnus-pick-mouse-pick-region
-    "\r" gnus-pick-start-reading))
+    "\r" gnus-pick-start-reading
+    ))
 
 (defun gnus-pick-make-menu-bar ()
   (unless (boundp 'gnus-pick-menu)
@@ -130,8 +131,7 @@ It accepts the same format specs that `gnus-summary-line-format' does."
               (set-buffer gnus-summary-buffer)
               gnus-pick-mode))
     (message-add-action
-     '(gnus-configure-windows ,gnus-current-window-configuration t)
-     'send 'exit 'postpone 'kill)))
+     '(gnus-configure-windows 'pick t) 'send 'exit 'postpone 'kill)))
 
 (defvar gnus-pick-line-number 1)
 (defun gnus-pick-line-number ()
@@ -172,7 +172,7 @@ article number, then stay on current line."
     (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.
 If ARG, pick the article on that line instead."
@@ -191,7 +191,7 @@ If ARG, pick the article/thread on that line instead."
   (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.
@@ -202,7 +202,7 @@ If ARG, unmark thread/article on that line instead."
   (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)
@@ -430,7 +430,6 @@ Two predefined functions are available:
 (defvar gnus-selected-tree-overlay nil)
 
 (defvar gnus-tree-displayed-thread nil)
-(defvar gnus-tree-inhibit nil)
 
 (defvar gnus-tree-mode-map nil)
 (put 'gnus-tree-mode 'mode-class 'special)
@@ -469,7 +468,7 @@ Two predefined functions are available:
   (setq mode-name "Tree")
   (setq major-mode 'gnus-tree-mode)
   (use-local-map gnus-tree-mode-map)
-  (buffer-disable-undo)
+  (buffer-disable-undo (current-buffer))
   (setq buffer-read-only t)
   (setq truncate-lines t)
   (save-excursion
@@ -481,17 +480,15 @@ Two predefined functions are available:
 (defun gnus-tree-read-summary-keys (&optional arg)
   "Read a summary buffer key sequence and execute it."
   (interactive "P")
-  (unless gnus-tree-inhibit
-    (let ((buf (current-buffer))
-         (gnus-tree-inhibit t)
-         win)
-      (set-buffer gnus-article-buffer)
-      (gnus-article-read-summary-keys arg nil t)
-      (when (setq win (get-buffer-window buf))
-       (select-window win)
-       (when gnus-selected-tree-overlay
-         (goto-char (or (gnus-overlay-end gnus-selected-tree-overlay) 1)))
-       (gnus-tree-minimize)))))
+  (let ((buf (current-buffer))
+       win)
+    (set-buffer gnus-article-buffer)      
+    (gnus-article-read-summary-keys arg nil t)
+    (when (setq win (get-buffer-window buf))
+      (select-window win)
+      (when gnus-selected-tree-overlay
+       (goto-char (or (gnus-overlay-end gnus-selected-tree-overlay) 1)))
+      (gnus-tree-minimize))))
 
 (defun gnus-tree-show-summary ()
   "Reconfigure windows to show summary buffer."
@@ -522,14 +519,12 @@ Two predefined functions are available:
 
 (defun gnus-tree-article-region (article)
   "Return a cons with BEG and END of the article region."
-  (let ((pos (text-property-any
-             (point-min) (point-max) 'gnus-number article)))
+  (let ((pos (text-property-any (point-min) (point-max) 'gnus-number article)))
     (when pos
       (cons pos (next-single-property-change pos 'gnus-number)))))
 
 (defun gnus-tree-goto-article (article)
-  (let ((pos (text-property-any
-             (point-min) (point-max) 'gnus-number article)))
+  (let ((pos (text-property-any (point-min) (point-max) 'gnus-number article)))
     (when pos
       (goto-char pos))))
 
@@ -707,7 +702,7 @@ Two predefined functions are available:
          (while (progn
                   (forward-line -1)
                   (forward-char col)
-                  (eq (char-after) ? ))
+                  (= (following-char) ? ))
            (delete-char 1)
            (insert (caddr gnus-tree-parent-child-edges)))
          (goto-char beg)))
@@ -765,7 +760,7 @@ Two predefined functions are available:
          (forward-char -1)
          ;; Draw "-" lines leftwards.
          (while (and (> (point) 1)
-                     (eq (char-after (1- (point))) ? ))
+                     (= (char-after (1- (point))) ? ))
            (delete-char -1)
            (insert (car gnus-tree-parent-child-edges))
            (forward-char -1))
@@ -972,7 +967,7 @@ The following commands are available:
   (setq mode-name "Gnus Carpal")
   (setq mode-line-process nil)
   (use-local-map gnus-carpal-mode-map)
-  (buffer-disable-undo)
+  (buffer-disable-undo (current-buffer))
   (setq buffer-read-only t)
   (make-local-variable 'gnus-carpal-attached-buffer)
   (gnus-run-hooks 'gnus-carpal-mode-hook))
index b9565bd..c429950 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-score.el --- scoring code for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <amanda@iesd.auc.dk>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -308,7 +308,6 @@ Should be one of the following symbols.
  i: message-id
  t: references
  x: xref
- e: `extra' (non-standard overview)
  l: lines
  d: date
  f: followup
@@ -322,7 +321,6 @@ If nil, the user will be asked for a header."
                 (const :tag "message-id" i)
                 (const :tag "references" t)
                 (const :tag "xref" x)
-                (const :tag "extra" e)
                 (const :tag "lines" l)
                 (const :tag "date" d)
                 (const :tag "followup" f)
@@ -387,7 +385,7 @@ If nil, the user will be asked for a duration."
 (defcustom gnus-score-thread-simplify nil
   "If non-nil, subjects will simplified as in threading."
   :group 'gnus-score-various
-  :type 'boolean)
+  :type 'boolean) 
 
 \f
 
@@ -446,7 +444,6 @@ of the last successful match.")
     ("chars" 6 gnus-score-integer)
     ("lines" 7 gnus-score-integer)
     ("xref" 8 gnus-score-string)
-    ("extra" 9 gnus-score-string)
     ("head" -1 gnus-score-body)
     ("body" -1 gnus-score-body)
     ("all" -1 gnus-score-body)
@@ -505,7 +502,6 @@ used as score."
            (?i "message-id" nil t string)
            (?r "references" "message-id" nil string)
            (?x "xref" nil nil string)
-           (?e "extra" nil nil string)
            (?l "lines" nil nil number)
            (?d "date" nil nil date)
            (?f "followup" nil nil string)
@@ -534,7 +530,7 @@ used as score."
                     (aref (symbol-name gnus-score-default-type) 0)))
         (pchar (and gnus-score-default-duration
                     (aref (symbol-name gnus-score-default-duration) 0)))
-        entry temporary type match extra)
+        entry temporary type match)
 
     (unwind-protect
        (progn
@@ -556,7 +552,7 @@ used as score."
          (gnus-score-kill-help-buffer)
          (unless (setq entry (assq (downcase hchar) char-to-header))
            (if mimic (error "%c %c" prefix hchar)
-             (error "Invalid header type")))
+             (error "Illegal header type")))
 
          (when (/= (downcase hchar) hchar)
            ;; This was a majuscule, so we end reading and set the defaults.
@@ -589,7 +585,7 @@ used as score."
            (gnus-score-kill-help-buffer)
            (unless (setq type (nth 1 (assq (downcase tchar) legal-types)))
              (if mimic (error "%c %c" prefix hchar)
-               (error "Invalid match type"))))
+               (error "Illegal match type"))))
 
          (when (/= (downcase tchar) tchar)
            ;; It was a majuscule, so we end reading and use the default.
@@ -622,30 +618,13 @@ used as score."
              (error "You rang?"))
            (if mimic
                (error "%c %c %c %c" prefix hchar tchar pchar)
-             (error "Invalid match duration"))))
+             (error "Illegal match duration"))))
       ;; Always kill the score help buffer.
       (gnus-score-kill-help-buffer))
 
-    ;; If scoring an extra (non-standard overview) header,
-    ;; we must find out which header is in question.
-    (setq extra
-         (and gnus-extra-headers
-              (equal (nth 1 entry) "extra")
-              (intern                  ; need symbol
-               (gnus-completing-read
-                (symbol-name (car gnus-extra-headers)) ; default response
-                "Score extra header:"  ; prompt
-                (mapcar (lambda (x)    ; completion list
-                          (cons (symbol-name x) x))
-                        gnus-extra-headers)
-                nil                    ; no completion limit
-                t))))                  ; require match
-    ;; extra is now nil or a symbol.
-
     ;; We have all the data, so we enter this score.
     (setq match (if (string= (nth 2 entry) "") ""
-                 (gnus-summary-header (or (nth 2 entry) (nth 1 entry))
-                                      nil extra)))
+                 (gnus-summary-header (or (nth 2 entry) (nth 1 entry)))))
 
     ;; Modify the match, perhaps.
     (cond
@@ -672,7 +651,7 @@ used as score."
           current-score-file)
          (t
           (gnus-score-file-name "all"))))))
-
+    
     (gnus-summary-score-entry
      (nth 1 entry)                     ; Header
      match                             ; Match
@@ -681,9 +660,7 @@ used as score."
      (if (eq temporary 'perm)          ; Temp
         nil
        temporary)
-     (not (nth 3 entry))               ; Prompt
-     nil                               ; not silent
-     extra)                            ; non-standard overview.
+     (not (nth 3 entry)))              ; Prompt
 
     (when (eq symp 'a)
       ;; We change the score file back to the previous one.
@@ -695,7 +672,7 @@ used as score."
   (setq gnus-score-help-winconf (current-window-configuration))
   (save-excursion
     (set-buffer (gnus-get-buffer-create "*Score Help*"))
-    (buffer-disable-undo)
+    (buffer-disable-undo (current-buffer))
     (delete-windows-on (current-buffer))
     (erase-buffer)
     (insert string ":\n\n")
@@ -732,16 +709,14 @@ used as score."
       (shrink-window-if-larger-than-buffer))
     (select-window (get-buffer-window gnus-summary-buffer))))
 
-(defun gnus-summary-header (header &optional no-err extra)
+(defun gnus-summary-header (header &optional no-err)
   ;; Return HEADER for current articles, or error.
   (let ((article (gnus-summary-article-number))
        headers)
     (if article
        (if (and (setq headers (gnus-summary-article-header article))
                 (vectorp headers))
-           (if extra                   ; `header' must be "extra"
-               (or (cdr (assq extra (mail-header-extra headers))) "")
-             (aref headers (nth 1 (assoc header gnus-header-index))))
+           (aref headers (nth 1 (assoc header gnus-header-index)))
          (if no-err
              nil
            (error "Pseudo-articles can't be scored")))
@@ -767,7 +742,7 @@ used as score."
                  (gnus-newsgroup-score-alist)))))
 
 (defun gnus-summary-score-entry (header match type score date
-                                       &optional prompt silent extra)
+                                       &optional prompt silent)
   "Enter score file entry.
 HEADER is the header being scored.
 MATCH is the string we are looking for.
@@ -775,8 +750,7 @@ TYPE is the match type: substring, regexp, exact, fuzzy.
 SCORE is the score to add.
 DATE is the expire date, or nil for no expire, or 'now for immediate expire.
 If optional argument `PROMPT' is non-nil, allow user to edit match.
-If optional argument `SILENT' is nil, show effect of score entry.
-If optional argument `EXTRA' is non-nil, it's a non-standard overview header."
+If optional argument `SILENT' is nil, show effect of score entry."
   ;; Regexp is the default type.
   (when (eq type t)
     (setq type 'r))
@@ -817,17 +791,12 @@ If optional argument `EXTRA' is non-nil, it's a non-standard overview header."
            elem)
        (setq new
              (cond
-              (extra
-               (list match score
-                     (and date (if (numberp date) date
-                                 (date-to-day date)))
-                     type (symbol-name extra)))
               (type
                (list match score
                      (and date (if (numberp date) date
-                                 (date-to-day date)))
+                                 (gnus-day-number date)))
                      type))
-              (date (list match score (date-to-day date)))
+              (date (list match score (gnus-day-number date)))
               (score (list match score))
               (t (list match))))
        ;; We see whether we can collapse some score entries.
@@ -852,19 +821,18 @@ If optional argument `EXTRA' is non-nil, it's a non-standard overview header."
       (if (and (>= (nth 1 (assoc header gnus-header-index)) 0)
               (eq (nth 2 (assoc header gnus-header-index))
                   'gnus-score-string))
-         (gnus-summary-score-effect header match type score extra)
+         (gnus-summary-score-effect header match type score)
        (gnus-summary-rescore)))
 
     ;; Return the new scoring rule.
     new))
 
-(defun gnus-summary-score-effect (header match type score extra)
+(defun gnus-summary-score-effect (header match type score)
   "Simulate the effect of a score file entry.
 HEADER is the header being scored.
 MATCH is the string we are looking for.
 TYPE is the score type.
-SCORE is the score to add.
-EXTRA is the possible non-standard header."
+SCORE is the score to add."
   (interactive (list (completing-read "Header: "
                                      gnus-header-index
                                      (lambda (x) (fboundp (nth 2 x)))
@@ -885,7 +853,7 @@ EXTRA is the possible non-standard header."
                        (t
                         (regexp-quote match)))))
       (while (not (eobp))
-       (let ((content (gnus-summary-header header 'noerr extra))
+       (let ((content (gnus-summary-header header 'noerr))
              (case-fold-search t))
          (and content
               (when (if (eq type 'f)
@@ -1028,7 +996,7 @@ EXTRA is the possible non-standard header."
     (let ((buffer-read-only nil))
       ;; Set score.
       (gnus-summary-update-mark
-       (if (= n (or gnus-summary-default-score 0)) ? ;Whitespace
+       (if (= n (or gnus-summary-default-score 0)) ? 
         (if (< n (or gnus-summary-default-score 0))
             gnus-score-below-mark gnus-score-over-mark))
        'score))
@@ -1153,7 +1121,7 @@ EXTRA is the possible non-standard header."
                 (or (not decay)
                     (gnus-decay-scores alist decay)))
        (gnus-score-set 'touched '(t) alist)
-       (gnus-score-set 'decay (list (time-to-days (current-time))) alist))
+       (gnus-score-set 'decay (list (gnus-time-to-day (current-time))) alist))
       ;; We do not respect eval and files atoms from global score
       ;; files.
       (when (and files (not global))
@@ -1234,9 +1202,9 @@ EXTRA is the possible non-standard header."
        ;; Couldn't read file.
        (setq gnus-score-alist nil)
       ;; Read file.
-      (with-temp-buffer
-       (let ((coding-system-for-read 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))
@@ -1276,11 +1244,11 @@ EXTRA is the possible non-standard header."
         err
         (cond
          ((not (listp (car a)))
-          (format "Invalid score element %s in %s" (car a) file))
+          (format "Illegal score element %s in %s" (car a) file))
          ((stringp (caar a))
           (cond
            ((not (listp (setq sr (cdar a))))
-            (format "Invalid header match %s in %s" (nth 1 (car a)) file))
+            (format "Illegal header match %s in %s" (nth 1 (car a)) file))
            (t
             (setq type (caar a))
             (while (and sr (not err))
@@ -1291,7 +1259,7 @@ EXTRA is the possible non-standard header."
                 ((if (member (downcase type) '("lines" "chars"))
                      (not (numberp (car s)))
                    (not (stringp (car s))))
-                 (format "Invalid match %s in %s" (car s) file))
+                 (format "Illegal match %s in %s" (car s) file))
                 ((and (cadr s) (not (integerp (cadr s))))
                  (format "Non-integer score %s in %s" (cadr s) file))
                 ((and (caddr s) (not (integerp (caddr s))))
@@ -1322,7 +1290,7 @@ EXTRA is the possible non-standard header."
              (setcar scor
                      (list (caar scor) (nth 2 (car scor))
                            (and (nth 3 (car scor))
-                                (date-to-day (nth 3 (car scor))))
+                                (gnus-day-number (nth 3 (car scor))))
                            (if (nth 1 (car scor)) 'r 's)))
              (setq scor (cdr scor))))
        (push (if (not (listp (cdr entry)))
@@ -1369,8 +1337,7 @@ EXTRA is the possible non-standard header."
              (delete-file file)
            ;; There are scores, so we write the file.
            (when (file-writable-p file)
-             (let ((coding-system-for-write score-mode-coding-system))
-               (gnus-write-buffer file))
+             (gnus-write-buffer file)
              (when gnus-score-after-write-file-function
                (funcall gnus-score-after-write-file-function file)))))
        (and gnus-score-uncacheable-files
@@ -1418,7 +1385,7 @@ EXTRA is the possible non-standard header."
       (when (and gnus-summary-default-score
                 scores)
        (let* ((entries gnus-header-index)
-              (now (date-to-day (current-time-string)))
+              (now (gnus-day-number (current-time-string)))
               (expire (and gnus-score-expiry-days
                            (- now gnus-score-expiry-days)))
               (headers gnus-newsgroup-headers)
@@ -1437,7 +1404,7 @@ EXTRA is the possible non-standard header."
 
          (save-excursion
            (set-buffer (gnus-get-buffer-create "*Headers*"))
-           (buffer-disable-undo)
+           (buffer-disable-undo (current-buffer))
            (when (gnus-buffer-live-p gnus-summary-buffer)
              (message-clone-locals gnus-summary-buffer))
 
@@ -1572,7 +1539,7 @@ EXTRA is the possible non-standard header."
               (match-func (if (or (eq type '>) (eq type '<) (eq type '<=)
                                   (eq type '>=) (eq type '=))
                               type
-                            (error "Invalid match type: %s" type)))
+                            (error "Illegal match type: %s" type)))
               (articles gnus-scores-articles))
          ;; Instead of doing all the clever stuff that
          ;; `gnus-score-string' does to minimize searches and stuff,
@@ -1632,7 +1599,7 @@ EXTRA is the possible non-standard header."
           ((eq type 'regexp)
            (setq match-func 'string-match
                  match (nth 0 kill)))
-          (t (error "Invalid match type: %s" type)))
+          (t (error "Illegal match type: %s" type)))
          ;; Instead of doing all the clever stuff that
          ;; `gnus-score-string' does to minimize searches and stuff,
          ;; I will assume that people generally will put so few
@@ -1730,7 +1697,7 @@ EXTRA is the possible non-standard header."
                                     (eq type 'string) (eq type 'String))
                                 'search-forward)
                                (t
-                                (error "Invalid match type: %s" type)))))
+                                (error "Illegal match type: %s" type)))))
                    (goto-char (point-min))
                    (when (funcall search-func match nil t)
                      ;; Found a match, update scores.
@@ -1816,7 +1783,7 @@ EXTRA is the possible non-standard header."
               (search-func
                (cond ((= dmt ?r) 're-search-forward)
                      ((or (= dmt ?e) (= dmt ?s) (= dmt ?f)) 'search-forward)
-                     (t (error "Invalid match type: %s" type))))
+                     (t (error "Illegal match type: %s" type))))
               arts art)
          (goto-char (point-min))
          (if (= dmt ?e)
@@ -1897,23 +1864,12 @@ EXTRA is the possible non-standard header."
     ;; and U is the number of unique headers.  It is assumed (but
     ;; untested) this will be a net win because of the large constant
     ;; factor involved with string matching.
-    (setq gnus-scores-articles
-         ;; We cannot string-sort the extra headers list.  *sigh*
-         (if (= gnus-score-index 9)
-             gnus-scores-articles
-           (sort gnus-scores-articles 'gnus-score-string<))
+    (setq gnus-scores-articles (sort gnus-scores-articles 'gnus-score-string<)
          articles gnus-scores-articles)
 
     (erase-buffer)
     (while (setq art (pop articles))
       (setq this (aref (car art) gnus-score-index))
-
-      ;; If we're working with non-standard headers, we are stuck
-      ;; with working on them as a group.  What a hassle.
-      ;; Just wait 'til you see what horrors we commit against `match'...
-      (if (= gnus-score-index 9)
-         (setq this (prin1-to-string this)))   ; ick.
-
       (if simplify
          (setq this (gnus-map-function gnus-simplify-subject-functions this)))
       (if (equal last this)
@@ -1944,12 +1900,11 @@ EXTRA is the possible non-standard header."
               (type (or (nth 3 kill) 's))
               (score (or (nth 1 kill) gnus-score-interactive-default-score))
               (date (nth 2 kill))
-              (extra (nth 4 kill))     ; non-standard header; string.
               (found nil)
               (mt (aref (symbol-name type) 0))
               (case-fold-search (not (memq mt '(?R ?S ?E ?F))))
               (dmt (downcase mt))
-              ;; Assume user already simplified regexp and fuzzies
+                                       ; Assume user already simplified regexp and fuzzies
               (match (if (and simplify (not (memq dmt '(?f ?r))))
                           (gnus-map-function
                            gnus-simplify-subject-functions
@@ -1959,14 +1914,7 @@ EXTRA is the possible non-standard header."
                (cond ((= dmt ?r) 're-search-forward)
                      ((or (= dmt ?e) (= dmt ?s) (= dmt ?f)) 'search-forward)
                      ((= dmt ?w) nil)
-                     (t (error "Invalid match type: %s" type)))))
-
-         ;; Evil hackery to make match usable in non-standard headers.
-         (when extra
-           (setq match (concat "[ (](" extra " \\. \"[^)]*"
-                               match "[^(]*\")[ )]")
-                 search-func 're-search-forward))      ; XXX danger?!?
-
+                     (t (error "Illegal match type: %s" type)))))
          (cond
           ;; Fuzzy matches.  We save these for later.
           ((= dmt ?f)
@@ -2261,9 +2209,9 @@ EXTRA is the possible non-standard header."
     ;; Perform adaptive word scoring.
     (when (and (listp gnus-newsgroup-adaptive)
               (memq 'word gnus-newsgroup-adaptive))
-      (with-temp-buffer
+      (nnheader-temp-write nil
        (let* ((hashtb (gnus-make-hashtable 1000))
-              (date (date-to-day (current-time-string)))
+              (date (gnus-day-number (current-time-string)))
               (data gnus-newsgroup-data)
               (syntab (syntax-table))
               word d score val)
@@ -2299,7 +2247,7 @@ EXTRA is the possible non-standard header."
          (let ((ignored (append gnus-ignored-adaptive-words
                                 (if gnus-adaptive-word-no-group-words
                                     (message-tokenize-header
-                                     (gnus-group-real-name
+                                     (gnus-group-real-name 
                                       gnus-newsgroup-name)
                                      "."))
                                 gnus-default-ignored-adaptive-words)))
@@ -2341,10 +2289,11 @@ EXTRA is the possible non-standard header."
           1 "No score rules apply to the current article (default score %d)."
           gnus-summary-default-score)
        (set-buffer "*Score Trace*")
-       (setq truncate-lines t)
        (while trace
          (insert (format "%S  ->  %s\n" (cdar trace)
-                         (or (caar trace) "(non-file rule)")))
+                         (if (caar trace)
+                             (file-name-nondirectory (caar trace))
+                           "(non-file rule)")))
          (setq trace (cdr trace)))
        (goto-char (point-min))
        (gnus-configure-windows 'score-trace)))
@@ -2522,8 +2471,8 @@ EXTRA is the possible non-standard header."
        seen out file)
     (while (setq file (pop files))
       (cond
-       ;; Ignore files that start with a dot.
-       ((string-match "^\\." (file-name-nondirectory file))
+       ;; Ignore "." and "..".
+       ((member (file-name-nondirectory file) '("." ".."))
        nil)
        ;; Add subtrees of directory to also be searched.
        ((and (file-directory-p file)
@@ -2553,11 +2502,10 @@ GROUP using BNews sys file syntax."
         (klen (length kill-dir))
         (score-regexp (gnus-score-file-regexp))
         (trans (cdr (assq ?: nnheader-file-name-translation-alist)))
-        (group-trans (nnheader-translate-file-chars group t))
         ofiles not-match regexp)
     (save-excursion
       (set-buffer (gnus-get-buffer-create "*gnus score files*"))
-      (buffer-disable-undo)
+      (buffer-disable-undo (current-buffer))
       ;; Go through all score file names and create regexp with them
       ;; as the source.
       (while sfiles
@@ -2600,18 +2548,16 @@ GROUP using BNews sys file syntax."
          (if (looking-at "not.")
              (progn
                (setq not-match t)
-               (setq regexp
-                     (concat "^" (buffer-substring 5 (point-max)) "$")))
+               (setq regexp (concat "^" (buffer-substring 5 (point-max)) "$")))
            (setq regexp (concat "^" (buffer-substring 1 (point-max)) "$"))
            (setq not-match nil))
          ;; Finally - if this resulting regexp matches the group name,
          ;; we add this score file to the list of score files
          ;; applicable to this group.
          (when (or (and not-match
-                        (ignore-errors
-                          (not (string-match regexp group-trans))))
-                   (and (not not-match)
-                        (ignore-errors (string-match regexp group-trans))))
+                        (not (string-match regexp group)))
+                   (and (not not-match)
+                        (string-match regexp group)))
            (push (car sfiles) ofiles)))
        (setq sfiles (cdr sfiles)))
       (kill-buffer (current-buffer))
@@ -2679,7 +2625,7 @@ Destroys the current buffer."
 
 (defun gnus-sort-score-files (files)
   "Sort FILES so that the most general files come first."
-  (with-temp-buffer
+  (nnheader-temp-write nil
     (let ((alist
           (mapcar
            (lambda (file)
@@ -2891,7 +2837,7 @@ If ADAPT, return the home adaptive file instead."
 
 (defun gnus-decay-scores (alist day)
   "Decay non-permanent scores in ALIST."
-  (let ((times (- (time-to-days (current-time)) day))
+  (let ((times (- (gnus-time-to-day (current-time)) day))
        kill entry updated score n)
     (unless (zerop times)              ;Done decays today already?
       (while (setq entry (pop alist))
@@ -2905,7 +2851,7 @@ If ADAPT, return the home adaptive file instead."
                    n times)
              (while (natnump (decf n))
                (setq score (funcall gnus-decay-score-function score)))
-             (setcdr kill (cons score
+             (setcdr kill (cons score 
                                 (cdr (cdr kill)))))))))
     ;; Return whether this score file needs to be saved.  By Je-haysuss!
     updated))
index 29c2a31..ae9909b 100644 (file)
@@ -65,6 +65,8 @@
                                         "site-lisp/bbdb-1.51/")
   "Directory where Big Brother Database is found.")
 
+(defvar gnus-use-tm running-xemacs
+  "Set this if you want MIME support for Gnus")
 (defvar gnus-use-mhe nil
   "Set this if you want to use MH-E for mail reading")
 (defvar gnus-use-rmail nil
 ;;; We can't do this until we know where Gnus is.
 (require 'message)
 
+;;; Tools for MIME by
+;;; UMEDA Masanobu <umerin@mse.kyutech.ac.jp>
+;;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
+
+(when gnus-use-tm
+  (when (and (not gnus-use-installed-tm)
+            (null (member gnus-tm-lisp-directory load-path)))
+    (setq load-path (cons gnus-tm-lisp-directory load-path)))
+  ;; tm may or may not be dumped with XEmacs.  In Sunpro it is, otherwise
+  ;; it isn't.
+  (unless (featurep 'mime-setup)
+    (load "mime-setup")))
+
 ;;; Mailcrypt by
 ;;; Jin Choi <jin@atype.com>
 ;;; Patrick LoPresti <patl@lcs.mit.edu>
index 4a49c88..3d97829 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-soup.el --- SOUP packet writing support for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Per Abrahamsen <abraham@iesd.auc.dk>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -140,19 +140,21 @@ move those articles instead."
     (buffer-disable-undo tmp-buf)
     (save-excursion
       (while articles
+       ;; Find the header of the article.
+       (set-buffer gnus-summary-buffer)
+       (when (setq headers (gnus-summary-article-header (car articles)))
          ;; Put the article in a buffer.
-       (set-buffer tmp-buf)
-       (when (gnus-request-article-this-buffer
-              (car articles) gnus-newsgroup-name)
-         (setq headers (nnheader-parse-head t))
-         (save-restriction
-           (message-narrow-to-head)
-           (message-remove-header gnus-soup-ignored-headers t))
-         (gnus-soup-store gnus-soup-directory prefix headers
-                          gnus-soup-encoding-type
-                          gnus-soup-index-type)
-         (gnus-soup-area-set-number
-          area (1+ (or (gnus-soup-area-number area) 0))))
+         (set-buffer tmp-buf)
+         (when (gnus-request-article-this-buffer
+                (car articles) gnus-newsgroup-name)
+           (save-restriction
+             (message-narrow-to-head)
+             (message-remove-header gnus-soup-ignored-headers t))
+           (gnus-soup-store gnus-soup-directory prefix headers
+                            gnus-soup-encoding-type
+                            gnus-soup-index-type)
+           (gnus-soup-area-set-number
+            area (1+ (or (gnus-soup-area-number area) 0)))))
        ;; Mark article as read.
        (set-buffer gnus-summary-buffer)
        (gnus-summary-remove-process-mark (car articles))
@@ -166,11 +168,11 @@ move those articles instead."
   "Make a SOUP packet from the SOUP areas."
   (interactive)
   (gnus-soup-read-areas)
-  (if (file-exists-p gnus-soup-directory)
-      (if (directory-files gnus-soup-directory nil "\\.MSG$")
-         (gnus-soup-pack gnus-soup-directory gnus-soup-packer)
-       (message "No files to pack."))
-    (message "No such directory: %s" gnus-soup-directory)))
+  (unless (file-exists-p gnus-soup-directory)
+    (message "No such directory: %s" gnus-soup-directory))
+  (when (null (directory-files gnus-soup-directory nil "\\.MSG$"))
+    (message "No files to pack."))
+  (gnus-soup-pack gnus-soup-directory gnus-soup-packer))
 
 (defun gnus-group-brew-soup (n)
   "Make a soup packet from the current group.
@@ -372,7 +374,7 @@ though the two last may be nil if they are missing."
     (when (file-exists-p file)
       (save-excursion
        (set-buffer (nnheader-find-file-noselect file 'force))
-       (buffer-disable-undo)
+       (buffer-disable-undo (current-buffer))
        (goto-char (point-min))
        (while (not (eobp))
          (push (vector (gnus-soup-field)
@@ -395,7 +397,7 @@ file.  The vector contain three strings, [prefix name encoding]."
   (let (replies)
     (save-excursion
       (set-buffer (nnheader-find-file-noselect file))
-      (buffer-disable-undo)
+      (buffer-disable-undo (current-buffer))
       (goto-char (point-min))
       (while (not (eobp))
        (push (vector (gnus-soup-field) (gnus-soup-field)
@@ -420,7 +422,7 @@ file.  The vector contain three strings, [prefix name encoding]."
   "Write the AREAS file."
   (interactive)
   (when gnus-soup-areas
-    (with-temp-file (concat gnus-soup-directory "AREAS")
+    (nnheader-temp-write (concat gnus-soup-directory "AREAS")
       (let ((areas gnus-soup-areas)
            area)
        (while (setq area (pop areas))
@@ -441,7 +443,7 @@ file.  The vector contain three strings, [prefix name encoding]."
 
 (defun gnus-soup-write-replies (dir areas)
   "Write a REPLIES file in DIR containing AREAS."
-  (with-temp-file (concat dir "REPLIES")
+  (nnheader-temp-write (concat dir "REPLIES")
     (let (area)
       (while (setq area (pop areas))
        (insert (format "%s\t%s\t%s\n"
@@ -538,8 +540,7 @@ Return whether the unpacking was successful."
              (search-forward "\n\n")
              (forward-char -1)
              (insert mail-header-separator)
-             (setq message-newsreader (setq message-mailer
-                                            (gnus-extended-version)))
+             (setq message-user-agent (gnus-extended-version))
              (cond
               ((string= (gnus-soup-reply-kind (car replies)) "news")
                (gnus-message 5 "Sending news message to %s..."
index 443f6cd..2a1e355 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-spec.el --- format spec functions for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
                  (gnus-parse-format
                   new-format
                   (symbol-value
-                   (intern (format "gnus-%s-line-format-alist" type)))
+                   (intern (format "gnus-%s-line-format-alist"
+                                   (if (eq type 'article-mode)
+                                       'summary-mode type))))
                   (not (string-match "mode$" (symbol-name type))))))
          ;; Enter the new format spec into the list.
          (if entry
     (point) (progn ,@form (point))
     '(gnus-face t face ,(symbol-value (intern (format "gnus-face-%d" type))))))
 
-(defun gnus-balloon-face-function (form type)
-  `(gnus-put-text-property
-    (point) (progn ,@form (point))
-    'balloon-help
-    ,(intern (format "gnus-balloon-face-%d" type))))
-
 (defun gnus-tilde-max-form (el max-width)
   "Return a form that limits EL to MAX-WIDTH."
   (let ((max (abs max-width)))
   ;; SPEC-ALIST and returns a list that can be eval'ed to return the
   ;; string.  If the FORMAT string contains the specifiers %( and %)
   ;; the text between them will have the mouse-face text property.
-  ;; If the FORMAT string contains the specifiers %< and %>, the text between
-  ;; them will have the balloon-help text property.
   (if (string-match
-       "\\`\\(.*\\)%[0-9]?[{(<]\\(.*\\)%[0-9]?[})>]\\(.*\n?\\)\\'"
+       "\\`\\(.*\\)%[0-9]?[{(]\\(.*\\)%[0-9]?[})]\\(.*\n?\\)\\'"
        format)
       (gnus-parse-complex-format format spec-alist)
     ;; This is a simple format.
       (replace-match "\\\"" nil t))
     (goto-char (point-min))
     (insert "(\"")
-    (while (re-search-forward "%\\([0-9]+\\)?\\([{}()<>]\\)" nil t)
+    (while (re-search-forward "%\\([0-9]+\\)?\\([{}()]\\)" nil t)
       (let ((number (if (match-beginning 1)
                        (match-string 1) "0"))
            (delim (aref (match-string 2) 0)))
        (if (or (= delim ?\()
-               (= delim ?\{)
-               (= delim ?\<))
-           (replace-match (concat "\"("
-                                  (cond ((= delim ?\() "mouse")
-                                        ((= delim ?\{) "face")
-                                        (t "balloon"))
+               (= delim ?\{))
+           (replace-match (concat "\"(" (if (= delim ?\() "mouse" "face")
                                   " " number " \""))
          (replace-match "\")\""))))
     (goto-char (point-max))
   ;; This function parses the FORMAT string with the help of the
   ;; SPEC-ALIST and returns a list that can be eval'ed to return a
   ;; string.
-  (let ((max-width 0)
+  (let (max-width
        spec flist fstring elem result dontinsert user-defined
        type value pad-width spec-beg cut-width ignore-value
-       tilde-form tilde elem-type)
+       tilde-form tilde elem-type
+       (xemacs-mule-p (and gnus-xemacs (featurep 'mule))))
     (save-excursion
       (gnus-set-work-buffer)
       (insert format)
       (goto-char (point-min))
-      (while (re-search-forward "%" nil t)
+      (while (search-forward "%" nil t)
        (setq user-defined nil
              spec-beg nil
              pad-width nil
             (t
              nil)))
        ;; User-defined spec -- find the spec name.
-       (when (eq (setq spec (char-after)) ?u)
+       (when (= (setq spec (following-char)) ?u)
          (forward-char 1)
-         (setq user-defined (char-after)))
+         (setq user-defined (following-char)))
        (forward-char 1)
        (delete-region spec-beg (point))
 
            (setq elem '("*" ?s))))
          (setq elem-type (cadr elem))
          ;; Insert the new format elements.
-         (when pad-width
-           (insert (number-to-string pad-width)))
+         (and pad-width (not xemacs-mule-p)
+              (insert (number-to-string pad-width)))
          ;; Create the form to be evaled.
-         (if (or max-width cut-width ignore-value)
+         (if (or max-width cut-width ignore-value
+                 (and pad-width xemacs-mule-p))
              (progn
                (insert ?s)
                (let ((el (car elem)))
                    (setq el (gnus-tilde-cut-form el cut-width)))
                  (when max-width
                    (setq el (gnus-tilde-max-form el max-width)))
+                 (and pad-width xemacs-mule-p
+                      (setq el (gnus-tilde-pad-form el pad-width)))
                  (push el flist)))
            (insert elem-type)
            (push (car elem) flist))))
@@ -529,7 +523,7 @@ If PROPS, insert the result."
                       (not (eq 'byte-code (car form)))
                       ;; Under XEmacs, it's (funcall #<compiled-function ...>)
                       (not (and (eq 'funcall (car form))
-                                (byte-code-function-p (cadr form)))))
+                                (compiled-function-p (cadr form)))))
              (fset 'gnus-tmp-func `(lambda () ,form))
              (byte-compile 'gnus-tmp-func)
              (setcar (cddr entry) (gnus-byte-code 'gnus-tmp-func))))))
@@ -545,7 +539,7 @@ If PROPS, insert the result."
        (symbol-value (intern (format "gnus-%s-line-format" type)))
        (symbol-value (intern (format "gnus-%s-line-format-alist" type)))
        insertable)))
-
+       
 
 (provide 'gnus-spec)
 
index 7d15a9f..21abf17 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-srvr.el --- virtual server support for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -135,9 +135,6 @@ The following specs are understood:
     "D" gnus-server-deny-server
     "R" gnus-server-remove-denials
 
-    "n" next-line
-    "p" previous-line
-    
     "g" gnus-server-regenerate-server
 
     "\C-c\C-i" gnus-info-find-node
@@ -164,7 +161,7 @@ The following commands are available:
   (gnus-set-default-directory)
   (setq mode-line-process nil)
   (use-local-map gnus-server-mode-map)
-  (buffer-disable-undo)
+  (buffer-disable-undo (current-buffer))
   (setq truncate-lines t)
   (setq buffer-read-only t)
   (gnus-run-hooks 'gnus-server-mode-hook))
@@ -553,9 +550,9 @@ The following commands are available:
 
 (defun gnus-browse-foreign-server (server &optional return-buffer)
   "Browse the server SERVER."
-  (setq gnus-browse-current-method (gnus-server-to-method server))
+  (setq gnus-browse-current-method server)
   (setq gnus-browse-return-buffer return-buffer)
-  (let* ((method gnus-browse-current-method)
+  (let* ((method (gnus-server-to-method server))
         (gnus-select-method method)
         groups group)
     (gnus-message 5 "Connecting to %s..." (nth 1 method))
@@ -578,7 +575,7 @@ The following commands are available:
       (when gnus-carpal
        (gnus-carpal-setup-buffer 'browse))
       (gnus-configure-windows 'browse)
-      (buffer-disable-undo)
+      (buffer-disable-undo (current-buffer))
       (let ((buffer-read-only nil))
        (erase-buffer))
       (gnus-browse-mode)
@@ -592,11 +589,14 @@ The following commands are available:
          (goto-char (point-min))
          (unless (string= gnus-ignored-newsgroups "")
            (delete-matching-lines gnus-ignored-newsgroups))
-         (while (and (not (eobp)) (forward-line))
-           (ignore-errors
-             (push (cons (read cur)
-                         (max 0 (- (1+ (read cur)) (read cur))))
-                   groups)))))
+         (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)))))
       (setq groups (sort groups
                         (lambda (l1 l2)
                           (string< (car l1) (car l2)))))
@@ -636,7 +636,7 @@ buffer.
   (setq mode-name "Browse Server")
   (setq mode-line-process nil)
   (use-local-map gnus-browse-mode-map)
-  (buffer-disable-undo)
+  (buffer-disable-undo (current-buffer))
   (setq truncate-lines t)
   (gnus-set-default-directory)
   (setq buffer-read-only t)
@@ -654,7 +654,7 @@ buffer.
          (error "Couldn't enter %s" group))
       (unless (gnus-group-read-group nil no-article group)
        (error "Couldn't enter %s" group)))))
-
+      
 (defun gnus-browse-select-group ()
   "Select the current group."
   (interactive)
@@ -706,7 +706,7 @@ buffer.
     (save-excursion
       (beginning-of-line)
       ;; If this group it killed, then we want to subscribe it.
-      (when (eq (char-after) ?K)
+      (when (= (following-char) ?K)
        (setq sub t))
       (setq group (gnus-browse-group-name))
       (when (and sub
index d3c68a3..1237936 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-start.el --- startup functions for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -47,10 +47,11 @@ If a file with the `.el' or `.elc' suffixes exists, it will be read instead."
   :type 'file)
 
 (defcustom gnus-site-init-file
-  (ignore-errors
-    (concat (file-name-directory
-            (directory-file-name installation-directory))
-           "site-lisp/gnus-init"))
+  (condition-case nil
+      (concat (file-name-directory
+              (directory-file-name installation-directory))
+             "site-lisp/gnus-init")
+    (error nil))
   "*The site-wide Gnus Emacs-Lisp startup file name, or nil if none.
 If a file with the `.el' or `.elc' suffixes exists, it will be read instead."
   :group 'gnus-start
@@ -196,16 +197,6 @@ groups."
   :type '(choice integer
                 (const :tag "none" nil)))
 
-(defcustom gnus-read-newsrc-file t
-  "*Non-nil means that Gnus will read the `.newsrc' file.
-Gnus always reads its own startup file, which is called
-\".newsrc.eld\".  The file called \".newsrc\" is in a format that can
-be readily understood by other newsreaders.  If you don't plan on
-using other newsreaders, set this variable to nil to save some time on
-entry."
-  :group 'gnus-newsrc
-  :type 'boolean)
-
 (defcustom gnus-save-newsrc-file t
   "*Non-nil means that Gnus will save the `.newsrc' file.
 Gnus always saves its own startup file, which is called
@@ -232,12 +223,12 @@ not match this regexp will be removed before saving the list."
   :type 'boolean)
 
 (defcustom gnus-ignored-newsgroups
- (mapconcat 'identity
-           '("^to\\."                  ; not "real" groups
-             "^[0-9. \t]+ "            ; all digits in name
-             "[][\"#'()]"              ; bogus characters
-             )
-           "\\|")
+  (purecopy (mapconcat 'identity
+                      '("^to\\."       ; not "real" groups
+                        "^[0-9. \t]+ " ; all digits in name
+                        "[][\"#'()]"   ; bogus characters
+                        )
+                      "\\|"))
   "*A regexp to match uninteresting newsgroups in the active file.
 Any lines in the active file matching this regular expression are
 removed from the newsgroup list before anything else is done to it,
@@ -369,7 +360,7 @@ This hook is called as the first thing when Gnus is started."
 (defcustom gnus-after-getting-new-news-hook
   (when (gnus-boundp 'display-time-timer)
     '(display-time-event-handler))
-  "*A hook run after Gnus checks for new news when Gnus is already running."
+  "*A hook run after Gnus checks for new news."
   :group 'gnus-group-new
   :type 'hook)
 
@@ -391,11 +382,11 @@ Can be used to turn version control on or off."
   :type 'hook)
 
 (defcustom gnus-always-read-dribble-file nil
-  "Unconditionally read the dribble file."
+  "Uncoditionally read the dribble file."
   :group 'gnus-newsrc
   :type 'boolean)
 
-(defvar gnus-startup-file-coding-system 'binary
+(defvar gnus-startup-file-coding-system 'ctext
   "*Coding system for startup file.")
 
 ;;; Internal variables
@@ -436,9 +427,7 @@ Can be used to turn version control on or off."
                   (file-exists-p (concat file ".el"))
                   (file-exists-p (concat file ".elc")))
               (condition-case var
-                  (let ((coding-system-for-read
-                         gnus-startup-file-coding-system))
-                    (load file nil t))
+                  (load file nil t)
                 (error
                  (error "Error in %s: %s" file var)))))))))
 
@@ -722,6 +711,8 @@ prompt the user for the name of an NNTP server to use."
          (gnus-group-first-unread-group)
          (gnus-configure-windows 'group)
          (gnus-group-set-mode-line)
+         ;; For reading Info.
+         (set-language-info "Japanese" 'gnus-info "gnus-ja")
          (gnus-run-hooks 'gnus-started-hook))))))
 
 (defun gnus-start-draft-setup ()
@@ -794,7 +785,7 @@ prompt the user for the name of an NNTP server to use."
       (erase-buffer)
       (setq buffer-file-name dribble-file)
       (auto-save-mode t)
-      (buffer-disable-undo)
+      (buffer-disable-undo (current-buffer))
       (bury-buffer (current-buffer))
       (set-buffer-modified-p nil)
       (let ((auto (make-auto-save-file-name))
@@ -804,8 +795,8 @@ prompt the user for the name of an NNTP server to use."
          ;; Load whichever file is newest -- the auto save file
          ;; or the "real" file.
          (if (file-newer-than-file-p auto dribble-file)
-             (mm-insert-file-contents auto)
-           (mm-insert-file-contents dribble-file))
+             (nnheader-insert-file-contents auto)
+           (nnheader-insert-file-contents dribble-file))
          (unless (zerop (buffer-size))
            (set-buffer-modified-p t))
          ;; Set the file modes to reflect the .newsrc file modes.
@@ -864,11 +855,7 @@ prompt the user for the name of an NNTP server to use."
   "Setup news information.
 If RAWFILE is non-nil, the .newsrc file will also be read.
 If LEVEL is non-nil, the news will be set up at level LEVEL."
-  (require 'nnmail)
-  (let ((init (not (and gnus-newsrc-alist gnus-active-hashtb (not rawfile))))
-       ;; Binding this variable will inhibit multiple fetchings
-       ;; of the same mail source.
-       (nnmail-fetched-sources (list t)))
+  (let ((init (not (and gnus-newsrc-alist gnus-active-hashtb (not rawfile)))))
 
     (when init
       ;; Clear some variables to re-initialize news information.
@@ -952,7 +939,7 @@ If LEVEL is non-nil, the news will be set up at level LEVEL."
 
 (defun gnus-find-new-newsgroups (&optional arg)
   "Search for new newsgroups and add them.
-Each new newsgroup will be treated with `gnus-subscribe-newsgroup-method'.
+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
@@ -1116,16 +1103,11 @@ for new groups, and subscribe the new groups as zombies."
     got-new))
 
 (defun gnus-check-first-time-used ()
-  (catch 'ended
-    (let ((files (list gnus-current-startup-file
-                      (concat gnus-current-startup-file ".el")
-                      (concat gnus-current-startup-file ".eld")
-                      gnus-startup-file
-                      (concat gnus-startup-file ".el")
-                      (concat gnus-startup-file ".eld"))))
-      (while files
-       (when (file-exists-p (pop files))
-         (throw 'ended nil))))
+  (if (or (> (length gnus-newsrc-alist) 1)
+         (file-exists-p gnus-startup-file)
+         (file-exists-p (concat gnus-startup-file ".el"))
+         (file-exists-p (concat gnus-startup-file ".eld")))
+      nil
     (gnus-message 6 "First time user; subscribing you to default groups")
     (unless (gnus-read-active-file-p)
       (let ((gnus-read-active-file t))
@@ -1261,14 +1243,14 @@ for new groups, and subscribe the new groups as zombies."
            (setq active (gnus-active group))
            (setq num
                  (if active (- (1+ (cdr active)) (car active)) t))
-           ;; Shorten the select method if possible, if we need to
-           ;; store it at all (native groups).
-           (let ((method (gnus-method-simplify
-                          (or gnus-override-subscribe-method
-                              (gnus-group-method group)))))
-             (if method
-                 (setq info (list group level nil nil method))
-               (setq info (list group level nil)))))
+           ;; Check whether the group is foreign.  If so, the
+           ;; foreign select method has to be entered into the
+           ;; info.
+           (let ((method (or gnus-override-subscribe-method
+                             (gnus-group-method group))))
+             (if (eq method gnus-select-method)
+                 (setq info (list group level nil))
+               (setq info (list group level nil nil method)))))
          (unless previous
            (setq previous
                  (let ((p gnus-newsrc-alist))
@@ -1458,7 +1440,7 @@ newsgroup."
        ;; Then we want to peel off any elements that are higher
        ;; than the upper active limit.
        (let ((srange range))
-         ;; Go past all valid elements.
+         ;; Go past all legal elements.
          (while (and (cdr srange)
                      (<= (or (and (atom (cadr srange))
                                   (cadr srange))
@@ -1466,7 +1448,7 @@ newsgroup."
                          (cdr active)))
            (setq srange (cdr srange)))
          (when (cdr srange)
-           ;; Nuke all remaining invalid elements.
+           ;; Nuke all remaining illegal elements.
            (setcdr srange nil))
 
          ;; Adjust the final element.
@@ -1531,27 +1513,18 @@ newsgroup."
                                           "-request-update-info")))
              (inline (gnus-request-update-info info method))))
        ;; These groups are native or secondary.
-       (cond
-        ;; We don't want these groups.
-        ((> (gnus-info-level info) level)
-         (setq active 'ignore))
-        ;; Activate groups.
-        ((not gnus-read-active-file)
+       (when (and (<= (gnus-info-level info) level)
+                  (not gnus-read-active-file))
          (setq active (gnus-activate-group group 'scan))
-         (inline (gnus-close-group group)))))
+         (inline (gnus-close-group group))))
 
       ;; Get the number of unread articles in the group.
-      (cond
-       ((eq active 'ignore)
-       ;; Don't do anything.
-       )
-       (active
-       (inline (gnus-get-unread-articles-in-group info active t)))
-       (t
+      (if active
+         (inline (gnus-get-unread-articles-in-group info active t))
        ;; The group couldn't be reached, so we nix out the number of
        ;; unread articles and stuff.
        (gnus-set-active group nil)
-       (setcar (gnus-gethash group gnus-newsrc-hashtb) t))))
+       (setcar (gnus-gethash group gnus-newsrc-hashtb) t)))
 
     (gnus-message 5 "Checking new news...done")))
 
@@ -1659,30 +1632,30 @@ newsgroup."
 (defun gnus-read-active-file (&optional force not-native)
   (gnus-group-set-mode-line)
   (let ((methods
-        (mapcar
-         (lambda (m) (if (stringp m) (gnus-server-get-method nil m) m))
-         (append
-          (if (and (not not-native)
-                   (gnus-check-server gnus-select-method))
-              ;; The native server is available.
-              (cons gnus-select-method gnus-secondary-select-methods)
-            ;; The native server is down, so we just do the
-            ;; secondary ones.
-            gnus-secondary-select-methods)
-          ;; Also read from the archive server.
-          (when (gnus-archive-server-wanted-p)
-            (list "archive")))))
-       method where mesg list-type)
+        (append
+         (if (and (not not-native)
+                  (gnus-check-server gnus-select-method))
+             ;; The native server is available.
+             (cons gnus-select-method gnus-secondary-select-methods)
+           ;; The native server is down, so we just do the
+           ;; secondary ones.
+           gnus-secondary-select-methods)
+         ;; Also read from the archive server.
+         (when (gnus-archive-server-wanted-p)
+           (list "archive"))))
+       list-type)
     (setq gnus-have-read-active-file nil)
     (save-excursion
       (set-buffer nntp-server-buffer)
-      (while (setq method (pop methods))
-       (unless (member method methods)
-         (setq where (nth 1 method)
-               mesg (format "Reading active file%s via %s..."
+      (while methods
+       (let* ((method (if (stringp (car methods))
+                          (gnus-server-get-method nil (car methods))
+                        (car methods)))
+              (where (nth 1 method))
+              (mesg (format "Reading active file%s via %s..."
                             (if (and where (not (zerop (length where))))
                                 (concat " from " where) "")
-                            (car method)))
+                            (car method))))
          (gnus-message 5 mesg)
          (when (gnus-check-server method)
            ;; Request that the backend scan its incoming messages.
@@ -1729,7 +1702,15 @@ newsgroup."
                (gnus-active-to-gnus-format method gnus-active-hashtb nil t)
                ;; We mark this active file as read.
                (push method gnus-have-read-active-file)
-               (gnus-message 5 "%sdone" mesg))))))))))
+               (gnus-message 5 "%sdone" mesg))))))
+       (setq methods (cdr methods))))))
+
+
+(defun gnus-ignored-newsgroups-has-to-p ()
+  "Non-nil iff gnus-ignored-newsgroups includes \"^to\\\\.\" as an element."
+  ;; note this regexp is the same as:
+  ;; (concat (regexp-quote "^to\\.") "\\($\\|" (regexp-quote "\\|") "\\)")
+  (string-match "\\^to\\\\\\.\\($\\|\\\\|\\)" gnus-ignored-newsgroups))
 
 ;; Read an active file and place the results in `gnus-active-hashtb'.
 (defun gnus-active-to-gnus-format (&optional method hashtb ignore-errors
@@ -1748,11 +1729,13 @@ newsgroup."
                              (gnus-make-hashtable 4096)))))))
     ;; Delete unnecessary lines.
     (goto-char (point-min))
-    (cond
-     ((string= gnus-ignored-newsgroups "")
-      (delete-matching-lines "^to\\."))
-     (t
-      (delete-matching-lines (concat "^to\\.\\|" gnus-ignored-newsgroups))))
+    (cond ((gnus-ignored-newsgroups-has-to-p)
+          (delete-matching-lines gnus-ignored-newsgroups))
+         ((string= gnus-ignored-newsgroups "")
+          (delete-matching-lines "^to\\."))
+         (t
+          (delete-matching-lines (concat "^to\\.\\|"
+                                         gnus-ignored-newsgroups))))
 
     ;; Make the group names readable as a lisp expression even if they
     ;; contain special characters.
@@ -1761,7 +1744,7 @@ newsgroup."
       (insert ?\\))
 
     ;; Let the Gnus agent save the active file.
-    (when (and gnus-agent real-active gnus-plugged)
+    (when (and gnus-agent real-active)
       (gnus-agent-save-active method))
 
     ;; If these are groups from a foreign select method, we insert the
@@ -1789,13 +1772,13 @@ newsgroup."
                       (progn
                         (skip-chars-forward " \t")
                         (not
-                         (or (eq (char-after) ?=)
-                             (eq (char-after) ?x)
-                             (eq (char-after) ?j)))))
+                         (or (= (following-char) ?=)
+                             (= (following-char) ?x)
+                             (= (following-char) ?j)))))
                  (progn
                    (set group (cons min max))
                    ;; if group is moderated, stick in moderation table
-                   (when (eq (char-after) ?m)
+                   (when (= (following-char) ?m)
                      (unless gnus-moderated-hashtb
                        (setq gnus-moderated-hashtb (gnus-make-hashtable)))
                      (gnus-sethash (symbol-name group) t
@@ -1806,7 +1789,7 @@ newsgroup."
                (symbolp group)
                (set group nil))
           (unless ignore-errors
-            (gnus-message 3 "Warning - invalid active: %s"
+            (gnus-message 3 "Warning - illegal active: %s"
                           (buffer-substring
                            (gnus-point-at-bol) (gnus-point-at-eol))))))
        (widen)
@@ -1828,41 +1811,39 @@ newsgroup."
                     (gnus-group-prefixed-name "" method))))
 
     ;; Let the Gnus agent save the active file.
-    (if (and gnus-agent real-active gnus-plugged)
-       (progn
-         (gnus-agent-save-groups method)
-         (gnus-active-to-gnus-format method hashtb nil real-active))
-
-      (goto-char (point-min))
-      ;; We split this into to separate loops, one with the prefix
-      ;; and one without to speed the reading up somewhat.
-      (if prefix
-         (let (min max opoint group)
-           (while (not (eobp))
-             (condition-case ()
-                 (progn
-                   (read cur) (read cur)
-                   (setq min (read cur)
-                         max (read cur)
-                         opoint (point))
-                   (skip-chars-forward " \t")
-                   (insert prefix)
-                   (goto-char opoint)
-                   (set (let ((obarray hashtb)) (read cur))
-                        (cons min max)))
-               (error (and group (symbolp group) (set group nil))))
-             (forward-line 1)))
-       (let (min max group)
+    (when (and gnus-agent real-active)
+      (gnus-agent-save-groups method))
+    
+    (goto-char (point-min))
+    ;; We split this into to separate loops, one with the prefix
+    ;; and one without to speed the reading up somewhat.
+    (if prefix
+       (let (min max opoint group)
          (while (not (eobp))
            (condition-case ()
-               (when (eq (char-after) ?2)
+               (progn
                  (read cur) (read cur)
                  (setq min (read cur)
-                       max (read cur))
-                 (set (setq group (let ((obarray hashtb)) (read cur)))
+                       max (read cur)
+                       opoint (point))
+                 (skip-chars-forward " \t")
+                 (insert prefix)
+                 (goto-char opoint)
+                 (set (let ((obarray hashtb)) (read cur))
                       (cons min max)))
              (error (and group (symbolp group) (set group nil))))
-           (forward-line 1)))))))
+           (forward-line 1)))
+      (let (min max group)
+       (while (not (eobp))
+         (condition-case ()
+             (when (= (following-char) ?2)
+               (read cur) (read cur)
+               (setq min (read cur)
+                     max (read cur))
+               (set (setq group (let ((obarray hashtb)) (read cur)))
+                    (cons min max)))
+           (error (and group (symbolp group) (set group nil))))
+         (forward-line 1))))))
 
 (defun gnus-read-newsrc-file (&optional force)
   "Read startup file.
@@ -1880,8 +1861,7 @@ If FORCE is non-nil, the .newsrc file is read."
       ;; file (ticked articles, killed groups, foreign methods, etc.)
       (gnus-read-newsrc-el-file quick-file)
 
-      (when (and gnus-read-newsrc-file
-                (file-exists-p gnus-current-startup-file)
+      (when (and (file-exists-p gnus-current-startup-file)
                 (or force
                     (and (file-newer-than-file-p newsrc-file quick-file)
                          (file-newer-than-file-p newsrc-file
@@ -1897,7 +1877,7 @@ If FORCE is non-nil, the .newsrc file is read."
        (save-excursion
          (gnus-message 5 "Reading %s..." newsrc-file)
          (set-buffer (nnheader-find-file-noselect newsrc-file))
-         (buffer-disable-undo)
+         (buffer-disable-undo (current-buffer))
          (gnus-newsrc-to-gnus-format)
          (kill-buffer (current-buffer))
          (gnus-message 5 "Reading %s...done" newsrc-file)))
@@ -1936,14 +1916,17 @@ If FORCE is non-nil, the .newsrc file is read."
     ;; We always, always read the .eld file.
     (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))
-       (error
-        (ding)
-        (unless (gnus-yes-or-no-p
-                 (format "Error in %s; continue? " ding-file))
-          (error "Error in %s" ding-file))))
+      (when (file-exists-p ding-file)
+       (condition-case nil
+           (with-temp-buffer
+             (insert-file-contents-as-coding-system
+              gnus-startup-file-coding-system ding-file)
+             (eval-region (point-min) (point-max)))
+         (error
+          (ding)
+          (unless (gnus-yes-or-no-p
+                   (format "Error in %s; continue? " ding-file))
+            (error "Error in %s" ding-file)))))
       (when gnus-newsrc-assoc
        (setq gnus-newsrc-alist gnus-newsrc-assoc)))
     (gnus-make-hashtable-from-newsrc-alist)
@@ -2073,7 +2056,7 @@ If FORCE is non-nil, the .newsrc file is read."
        (unless (boundp symbol)
          (set symbol nil))
        ;; It was a group name.
-       (setq subscribed (eq (char-after) ?:)
+       (setq subscribed (= (following-char) ?:)
              group (symbol-name symbol)
              reads nil)
        (if (eolp)
@@ -2097,7 +2080,7 @@ If FORCE is non-nil, the .newsrc file is read."
                           (read buf)))
              (widen)
              ;; If the next character is a dash, then this is a range.
-             (if (eq (char-after) ?-)
+             (if (= (following-char) ?-)
                  (progn
                    ;; We read the upper bound of the range.
                    (forward-char 1)
@@ -2119,8 +2102,8 @@ If FORCE is non-nil, the .newsrc file is read."
                (push num1 reads))
              ;; If the next char in ?\n, then we have reached the end
              ;; of the line and return nil.
-             (not (eq (char-after) ?\n)))
-            ((eq (char-after) ?\n)
+             (/= (following-char) ?\n))
+            ((= (following-char) ?\n)
              ;; End of line, so we end.
              nil)
             (t
@@ -2134,7 +2117,7 @@ If FORCE is non-nil, the .newsrc file is read."
                            (buffer-substring (gnus-point-at-bol)
                                              (gnus-point-at-eol))))
              nil))
-         ;; Skip past ", ".  Spaces are invalid in these ranges, but
+         ;; Skip past ", ".  Spaces are illegal in these ranges, but
          ;; we allow them, because it's a common mistake to put a
          ;; space after the comma.
          (skip-chars-forward ", "))
@@ -2246,7 +2229,7 @@ If FORCE is non-nil, the .newsrc file is read."
                  (gnus-point-at-eol)))
        ;; Search for all "words"...
        (while (re-search-forward "[^ \t,\n]+" eol t)
-         (if (eq (char-after (match-beginning 0)) ?!)
+         (if (= (char-after (match-beginning 0)) ?!)
              ;; If the word begins with a bang (!), this is a "not"
              ;; spec.  We put this spec (minus the bang) and the
              ;; symbol `ignore' into the list.
@@ -2294,13 +2277,15 @@ If FORCE is non-nil, the .newsrc file is read."
          (setq buffer-file-name
                (concat gnus-current-startup-file ".eld"))
          (setq default-directory (file-name-directory buffer-file-name))
-         (buffer-disable-undo)
+         (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))
+         (write-region-as-coding-system
+          gnus-startup-file-coding-system
+          (point-min) (point-max) (buffer-file-name))
+         (set-buffer-modified-p nil)
          (kill-buffer (current-buffer))
          (gnus-message
           5 "Saving %s.eld...done" gnus-current-startup-file))
@@ -2358,7 +2343,7 @@ If FORCE is non-nil, the .newsrc file is read."
          info ranges range method)
       (setq buffer-file-name gnus-current-startup-file)
       (setq default-directory (file-name-directory buffer-file-name))
-      (buffer-disable-undo)
+      (buffer-disable-undo (current-buffer))
       (erase-buffer)
       ;; Write options.
       (when gnus-newsrc-options
@@ -2444,6 +2429,7 @@ If FORCE is non-nil, the .newsrc file is read."
       (gnus-message 7 "Reading slave newsrcs...")
       (save-excursion
        (set-buffer (gnus-get-buffer-create " *gnus slave*"))
+       (buffer-disable-undo (current-buffer))
        (setq slave-files
              (sort (mapcar (lambda (file)
                              (list (nth 5 (file-attributes file)) file))
@@ -2501,8 +2487,6 @@ If FORCE is non-nil, the .newsrc file is read."
 
     (gnus-message 5 "Reading descriptions file via %s..." (car method))
     (cond
-     ((null (gnus-get-function method 'request-list-newsgroups t))
-      t)
      ((not (gnus-check-server method))
       (gnus-message 1 "Couldn't open server")
       nil)
@@ -2551,8 +2535,8 @@ If FORCE is non-nil, the .newsrc file is read."
                          enable-multibyte-characters
                          (fboundp 'gnus-mule-get-coding-system)
                          (gnus-mule-get-coding-system (symbol-name group)))))
-               (when coding
-                 (setq str (mm-decode-coding-string str (car coding))))
+               (if coding
+                   (setq str (gnus-decode-coding-string str (car coding))))
                (set group str)))
            (forward-line 1))))
       (gnus-message 5 "Reading descriptions file...done")
index 2b175b6..c78156c 100644 (file)
@@ -1,8 +1,9 @@
-;;; gnus-sum.el --- summary mode commands for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;;; gnus-sum.el --- summary mode commands for Semi-gnus
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: news
+;;         MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Keywords: mail, news, MIME
 
 ;; This file is part of GNU Emacs.
 
 (require 'gnus-range)
 (require 'gnus-int)
 (require 'gnus-undo)
-(require 'gnus-util)
-(require 'mm-decode)
+(require 'mime-view)
+
 (autoload 'gnus-summary-limit-include-cached "gnus-cache" nil t)
+(autoload 'gnus-set-summary-default-charset "gnus-i18n" nil t)
 
 (defcustom gnus-kill-summary-on-exit t
   "*If non-nil, kill the summary buffer when you exit from it.
@@ -253,12 +255,8 @@ equal will be included."
 (defcustom gnus-auto-select-first t
   "*If nil, don't select the first unread article when entering a group.
 If this variable is `best', select the highest-scored unread article
-in the group.  If t, select the first unread article.
-
-This variable can also be a function to place point on a likely
-subject line.  Useful values include `gnus-summary-first-unread-subject',
-`gnus-summary-first-unread-article' and
-`gnus-summary-best-unread-article'.
+in the group.  If neither nil nor `best', select the first unread
+article.
 
 If you want to prevent automatic selection of the first unread article
 in some newsgroups, set the variable to nil in
@@ -266,10 +264,7 @@ in some newsgroups, set the variable to nil in
   :group 'gnus-group-select
   :type '(choice (const :tag "none" nil)
                 (const best)
-                (sexp :menu-tag "first" t)
-                (function-item gnus-summary-first-unread-subject)
-                (function-item gnus-summary-first-unread-article)
-                (function-item gnus-summary-best-unread-article)))
+                (sexp :menu-tag "first" t)))
 
 (defcustom gnus-auto-select-next t
   "*If non-nil, offer to go to the next group from the end of the previous.
@@ -310,7 +305,6 @@ and non-`vertical', do both horizontal and vertical recentering."
   :group 'gnus-summary-maneuvering
   :type '(choice (const :tag "none" nil)
                 (const vertical)
-                (integer :tag "height")
                 (sexp :menu-tag "both" t)))
 
 (defcustom gnus-show-all-headers nil
@@ -323,7 +317,7 @@ and non-`vertical', do both horizontal and vertical recentering."
   "*If non-nil, ignore articles with identical Message-ID headers."
   :group 'gnus-summary
   :type 'boolean)
-
+  
 (defcustom gnus-single-article-buffer t
   "*If non-nil, display all articles in the same buffer.
 If nil, each group will get its own article buffer."
@@ -337,6 +331,13 @@ variable."
   :group 'gnus-article-various
   :type 'boolean)
 
+(defcustom gnus-show-mime t
+  "*If non-nil, do mime processing of articles.
+The articles will simply be fed to the function given by
+`gnus-show-mime-method'."
+  :group 'gnus-article-mime
+  :type 'boolean)
+
 (defcustom gnus-move-split-methods nil
   "*Variable used to suggest where articles are to be moved to.
 It uses the same syntax as the `gnus-split-methods' variable."
@@ -345,7 +346,7 @@ It uses the same syntax as the `gnus-split-methods' variable."
                         (cons :value ("" "") regexp (repeat string))
                         (sexp :value nil))))
 
-(defcustom gnus-unread-mark ? ;Whitespace
+(defcustom gnus-unread-mark ? 
   "*Mark used for unread articles."
   :group 'gnus-summary-marks
   :type 'character)
@@ -460,7 +461,7 @@ It uses the same syntax as the `gnus-split-methods' variable."
   :group 'gnus-summary-marks
   :type 'character)
 
-(defcustom gnus-empty-thread-mark ? ;Whitespace
+(defcustom gnus-empty-thread-mark ? 
   "*There is no thread under the article."
   :group 'gnus-summary-marks
   :type 'character)
@@ -475,19 +476,6 @@ It uses the same syntax as the `gnus-split-methods' variable."
   :group 'gnus-extract-view
   :type 'boolean)
 
-(defcustom gnus-auto-expirable-marks
-  (list gnus-killed-mark gnus-del-mark gnus-catchup-mark
-       gnus-low-score-mark gnus-ancient-mark gnus-read-mark
-       gnus-souped-mark gnus-duplicate-mark)
-  "*The list of marks converted into expiration if a group is auto-expirable."
-  :group 'gnus-summary
-  :type '(repeat character))
-
-(defcustom gnus-inhibit-user-auto-expire t
-  "*If non-nil, user marking commands will not mark an article as expirable, even if the group has auto-expire turned on."
-  :group 'gnus-summary
-  :type 'boolean)
-
 (defcustom gnus-view-pseudos nil
   "*If `automatic', pseudo-articles will be viewed automatically.
 If `not-confirm', pseudos will be viewed automatically, and the user
@@ -519,7 +507,7 @@ with some simple extensions.
   :group 'gnus-threading
   :type 'string)
 
-(defcustom gnus-summary-mode-line-format "Gnus: %g [%A] %Z"
+(defcustom gnus-summary-mode-line-format "Gnus: %%b [%A] %Z"
   "*The format specification for the summary mode line.
 It works along the same lines as a normal formatting string,
 with some simple extensions:
@@ -606,7 +594,7 @@ See `gnus-thread-score-function' for en explanation of what a
 \"thread score\" is.
 
 This variable is local to the summary buffers."
-  :group 'gnus-threading
+  :group 'gnus-treading
   :group 'gnus-score-default
   :type '(choice (const :tag "off" nil)
                 integer))
@@ -678,7 +666,24 @@ is not run if `gnus-visual' is nil."
   :group 'gnus-summary-visual
   :type 'hook)
 
-(defcustom gnus-parse-headers-hook nil
+(defcustom gnus-structured-field-decoder
+  #'eword-decode-and-unfold-structured-field-body
+  "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))
+     ))
+  "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)
@@ -783,69 +788,10 @@ mark:    The articles mark."
 The function is called with one parameter, the article header vector,
 which it may alter in any way.")
 
-(defvar gnus-decode-encoded-word-function 'mail-decode-encoded-word-string
-  "Variable that says which function should be used to decode a string with encoded words.")
-
-(defcustom gnus-extra-headers nil
-  "*Extra headers to parse."
-  :group 'gnus-summary
-  :type '(repeat symbol))
-
-(defcustom gnus-ignored-from-addresses
-  (and user-mail-address (regexp-quote user-mail-address))
-  "*Regexp of From headers that may be suppressed in favor of To headers."
-  :group 'gnus-summary
-  :type 'regexp)
-
-(defcustom gnus-group-charset-alist
-  '(("^hk\\>\\|^tw\\>\\|\\<big5\\>" cn-big5)
-    ("^cn\\>\\|\\<chinese\\>" cn-gb-2312)
-    ("^fj\\>\\|^japan\\>" iso-2022-jp-2)
-    ("^relcom\\>" koi8-r)
-    ("^\\(cz\\|hun\\|pl\\|sk\\|hr\\)\\>" iso-8859-2)
-    ("^israel\\>" iso-8859-1)
-    ("^han\\>" euc-kr)
-    ("^\\(comp\\|rec\\|alt\\|sci\\|soc\\|news\\|gnu\\|bofh\\)\\>" iso-8859-1)
-    (".*" iso-8859-1))
-  "Alist of regexps (to match group names) and default charsets to be used when reading."
-  :type '(repeat (list (regexp :tag "Group")
-                      (symbol :tag "Charset")))
-  :group 'gnus-charset)
-
-(defcustom gnus-newsgroup-ignored-charsets '(unknown-8bit)
-  "List of charsets that should be ignored.
-When these charsets are used in the \"charset\" parameter, the
-default charset will be used instead."
-  :type '(repeat symbol)
-  :group 'gnus-charset)
-
-(defcustom gnus-group-ignored-charsets-alist 
-  '(("alt\\.chinese\\.text" iso-8859-1))
-  "Alist of regexps (to match group names) and charsets that should be ignored.
-When these charsets are used in the \"charset\" parameter, the
-default charset will be used instead."
-  :type '(repeat (cons (regexp :tag "Group")
-                      (repeat symbol)))
-  :group 'gnus-charset)
-
-(defcustom gnus-group-highlight-words-alist nil
-  "Alist of group regexps and highlight regexps.
-This variable uses the same syntax as `gnus-emphasis-alist'."
-  :type '(repeat (cons (regexp :tag "Group")
-                      (repeat (list (regexp :tag "Highlight regexp")
-                                    (number :tag "Group for entire word" 0)
-                                    (number :tag "Group for displayed part" 0)
-                                    (symbol :tag "Face" 
-                                            gnus-emphasis-highlight-words)))))
-  :group 'gnus-summary-visual)
-
 ;;; Internal variables
 
-(defvar gnus-article-mime-handles nil)
-(defvar gnus-article-decoded-p nil)
 (defvar gnus-scores-exclude-files nil)
 (defvar gnus-page-broken nil)
-(defvar gnus-inhibit-mime-unbuttonizing nil)
 
 (defvar gnus-original-article nil)
 (defvar gnus-article-internal-prepare-hook nil)
@@ -900,7 +846,6 @@ This variable uses the same syntax as `gnus-emphasis-alist'."
     (?l (bbb-grouplens-score gnus-tmp-header) ?s)
     (?V (gnus-thread-total-score (and (boundp 'thread) (car thread))) ?d)
     (?U gnus-tmp-unread ?c)
-    (?f (gnus-summary-from-or-to-or-newsgroups gnus-tmp-header) ?s)
     (?t (gnus-summary-number-of-articles-in-thread
         (and (boundp 'thread) (car thread)) gnus-tmp-level)
        ?d)
@@ -1027,9 +972,6 @@ variable (string, integer, character, etc).")
 (defvar gnus-have-all-headers nil)
 (defvar gnus-last-article nil)
 (defvar gnus-newsgroup-history nil)
-(defvar gnus-newsgroup-charset nil)
-(defvar gnus-newsgroup-ephemeral-charset nil)
-(defvar gnus-newsgroup-ephemeral-ignored-charsets nil)
 
 (defconst gnus-summary-local-variables
   '(gnus-newsgroup-name
@@ -1051,8 +993,7 @@ variable (string, integer, character, etc).")
     gnus-newsgroup-dependencies gnus-newsgroup-selected-overlay
     gnus-newsgroup-scored gnus-newsgroup-kill-headers
     gnus-thread-expunge-below
-    gnus-score-alist gnus-current-score-file
-    (gnus-summary-expunge-below . global)
+    gnus-score-alist gnus-current-score-file gnus-summary-expunge-below
     (gnus-summary-mark-below . global)
     gnus-newsgroup-active gnus-scores-exclude-files
     gnus-newsgroup-history gnus-newsgroup-ancient
@@ -1062,52 +1003,12 @@ variable (string, integer, character, etc).")
     (gnus-newsgroup-expunged-tally . 0)
     gnus-cache-removable-articles gnus-newsgroup-cached
     gnus-newsgroup-data gnus-newsgroup-data-reverse
-    gnus-newsgroup-limit gnus-newsgroup-limits
-    gnus-newsgroup-charset)
+    gnus-newsgroup-limit gnus-newsgroup-limits)
   "Variables that are buffer-local to the summary buffers.")
 
 ;; Byte-compiler warning.
 (defvar gnus-article-mode-map)
 
-;; MIME stuff.
-
-(defvar gnus-decode-encoded-word-methods
-  '(mail-decode-encoded-word-string)
-  "List of methods used to decode encoded words.
-
-This variable is a list of FUNCTION or (REGEXP . FUNCTION). If item is
-FUNCTION, FUNCTION will be apply to all newsgroups. If item is a
-(REGEXP . FUNCTION), FUNCTION will be only apply to thes newsgroups
-whose names match REGEXP.
-
-For example:
-((\"chinese\" . gnus-decode-encoded-word-string-by-guess)
- mail-decode-encoded-word-string
- (\"chinese\" . rfc1843-decode-string))
-")
-
-(defvar gnus-decode-encoded-word-methods-cache nil)
-
-(defun gnus-multi-decode-encoded-word-string (string)
-  "Apply the functions from `gnus-encoded-word-methods' that match."
-  (unless (and gnus-decode-encoded-word-methods-cache
-              (eq gnus-newsgroup-name
-                  (car gnus-decode-encoded-word-methods-cache)))
-    (setq gnus-decode-encoded-word-methods-cache (list gnus-newsgroup-name))
-    (mapc '(lambda (x)
-            (if (symbolp x)
-                (nconc gnus-decode-encoded-word-methods-cache (list x))
-              (if (and gnus-newsgroup-name
-                       (string-match (car x) gnus-newsgroup-name))
-                  (nconc gnus-decode-encoded-word-methods-cache
-                         (list (cdr x))))))
-         gnus-decode-encoded-word-methods))
-  (let ((xlist gnus-decode-encoded-word-methods-cache))
-    (pop xlist)
-    (while xlist
-      (setq string (funcall (pop xlist) string))))
-  string)
-
 ;; Subject simplification.
 
 (defun gnus-simplify-whitespace (str)
@@ -1298,7 +1199,6 @@ increase the score of each group you read."
     "\C-c\M-\C-s" gnus-summary-limit-include-expunged
     "\C-c\C-s\C-n" gnus-summary-sort-by-number
     "\C-c\C-s\C-l" gnus-summary-sort-by-lines
-    "\C-c\C-s\C-c" gnus-summary-sort-by-chars
     "\C-c\C-s\C-a" gnus-summary-sort-by-author
     "\C-c\C-s\C-s" gnus-summary-sort-by-subject
     "\C-c\C-s\C-d" gnus-summary-sort-by-date
@@ -1308,6 +1208,7 @@ increase the score of each group you read."
     "\M-g" gnus-summary-rescan-group
     "w" gnus-summary-stop-page-breaking
     "\C-c\C-r" gnus-summary-caesar-message
+    "\M-t" gnus-summary-toggle-mime
     "f" gnus-summary-followup
     "F" gnus-summary-followup-with-original
     "C" gnus-summary-cancel-article
@@ -1329,14 +1230,14 @@ increase the score of each group you read."
     "a" gnus-summary-post-news
     "x" gnus-summary-limit-to-unread
     "s" gnus-summary-isearch-article
-    "t" gnus-summary-toggle-header
+    "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
     "\M-\C-e" gnus-summary-edit-parameters
-    "\M-\C-g" gnus-summary-customize-parameters
     "\C-c\C-b" gnus-bug
     "*" gnus-cache-enter-article
     "\M-*" gnus-cache-remove-article
@@ -1346,10 +1247,7 @@ increase the score of each group you read."
     "L" gnus-summary-lower-score
     "\M-i" gnus-symbolic-argument
     "h" gnus-summary-select-article-buffer
-
-    "b" gnus-article-view-part
-    "\M-t" gnus-summary-toggle-display-buttonized
-
+    
     "V" gnus-summary-score-map
     "X" gnus-uu-extract-map
     "S" gnus-summary-send-map)
@@ -1391,14 +1289,12 @@ increase the score of each group you read."
     "a" gnus-summary-limit-to-author
     "u" gnus-summary-limit-to-unread
     "m" gnus-summary-limit-to-marks
-    "M" gnus-summary-limit-exclude-marks
     "v" gnus-summary-limit-to-score
     "*" gnus-summary-limit-include-cached
     "D" gnus-summary-limit-include-dormant
     "T" gnus-summary-limit-include-thread
     "d" gnus-summary-limit-exclude-dormant
     "t" gnus-summary-limit-to-age
-    "x" gnus-summary-limit-to-extra 
     "E" gnus-summary-limit-include-expunged
     "c" gnus-summary-limit-exclude-childless-dormant
     "C" gnus-summary-limit-mark-excluded-as-read)
@@ -1469,13 +1365,11 @@ increase the score of each group you read."
     "e" gnus-summary-end-of-article
     "^" gnus-summary-refer-parent-article
     "r" gnus-summary-refer-parent-article
-    "D" gnus-summary-enter-digest-group
     "R" gnus-summary-refer-references
     "T" gnus-summary-refer-thread
     "g" gnus-summary-show-article
     "s" gnus-summary-isearch-article
-    "P" gnus-summary-print-article
-    "t" gnus-article-babel)
+    "P" gnus-summary-print-article)
 
   (gnus-define-keys (gnus-summary-wash-map "W" gnus-summary-mode-map)
     "b" gnus-article-add-buttons
@@ -1483,16 +1377,14 @@ increase the score of each group you read."
     "o" gnus-article-treat-overstrike
     "e" gnus-article-emphasize
     "w" gnus-article-fill-cited-article
-    "Q" gnus-article-fill-long-lines
-    "C" gnus-article-capitalize-sentences
     "c" gnus-article-remove-cr
-    "q" gnus-article-de-quoted-unreadable
     "f" gnus-article-display-x-face
     "l" gnus-summary-stop-page-breaking
     "r" gnus-summary-caesar-message
     "t" gnus-article-hide-headers
     "v" gnus-summary-verbose-headers
-    "H" gnus-article-strip-headers-in-body
+    "m" gnus-summary-toggle-mime
+    "h" gnus-article-treat-html
     "d" gnus-article-treat-dumbquotes)
 
   (gnus-define-keys (gnus-summary-wash-hide-map "W" gnus-summary-wash-map)
@@ -1503,7 +1395,6 @@ increase the score of each group you read."
     "c" gnus-article-hide-citation
     "C" gnus-article-hide-citation-in-followups
     "p" gnus-article-hide-pgp
-    "B" gnus-article-strip-banner
     "P" gnus-article-hide-pem
     "\C-c" gnus-article-hide-citation-maybe)
 
@@ -1513,12 +1404,6 @@ increase the score of each group you read."
     "c" gnus-article-highlight-citation
     "s" gnus-article-highlight-signature)
 
-  (gnus-define-keys (gnus-summary-wash-mime-map "M" gnus-summary-wash-map)
-    "w" gnus-article-decode-mime-words
-    "c" gnus-article-decode-charset
-    "v" gnus-mime-view-all-parts
-    "b" gnus-article-view-part)
-
   (gnus-define-keys (gnus-summary-wash-time-map "T" gnus-summary-wash-map)
     "z" gnus-article-date-ut
     "u" gnus-article-date-ut
@@ -1534,8 +1419,7 @@ increase the score of each group you read."
     "m" gnus-article-strip-multiple-blank-lines
     "a" gnus-article-strip-blank-lines
     "A" gnus-article-strip-all-blank-lines
-    "s" gnus-article-strip-leading-space
-    "e" gnus-article-strip-trailing-space)
+    "s" gnus-article-strip-leading-space)
 
   (gnus-define-keys (gnus-summary-help-map "H" gnus-summary-mode-map)
     "v" gnus-version
@@ -1549,7 +1433,6 @@ increase the score of each group you read."
     "\M-\C-e" gnus-summary-expire-articles-now
     "\177" gnus-summary-delete-article
     [delete] gnus-summary-delete-article
-    [backspace] gnus-summary-delete-article
     "m" gnus-summary-move-article
     "r" gnus-summary-respool-article
     "w" gnus-summary-edit-article
@@ -1570,18 +1453,7 @@ increase the score of each group you read."
     "h" gnus-summary-save-article-folder
     "v" gnus-summary-save-article-vm
     "p" gnus-summary-pipe-output
-    "s" gnus-soup-add-article)
-
-  (gnus-define-keys (gnus-summary-mime-map "K" gnus-summary-mode-map)
-    "b" gnus-summary-display-buttonized
-    "m" gnus-summary-repair-multipart
-    "v" gnus-article-view-part
-    "o" gnus-article-save-part
-    "c" gnus-article-copy-part
-    "e" gnus-article-externalize-part
-    "i" gnus-article-inline-part
-    "|" gnus-article-pipe-part)
-  )
+    "s" gnus-soup-add-article))
 
 (defun gnus-summary-make-menu-bar ()
   (gnus-turn-off-edit-menu 'summary)
@@ -1625,18 +1497,12 @@ increase the score of each group you read."
               ["Signature" gnus-article-hide-signature t]
               ["Citation" gnus-article-hide-citation t]
               ["PGP" gnus-article-hide-pgp t]
-             ["Banner" gnus-article-strip-banner t]
               ["Boring headers" gnus-article-hide-boring-headers t])
              ("Highlight"
               ["All" gnus-article-highlight t]
               ["Headers" gnus-article-highlight-headers t]
               ["Signature" gnus-article-highlight-signature t]
               ["Citation" gnus-article-highlight-citation t])
-            ("MIME"
-             ["Words" gnus-article-decode-mime-words t]
-             ["Charset" gnus-article-decode-charset t]
-             ["QP" gnus-article-de-quoted-unreadable t]
-             ["View all" gnus-mime-view-all-parts t])
              ("Date"
               ["Local" gnus-article-date-local t]
               ["ISO8601" gnus-article-date-iso8601 t]
@@ -1651,22 +1517,20 @@ increase the score of each group you read."
                ["Trailing" gnus-article-remove-trailing-blank-lines t]
                ["All of the above" gnus-article-strip-blank-lines t]
                ["All" gnus-article-strip-all-blank-lines t]
-               ["Leading space" gnus-article-strip-leading-space t]
-              ["Trailing space" gnus-article-strip-trailing-space t])
+               ["Leading space" gnus-article-strip-leading-space t])
               ["Overstrike" gnus-article-treat-overstrike t]
               ["Dumb quotes" gnus-article-treat-dumbquotes t]
               ["Emphasis" gnus-article-emphasize t]
               ["Word wrap" gnus-article-fill-cited-article t]
-             ["Fill long lines" gnus-article-fill-long-lines t]
-             ["Capitalize sentences" gnus-article-capitalize-sentences t]
               ["CR" gnus-article-remove-cr t]
               ["Show X-Face" gnus-article-display-x-face t]
-              ["Quoted-Printable" gnus-article-de-quoted-unreadable t]
+              ["UnHTMLize" gnus-article-treat-html t]
               ["Rot 13" gnus-summary-caesar-message t]
               ["Unix pipe" gnus-summary-pipe-message t]
               ["Add buttons" gnus-article-add-buttons t]
               ["Add buttons to head" gnus-article-add-buttons-to-head t]
               ["Stop page breaking" gnus-summary-stop-page-breaking t]
+              ["Toggle MIME" gnus-summary-toggle-mime t]
               ["Verbose header" gnus-summary-verbose-headers t]
               ["Toggle header" gnus-summary-toggle-header t])
              ("Output"
@@ -1712,7 +1576,6 @@ increase the score of each group you read."
              ("Cache"
               ["Enter article" gnus-cache-enter-article t]
               ["Remove article" gnus-cache-remove-article t])
-            ["Translate" gnus-article-babel t]
              ["Select article buffer" gnus-summary-select-article-buffer t]
              ["Enter digest buffer" gnus-summary-enter-digest-group t]
              ["Isearch article..." gnus-summary-isearch-article t]
@@ -1764,8 +1627,8 @@ increase the score of each group you read."
        ["Wide reply and yank" gnus-summary-wide-reply-with-original t]
        ["Mail forward" gnus-summary-mail-forward t]
        ["Post forward" gnus-summary-post-forward t]
-       ["Digest and mail" gnus-uu-digest-mail-forward t]
-       ["Digest and post" gnus-uu-digest-post-forward t]
+       ["Digest and mail" gnus-summary-mail-digest t]
+       ["Digest and post" gnus-summary-post-digest t]
        ["Resend message" gnus-summary-resend-message t]
        ["Send bounced mail" gnus-summary-resend-bounced-mail t]
        ["Send a mail" gnus-summary-mail-other-window t]
@@ -1803,7 +1666,6 @@ increase the score of each group you read."
        ["Subject..." gnus-summary-limit-to-subject t]
        ["Author..." gnus-summary-limit-to-author t]
        ["Age..." gnus-summary-limit-to-age t]
-       ["Extra..." gnus-summary-limit-to-extra t]
        ["Score" gnus-summary-limit-to-score t]
        ["Unread" gnus-summary-limit-to-unread t]
        ["Non-dormant" gnus-summary-limit-exclude-dormant t]
@@ -1813,7 +1675,6 @@ increase the score of each group you read."
        ["Hide childless dormant"
         gnus-summary-limit-exclude-childless-dormant t]
        ;;["Hide thread" gnus-summary-limit-exclude-thread t]
-       ["Hide marked" gnus-summary-limit-exclude-marks t]
        ["Show expunged" gnus-summary-show-all-expunged t])
        ("Process Mark"
        ["Set mark" gnus-summary-mark-as-processable t]
@@ -1860,8 +1721,7 @@ increase the score of each group you read."
        ["Sort by subject" gnus-summary-sort-by-subject t]
        ["Sort by date" gnus-summary-sort-by-date t]
        ["Sort by score" gnus-summary-sort-by-score t]
-       ["Sort by lines" gnus-summary-sort-by-lines t]
-       ["Sort by characters" gnus-summary-sort-by-chars t])
+       ["Sort by lines" gnus-summary-sort-by-lines t])
        ("Help"
        ["Fetch group FAQ" gnus-summary-fetch-faq t]
        ["Describe group" gnus-summary-describe-group t]
@@ -1885,7 +1745,6 @@ increase the score of each group you read."
        ["Edit local kill file" gnus-summary-edit-local-kill t]
        ["Edit main kill file" gnus-summary-edit-global-kill t]
        ["Edit group parameters" gnus-summary-edit-parameters t]
-       ["Customize group parameters" gnus-summary-customize-parameters t]
        ["Send a bug report" gnus-bug t]
        ("Exit"
        ["Catchup and exit" gnus-summary-catchup-and-exit t]
@@ -1916,7 +1775,6 @@ increase the score of each group you read."
                     ("article body" "body" string)
                     ("article head" "head" string)
                     ("xref" "xref" string)
-                    ("extra header" "extra" string)
                     ("lines" "lines" number)
                     ("followups to author" "followup" string)))
          (types '((number ("less than" <)
@@ -2018,7 +1876,7 @@ The following commands are available:
   (setq mode-name "Summary")
   (make-local-variable 'minor-mode-alist)
   (use-local-map gnus-summary-mode-map)
-  (buffer-disable-undo)
+  (buffer-disable-undo (current-buffer))
   (setq buffer-read-only t)            ;Disable modification
   (setq truncate-lines t)
   (setq selective-display t)
@@ -2031,17 +1889,19 @@ The following commands are available:
   (make-local-variable 'gnus-summary-dummy-line-format)
   (make-local-variable 'gnus-summary-dummy-line-format-spec)
   (make-local-variable 'gnus-summary-mark-positions)
+  (make-local-hook 'post-command-hook)
+  (add-hook 'post-command-hook 'gnus-clear-inboxes-moved nil 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))
 
 (defun gnus-summary-make-local-variables ()
   "Make all the local summary buffer variables."
-  (let (global)
-    (dolist (local gnus-summary-local-variables)
+  (let ((locals gnus-summary-local-variables)
+       global local)
+    (while (setq local (pop locals))
       (if (consp local)
          (progn
            (if (eq (cdr local) 'global)
@@ -2049,9 +1909,11 @@ The following commands are available:
                (setq global (symbol-value (car local)))
              ;; Use the value from the list.
              (setq global (eval (cdr local))))
-           (set (make-local-variable (car local)) global))
+           (make-local-variable (car local))
+           (set (car local) global))
        ;; Simple nil-valued local variable.
-       (set (make-local-variable local) nil)))))
+       (make-local-variable local)
+       (set local nil)))))
 
 (defun gnus-summary-clear-local-variables ()
   (let ((locals gnus-summary-local-variables))
@@ -2178,6 +2040,21 @@ The following commands are available:
     (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))))))
+
 (defun gnus-summary-article-pseudo-p (article)
   "Say whether this article is a pseudo article or not."
   (not (vectorp (gnus-data-header (gnus-data-find article)))))
@@ -2345,21 +2222,6 @@ marks of articles."
             ,@forms)
         (gnus-restore-hidden-threads-configuration ,config)))))
 
-(defun gnus-data-compute-positions ()
-  "Compute the positions of all articles."
-  (setq gnus-newsgroup-data-reverse nil)
-  (let ((data gnus-newsgroup-data))
-    (save-excursion
-      (gnus-save-hidden-threads
-       (gnus-summary-show-all-threads)
-       (goto-char (point-min))
-       (while data
-         (while (get-text-property (point) 'gnus-intangible)
-           (forward-line 1))
-         (gnus-data-set-pos (car data) (+ (point) 3))
-         (setq data (cdr data))
-         (forward-line 1))))))
-
 (defun gnus-hidden-threads-configuration ()
   "Return the current hidden threads configuration."
   (save-excursion
@@ -2375,7 +2237,7 @@ marks of articles."
     (while (setq point (pop config))
       (when (and (< point (point-max))
                 (goto-char point)
-                (eq (char-after) ?\n))
+                (= (following-char) ?\n))
        (subst-char-in-region point (1+ point) ?\n ?\r)))))
 
 ;; Various summary mode internalish functions.
@@ -2447,8 +2309,7 @@ marks of articles."
          (original gnus-original-article-buffer)
          (gac gnus-article-current)
          (reffed gnus-reffed-article-number)
-         (score-file gnus-current-score-file)
-         (default-charset gnus-newsgroup-charset))
+         (score-file gnus-current-score-file))
       (save-excursion
        (set-buffer gnus-group-buffer)
        (setq gnus-newsgroup-name name
@@ -2461,8 +2322,7 @@ marks of articles."
              gnus-article-buffer article-buffer
              gnus-original-article-buffer original
              gnus-reffed-article-number reffed
-             gnus-current-score-file score-file
-             gnus-newsgroup-charset default-charset)
+             gnus-current-score-file score-file)
        ;; The article buffer also has local variables.
        (when (gnus-buffer-live-p gnus-article-buffer)
          (set-buffer gnus-article-buffer)
@@ -2481,8 +2341,7 @@ marks of articles."
 (defun gnus-summary-last-article-p (&optional article)
   "Return whether ARTICLE is the last article in the buffer."
   (if (not (setq article (or article (gnus-summary-article-number))))
-      ;; All non-existent numbers are the last article.  :-)
-      t
+      t                ; All non-existent numbers are the last article.  :-)
     (not (cdr (gnus-data-find-list article)))))
 
 (defun gnus-make-thread-indent-array ()
@@ -2512,7 +2371,7 @@ marks of articles."
        (let ((gnus-summary-line-format-spec spec)
              (gnus-newsgroup-downloadable '((0 . t))))
          (gnus-summary-insert-line
-          [0 "" "" "" "" "" 0 0 "" nil]  0 nil 128 t nil "" nil 1)
+          [0 "" "" "" "" "" 0 0 ""]  0 nil 128 t nil "" nil 1)
          (goto-char (point-min))
          (setq pos (list (cons 'unread (and (search-forward "\200" nil t)
                                             (- (point) 2)))))
@@ -2536,33 +2395,6 @@ marks of articles."
    (point) (progn (eval gnus-summary-dummy-line-format-spec) (point))
    (list 'gnus-number gnus-tmp-number 'gnus-intangible gnus-tmp-number)))
 
-(defun gnus-summary-from-or-to-or-newsgroups (header)
-  (let ((to (cdr (assq 'To (mail-header-extra header))))
-       (newsgroups (cdr (assq 'Newsgroups (mail-header-extra header))))
-       (mail-parse-charset gnus-newsgroup-charset)
-       (mail-parse-ignored-charsets 
-        (save-excursion (set-buffer gnus-summary-buffer)
-                        gnus-newsgroup-ignored-charsets)))
-    (cond
-     ((and to
-          gnus-ignored-from-addresses
-          (string-match gnus-ignored-from-addresses
-                        (mail-header-from header)))
-      (concat "-> "
-             (or (car (funcall gnus-extract-address-components
-                               (funcall
-                                gnus-decode-encoded-word-function to)))
-                 (funcall gnus-decode-encoded-word-function to))))
-     ((and newsgroups
-          gnus-ignored-from-addresses
-          (string-match gnus-ignored-from-addresses
-                        (mail-header-from header)))
-      (concat "=> " newsgroups))
-     (t
-      (or (car (funcall gnus-extract-address-components
-                       (mail-header-from header)))
-         (mail-header-from header))))))
-
 (defun gnus-summary-insert-line (gnus-tmp-header
                                 gnus-tmp-level gnus-tmp-current
                                 gnus-tmp-unread gnus-tmp-replied
@@ -2576,7 +2408,7 @@ marks of articles."
          (if (or (null gnus-summary-default-score)
                  (<= (abs (- gnus-tmp-score gnus-summary-default-score))
                      gnus-summary-zcore-fuzz))
-             ? ;Whitespace
+             ? 
            (if (< gnus-tmp-score gnus-summary-default-score)
                gnus-score-below-mark gnus-score-over-mark)))
         (gnus-tmp-replied
@@ -2609,7 +2441,7 @@ marks of articles."
       (setq gnus-tmp-name gnus-tmp-from))
     (unless (numberp gnus-tmp-lines)
       (setq gnus-tmp-lines 0))
-    (gnus-put-text-property
+    (gnus-put-text-property-excluding-characters-with-faces
      (point)
      (progn (eval gnus-summary-line-format-spec) (point))
      'gnus-number gnus-tmp-number)
@@ -2641,7 +2473,7 @@ marks of articles."
         (if (or (null gnus-summary-default-score)
                 (<= (abs (- score gnus-summary-default-score))
                     gnus-summary-zcore-fuzz))
-            ? ;Whitespace
+            ? 
           (if (< score gnus-summary-default-score)
               gnus-score-below-mark gnus-score-over-mark))
         'score))
@@ -2710,7 +2542,7 @@ If NO-DISPLAY, don't generate a summary buffer."
                                   kill-buffer no-display
                                   select-articles)
                                  (setq show-all nil
-                                       select-articles nil)))))
+                                  select-articles nil)))))
                (eq gnus-auto-select-next 'quietly))
       (set-buffer gnus-group-buffer)
       ;; The entry function called above goes to the next
@@ -2849,21 +2681,16 @@ If NO-DISPLAY, don't generate a summary buffer."
                 (not no-display)
                 gnus-newsgroup-unreads
                 gnus-auto-select-first)
-           (progn
-             (gnus-configure-windows 'summary)
-             (cond
-              ((eq gnus-auto-select-first 'best)
-               (gnus-summary-best-unread-article))
-              ((eq gnus-auto-select-first t)
-               (gnus-summary-first-unread-article))
-              ((gnus-functionp gnus-auto-select-first)
-               (funcall gnus-auto-select-first))))
+           (unless (if (eq gnus-auto-select-first 'best)
+                       (gnus-summary-best-unread-article)
+                     (gnus-summary-first-unread-article))
+             (gnus-configure-windows 'summary))
          ;; Don't select any articles, just move point to the first
          ;; article in the group.
          (goto-char (point-min))
          (gnus-summary-position-point)
          (gnus-configure-windows 'summary 'force)
-         (gnus-set-mode-line 'summary))
+         (gnus-set-mode-line 'summary))        
        (when (get-buffer-window gnus-group-buffer t)
          ;; Gotta use windows, because recenter does weird stuff if
          ;; the current buffer ain't the displayed window.
@@ -3063,7 +2890,7 @@ If NO-DISPLAY, don't generate a summary buffer."
     threads))
 
 ;; Build the thread tree.
-(defsubst gnus-dependencies-add-header (header dependencies force-new)
+(defun gnus-dependencies-add-header (header dependencies force-new)
   "Enter HEADER into the DEPENDENCIES table if it is not already there.
 
 If FORCE-NEW is not nil, enter HEADER into the DEPENDENCIES table even
@@ -3209,6 +3036,24 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
             (setq heads nil)))))
      gnus-newsgroup-dependencies)))
 
+;; The following macros and functions were written by Felix Lee
+;; <flee@cse.psu.edu>.
+
+(defmacro gnus-nov-read-integer ()
+  '(prog1
+       (if (= (following-char) ?\t)
+          0
+        (let ((num (ignore-errors (read buffer))))
+          (if (numberp num) num 0)))
+     (unless (eobp)
+       (search-forward "\t" eol 'move))))
+
+(defmacro gnus-nov-skip-field ()
+  '(search-forward "\t" eol 'move))
+
+(defmacro gnus-nov-field ()
+  '(buffer-substring (point) (if (gnus-nov-skip-field) (1- (point)) eol)))
+
 ;; This function has to be called with point after the article number
 ;; on the beginning of the line.
 (defsubst gnus-nov-parse-line (number dependencies &optional force-new)
@@ -3225,19 +3070,19 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
 
          (setq header
                (make-full-mail-header
-                number                         ; number
-                (funcall gnus-decode-encoded-word-function
-                         (nnheader-nov-field)) ; subject
-                (funcall gnus-decode-encoded-word-function
-                         (nnheader-nov-field)) ; from
-                (nnheader-nov-field)           ; date
-                (nnheader-nov-read-message-id) ; id
-                (nnheader-nov-field)           ; refs
-                (nnheader-nov-read-integer)    ; chars
-                (nnheader-nov-read-integer)    ; lines
-                (unless (eobp)
-                  (nnheader-nov-field))                ; misc
-                (nnheader-nov-parse-extra))))  ; extra
+                number                 ; number
+                (funcall
+                 gnus-unstructured-field-decoder (gnus-nov-field)) ; subject
+                (funcall
+                 gnus-structured-field-decoder (gnus-nov-field)) ; from
+                (gnus-nov-field)       ; date
+                (or (gnus-nov-field)
+                    (nnheader-generate-fake-message-id)) ; id
+                (gnus-nov-field)       ; refs
+                (gnus-nov-read-integer) ; chars
+                (gnus-nov-read-integer) ; lines
+                (unless (= (following-char) ?\n)
+                  (gnus-nov-field))))) ; misc
 
       (widen))
 
@@ -3622,16 +3467,6 @@ If LINE, insert the rebuilt thread starting on line LINE."
   (gnus-article-sort-by-lines
    (gnus-thread-header h1) (gnus-thread-header h2)))
 
-(defsubst gnus-article-sort-by-chars (h1 h2)
-  "Sort articles by octet length."
-  (< (mail-header-chars h1)
-     (mail-header-chars h2)))
-
-(defun gnus-thread-sort-by-chars (h1 h2)
-  "Sort threads by root article octet length."
-  (gnus-article-sort-by-chars
-   (gnus-thread-header h1) (gnus-thread-header h2)))
-
 (defsubst gnus-article-sort-by-author (h1 h2)
   "Sort articles by root author."
   (string-lessp
@@ -3662,7 +3497,7 @@ If LINE, insert the rebuilt thread starting on line LINE."
 
 (defsubst gnus-article-sort-by-date (h1 h2)
   "Sort articles by root article date."
-  (time-less-p
+  (gnus-time-less
    (gnus-date-get-time (mail-header-date h1))
    (gnus-date-get-time (mail-header-date h2))))
 
@@ -3692,7 +3527,7 @@ Unscored articles will be counted as having a score of zero."
   (> (gnus-thread-total-score h1) (gnus-thread-total-score h2)))
 
 (defun gnus-thread-total-score (thread)
-  ;; This function find the total score of THREAD.
+  ;;  This function find the total score of THREAD.
   (cond ((null thread)
         0)
        ((consp thread)
@@ -3723,12 +3558,6 @@ Unscored articles will be counted as having a score of zero."
 (defvar gnus-tmp-root-expunged nil)
 (defvar gnus-tmp-dummy-line nil)
 
-(defvar gnus-tmp-header)
-(defun gnus-extra-header (type &optional header)
-  "Return the extra header of TYPE."
-  (or (cdr (assq type (mail-header-extra (or header gnus-tmp-header))))
-      ""))
-
 (defun gnus-summary-prepare-threads (threads)
   "Prepare summary buffer from THREADS and indentation LEVEL.
 THREADS is either a list of `(PARENT [(CHILD1 [(GRANDCHILD ...]...) ...])'
@@ -3926,7 +3755,7 @@ or a straight list of headers."
             (if (or (null gnus-summary-default-score)
                     (<= (abs (- gnus-tmp-score gnus-summary-default-score))
                         gnus-summary-zcore-fuzz))
-                ? ;Whitespace
+                ? 
               (if (< gnus-tmp-score gnus-summary-default-score)
                   gnus-score-below-mark gnus-score-over-mark))
             gnus-tmp-replied
@@ -3956,7 +3785,7 @@ or a straight list of headers."
              (setq gnus-tmp-name gnus-tmp-from))
            (unless (numberp gnus-tmp-lines)
              (setq gnus-tmp-lines 0))
-           (gnus-put-text-property
+           (gnus-put-text-property-excluding-characters-with-faces
             (point)
             (progn (eval gnus-summary-line-format-spec) (point))
             'gnus-number number)
@@ -4045,7 +3874,6 @@ If SELECT-ARTICLES, only select those articles from GROUP."
     (setq gnus-newsgroup-name group)
     (setq gnus-newsgroup-unselected nil)
     (setq gnus-newsgroup-unreads (gnus-list-of-unread-articles group))
-    (gnus-summary-setup-default-charset)
 
     ;; Adjust and set lists of article marks.
     (when info
@@ -4080,7 +3908,6 @@ If SELECT-ARTICLES, only select those articles from GROUP."
       ;; Init the dependencies hash table.
       (setq gnus-newsgroup-dependencies
            (gnus-make-hashtable (length articles)))
-      (gnus-set-global-variables)
       ;; Retrieve the headers and read them in.
       (gnus-message 5 "Fetching headers for %s..." gnus-newsgroup-name)
       (setq gnus-newsgroup-headers
@@ -4233,7 +4060,7 @@ If SELECT-ARTICLES, only select those articles from GROUP."
     out))
 
 (defun gnus-adjust-marked-articles (info)
-  "Set all article lists and remove all marks that are no longer valid."
+  "Set all article lists and remove all marks that are no longer legal."
   (let* ((marked-lists (gnus-info-marks info))
         (active (gnus-active (gnus-info-group info)))
         (min (car active))
@@ -4291,16 +4118,15 @@ If SELECT-ARTICLES, only select those articles from GROUP."
   (let ((types gnus-article-mark-lists)
        (info (gnus-get-info gnus-newsgroup-name))
        (uncompressed '(score bookmark killed))
-       type list newmarked symbol delta-marks)
+       type list newmarked symbol)
     (when info
-      ;; Add all marks lists to the list of marks lists.
+      ;; Add all marks lists that are non-nil to the list of marks lists.
       (while (setq type (pop types))
-       (setq list (symbol-value
+       (when (setq list (symbol-value
                          (setq symbol
                                (intern (format "gnus-newsgroup-%s"
                                                (car type))))))
 
-       (when list
          ;; Get rid of the entries of the articles that have the
          ;; default score.
          (when (and (eq (cdr type) 'score)
@@ -4315,32 +4141,14 @@ If SELECT-ARTICLES, only select those articles from GROUP."
                    (setcdr prev (cdr arts))
                  (setq prev arts))
                (setq arts (cdr arts)))
-             (setq list (cdr all)))))
-
-       (or (memq (cdr type) uncompressed)
-           (setq list (gnus-compress-sequence (set symbol (sort list '<)) t)))
-       
-       (when (gnus-check-backend-function 'request-set-mark
-                                          gnus-newsgroup-name)
-         ;; uncompressed:s are not proper flags (they are cons cells)
-         ;; cache is a internal gnus flag
-         (unless (memq (cdr type) (cons 'cache uncompressed))
-           (let* ((old (cdr (assq (cdr type) (gnus-info-marks info))))
-                  (del (gnus-remove-from-range (gnus-copy-sequence old) list))
-                  (add (gnus-remove-from-range (gnus-copy-sequence list) old)))
-             (if add
-                 (push (list add 'add (list (cdr type))) delta-marks))
-             (if del
-                 (push (list del 'del (list (cdr type))) delta-marks)))))
-         
-       (when list
-         (push (cons (cdr type) list) newmarked)))
-
-      (when delta-marks
-       (unless (gnus-check-group gnus-newsgroup-name)
-         (error "Can't open server for %s" gnus-newsgroup-name))
-       (gnus-request-set-mark gnus-newsgroup-name delta-marks))
-         
+             (setq list (cdr all))))
+
+         (push (cons (cdr type)
+                     (if (memq (cdr type) uncompressed) list
+                       (gnus-compress-sequence
+                        (set symbol (sort list '<)) t)))
+               newmarked)))
+
       ;; Enter these new marks into the info of the group.
       (if (nthcdr 3 info)
          (setcar (nthcdr 3 info) newmarked)
@@ -4359,9 +4167,7 @@ If SELECT-ARTICLES, only select those articles from GROUP."
   "This function sets the mode line of the article or summary buffers.
 If WHERE is `summary', the summary mode line format will be used."
   ;; Is this mode line one we keep updated?
-  (when (and (memq where gnus-updated-mode-lines)
-            (symbol-value
-             (intern (format "gnus-%s-mode-line-format-spec" where))))
+  (when (memq where gnus-updated-mode-lines)
     (let (mode-string)
       (save-excursion
        ;; We evaluate this in the summary buffer since these
@@ -4411,7 +4217,7 @@ If WHERE is `summary', the summary mode line format will be used."
          ;; We might have to chop a bit of the string off...
          (when (> (length mode-string) max-len)
            (setq mode-string
-                 (concat (truncate-string-to-width mode-string (- max-len 3))
+                 (concat (gnus-truncate-string mode-string (- max-len 3))
                          "...")))
          ;; Pad the mode string a bit.
          (setq mode-string (format (format "%%-%ds" max-len) mode-string))))
@@ -4489,7 +4295,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
         (active (gnus-active group))
         ninfo)
     (when entry
-      ;; First peel off all invalid article numbers.
+      ;; First peel off all illegal article numbers.
       (when active
        (let ((ids articles)
              id first)
@@ -4517,7 +4323,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
       ;; Then we add the read articles to the range.
       (gnus-add-to-range
        ninfo (setq articles (sort articles '<))))))
-
+  
 (defun gnus-group-make-articles-read (group articles)
   "Update the info of GROUP to say that ARTICLES are read."
   (let* ((num 0)
@@ -4558,6 +4364,15 @@ The resulting hash table is returned, or nil if no Xrefs were found."
        ;; Update the group buffer.
        (gnus-group-update-group group t)))))
 
+(defun gnus-methods-equal-p (m1 m2)
+  (let ((m1 (or m1 gnus-select-method))
+       (m2 (or m2 gnus-select-method)))
+    (or (equal m1 m2)
+       (and (eq (car m1) (car m2))
+            (or (not (memq 'address (assoc (symbol-name (car m1))
+                                           gnus-valid-select-methods)))
+                (equal (nth 1 m1) (nth 1 m2)))))))
+
 (defvar gnus-newsgroup-none-id 0)
 
 (defun gnus-get-newsgroup-headers (&optional dependencies force-new)
@@ -4566,16 +4381,11 @@ The resulting hash table is returned, or nil if no Xrefs were found."
         (or dependencies
             (save-excursion (set-buffer gnus-summary-buffer)
                             gnus-newsgroup-dependencies)))
-       headers id end ref
-       (mail-parse-charset gnus-newsgroup-charset)
-       (mail-parse-ignored-charsets 
-            (save-excursion (set-buffer gnus-summary-buffer)
-                            gnus-newsgroup-ignored-charsets)))
+       headers id end ref)
     (save-excursion
       (set-buffer nntp-server-buffer)
       ;; Translate all TAB characters into SPACE characters.
       (subst-char-in-region (point-min) (point-max) ?\t ?  t)
-      (subst-char-in-region (point-min) (point-max) ?\r ?  t)
       (gnus-run-hooks 'gnus-parse-headers-hook)
       (let ((case-fold-search t)
            in-reply-to header p lines chars)
@@ -4607,15 +4417,15 @@ The resulting hash table is returned, or nil if no Xrefs were found."
            (progn
              (goto-char p)
              (if (search-forward "\nsubject: " nil t)
-                 (funcall gnus-decode-encoded-word-function
-                          (nnheader-header-value))
+                 (funcall
+                  gnus-unstructured-field-decoder (nnheader-header-value))
                "(none)"))
            ;; From.
            (progn
              (goto-char p)
              (if (search-forward "\nfrom: " nil t)
-                 (funcall gnus-decode-encoded-word-function
-                          (nnheader-header-value))
+                 (funcall
+                  gnus-structured-field-decoder (nnheader-header-value))
                "(nobody)"))
            ;; Date.
            (progn
@@ -4685,19 +4495,7 @@ The resulting hash table is returned, or nil if no Xrefs were found."
            (progn
              (goto-char p)
              (and (search-forward "\nxref: " nil t)
-                  (nnheader-header-value)))
-           ;; Extra.
-           (when gnus-extra-headers
-             (let ((extra gnus-extra-headers)
-                   out)
-               (while extra
-                 (goto-char p)
-                 (when (search-forward
-                        (concat "\n" (symbol-name (car extra)) ": ") nil t)
-                   (push (cons (car extra) (nnheader-header-value))
-                         out))
-                 (pop extra))
-               out))))
+                  (nnheader-header-value)))))
          (when (equal id ref)
            (setq ref nil))
 
@@ -4723,14 +4521,11 @@ list of headers that match SEQUENCE (see `nntp-retrieve-headers')."
   ;; Get the Xref when the users reads the articles since most/some
   ;; NNTP servers do not include Xrefs when using XOVER.
   (setq gnus-article-internal-prepare-hook '(gnus-article-get-xrefs))
-  (let ((mail-parse-charset gnus-newsgroup-charset)
-       (mail-parse-ignored-charsets gnus-newsgroup-ignored-charsets)
-       (cur nntp-server-buffer)
+  (let ((cur nntp-server-buffer)
        (dependencies (or dependencies gnus-newsgroup-dependencies))
        number headers header)
     (save-excursion
       (set-buffer nntp-server-buffer)
-      (subst-char-in-region (point-min) (point-max) ?\r ?  t)
       ;; Allow the user to mangle the headers before parsing them.
       (gnus-run-hooks 'gnus-parse-headers-hook)
       (goto-char (point-min))
@@ -4784,7 +4579,7 @@ This is meant to be called in `gnus-article-internal-prepare-hook'."
          (save-restriction
            (nnheader-narrow-to-headers)
            (goto-char (point-min))
-           (when (or (and (eq (downcase (char-after)) ?x)
+           (when (or (and (eq (downcase (following-char)) ?x)
                           (looking-at "Xref:"))
                      (search-forward "\nXref:" nil t))
              (goto-char (1+ (match-end 0)))
@@ -4799,14 +4594,14 @@ the subject line on."
   (let* ((line (and (numberp old-header) old-header))
         (old-header (and (vectorp old-header) old-header))
         (header (cond ((and old-header use-old-header)
-                       old-header)
-                      ((and (numberp id)
-                            (gnus-number-to-header id))
-                       (gnus-number-to-header id))
-                      (t
-                       (gnus-read-header id))))
-        (number (and (numberp id) id))
-        d)
+                      old-header)
+                     ((and (numberp id)
+                           (gnus-number-to-header id))
+                      (gnus-number-to-header id))
+                     (t
+                      (gnus-read-header id))))
+       (number (and (numberp id) id))
+       d)
     (when header
       ;; Rebuild the thread that this article is part of and go to the
       ;; article we have fetched.
@@ -4876,7 +4671,7 @@ current article will be taken into consideration."
       (let ((max (max (point) (mark)))
            articles article)
        (save-excursion
-         (goto-char (min (min (point) (mark))))
+         (goto-char (min (point) (mark)))
          (while
              (and
               (push (setq article (gnus-summary-article-number)) articles)
@@ -4901,8 +4696,7 @@ executed with point over the summary line of the articles."
     `(let ((,articles (gnus-summary-work-articles ,arg)))
        (while ,articles
         (gnus-summary-goto-subject (car ,articles))
-        ,@forms
-        (pop ,articles)))))
+        ,@forms))))
 
 (put 'gnus-summary-iterate 'lisp-indent-function 1)
 (put 'gnus-summary-iterate 'edebug-form-spec '(form body))
@@ -5049,9 +4843,7 @@ displayed, no centering will be performed."
   ;; Recenter only when requested.  Suggested by popovich@park.cs.columbia.edu.
   (let* ((top (cond ((< (window-height) 4) 0)
                    ((< (window-height) 7) 1)
-                   (t (if (numberp gnus-auto-center-summary)
-                          gnus-auto-center-summary
-                        2))))
+                   (t 2)))
         (height (1- (window-height)))
         (bottom (save-excursion (goto-char (point-max))
                                 (forward-line (- height))
@@ -5233,7 +5025,7 @@ The prefix argument ALL means to select all articles."
          (gnus-update-read-articles
           group (append gnus-newsgroup-unreads gnus-newsgroup-unselected))
          ;; Set the current article marks.
-         (let ((gnus-newsgroup-scored
+         (let ((gnus-newsgroup-scored 
                 (if (and (not gnus-save-score)
                          (not non-destructive))
                     nil
@@ -5263,10 +5055,6 @@ If FORCE (the prefix), also save the .newsrc file(s)."
 gnus-exit-group-hook is called with no arguments if that value is non-nil."
   (interactive)
   (gnus-set-global-variables)
-  (when (gnus-buffer-live-p gnus-article-buffer)
-    (save-excursion
-      (set-buffer gnus-article-buffer)
-      (mm-destroy-parts gnus-article-mime-handles)))
   (gnus-kill-save-kill-buffer)
   (gnus-async-halt-prefetch)
   (let* ((group gnus-newsgroup-name)
@@ -5274,12 +5062,6 @@ gnus-exit-group-hook is called with no arguments if that value is non-nil."
         (mode major-mode)
          (group-point nil)
         (buf (current-buffer)))
-    (unless quit-config
-      ;; Do adaptive scoring, and possibly save score files.
-      (when gnus-newsgroup-adaptive
-       (gnus-score-adaptive))
-      (when gnus-use-scoring
-       (gnus-score-save)))
     (gnus-run-hooks 'gnus-summary-prepare-exit-hook)
     ;; If we have several article buffers, we kill them at exit.
     (unless gnus-single-article-buffer
@@ -5298,7 +5080,12 @@ gnus-exit-group-hook is called with no arguments if that value is non-nil."
     ;; Make all changes in this group permanent.
     (unless quit-config
       (gnus-run-hooks 'gnus-exit-group-hook)
-      (gnus-summary-update-info))
+      (gnus-summary-update-info)
+      ;; Do adaptive scoring, and possibly save score files.
+      (when gnus-newsgroup-adaptive
+       (gnus-score-adaptive))
+      (when gnus-use-scoring
+       (gnus-score-save)))
     (gnus-close-group group)
     ;; Make sure where we were, and go to next newsgroup.
     (set-buffer gnus-group-buffer)
@@ -5337,12 +5124,12 @@ gnus-exit-group-hook is called with no arguments if that value is non-nil."
          (gnus-kill-buffer buf)))
       (setq gnus-current-select-method gnus-select-method)
       (pop-to-buffer gnus-group-buffer)
+      ;; Clear the current group name.
       (if (not quit-config)
          (progn
            (goto-char group-point)
            (gnus-configure-windows 'group 'force))
        (gnus-handle-ephemeral-exit quit-config))
-      ;; Clear the current group name.
       (unless quit-config
        (setq gnus-newsgroup-name nil)))))
 
@@ -5356,13 +5143,7 @@ gnus-exit-group-hook is called with no arguments if that value is non-nil."
              gnus-expert-user
              (gnus-y-or-n-p "Discard changes to this group and exit? "))
       (gnus-async-halt-prefetch)
-      (mapcar 'funcall
-             (delq 'gnus-summary-expire-articles
-                   (copy-list gnus-summary-prepare-exit-hook)))
-      (when (gnus-buffer-live-p gnus-article-buffer)
-       (save-excursion
-         (set-buffer gnus-article-buffer)
-         (mm-destroy-parts gnus-article-mime-handles)))
+      (gnus-run-hooks 'gnus-summary-prepare-exit-hook)
       ;; If we have several article buffers, we kill them at exit.
       (unless gnus-single-article-buffer
        (gnus-kill-buffer gnus-article-buffer)
@@ -5424,6 +5205,17 @@ The state which existed when entering the ephemeral is reset."
       (gnus-summary-recenter)
       (gnus-summary-position-point))))
 
+(defun gnus-summary-preview-mime-message (arg)
+  "MIME decode and play this message."
+  (interactive "P")
+  (or gnus-show-mime
+      (let ((gnus-break-pages nil)
+           (gnus-show-mime t))
+       (gnus-summary-select-article t t)
+       ))
+  (select-window (get-buffer-window gnus-article-buffer))
+  )
+
 ;;; Dead summaries.
 
 (defvar gnus-dead-summary-mode-map nil)
@@ -5531,7 +5323,8 @@ in."
 (defun gnus-summary-describe-briefly ()
   "Describe summary mode commands briefly."
   (interactive)
-  (gnus-message 6 (substitute-command-keys "\\<gnus-summary-mode-map>\\[gnus-summary-next-page]:Select  \\[gnus-summary-next-unread-article]:Forward  \\[gnus-summary-prev-unread-article]:Backward  \\[gnus-summary-exit]:Exit  \\[gnus-info-find-node]:Run Info       \\[gnus-summary-describe-briefly]:This help")))
+  (gnus-message 6
+               (substitute-command-keys "\\<gnus-summary-mode-map>\\[gnus-summary-next-page]:Select  \\[gnus-summary-next-unread-article]:Forward  \\[gnus-summary-prev-unread-article]:Backward  \\[gnus-summary-exit]:Exit  \\[gnus-info-find-node]:Run Info  \\[gnus-summary-describe-briefly]:This help")))
 
 ;; Walking around group mode buffer from summary mode.
 
@@ -5751,9 +5544,7 @@ be displayed."
              ;; The requested article is different from the current article.
              (prog1
                  (gnus-summary-display-article article all-headers)
-               (setq did article)
-               (when (or all-headers gnus-show-all-headers)
-                 (gnus-article-show-all-headers)))
+               (setq did article))
            (when (or all-headers gnus-show-all-headers)
              (gnus-article-show-all-headers))
            'old))
@@ -6031,25 +5822,15 @@ Return nil if there are no unread articles."
        (gnus-summary-display-article (gnus-summary-article-number)))
     (gnus-summary-position-point)))
 
-(defun gnus-summary-first-unread-subject ()
-  "Place the point on the subject line of the first unread article.
-Return nil if there are no unread articles."
-  (interactive)
-  (prog1
-      (when (gnus-summary-first-subject t)
-       (gnus-summary-show-thread)
-       (gnus-summary-first-subject t))
-    (gnus-summary-position-point)))
-
 (defun gnus-summary-first-article ()
   "Select the first article.
 Return nil if there are no articles."
   (interactive)
   (prog1
       (when (gnus-summary-first-subject)
-       (gnus-summary-show-thread)
-       (gnus-summary-first-subject)
-       (gnus-summary-display-article (gnus-summary-article-number)))
+      (gnus-summary-show-thread)
+      (gnus-summary-first-subject)
+      (gnus-summary-display-article (gnus-summary-article-number)))
     (gnus-summary-position-point)))
 
 (defun gnus-summary-best-unread-article ()
@@ -6171,16 +5952,16 @@ If given a prefix, remove all limits."
   "Limit the summary buffer to articles that are older than (or equal) AGE days.
 If YOUNGER-P (the prefix) is non-nil, limit the summary buffer to
 articles that are younger than AGE days."
-  (interactive "nLimit to articles older than (in days): \nP")
+  (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
@@ -6189,30 +5970,6 @@ articles that are younger than AGE days."
        (gnus-summary-limit (nreverse articles)))
     (gnus-summary-position-point)))
 
-(defun gnus-summary-limit-to-extra (header regexp)
-  "Limit the summary buffer to articles that match an 'extra' header."
-  (interactive
-   (let ((header
-         (intern
-          (gnus-completing-read
-           (symbol-name (car gnus-extra-headers))      
-           "Limit extra header:"       
-           (mapcar (lambda (x) 
-                     (cons (symbol-name x) x))
-                   gnus-extra-headers)
-           nil                 
-           t))))
-     (list header
-          (read-string (format "Limit to header %s (regexp): " header)))))
-  (when (not (equal "" regexp))
-    (prog1
-       (let ((articles (gnus-summary-find-matching
-                        (cons 'extra header) regexp 'all)))
-         (unless articles
-           (error "Found no matches for \"%s\"" regexp))
-         (gnus-summary-limit articles))
-      (gnus-summary-position-point))))
-
 (defalias 'gnus-summary-delete-marked-as-read 'gnus-summary-limit-to-unread)
 (make-obsolete
  'gnus-summary-delete-marked-as-read 'gnus-summary-limit-to-unread)
@@ -6409,7 +6166,7 @@ If ALL, mark even excluded ticked and dormants as read."
 (defsubst gnus-cut-thread (thread)
   "Go forwards in the thread until we find an article that we want to display."
   (when (or (eq gnus-fetch-old-headers 'some)
-           (eq gnus-fetch-old-headers 'invisible)
+           (eq gnus-fetch-old-headers 'invisible)          
            (eq gnus-build-sparse-threads 'some)
            (eq gnus-build-sparse-threads 'more))
     ;; Deal with old-fetched headers and sparse threads.
@@ -6713,11 +6470,6 @@ or `gnus-select-method', no matter what backend the article comes from."
   (interactive)
   (gnus-group-edit-group gnus-newsgroup-name 'params))
 
-(defun gnus-summary-customize-parameters ()
-  "Customize the group parameters of the current group."
-  (interactive)
-  (gnus-group-customize gnus-newsgroup-name))
-
 (defun gnus-summary-enter-digest-group (&optional force)
   "Enter an nndoc group based on the current article.
 If FORCE, force a digest interpretation.  If not, try
@@ -6749,17 +6501,14 @@ to guess what the document format is."
         (goto-char (point-min))
         (or (search-forward "\n\n" nil t) (point)))
        (goto-char (point-min))
-       (delete-matching-lines "^Path:\\|^From ")
+       (delete-matching-lines "^\\(Path\\):\\|^From ")
        (widen))
       (unwind-protect
-          (if (let ((gnus-newsgroup-ephemeral-charset gnus-newsgroup-charset)
-                   (gnus-newsgroup-ephemeral-ignored-charsets
-                    gnus-newsgroup-ignored-charsets))
-               (gnus-group-read-ephemeral-group
-                name `(nndoc ,name (nndoc-address ,(get-buffer dig))
-                             (nndoc-article-type
-                              ,(if force 'digest 'guess))) t))
-             ;; Make all postings to this group go to the parent group.
+          (if (gnus-group-read-ephemeral-group
+               name `(nndoc ,name (nndoc-address ,(get-buffer dig))
+                            (nndoc-article-type
+                             ,(if force 'digest 'guess))) t)
+              ;; Make all postings to this group go to the parent group.
               (nconc (gnus-info-params (gnus-get-info name))
                      params)
             ;; Couldn't select this doc group.
@@ -6785,7 +6534,7 @@ Obeys the standard process/prefix convention."
       (gnus-summary-remove-process-mark article)
       (when (gnus-summary-display-article article)
        (save-excursion
-         (with-temp-buffer
+         (nnheader-temp-write nil
            (insert-buffer-substring gnus-original-article-buffer)
            ;; Remove some headers that may lead nndoc to make
            ;; the wrong guess.
@@ -6865,14 +6614,13 @@ Optional argument BACKWARD means do search for backward.
   ;; We have to require this here to make sure that the following
   ;; dynamic binding isn't shadowed by autoloading.
   (require 'gnus-async)
-  (require 'gnus-art)
   (let ((gnus-select-article-hook nil) ;Disable hook.
+       (gnus-article-display-hook nil)
        (gnus-mark-article-hook nil)    ;Inhibit marking as read.
        (gnus-use-article-prefetch nil)
        (gnus-xmas-force-redisplay nil) ;Inhibit XEmacs redisplay.
        (gnus-use-trees nil)            ;Inhibit updating tree buffer.
        (sum (current-buffer))
-       (gnus-display-mime-function nil)
        (found nil)
        point)
     (gnus-save-hidden-threads
@@ -6931,18 +6679,11 @@ in the comparisons."
   (let ((data (if (eq backward 'all) gnus-newsgroup-data
                (gnus-data-find-list
                 (gnus-summary-article-number) (gnus-data-list backward))))
+       (func `(lambda (h) (,(intern (concat "mail-header-" header)) h)))
        (case-fold-search (not not-case-fold))
-       articles d func)
-    (if (consp header)
-       (if (eq (car header) 'extra)
-           (setq func
-                 `(lambda (h)
-                    (or (cdr (assq ',(cdr header) (mail-header-extra h)))
-                        "")))
-         (error "%s is an invalid header" header))
-      (unless (fboundp (intern (concat "mail-header-" header)))
-       (error "%s is not a valid header" header))
-      (setq func `(lambda (h) (,(intern (concat "mail-header-" header)) h))))
+       articles d)
+    (unless (fboundp (intern (concat "mail-header-" header)))
+      (error "%s is not a valid header" header))
     (while data
       (setq d (car data))
       (and (or (not unread)            ; We want all articles...
@@ -7011,7 +6752,7 @@ article.  If BACKWARD (the prefix) is non-nil, search backward instead."
 If N is negative, print the N previous articles.  If N is nil and articles
 have been marked with the process mark, print these instead.
 
-If the optional first argument FILENAME is nil, send the image to the
+If the optional second argument FILENAME is nil, send the image to the
 printer.  If FILENAME is a string, save the PostScript image in a file with
 that name.  If FILENAME is a number, prompt the user for the name of the file
 to save in."
@@ -7027,14 +6768,14 @@ to save in."
              (set-buffer buffer)
              (gnus-article-delete-invisible-text)
              (let ((ps-left-header
-                    (list
+                    (list 
                      (concat "("
                              (mail-header-subject gnus-current-headers) ")")
                      (concat "("
                              (mail-header-from gnus-current-headers) ")")))
-                   (ps-right-header
-                    (list
-                     "/pagenumberstring load"
+                   (ps-right-header 
+                    (list 
+                     "/pagenumberstring load" 
                      (concat "("
                              (mail-header-date gnus-current-headers) ")"))))
                (gnus-run-hooks 'gnus-ps-print-hook)
@@ -7050,22 +6791,13 @@ article massaging functions being run."
   (if (not arg)
       ;; Select the article the normal way.
       (gnus-summary-select-article nil 'force)
-    ;; We have to require this here to make sure that the following
-    ;; dynamic binding isn't shadowed by autoloading.
-    (require 'gnus-async)
-    (require 'gnus-art)
     ;; Bind the article treatment functions to nil.
     (let ((gnus-have-all-headers t)
+         gnus-article-display-hook
          gnus-article-prepare-hook
-         gnus-article-decode-hook
-         gnus-display-mime-function
          gnus-break-pages
+         gnus-show-mime
          gnus-visual)
-      ;; Destroy any MIME parts.
-      (when (gnus-buffer-live-p gnus-article-buffer)
-       (save-excursion
-         (set-buffer gnus-article-buffer)
-         (mm-destroy-parts gnus-article-mime-handles)))
       (gnus-summary-select-article nil 'force)))
   (gnus-summary-goto-subject gnus-current-article)
   (gnus-summary-position-point))
@@ -7090,37 +6822,40 @@ If ARG is a negative number, hide the unwanted header lines."
   (interactive "P")
   (save-excursion
     (set-buffer gnus-article-buffer)
-    (save-restriction
-      (let* ((buffer-read-only nil)
-            (inhibit-point-motion-hooks t)
-            hidden e)
-       (save-restriction 
-         (article-narrow-to-head)
-         (setq hidden (gnus-article-hidden-text-p 'headers)))
-       (goto-char (point-min))
-       (when (search-forward "\n\n" nil t)
-         (delete-region (point-min) (1- (point))))
+    (let* ((buffer-read-only nil)
+          (inhibit-point-motion-hooks t)
+          (hidden (text-property-any
+                   (goto-char (point-min)) (search-forward "\n\n")
+                   'invisible t))
+          e)
+      (goto-char (point-min))
+      (when (search-forward "\n\n" nil t)
+       (delete-region (point-min) (1- (point))))
+      (goto-char (point-min))
+      (save-excursion
+       (set-buffer gnus-original-article-buffer)
        (goto-char (point-min))
-       (save-excursion
-         (set-buffer gnus-original-article-buffer)
-         (goto-char (point-min))
-         (setq e (1- (or (search-forward "\n\n" nil t) (point-max)))))
-       (insert-buffer-substring gnus-original-article-buffer 1 e)
-       (save-restriction
-         (narrow-to-region (point-min) (point))
-         (article-decode-encoded-words)
-         (if (or hidden
-                 (and (numberp arg) (< arg 0)))
-             (let ((gnus-treat-hide-headers nil)
-                   (gnus-treat-hide-boring-headers nil))
-               (gnus-treat-article 'head))
-           (gnus-treat-article 'head)))))))
+       (setq e (1- (or (search-forward "\n\n" nil t) (point-max)))))
+      (insert-buffer-substring gnus-original-article-buffer 1 e)
+      (let ((article-inhibit-hiding t))
+       (gnus-run-hooks 'gnus-article-display-hook))
+      (when (or (not hidden) (and (numberp arg) (< arg 0)))
+       (gnus-article-hide-headers)))))
 
 (defun gnus-summary-show-all-headers ()
   "Make all header lines visible."
   (interactive)
   (gnus-article-show-all-headers))
 
+(defun gnus-summary-toggle-mime (&optional arg)
+  "Toggle MIME processing.
+If ARG is a positive number, turn MIME processing on."
+  (interactive "P")
+  (setq gnus-show-mime
+       (if (null arg) (not gnus-show-mime)
+         (> (prefix-numeric-value arg) 0)))
+  (gnus-summary-select-article t 'force))
+
 (defun gnus-summary-caesar-message (&optional arg)
   "Caesar rotate the current article by 13.
 The numerical prefix specifies how many places to rotate each letter
@@ -7224,7 +6959,7 @@ and `request-accept' functions."
                  gnus-newsgroup-name)) ; Server
          (list 'gnus-request-accept-article
                to-newsgroup (list 'quote select-method)
-               (not articles) t)               ; Accept form
+               (not articles))         ; Accept form
          (not articles)))              ; Only save nov last time
        ;; Copy the article.
        ((eq action 'copy)
@@ -7232,7 +6967,7 @@ and `request-accept' functions."
           (set-buffer copy-buf)
           (when (gnus-request-article-this-buffer article gnus-newsgroup-name)
             (gnus-request-accept-article
-             to-newsgroup select-method (not articles) t))))
+             to-newsgroup select-method (not articles)))))
        ;; Crosspost the article.
        ((eq action 'crosspost)
         (let ((xref (message-tokenize-header
@@ -7277,8 +7012,7 @@ and `request-accept' functions."
               (entry
                (gnus-gethash pto-group gnus-newsrc-hashtb))
               (info (nth 2 entry))
-               (to-group (gnus-info-group info))
-              to-marks)
+              (to-group (gnus-info-group info)))
          ;; Update the group that has been moved to.
          (when (and info
                     (memq action '(move copy)))
@@ -7286,7 +7020,6 @@ and `request-accept' functions."
              (push to-group to-groups))
 
            (unless (memq article gnus-newsgroup-unreads)
-             (push 'read to-marks)
              (gnus-info-set-read
               info (gnus-add-to-range (gnus-info-read info)
                                       (list (cdr art-group)))))
@@ -7299,6 +7032,10 @@ and `request-accept' functions."
              (when gnus-use-cache
                (gnus-cache-possibly-enter-article
                 to-group to-article
+                (let ((header (copy-sequence
+                               (gnus-summary-article-header article))))
+                  (mail-header-set-number header to-article)
+                  header)
                 (memq article gnus-newsgroup-marked)
                 (memq article gnus-newsgroup-dormant)
                 (memq article gnus-newsgroup-unreads)))
@@ -7314,7 +7051,6 @@ and `request-accept' functions."
                (when (memq article (symbol-value
                                     (intern (format "gnus-newsgroup-%s"
                                                     (caar marks)))))
-                  (push (cdar marks) to-marks)
                  ;; If the other group is the same as this group,
                  ;; then we have to add the mark to the list.
                  (when (equal to-group gnus-newsgroup-name)
@@ -7328,10 +7064,6 @@ and `request-accept' functions."
                   to-group (cdar marks) (list to-article) info))
                (setq marks (cdr marks)))
 
-              (gnus-request-set-mark to-group (list (list (list to-article)
-                                                          'set
-                                                          to-marks)))
-
              (gnus-dribble-enter
               (concat "(gnus-group-set-info '"
                       (gnus-prin1-to-string (gnus-get-info to-group))
@@ -7349,7 +7081,7 @@ and `request-accept' functions."
 
        ;;;!!!Why is this necessary?
        (set-buffer gnus-summary-buffer)
-
+       
        (gnus-summary-goto-subject article)
        (when (eq action 'move)
          (gnus-summary-mark-article article gnus-canceled-mark))))
@@ -7443,8 +7175,9 @@ latter case, they will be copied into the relevant groups."
        (error "Can't read %s" file))
     (save-excursion
       (set-buffer (gnus-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.
@@ -7452,7 +7185,10 @@ latter case, they will be copied into the relevant groups."
              lines (count-lines (point-min) (point-max)))
        (insert "From: " (read-string "From: ") "\n"
                "Subject: " (read-string "Subject: ") "\n"
-               "Date: " (message-make-date (nth 5 atts))
+               "Date: " (timezone-make-date-arpa-standard
+                         (current-time-string (nth 5 atts))
+                         (current-time-zone now)
+                         (current-time-zone now))
                "\n"
                "Message-ID: " (message-make-message-id) "\n"
                "Lines: " (int-to-string lines) "\n"
@@ -7499,8 +7235,6 @@ This will be the case if the article has both been mailed and posted."
        ;; There are expirable articles in this group, so we run them
        ;; through the expiry process.
        (gnus-message 6 "Expiring articles...")
-       (unless (gnus-check-group gnus-newsgroup-name)
-         (error "Can't open server for %s" gnus-newsgroup-name))
        ;; The list of articles that weren't expired is returned.
        (save-excursion
          (if expiry-wait
@@ -7582,23 +7316,20 @@ groups."
   (interactive "P")
   (save-excursion
     (set-buffer gnus-summary-buffer)
-    (let ((mail-parse-charset gnus-newsgroup-charset)
-         (mail-parse-ignored-charsets gnus-newsgroup-ignored-charsets))
-      (gnus-set-global-variables)
-      (when (and (not force)
-                (gnus-group-read-only-p))
-       (error "The current newsgroup does not support article editing"))
-      (gnus-summary-show-article t)
-      (gnus-article-edit-article
-       'mime-to-mml
-       `(lambda (no-highlight)
-         (let ((mail-parse-charset ',gnus-newsgroup-charset)
-               (mail-parse-ignored-charsets 
-                ',gnus-newsgroup-ignored-charsets))
-           (mml-to-mime)
-           (gnus-summary-edit-article-done
-            ,(or (mail-header-references gnus-current-headers) "")
-            ,(gnus-group-read-only-p) ,gnus-summary-buffer no-highlight)))))))
+    (gnus-set-global-variables)
+    (when (and (not force)
+              (gnus-group-read-only-p))
+      (error "The current newsgroup does not support article editing"))
+    ;; Select article if needed.
+    (unless (eq (gnus-summary-article-number)
+               gnus-current-article)
+      (gnus-summary-select-article t))
+    (gnus-article-date-original)
+    (gnus-article-edit-article
+     `(lambda (no-highlight)
+       (gnus-summary-edit-article-done
+        ,(or (mail-header-references gnus-current-headers) "")
+        ,(gnus-group-read-only-p) ,gnus-summary-buffer no-highlight)))))
 
 (defalias 'gnus-summary-edit-article-postpone 'gnus-article-edit-exit)
 
@@ -7608,12 +7339,12 @@ groups."
   (interactive)
   ;; Replace the article.
   (let ((buf (current-buffer)))
-    (with-temp-buffer
-      (insert-buffer-substring buf)
+    (nnheader-temp-write nil
+      (insert-buffer buf)
       (if (and (not read-only)
               (not (gnus-request-replace-article
                     (cdr gnus-article-current) (car gnus-article-current)
-                    (current-buffer) t)))
+                    (current-buffer))))
          (error "Couldn't replace article")
        ;; Update the summary buffer.
        (if (and references
@@ -7626,7 +7357,7 @@ groups."
                (message-narrow-to-head)
                (let ((head (buffer-string))
                      header)
-                 (with-temp-buffer
+                 (nnheader-temp-write nil
                    (insert (format "211 %d Article retrieved.\n"
                                    (cdr gnus-article-current)))
                    (insert head)
@@ -7651,8 +7382,7 @@ groups."
        (unless no-highlight
          (save-excursion
            (set-buffer gnus-article-buffer)
-           ;;;!!! Fix this -- article should be rehighlighted.
-           ;;;(gnus-run-hooks 'gnus-article-display-hook)
+           (gnus-run-hooks 'gnus-article-display-hook)
            (set-buffer gnus-original-article-buffer)
            (gnus-request-article
             (cdr gnus-article-current)
@@ -7815,7 +7545,7 @@ the actual number of articles marked is returned."
   "Mark ARTICLE replied and update the summary line."
   (push article gnus-newsgroup-replied)
   (let ((buffer-read-only nil))
-    (when (gnus-summary-goto-subject article nil t)
+    (when (gnus-summary-goto-subject article)
       (gnus-summary-update-secondary-mark article))))
 
 (defun gnus-summary-set-bookmark (article)
@@ -7897,7 +7627,6 @@ If N is negative, mark backwards instead.  Mark with MARK, ?r by default.
 The difference between N and the actual number of articles marked is
 returned."
   (interactive "p")
-  (gnus-summary-show-thread)
   (let ((backward (< n 0))
        (gnus-summary-goto-unread
         (and gnus-summary-goto-unread
@@ -7935,7 +7664,11 @@ returned."
     (setq mark (gnus-request-update-mark gnus-newsgroup-name article mark))
     ;; Check for auto-expiry.
     (when (and gnus-newsgroup-auto-expire
-              (memq mark gnus-auto-expirable-marks))
+              (or (= mark gnus-killed-mark) (= mark gnus-del-mark)
+                  (= mark gnus-catchup-mark) (= mark gnus-low-score-mark)
+                  (= mark gnus-ancient-mark)
+                  (= 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))
@@ -7948,8 +7681,8 @@ returned."
   "Mark the current article quickly as unread with MARK."
   (let* ((article (gnus-summary-article-number))
         (old-mark (gnus-summary-article-mark article)))
-    ;; Allow the backend to change the mark.
-    (setq mark (gnus-request-update-mark gnus-newsgroup-name article mark))
+      ;; Let the backend know about the mark change.
+      (setq mark (gnus-request-update-mark gnus-newsgroup-name article mark))
     (if (eq mark old-mark)
        t
       (if (<= article 0)
@@ -7974,6 +7707,7 @@ returned."
             (save-excursion
               (gnus-cache-possibly-enter-article
                gnus-newsgroup-name article
+               (gnus-summary-article-header article)
                (= mark gnus-ticked-mark)
                (= mark gnus-dormant-mark) (= mark gnus-unread-mark))))
 
@@ -7985,23 +7719,27 @@ returned."
   "Mark ARTICLE with MARK.  MARK can be any character.
 Four MARK strings are reserved: `? ' (unread), `?!' (ticked),
 `??' (dormant) and `?E' (expirable).
-If MARK is nil, then the default character `?r' is used.
+If MARK is nil, then the default character `?D' is used.
 If ARTICLE is nil, then the article on the current line will be
 marked."
   ;; The mark might be a string.
   (when (stringp mark)
     (setq mark (aref mark 0)))
   ;; If no mark is given, then we check auto-expiring.
-  (when (null mark)
-    (setq mark gnus-del-mark))
-  (when (and (not no-expire)
-            gnus-newsgroup-auto-expire
-            (memq mark gnus-auto-expirable-marks))
-    (setq mark gnus-expirable-mark))
-  (let ((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))
+  (and (not no-expire)
+       gnus-newsgroup-auto-expire
+       (or (not mark)
+          (and (gnus-characterp mark)
+               (or (= mark gnus-killed-mark) (= mark gnus-del-mark)
+                   (= mark gnus-catchup-mark) (= mark gnus-low-score-mark)
+                   (= mark gnus-read-mark) (= mark gnus-souped-mark)
+                   (= mark gnus-duplicate-mark))))
+       (setq mark gnus-expirable-mark))
+  (let* ((mark (or mark gnus-del-mark))
+        (article (or article (gnus-summary-article-number)))
+        (old-mark (gnus-summary-article-mark article)))
+      ;; Let the backend know about the mark change.
+      (setq mark (gnus-request-update-mark gnus-newsgroup-name article mark))
     (if (eq mark old-mark)
        t
       (unless article
@@ -8019,6 +7757,7 @@ marked."
             (save-excursion
               (gnus-cache-possibly-enter-article
                gnus-newsgroup-name article
+               (gnus-summary-article-header article)
                (= mark gnus-ticked-mark)
                (= mark gnus-dormant-mark) (= mark gnus-unread-mark))))
 
@@ -8050,19 +7789,19 @@ marked."
   (let ((forward (cdr (assq type gnus-summary-mark-positions)))
         (buffer-read-only nil))
     (re-search-backward "[\n\r]" (gnus-point-at-bol) 'move-to-limit)
-    (when forward
-      (when (looking-at "\r")
-       (incf forward))
-      (when (<= (+ forward (point)) (point-max))
-       ;; Go to the right position on the line.
-       (goto-char (+ forward (point)))
-       ;; Replace the old mark with the new mark.
-       (subst-char-in-region (point) (1+ (point)) (char-after) mark)
-       ;; Optionally update the marks by some user rule.
-       (when (eq type 'unread)
-         (gnus-data-set-mark
-          (gnus-data-find (gnus-summary-article-number)) mark)
-         (gnus-summary-update-line (eq mark gnus-unread-mark)))))))
+    (when (looking-at "\r")
+      (incf forward))
+    (when (and forward
+               (<= (+ forward (point)) (point-max)))
+      ;; Go to the right position on the line.
+      (goto-char (+ forward (point)))
+      ;; Replace the old mark with the new mark.
+      (subst-char-in-region (point) (1+ (point)) (following-char) mark)
+      ;; Optionally update the marks by some user rule.
+      (when (eq type 'unread)
+        (gnus-data-set-mark
+         (gnus-data-find (gnus-summary-article-number)) mark)
+        (gnus-summary-update-line (eq mark gnus-unread-mark))))))
 
 (defun gnus-mark-article-as-read (article &optional mark)
   "Enter ARTICLE in the pertinent lists and remove it from others."
@@ -8143,15 +7882,14 @@ If N is negative, mark backwards instead.
 The difference between N and the actual number of articles marked is
 returned."
   (interactive "p")
-  (gnus-summary-mark-forward n gnus-del-mark gnus-inhibit-user-auto-expire))
+  (gnus-summary-mark-forward n gnus-del-mark t))
 
 (defun gnus-summary-mark-as-read-backward (n)
   "Mark the N articles as read backwards.
 The difference between N and the actual number of articles marked is
 returned."
   (interactive "p")
-  (gnus-summary-mark-forward
-   (- n) gnus-del-mark gnus-inhibit-user-auto-expire))
+  (gnus-summary-mark-forward (- n) gnus-del-mark t))
 
 (defun gnus-summary-mark-as-read (&optional article mark)
   "Mark current article as read.
@@ -8332,7 +8070,7 @@ If ALL is non-nil, also mark ticked and dormant articles as read."
   (gnus-summary-catchup t quietly))
 
 (defun gnus-summary-catchup-and-exit (&optional all quietly)
-  "Mark all unread articles in this group as read, then exit.
+  "Mark all articles not marked as unread in this newsgroup as read, then exit.
 If prefix argument ALL is non-nil, all articles are marked as read."
   (interactive "P")
   (when (gnus-summary-catchup all quietly nil 'fast)
@@ -8434,15 +8172,25 @@ is non-nil or the Subject: of both articles are the same."
                         (gnus-summary-article-header parent-article))))
        (unless (and message-id (not (equal message-id "")))
          (error "No message-id in desired parent"))
-       (gnus-with-article current-article
-         (goto-char (point-min))
-         (if (re-search-forward "^References: " nil t)
-             (progn
-               (re-search-forward "^[^ \t]" nil t)
-               (forward-line -1)
-               (end-of-line)
-               (insert " " message-id))
-           (insert "References: " message-id "\n")))
+       ;; We don't want the article to be marked as read.
+       (let (gnus-mark-article-hook)
+         (gnus-summary-select-article t t nil current-article))
+       (set-buffer gnus-original-article-buffer)
+       (let ((buf (format "%s" (buffer-string))))
+         (nnheader-temp-write nil
+           (insert buf)
+           (goto-char (point-min))
+           (if (re-search-forward "^References: " nil t)
+               (progn
+                 (re-search-forward "^[^ \t]" nil t)
+                 (forward-line -1)
+                 (end-of-line)
+                 (insert " " message-id))
+             (insert "References: " message-id "\n"))
+           (unless (gnus-request-replace-article
+                    current-article (car gnus-article-current)
+                    (current-buffer))
+             (error "Couldn't replace article"))))
        (set-buffer gnus-summary-buffer)
        (gnus-summary-unmark-all-processable)
        (gnus-summary-update-article current-article)
@@ -8676,31 +8424,27 @@ Argument REVERSE means reverse order."
   (gnus-summary-sort 'score reverse))
 
 (defun gnus-summary-sort-by-lines (&optional reverse)
-  "Sort the summary buffer by the number of lines.
-Argument REVERSE means reverse order."
-  (interactive "P")
-  (gnus-summary-sort 'lines reverse))
-
-(defun gnus-summary-sort-by-chars (&optional reverse)
   "Sort the summary buffer by article length.
 Argument REVERSE means reverse order."
   (interactive "P")
-  (gnus-summary-sort 'chars reverse))  
+  (gnus-summary-sort 'lines reverse))
 
 (defun gnus-summary-sort (predicate reverse)
   "Sort summary buffer by PREDICATE.  REVERSE means reverse order."
   (let* ((thread (intern (format "gnus-thread-sort-by-%s" predicate)))
         (article (intern (format "gnus-article-sort-by-%s" predicate)))
         (gnus-thread-sort-functions
-         (if (not reverse)
-             thread
-           `(lambda (t1 t2)
-              (,thread t2 t1))))
+         (list
+          (if (not reverse)
+              thread
+            `(lambda (t1 t2)
+               (,thread t2 t1)))))
         (gnus-article-sort-functions
-         (if (not reverse)
-             article
-           `(lambda (t1 t2)
-              (,article t2 t1))))
+         (list
+          (if (not reverse)
+              article
+            `(lambda (t1 t2)
+               (,article t2 t1)))))
         (buffer-read-only)
         (gnus-summary-prepare-hook nil))
     ;; We do the sorting by regenerating the threads.
@@ -8723,9 +8467,10 @@ The variable `gnus-default-article-saver' specifies the saver function."
         (save-buffer (save-excursion
                        (nnheader-set-temp-buffer " *Gnus Save*")))
         (num (length articles))
-        header file)
-    (dolist (article articles)
-      (setq header (gnus-summary-article-header article))
+        header article file)
+    (while articles
+      (setq header (gnus-summary-article-header
+                   (setq article (pop articles))))
       (if (not (vectorp header))
          ;; This is a pseudo-article.
          (if (assq 'name header)
@@ -8775,7 +8520,7 @@ If N is a negative number, save the N previous articles.
 If N is nil and any articles have been marked with the process mark,
 save those articles instead."
   (interactive "P")
-  (let ((gnus-default-article-saver 'rmail-output-to-rmail-file))
+  (let ((gnus-default-article-saver 'gnus-summary-save-in-rmail))
     (gnus-summary-save-article arg)))
 
 (defun gnus-summary-save-article-file (&optional arg)
@@ -8855,14 +8600,16 @@ save those articles instead."
                           split-name))
                    ((consp result)
                     (setq split-name (append result split-name)))))))))
-    (nreverse split-name)))
+    split-name))
 
 (defun gnus-valid-move-group-p (group)
   (and (boundp group)
        (symbol-name group)
-       (symbol-value group)
-       (gnus-get-function (gnus-find-method-for-group
-                          (symbol-name group)) 'request-accept-article t)))
+       (memq 'respool
+            (assoc (symbol-name
+                    (car (gnus-find-method-for-group
+                          (symbol-name group))))
+                   gnus-valid-select-methods))))
 
 (defun gnus-read-move-group-name (prompt default articles prefix)
   "Read a group name."
@@ -8913,41 +8660,6 @@ save those articles instead."
          (error "No such group: %s" to-newsgroup)))
     to-newsgroup))
 
-(defun gnus-summary-save-parts (type dir n reverse)
-  "Save parts matching TYPE to DIR.
-If REVERSE, save parts that do not match TYPE."
-  (interactive
-   (list (read-string "Save parts of type: " "image/.*")
-        (read-file-name "Save to directory: " t nil t)
-        current-prefix-arg))
-  (gnus-summary-iterate n
-    (let ((gnus-display-mime-function nil)
-         (gnus-inhibit-treatment t))
-      (gnus-summary-select-article))
-    (save-excursion
-      (set-buffer gnus-article-buffer)
-      (let ((handles (or (mm-dissect-buffer) (mm-uu-dissect))))
-       (when handles
-         (gnus-summary-save-parts-1 type dir handles reverse)
-         (mm-destroy-parts handles))))))
-
-(defun gnus-summary-save-parts-1 (type dir handle reverse)
-  (if (stringp (car handle))
-      (mapcar (lambda (h) (gnus-summary-save-parts-1 type dir h reverse))
-             (cdr handle))
-    (when (if reverse
-             (not (string-match type (mm-handle-media-type handle)))
-           (string-match type (mm-handle-media-type handle)))
-      (let ((file (expand-file-name
-                  (file-name-nondirectory
-                   (or
-                    (mail-content-type-get
-                     (mm-handle-disposition handle) 'filename)
-                    (concat gnus-newsgroup-name "." gnus-current-article)))
-                  dir)))
-       (unless (file-exists-p file)
-         (mm-save-part-to-file handle file))))))
-
 ;; Summary extract commands
 
 (defun gnus-summary-insert-pseudos (pslist &optional not-view)
@@ -8983,7 +8695,7 @@ If REVERSE, save parts that do not match TYPE."
                                (lambda (f)
                                  (if (equal f " ")
                                      f
-                                   (mm-quote-arg f)))
+                                   (gnus-quote-arg-for-sh-or-csh f)))
                                files " ")))))
          (setq ps (cdr ps)))))
     (if (and gnus-view-pseudos (not not-view))
@@ -9227,9 +8939,8 @@ If REVERSE, save parts that do not match TYPE."
        (setq unread (cdr unread)))
       (when (<= prev (cdr active))
        (push (cons prev (cdr active)) read))
-      (setq read (if (> (length read) 1) (nreverse read) read))
       (if compute
-         read
+         (if (> (length read) 1) (nreverse read) read)
        (save-excursion
          (set-buffer gnus-group-buffer)
          (gnus-undo-register
@@ -9238,18 +8949,9 @@ If REVERSE, save parts that do not match TYPE."
               (gnus-info-set-read ',info ',(gnus-info-read info))
               (gnus-get-unread-articles-in-group ',info (gnus-active ,group))
               (gnus-group-update-group ,group t))))
-       ;; Propagate the read marks to the backend.
-       (if (gnus-check-backend-function 'request-set-mark group)
-           (let ((del (gnus-remove-from-range (gnus-info-read info) read))
-                 (add (gnus-remove-from-range read (gnus-info-read info))))
-             (when (or add del)
-              (unless (gnus-check-group group)
-                (error "Can't open server for %s" group))
-               (gnus-request-set-mark
-                group (delq nil (list (if add (list add 'add '(read)))
-                                      (if del (list del 'del '(read)))))))))
        ;; Enter this list into the group info.
-       (gnus-info-set-read info read)
+       (gnus-info-set-read
+        info (if (> (length read) 1) (nreverse read) read))
        ;; Set the number of unread articles in gnus-newsrc-hashtb.
        (gnus-get-unread-articles-in-group info (gnus-active group))
        t))))
@@ -9282,196 +8984,37 @@ If REVERSE, save parts that do not match TYPE."
           (gnus-summary-exit))
         buffers)))))
 
-(defun gnus-summary-setup-default-charset ()
-  "Setup newsgroup default charset."
-  (if (equal gnus-newsgroup-name "nndraft:drafts")
-      (setq gnus-newsgroup-charset nil)
-  (let* ((name (and gnus-newsgroup-name
-                  (gnus-group-real-name gnus-newsgroup-name)))
-        (ignored-charsets 
-         (or gnus-newsgroup-ephemeral-ignored-charsets
-             (append
-              (and gnus-newsgroup-name
-                   (or (gnus-group-find-parameter gnus-newsgroup-name
-                                                  'ignored-charsets t)
-                       (let ((alist gnus-group-ignored-charsets-alist)
-                          elem (charsets nil))
-                         (while (setq elem (pop alist))
-                           (when (and name
-                                      (string-match (car elem) name))
-                             (setq alist nil
-                                   charsets (cdr elem))))
-                         charsets))))
-             gnus-newsgroup-ignored-charsets)))
-    (setq gnus-newsgroup-charset
-         (or gnus-newsgroup-ephemeral-charset
-             (and gnus-newsgroup-name
-                  (or (gnus-group-find-parameter gnus-newsgroup-name
-                                                 'charset)
-                      (let ((alist gnus-group-charset-alist)
-                            elem (charset nil))
-                        (while (setq elem (pop alist))
-                          (when (and name
-                                     (string-match (car elem) name))
-                            (setq alist nil
-                                  charset (cadr elem))))
-                        charset)))
-             gnus-default-charset))
-    (set (make-local-variable 'gnus-newsgroup-ignored-charsets) 
-        ignored-charsets))))
 
+;;; @ for mime-partial
 ;;;
-;;; Mime Commands
-;;;
-
-(defun gnus-summary-display-buttonized (&optional show-all-parts)
-  "Display the current article buffer fully MIME-buttonized.
-If SHOW-ALL-PARTS (the prefix) is non-nil, all multipart/* parts are
-treated as multipart/mixed."
-  (interactive "P")
-  (require 'gnus-art)
-  (let ((gnus-unbuttonized-mime-types nil)
-       (gnus-mime-display-multipart-as-mixed show-all-parts))
-    (gnus-summary-show-article)))
 
-(defun gnus-summary-repair-multipart (article)
-  "Add a Content-Type header to a multipart article without one."
-  (interactive (list (gnus-summary-article-number)))
-  (gnus-with-article article
-    (message-narrow-to-head)
-    (goto-char (point-max))
-    (widen)
-    (when (search-forward "\n--" nil t)
-      (let ((separator (buffer-substring (point) (gnus-point-at-eol))))
-       (message-narrow-to-head)
-       (message-remove-header "Mime-Version")
-       (message-remove-header "Content-Type")
-       (goto-char (point-max))
-       (insert (format "Content-Type: multipart/mixed; boundary=\"%s\"\n"
-                       separator))
-       (insert "Mime-Version: 1.0\n")
-       (widen))))
-  (let (gnus-mark-article-hook)
-    (gnus-summary-select-article t t nil article)))
+(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)
+      )))
 
-(defun gnus-summary-toggle-display-buttonized ()
-  "Toggle the buttonizing of the article buffer."
-  (interactive)
-  (require 'gnus-art)
-  (if (setq gnus-inhibit-mime-unbuttonizing
-           (not gnus-inhibit-mime-unbuttonizing))
-      (let ((gnus-unbuttonized-mime-types nil))
-       (gnus-summary-show-article))
-    (gnus-summary-show-article)))
+(autoload 'mime-combine-message/partial-pieces-automatically
+  "mime-partial"
+  "Internal method to combine message/partial messages automatically.")
 
-;;;
-;;; with article
-;;;
+(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)
+          ))
 
-(defmacro gnus-with-article (article &rest forms)
-  "Select ARTICLE and perform FORMS in the original article buffer.
-Then replace the article with the result."
-  `(progn
-     ;; We don't want the article to be marked as read.
-     (let (gnus-mark-article-hook)
-       (gnus-summary-select-article t t nil ,article))
-     (set-buffer gnus-original-article-buffer)
-     ,@forms
-     (if (not (gnus-check-backend-function
-              'request-replace-article (car gnus-article-current)))
-        (gnus-message 5 "Read-only group; not replacing")
-       (unless (gnus-request-replace-article
-               ,article (car gnus-article-current)
-               (current-buffer) t)
-        (error "Couldn't replace article")))
-     ;; The cache and backlog have to be flushed somewhat.
-     (when gnus-keep-backlog
-       (gnus-backlog-remove-article
-       (car gnus-article-current) (cdr gnus-article-current)))
-     (when gnus-use-cache
-       (gnus-cache-update-article
-       (car gnus-article-current) (cdr gnus-article-current)))))
-
-(put 'gnus-with-article 'lisp-indent-function 1)
-(put 'gnus-with-article 'edebug-form-spec '(form body))
 
+;;; @ end
 ;;;
-;;; Generic summary marking commands
-;;;
-
-(defvar gnus-summary-marking-alist
-  '((read gnus-del-mark "d")
-    (unread gnus-unread-mark "u")
-    (ticked gnus-ticked-mark "!")
-    (dormant gnus-dormant-mark "?")
-    (expirable gnus-expirable-mark "e"))
-  "An alist of names/marks/keystrokes.")
-
-(defvar gnus-summary-generic-mark-map (make-sparse-keymap))
-(defvar gnus-summary-mark-map)
-
-(defun gnus-summary-make-all-marking-commands ()
-  (define-key gnus-summary-mark-map "M" gnus-summary-generic-mark-map)
-  (dolist (elem gnus-summary-marking-alist)
-    (apply 'gnus-summary-make-marking-command elem)))
-
-(defun gnus-summary-make-marking-command (name mark keystroke)
-  (let ((map (make-sparse-keymap)))
-    (define-key gnus-summary-generic-mark-map keystroke map)
-    (dolist (lway `((next "next" next nil "n")
-                   (next-unread "next unread" next t "N")
-                   (prev "previous" prev nil "p")
-                   (prev-unread "previous unread" prev t "P")
-                   (nomove "" nil nil ,keystroke)))
-      (let ((func (gnus-summary-make-marking-command-1
-                  mark (car lway) lway name)))
-       (setq func (eval func))
-       (define-key map (nth 4 lway) func)))))
-      
-(defun gnus-summary-make-marking-command-1 (mark way lway name)      
-  `(defun ,(intern
-           (format "gnus-summary-put-mark-as-%s%s"
-                   name (if (eq way 'nomove)
-                            ""
-                          (concat "-" (symbol-name way)))))
-     (n)
-     ,(format
-       "Mark the current article as %s%s.
-If N, the prefix, then repeat N times.
-If N is negative, move in reverse order.
-The difference between N and the actual number of articles marked is
-returned."
-       name (cadr lway))
-     (interactive "p")
-     (gnus-summary-generic-mark n ,mark ',(nth 2 lway) ,(nth 3 lway))))
-    
-(defun gnus-summary-generic-mark (n mark move unread)
-  "Mark N articles with MARK."
-  (unless (eq major-mode 'gnus-summary-mode)
-    (error "This command can only be used in the summary buffer"))
-  (gnus-summary-show-thread)
-  (let ((nummove
-        (cond
-         ((eq move 'next) 1)
-         ((eq move 'prev) -1)
-         (t 0))))
-    (if (zerop nummove)
-       (setq n 1)
-      (when (< n 0)
-       (setq n (abs n)
-             nummove (* -1 nummove))))
-    (while (and (> n 0)
-               (gnus-summary-mark-article nil mark)
-               (zerop (gnus-summary-next-subject nummove unread t)))
-      (setq n (1- n)))
-    (when (/= 0 n)
-      (gnus-message 7 "No more %sarticles" (if mark "" "unread ")))
-    (gnus-summary-recenter)
-    (gnus-summary-position-point)
-    (gnus-set-mode-line 'summary)
-    n))
-
-(gnus-summary-make-all-marking-commands)
 
 (gnus-ems-redefine)
 
index ed63e62..3f2b2af 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-topic.el --- a folding minor mode for Gnus group buffers
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Ilja Weis <kult@uni-paderborn.de>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -361,8 +361,7 @@ If TOPIC, start with that topic."
 
 ;;; Generating group buffers
 
-(defun gnus-group-prepare-topics (level &optional all lowest
-                                       regexp list-topic topic-level)
+(defun gnus-group-prepare-topics (level &optional all lowest regexp list-topic topic-level)
   "List all newsgroups with unread articles of level LEVEL or lower.
 Use the `gnus-group-topics' to sort the groups.
 If ALL is non-nil, list groups that have no unread articles.
@@ -417,7 +416,7 @@ articles in the topic and its subtopics."
         (entries (gnus-topic-find-groups
                   (car type) list-level
                   (or all
-                      (cdr (assq 'visible
+                      (cdr (assq 'visible 
                                  (gnus-topic-hierarchical-parameters
                                   (car type)))))
                   lowest))
@@ -445,8 +444,7 @@ articles in the topic and its subtopics."
        (if (stringp entry)
            ;; Dead groups.
            (gnus-group-insert-group-line
-            entry (if (member entry gnus-zombie-list)
-                      gnus-level-zombie gnus-level-killed)
+            entry (if (member entry gnus-zombie-list) gnus-level-zombie gnus-level-killed)
             nil (- (1+ (cdr (setq active (gnus-active entry))))
                    (car active))
             nil)
@@ -908,7 +906,6 @@ articles in the topic and its subtopics."
     "=" gnus-topic-select-group
     "\r" gnus-topic-select-group
     " " gnus-topic-read-group
-    "\C-c\C-x" gnus-topic-expire-articles
     "\C-k" gnus-topic-kill-group
     "\C-y" gnus-topic-yank-group
     "\M-g" gnus-topic-get-new-news-this-topic
@@ -1042,19 +1039,6 @@ If performed over a topic line, toggle folding the topic."
   (mouse-set-point e)
   (gnus-topic-read-group nil))
 
-(defun gnus-topic-expire-articles (topic)
-  "Expire articles in this topic or group."
-  (interactive (list (gnus-group-topic-name)))
-  (if (not topic)
-      (call-interactively 'gnus-group-expire-articles)
-    (save-excursion
-      (gnus-message 5 "Expiring groups in %s..." topic)
-      (let ((gnus-group-marked
-            (mapcar (lambda (entry) (car (nth 2 entry)))
-                    (gnus-topic-find-groups topic gnus-level-killed t))))
-       (gnus-group-expire-articles nil))
-      (gnus-message 5 "Expiring groups in %s...done" topic))))
-
 (defun gnus-topic-read-group (&optional all no-article group)
   "Read news in this newsgroup.
 If the prefix argument ALL is non-nil, already read articles become
index 6d7e4ab..90cf174 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-undo.el --- minor mode for undoing in Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
index 350926c..cba9137 100644 (file)
@@ -1,8 +1,8 @@
-;;; gnus-util.el --- utility functions for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;;; 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-when-compile
+  (when (locate-library "rmail")
+    (require 'rmail)))
 
 (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))
 
+;; Avoid byte-compile warning.
+;; In Mule, this function will be redefined to `truncate-string',
+;; which takes 3 or 4 args.
+(defun gnus-truncate-string (str width &rest ignore)
+  (substring str 0 width))
+
 ;; Added by Geoffrey T. Dairiki <dairiki@u.washington.edu>.  A safe way
 ;; to limit the length of a string.  This function is necessary since
 ;; `(substr "abc" 0 30)' pukes with "Args out of range".
      (when (gnus-buffer-exists-p buf)
        (kill-buffer buf))))
 
-(fset 'gnus-point-at-bol
-      (if (fboundp 'point-at-bol)
-         'point-at-bol
-       'line-beginning-position))
-
-(fset 'gnus-point-at-eol
-      (if (fboundp 'point-at-eol)
-         'point-at-eol
-       'line-end-position))
+(if (fboundp 'point-at-bol)
+    (fset 'gnus-point-at-bol 'point-at-bol)
+  (defun gnus-point-at-bol ()
+    "Return point at the beginning of the line."
+    (let ((p (point)))
+      (beginning-of-line)
+      (prog1
+         (point)
+       (goto-char p)))))
+
+(if (fboundp 'point-at-eol)
+    (fset 'gnus-point-at-eol 'point-at-eol)
+  (defun gnus-point-at-eol ()
+    "Return point at the end of the line."
+    (let ((p (point)))
+      (end-of-line)
+      (prog1
+         (point)
+       (goto-char p)))))
 
 (defun gnus-delete-first (elt list)
   "Delete by side effect the first occurrence of ELT as a member of LIST."
 
 ;;; Time functions.
 
+(defun gnus-days-between (date1 date2)
+  ;; Return the number of days between date1 and date2.
+  (- (gnus-day-number date1) (gnus-day-number date2)))
+
+(defun gnus-day-number (date)
+  (let ((dat (mapcar (lambda (s) (and s (string-to-int s)) )
+                    (timezone-parse-date date))))
+    (timezone-absolute-from-gregorian
+     (nth 1 dat) (nth 2 dat) (car dat))))
+
+(defun gnus-time-to-day (time)
+  "Convert TIME to day number."
+  (let ((tim (decode-time time)))
+    (timezone-absolute-from-gregorian
+     (nth 4 tim) (nth 3 tim) (nth 5 tim))))
+
+(defun gnus-encode-date (date)
+  "Convert DATE to internal time."
+  (let* ((parse (timezone-parse-date date))
+        (date (mapcar (lambda (d) (and d (string-to-int d))) parse))
+        (time (mapcar 'string-to-int (timezone-parse-time (aref parse 3)))))
+    (encode-time (caddr time) (cadr time) (car time)
+                (caddr date) (cadr date) (car date)
+                (* 60 (timezone-zone-to-minute (nth 4 date))))))
+
+(defun gnus-time-minus (t1 t2)
+  "Subtract two internal times."
+  (let ((borrow (< (cadr t1) (cadr t2))))
+    (list (- (car t1) (car t2) (if borrow 1 0))
+         (- (+ (if borrow 65536 0) (cadr t1)) (cadr t2)))))
+
+(defun gnus-time-less (t1 t2)
+  "Say whether time T1 is less than time T2."
+  (or (< (car t1) (car t2))
+      (and (= (car t1) (car t2))
+          (< (nth 1 t1) (nth 1 t2)))))
+
 (defun gnus-file-newer-than (file date)
   (let ((fdate (nth 5 (file-attributes file))))
     (or (> (car fdate) (car date))
 
 (defun gnus-dd-mmm (messy-date)
   "Return a string like DD-MMM from a big messy string."
-  (format-time-string "%d-%b" (safe-date-to-time messy-date)))
+  (let ((datevec (ignore-errors (timezone-parse-date messy-date))))
+    (if (or (not datevec)
+           (string-equal "0" (aref datevec 1)))
+       "??-???"
+      (format "%2s-%s"
+             (condition-case ()
+                 ;; Make sure leading zeroes are stripped.
+                 (number-to-string (string-to-number (aref datevec 2)))
+               (error "??"))
+             (capitalize
+              (or (car
+                   (nth (1- (string-to-number (aref datevec 1)))
+                        timezone-months-assoc))
+                  "???"))))))
 
 (defmacro gnus-date-get-time (date)
   "Convert DATE string to Emacs time.
@@ -302,7 +372,7 @@ Cache the result as a text property stored in DATE."
         '(0 0)
        (or (get-text-property 0 'gnus-time d)
           ;; or compute the value...
-          (let ((time (safe-date-to-time d)))
+          (let ((time (nnmail-date-to-time d)))
             ;; and store it back in the string.
             (put-text-property 0 1 'gnus-time time d)
             time)))))
@@ -386,7 +456,7 @@ jabbering all the time."
            ids))
     (nreverse ids)))
 
-(defsubst gnus-parent-id (references &optional n)
+(defun gnus-parent-id (references &optional n)
   "Return the last Message-ID in REFERENCES.
 If N, return the Nth ancestor instead."
   (when references
@@ -433,8 +503,20 @@ If N, return the Nth ancestor instead."
     (cons (and (numberp event) event) event)))
 
 (defun gnus-sortable-date (date)
-  "Make string suitable for sorting from DATE."
-  (gnus-time-iso8601 (date-to-time date)))
+  "Make sortable string by string-lessp from DATE.
+Timezone package is used."
+  (condition-case ()
+      (progn
+       (setq date (inline (timezone-fix-time
+                           date nil
+                           (aref (inline (timezone-parse-date date)) 4))))
+       (inline
+         (timezone-make-sortable-date
+          (aref date 0) (aref date 1) (aref date 2)
+          (inline
+            (timezone-make-time-string
+             (aref date 3) (aref date 4) (aref date 5))))))
+    (error "")))
 
 (defun gnus-copy-file (file &optional to)
   "Copy FILE to TO."
@@ -466,7 +548,7 @@ If N, return the Nth ancestor instead."
        (erase-buffer))
     (set-buffer (gnus-get-buffer-create gnus-work-buffer))
     (kill-all-local-variables)
-    (mm-enable-multibyte)))
+    (buffer-disable-undo (current-buffer))))
 
 (defmacro gnus-group-real-name (group)
   "Find the real name of a foreign newsgroup."
@@ -478,40 +560,21 @@ If N, return the Nth ancestor instead."
 (defun gnus-make-sort-function (funs)
   "Return a composite sort condition based on the functions in FUNC."
   (cond
-   ;; Just a simple function.
-   ((gnus-functionp funs) funs)
-   ;; No functions at all.
+   ((not (listp funs)) funs)
    ((null funs) funs)
-   ;; A list of functions.
-   ((or (cdr funs)
-       (listp (car funs)))
+   ((cdr funs)
     `(lambda (t1 t2)
        ,(gnus-make-sort-function-1 (reverse funs))))
-   ;; A list containing just one function.
    (t
     (car funs))))
 
 (defun gnus-make-sort-function-1 (funs)
   "Return a composite sort condition based on the functions in FUNC."
-  (let ((function (car funs))
-       (first 't1)
-       (last 't2))
-    (when (consp function)
-      (cond
-       ;; Reversed spec.
-       ((eq (car function) 'not)
-       (setq function (cadr function)
-             first 't2
-             last 't1))
-       ((gnus-functionp function)
-       )
-       (t
-       (error "Invalid sort spec: %s" function))))
-    (if (cdr funs)
-       `(or (,function ,first ,last)
-            (and (not (,function ,last ,first))
-                 ,(gnus-make-sort-function-1 (cdr funs))))
-      `(,function ,first ,last))))
+  (if (cdr funs)
+      `(or (,(car funs) t1 t2)
+          (and (not (,(car funs) t2 t1))
+               ,(gnus-make-sort-function-1 (cdr funs))))
+    `(,(car funs) t1 t2)))
 
 (defun gnus-turn-off-edit-menu (type)
   "Turn off edit menu in `gnus-TYPE-mode-map'."
@@ -547,6 +610,21 @@ Bind `print-quoted' and `print-readably' to t while printing."
   ;; Write the buffer.
   (write-region (point-min) (point-max) file nil 'quietly))
 
+(defun gnus-write-buffer-as-binary (file)
+  "Write the current buffer's contents to FILE without code conversion."
+  ;; Make sure the directory exists.
+  (gnus-make-directory (file-name-directory file))
+  ;; Write the buffer.
+  (write-region-as-binary (point-min) (point-max) file nil 'quietly))
+
+(defun gnus-write-buffer-as-coding-system (coding-system file)
+  "Write the current buffer's contents to FILE with code conversion."
+  ;; Make sure the directory exists.
+  (gnus-make-directory (file-name-directory file))
+  ;; Write the buffer.
+  (write-region-as-coding-system
+   coding-system (point-min) (point-max) file nil 'quietly))
+
 (defun gnus-delete-file (file)
   "Delete FILE if it exists."
   (when (file-exists-p file)
@@ -558,7 +636,7 @@ Bind `print-quoted' and `print-readably' to t while printing."
     (setq string (replace-match "" t t string)))
   string)
 
-(defsubst gnus-put-text-property-excluding-newlines (beg end prop val)
+(defun gnus-put-text-property-excluding-newlines (beg end prop val)
   "The same as `put-text-property', but don't put this prop on any newlines in the region."
   (save-match-data
     (save-excursion
@@ -580,7 +658,7 @@ Bind `print-quoted' and `print-readably' to t while printing."
        (gnus-put-text-property
         b (setq b (next-single-property-change b 'gnus-face nil end))
         prop val)))))
-
+  
 ;;; Protected and atomic operations.  dmoore@ucsd.edu 21.11.1996
 ;;; The primary idea here is to try to protect internal datastructures
 ;;; from becoming corrupted when the user hits C-g, or if a hook or
@@ -729,7 +807,7 @@ with potentially long computations."
              (save-excursion
                (set-buffer file-buffer)
                (let ((require-final-newline nil))
-                 (gnus-write-buffer filename)))
+                 (gnus-write-buffer-as-binary filename)))
              (kill-buffer file-buffer))
          (error "Output file does not exist")))
       (set-buffer tmpbuf)
@@ -756,7 +834,8 @@ with potentially long computations."
                    (insert "\n"))
                  (insert "\n"))
                (goto-char (point-max))
-               (append-to-file (point-min) (point-max) filename)))
+               (write-region-as-binary (point-min) (point-max)
+                                       filename 'append)))
          ;; File has been visited, in buffer OUTBUF.
          (set-buffer outbuf)
          (let ((buffer-read-only nil))
@@ -792,60 +871,78 @@ ARG is passed to the first function."
     (unwind-protect
        (apply 'run-hooks funcs)
       (set-buffer buf))))
-
+  
 ;;;
 ;;; .netrc and .authinforc parsing
 ;;;
 
+(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)
+    (modify-syntax-entry ?. "w" table)
+    (modify-syntax-entry ?, "w" table)
+    (modify-syntax-entry ?: "w" table)
+    (modify-syntax-entry ?\; "w" table)
+    (modify-syntax-entry ?% "w" table)
+    (modify-syntax-entry ?) "w" table)
+    (modify-syntax-entry ?( "w" table)
+    table)
+  "Syntax table when parsing .netrc files.")
+
 (defun gnus-parse-netrc (file)
   "Parse FILE and return an list of all entries in the file."
-  (when (file-exists-p file)
-    (with-temp-buffer
+  (if (not (file-exists-p file))
+      ()
+    (save-excursion
       (let ((tokens '("machine" "default" "login"
                      "password" "account" "macdef" "force"))
            alist elem result pair)
-       (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 ")
-           ;; Skip lines that begin with a "#".
-           (if (eq (char-after) ?#)
-               (goto-char (point-max))
-             (unless (eobp)
-               (setq elem (buffer-substring
-                           (point) (progn (skip-chars-forward "^\t ")
-                                          (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)))))))
-         (when alist
-           (push (nreverse alist) result))
-         (setq alist nil
-               pair nil)
-         (widen)
-         (forward-line 1))
-       (nreverse result)))))
+       (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)
+               (widen)
+               (forward-line 1))
+             (nreverse result))
+         (kill-buffer " *netrc*"))))))
 
 (defun gnus-netrc-machine (list machine)
   "Return the netrc values from LIST for MACHINE or for the default entry."
@@ -864,7 +961,7 @@ ARG is passed to the first function."
 
 ;;; Various
 
-(defvar gnus-group-buffer)             ; Compiler directive
+(defvar gnus-group-buffer) ; Compiler directive
 (defun gnus-alive-p ()
   "Say whether Gnus is running or not."
   (and (boundp 'gnus-group-buffer)
@@ -897,12 +994,11 @@ ARG is passed to the first function."
       (setq alist (delq entry alist)))
     alist))
 
-(defmacro gnus-pull (key alist &optional assoc-p)
+(defmacro gnus-pull (key alist)
   "Modify ALIST to be without KEY."
   (unless (symbolp alist)
     (error "Not a symbol: %s" alist))
-  (let ((fun (if assoc-p 'assoc 'assq)))
-    `(setq ,alist (delq (,fun ,key ,alist) ,alist))))
+  `(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."
@@ -910,45 +1006,6 @@ ARG is passed to the first function."
          re
          (unless (string-match "\\$$" re) ".*$")))
 
-(defun gnus-set-window-start (&optional point)
-  "Set the window start to POINT, or (point) if nil."
-  (let ((win (get-buffer-window (current-buffer) t)))
-    (when win
-      (set-window-start win (or point (point))))))
-
-(defun gnus-annotation-in-region-p (b e)
-  (if (= b e)
-      (eq (cadr (memq 'gnus-undeletable (text-properties-at b))) t)
-    (text-property-any b e 'gnus-undeletable t)))
-
-(defun gnus-or (&rest elems)
-  "Return non-nil if any of the elements are non-nil."
-  (catch 'found
-    (while elems
-      (when (pop elems)
-       (throw 'found t)))))
-
-(defun gnus-and (&rest elems)
-  "Return non-nil if all of the elements are non-nil."
-  (catch 'found
-    (while elems
-      (unless (pop elems)
-       (throw 'found nil)))
-    t))
-
-(defun gnus-write-active-file (file hashtb)
-  (with-temp-file file
-    (mapatoms
-     (lambda (sym)
-       (when (and sym
-                 (boundp sym)
-                 (symbol-value sym))
-        (insert (format "%s %d %d y\n"
-                        (gnus-group-real-name (symbol-name sym)) 
-                        (cdr (symbol-value sym))
-                        (car (symbol-value sym))))))
-     hashtb)))
-
 (provide 'gnus-util)
 
 ;;; gnus-util.el ends here
index 2380ecb..19929f3 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-uu.el --- extract (uu)encoded files in Gnus
-;; Copyright (C) 198,995,86,87,93,94,95,96,97,98 Free Software Foundation, Inc.
+;; Copyright (C) 1985,86,87,93,94,95,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Created: 2 Oct 1993
@@ -32,7 +32,6 @@
 (require 'gnus-art)
 (require 'message)
 (require 'gnus-msg)
-(require 'mm-decode)
 
 (defgroup gnus-extract nil
   "Extracting encoded files."
@@ -58,8 +57,8 @@
   '(("\\.te?xt$\\|\\.doc$\\|read.*me\\|\\.c?$\\|\\.h$\\|\\.bat$\\|\\.asm$\\|makefile" "cat %s | sed 's/\r$//'")
     ("\\.pas$" "cat %s | sed 's/\r$//'")
     ("\\.[1-9]$" "groff -mandoc -Tascii %s | sed s/\b.//g")
-    ("\\.\\(jpe?g\\|gif\\|tiff?\\|p[pgb]m\\|xwd\\|xbm\\|pcx\\)$" "display")
-    ("\\.tga$" "tgatoppm %s | ee -")
+    ("\\.\\(jpe?g\\|gif\\|tiff?\\|p[pgb]m\\|xwd\\|xbm\\|pcx\\)$" "xv")
+    ("\\.tga$" "tgatoppm %s | xv -")
     ("\\.\\(wav\\|aiff\\|hcom\\|u[blw]\\|s[bfw]\\|voc\\|smp\\)$"
      "sox -v .5 %s -t .au -u - > /dev/audio")
     ("\\.au$" "cat %s > /dev/audio")
@@ -216,10 +215,7 @@ Note that this variable can be used in conjunction with the
 
 ;; Various variables users may set
 
-(defcustom gnus-uu-tmp-dir
-  (cond ((fboundp 'temp-directory) (temp-directory))
-       ((boundp 'temporary-file-directory) temporary-file-directory)
-       ("/tmp/"))
+(defcustom gnus-uu-tmp-dir "/tmp/"
   "*Variable saying where gnus-uu is to do its work.
 Default is \"/tmp/\"."
   :group 'gnus-extract
@@ -332,8 +328,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
 (defvar gnus-uu-shar-begin-string "^#! */bin/sh")
 
 (defvar gnus-uu-shar-file-name nil)
-(defvar gnus-uu-shar-name-marker
-  "begin [0-7][0-7][0-7][ \t]+\\(\\(\\w\\|\\.\\)*\\b\\)")
+(defvar gnus-uu-shar-name-marker "begin [0-7][0-7][0-7][ \t]+\\(\\(\\w\\|\\.\\)*\\b\\)")
 
 (defvar gnus-uu-postscript-begin-string "^%!PS-")
 (defvar gnus-uu-postscript-end-string "^%%EOF$")
@@ -369,8 +364,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
   "k" gnus-summary-kill-process-mark
   "y" gnus-summary-yank-process-mark
   "w" gnus-summary-save-process-mark
-  "i" gnus-uu-invert-processable
-  "m" gnus-summary-save-parts)
+  "i" gnus-uu-invert-processable)
 
 (gnus-define-keys (gnus-uu-extract-map "X" gnus-summary-mode-map)
   ;;"x" gnus-uu-extract-any
@@ -557,6 +551,8 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
        (delete-region (point) (gnus-point-at-eol))
        (insert from))
       (message-forward post))
+    (delete-file file)
+    (kill-buffer buf)
     (setq gnus-uu-digest-from-subject nil)))
 
 (defun gnus-uu-digest-post-forward (&optional n)
@@ -622,11 +618,10 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
 (defun gnus-uu-mark-thread ()
   "Marks all articles downwards in this thread."
   (interactive)
-  (gnus-save-hidden-threads
-    (let ((level (gnus-summary-thread-level)))
-      (while (and (gnus-summary-set-process-mark (gnus-summary-article-number))
-                 (zerop (gnus-summary-next-subject 1))
-                 (> (gnus-summary-thread-level) level)))))
+  (let ((level (gnus-summary-thread-level)))
+    (while (and (gnus-summary-set-process-mark (gnus-summary-article-number))
+               (zerop (gnus-summary-next-subject 1))
+               (> (gnus-summary-thread-level) level))))
   (gnus-summary-position-point))
 
 (defun gnus-uu-unmark-thread ()
@@ -838,9 +833,8 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
              (eq in-state 'first-and-last))
          (progn
            (setq state (list 'begin))
-           (save-excursion
-             (set-buffer (gnus-get-buffer-create "*gnus-uu-body*"))
-             (erase-buffer))
+           (save-excursion (set-buffer (gnus-get-buffer-create "*gnus-uu-body*"))
+                           (erase-buffer))
            (save-excursion
              (set-buffer (gnus-get-buffer-create "*gnus-uu-pre*"))
              (erase-buffer)
@@ -1030,7 +1024,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
   ;; 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)
+    (buffer-disable-undo (current-buffer))
     (erase-buffer)
     (insert (regexp-quote string))
 
@@ -1130,7 +1124,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
        string)
     (save-excursion
       (set-buffer (gnus-get-buffer-create gnus-uu-output-buffer-name))
-      (buffer-disable-undo)
+      (buffer-disable-undo (current-buffer))
       (while string-list
        (erase-buffer)
        (insert (caar string-list))
@@ -1205,10 +1199,9 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
                                       &optional sloppy limit no-errors)
   (let ((state 'first)
        (gnus-asynchronous nil)
-       (gnus-inhibit-treatment t)
        has-been-begin article result-file result-files process-state
        gnus-summary-display-article-function
-       gnus-article-prepare-hook
+       gnus-article-display-hook gnus-article-prepare-hook
        article-series files)
 
     (while (and articles
@@ -1399,7 +1392,7 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
          ;; We replace certain characters that could make things messy.
          (setq gnus-uu-file-name
                (let ((nnheader-file-name-translation-alist
-                      '((?/ . ?,) (?  . ?_) (?* . ?_) (?$ . ?_))))
+                      '((?/ . ?,) (? . ?_) (?* . ?_) (?$ . ?_))))
                  (nnheader-translate-file-chars (match-string 1))))
           (replace-match (concat "begin 644 " gnus-uu-file-name) t t)
 
@@ -1701,11 +1694,23 @@ didn't work, and overwrite existing files.  Otherwise, ask each time."
     (when (setq buf (get-buffer gnus-uu-output-buffer-name))
       (kill-buffer buf))))
 
+(defun gnus-quote-arg-for-sh-or-csh (arg)
+  (let ((pos 0) new-pos accum)
+    ;; *** bug: we don't handle newline characters properly
+    (while (setq new-pos (string-match "[!`\"$\\& \t{}]" arg pos))
+      (push (substring arg pos new-pos) accum)
+      (push "\\" accum)
+      (push (list (aref arg new-pos)) accum)
+      (setq pos (1+ new-pos)))
+    (if (= pos 0)
+        arg
+      (apply 'concat (nconc (nreverse accum) (list (substring arg pos)))))))
+
 ;; Inputs an action and a filename and returns a full command, making sure
 ;; that the filename will be treated as a single argument when the shell
 ;; executes the command.
 (defun gnus-uu-command (action file)
-  (let ((quoted-file (mm-quote-arg file)))
+  (let ((quoted-file (gnus-quote-arg-for-sh-or-csh file)))
     (if (string-match "%s" action)
        (format action quoted-file)
       (concat action " " quoted-file))))
@@ -1801,9 +1806,7 @@ is t."
 
   (gnus-summary-post-news)
 
-  (let ((map (make-sparse-keymap)))
-    (set-keymap-parent map (current-local-map))
-    (use-local-map map))
+  (use-local-map (copy-keymap (current-local-map)))
   (local-set-key "\C-c\C-c" 'gnus-summary-edit-article-done)
   (local-set-key "\C-c\C-c" 'gnus-uu-post-news-inews)
   (local-set-key "\C-c\C-s" 'gnus-uu-post-news-inews)
index 254b401..c41fbae 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-win.el --- window configuration functions for Gnus
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -318,7 +318,7 @@ See the Gnus manual for an explanation of the syntax used.")
       (let ((buffer (cond ((stringp type) type)
                          (t (cdr (assq type gnus-window-to-buffer))))))
        (unless buffer
-         (error "Invalid buffer type: %s" type))
+         (error "Illegal buffer type: %s" type))
        (switch-to-buffer (gnus-get-buffer-create
                           (gnus-window-to-buffer-helper buffer)))
        (when (memq 'frame-focus split)
@@ -373,7 +373,7 @@ See the Gnus manual for an explanation of the syntax used.")
                  ((integerp size)
                   (setq s size))
                  (t
-                  (error "Invalid size: %s" size)))
+                  (error "Illegal size: %s" size)))
            ;; Try to make sure that we are inside the safe limits.
            (cond ((zerop s))
                  ((eq type 'horizontal)
@@ -408,50 +408,48 @@ See the Gnus manual for an explanation of the syntax used.")
 (defvar gnus-frame-split-p nil)
 
 (defun gnus-configure-windows (setting &optional force)
-  (if (window-configuration-p setting)
-      (set-window-configuration setting)
-    (setq gnus-current-window-configuration setting)
-    (setq force (or force gnus-always-force-window-configuration))
-    (setq setting (gnus-windows-old-to-new setting))
-    (let ((split (if (symbolp setting)
-                    (cadr (assq setting gnus-buffer-configuration))
-                  setting))
-         all-visible)
-
-      (setq gnus-frame-split-p nil)
-
-      (unless split
-       (error "No such setting: %s" setting))
-
-      (if (and (setq all-visible (gnus-all-windows-visible-p split))
-              (not force))
-         ;; All the windows mentioned are already visible, so we just
-         ;; put point in the assigned buffer, and do not touch the
-         ;; winconf.
-         (select-window all-visible)
-
-       ;; Either remove all windows or just remove all Gnus windows.
-       (let ((frame (selected-frame)))
-         (unwind-protect
-             (if gnus-use-full-window
-                 ;; We want to remove all other windows.
-                 (if (not gnus-frame-split-p)
-                     ;; This is not a `frame' split, so we ignore the
-                     ;; other frames.
-                     (delete-other-windows)
-                   ;; This is a `frame' split, so we delete all windows
-                   ;; on all frames.
-                   (gnus-delete-windows-in-gnusey-frames))
-               ;; Just remove some windows.
-               (gnus-remove-some-windows)
-               (switch-to-buffer nntp-server-buffer))
-           (select-frame frame)))
-
-       (switch-to-buffer nntp-server-buffer)
-       (let (gnus-window-frame-focus)
-         (gnus-configure-frame split (get-buffer-window (current-buffer)))
-         (when gnus-window-frame-focus
-           (select-frame (window-frame gnus-window-frame-focus))))))))
+  (setq gnus-current-window-configuration setting)
+  (setq force (or force gnus-always-force-window-configuration))
+  (setq setting (gnus-windows-old-to-new setting))
+  (let ((split (if (symbolp setting)
+                  (cadr (assq setting gnus-buffer-configuration))
+                setting))
+       all-visible)
+
+    (setq gnus-frame-split-p nil)
+
+    (unless split
+      (error "No such setting: %s" setting))
+
+    (if (and (setq all-visible (gnus-all-windows-visible-p split))
+            (not force))
+       ;; All the windows mentioned are already visible, so we just
+       ;; put point in the assigned buffer, and do not touch the
+       ;; winconf.
+       (select-window all-visible)
+
+      ;; Either remove all windows or just remove all Gnus windows.
+      (let ((frame (selected-frame)))
+       (unwind-protect
+           (if gnus-use-full-window
+               ;; We want to remove all other windows.
+               (if (not gnus-frame-split-p)
+                   ;; This is not a `frame' split, so we ignore the
+                   ;; other frames.
+                   (delete-other-windows)
+                 ;; This is a `frame' split, so we delete all windows
+                 ;; on all frames.
+                 (gnus-delete-windows-in-gnusey-frames))
+             ;; Just remove some windows.
+             (gnus-remove-some-windows)
+             (switch-to-buffer nntp-server-buffer))
+         (select-frame frame)))
+
+      (switch-to-buffer nntp-server-buffer)
+      (let (gnus-window-frame-focus)
+       (gnus-configure-frame split (get-buffer-window (current-buffer)))
+       (when gnus-window-frame-focus
+         (select-frame (window-frame gnus-window-frame-focus)))))))
 
 (defun gnus-delete-windows-in-gnusey-frames ()
   "Do a `delete-other-windows' in all frames that have Gnus windows."
@@ -502,7 +500,7 @@ should have point."
        (setq buffer (cond ((stringp type) type)
                           (t (cdr (assq type gnus-window-to-buffer)))))
        (unless buffer
-         (error "Invalid buffer type: %s" type))
+         (error "Illegal buffer type: %s" type))
        (if (and (setq buf (get-buffer (gnus-window-to-buffer-helper buffer)))
                 (setq win (get-buffer-window buf t)))
            (if (memq 'point split)
index 5da0611..41d5116 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus-xmas.el --- Gnus functions for XEmacs
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -28,7 +28,6 @@
 (require 'text-props)
 (defvar menu-bar-mode (featurep 'menubar))
 (require 'messagexmas)
-(require 'wid-edit)
 
 (defgroup gnus-xmas nil
   "XEmacsoid support for Gnus"
@@ -42,8 +41,6 @@ automatically."
                 directory)
   :group 'gnus-xmas)
 
-;;(format "%02x%02x%02x" 114 66 20) "724214"
-
 (defvar gnus-xmas-logo-color-alist
   '((flame "#cc3300" "#ff2200")
     (pine "#c0cc93" "#f8ffb8")
@@ -55,18 +52,16 @@ automatically."
     (grape "#b264cc" "#cf7df")
     (labia "#cc64c2" "#fd7dff")
     (berry "#cc6485" "#ff7db5")
-    (dino "#724214" "#1e3f03")
     (neutral "#b4b4b4" "#878787")
     (september "#bf9900" "#ffcc00"))
   "Color alist used for the Gnus logo.")
 
-(defcustom gnus-xmas-logo-color-style 'dino
+(defcustom gnus-xmas-logo-color-style 'moss
   "*Color styles used for the Gnus logo."
   :type '(choice (const flame) (const pine) (const moss)
                 (const irish) (const sky) (const tin)
                 (const velvet) (const grape) (const labia)
-                (const berry) (const neutral) (const september)
-                (const dino))
+                (const berry) (const neutral) (const september))
   :group 'gnus-xmas)
 
 (defvar gnus-xmas-logo-colors
@@ -77,7 +72,7 @@ automatically."
   (if (or (featurep 'xface)
          (featurep 'xpm))
       'gnus-xmas-article-display-xface
-    "{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | ee -")
+    "{ echo '/* Width=48, Height=48 */'; uncompface; } | icontopbm | xv -quit -")
   "*String or function to be executed to display an X-Face header.
 If it is a string, the command will be executed in a sub-shell
 asynchronously.         The compressed face will be piped to this command."
@@ -177,13 +172,11 @@ displayed, no centering will be performed."
     (sit-for 0))
   (when gnus-auto-center-summary
     (let* ((height (if (fboundp 'window-displayed-height)
-                      (1- (window-displayed-height))
+                      (window-displayed-height)
                     (- (window-height) 2)))
           (top (cond ((< height 4) 0)
                      ((< height 7) 1)
-                     (t (if (numberp gnus-auto-center-summary)
-                            gnus-auto-center-summary
-                          2))))
+                     (t 2)))
           (bottom (save-excursion (goto-char (point-max))
                                   (forward-line (- height))
                                   (point)))
@@ -248,7 +241,6 @@ call it with the value of the `gnus-data' text property."
   (let* ((pos (event-closest-point event))
         (data (get-text-property pos 'gnus-data))
         (fun (get-text-property pos 'gnus-callback)))
-    (goto-char pos)
     (when fun
       (funcall fun data))))
 
@@ -261,6 +253,21 @@ call it with the value of the `gnus-data' text property."
                 (delete-extent extent)
                 nil)))
 
+;; Fixed by Christopher Davis <ckd@loiosh.kei.com>.
+(defun gnus-xmas-article-add-button (from to fun &optional data)
+  "Create a button between FROM and TO with callback FUN and data DATA."
+  (when gnus-article-button-face
+    (gnus-overlay-put (gnus-make-overlay from to)
+                     'face gnus-article-button-face))
+  (gnus-add-text-properties
+   from to
+   (nconc
+    (and gnus-article-mouse-face
+        (list 'mouse-face gnus-article-mouse-face))
+    (list 'gnus-callback fun)
+    (and data (list 'gnus-data data))
+    (list 'highlight t))))
+
 (defun gnus-xmas-window-top-edge (&optional window)
   (nth 1 (window-pixel-edges window)))
 
@@ -387,10 +394,26 @@ call it with the value of the `gnus-data' text property."
               (event-to-character event))
          event)))
 
+(defun gnus-xmas-seconds-since-epoch (date)
+  "Return a floating point number that says how many seconds have lapsed between Jan 1 12:00:00 1970 and DATE."
+  (let* ((tdate (mapcar (lambda (ti) (and ti (string-to-int ti)))
+                       (timezone-parse-date date)))
+        (ttime (mapcar (lambda (ti) (and ti (string-to-int ti)))
+                       (timezone-parse-time
+                        (aref (timezone-parse-date date) 3))))
+        (edate (mapcar (lambda (ti) (and ti (string-to-int ti)))
+                       (timezone-parse-date "Jan 1 12:00:00 1970")))
+        (tday (- (timezone-absolute-from-gregorian
+                  (nth 1 tdate) (nth 2 tdate) (nth 0 tdate))
+                 (timezone-absolute-from-gregorian
+                  (nth 1 edate) (nth 2 edate) (nth 0 edate)))))
+    (+ (nth 2 ttime)
+       (* (nth 1 ttime) 60)
+       (* (float (nth 0 ttime)) 60 60)
+       (* (float tday) 60 60 24))))
+
 (defun gnus-xmas-define ()
   (setq gnus-mouse-2 [button2])
-  (setq gnus-mouse-3 [button3])
-  (setq gnus-widget-button-keymap widget-button-keymap)
 
   (unless (memq 'underline (face-list))
     (and (fboundp 'make-face)
@@ -433,6 +456,16 @@ call it with the value of the `gnus-data' text property."
 
   (defvar gnus-mouse-face-prop 'highlight)
 
+  (unless (fboundp 'encode-time)
+    (defun encode-time (sec minute hour day month year &optional zone)
+      (let ((seconds
+            (gnus-xmas-seconds-since-epoch
+             (timezone-make-arpa-date
+              year month day (timezone-make-time-string hour minute sec)
+              zone))))
+       (list (floor (/ seconds (expt 2 16)))
+             (round (mod seconds (expt 2 16)))))))
+
   (defun gnus-byte-code (func)
     "Return a form that can be `eval'ed based on FUNC."
     (let ((fval (indirect-function func)))
@@ -445,7 +478,30 @@ call it with the value of the `gnus-data' text property."
            'x-color-values
          (lambda (color)
            (color-instance-rgb-components
-            (make-color-instance color))))))
+            (make-color-instance color)))))
+
+  (when (featurep 'mule)
+    (defun gnus-tilde-pad-form (el pad-width)
+      "Return a form that pads EL to PAD-WIDTH."
+      (let ((pad (abs pad-width)))
+       (if (symbolp el)
+           (if (< pad-width 0)
+               `(let ((val (format "%s" ,el)))
+                  (concat val (make-string
+                               (max 0 (- ,pad (string-width val))) ?\ )))
+             `(let ((val (format "%s" ,el)))
+                (concat (make-string
+                         (max 0 (- ,pad (string-width val))) ?\ )
+                        val)))
+         (if (< pad-width 0)
+             `(let ((val (eval ,el)))
+                (concat val (make-string
+                             (max 0 (- ,pad (string-width val))) ?\ )))
+           `(let ((val (eval ,el)))
+              (concat (make-string
+                       (max 0 (- ,pad (string-width val))) ?\ )
+                      val))))))
+    ))
 
 (defun gnus-xmas-redefine ()
   "Redefine lots of Gnus functions for XEmacs."
@@ -454,6 +510,7 @@ call it with the value of the `gnus-data' text property."
   (fset 'gnus-summary-recenter 'gnus-xmas-summary-recenter)
   (fset 'gnus-extent-start-open 'gnus-xmas-extent-start-open)
   (fset 'gnus-article-push-button 'gnus-xmas-article-push-button)
+  (fset 'gnus-article-add-button 'gnus-xmas-article-add-button)
   (fset 'gnus-window-top-edge 'gnus-xmas-window-top-edge)
   (fset 'gnus-read-event-char 'gnus-xmas-read-event-char)
   (fset 'gnus-group-startup-message 'gnus-xmas-group-startup-message)
@@ -466,8 +523,6 @@ call it with the value of the `gnus-data' text property."
        'gnus-xmas-mode-line-buffer-identification)
   (fset 'gnus-key-press-event-p 'key-press-event-p)
   (fset 'gnus-region-active-p 'region-active-p)
-  (fset 'gnus-annotation-in-region-p 'gnus-xmas-annotation-in-region-p)
-  (fset 'gnus-mime-button-menu 'gnus-xmas-mime-button-menu)
 
   (add-hook 'gnus-group-mode-hook 'gnus-xmas-group-menu-add)
   (add-hook 'gnus-summary-mode-hook 'gnus-xmas-summary-menu-add)
@@ -492,8 +547,91 @@ call it with the value of the `gnus-data' text property."
   (add-hook 'gnus-draft-mode-hook 'gnus-xmas-draft-menu-add)
   (add-hook 'gnus-summary-mode-hook
            'gnus-xmas-switch-horizontal-scrollbar-off)
-  (add-hook 'gnus-tree-mode-hook 'gnus-xmas-switch-horizontal-scrollbar-off))
-
+  (add-hook 'gnus-tree-mode-hook 'gnus-xmas-switch-horizontal-scrollbar-off)
+
+  (when (featurep 'mule)
+    (defun gnus-truncate-string (str end-column &optional start-column padding)
+      "Truncate string STR to end at column END-COLUMN.
+The optional 2nd arg START-COLUMN, if non-nil, specifies
+the starting column; that means to return the characters occupying
+columns START-COLUMN ... END-COLUMN of STR.
+
+The optional 3rd arg PADDING, if non-nil, specifies a padding character
+to add at the end of the result if STR doesn't reach column END-COLUMN,
+or if END-COLUMN comes in the middle of a character in STR.
+PADDING is also added at the beginning of the result
+if column START-COLUMN appears in the middle of a character in STR.
+
+If PADDING is nil, no padding is added in these cases, so
+the resulting string may be narrower than END-COLUMN.
+\[Emacs 20.3 emulating function]"
+      (or start-column
+         (setq start-column 0))
+      (let ((len (length str))
+           (idx 0)
+           (column 0)
+           (head-padding "") (tail-padding "")
+           ch last-column last-idx from-idx)
+       (condition-case nil
+           (while (< column start-column)
+             (setq ch (aref str idx)
+                   column (+ column (char-width ch))
+                   idx (1+ idx)))
+         (args-out-of-range (setq idx len)))
+       (if (< column start-column)
+           (if padding (make-string end-column padding) "")
+         (if (and padding (> column start-column))
+             (setq head-padding
+                   (make-string (- column start-column) padding)))
+         (setq from-idx idx)
+         (if (< end-column column)
+             (setq idx from-idx)
+           (condition-case nil
+               (while (< column end-column)
+                 (setq last-column column
+                       last-idx idx
+                       ch (aref str idx)
+                       column (+ column (char-width ch))
+                       idx (1+ idx)))
+             (args-out-of-range (setq idx len)))
+           (if (> column end-column)
+               (setq column last-column idx last-idx))
+           (if (and padding (< column end-column))
+               (setq tail-padding
+                     (make-string (- end-column column) padding))))
+         (setq str (substring str from-idx idx))
+         (if padding
+             (concat head-padding str tail-padding)
+           str))))
+
+    (defun gnus-tilde-max-form (el max-width)
+      "Return a form that limits EL to MAX-WIDTH."
+      (let ((max (abs max-width)))
+       (if (symbolp el)
+           (if (< max-width 0)
+               `(let ((width (string-width ,el)))
+                  (gnus-truncate-string ,el width (- width ,max)))
+             `(gnus-truncate-string ,el ,max))
+         (if (< max-width 0)
+             `(let* ((val (eval ,el))
+                     (width (string-width val)))
+                (gnus-truncate-string val width (- width ,max)))
+           `(let ((val (eval ,el)))
+              (gnus-truncate-string val ,max))))))
+
+    (defun gnus-tilde-cut-form (el cut-width)
+      "Return a form that cuts CUT-WIDTH off of EL."
+      (let ((cut (abs cut-width)))
+       (if (symbolp el)
+           (if (< cut-width 0)
+               `(gnus-truncate-string ,el (- (string-width ,el) ,cut))
+             `(gnus-truncate-string ,el (string-width ,el) ,cut))
+         (if (< cut-width 0)
+             `(let ((val (eval ,el)))
+                (gnus-truncate-string val (- (string-width val) ,cut)))
+           `(let ((val (eval ,el)))
+              (gnus-truncate-string val (string-width val) ,cut))))))
+    ))
 
 ;;; XEmacs logo and toolbar.
 
@@ -577,7 +715,7 @@ call it with the value of the `gnus-data' text property."
                                'default-toolbar
                              nil)
   "*If nil, do not use a toolbar.
-If it is non-nil, it must be a toolbar.  The five valid values are
+If it is non-nil, it must be a toolbar.  The five legal values are
 `default-toolbar', `top-toolbar', `bottom-toolbar',
 `right-toolbar', and `left-toolbar'."
   :type '(choice (const default-toolbar)
@@ -597,7 +735,8 @@ If it is non-nil, it must be a toolbar.  The five valid values are
     [gnus-group-unsubscribe gnus-group-unsubscribe t "Unsubscribe group"]
     [gnus-group-subscribe gnus-group-subscribe t "Subscribe group"]
     [gnus-group-kill-group gnus-group-kill-group t "Kill group"]
-    [gnus-group-exit gnus-group-exit t "Exit Gnus"])
+    [gnus-group-exit gnus-group-exit t "Exit Gnus"]
+    )
   "The group buffer toolbar.")
 
 (defvar gnus-summary-toolbar
@@ -701,25 +840,24 @@ XEmacs compatibility workaround."
   "Display any XFace headers in the current article."
   (save-excursion
     (let ((xface-glyph
-          (cond
-           ((featurep 'xface)
-            (make-glyph (vector 'xface :data
-                                (concat "X-Face: "
-                                        (buffer-substring beg end)))))
-           ((featurep 'xpm)
-            (let ((cur (current-buffer)))
-              (save-excursion
-                (gnus-set-work-buffer)
-                (insert (format "%s" (buffer-substring beg end cur)))
-                (gnus-xmas-call-region "uncompface")
-                (goto-char (point-min))
-                (insert "/* Width=48, Height=48 */\n")
-                (gnus-xmas-call-region "icontopbm")
-                (gnus-xmas-call-region "ppmtoxpm")
-                (make-glyph
-                 (vector 'xpm :data (buffer-string))))))
-           (t
-            (make-glyph [nothing]))))
+          (cond ((featurep 'xface)
+                 (make-glyph (vector 'xface :data
+                                     (concat "X-Face: "
+                                             (buffer-substring beg end)))))
+                ((featurep 'xpm)
+                 (let ((cur (current-buffer)))
+                   (save-excursion
+                     (gnus-set-work-buffer)
+                     (insert (format "%s" (buffer-substring beg end cur)))
+                     (gnus-xmas-call-region "uncompface")
+                     (goto-char (point-min))
+                     (insert "/* Width=48, Height=48 */\n")
+                     (gnus-xmas-call-region "icontopbm")
+                     (gnus-xmas-call-region "ppmtoxpm")
+                     (make-glyph
+                      (vector 'xpm :data (buffer-string))))))
+                (t
+                 (make-glyph [nothing]))))
          (ext (make-extent (progn
                              (goto-char (point-min))
                              (re-search-forward "^From:" nil t)
@@ -729,12 +867,26 @@ XEmacs compatibility workaround."
       (set-extent-begin-glyph ext xface-glyph)
       (set-extent-property ext 'duplicable t))))
 
+;;(defvar gnus-xmas-pointer-glyph
+;;  (progn
+;;    (setq gnus-xmas-glyph-directory (message-xmas-find-glyph-directory
+;;                                     "gnus"))
+;;    (let ((file-xpm (expand-file-name "gnus-pointer.xpm"
+;;                                   gnus-xmas-glyph-directory))
+;;       (file-xbm (expand-file-name "gnus-pointer.xbm"
+;;                                   gnus-xmas-glyph-directory)))
+;;      (make-pointer-glyph
+;;       (list (vector 'xpm ':file file-xpm)
+;;          (vector 'xbm ':file file-xbm))))))
+
 (defvar gnus-xmas-modeline-left-extent
   (let ((ext (copy-extent modeline-buffer-id-left-extent)))
+;    (set-extent-property ext 'pointer gnus-xmas-pointer-glyph)
     ext))
 
 (defvar gnus-xmas-modeline-right-extent
   (let ((ext (copy-extent modeline-buffer-id-right-extent)))
+;    (set-extent-property ext 'pointer gnus-xmas-pointer-glyph)
     ext))
 
 (defvar gnus-xmas-modeline-glyph
@@ -751,7 +903,7 @@ XEmacs compatibility workaround."
                          `[xpm :file ,file-xpm])
                         ((featurep 'xbm)
                          ;; Then a not-so-nifty XBM
-                         `[xbm :file ,file-xbm])
+                         [xbm :file ,file-xbm])
                         ;; Then the simple string
                         (t [string :data "Gnus:"])))))
       (set-glyph-face glyph 'modeline-buffer-id)
@@ -780,23 +932,6 @@ XEmacs compatibility workaround."
   (when (eq (device-type) 'x)
     (gnus-splash)))
 
-(defun gnus-xmas-annotation-in-region-p (b e)
-  (or (map-extents (lambda (e u) t) nil b e nil nil 'mm t)
-      (if (= b e)
-         (eq (cadr (memq 'gnus-undeletable (text-properties-at b))) t)
-       (text-property-any b e 'gnus-undeletable t))))
-
-(defun gnus-xmas-mime-button-menu (event)
-  "Construct a context-sensitive menu of MIME commands."
-  (interactive "e")
-  (let ((response (get-popup-menu-response
-                  `("MIME Part"
-                    ,@(mapcar (lambda (c) `[,(caddr c) ,(car c) t])
-                              gnus-mime-button-commands)))))
-    (set-buffer (event-buffer event))
-    (goto-char (event-point event))
-    (funcall (event-function response) (event-object response))))
-
 (provide 'gnus-xmas)
 
 ;;; gnus-xmas.el ends here
index 6aa4bf9..2157444 100644 (file)
@@ -1,5 +1,5 @@
 ;;; gnus.el --- a newsreader for GNU Emacs
-;; Copyright (C) 1987-1990,1993-1999 Free Software Foundation, Inc.
+;; Copyright (C) 1987,88,89,90,93,94,95,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -29,7 +29,6 @@
 (eval '(run-hooks 'gnus-load-hook))
 
 (eval-when-compile (require 'cl))
-(require 'mm-util)
 
 (require 'custom)
 (eval-and-compile
   :group 'news
   :group 'mail)
 
-(defgroup gnus-charset nil
-  "Group character set issues."
-  :link '(custom-manual "(gnus)Charsets")
-  :group 'gnus)
-
 (defgroup gnus-cache nil
   "Cache interface."
   :group 'gnus)
@@ -251,20 +245,21 @@ is restarted, and sometimes reloaded."
   :link '(custom-manual "(gnus)Various Various")
   :group 'gnus)
 
-(defgroup gnus-mime nil
-  "Variables for controlling the Gnus MIME interface."
-  :group 'gnus)
-
 (defgroup gnus-exit nil
   "Exiting gnus."
   :link '(custom-manual "(gnus)Exiting Gnus")
   :group 'gnus)
 
-(defconst gnus-version-number "0.93"
-  "Version number for this version of Gnus.")
+(defconst gnus-product-name "Semi-gnus"
+  "Product name of this version of gnus.")
+
+(defconst gnus-version-number "6.9.2"
+  "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 "%s %s (based on Gnus 5.6.45; for SEMI 1.11, FLIM 1.12)"
+          gnus-product-name 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.
@@ -278,6 +273,8 @@ be set in `.emacs' instead."
   :group 'gnus-start
   :type 'boolean)
 
+;;; Kludges to help the transition from the old `custom.el'.
+
 (unless (featurep 'gnus-xmas)
   (defalias 'gnus-make-overlay 'make-overlay)
   (defalias 'gnus-delete-overlay 'delete-overlay)
@@ -297,8 +294,7 @@ be set in `.emacs' instead."
   (defalias 'gnus-characterp 'numberp)
   (defalias 'gnus-deactivate-mark 'deactivate-mark)
   (defalias 'gnus-window-edges 'window-edges)
-  (defalias 'gnus-key-press-event-p 'numberp)
-  (defalias 'gnus-decode-rfc1522 'ignore))
+  (defalias 'gnus-key-press-event-p 'numberp))
 
 ;; We define these group faces here to avoid the display
 ;; update forced when creating new faces.
@@ -369,72 +365,6 @@ be set in `.emacs' instead."
      ()))
   "Level 3 empty newsgroup face.")
 
-(defface gnus-group-news-4-face
-  '((((class color)
-      (background dark))
-     (:bold t))
-    (((class color)
-      (background light))
-     (:bold t))
-    (t
-     ()))
-  "Level 4 newsgroup face.")
-
-(defface gnus-group-news-4-empty-face
-  '((((class color)
-      (background dark))
-     ())
-    (((class color)
-      (background light))
-     ())
-    (t
-     ()))
-  "Level 4 empty newsgroup face.")
-
-(defface gnus-group-news-5-face
-  '((((class color)
-      (background dark))
-     (:bold t))
-    (((class color)
-      (background light))
-     (:bold t))
-    (t
-     ()))
-  "Level 5 newsgroup face.")
-
-(defface gnus-group-news-5-empty-face
-  '((((class color)
-      (background dark))
-     ())
-    (((class color)
-      (background light))
-     ())
-    (t
-     ()))
-  "Level 5 empty newsgroup face.")
-
-(defface gnus-group-news-6-face
-  '((((class color)
-      (background dark))
-     (:bold t))
-    (((class color)
-      (background light))
-     (:bold t))
-    (t
-     ()))
-  "Level 6 newsgroup face.")
-
-(defface gnus-group-news-6-empty-face
-  '((((class color)
-      (background dark))
-     ())
-    (((class color)
-      (background light))
-     ())
-    (t
-     ()))
-  "Level 6 empty newsgroup face.")
-
 (defface gnus-group-news-low-face
   '((((class color)
       (background dark))
@@ -712,13 +642,13 @@ be set in `.emacs' instead."
 (defface gnus-splash-face
   '((((class color)
       (background dark))
-     (:foreground "Brown"))
+     (:foreground "ForestGreen"))
     (((class color)
       (background light))
-     (:foreground "Brown"))
+     (:foreground "ForestGreen"))
     (t
      ()))
-  "Face of the splash screen.")
+  "Level 1 newsgroup face.")
 
 (defun gnus-splash ()
   (save-excursion
@@ -848,7 +778,7 @@ used to 899, you would say something along these lines:
   :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.
@@ -857,19 +787,21 @@ used to 899, you would say something along these lines:
       (and (file-readable-p gnus-nntpserver-file)
           (save-excursion
             (set-buffer (gnus-get-buffer-create " *gnus nntp*"))
+            (buffer-disable-undo (current-buffer))
             (insert-file-contents gnus-nntpserver-file)
             (let ((name (buffer-string)))
               (prog1
-                  (if (string-match "\\'[ \t\n]*$" name)
+                  (if (string-match "^[ \t\n]*$" name)
                       nil
                     name)
                 (kill-buffer (current-buffer))))))))
 
 (defcustom gnus-select-method
-  (ignore-errors
+  (condition-case nil
     (nconc
-     (list 'nntp (or (ignore-errors
-                      (gnus-getenv-nntpserver))
+     (list 'nntp (or (condition-case nil
+                        (gnus-getenv-nntpserver)
+                      (error nil))
                     (when (and gnus-default-nntp-server
                                (not (string= gnus-default-nntp-server "")))
                       gnus-default-nntp-server)
@@ -877,7 +809,8 @@ used to 899, you would say something along these lines:
      (if (or (null gnus-nntp-service)
             (equal gnus-nntp-service "nntp"))
         nil
-       (list gnus-nntp-service))))
+       (list gnus-nntp-service)))
+    (error nil))
   "*Default method for selecting a newsgroup.
 This variable should be a list, where the first element is how the
 news is to be fetched, the second is the address.
@@ -938,7 +871,6 @@ that case, just return a fully prefixed name of the group --
 \"nnml+private:mail.misc\", for instance."
   :group 'gnus-message
   :type '(choice (const :tag "none" nil)
-                function
                 sexp
                 string))
 
@@ -1154,13 +1086,18 @@ articles.  This is not a good idea."
   :group 'gnus-meta
   :type 'boolean)
 
+(defcustom gnus-use-demon nil
+  "If non-nil, Gnus might use some demons."
+  :group 'gnus-meta
+  :type 'boolean)
+
 (defcustom gnus-use-scoring t
   "*If non-nil, enable scoring."
   :group 'gnus-meta
   :type 'boolean)
 
 (defcustom gnus-use-picons nil
-  "*If non-nil, display picons in a frame of their own."
+  "*If non-nil, display picons."
   :group 'gnus-meta
   :type 'boolean)
 
@@ -1204,6 +1141,7 @@ slower."
   :group 'gnus-summary-format
   :type '(radio (function-item gnus-extract-address-components)
                (function-item mail-extract-address-components)
+               (function-item std11-extract-address-components)
                (function :tag "Other")))
 
 (defcustom gnus-carpal nil
@@ -1349,7 +1287,7 @@ following hook:
 (defcustom gnus-group-change-level-function nil
   "Function run when a group level is changed.
 It is called with three parameters -- GROUP, LEVEL and OLDLEVEL."
-  :group 'gnus-group-levels
+  :group 'gnus-group-level
   :type 'function)
 
 ;;; Face thingies.
@@ -1411,6 +1349,59 @@ face."
   :group 'gnus-visual
   :type 'face)
 
+(defcustom gnus-article-display-hook
+  (if (and (string-match "XEmacs" emacs-version)
+          (featurep 'xface))
+      '(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-hide-headers-if-wanted
+      gnus-article-hide-boring-headers
+      gnus-article-treat-overstrike
+      gnus-article-maybe-highlight))
+  "*Controls how the article buffer will look.
+
+If you leave the list empty, the article will appear exactly as it is
+stored on the disk.  The list entries will hide or highlight various
+parts of the article, making it easier to find the information you
+want."
+  :group 'gnus-article-highlight
+  :group 'gnus-visual
+  :type 'hook
+  :options '(gnus-article-add-buttons
+            gnus-article-add-buttons-to-head
+            gnus-article-emphasize
+            gnus-article-fill-cited-article
+            gnus-article-remove-cr
+            gnus-summary-stop-page-breaking
+            ;; gnus-summary-caesar-message
+            ;; gnus-summary-verbose-headers
+            gnus-summary-toggle-mime
+            gnus-article-hide
+            gnus-article-hide-headers
+            gnus-article-hide-boring-headers
+            gnus-article-hide-signature
+            gnus-article-hide-citation
+            gnus-article-hide-pgp
+            gnus-article-hide-pem
+            gnus-article-highlight
+            gnus-article-highlight-headers
+            gnus-article-highlight-citation
+            gnus-article-highlight-signature
+            gnus-article-date-ut
+            gnus-article-date-local
+            gnus-article-date-lapsed
+            gnus-article-date-original
+            gnus-article-remove-trailing-blank-lines
+            gnus-article-strip-leading-blank-lines
+            gnus-article-strip-multiple-blank-lines
+            gnus-article-strip-blank-lines
+            gnus-article-treat-overstrike
+            gnus-article-display-x-face
+            gnus-smiley-display))
+
 (defcustom gnus-article-save-directory gnus-directory
   "*Name of the directory articles will be saved in (default \"~/News\")."
   :group 'gnus-article-saving
@@ -1419,27 +1410,9 @@ face."
 (defvar gnus-plugged t
   "Whether Gnus is plugged or not.")
 
-(defcustom gnus-default-charset 'iso-8859-1
-  "Default charset assumed to be used when viewing non-ASCII characters.
-This variable is overridden on a group-to-group basis by the
-gnus-group-charset-alist variable and is only used on groups not
-covered by that variable."
-  :type 'symbol
-  :group 'gnus-charset)
-
-(defcustom gnus-default-posting-charset nil
-  "Default charset assumed to be used when posting non-ASCII characters.
-This variable is overridden on a group-to-group basis by the
-gnus-group-posting-charset-alist variable and is only used on groups not
-covered by that variable.
-If nil, no default charset is assumed when posting."
-  :type 'symbol
-  :group 'gnus-charset)
-
 \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)
@@ -1487,7 +1460,7 @@ If nil, no default charset is assumed when posting."
       ,(nnheader-concat gnus-cache-directory "active"))))
   "List of predefined (convenience) servers.")
 
-(defvar gnus-topic-indentation "");; Obsolete variable.
+(defvar gnus-topic-indentation "") ;; Obsolete variable.
 
 (defconst gnus-article-mark-lists
   '((marked . tick) (replied . reply)
@@ -1511,13 +1484,30 @@ If nil, no default charset is assumed when posting."
   "bugs@gnus.org (The Gnus Bugfixing Girls + Boys)"
   "The mail address of the Gnus maintainers.")
 
+(defconst semi-gnus-developers
+  "Semi-gnus Developers:
+ semi-gnus-en@meadow.scphys.kyoto-u.ac.jp (In English),\
+ semi-gnus-ja@meadow.scphys.kyoto-u.ac.jp (In Japanese);"
+  "The mail address of the Semi-gnus developers.")
+
+(defcustom gnus-info-filename nil
+  "*Controls language of gnus Info.
+If nil and current-language-environment is Japanese, go to gnus-ja.
+Otherwise go to corresponding Info.
+This variable can be nil, gnus or gnus-ja."
+  :group 'gnus-start
+  :type '(choice (const nil)
+                (const :tag "English" gnus)
+                (const :tag "Japanese" gnus-ja)))
+
 (defvar gnus-info-nodes
-  '((gnus-group-mode "(gnus)The Group Buffer")
-    (gnus-summary-mode "(gnus)The Summary Buffer")
-    (gnus-article-mode "(gnus)The Article Buffer")
-    (gnus-server-mode "(gnus)The Server Buffer")
-    (gnus-browse-mode "(gnus)Browse Foreign Server")
-    (gnus-tree-mode "(gnus)Tree Display"))
+  '((gnus-group-mode "The Group Buffer")
+    (gnus-summary-mode "The Summary Buffer")
+    (gnus-article-mode "The Article Buffer")
+    (mime/viewer-mode "The Article Buffer")
+    (gnus-server-mode "The Server Buffer")
+    (gnus-browse-mode "Browse Foreign Server")
+    (gnus-tree-mode "Tree Display"))
   "Alist of major modes and related Info nodes.")
 
 (defvar gnus-group-buffer "*Group*")
@@ -1598,18 +1588,19 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
        (if (eq (nth 1 package) ':interactive)
            (cdddr package)
          (cdr package)))))
-   '(("metamail" metamail-buffer)
-     ("info" Info-goto-node)
+   '(("info" Info-goto-node)
+     ("hexl" hexl-hex-string-to-integer)
      ("pp" pp pp-to-string pp-eval-expression)
-     ("qp" quoted-printable-decode-region quoted-printable-decode-string)
      ("ps-print" ps-print-preprint)
      ("mail-extr" mail-extract-address-components)
      ("browse-url" browse-url)
      ("message" :interactive t
       message-send-and-exit message-yank-original)
-     ("nnmail" nnmail-split-fancy nnmail-article-group)
+     ("nnmail" nnmail-split-fancy nnmail-article-group nnmail-date-to-time)
      ("nnvirtual" nnvirtual-catchup-group nnvirtual-convert-headers)
-     ("rmailout" rmail-output rmail-output-to-rmail-file)
+     ("timezone" timezone-make-date-arpa-standard timezone-fix-time
+      timezone-make-sortable-date timezone-make-time-string)
+     ("rmailout" rmail-output)
      ("rmail" rmail-insert-rmail-file-header rmail-count-new-messages
       rmail-show-message rmail-summary-exists
       rmail-select-summary rmail-update-summary)
@@ -1642,7 +1633,7 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
       gnus-article-hide-citation-in-followups)
      ("gnus-kill" gnus-kill gnus-apply-kill-file-internal
       gnus-kill-file-edit-file gnus-kill-file-raise-followups-to-author
-      gnus-execute gnus-expunge gnus-batch-kill gnus-batch-score)
+      gnus-execute gnus-expunge)
      ("gnus-cache" gnus-cache-possibly-enter-article gnus-cache-save-buffers
       gnus-cache-possibly-remove-articles gnus-cache-request-article
       gnus-cache-retrieve-headers gnus-cache-possibly-alter-active
@@ -1680,8 +1671,9 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
       gnus-uu-decode-uu-and-save-view gnus-uu-decode-unshar-view
       gnus-uu-decode-unshar-and-save-view gnus-uu-decode-save-view
       gnus-uu-decode-binhex-view gnus-uu-unmark-thread
-      gnus-uu-mark-over gnus-uu-post-news)
-     ("gnus-uu" gnus-uu-delete-work-dir gnus-uu-unmark-thread)
+      gnus-uu-mark-over gnus-uu-post-news gnus-uu-post-news)
+     ("gnus-uu" gnus-uu-delete-work-dir gnus-quote-arg-for-sh-or-csh
+      gnus-uu-unmark-thread)
      ("gnus-msg" (gnus-summary-send-map keymap)
       gnus-article-mail gnus-copy-article-buffer gnus-extended-version)
      ("gnus-msg" :interactive t
@@ -1699,7 +1691,6 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
      ("gnus-picon" :interactive t gnus-article-display-picons
       gnus-group-display-picons gnus-picons-article-display-x-face
       gnus-picons-display-x-face)
-     ("gnus-picon" gnus-picons-buffer-name)
      ("gnus-gl" bbb-login bbb-logout bbb-grouplens-group-p
       gnus-grouplens-mode)
      ("smiley" :interactive t gnus-smiley-display)
@@ -1715,7 +1706,8 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
       gnus-group-set-mode-line gnus-group-set-info gnus-group-save-newsrc
       gnus-group-setup-buffer gnus-group-get-new-news
       gnus-group-make-help-group gnus-group-update-group
-      gnus-group-iterate gnus-group-group-name)
+      gnus-clear-inboxes-moved gnus-group-iterate
+      gnus-group-group-name)
      ("gnus-bcklg" gnus-backlog-request-article gnus-backlog-enter-article
       gnus-backlog-remove-article)
      ("gnus-art" gnus-article-read-summary-keys gnus-article-save
@@ -1723,21 +1715,20 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
       gnus-article-next-page gnus-article-prev-page
       gnus-request-article-this-buffer gnus-article-mode
       gnus-article-setup-buffer gnus-narrow-to-page
-      gnus-article-delete-invisible-text gnus-treat-article)
+      gnus-article-delete-invisible-text gnus-hack-decode-rfc1522)
      ("gnus-art" :interactive t
       gnus-article-hide-headers gnus-article-hide-boring-headers
-      gnus-article-treat-overstrike 
+      gnus-article-treat-overstrike gnus-article-word-wrap
       gnus-article-remove-cr gnus-article-remove-trailing-blank-lines
-      gnus-article-display-x-face gnus-article-de-quoted-unreadable
-      gnus-article-hide-pgp
+      gnus-article-display-x-face
+      gnus-article-mime-decode-quoted-printable gnus-article-hide-pgp
       gnus-article-hide-pem gnus-article-hide-signature
       gnus-article-strip-leading-blank-lines gnus-article-date-local
       gnus-article-date-original gnus-article-date-lapsed
       gnus-article-show-all-headers
       gnus-article-edit-mode gnus-article-edit-article
-      gnus-article-edit-done gnus-article-decode-encoded-words
-      gnus-start-date-timer gnus-stop-date-timer
-      gnus-mime-view-all-parts)
+      gnus-article-edit-done gnus-decode-rfc1522 article-decode-rfc1522
+      gnus-start-date-timer gnus-stop-date-timer)
      ("gnus-int" gnus-request-type)
      ("gnus-start" gnus-newsrc-parse-options gnus-1 gnus-no-server-1
       gnus-dribble-enter gnus-read-init-file gnus-dribble-touch)
@@ -1752,6 +1743,8 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
      ("gnus-async" gnus-async-request-fetched-article gnus-async-prefetch-next
       gnus-async-prefetch-article gnus-async-prefetch-remove-group
       gnus-async-halt-prefetch)
+     ("pop3-fma" :interactive t
+      pop3-fma-set-pop3-password)
      ("gnus-agent" gnus-open-agent gnus-agent-get-function
       gnus-agent-save-groups gnus-agent-save-active gnus-agent-method-p
       gnus-agent-get-undownloaded-list gnus-agent-fetch-session
@@ -1760,9 +1753,7 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
       gnus-unplugged gnus-agentize gnus-agent-batch)
      ("gnus-vm" :interactive t gnus-summary-save-in-vm
       gnus-summary-save-article-vm)
-     ("gnus-draft" :interactive t gnus-draft-mode gnus-group-send-drafts)
-     ("gnus-mlspl" gnus-mlsplit gnus-mlsplit-fancy)
-     ("gnus-mlspl" :interactive t gnus-mlsplit-setup gnus-mlsplit-update))))
+     ("gnus-draft" :interactive t gnus-draft-mode gnus-group-send-drafts))))
 
 ;;; gnus-sum.el thingies
 
@@ -1780,7 +1771,6 @@ with some simple extensions.
 %a   Extracted name of the poster (string)
 %A   Extracted address of the poster (string)
 %F   Contents of the From: header (string)
-%f   Contents of the From: or To: headers (string)
 %x   Contents of the Xref: header (string)
 %D   Date of the article (string)
 %d   Date of the article (string) in DD-MMM format
@@ -1819,7 +1809,7 @@ such area.
 The %U (status), %R (replied) and %z (zcore) specs 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,
+it is illegal to have these specs after a variable-length spec.         Well,
 you might not be arrested, but your summary buffer will look strange,
 which is bad enough.
 
@@ -1841,7 +1831,7 @@ This restriction may disappear in later versions of Gnus."
       (define-key keymap (pop keys) 'undefined))))
 
 (defvar gnus-article-mode-map
-  (let ((keymap (make-sparse-keymap)))
+  (let ((keymap (make-keymap)))
     (gnus-suppress-keymap keymap)
     keymap))
 (defvar gnus-summary-mode-map
@@ -2036,13 +2026,14 @@ If ARG, insert string at point."
       (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")
+                   ((member alpha '("Quassia" "q")) "5.05")
+                   ((member alpha '("p")) "5.07")
+                   ((member alpha '("o")) "5.09")
+                   ((member alpha '("n")) "5.11"))
                   minor least)
         (format "%d.%02d%02d" major minor least))))))
 
@@ -2051,7 +2042,11 @@ If ARG, insert string at point."
   (interactive)
   ;; Enlarge info window if needed.
   (let (gnus-info-buffer)
-    (Info-goto-node (cadr (assq major-mode gnus-info-nodes)))
+    (Info-goto-node (format "(%s)%s" 
+                           (or gnus-info-filename
+                               (get-language-info current-language-environment 'gnus-info)
+                               "gnus")
+                           (cadr (assq major-mode gnus-info-nodes))))
     (setq gnus-info-buffer (current-buffer))
     (gnus-configure-windows 'info)))
 
@@ -2330,14 +2325,7 @@ that that variable is buffer-local to the summary buffers."
                 (not (equal server (format "%s:%s" (caaar opened)
                                            (cadaar opened)))))
        (pop opened))
-     (caar opened))
-   ;; It could be a named method, search all servers
-   (let ((servers gnus-secondary-select-methods))
-     (while (and servers
-                (not (equal server (format "%s:%s" (caar servers)
-                                           (cadar servers)))))
-       (pop servers))
-     (car servers))))
+     (caar opened))))
 
 (defmacro gnus-method-equal (ss1 ss2)
   "Say whether two servers are equal."
@@ -2350,15 +2338,6 @@ that that variable is buffer-local to the summary buffers."
                  (setq s1 (cdr s1)))
                (null s1))))))
 
-(defun gnus-methods-equal-p (m1 m2)
-  (let ((m1 (or m1 gnus-select-method))
-       (m2 (or m2 gnus-select-method)))
-    (or (equal m1 m2)
-       (and (eq (car m1) (car m2))
-            (or (not (memq 'address (assoc (symbol-name (car m1))
-                                           gnus-valid-select-methods)))
-                (equal (nth 1 m1) (nth 1 m2)))))))
-
 (defun gnus-server-equal (m1 m2)
   "Say whether two methods are equal."
   (let ((m1 (cond ((null m1) gnus-select-method)
@@ -2440,32 +2419,16 @@ You should probably use `gnus-find-method-for-group' instead."
            possible
            (list backend server))))))
 
-(defsubst gnus-native-method-p (method)
-  "Return whether METHOD is the native select method."
-  (gnus-method-equal method gnus-select-method))
-
 (defsubst gnus-secondary-method-p (method)
   "Return whether METHOD is a secondary select method."
   (let ((methods gnus-secondary-select-methods)
        (gmethod (gnus-server-get-method nil method)))
     (while (and methods
-               (not (gnus-method-equal
-                     (gnus-server-get-method nil (car methods))
-                     gmethod)))
+               (not (equal (gnus-server-get-method nil (car methods))
+                           gmethod)))
       (setq methods (cdr methods)))
     methods))
 
-(defun gnus-method-simplify (method)
-  "Return the shortest uniquely identifying string or method for METHOD."
-  (cond ((stringp method)
-        method)
-       ((gnus-native-method-p method)
-        nil)
-       ((gnus-secondary-method-p method)
-        (format "%s:%s" (nth 0 method) (nth 1 method)))
-       (t
-        method)))
-
 (defun gnus-groups-from-server (server)
   "Return a list of all groups that are fetched from SERVER."
   (let ((alist (cdr gnus-newsrc-alist))
@@ -2565,6 +2528,7 @@ If SCORE is nil, add 1 to the score of GROUP."
     (when info
       (gnus-info-set-score info (+ (gnus-info-score info) (or score 1))))))
 
+;; Function written by Stainless Steel Rat <ratinox@peorth.gweep.net>
 (defun gnus-short-group-name (group &optional levels)
   "Collapse GROUP name LEVELS.
 Select methods are stripped and any remote host name is stripped down to
@@ -2574,7 +2538,6 @@ just the host name."
         (depth 0)
         (skip 1)
         (levels (or levels
-                    gnus-group-uncollapsed-levels
                     (progn
                       (while (string-match "\\." group skip)
                         (setq skip (match-end 0)
@@ -2583,18 +2546,22 @@ just the host name."
     ;; separate foreign select method from group name and collapse.
     ;; if method contains a server, collapse to non-domain server name,
     ;; otherwise collapse to select method
-    (let* ((colon  (string-match ":" group))
-          (server (and colon (substring group 0 colon)))
-          (plus   (and server (string-match "+" server))))
-      (when server
-       (cond (plus
-              (setq foreign (substring server (+ 1 plus)
-                                       (string-match "\\." server))
-                    group (substring group (+ 1 colon))))
-              (t
-               (setq foreign server
-                     group (substring group (+ 1 colon)))))
-       (setq foreign (concat foreign ":"))))
+    (when (string-match ":" group)
+      (cond ((string-match "+" group)
+            (let* ((plus (string-match "+" group))
+                   (colon (string-match ":" group (or plus 0)))
+                   (dot (string-match "\\." group)))
+              (setq foreign (concat
+                             (substring group (+ 1 plus)
+                                        (cond ((null dot) colon)
+                                              ((< colon dot) colon)
+                                              ((< dot colon) dot)))
+                             ":")
+                    group (substring group (+ 1 colon)))))
+           (t
+            (let* ((colon (string-match ":" group)))
+              (setq foreign (concat (substring group 0 (+ 1 colon)))
+                    group (substring group (+ 1 colon)))))))
     ;; collapse group name leaving LEVELS uncollapsed elements
     (while group
       (if (and (string-match "\\." group) (> levels 0))
@@ -2682,7 +2649,6 @@ If NEWSGROUP is nil, return the global kill file name instead."
   (let ((opened gnus-opened-servers))
     (while (and method opened)
       (when (and (equal (cadr method) (cadaar opened))
-                (equal (car method) (caaar opened))
                 (not (equal method (caar opened))))
        (setq method nil))
       (pop opened))
@@ -2751,7 +2717,7 @@ If NEWSGROUP is nil, return the global kill file name instead."
 
 (defun gnus-read-group (prompt &optional default)
   "Prompt the user for a group name.
-Disallow invalid group names."
+Disallow illegal group names."
   (let ((prefix "")
        group)
     (while (not group)
@@ -2760,7 +2726,7 @@ Disallow invalid group names."
             (setq group (read-string (concat prefix prompt)
                                      (cons (or default "") 0)
                                      'gnus-group-history)))
-       (setq prefix (format "Invalid group name: \"%s\".  " group)
+       (setq prefix (format "Illegal group name: \"%s\".  " group)
              group nil)))
     group))
 
@@ -2821,6 +2787,8 @@ As opposed to `gnus', this command will not connect to the local server."
   (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 arg))
diff --git a/lisp/ietf-drums.el b/lisp/ietf-drums.el
deleted file mode 100644 (file)
index c28c942..0000000
+++ /dev/null
@@ -1,244 +0,0 @@
-;;; ietf-drums.el --- Functions for parsing RFC822bis headers
-;; Copyright (C) 1998,99 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
-       (when b
-         (push (mm-make-char 'ascii b) out))
-       (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 (char-after))
-       (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 (char-after))
-       (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 (char-after))
-       (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 (char-after))
-       (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 (char-after))
-       (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 (re-search-forward "^\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
index 920a29b..c8ee274 100644 (file)
@@ -2,6 +2,12 @@
 
 (defvar byte-compile-default-warnings)
 
+(or (featurep 'path-util)
+    (load "apel/path-util"))
+(add-path "apel")
+(add-path "flim")
+(add-path "semi")
+
 (defun maybe-fbind (args)
   (while args
     (or (fboundp (car args))
                     run-with-idle-timer mouse-minibuffer-check window-edges
                     event-click-count track-mouse read-event mouse-movement-p
                     event-end mouse-scroll-subr overlay-lists delete-overlay
-                    set-face-stipple mail-abbrevs-setup
+                    set-face-stipple mail-abbrevs-setup char-int
                     make-char-table set-char-table-range font-create-object
                     x-color-values widget-make-intangible error-message-string
                     w3-form-encode-xwfu gnus-mule-get-coding-system
-                    decode-coding-string mail-aliases-setup
-                    mm-copy-tree url-view-url w3-prepare-buffer
-                    set-buffer-multibyte
-                    find-non-ascii-charset-region char-charset
-                    mule-write-region-no-coding-system
-                    find-charset-region
-                    find-coding-systems-region get-charset-property
-                    coding-system-get w3-region
-                    w3-coding-system-for-mime-charset 
-                    rmail-summary-exists rmail-select-summary
-                    rmail-update-summary url-retrieve
-                    temp-directory babel-fetch babel-wash
-                    ))
+                    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
-                   gnus-newsgroup-charset gnus-newsgroup-emphasis-alist
                    mail-mode-hook enable-multibyte-characters
-                   adaptive-fill-first-line-regexp adaptive-fill-regexp
-                   url-current-mime-headers buffer-file-coding-system
-                   w3-image-mappings url-current-mime-type
-                   w3-meta-content-type-charset-regexp
-                   w3-meta-charset-content-type-regexp
-                   url-current-callback-func url-current-callback-data
-                   url-be-asynchronous temporary-file-directory
-                   babel-translations babel-history)))
+                   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 help-echo-owns-message
-               w3-meta-content-type-charset-regexp
-               w3-meta-charset-content-type-regexp
-               babel-translations babel-history))
-  (maybe-fbind '(color-instance-rgb-components temp-directory
-                glyph-width annotation-glyph window-pixel-width glyph-height
-                window-pixel-height
+               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
                 x-defined-colors read-color add-submenu set-font-family
                 widget-make-intangible glyphp make-glyph set-glyph-image
                 set-glyph-property event-glyph glyph-property event-point
                 device-on-window-system-p make-gui-button Info-goto-node
-                pp-to-string color-name
+                pp-to-string color-name 
                 gnus-mule-get-coding-system decode-coding-string
-                mail-aliases-setup
-                mm-copy-tree url-view-url w3-prepare-buffer
-                mule-write-region-no-coding-system char-int
-                annotationp delete-annotation make-image-specifier
-                make-annotation events-to-keys
-                w3-do-setup w3-region
-                w3-coding-system-for-mime-charset 
-                rmail-summary-exists rmail-select-summary rmail-update-summary
-                url-generic-parse-url valid-image-instantiator-format-p
-                babel-fetch babel-wash)))
+                mail-aliases-setup)))
 
 (setq load-path (cons "." load-path))
 (require 'custom)
diff --git a/lisp/mail-parse.el b/lisp/mail-parse.el
deleted file mode 100644 (file)
index d9caac1..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-;;; mail-parse.el --- Interface functions for parsing mail
-;; Copyright (C) 1998,99 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 'mail-prsvr)
-(require 'ietf-drums)
-(require 'rfc2231)
-(require 'rfc2047)
-(require 'rfc2045)
-
-(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-encode-parameter 'rfc2045-encode-string)
-
-(defalias 'mail-header-remove-comments 'ietf-drums-remove-comments)
-(defalias 'mail-header-remove-whitespace 'ietf-drums-remove-whitespace)
-(defalias 'mail-header-get-comment 'ietf-drums-get-comment)
-(defalias 'mail-header-parse-address 'ietf-drums-parse-address)
-(defalias 'mail-header-parse-addresses 'ietf-drums-parse-addresses)
-(defalias 'mail-header-parse-date 'ietf-drums-parse-date)
-(defalias 'mail-narrow-to-head 'ietf-drums-narrow-to-header)
-(defalias 'mail-quote-string 'ietf-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
diff --git a/lisp/mail-prsvr.el b/lisp/mail-prsvr.el
deleted file mode 100644 (file)
index 82187fc..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-;;; mail-prsvr.el --- Interface variables for parsing mail
-;; Copyright (C) 1999 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:
-
-(defvar mail-parse-charset nil
-  "Default charset used by low-level libraries.
-This variable should never be set.  Instead, it should be bound by
-functions that wish to call mail-parse functions and let them know
-what the desired charset is to be.")
-
-(defvar mail-parse-ignored-charsets nil
-  "Ignored charsets used by low-level libraries.
-This variable should never be set.  Instead, it should be bound by
-functions that wish to call mail-parse functions and let them know
-what the desired charsets is to be ignored.")
-
-(provide 'mail-prsvr)
-
-;;; mail-prsvr.el ends here
diff --git a/lisp/mailcap.el b/lisp/mailcap.el
deleted file mode 100644 (file)
index 93b50b1..0000000
+++ /dev/null
@@ -1,877 +0,0 @@
-;;; mailcap.el --- Functions for displaying MIME parts
-;; Copyright (C) 1998,99 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)
-      (non-viewer . t)
-      (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)
-      (non-viewer . t)
-      (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)
-      (non-viewer . t)
-      (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 -dSAFER %s")
-      (type . "application/postscript")
-      (test   . (eq (mm-device-type) 'x))
-      ("needsx11"))
-     ("postscript"
-      (viewer . "ps2ascii %s")
-      (type . "application/postscript")
-      (test . (not (getenv "DISPLAY")))
-      ("copiousoutput")))
-    ("audio"
-     ("x-mpeg"
-      (viewer . "maplay %s")
-      (type   . "audio/x-mpeg"))
-     (".*"
-      (viewer . mailcap-save-binary-file)
-      (non-viewer . t)
-      (test   . (or (featurep 'nas-sound)
-                     (featurep 'native-sound)))
-      (type   . "audio/*"))
-     (".*"
-      (viewer . "showaudio")
-      (type   . "audio/*")))
-    ("message"
-     ("rfc-*822"
-      (viewer . mm-view-message)
-      (test   . (and (featurep 'gnus)
-                    (gnus-alive-p)))
-      (type   . "message/rfc822"))
-     ("rfc-*822"
-      (viewer . vm-mode)
-      (test   . (fboundp 'vm-mode))
-      (type   . "message/rfc822"))
-     ("rfc-*822"
-      (viewer . w3-mode)
-      (test   . (fboundp 'w3-mode))
-      (type   . "message/rfc822"))
-     ("rfc-*822"
-      (viewer . view-mode)
-      (test   . (fboundp 'view-mode))
-      (type   . "message/rfc822"))
-     ("rfc-*822"
-      (viewer . fundamental-mode)
-      (type   . "message/rfc822")))
-    ("image"
-     ("x-xwd"
-      (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 . "display %s")
-      (type . "image/*")
-      (test   . (eq (mm-device-type) 'x))
-      ("needsx11"))
-     (".*"
-      (viewer . "ee %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
-  (cond ((fboundp 'temp-directory) (temp-directory))
-       ((boundp 'temporary-file-directory) temporary-file-directory)
-       ("/tmp/"))
-  "*Where temporary files go.")
-
-;;;
-;;; Utility functions
-;;;
-
-(defun mailcap-generate-unique-filename (&optional fmt)
-  "Generate a unique filename in mailcap-temporary-directory"
-  (if (not fmt)
-      (let ((base (format "mailcap-tmp.%d" (user-real-uid)))
-           (fname "")
-           (x 0))
-       (setq fname (format "%s%d" base x))
-       (while (file-exists-p
-               (expand-file-name fname mailcap-temporary-directory))
-         (setq x (1+ x)
-               fname (concat base (int-to-string x))))
-       (expand-file-name fname mailcap-temporary-directory))
-    (let ((base (concat "mm" (int-to-string (user-real-uid))))
-         (fname "")
-         (x 0))
-      (setq fname (format fmt (concat base (int-to-string x))))
-      (while (file-exists-p
-             (expand-file-name fname mailcap-temporary-directory))
-       (setq x (1+ x)
-             fname (format fmt (concat base (int-to-string x)))))
-      (expand-file-name fname mailcap-temporary-directory))))
-
-(defun mailcap-save-binary-file ()
-  (goto-char (point-min))
-  (unwind-protect
-      (let ((file (read-file-name
-                  "Filename to save as: "
-                  (or mailcap-download-directory "~/")))
-           (require-final-newline nil))
-       (write-region (point-min) (point-max) file))
-    (kill-buffer (current-buffer))))
-
-(defun mailcap-maybe-eval ()
-  "Maybe evaluate a buffer of emacs lisp code"
-  (if (yes-or-no-p "This is emacs-lisp code, evaluate it? ")
-      (eval-buffer (current-buffer))
-    (emacs-lisp-mode)))
-
-;;;
-;;; The mailcap parser
-;;;
-
-(defun mailcap-replace-regexp (regexp to-string)
-  ;; Quiet replace-regexp.
-  (goto-char (point-min))
-  (while (re-search-forward regexp nil t)
-    (replace-match to-string t nil)))
-
-(defvar mailcap-parsed-p nil)
-
-(defun mailcap-parse-mailcaps (&optional path force)
-  "Parse out all the mailcaps specified in a unix-style path string PATH.
-If FORCE, re-parse even if already parsed."
-  (interactive (list nil t))
-  (when (or (not mailcap-parsed-p)
-           force)
-    (cond
-     (path nil)
-     ((getenv "MAILCAPS") (setq path (getenv "MAILCAPS")))
-     ((memq system-type '(ms-dos ms-windows windows-nt))
-      (setq path (mapconcat 'expand-file-name
-                           '("~/mail.cap" "~/etc/mail.cap" "~/.mailcap")
-                           ";")))
-     (t (setq path (mapconcat 'expand-file-name
-                             '("~/.mailcap"
-                               "/etc/mailcap:/usr/etc/mailcap"
-                               "/usr/local/etc/mailcap") ":"))))
-    (let ((fnames (reverse
-                  (split-string
-                   path (if (memq system-type
-                                  '(ms-dos ms-windows windows-nt))
-                            ";"
-                          ":"))))
-         fname)
-      (while fnames
-       (setq fname (car fnames))
-       (if (and (file-exists-p fname) (file-readable-p fname)
-                (file-regular-p fname))
-           (mailcap-parse-mailcap (car fnames)))
-       (setq fnames (cdr fnames))))
-    (setq mailcap-parsed-p t)))
-
-(defun mailcap-parse-mailcap (fname)
-  ;; Parse out the mailcap file specified by FNAME
-  (let (major                          ; The major mime type (image/audio/etc)
-       minor                           ; The minor mime type (gif, basic, etc)
-       save-pos                        ; Misc saved positions used in parsing
-       viewer                          ; How to view this mime type
-       info                            ; Misc info about this mime type
-       )
-    (with-temp-buffer
-      (insert-file-contents fname)
-      (set-syntax-table mailcap-parse-args-syntax-table)
-      (mailcap-replace-regexp "#.*" "")        ; Remove all comments
-      (mailcap-replace-regexp "\n+" "\n") ; And blank lines
-      (mailcap-replace-regexp "\\\\[ \t\n]+" " ") ; And collapse spaces
-      (mailcap-replace-regexp (concat (regexp-quote "\\") "[ \t]*\n") "")
-      (goto-char (point-max))
-      (skip-chars-backward " \t\n")
-      (delete-region (point) (point-max))
-      (goto-char (point-min))
-      (while (not (eobp))
-       (skip-chars-forward " \t\n")
-       (setq save-pos (point)
-             info nil)
-       (skip-chars-forward "^/;")
-       (downcase-region save-pos (point))
-       (setq major (buffer-substring save-pos (point)))
-       (skip-chars-forward "/ \t\n")
-       (setq save-pos (point))
-       (skip-chars-forward "^;")
-       (downcase-region save-pos (point))
-       (setq minor
-             (cond
-              ((eq ?* (or (char-after save-pos) 0)) ".*")
-              ((= (point) save-pos) ".*")
-              (t (regexp-quote (buffer-substring save-pos (point))))))
-       (skip-chars-forward "; \t\n")
-       ;;; Got the major/minor chunks, now for the viewers/etc
-       ;;; The first item _must_ be a viewer, according to the
-       ;;; RFC for mailcap files (#1343)
-       (skip-chars-forward "; \t\n")
-       (setq save-pos (point))
-       (skip-chars-forward "^;\n")
-       (if (eq (or (char-after save-pos) 0) ?')
-           (setq viewer (progn
-                          (narrow-to-region (1+ save-pos) (point))
-                          (goto-char (point-min))
-                          (prog1
-                              (read (current-buffer))
-                            (goto-char (point-max))
-                            (widen))))
-         (setq viewer (buffer-substring save-pos (point))))
-       (setq save-pos (point))
-       (end-of-line)
-       (setq info (nconc (list (cons 'viewer viewer)
-                               (cons 'type (concat major "/"
-                                                   (if (string= minor ".*")
-                                                       "*" minor))))
-                         (mailcap-parse-mailcap-extras save-pos (point))))
-       (mailcap-mailcap-entry-passes-test info)
-       (mailcap-add-mailcap-entry major minor info)))))
-
-(defun mailcap-parse-mailcap-extras (st nd)
-  ;; Grab all the extra stuff from a mailcap entry
-  (let (
-       name                            ; From name=
-       value                           ; its value
-       results                         ; Assoc list of results
-       name-pos                        ; Start of XXXX= position
-       val-pos                         ; Start of value position
-       done                            ; Found end of \'d ;s?
-       )
-    (save-restriction
-      (narrow-to-region st nd)
-      (goto-char (point-min))
-      (skip-chars-forward " \n\t;")
-      (while (not (eobp))
-       (setq done nil)
-       (skip-chars-forward " \";\n\t")
-       (setq name-pos (point))
-       (skip-chars-forward "^ \n\t=")
-       (downcase-region name-pos (point))
-       (setq name (buffer-substring name-pos (point)))
-       (skip-chars-forward " \t\n")
-       (if (not (eq (char-after (point)) ?=)) ; There is no value
-           (setq value nil)
-         (skip-chars-forward " \t\n=")
-         (setq val-pos (point))
-         (if (memq (char-after val-pos) '(?\" ?'))
-             (progn
-               (setq val-pos (1+ val-pos))
-               (condition-case nil
-                   (progn
-                     (forward-sexp 1)
-                     (backward-char 1))
-                 (error (goto-char (point-max)))))
-           (while (not done)
-             (skip-chars-forward "^;")
-             (if (eq (char-after (1- (point))) ?\\ )
-                 (progn
-                   (subst-char-in-region (1- (point)) (point) ?\\ ? )
-                   (skip-chars-forward ";"))
-               (setq done t))))
-         (setq value (buffer-substring val-pos (point))))
-       (setq results (cons (cons name value) results)))
-      results)))
-
-(defun mailcap-mailcap-entry-passes-test (info)
-  ;; Return t iff a mailcap entry passes its test clause or no test
-  ;; clause is present.
-  (let (status                         ; Call-process-regions return value
-       (test (assq 'test info))        ; The test clause
-       )
-    (setq status (and test (split-string (cdr test) " ")))
-    (if (and (or (assoc "needsterm" info)
-                (assoc "needsx11" info))
-            (not (getenv "DISPLAY")))
-       (setq status nil)
-      (cond
-       ((and (equal (nth 0 status) "test")
-            (equal (nth 1 status) "-n")
-            (or (equal (nth 2 status) "$DISPLAY")
-                (equal (nth 2 status) "\"$DISPLAY\"")))
-       (setq status (if (getenv "DISPLAY") t nil)))
-       ((and (equal (nth 0 status) "test")
-            (equal (nth 1 status) "-z")
-            (or (equal (nth 2 status) "$DISPLAY")
-                (equal (nth 2 status) "\"$DISPLAY\"")))
-       (setq status (if (getenv "DISPLAY") nil t)))
-       (test nil)
-       (t nil)))
-    (and test (listp test) (setcdr test status))))
-
-;;;
-;;; The action routines.
-;;;
-
-(defun mailcap-possible-viewers (major minor)
-  ;; Return a list of possible viewers from MAJOR for minor type MINOR
-  (let ((exact '())
-       (wildcard '()))
-    (while major
-      (cond
-       ((equal (car (car major)) minor)
-       (setq exact (cons (cdr (car major)) exact)))
-       ((and minor (string-match (car (car major)) minor))
-       (setq wildcard (cons (cdr (car major)) wildcard))))
-      (setq major (cdr major)))
-    (nconc (nreverse exact) (nreverse wildcard))))
-
-(defun mailcap-unescape-mime-test (test type-info)
-  (let (save-pos save-chr subst)
-    (cond
-     ((symbolp test) test)
-     ((and (listp test) (symbolp (car test))) test)
-     ((or (stringp test)
-         (and (listp test) (stringp (car test))
-              (setq test (mapconcat 'identity test " "))))
-      (with-temp-buffer
-       (insert test)
-       (goto-char (point-min))
-       (while (not (eobp))
-         (skip-chars-forward "^%")
-         (if (/= (- (point)
-                    (progn (skip-chars-backward "\\\\")
-                           (point)))
-                 0)                    ; It is an escaped %
-             (progn
-               (delete-char 1)
-               (skip-chars-forward "%."))
-           (setq save-pos (point))
-           (skip-chars-forward "%")
-           (setq save-chr (char-after (point)))
-           (cond
-            ((null save-chr) nil)
-            ((= save-chr ?t)
-             (delete-region save-pos (progn (forward-char 1) (point)))
-             (insert (or (cdr (assq 'type type-info)) "\"\"")))
-            ((= save-chr ?M)
-             (delete-region save-pos (progn (forward-char 1) (point)))
-             (insert "\"\""))
-            ((= save-chr ?n)
-             (delete-region save-pos (progn (forward-char 1) (point)))
-             (insert "\"\""))
-            ((= save-chr ?F)
-             (delete-region save-pos (progn (forward-char 1) (point)))
-             (insert "\"\""))
-            ((= save-chr ?{)
-             (forward-char 1)
-             (skip-chars-forward "^}")
-             (downcase-region (+ 2 save-pos) (point))
-             (setq subst (buffer-substring (+ 2 save-pos) (point)))
-             (delete-region save-pos (1+ (point)))
-             (insert (or (cdr (assoc subst type-info)) "\"\"")))
-            (t nil))))
-       (buffer-string)))
-     (t (error "Bad value to mailcap-unescape-mime-test. %s" test)))))
-
-(defvar mailcap-viewer-test-cache nil)
-
-(defun mailcap-viewer-passes-test (viewer-info type-info)
-  ;; Return non-nil iff the viewer specified by VIEWER-INFO passes its
-  ;; test clause (if any).
-  (let* ((test-info (assq 'test viewer-info))
-        (test (cdr test-info))
-        (otest test)
-        (viewer (cdr (assoc 'viewer viewer-info)))
-        (default-directory (expand-file-name "~/"))
-        status parsed-test cache result)
-    (if (setq cache (assoc test mailcap-viewer-test-cache))
-       (cadr cache)
-      (setq
-       result
-       (cond
-       ((not test-info) t)             ; No test clause
-       ((not test) nil)                ; Already failed test
-       ((eq test t) t)                 ; Already passed test
-       ((and (symbolp test)            ; Lisp function as test
-             (fboundp test))
-        (funcall test type-info))
-       ((and (symbolp test)            ; Lisp variable as test
-             (boundp test))
-        (symbol-value test))
-       ((and (listp test)              ; List to be eval'd
-             (symbolp (car test)))
-        (eval test))
-       (t
-        (setq test (mailcap-unescape-mime-test test type-info)
-              test (list shell-file-name nil nil nil
-                         shell-command-switch test)
-              status (apply 'call-process test))
-        (= 0 status))))
-      (push (list otest result) mailcap-viewer-test-cache)
-      result)))
-
-(defun mailcap-add-mailcap-entry (major minor info)
-  (let ((old-major (assoc major mailcap-mime-data)))
-    (if (null old-major)               ; New major area
-       (setq mailcap-mime-data
-             (cons (cons major (list (cons minor info)))
-                   mailcap-mime-data))
-      (let ((cur-minor (assoc minor old-major)))
-       (cond
-        ((or (null cur-minor)          ; New minor area, or
-             (assq 'test info))        ; Has a test, insert at beginning
-         (setcdr old-major (cons (cons minor info) (cdr old-major))))
-        ((and (not (assq 'test info)) ; No test info, replace completely
-              (not (assq 'test cur-minor)))
-         (setcdr cur-minor info))
-        (t
-         (setcdr old-major (cons (cons minor info) (cdr old-major)))))))))
-
-(defun mailcap-add (type viewer &optional test)
-  "Add VIEWER as a handler for TYPE.
-If TEST is not given, it defaults to t."
-  (let ((tl (split-string type "/")))
-    (when (or (not (car tl))
-             (not (cadr tl)))
-      (error "%s is not a valid MIME type" type))
-    (mailcap-add-mailcap-entry
-     (car tl) (cadr tl)
-     `((viewer . ,viewer)
-       (test . ,(if test test t))
-       (type . ,type)))))
-
-;;;
-;;; The main whabbo
-;;;
-
-(defun mailcap-viewer-lessp (x y)
-  ;; Return t iff viewer X is more desirable than viewer Y
-  (let ((x-wild (string-match "[*?]" (or (cdr-safe (assq 'type x)) "")))
-       (y-wild (string-match "[*?]" (or (cdr-safe (assq 'type y)) "")))
-       (x-lisp (not (stringp (or (cdr-safe (assq 'viewer x)) ""))))
-       (y-lisp (not (stringp (or (cdr-safe (assq 'viewer y)) "")))))
-    (cond
-     ((and x-lisp (not y-lisp))
-      t)
-     ((and (not y-lisp) x-wild (not y-wild))
-      t)
-     ((and (not x-wild) y-wild)
-      t)
-     (t nil))))
-
-(defun mailcap-mime-info (string &optional request)
-  "Get the MIME viewer command for STRING, return nil if none found.
-Expects a complete content-type header line as its argument.
-
-Second argument REQUEST specifies what information to return.  If it is
-nil or the empty string, the viewer (second field of the mailcap
-entry) will be returned.  If it is a string, then the mailcap field
-corresponding to that string will be returned (print, description,
-whatever).  If a number, then all the information for this specific
-viewer is returned.  If `all', then all possible viewers for
-this type is returned."
-  (let (
-       major                           ; Major encoding (text, etc)
-       minor                           ; Minor encoding (html, etc)
-       info                            ; Other info
-       save-pos                        ; Misc. position during parse
-       major-info                      ; (assoc major mailcap-mime-data)
-       minor-info                      ; (assoc minor major-info)
-       test                            ; current test proc.
-       viewers                         ; Possible viewers
-       passed                          ; Viewers that passed the test
-       viewer                          ; The one and only viewer
-       ctl)
-    (save-excursion
-      (setq ctl (mail-header-parse-content-type (or string "text/plain")))
-      (setq major (split-string (car ctl) "/"))
-      (setq minor (cadr major)
-           major (car major))
-      (when (setq major-info (cdr (assoc major mailcap-mime-data)))
-       (when (setq viewers (mailcap-possible-viewers major-info minor))
-         (setq info (mapcar (lambda (a) (cons (symbol-name (car a))
-                                              (cdr a)))
-                            (cdr ctl)))
-         (while viewers
-           (if (mailcap-viewer-passes-test (car viewers) info)
-               (setq passed (cons (car viewers) passed)))
-           (setq viewers (cdr viewers)))
-         (setq passed (sort (nreverse passed) 'mailcap-viewer-lessp))
-         (setq viewer (car passed))))
-      (when (and (stringp (cdr (assq 'viewer viewer)))
-                passed)
-       (setq viewer (car passed)))
-      (cond
-       ((and (null viewer) (not (equal major "default")) request)
-       (mailcap-mime-info "default" request))
-       ((or (null request) (equal request ""))
-       (mailcap-unescape-mime-test (cdr (assq 'viewer viewer)) info))
-       ((stringp request)
-       (if (or (eq request 'test) (eq request 'viewer))
-           (mailcap-unescape-mime-test
-            (cdr-safe (assoc request viewer)) info)))
-       ((eq request 'all)
-       passed)
-       (t
-       ;; MUST make a copy *sigh*, else we modify mailcap-mime-data
-       (setq viewer (copy-tree viewer))
-       (let ((view (assq 'viewer viewer))
-             (test (assq 'test viewer)))
-         (if view (setcdr view (mailcap-unescape-mime-test (cdr view) info)))
-         (if test (setcdr test (mailcap-unescape-mime-test (cdr test) info))))
-       viewer)))))
-
-;;;
-;;; Experimental MIME-types parsing
-;;;
-
-(defvar mailcap-mime-extensions
-  '((""          . "text/plain")
-    (".abs"      . "audio/x-mpeg")
-    (".aif"      . "audio/aiff")
-    (".aifc"     . "audio/aiff")
-    (".aiff"     . "audio/aiff")
-    (".ano"      . "application/x-annotator")
-    (".au"       . "audio/ulaw")
-    (".avi"      . "video/x-msvideo")
-    (".bcpio"    . "application/x-bcpio")
-    (".bin"      . "application/octet-stream")
-    (".cdf"      . "application/x-netcdr")
-    (".cpio"     . "application/x-cpio")
-    (".csh"      . "application/x-csh")
-    (".dvi"      . "application/x-dvi")
-    (".el"       . "application/emacs-lisp")
-    (".eps"      . "application/postscript")
-    (".etx"      . "text/x-setext")
-    (".exe"      . "application/octet-stream")
-    (".fax"      . "image/x-fax")
-    (".gif"      . "image/gif")
-    (".hdf"      . "application/x-hdf")
-    (".hqx"      . "application/mac-binhex40")
-    (".htm"      . "text/html")
-    (".html"     . "text/html")
-    (".icon"     . "image/x-icon")
-    (".ief"      . "image/ief")
-    (".jpg"      . "image/jpeg")
-    (".macp"     . "image/x-macpaint")
-    (".man"      . "application/x-troff-man")
-    (".me"       . "application/x-troff-me")
-    (".mif"      . "application/mif")
-    (".mov"      . "video/quicktime")
-    (".movie"    . "video/x-sgi-movie")
-    (".mp2"      . "audio/x-mpeg")
-    (".mp3"      . "audio/x-mpeg")
-    (".mp2a"     . "audio/x-mpeg2")
-    (".mpa"      . "audio/x-mpeg")
-    (".mpa2"     . "audio/x-mpeg2")
-    (".mpe"      . "video/mpeg")
-    (".mpeg"     . "video/mpeg")
-    (".mpega"    . "audio/x-mpeg")
-    (".mpegv"    . "video/mpeg")
-    (".mpg"      . "video/mpeg")
-    (".mpv"      . "video/mpeg")
-    (".ms"       . "application/x-troff-ms")
-    (".nc"       . "application/x-netcdf")
-    (".nc"       . "application/x-netcdf")
-    (".oda"      . "application/oda")
-    (".patch"    . "application/x-patch")
-    (".pbm"      . "image/x-portable-bitmap")
-    (".pdf"      . "application/pdf")
-    (".pgm"      . "image/portable-graymap")
-    (".pict"     . "image/pict")
-    (".png"      . "image/png")
-    (".pnm"      . "image/x-portable-anymap")
-    (".ppm"      . "image/portable-pixmap")
-    (".ps"       . "application/postscript")
-    (".qt"       . "video/quicktime")
-    (".ras"      . "image/x-raster")
-    (".rgb"      . "image/x-rgb")
-    (".rtf"      . "application/rtf")
-    (".rtx"      . "text/richtext")
-    (".sh"       . "application/x-sh")
-    (".sit"      . "application/x-stuffit")
-    (".snd"      . "audio/basic")
-    (".src"      . "application/x-wais-source")
-    (".tar"      . "archive/tar")
-    (".tcl"      . "application/x-tcl")
-    (".tcl"      . "application/x-tcl")
-    (".tex"      . "application/x-tex")
-    (".texi"     . "application/texinfo")
-    (".tga"      . "image/x-targa")
-    (".tif"      . "image/tiff")
-    (".tiff"     . "image/tiff")
-    (".tr"       . "application/x-troff")
-    (".troff"    . "application/x-troff")
-    (".tsv"      . "text/tab-separated-values")
-    (".txt"      . "text/plain")
-    (".vbs"      . "video/mpeg")
-    (".vox"      . "audio/basic")
-    (".vrml"     . "x-world/x-vrml")
-    (".wav"      . "audio/x-wav")
-    (".wrl"      . "x-world/x-vrml")
-    (".xbm"      . "image/xbm")
-    (".xpm"      . "image/xpm")
-    (".xwd"      . "image/windowdump")
-    (".zip"      . "application/zip")
-    (".ai"       . "application/postscript")
-    (".jpe"      . "image/jpeg")
-    (".jpeg"     . "image/jpeg"))
-  "An assoc list of file extensions and corresponding MIME content-types.")
-
-(defun mailcap-parse-mimetypes (&optional path)
-  ;; Parse out all the mimetypes specified in a unix-style path string PATH
-  (cond
-   (path nil)
-   ((getenv "MIMETYPES") (setq path (getenv "MIMETYPES")))
-   ((memq system-type '(ms-dos ms-windows windows-nt))
-    (setq path (mapconcat 'expand-file-name
-                         '("~/mime.typ" "~/etc/mime.typ") ";")))
-   (t (setq path (mapconcat 'expand-file-name
-                           '("~/.mime-types"
-                             "/etc/mime-types:/usr/etc/mime-types"
-                             "/usr/local/etc/mime-types"
-                             "/usr/local/www/conf/mime-types") ":"))))
-  (let ((fnames (reverse
-                (split-string path
-                              (if (memq system-type
-                                        '(ms-dos ms-windows windows-nt))
-                                  ";" ":"))))
-       fname)
-    (while fnames
-      (setq fname (car fnames))
-      (if (and (file-exists-p fname) (file-readable-p fname))
-         (mailcap-parse-mimetype-file (car fnames)))
-      (setq fnames (cdr fnames)))))
-
-(defun mailcap-parse-mimetype-file (fname)
-  ;; Parse out a mime-types file
-  (let (type                           ; The MIME type for this line
-       extns                           ; The extensions for this line
-       save-pos                        ; Misc. saved buffer positions
-       )
-    (with-temp-buffer
-      (insert-file-contents fname)
-      (mailcap-replace-regexp "#.*" "")
-      (mailcap-replace-regexp "\n+" "\n")
-      (mailcap-replace-regexp "[ \t]+$" "")
-      (goto-char (point-max))
-      (skip-chars-backward " \t\n")
-      (delete-region (point) (point-max))
-      (goto-char (point-min))
-      (while (not (eobp))
-       (skip-chars-forward " \t\n")
-       (setq save-pos (point))
-       (skip-chars-forward "^ \t")
-       (downcase-region save-pos (point))
-       (setq type (buffer-substring save-pos (point)))
-       (while (not (eolp))
-         (skip-chars-forward " \t")
-         (setq save-pos (point))
-         (skip-chars-forward "^ \t\n")
-         (setq extns (cons (buffer-substring save-pos (point)) extns)))
-       (while extns
-         (setq mailcap-mime-extensions
-               (cons
-                (cons (if (= (string-to-char (car extns)) ?.)
-                          (car extns)
-                        (concat "." (car extns))) type)
-                mailcap-mime-extensions)
-               extns (cdr extns)))))))
-
-(defun mailcap-extension-to-mime (extn)
-  "Return the MIME content type of the file extensions EXTN."
-  (if (and (stringp extn)
-          (not (eq (string-to-char extn) ?.)))
-      (setq extn (concat "." extn)))
-  (cdr (assoc (downcase extn) mailcap-mime-extensions)))
-
-(defvar mailcap-binary-suffixes
-  (if (memq system-type '(ms-dos windows-nt))
-      '(".exe" ".com" ".bat" ".cmd" ".btm" "")
-    '("")))
-
-(defun mailcap-command-p (command)
-  "Say whether COMMAND is in the exec path.
-The path of COMMAND will be returned iff COMMAND is a command."
-  (let ((path (if (file-name-absolute-p command) '(nil) exec-path))
-       file dir)
-    (catch 'found
-      (while (setq dir (pop path))
-       (let ((suffixes mailcap-binary-suffixes))
-         (while suffixes
-           (when (and (file-executable-p
-                       (setq file (expand-file-name
-                                   (concat command (pop suffixes))
-                                   dir)))
-                      (not (file-directory-p file)))
-             (throw 'found file))))))))
-
-(provide 'mailcap)
-
-;;; mailcap.el ends here
index 6eb5669..5e2b097 100644 (file)
@@ -60,7 +60,7 @@ that name."
        start end)
     (while (and (setq start (point))
                (> (skip-chars-forward "^\0- :") 0)
-               (eq (char-after) ?:)
+               (= (following-char) ?:)
                (setq end (point))
                (progn (forward-char)
                       (> (skip-chars-forward " \t") 0)))
index 7b4525c..82923d6 100644 (file)
@@ -1,8 +1,11 @@
 ;;; message.el --- composing mail and news messages
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; 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>
+;;         Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
+;;         Keiichi Suzuki <kei-suzu@mail.wbs.ne.jp>
+;; Keywords: mail, news, MIME
 
 ;; This file is part of GNU Emacs.
 
 
 ;;; Code:
 
-(eval-when-compile (require 'cl))
+(eval-when-compile
+  (require 'cl)
+  (require 'smtp)
+  )
 
 (require 'mailheader)
 (require 'nnheader)
+(require 'timezone)
 (require 'easymenu)
 (require 'custom)
 (if (string-match "XEmacs\\|Lucid" emacs-version)
     (require 'mail-abbrevs)
   (require 'mailabbrev))
-(require 'mail-parse)
-(require 'mm-bodies)
-(require 'mm-encode)
-(require 'mml)
+(require 'mime-edit)
 
 (defgroup message '((user-mail-address custom-variable)
                    (user-full-name custom-variable))
   :group 'message
   :group 'faces)
 
+(defgroup message-frames nil
+  "Message frames"
+  :group 'message)
+
 (defcustom message-directory "~/Mail/"
   "*Directory from which all other mail file variables are derived."
   :group 'message-various
@@ -125,6 +133,16 @@ mailbox format."
                (function :tag "Other"))
   :group 'message-sending)
 
+(defcustom message-encode-function 'message-maybe-encode
+  "*A function called to encode messages."
+  :group 'message-sending
+  :type 'function)
+
+(defcustom message-8bit-encoding-list '(8bit binary)
+  "*8bit encoding type in Content-Transfer-Encoding field."
+  :group 'message-sending
+  :type '(repeat (symbol :tag "Type")))
+
 (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.
@@ -139,6 +157,11 @@ If this variable is nil, no such courtesy message will be added."
   :group 'message-interface
   :type 'regexp)
 
+(defcustom message-bounce-setup-function 'message-bounce-setup-for-mime-edit
+  "Function to setup a re-sending bounced message."
+  :group 'message-sending
+  :type 'function)
+
 ;;;###autoload
 (defcustom message-from-style 'default
   "*Specifies how \"From\" headers look.
@@ -169,8 +192,7 @@ Don't touch this variable unless you really know what you're doing.
 Checks include subject-cmsg multiple-headers sendsys message-id from
 long-lines control-chars size new-text redirected-followup signature
 approved sender empty empty-headers message-id from subject
-shorten-followup-to existing-newsgroups buffer-file-name unchanged
-newsgroups."
+shorten-followup-to existing-newsgroups buffer-file-name unchanged."
   :group 'message-news)
 
 (defcustom message-required-news-headers
@@ -214,13 +236,19 @@ included.  Organization, Lines and User-Agent are optional."
   :group 'message-headers
   :type 'regexp)
 
-(defcustom message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-Complaints-To:\\|Return-Path:\\|^Supersedes:\\|^NNTP-Posting-Date:\\|^X-Trace:\\|^X-Complaints-To:"
+(defcustom message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-Complaints-To:\\|Return-Path:\\|^Supersedes:\\|^X-Trace:\\|^X-Complaints-To:"
   "*Header lines matching this regexp will be deleted before posting.
 It's best to delete old Path and Date headers before posting to avoid
 any confusion."
   :group 'message-interface
   :type 'regexp)
 
+(defcustom message-supersede-setup-function
+  'message-supersede-setup-for-mime-edit
+  "Function to setup a supersede message."
+  :group 'message-sending
+  :type 'function)
+
 (defcustom message-subject-re-regexp "^[ \t]*\\([Rr][Ee]:[ \t]*\\)*[ \t]*"
   "*Regexp matching \"Re: \" in the subject line."
   :group 'message-various
@@ -244,15 +272,14 @@ nil means let mailer mail back a message to report errors."
   :group 'message-mail
   :type 'boolean)
 
-(defcustom message-generate-new-buffers 'unique
+(defcustom message-generate-new-buffers t
   "*Non-nil means that a new message buffer will be created whenever `message-setup' is called.
 If this is a function, call that function with three parameters:  The type,
 the to address and the group name.  (Any of these may be nil.)  The function
 should return the new buffer name."
   :group 'message-buffers
   :type '(choice (const :tag "off" nil)
-                (const :tag "unique" unique)
-                (const :tag "unsent" unsent)
+                (const :tag "on" t)
                 (function fun)))
 
 (defcustom message-kill-buffer-on-exit nil
@@ -260,6 +287,15 @@ should return the new buffer name."
   :group 'message-buffers
   :type 'boolean)
 
+(defcustom message-kill-buffer-query-function 'yes-or-no-p
+  "*A function called to query the user whether to kill buffer anyway or not.
+If it is t, the buffer will be killed peremptorily."
+  :type '(radio (function-item yes-or-no-p)
+               (function-item y-or-n-p)
+               (function-item nnheader-Y-or-n-p)
+               (function :tag "Other" t))
+  :group 'message-buffers)
+
 (defvar gnus-local-organization)
 (defcustom message-user-organization
   (or (and (boundp 'gnus-local-organization)
@@ -279,7 +315,30 @@ If t, use `message-user-organization-file'."
   :type 'file
   :group 'message-headers)
 
-(defcustom message-make-forward-subject-function
+(defcustom message-forward-start-separator
+  (concat (mime-make-tag "message" "rfc822") "\n")
+  "*Delimiter inserted before forwarded messages."
+  :group 'message-forwarding
+  :type 'string)
+
+(defcustom message-forward-end-separator
+  (concat (mime-make-tag "text" "plain") "\n")
+  "*Delimiter inserted after forwarded messages."
+  :group 'message-forwarding
+  :type 'string)
+
+(defcustom message-signature-before-forwarded-message t
+  "*If non-nil, put the signature before any included forwarded message."
+  :group 'message-forwarding
+  :type 'boolean)
+
+(defcustom message-included-forward-headers
+  "^From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^Followup-To:\\|^Reply-To:\\|^Organization:\\|^Summary:\\|^Keywords:\\|^To:\\|^Cc:\\|^Posted-To:\\|^Mail-Copies-To:\\|^Apparently-To:\\|^Gnus-Warning:\\|^Resent-\\|^Message-ID:\\|^References:\\|^Content-Transfer-Encoding:\\|^Content-Type:\\|^MIME-Version:"
+  "*Regexp matching headers to be included in forwarded messages."
+  :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
@@ -300,7 +359,7 @@ The provided functions are:
   :group 'message-forwarding
   :type 'boolean)
 
-(defcustom message-ignored-resent-headers "^Return-receipt\\|^X-Gnus\\|^Gnus-Warning:"
+(defcustom message-ignored-resent-headers "^Return-receipt"
   "*All headers that match this regexp will be deleted when resending a message."
   :group 'message-interface
   :type 'regexp)
@@ -322,18 +381,19 @@ The provided functions are:
 The headers should be delimited by a line whose contents match the
 variable `mail-header-separator'.
 
-Valid values include `message-send-mail-with-sendmail' (the default),
+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'."
@@ -420,17 +480,13 @@ variable isn't used."
   :group 'message-headers
   :type 'boolean)
 
-(defcustom message-setup-hook nil
+(defcustom message-setup-hook
+  '(message-maybe-setup-default-charset turn-on-mime-edit)
   "Normal hook, run each time a new outgoing message is initialized.
 The function `message-setup' runs this hook."
   :group 'message-various
   :type 'hook)
 
-(defcustom message-cancel-hook nil
-  "Hook run when cancelling articles."
-  :group 'message-various
-  :type 'hook)
-
 (defcustom message-signature-setup-hook nil
   "Normal hook, run each time a new outgoing message is initialized.
 It is run after the headers have been inserted and before
@@ -438,12 +494,24 @@ the signature is inserted."
   :group 'message-various
   :type 'hook)
 
+(defcustom message-bounce-setup-hook nil
+  "Normal hook, run each time a a re-sending bounced message is initialized.
+The function `message-bounce' runs this hook."
+  :group 'message-various
+  :type 'hook)
+
+(defcustom message-supersede-setup-hook nil
+  "Normal hook, run each time a supersede message is initialized.
+The function `message-supersede' runs this hook."
+  :group 'message-various
+  :type 'hook)
+
 (defcustom message-mode-hook nil
   "Hook run in message mode buffers."
   :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)
@@ -461,7 +529,8 @@ the signature is inserted."
 
 ;;;###autoload
 (defcustom message-yank-prefix "> "
-  "*Prefix inserted on the lines of yanked messages."
+  "*Prefix inserted on the lines of yanked messages.
+nil means use indentation."
   :type 'string
   :group 'message-insertion)
 
@@ -478,7 +547,6 @@ 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."
   :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)
@@ -546,6 +614,9 @@ If stringp, use this; if non-nil, use no host name (user name only)."
   "A list of actions to be performed before killing a message buffer.")
 (defvar message-postpone-actions nil
   "A list of actions to be performed after postponing a message.")
+(defvar message-original-frame nil)
+(defvar message-parameter-alist nil)
+(defvar message-startup-parameter-alist nil)
 
 (define-widget 'message-header-lines 'text
   "All header lines must be LFD terminated."
@@ -600,13 +671,18 @@ actually occur."
   :group 'message-sending
   :type 'sexp)
 
+;;; XXX: This symbol is overloaded!  See below.
+(defvar message-user-agent nil
+  "String of the form of PRODUCT/VERSION.  Used for User-Agent header field.")
+
 ;; Ignore errors in case this is used in Emacs 19.
 ;; Don't use ignore-errors because this is copied into loaddefs.el.
 ;;;###autoload
-(ignore-errors
-  (define-mail-user-agent 'message-user-agent
-    'message-mail 'message-send-and-exit
-    'message-kill-buffer 'message-send-hook))
+(condition-case nil
+    (define-mail-user-agent 'message-user-agent
+      'message-mail 'message-send-and-exit
+      'message-kill-buffer 'message-send-hook)
+  (error nil))
 
 (defvar message-mh-deletable-headers '(Message-ID Date Lines Sender)
   "If non-nil, delete the deletable headers before feeding to mh.")
@@ -637,26 +713,12 @@ If nil, Message won't auto-save."
   :group 'message-buffers
   :type 'directory)
 
-(defcustom message-buffer-naming-style 'unique
-  "*The way new message buffers are named.
-Valid valued are `unique' and `unsent'."
-  :group 'message-buffers
-  :type '(choice (const :tag "unique" unique)
-                (const :tag "unsent" unsent)))
-
-(defcustom message-default-charset nil
-  "Default charset used in non-MULE XEmacsen."
-  :group 'message
-  :type 'symbol)
-
 ;;; Internal variables.
 ;;; Well, not really internal.
 
 (defvar message-mode-syntax-table
   (let ((table (copy-syntax-table text-mode-syntax-table)))
     (modify-syntax-entry ?% ". " table)
-    (modify-syntax-entry ?> ". " table)
-    (modify-syntax-entry ?< ". " table)
     table)
   "Syntax table used while in Message mode.")
 
@@ -776,18 +838,6 @@ Defaults to `text-mode-abbrev-table'.")
   "Face used for displaying cited text names."
   :group 'message-faces)
 
-(defface message-mml-face
-  '((((class color)
-      (background dark))
-     (:foreground "ForestGreen"))
-    (((class color)
-      (background light))
-     (:foreground "ForestGreen"))
-    (t
-     (:bold t)))
-  "Face used for displaying MML."
-  :group 'message-faces)
-
 (defvar message-font-lock-keywords
   (let* ((cite-prefix "A-Za-z")
         (cite-suffix (concat cite-prefix "0-9_.@-"))
@@ -818,9 +868,7 @@ Defaults to `text-mode-abbrev-table'.")
       (,(concat "^[ \t]*"
                "\\([" cite-prefix "]+[" cite-suffix "]*\\)?"
                "[:>|}].*")
-       (0 'message-cited-text-face))
-      ("<#/?\\(multipart\\|part\\|external\\).*>"
-       (0 'message-mml-face))))
+       (0 'message-cited-text-face))))
   "Additional expressions to highlight in Message mode.")
 
 ;; XEmacs does it like this.  For Emacs, we have to set the
@@ -857,12 +905,17 @@ The cdr of ech entry is a function for applying the face to a region.")
   :group 'message-various
   :type 'hook)
 
-(defvar message-send-coding-system 'binary
-  "Coding system to encode outgoing mail.")
+(defcustom message-use-multi-frames nil
+  "Make new frame when sending messages."
+  :group 'message-frames
+  :type 'boolean)
 
-(defvar message-draft-coding-system
-  mm-auto-save-coding-system
-  "Coding system to compose mail.")
+(defcustom message-delete-frame-on-exit nil
+  "Delete frame after sending messages."
+  :group 'message-frames
+  :type '(choice (const :tag "off" nil)
+                (const :tag "always" t)
+                (const :tag "ask" ask)))
 
 ;;; Internal variables.
 
@@ -870,8 +923,6 @@ The cdr of ech entry is a function for applying the face to a region.")
 (defvar message-this-is-news nil)
 (defvar message-this-is-mail nil)
 (defvar message-draft-article nil)
-(defvar message-mime-part nil)
-(defvar message-posting-charset nil)
 
 ;; Byte-compiler warning
 (defvar gnus-active-hashtb)
@@ -956,7 +1007,7 @@ The cdr of ech entry is a function for applying the face to a region.")
     (Lines)
     (Expires)
     (Message-ID)
-    (References . message-shorten-references)
+    (References . message-fill-references)
     (User-Agent))
   "Alist used for formatting headers.")
 
@@ -967,11 +1018,13 @@ The cdr of ech entry is a function for applying the face to a region.")
   (autoload 'gnus-point-at-eol "gnus-util")
   (autoload 'gnus-point-at-bol "gnus-util")
   (autoload 'gnus-output-to-mail "gnus-util")
+  (autoload 'gnus-output-to-rmail "gnus-util")
   (autoload 'mail-abbrev-in-expansion-header-p "mailabbrev")
   (autoload 'nndraft-request-associate-buffer "nndraft")
   (autoload 'nndraft-request-expire-articles "nndraft")
   (autoload 'gnus-open-server "gnus-int")
   (autoload 'gnus-request-post "gnus-int")
+  (autoload 'gnus-copy-article-buffer "gnus-msg")
   (autoload 'gnus-alive-p "gnus-util")
   (autoload 'rmail-output "rmail"))
 
@@ -980,6 +1033,22 @@ The cdr of ech entry is a function for applying the face to a region.")
 ;;;
 ;;; Utility functions.
 ;;;
+(defun message-eval-parameter (parameter)
+  (condition-case ()
+      (if (symbolp parameter)
+         (if (functionp parameter)
+             (funcall parameter)
+           (eval parameter))
+       parameter)
+    (error nil)))
+
+(defsubst message-get-parameter (key &optional alist)
+  (unless alist
+    (setq alist message-parameter-alist))
+  (cdr (assq key alist)))
+
+(defmacro message-get-parameter-with-eval (key &optional alist)
+  `(message-eval-parameter (message-get-parameter ,key ,alist)))
 
 (defmacro message-y-or-n-p (question show &rest text)
   "Ask QUESTION, displaying the rest of the arguments in a temp. buffer if SHOW"
@@ -1014,12 +1083,12 @@ The cdr of ech entry is a function for applying the face to a region.")
                               (not paren))))
                 (push (buffer-substring beg (point)) elems)
                 (setq beg (match-end 0)))
-               ((eq (char-after) ?\")
+               ((= (following-char) ?\")
                 (setq quoted (not quoted)))
-               ((and (eq (char-after) ?\()
+               ((and (= (following-char) ?\()
                      (not quoted))
                 (setq paren t))
-               ((and (eq (char-after) ?\))
+               ((and (= (following-char) ?\))
                      (not quoted))
                 (setq paren nil))))
        (nreverse elems)))))
@@ -1029,8 +1098,8 @@ The cdr of ech entry is a function for applying the face to a region.")
   (when (and (file-exists-p file)
             (file-readable-p file)
             (file-regular-p file))
-    (with-temp-buffer
-      (mm-insert-file-contents file)
+    (nnheader-temp-write nil
+      (nnheader-insert-file-contents file)
       (goto-char (point-min))
       (looking-at message-unix-mail-delimiter))))
 
@@ -1039,24 +1108,7 @@ The cdr of ech entry is a function for applying the face to a region.")
   (let* ((inhibit-point-motion-hooks t)
         (value (mail-fetch-field header nil (not not-all))))
     (when value
-      (while (string-match "\n[\t ]+" value)
-       (setq value (replace-match " " t t value)))
-      ;; We remove all text props.delete-region
-      (format "%s" value))))
-
-(defun message-narrow-to-field ()
-  "Narrow the buffer to the header on the current line."
-  (beginning-of-line)
-  (narrow-to-region
-   (point)
-   (progn
-     (forward-line 1)
-     (if (re-search-forward "^[^ \n\t]" nil t)
-        (progn
-          (beginning-of-line)
-          (point))
-       (point-max))))
-  (goto-char (point-min)))
+      (nnheader-replace-chars-in-string value ?\n ? ))))
 
 (defun message-add-header (&rest headers)
   "Add the HEADERS to the message header, skipping those already present."
@@ -1073,11 +1125,12 @@ The cdr of ech entry is a function for applying the face to a region.")
 
 (defun message-fetch-reply-field (header)
   "Fetch FIELD from the message we're replying to."
-  (when (and message-reply-buffer
-            (buffer-name message-reply-buffer))
-    (save-excursion
-      (set-buffer message-reply-buffer)
-      (message-fetch-field header))))
+  (let ((buffer (message-eval-parameter message-reply-buffer)))
+    (when (and buffer
+              (buffer-name buffer))
+      (save-excursion
+       (set-buffer buffer)
+      (message-fetch-field header)))))
 
 (defun message-set-work-buffer ()
   (if (get-buffer " *message work*")
@@ -1086,7 +1139,7 @@ The cdr of ech entry is a function for applying the face to a region.")
        (erase-buffer))
     (set-buffer (get-buffer-create " *message work*"))
     (kill-all-local-variables)
-    (mm-enable-multibyte)))
+    (buffer-disable-undo (current-buffer))))
 
 (defun message-functionp (form)
   "Return non-nil if FORM is funcallable."
@@ -1131,21 +1184,9 @@ Return the number of headers removed."
        (forward-line 1)
        (if (re-search-forward "^[^ \t]" nil t)
            (goto-char (match-beginning 0))
-         (goto-char (point-max)))))
+         (point-max))))
     number))
 
-(defun message-remove-first-header (header)
-  "Remove the first instance of HEADER if there is more than one."
-  (let ((count 0)
-       (regexp (concat "^" (regexp-quote header) ":")))
-    (save-excursion
-      (goto-char (point-min))
-      (while (re-search-forward regexp nil t)
-       (incf count)))
-    (while (> count 1)
-      (message-remove-header header nil t)
-      (decf count))))
-
 (defun message-narrow-to-headers ()
   "Narrow the buffer to the head of the message."
   (widen)
@@ -1158,8 +1199,7 @@ Return the number of headers removed."
   (goto-char (point-min)))
 
 (defun message-narrow-to-head ()
-  "Narrow the buffer to the head of the message.
-Point is left at the beginning of the narrowed-to region."
+  "Narrow the buffer to the head of the message."
   (widen)
   (narrow-to-region
    (goto-char (point-min))
@@ -1168,21 +1208,6 @@ Point is left at the beginning of the narrowed-to region."
      (point-max)))
   (goto-char (point-min)))
 
-(defun message-narrow-to-headers-or-head ()
-  "Narrow the buffer to the head of the message."
-  (widen)
-  (narrow-to-region
-   (goto-char (point-min))
-   (cond
-    ((re-search-forward
-      (concat "^" (regexp-quote mail-header-separator) "\n") nil t)
-     (match-beginning 0))
-    ((search-forward "\n\n" nil t)
-     (1- (point)))
-    (t
-     (point-max))))
-  (goto-char (point-min)))
-
 (defun message-news-p ()
   "Say whether the current buffer contains a news message."
   (and (not message-this-is-mail)
@@ -1215,7 +1240,6 @@ Point is left at the beginning of the narrowed-to region."
 (defun message-sort-headers-1 ()
   "Sort the buffer as headers using `message-rank' text props."
   (goto-char (point-min))
-  (require 'sort)
   (sort-subr
    nil 'message-next-header
    (lambda ()
@@ -1246,7 +1270,6 @@ Point is left at the beginning of the narrowed-to region."
               (- max rank)
             (1+ max)))))
       (message-sort-headers-1))))
-
 \f
 
 ;;;
@@ -1258,8 +1281,7 @@ Point is left at the beginning of the narrowed-to region."
 (defvar message-mode-map nil)
 
 (unless message-mode-map
-  (setq message-mode-map (make-keymap))
-  (set-keymap-parent message-mode-map text-mode-map)
+  (setq message-mode-map (copy-keymap text-mode-map))
   (define-key message-mode-map "\C-c?" 'describe-mode)
 
   (define-key message-mode-map "\C-c\C-f\C-t" 'message-goto-to)
@@ -1282,7 +1304,6 @@ Point is left at the beginning of the narrowed-to region."
   (define-key message-mode-map "\C-c\C-y" 'message-yank-original)
   (define-key message-mode-map "\C-c\C-q" 'message-fill-yanked-message)
   (define-key message-mode-map "\C-c\C-w" 'message-insert-signature)
-  (define-key message-mode-map "\C-c\M-h" 'message-insert-headers)
   (define-key message-mode-map "\C-c\C-r" 'message-caesar-buffer-body)
   (define-key message-mode-map "\C-c\C-o" 'message-sort-headers)
   (define-key message-mode-map "\C-c\M-r" 'message-rename-buffer)
@@ -1297,9 +1318,10 @@ Point is left at the beginning of the narrowed-to region."
   (define-key message-mode-map "\C-c\C-z" 'message-kill-to-signature)
   (define-key message-mode-map "\M-\r" 'message-newline-and-reformat)
 
-  (define-key message-mode-map "\C-c\C-a" 'mml-attach-file)
+  (define-key message-mode-map "\t" 'message-tab)
 
-  (define-key message-mode-map "\t" 'message-tab))
+  (define-key message-mode-map "\C-x\C-s" 'message-save-drafts)
+  (define-key message-mode-map "\C-xk" 'message-kill-buffer))
 
 (easy-menu-define
  message-mode-menu message-mode-map "Message Menu."
@@ -1316,7 +1338,6 @@ Point is left at the beginning of the narrowed-to region."
    ["Newline and Reformat" message-newline-and-reformat t]
    ["Rename buffer" message-rename-buffer t]
    ["Spellcheck" ispell-message t]
-   ["Attach file as MIME" mml-attach-file t]
    "----"
    ["Send Message" message-send-and-exit t]
    ["Abort Message" message-dont-send t]
@@ -1348,7 +1369,6 @@ Point is left at the beginning of the narrowed-to region."
   "Major mode for editing mail and news to be sent.
 Like Text Mode but with these additional commands:
 C-c C-s  message-send (send the message)    C-c C-c  message-send-and-exit
-C-c C-d  Pospone sending the message        C-c C-k  Kill the message
 C-c C-f  move to a header field (and create it if there isn't):
         C-c C-f C-t  move to To        C-c C-f C-s  move to Subject
         C-c C-f C-c  move to Cc        C-c C-f C-b  move to Bcc
@@ -1364,15 +1384,14 @@ C-c C-w  message-insert-signature (insert `message-signature-file' file).
 C-c C-y  message-yank-original (insert current message, if any).
 C-c C-q  message-fill-yanked-message (fill what was yanked).
 C-c C-e  message-elide-region (elide the text between point and mark).
-C-c C-v  message-delete-not-region (remove the text outside the region).
 C-c C-z  message-kill-to-signature (kill the text up to the signature).
-C-c C-r  message-caesar-buffer-body (rot13 the message body).
-C-c C-a  mml-attach-file (attach a file as MIME)."
+C-c C-r  message-caesar-buffer-body (rot13 the message body)."
   (interactive)
   (kill-all-local-variables)
-  (set (make-local-variable 'message-reply-buffer) nil)
-  (make-local-variable 'message-send-actions)
-  (make-local-variable 'message-exit-actions)
+  (make-local-variable 'message-reply-buffer)
+  (setq message-reply-buffer nil)
+  (make-local-variable 'message-send-actions) 
+  (make-local-variable 'message-exit-actions) 
   (make-local-variable 'message-kill-actions)
   (make-local-variable 'message-postpone-actions)
   (make-local-variable 'message-draft-article)
@@ -1409,12 +1428,15 @@ C-c C-a  mml-attach-file (attach a file as MIME)."
   (setq paragraph-separate paragraph-start)
   (make-local-variable 'message-reply-headers)
   (setq message-reply-headers nil)
-  (make-local-variable 'message-newsreader)
-  (make-local-variable 'message-mailer)
+  (make-local-variable 'message-user-agent)
   (make-local-variable 'message-post-method)
-  (set (make-local-variable 'message-sent-message-via) nil)
-  (set (make-local-variable 'message-checksum) nil)
-  (set (make-local-variable 'message-mime-part) 0)
+  (make-local-variable 'message-sent-message-via)
+  (setq message-sent-message-via nil)
+  (make-local-variable 'message-checksum)
+  (setq message-checksum nil)
+  (make-local-variable 'message-parameter-alist)
+  (setq message-parameter-alist
+       (copy-sequence message-startup-parameter-alist))
   ;;(when (fboundp 'mail-hist-define-keys)
   ;;  (mail-hist-define-keys))
   (when (string-match "XEmacs\\|Lucid" emacs-version)
@@ -1439,10 +1461,6 @@ C-c C-a  mml-attach-file (attach a file as MIME)."
   (setq adaptive-fill-first-line-regexp
        (concat "[ \t]*[-a-z0-9A-Z]*>+[ \t]*\\|"
                adaptive-fill-first-line-regexp))
-  (mm-enable-multibyte)
-  (make-local-variable 'indent-tabs-mode) ;Turn off tabs for indentation.
-  (setq indent-tabs-mode nil)
-  (mml-mode)
   (run-hooks 'text-mode-hook 'message-mode-hook))
 
 \f
@@ -1513,8 +1531,7 @@ C-c C-a  mml-attach-file (attach a file as MIME)."
   (interactive)
   (if (looking-at "[ \t]*\n") (expand-abbrev))
   (goto-char (point-min))
-  (or (search-forward (concat "\n" mail-header-separator "\n") nil t)
-      (search-forward "\n\n" nil t)))
+  (search-forward (concat "\n" mail-header-separator "\n") nil t))
 
 (defun message-goto-eoh ()
   "Move point to the end of the headers."
@@ -1544,8 +1561,7 @@ With the prefix argument FORCE, insert the header anyway."
   (let ((co (message-fetch-reply-field "mail-copies-to")))
     (when (and (null force)
               co
-              (or (equal (downcase co) "never")
-                  (equal (downcase co) "nobody")))
+              (equal (downcase co) "never"))
       (error "The user has requested not to have copies sent via mail")))
   (when (and (message-position-on-field "To")
             (mail-fetch-field "to")
@@ -1619,7 +1635,8 @@ With the prefix argument FORCE, insert the header anyway."
                 (eq force 0))
            (save-excursion
              (goto-char (point-max))
-             (not (re-search-backward message-signature-separator nil t))))
+             (not (re-search-backward
+                   message-signature-separator nil t))))
           ((and (null message-signature)
                 force)
            t)
@@ -1679,10 +1696,9 @@ text was killed."
     ;; Then we translate the region.  Do it this way to retain
     ;; text properties.
     (while (< b e)
-      (when (< (char-after b) 255)
-       (subst-char-in-region
-        b (1+ b) (char-after b)
-        (aref message-caesar-translation-table (char-after b))))
+      (subst-char-in-region
+       b (1+ b) (char-after b)
+       (aref message-caesar-translation-table (char-after b)))
       (incf b))))
 
 (defun message-make-caesar-translation-table (n)
@@ -1758,7 +1774,7 @@ Numeric argument means justify as well."
     (goto-char (point-min))
     (search-forward (concat "\n" mail-header-separator "\n") nil t)
     (let ((fill-prefix message-yank-prefix))
-      (fill-individual-paragraphs (point) (point-max) justifyp))))
+      (fill-individual-paragraphs (point) (point-max) justifyp t))))
 
 (defun message-indent-citation ()
   "Modify text just inserted from a message to be cited.
@@ -1806,6 +1822,7 @@ However, if `message-yank-prefix' is non-nil, insert that prefix on each line."
          (forward-line 1))))
     (goto-char start)))
 
+(defvar gnus-article-copy)
 (defun message-yank-original (&optional arg)
   "Insert the message being replied to, if any.
 Puts point before the text and mark after.
@@ -1817,11 +1834,12 @@ This function uses `message-cite-function' to do the actual citing.
 Just \\[universal-argument] as argument means don't indent, insert no
 prefix, and don't delete any headers."
   (interactive "P")
-  (let ((modified (buffer-modified-p)))
-    (when (and message-reply-buffer
+  (let ((modified (buffer-modified-p))
+       (buffer (message-eval-parameter message-reply-buffer)))
+    (when (and buffer
               message-cite-function)
-      (delete-windows-on message-reply-buffer t)
-      (insert-buffer message-reply-buffer)
+      (delete-windows-on buffer t)
+      (insert-buffer buffer)
       (funcall message-cite-function)
       (message-exchange-point-and-mark)
       (unless (bolp)
@@ -1838,9 +1856,8 @@ prefix, and don't delete any headers."
           (if (listp message-indent-citation-function)
               message-indent-citation-function
             (list message-indent-citation-function)))))
-    (mml-quote-region start end)
     (goto-char end)
-    (when (re-search-backward message-signature-separator start t)
+    (when (re-search-backward "^-- $" start t)
       ;; Also peel off any blank lines before the signature.
       (forward-line -1)
       (while (looking-at "^[ \t]*$")
@@ -1855,20 +1872,18 @@ prefix, and don't delete any headers."
        (insert "\n"))
       (funcall message-citation-line-function))))
 
-(defvar mail-citation-hook)            ;Compiler directive
+(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))
-         (end (mark t))
          (functions
           (when message-indent-citation-function
             (if (listp message-indent-citation-function)
                 message-indent-citation-function
               (list message-indent-citation-function)))))
-      (mml-quote-region start end)
       (goto-char start)
       (while functions
        (funcall (pop functions)))
@@ -1938,11 +1953,18 @@ The text will also be indented the normal way."
 ;;; Sending messages
 ;;;
 
+;; Avoid byte-compile warning.
+(defvar message-encoding-buffer nil)
+(defvar message-edit-buffer nil)
+(defvar message-mime-mode nil)
+
 (defun message-send-and-exit (&optional arg)
   "Send message like `message-send', then, if no errors, exit from mail buffer."
   (interactive "P")
   (let ((buf (current-buffer))
-       (actions message-exit-actions))
+       (actions message-exit-actions)
+       (frame (selected-frame))
+       (org-frame message-original-frame))
     (when (and (message-send arg)
               (buffer-name buf))
       (if message-kill-buffer-on-exit
@@ -1951,6 +1973,7 @@ The text will also be indented the normal way."
        (when (eq buf (current-buffer))
          (message-bury buf)))
       (message-do-actions actions)
+      (message-delete-frame frame org-frame)
       t)))
 
 (defun message-dont-send ()
@@ -1958,19 +1981,61 @@ The text will also be indented the normal way."
   (interactive)
   (set-buffer-modified-p t)
   (save-buffer)
-  (let ((actions message-postpone-actions))
+  (let ((actions message-postpone-actions)
+       (frame (selected-frame))
+       (org-frame message-original-frame))
     (message-bury (current-buffer))
-    (message-do-actions actions)))
+    (message-do-actions actions)
+    (message-delete-frame frame org-frame)))
 
 (defun message-kill-buffer ()
   "Kill the current buffer."
   (interactive)
   (when (or (not (buffer-modified-p))
-           (yes-or-no-p "Message modified; kill anyway? "))
-    (let ((actions message-kill-actions))
+           (eq t message-kill-buffer-query-function)
+           (funcall message-kill-buffer-query-function
+                    "The buffer modified; kill anyway? "))
+    (let ((actions message-kill-actions)
+         (frame (selected-frame))
+         (org-frame message-original-frame))
       (setq buffer-file-name nil)
       (kill-buffer (current-buffer))
-      (message-do-actions actions))))
+      (message-do-actions actions)
+      (message-delete-frame frame org-frame)))
+  (message ""))
+
+(defun message-mimic-kill-buffer ()
+  "Kill the current buffer with query."
+  (interactive)
+  (unless (eq 'message-mode major-mode)
+    (error "%s must be invoked from a message buffer." this-command))
+  (let ((command this-command)
+       (bufname (read-buffer (format "Kill buffer: (default %s) "
+                                     (buffer-name)))))
+    (if (or (not bufname)
+           (string-equal bufname "")
+           (string-equal bufname (buffer-name)))
+       (message-kill-buffer)
+      (message "%s must be invoked only for the current buffer." command))))
+
+(defun message-delete-frame (frame org-frame)
+  "Delete frame for editing message."
+  (when (and (or (and (featurep 'xemacs)
+                     (not (eq 'tty (device-type))))
+                window-system
+                (>= emacs-major-version 20))
+            (or (and (eq message-delete-frame-on-exit t)
+                     (select-frame frame)
+                     (or (eq frame org-frame)
+                         (prog1
+                             (y-or-n-p "Delete this frame?")
+                           (message ""))))
+                (and (eq message-delete-frame-on-exit 'ask)
+                     (select-frame frame)
+                     (prog1
+                         (y-or-n-p "Delete this frame?")
+                       (message "")))))
+    (delete-frame frame)))
 
 (defun message-bury (buffer)
   "Bury this mail buffer."
@@ -1989,45 +2054,55 @@ or error messages, and inform user.
 Otherwise any failure is reported in a message back to
 the user from the mailer."
   (interactive "P")
-  ;; Make it possible to undo the coming changes.
-  (undo-boundary)
-  (let ((inhibit-read-only t))
-    (put-text-property (point-min) (point-max) 'read-only nil))
-  (message-fix-before-sending)
-  (run-hooks 'message-send-hook)
-  (message "Sending...")
-  (let ((alist message-send-method-alist)
-       (success t)
-       elem sent)
-    (while (and success
-               (setq elem (pop alist)))
-      (when (and (or (not (funcall (cadr elem)))
-                    (and (or (not (memq (car elem)
-                                        message-sent-message-via))
-                             (y-or-n-p
-                              (format
-                               "Already sent message via %s; resend? "
-                               (car elem))))
-                         (setq success (funcall (caddr elem) arg)))))
-       (setq sent t)))
-    (unless sent
-      (error "No methods specified to send by"))
-    (when (and success sent)
-      (message-do-fcc)
-      ;;(when (fboundp 'mail-hist-put-headers-into-history)
-      ;; (mail-hist-put-headers-into-history))
+  ;; Disabled test.
+  (when (or (buffer-modified-p)
+           (message-check-element 'unchanged)
+           (y-or-n-p "No changes in the buffer; really send? "))
+    ;; Make it possible to undo the coming changes.
+    (undo-boundary)
+    (let ((inhibit-read-only t))
+      (put-text-property (point-min) (point-max) 'read-only nil))
+    (run-hooks 'message-send-hook)
+    (message "Sending...")
+    (let ((message-encoding-buffer
+          (message-generate-new-buffer-clone-locals " message encoding"))
+         (message-edit-buffer (current-buffer))
+         (message-mime-mode mime-edit-mode-flag)
+         (alist message-send-method-alist)
+         (success t)
+         elem sent)
       (save-excursion
-       (run-hooks 'message-sent-hook))
-      (message "Sending...done")
-      ;; Mark the buffer as unmodified and delete auto-save.
-      (set-buffer-modified-p nil)
-      (delete-auto-save-file-if-necessary t)
-      (message-disassociate-draft)
-      ;; Delete other mail buffers and stuff.
-      (message-do-send-housekeeping)
-      (message-do-actions message-send-actions)
-      ;; Return success.
-      t)))
+       (set-buffer message-encoding-buffer)
+       (erase-buffer)
+       (insert-buffer message-edit-buffer)
+       (funcall message-encode-function)
+       (message-fix-before-sending)
+       (while (and success
+                   (setq elem (pop alist)))
+         (when (and (or (not (funcall (cadr elem)))
+                        (and (or (not (memq (car elem)
+                                            message-sent-message-via))
+                                 (y-or-n-p
+                                  (format
+                                   "Already sent message via %s; resend? "
+                                   (car elem))))
+                             (setq success (funcall (caddr elem) arg)))))
+           (setq sent t))))
+      (when (and success sent)
+       (message-do-fcc)
+       ;;(when (fboundp 'mail-hist-put-headers-into-history)
+       ;; (mail-hist-put-headers-into-history))
+       (run-hooks 'message-sent-hook)
+       (message "Sending...done")
+       ;; Mark the buffer as unmodified and delete auto-save.
+       (set-buffer-modified-p nil)
+       (delete-auto-save-file-if-necessary t)
+       (message-disassociate-draft)
+       ;; Delete other mail buffers and stuff.
+       (message-do-send-housekeeping)
+       (message-do-actions message-send-actions)
+       ;; Return success.
+       t))))
 
 (defun message-send-via-mail (arg)
   "Send the current message via mail."
@@ -2035,16 +2110,7 @@ the user from the mailer."
 
 (defun message-send-via-news (arg)
   "Send the current message via news."
-  (funcall message-send-news-function arg))
-
-(defmacro message-check (type &rest forms)
-  "Eval FORMS if TYPE is to be checked."
-  `(or (message-check-element ,type)
-       (save-excursion
-        ,@forms)))
-
-(put 'message-check 'lisp-indent-function 1)
-(put 'message-check 'edebug-form-spec '(form body))
+  (message-send-news arg))
 
 (defun message-fix-before-sending ()
   "Do various things to make the message nice before sending it."
@@ -2052,13 +2118,12 @@ the user from the mailer."
   (goto-char (point-max))
   (unless (bolp)
     (insert "\n"))
-  ;; Delete all invisible text.
-  (message-check 'invisible-text
-    (when (text-property-any (point-min) (point-max) 'invisible t)
-      (put-text-property (point-min) (point-max) 'invisible nil)
-      (unless (yes-or-no-p
-              "Invisible text found and made visible; continue posting? ")
-       (error "Invisible text found and made visible")))))
+  ;; Make all invisible text visible.
+  ;;(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")))
+  )
 
 (defun message-add-action (action &rest types)
   "Add ACTION to be performed when doing an exit of type TYPES."
@@ -2085,8 +2150,7 @@ the user from the mailer."
   (require 'mail-utils)
   (let ((tembuf (message-generate-new-buffer-clone-locals " message temp"))
        (case-fold-search nil)
-       (news (message-news-p))
-       (mailbuf (current-buffer)))
+       (news (message-news-p)))
     (save-restriction
       (message-narrow-to-headers)
       ;; Insert some headers.
@@ -2095,37 +2159,38 @@ the user from the mailer."
        (message-generate-headers message-required-mail-headers))
       ;; Let the user do all of the above.
       (run-hooks 'message-header-hook))
-    (unwind-protect
-       (save-excursion
-         (set-buffer tembuf)
-         (erase-buffer)
-         ;; Avoid copying text props.
-         (insert (format
-                  "%s" (save-excursion
-                         (set-buffer mailbuf)
-                         (buffer-string))))
-         ;; Remove some headers.
-         (message-encode-message-body)
-         (save-restriction
-           (message-narrow-to-headers)
-           ;; We (re)generate the Lines header.
-           (when (memq 'Lines message-required-mail-headers)
-             (message-generate-headers '(Lines)))
+    (if (not (message-check-mail-syntax))
+       (progn
+         (message "")
+         ;;(message "Posting not performed")
+         nil)
+      (unwind-protect
+         (save-excursion
+           (set-buffer tembuf)
+           (erase-buffer)
+           (insert-buffer message-encoding-buffer)
            ;; Remove some headers.
-           (message-remove-header message-ignored-mail-headers t)
-           (mail-encode-encoded-word-buffer))
-         (goto-char (point-max))
-         ;; require one newline at the end.
-         (or (= (preceding-char) ?\n)
-             (insert ?\n))
-         (when (and news
-                    (or (message-fetch-field "cc")
-                        (message-fetch-field "to")))
-           (message-insert-courtesy-copy))
-         (funcall message-send-mail-function))
-      (kill-buffer tembuf))
-    (set-buffer mailbuf)
-    (push 'mail message-sent-message-via)))
+           (save-restriction
+             (message-narrow-to-headers)
+             (message-remove-header message-ignored-mail-headers t))
+           (goto-char (point-max))
+           ;; require one newline at the end.
+           (or (= (preceding-char) ?\n)
+               (insert ?\n))
+           (when (and news
+                      (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 message-edit-buffer)
+      (push 'mail message-sent-message-via))))
 
 (defun message-send-mail-with-sendmail ()
   "Send off the prepared buffer with sendmail."
@@ -2154,31 +2219,31 @@ the user from the mailer."
        (save-excursion
          (set-buffer errbuf)
          (erase-buffer))))
-    (let ((default-directory "/")
-         (coding-system-for-write message-send-coding-system))
-      (apply 'call-process-region
-            (append (list (point-min) (point-max)
-                          (if (boundp 'sendmail-program)
-                              sendmail-program
-                            "/usr/lib/sendmail")
-                          nil errbuf nil "-oi")
-                    ;; Always specify who from,
-                    ;; since some systems have broken sendmails.
-                    ;; But some systems are more broken with -f, so
-                    ;; we'll let users override this.
-                    (if (null message-sendmail-f-is-evil)
-                        (list "-f" (user-login-name)))
-                    ;; These mean "report errors by mail"
-                    ;; and "deliver in background".
-                    (if (null message-interactive) '("-oem" "-odb"))
-                    ;; Get the addresses from the message
-                    ;; unless this is a resend.
-                    ;; We must not do that for a resend
-                    ;; because we would find the original addresses.
-                    ;; For a resend, include the specific addresses.
-                    (if resend-to-addresses
-                        (list resend-to-addresses)
-                      '("-t")))))
+    (let ((default-directory "/"))
+      (as-binary-process
+       (apply 'call-process-region
+             (append (list (point-min) (point-max)
+                           (if (boundp 'sendmail-program)
+                               sendmail-program
+                             "/usr/lib/sendmail")
+                           nil errbuf nil "-oi")
+                     ;; Always specify who from,
+                     ;; since some systems have broken sendmails.
+                     ;; But some systems are more broken with -f, so
+                     ;; we'll let users override this.
+                     (if (null message-sendmail-f-is-evil)
+                         (list "-f" (user-login-name)))
+                     ;; These mean "report errors by mail"
+                     ;; and "deliver in background".
+                     (if (null message-interactive) '("-oem" "-odb"))
+                     ;; Get the addresses from the message
+                     ;; unless this is a resend.
+                     ;; We must not do that for a resend
+                     ;; because we would find the original addresses.
+                     ;; For a resend, include the specific addresses.
+                     (if resend-to-addresses
+                         (list resend-to-addresses)
+                       '("-t"))))))
     (when message-interactive
       (save-excursion
        (set-buffer errbuf)
@@ -2203,28 +2268,28 @@ to find out how to use this."
   (run-hooks 'message-send-mail-hook)
   ;; send the message
   (case
-      (let ((coding-system-for-write message-send-coding-system))
-       (apply
-        'call-process-region 1 (point-max) message-qmail-inject-program
-        nil nil nil
-        ;; qmail-inject's default behaviour is to look for addresses on the
-        ;; command line; if there're none, it scans the headers.
-        ;; yes, it does The Right Thing w.r.t. Resent-To and it's kin.
-        ;;
-        ;; in general, ALL of qmail-inject's defaults are perfect for simply
-        ;; reading a formatted (i. e., at least a To: or Resent-To header)
-        ;; message from stdin.
-        ;;
-        ;; qmail also has the advantage of not having been raped by
-        ;; various vendors, so we don't have to allow for that, either --
-        ;; compare this with message-send-mail-with-sendmail and weep
-        ;; for sendmail's lost innocence.
-        ;;
-        ;; all this is way cool coz it lets us keep the arguments entirely
-        ;; free for -inject-arguments -- a big win for the user and for us
-        ;; since we don't have to play that double-guessing game and the user
-        ;; gets full control (no gestapo'ish -f's, for instance).  --sj
-        message-qmail-inject-args))
+      (as-binary-process
+       (apply
+       'call-process-region 1 (point-max) message-qmail-inject-program
+       nil nil nil
+       ;; qmail-inject's default behaviour is to look for addresses on the
+       ;; command line; if there're none, it scans the headers.
+       ;; yes, it does The Right Thing w.r.t. Resent-To and it's kin.
+       ;;
+       ;; in general, ALL of qmail-inject's defaults are perfect for simply
+       ;; reading a formatted (i. e., at least a To: or Resent-To header)
+       ;; message from stdin.
+       ;;
+       ;; qmail also has the advantage of not having been raped by
+       ;; various vendors, so we don't have to allow for that, either --
+       ;; compare this with message-send-mail-with-sendmail and weep
+       ;; for sendmail's lost innocence.
+       ;;
+       ;; all this is way cool coz it lets us keep the arguments entirely
+       ;; free for -inject-arguments -- a big win for the user and for us
+       ;; since we don't have to play that double-guessing game and the user
+       ;; gets full control (no gestapo'ish -f's, for instance).  --sj
+       message-qmail-inject-args))
     ;; qmail-inject doesn't say anything on it's stdout/stderr,
     ;; we have to look at the retval instead
     (0 nil)
@@ -2251,78 +2316,238 @@ to find out how to use this."
     ;; Pass it on to mh.
     (mh-send-letter)))
 
+(defun message-send-mail-with-smtp ()
+  "Send the prepared message buffer with SMTP."
+  (require 'smtp)
+  (let ((errbuf (if mail-interactive
+                   (generate-new-buffer " smtp errors")
+                 0))
+       (case-fold-search nil)
+       resend-to-addresses
+       delimline)
+    (unwind-protect
+       (save-excursion
+         (goto-char (point-max))
+         ;; require one newline at the end.
+         (or (= (preceding-char) ?\n)
+             (insert ?\n))
+         ;; Change header-delimiter to be what sendmail expects.
+         (goto-char (point-min))
+         (re-search-forward
+          (concat "^" (regexp-quote mail-header-separator) "\n"))
+         (replace-match "\n")
+         (backward-char 1)
+         (setq delimline (point-marker))
+         (run-hooks 'message-send-mail-hook)
+         ;; (sendmail-synch-aliases)
+          ;; (if mail-aliases
+          ;;     (expand-mail-aliases (point-min) delimline))
+         (goto-char (point-min))
+         ;; ignore any blank lines in the header
+         (while (and (re-search-forward "\n\n\n*" delimline t)
+                     (< (point) delimline))
+           (replace-match "\n"))
+         (let ((case-fold-search t))
+           (goto-char (point-min))
+           (goto-char (point-min))
+           (while (re-search-forward "^Resent-to:" delimline t)
+             (setq resend-to-addresses
+                   (save-restriction
+                     (narrow-to-region (point)
+                                       (save-excursion
+                                         (end-of-line)
+                                         (point)))
+                     (append (mail-parse-comma-list)
+                             resend-to-addresses))))
+;;; Apparently this causes a duplicate Sender.
+;;;        ;; If the From is different than current user, insert Sender.
+;;;        (goto-char (point-min))
+;;;        (and (re-search-forward "^From:"  delimline t)
+;;;             (progn
+;;;               (require 'mail-utils)
+;;;               (not (string-equal
+;;;                     (mail-strip-quoted-names
+;;;                      (save-restriction
+;;;                        (narrow-to-region (point-min) delimline)
+;;;                        (mail-fetch-field "From")))
+;;;                     (user-login-name))))
+;;;             (progn
+;;;               (forward-line 1)
+;;;               (insert "Sender: " (user-login-name) "\n")))
+           ;; Don't send out a blank subject line
+           (goto-char (point-min))
+           (if (re-search-forward "^Subject:[ \t]*\n" delimline t)
+               (replace-match ""))
+           ;; Put the "From:" field in unless for some odd reason
+           ;; they put one in themselves.
+           (goto-char (point-min))
+           (if (not (re-search-forward "^From:" delimline t))
+               (let* ((login user-mail-address)
+                      (fullname (user-full-name)))
+                 (cond ((eq mail-from-style 'angles)
+                        (insert "From: " fullname)
+                        (let ((fullname-start (+ (point-min) 6))
+                              (fullname-end (point-marker)))
+                          (goto-char fullname-start)
+                          ;; Look for a character that cannot appear unquoted
+                          ;; according to RFC 822.
+                          (if (re-search-forward "[^- !#-'*+/-9=?A-Z^-~]"
+                                                 fullname-end 1)
+                              (progn
+                                ;; Quote fullname, escaping specials.
+                                (goto-char fullname-start)
+                                (insert "\"")
+                                (while (re-search-forward "[\"\\]"
+                                                          fullname-end 1)
+                                  (replace-match "\\\\\\&" t))
+                                (insert "\""))))
+                        (insert " <" login ">\n"))
+                       ((eq mail-from-style 'parens)
+                        (insert "From: " login " (")
+                        (let ((fullname-start (point)))
+                          (insert fullname)
+                          (let ((fullname-end (point-marker)))
+                            (goto-char fullname-start)
+                            ;; RFC 822 says \ and nonmatching parentheses
+                            ;; must be escaped in comments.
+                            ;; Escape every instance of ()\ ...
+                            (while (re-search-forward "[()\\]" fullname-end 1)
+                              (replace-match "\\\\\\&" t))
+                            ;; ... then undo escaping of matching parentheses,
+                            ;; including matching nested parentheses.
+                            (goto-char fullname-start)
+                            (while (re-search-forward 
+                                    "\\(\\=\\|[^\\]\\(\\\\\\\\\\)*\\)\\\\(\\(\\([^\\]\\|\\\\\\\\\\)*\\)\\\\)"
+                                    fullname-end 1)
+                              (replace-match "\\1(\\3)" t)
+                              (goto-char fullname-start))))
+                        (insert ")\n"))
+                       ((null mail-from-style)
+                        (insert "From: " login "\n")))))
+           ;; Insert an extra newline if we need it to work around
+           ;; Sun's bug that swallows newlines.
+           (goto-char (1+ delimline))
+           (if (eval mail-mailer-swallows-blank-line)
+               (newline))
+           ;; Find and handle any FCC fields.
+           (goto-char (point-min))
+           (if (re-search-forward "^FCC:" delimline t)
+               (mail-do-fcc delimline))
+           (if mail-interactive
+               (save-excursion
+                 (set-buffer errbuf)
+                 (erase-buffer))))
+         ;;
+         ;;
+         ;;
+         (let ((recipient-address-list
+                (or resend-to-addresses
+                    (smtp-deduce-address-list (current-buffer)
+                                              (point-min) delimline))))
+           (smtp-do-bcc delimline)
+           
+           (if recipient-address-list
+               (if (not (smtp-via-smtp recipient-address-list
+                                       (current-buffer)))
+                   (error "Sending failed; SMTP protocol error"))
+             (error "Sending failed; no recipients"))
+           ))
+      (if (bufferp errbuf)
+         (kill-buffer errbuf)))))
+
 (defun message-send-news (&optional arg)
   (let ((tembuf (message-generate-new-buffer-clone-locals " *message temp*"))
        (case-fold-search nil)
        (method (if (message-functionp message-post-method)
                    (funcall message-post-method arg)
                  message-post-method))
-       (messbuf (current-buffer))
        (message-syntax-checks
         (if arg
             (cons '(existing-newsgroups . disabled)
                   message-syntax-checks)
           message-syntax-checks))
        result)
-    (if (not (message-check-news-body-syntax))
-       nil
-      (save-restriction
-       (message-narrow-to-headers)
-       ;; Insert some headers.
-       (message-generate-headers message-required-news-headers)
-       ;; Let the user do all of the above.
-       (run-hooks 'message-header-hook))
-      (message-cleanup-headers)
-      (if (not (message-check-news-syntax))
-         nil
-       (unwind-protect
-           (save-excursion
-             (set-buffer tembuf)
-             (buffer-disable-undo)
-             (erase-buffer)
-             ;; Avoid copying text props.
-             (insert (format
-                      "%s" (save-excursion
-                             (set-buffer messbuf)
-                             (buffer-string))))
-             (message-encode-message-body)
+    (save-restriction
+      (message-narrow-to-headers)
+      ;; Insert some headers.
+      (message-generate-headers message-required-news-headers)
+      ;; Let the user do all of the above.
+      (run-hooks 'message-header-hook))
+    (message-cleanup-headers)
+    (if (not (message-check-news-syntax))
+       (progn
+         ;;(message "Posting not performed")
+         nil)
+      (unwind-protect
+         (save-excursion
+           (set-buffer tembuf)
+           (buffer-disable-undo (current-buffer))
+           (erase-buffer)
+           (insert-buffer message-encoding-buffer)
+           ;; Remove some headers.
+           (save-restriction
+             (message-narrow-to-headers)
              ;; Remove some headers.
-             (save-restriction
-               (message-narrow-to-headers)
-               ;; We (re)generate the Lines header.
-               (when (memq 'Lines message-required-mail-headers)
-                 (message-generate-headers '(Lines)))
-               ;; Remove some headers.
-               (message-remove-header message-ignored-news-headers t)
-               (let ((mail-parse-charset message-posting-charset))
-                 (mail-encode-encoded-word-buffer)))
-             (goto-char (point-max))
-             ;; 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)
-             (gnus-open-server method)
-           (setq result (let ((mail-header-separator ""))
-                          (gnus-request-post method))))
-         (kill-buffer tembuf))
-       (set-buffer messbuf)
-       (if result
-           (push 'news message-sent-message-via)
-         (message "Couldn't send message via news: %s"
-                  (nnheader-get-report (car method)))
-         nil)))))
+             (message-remove-header message-ignored-news-headers t))
+           (goto-char (point-max))
+           ;; require one newline at the end.
+           (or (= (preceding-char) ?\n)
+               (insert ?\n))
+           (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 message-edit-buffer)
+      (if result
+         (push 'news message-sent-message-via)
+       (message "Couldn't send message via news: %s"
+                (nnheader-get-report (car method)))
+       nil))))
+
+;; 1997-09-29 by MORIOKA Tomohiko
+(defun message-send-news-with-gnus (method)
+  (let ((case-fold-search t))
+    ;; Remove the delimiter.
+    (goto-char (point-min))
+    (re-search-forward
+     (concat "^" (regexp-quote mail-header-separator) "\n"))
+    (replace-match "\n")
+    (backward-char 1)
+    (run-hooks 'message-send-news-hook)
+    ;;(require (car method))
+    ;;(funcall (intern (format "%s-open-server" (car method)))
+    ;;(cadr method) (cddr method))
+    ;;(setq result
+    ;;   (funcall (intern (format "%s-request-post" (car method)))
+    ;;            (cadr method)))
+    (gnus-open-server method)
+    (gnus-request-post method)
+    ))
 
 ;;;
 ;;; Header generation & syntax checking.
 ;;;
 
+(defmacro message-check (type &rest forms)
+  "Eval FORMS if TYPE is to be checked."
+  `(or (message-check-element ,type)
+       (save-excursion
+        ,@forms)))
+
+(put 'message-check 'lisp-indent-function 1)
+(put 'message-check 'edebug-form-spec '(form body))
+
 (defun message-check-element (type)
   "Returns non-nil if this type is not to be checked."
   (if (eq message-syntax-checks 'dont-check-for-anything-just-trust-me)
@@ -2336,23 +2561,19 @@ to find out how to use this."
   (save-excursion
     (save-restriction
       (widen)
-      ;; We narrow to the headers and check them first.
-      (save-excursion
-       (save-restriction
-         (message-narrow-to-headers)
-         (message-check-news-header-syntax))))))
+      (and
+       ;; We narrow to the headers and check them first.
+       (save-excursion
+        (save-restriction
+          (message-narrow-to-headers)
+          (message-check-news-header-syntax)))
+       ;; Check the body.
+       (save-excursion
+        (set-buffer message-edit-buffer)
+        (message-check-news-body-syntax))))))
 
 (defun message-check-news-header-syntax ()
   (and
-   ;; Check Newsgroups header.
-   (message-check 'newsgroyps
-     (let ((group (message-fetch-field "newsgroups")))
-       (or
-       (and group
-            (not (string-match "\\`[ \t]*\\'" group)))
-       (ignore
-        (message
-         "The newsgroups field is empty or missing.  Posting is denied.")))))
    ;; Check the Subject header.
    (message-check 'subject
      (let* ((case-fold-search t)
@@ -2515,15 +2736,12 @@ to find out how to use this."
    (message-check 'from
      (let* ((case-fold-search t)
            (from (message-fetch-field "from"))
-           ad)
+           (ad (nth 1 (mail-extract-address-components from))))
        (cond
        ((not from)
         (message "There is no From line.  Posting is denied.")
         nil)
-       ((or (not (string-match
-                  "@[^\\.]*\\."
-                  (setq ad (nth 1 (mail-extract-address-components
-                                   from))))) ;larsi@ifi
+       ((or (not (string-match "@[^\\.]*\\." ad)) ;larsi@ifi
             (string-match "\\.\\." ad) ;larsi@ifi..uio
             (string-match "@\\." ad)   ;larsi@.ifi.uio
             (string-match "\\.$" ad)   ;larsi@ifi.uio.
@@ -2564,10 +2782,13 @@ to find out how to use this."
           (y-or-n-p "Empty article.  Really post? "))))
    ;; Check for control characters.
    (message-check 'control-chars
-     (if (re-search-forward "[\000-\007\013\015-\032\034-\037\200-\237]" nil t)
+     (if (re-search-forward "[\000-\007\013\015-\037\200-\237]" nil t)
         (y-or-n-p
          "The article contains control characters.  Really post? ")
        t))
+   ;; Check 8bit characters.
+   (message-check '8bit
+     (message-check-8bit))
    ;; Check excessive size.
    (message-check 'size
      (if (> (buffer-size) 60000)
@@ -2585,12 +2806,63 @@ to find out how to use this."
    ;; Check the length of the signature.
    (message-check 'signature
      (goto-char (point-max))
-     (if (> (count-lines (point) (point-max)) 5)
-        (y-or-n-p
-         (format
-          "Your .sig is %d lines; it should be max 4.  Really post? "
-          (1- (count-lines (point) (point-max)))))
-       t))))
+     (if (or (not (re-search-backward message-signature-separator nil t))
+            (search-forward message-forward-end-separator nil t))
+        t
+       (if (> (count-lines (point) (point-max)) 5)
+          (y-or-n-p
+           (format
+            "Your .sig is %d lines; it should be max 4.  Really post? "
+            (1- (count-lines (point) (point-max)))))
+        t)))))
+
+(defun message-check-mail-syntax ()
+  "Check the syntax of the message."
+  (save-excursion
+    (save-restriction
+      (widen)
+      (and
+       ;; We narrow to the headers and check them first.
+       (save-excursion
+        (save-restriction
+          (message-narrow-to-headers)
+          (message-check-mail-header-syntax)))
+       ;; Check the body.
+       (save-excursion
+        (set-buffer message-edit-buffer)
+        (message-check-mail-body-syntax))))))
+
+(defun message-check-mail-header-syntax ()
+  t)
+
+(defun message-check-mail-body-syntax ()
+  (and
+   ;; Check 8bit characters.
+   (message-check '8bit
+     (message-check-8bit)
+     )))
+
+(defun message-check-8bit ()
+  "Check the article contains 8bit characters."
+  (save-excursion
+    (set-buffer message-encoding-buffer)
+    (message-narrow-to-headers)
+    (let* ((case-fold-search t)
+          (field-value (message-fetch-field "content-transfer-encoding")))
+      (if (and field-value
+              (member (downcase field-value) message-8bit-encoding-list))
+         t
+       (widen)
+       (set-buffer (get-buffer-create " message syntax"))
+       (erase-buffer)
+       (goto-char (point-min))
+       (set-buffer-multibyte nil)
+       (insert-buffer message-encoding-buffer)
+       (goto-char (point-min))
+       (if (re-search-forward "[^\x00-\x7f]" nil t)
+           (y-or-n-p
+            "The article contains 8bit characters.  Really post? ")
+         t)))))
 
 (defun message-checksum ()
   "Return a \"checksum\" for the current buffer."
@@ -2602,19 +2874,20 @@ to find out how to use this."
       (while (not (eobp))
        (when (not (looking-at "[ \t\n]"))
          (setq sum (logxor (ash sum 1) (if (natnump sum) 0 1)
-                           (char-after))))
+                           (following-char))))
        (forward-char 1)))
     sum))
 
 (defun message-do-fcc ()
   "Process Fcc headers in the current buffer."
   (let ((case-fold-search t)
-       (buf (current-buffer))
+       (coding-system-for-write 'raw-text)
        list file)
     (save-excursion
       (set-buffer (get-buffer-create " *message temp*"))
+      (buffer-disable-undo (current-buffer))
       (erase-buffer)
-      (insert-buffer-substring buf)
+      (insert-buffer-substring message-encoding-buffer)
       (save-restriction
        (message-narrow-to-headers)
        (while (setq file (message-fetch-field "fcc"))
@@ -2649,7 +2922,7 @@ to find out how to use this."
   "Append this article to Unix/babyl mail file.."
   (if (and (file-readable-p filename)
           (mail-file-babyl-p filename))
-      (rmail-output-to-rmail-file filename t)
+      (gnus-output-to-rmail filename t)
     (gnus-output-to-mail filename t)))
 
 (defun message-cleanup-headers ()
@@ -2684,24 +2957,11 @@ to find out how to use this."
        (when (re-search-forward ",+$" nil t)
          (replace-match "" t t))))))
 
-(defun message-make-date (&optional now)
-  "Make a valid data header.
-If NOW, use that time instead."
-  (let* ((now (or now (current-time)))
-        (zone (nth 8 (decode-time now)))
-        (sign "+"))
-    (when (< zone 0)
-      (setq sign "-")
-      (setq zone (- zone)))
-    (concat
-     (format-time-string "%d" now)
-     ;; The month name of the %b spec is locale-specific.  Pfff.
-     (format " %s "
-            (capitalize (car (rassoc (nth 4 (decode-time now))
-                                     parse-time-months))))
-     (format-time-string "%Y %H:%M:%S " now)
-     ;; We do all of this because XEmacs doesn't have the %z spec.
-     (format "%s%02d%02d" sign (/ zone 3600) (% zone 3600)))))
+(defun message-make-date ()
+  "Make a valid data header."
+  (let ((now (current-time)))
+    (timezone-make-date-arpa-standard
+     (current-time-string now) (current-time-zone now))))
 
 (defun message-make-message-id ()
   "Make a unique Message-ID."
@@ -2800,17 +3060,21 @@ If NOW, use that time instead."
   "Return the In-Reply-To header for this message."
   (when message-reply-headers
     (let ((from (mail-header-from message-reply-headers))
-         (date (mail-header-date message-reply-headers)))
-      (when from
-       (let ((stop-pos
-              (string-match "  *at \\|  *@ \\| *(\\| *<" from)))
-         (concat (if (and stop-pos
-                          (not (zerop stop-pos)))
-                     (substring from 0 stop-pos) from)
-                 "'s message of \""
-                 (if (or (not date) (string= date ""))
-                     "(unknown date)" date)
-                 "\""))))))
+         (date (mail-header-date message-reply-headers))
+         (msg-id (mail-header-message-id message-reply-headers)))
+      (when msg-id
+       (concat msg-id
+               (when from
+                 (let ((stop-pos
+                        (string-match "  *at \\|  *@ \\| *(\\| *<" from)))
+                   (concat " ("
+                           (if (and stop-pos
+                                    (not (zerop stop-pos)))
+                               (substring from 0 stop-pos) from)
+                           "'s message of \""
+                           (if (or (not date) (string= date ""))
+                               "(unknown date)" date)
+                           "\")"))))))))
 
 (defun message-make-distribution ()
   "Make a Distribution header."
@@ -2826,7 +3090,9 @@ If NOW, use that time instead."
     ;; Add the future to current.
     (setcar current (+ (car current) (round (/ future (expt 2 16)))))
     (setcar (cdr current) (+ (nth 1 current) (% (round future) (expt 2 16))))
-    (message-make-date current)))
+    ;; Return the date in the future in UT.
+    (timezone-make-date-arpa-standard
+     (current-time-string current) (current-time-zone current) '(0 "UT"))))
 
 (defun message-make-path ()
   "Return uucp path."
@@ -2948,6 +3214,24 @@ give as trustworthy answer as possible."
   (or mail-host-address
       (message-make-fqdn)))
 
+(defun message-make-user-agent ()
+  "Return user-agent info."
+  (if message-user-agent
+      (save-excursion
+       (goto-char (point-min))
+       (let ((case-fold-search t)
+             user-agent beg p end)
+         (if (re-search-forward "^User-Agent:[ \t]*" nil t)
+             (progn
+               (setq beg (match-beginning 0)
+                     p (match-end 0)
+                     end (std11-field-end)
+                     user-agent (buffer-substring p end))
+               (delete-region beg (1+ end))
+               (concat message-user-agent " " user-agent)
+               )
+           message-user-agent)))))
+
 (defun message-generate-headers (headers)
   "Prepare article HEADERS.
 Headers already prepared in the buffer are not modified."
@@ -2964,7 +3248,7 @@ Headers already prepared in the buffer are not modified."
           (To nil)
           (Distribution (message-make-distribution))
           (Lines (message-make-lines))
-          (User-Agent message-newsreader)
+          (User-Agent (message-make-user-agent))
           (Expires (message-make-expires))
           (case-fold-search t)
           header value elem)
@@ -3003,9 +3287,9 @@ Headers already prepared in the buffer are not modified."
                  (progn
                    ;; The header was found.  We insert a space after the
                    ;; colon, if there is none.
-                   (if (/= (char-after) ? ) (insert " ") (forward-char 1))
+                   (if (/= (following-char) ? ) (insert " ") (forward-char 1))
                    ;; Find out whether the header is empty...
-                   (looking-at "[ \t]*\n[^ \t]")))
+                   (looking-at "[ \t]*$")))
          ;; So we find out what value we should insert.
          (setq value
                (cond
@@ -3112,7 +3396,7 @@ Headers already prepared in the buffer are not modified."
       (goto-char (point-min))
       (while (not (eobp))
        (skip-chars-forward "^,\"" (point-max))
-       (if (or (eq (char-after) ?,)
+       (if (or (= (following-char) ?,)
                (eobp))
            (when (not quoted)
              (if (and (> (current-column) 78)
@@ -3130,6 +3414,13 @@ Headers already prepared in the buffer are not modified."
     (widen)
     (forward-line 1)))
 
+(defun message-fill-references (header value)
+  (insert (capitalize (symbol-name header))
+         ": "
+         (std11-fill-msg-id-list-string
+          (if (consp value) (car value) value))
+         "\n"))
+
 (defun message-fill-header (header value)
   (let ((begin (point))
        (fill-column 990)
@@ -3156,7 +3447,7 @@ Headers already prepared in the buffer are not modified."
   (let ((max 988)
        (cut 4)
        refs)
-    (with-temp-buffer
+    (nnheader-temp-write nil
       (insert references)
       (goto-char (point-min))
       (while (re-search-forward "<[^>]+>" nil t)
@@ -3177,7 +3468,7 @@ Headers already prepared in the buffer are not modified."
     (search-backward ":" )
     (widen)
     (forward-char 1)
-    (if (eq (char-after) ? )
+    (if (= (following-char) ? )
        (forward-char 1)
       (insert " ")))
    (t
@@ -3191,24 +3482,14 @@ Headers already prepared in the buffer are not modified."
 (defun message-buffer-name (type &optional to group)
   "Return a new (unique) buffer name based on TYPE and TO."
   (cond
-   ;; Generate a new buffer name The Message Way.
-   ((eq message-generate-new-buffers 'unique)
-    (generate-new-buffer-name
-     (concat "*" type
-            (if to
-                (concat " to "
-                        (or (car (mail-extract-address-components to))
-                            to) "")
-              "")
-            (if (and group (not (string= group ""))) (concat " on " group) "")
-            "*")))
    ;; Check whether `message-generate-new-buffers' is a function,
    ;; and if so, call it.
    ((message-functionp message-generate-new-buffers)
     (funcall message-generate-new-buffers type to group))
-   ((eq message-generate-new-buffers 'unsent)
+   ;; Generate a new buffer name The Message Way.
+   (message-generate-new-buffers
     (generate-new-buffer-name
-     (concat "*unsent " type
+     (concat "*" type
             (if to
                 (concat " to "
                         (or (car (mail-extract-address-components to))
@@ -3222,7 +3503,24 @@ Headers already prepared in the buffer are not modified."
 
 (defun message-pop-to-buffer (name)
   "Pop to buffer NAME, and warn if it already exists and is modified."
-  (let ((buffer (get-buffer name)))
+  (let ((pop-up-frames pop-up-frames)
+       (special-display-buffer-names special-display-buffer-names)
+       (special-display-regexps special-display-regexps)
+       (same-window-buffer-names same-window-buffer-names)
+       (same-window-regexps same-window-regexps)
+       (buffer (get-buffer name))
+       (cur (current-buffer)))
+    (if (or (and (featurep 'xemacs)
+                (not (eq 'tty (device-type))))
+           window-system
+           (>= emacs-major-version 20))
+       (when message-use-multi-frames
+         (setq pop-up-frames t
+               special-display-buffer-names nil
+               special-display-regexps nil
+               same-window-buffer-names nil
+               same-window-regexps nil))
+      (setq pop-up-frames nil))
     (if (and buffer
             (buffer-name buffer))
        (progn
@@ -3233,7 +3531,10 @@ Headers already prepared in the buffer are not modified."
            (error "Message being composed")))
       (set-buffer (pop-to-buffer name)))
     (erase-buffer)
-    (message-mode)))
+    (message-mode)
+    (when pop-up-frames
+      (make-local-variable 'message-original-frame)
+      (setq message-original-frame (selected-frame)))))
 
 (defun message-do-send-housekeeping ()
   "Kill old message buffers."
@@ -3251,7 +3552,7 @@ Headers already prepared in the buffer are not modified."
   ;; Rename the buffer.
   (if message-send-rename-function
       (funcall message-send-rename-function)
-    (when (string-match "\\`\\*\\(unsent \\)?" (buffer-name))
+    (when (string-match "\\`\\*" (buffer-name))
       (rename-buffer
        (concat "*sent " (substring (buffer-name) (match-end 0))) t)))
   ;; Push the current buffer onto the list.
@@ -3268,7 +3569,9 @@ Headers already prepared in the buffer are not modified."
          mc-modes-alist))
   (when actions
     (setq message-send-actions actions))
-  (setq message-reply-buffer replybuffer)
+  (setq message-reply-buffer
+       (or (message-get-parameter 'reply-buffer)
+           replybuffer))
   (goto-char (point-min))
   ;; Insert all the headers.
   (mail-header-format
@@ -3329,8 +3632,7 @@ Headers already prepared in the buffer are not modified."
       (setq buffer-file-name (expand-file-name "*message*"
                                               message-auto-save-directory))
       (setq buffer-auto-save-file-name (make-auto-save-file-name)))
-    (clear-visited-file-modtime)
-    (setq buffer-file-coding-system message-draft-coding-system)))
+    (clear-visited-file-modtime)))
 
 (defun message-disassociate-draft ()
   "Disassociate the message buffer from the drafts directory."
@@ -3338,23 +3640,6 @@ Headers already prepared in the buffer are not modified."
     (nndraft-request-expire-articles
      (list message-draft-article) "drafts" nil t)))
 
-(defun message-insert-headers ()
-  "Generate the headers for the article."
-  (interactive)
-  (save-excursion
-    (save-restriction
-      (message-narrow-to-headers)
-      (when (message-news-p)
-       (message-generate-headers
-        (delq 'Lines
-              (delq 'Subject
-                    (copy-sequence message-required-news-headers)))))
-      (when (message-mail-p)
-       (message-generate-headers
-        (delq 'Lines
-              (delq 'Subject
-                    (copy-sequence message-required-mail-headers))))))))
-
 \f
 
 ;;;
@@ -3392,7 +3677,6 @@ OTHER-HEADERS is an alist of header/value pairs."
        from subject date reply-to to cc
        references message-id follow-to
        (inhibit-point-motion-hooks t)
-       (message-this-is-mail t)
        mct never-mct gnus-warning)
     (save-restriction
       (message-narrow-to-head)
@@ -3428,12 +3712,10 @@ OTHER-HEADERS is an alist of header/value pairs."
 
       ;; Handle special values of Mail-Copies-To.
       (when mct
-       (cond ((or (equal (downcase mct) "never")
-                  (equal (downcase mct) "nobody"))
+       (cond ((equal (downcase mct) "never")
               (setq never-mct t)
               (setq mct nil))
-             ((or (equal (downcase mct) "always")
-                  (equal (downcase mct) "poster"))
+             ((equal (downcase mct) "always")
               (setq mct (or reply-to from)))))
 
       (unless follow-to
@@ -3600,10 +3882,8 @@ responses here are directed to other newsgroups."))
             `((References . ,(concat (or references "") (and references " ")
                                      (or message-id "")))))
        ,@(when (and mct
-                   (not (or (equal (downcase mct) "never")
-                            (equal (downcase mct) "nobody"))))
-          (list (cons 'Cc (if (or (equal (downcase mct) "always")
-                                  (equal (downcase mct) "poster"))
+                   (not (equal (downcase mct) "never")))
+          (list (cons 'Cc (if (equal (downcase mct) "always")
                               (or reply-to from "")
                             mct)))))
 
@@ -3631,17 +3911,18 @@ responses here are directed to other newsgroups."))
                message-id (message-fetch-field "message-id" t)
                distribution (message-fetch-field "distribution")))
        ;; Make sure that this article was written by the user.
-       (unless (or (and sender
-                        (string-equal
-                         (downcase sender)
-                         (downcase (message-make-sender))))
-                   (string-equal
-                    (downcase (cadr (mail-extract-address-components from)))
-                    (downcase (cadr (mail-extract-address-components
-                                     (message-make-from))))))
+       (unless (or (and sender
+                        (string-equal
+                         (downcase sender)
+                         (downcase (message-make-sender))))
+                   (string-equal
+                    (downcase (cadr (mail-extract-address-components from)))
+                    (downcase (cadr (mail-extract-address-components
+                                     (message-make-from))))))
          (error "This article is not yours"))
        ;; Make control message.
        (setq buf (set-buffer (get-buffer-create " *message cancel*")))
+       (buffer-disable-undo (current-buffer))
        (erase-buffer)
        (insert "Newsgroups: " newsgroups "\n"
                "From: " (message-make-from) "\n"
@@ -3652,14 +3933,19 @@ responses here are directed to other newsgroups."))
                  "")
                mail-header-separator "\n"
                message-cancel-message)
-       (run-hooks 'message-cancel-hook)
        (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)))))
 
+(defun message-supersede-setup-for-mime-edit ()
+  (set (make-local-variable 'message-setup-hook) nil)
+  (mime-edit-again))
+
 ;;;###autoload
 (defun message-supersede ()
   "Start composing a message to supersede the current message.
@@ -3693,7 +3979,11 @@ header line with the old Message-ID."
     (goto-char (point-max))
     (insert mail-header-separator)
     (widen)
-    (forward-line 1)))
+    (when message-supersede-setup-function
+      (funcall message-supersede-setup-function))
+    (run-hooks 'message-supersede-setup-hook)
+    (goto-char (point-min))
+    (search-forward (concat "\n" mail-header-separator "\n") nil t)))
 
 ;;;###autoload
 (defun message-recover ()
@@ -3717,7 +4007,7 @@ header line with the old Message-ID."
 
 (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
+  (nnheader-temp-write nil
     (insert-string subject)
     (goto-char (point-min))
     ;; strip Re/Fwd stuff off the beginning
@@ -3744,7 +4034,7 @@ header line with the old Message-ID."
       (replace-match ""))
 
     (buffer-string)))
-
+    
 ;;; Forwarding messages.
 
 (defun message-forward-subject-author-subject (subject)
@@ -3773,8 +4063,10 @@ the message."
       (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") ""))))
+                         (or (eword-decode-unstructured-field-body
+                              (message-fetch-field "Subject")) ""))
+                      (or (eword-decode-unstructured-field-body
+                           (message-fetch-field "Subject")) ""))))
        ;; Make sure funcs is a list.
        (and funcs
             (not (listp funcs))
@@ -3795,15 +4087,32 @@ Optional NEWS will use news to forward instead of mail."
   (let ((cur (current-buffer))
        (subject (message-make-forward-subject))
        art-beg)
-    (if news
-       (message-news nil subject)
-      (message-mail nil subject))
+    (if news (message-news nil subject) (message-mail nil subject))
     ;; Put point where we want it before inserting the forwarded
     ;; message.
-    (message-goto-body)
-    (insert "\n\n<#part type=message/rfc822 disposition=inline>\n")
-    (mml-insert-buffer cur)
-    (insert "<#/part>\n")
+    (if message-signature-before-forwarded-message
+       (goto-char (point-max))
+      (message-goto-body))
+    ;; Make sure we're at the start of the line.
+    (unless (eolp)
+      (insert "\n"))
+    ;; Narrow to the area we are to insert.
+    (narrow-to-region (point) (point))
+    ;; Insert the separators and the forwarded buffer.
+    (insert message-forward-start-separator)
+    (setq art-beg (point))
+    (insert-buffer-substring cur)
+    (goto-char (point-max))
+    (insert message-forward-end-separator)
+    (set-text-properties (point-min) (point-max) nil)
+    ;; Remove all unwanted headers.
+    (goto-char art-beg)
+    (narrow-to-region (point) (if (search-forward "\n\n" nil t)
+                                 (1- (point))
+                               (point)))
+    (goto-char (point-min))
+    (message-remove-header message-included-forward-headers t nil t)
+    (widen)
     (message-position-point)))
 
 ;;;###autoload
@@ -3816,8 +4125,12 @@ Optional NEWS will use news to forward instead of mail."
          beg)
       ;; We first set up a normal mail buffer.
       (set-buffer (get-buffer-create " *message resend*"))
+      (buffer-disable-undo (current-buffer))
       (erase-buffer)
-      (message-setup `((To . ,address)))
+      ;; avoid to turn-on-mime-edit
+      (let (message-setup-hook)
+       (message-setup `((To . ,address)))
+       )
       ;; Insert our usual headers.
       (message-generate-headers '(From Date To))
       (message-narrow-to-headers)
@@ -3848,12 +4161,16 @@ Optional NEWS will use news to forward instead of mail."
       (when (looking-at "From ")
        (replace-match "X-From-Line: "))
       ;; Send it.
-      (let ((message-inhibit-body-encoding t)
-           message-required-mail-headers)
+      (let ((message-encoding-buffer (current-buffer))
+           (message-edit-buffer (current-buffer)))
        (message-send-mail))
       (kill-buffer (current-buffer)))
     (message "Resending message to %s...done" address)))
 
+(defun message-bounce-setup-for-mime-edit ()
+  (set (make-local-variable 'message-setup-hook) nil)
+  (mime-edit-again))
+
 ;;;###autoload
 (defun message-bounce ()
   "Re-mail the current message.
@@ -3867,7 +4184,7 @@ you."
     (insert-buffer-substring cur)
     (undo-boundary)
     (message-narrow-to-head)
-    (if (and (message-fetch-field "Mime-Version")
+    (if (and (message-fetch-field "MIME-Version")
             (setq boundary (message-fetch-field "Content-Type")))
        (if (string-match "boundary=\"\\([^\"]+\\)\"" boundary)
            (setq boundary (concat (match-string 1 boundary) " *\n"
@@ -3893,6 +4210,9 @@ you."
       (message-remove-header message-ignored-bounced-headers t)
       (goto-char (point-max))
       (insert mail-header-separator))
+    (when message-bounce-setup-function
+      (funcall message-bounce-setup-function))
+    (run-hooks 'message-bounce-setup-hook)
     (message-position-point)))
 
 ;;;
@@ -3970,7 +4290,7 @@ which specify the range to operate on."
       (goto-char (min start end))
       (while (< (point) end1)
        (or (looking-at "[_\^@- ]")
-           (insert (char-after) "\b"))
+           (insert (following-char) "\b"))
        (forward-char 1)))))
 
 ;;;###autoload
@@ -3984,7 +4304,7 @@ which specify the range to operate on."
       (move-marker end1 (max start end))
       (goto-char (min start end))
       (while (re-search-forward "\b" end1 t)
-       (if (eq (char-after) (char-after (- (point) 2)))
+       (if (eq (following-char) (char-after (- (point) 2)))
            (delete-char -2))))))
 
 (defalias 'message-exchange-point-and-mark 'exchange-point-and-mark)
@@ -4043,7 +4363,7 @@ Do a `tab-to-tab-stop' if not in those headers."
          (message "No matching groups")
        (save-selected-window
          (pop-to-buffer "*Completions*")
-         (buffer-disable-undo)
+         (buffer-disable-undo (current-buffer))
          (let ((buffer-read-only nil))
            (erase-buffer)
            (let ((standard-output (current-buffer)))
@@ -4094,7 +4414,7 @@ regexp varstr."
   (let ((locals (save-excursion
                  (set-buffer buffer)
                  (buffer-local-variables)))
-       (regexp "^gnus\\|^nn\\|^message"))
+       (regexp "^\\(gnus\\|nn\\|message\\|user-\\(mail-address\\|full-name\\)\\)"))
     (mapcar
      (lambda (local)
        (when (and (consp local)
@@ -4105,6 +4425,47 @@ regexp varstr."
                (cdr local)))))
      locals)))
 
+;;; @ for MIME Edit mode
+;;;
+
+(defun message-maybe-setup-default-charset ()
+  (let ((charset
+        (and (boundp 'gnus-summary-buffer)
+              (buffer-live-p gnus-summary-buffer)
+             (save-excursion
+               (set-buffer gnus-summary-buffer)
+               default-mime-charset))))
+    (if charset
+       (progn
+         (make-local-variable 'default-mime-charset)
+         (setq default-mime-charset charset)
+         ))))
+
+(defun message-maybe-encode ()
+  (when message-mime-mode
+    (run-hooks 'mime-edit-translate-hook)
+    (if (catch 'mime-edit-error
+         (save-excursion
+           (mime-edit-translate-body)
+           ))
+       (error "Translation error!")
+      )
+    (end-of-invisible)
+    (run-hooks 'mime-edit-exit-hook)
+    ))
+
+(defun message-mime-insert-article (&optional message)
+  (interactive)
+  (let ((message-cite-function 'mime-edit-inserted-message-filter)
+       (message-reply-buffer
+        (message-get-parameter-with-eval 'original-buffer))
+       (start (point)))
+    (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
@@ -4120,58 +4481,23 @@ regexp varstr."
       (setq idx (1+ idx)))
     string))
 
-;;;
-;;; MIME functions
-;;;
-
-(defvar message-inhibit-body-encoding nil)
+(defvar message-save-buffer " *encoding")
+(defun message-save-drafts ()
+  (interactive)
+  (if (not (get-buffer message-save-buffer))
+      (get-buffer-create message-save-buffer))
+  (let ((filename buffer-file-name)
+       (buffer (current-buffer)))
+    (set-buffer message-save-buffer)
+    (erase-buffer)
+    (insert-buffer buffer)
+    (mime-edit-translate-buffer)
+    (write-region (point-min) (point-max) filename)
+    (set-buffer buffer)
+    (set-buffer-modified-p nil)))
 
-(defun message-encode-message-body ()
-  (unless message-inhibit-body-encoding 
-    (let ((mail-parse-charset (or mail-parse-charset
-                                 message-default-charset
-                                 message-posting-charset))
-         (case-fold-search t)
-         lines content-type-p)
-      (message-goto-body)
-      (save-restriction
-       (narrow-to-region (point) (point-max))
-       (let ((new (mml-generate-mime)))
-         (when new
-           (delete-region (point-min) (point-max))
-           (insert new)
-           (goto-char (point-min))
-           (if (eq (aref new 0) ?\n)
-               (delete-char 1)
-             (search-forward "\n\n")
-             (setq lines (buffer-substring (point-min) (1- (point))))
-             (delete-region (point-min)  (point))))))
-      (save-restriction
-       (message-narrow-to-headers-or-head)
-       (message-remove-header "Mime-Version")
-       (goto-char (point-max))
-       (insert "MIME-Version: 1.0\n")
-       (when lines
-         (insert lines))
-       (setq content-type-p
-             (re-search-backward "^Content-Type:" nil t)))
-      (save-restriction
-       (message-narrow-to-headers-or-head)
-       (message-remove-first-header "Content-Type")
-       (message-remove-first-header "Content-Transfer-Encoding"))
-      ;; We always make sure that the message has a Content-Type header.
-      ;; This is because some broken MTAs and MUAs get awfully confused
-      ;; when confronted with a message with a MIME-Version header and
-      ;; without a Content-Type header.  For instance, Solaris'
-      ;; /usr/bin/mail.
-      (unless content-type-p
-       (goto-char (point-min))
-       (re-search-forward "^MIME-Version:")
-       (forward-line 1)
-       (insert "Content-Type: text/plain; charset=us-ascii\n")))))
+(run-hooks 'message-load-hook)
 
 (provide 'message)
 
-(run-hooks 'message-load-hook)
-
 ;;; message.el ends here
index a375cd1..7e3edd3 100644 (file)
@@ -1,5 +1,5 @@
 ;;; messagexmas.el --- XEmacs extensions to message
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: mail, news
@@ -39,7 +39,7 @@ automatically.")
                                'default-toolbar
                              nil)
   "*If nil, do not use a toolbar.
-If it is non-nil, it must be a toolbar.  The five valid values are
+If it is non-nil, it must be a toolbar.  The five legal values are
 `default-toolbar', `top-toolbar', `bottom-toolbar',
 `right-toolbar', and `left-toolbar'.")
 
@@ -100,8 +100,8 @@ If it is non-nil, it must be a toolbar.  The five valid values are
   "Create a rot table with offset N."
   (let ((i -1)
        (table (make-string 256 0))
-       (a (mm-char-int ?a))
-       (A (mm-char-int ?A)))
+       (a (char-int ?a))
+       (A (char-int ?A)))
     (while (< (incf i) 256)
       (aset table i i))
     (concat
index c9f0f7d..153f76d 100644 (file)
@@ -1,5 +1,5 @@
 ;;; messcompat.el --- making message mode compatible with mail mode
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: mail, news
diff --git a/lisp/mm-bodies.el b/lisp/mm-bodies.el
deleted file mode 100644 (file)
index 1107947..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-;;; mm-bodies.el --- Functions for decoding MIME things
-;; Copyright (C) 1998,99 Free Software Foundation, Inc.
-
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;;     MORIOKA Tomohiko <morioka@jaist.ac.jp>
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;;; Code:
-
-(eval-and-compile
-  (or (fboundp  'base64-decode-region)
-      (require 'base64))
-  (autoload 'binhex-decode-region "binhex"))
-
-(require 'mm-util)
-(require 'rfc2047)
-(require 'qp)
-(require 'uudecode)
-
-;; 8bit treatment gets any char except: 0x32 - 0x7f, CR, LF, TAB, BEL,
-;; BS, vertical TAB, form feed, and ^_
-(defvar mm-8bit-char-regexp "[^\x20-\x7f\r\n\t\x7\x8\xb\xc\x1f]")
-
-(defvar mm-body-charset-encoding-alist
-  '((us-ascii . 7bit)
-    (iso-8859-1 . quoted-printable)
-    (iso-8859-2 . quoted-printable)
-    (iso-8859-3 . quoted-printable)
-    (iso-8859-4 . quoted-printable)
-    (iso-8859-5 . base64)
-    (koi8-r . 8bit)
-    (iso-8859-7 . quoted-printable)
-    (iso-8859-8 . quoted-printable)
-    (iso-8859-9 . quoted-printable)
-    (iso-2022-jp . base64)
-    (iso-2022-kr . base64)
-    (gb2312 . base64)
-    (cn-gb . base64)
-    (cn-gb-2312 . base64)
-    (euc-kr . 8bit)
-    (iso-2022-jp-2 . base64)
-    (iso-2022-int-1 . base64))
-  "Alist of MIME charsets to encodings.
-Valid encodings are `7bit', `8bit', `quoted-printable' and `base64'.")
-
-(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."
-  (if (not (featurep 'mule))
-      ;; In the non-Mule case, we search for non-ASCII chars and
-      ;; return the value of `mm-default-charset' if any are found.
-      (save-excursion
-       (goto-char (point-min))
-       (if (re-search-forward "[^\x0-\x7f]" nil t)
-           (or mail-parse-charset
-               (mm-read-charset "Charset used in the article: "))
-         ;; The logic in `mml-generate-mime-1' confirms that it's OK
-         ;; to return nil here.
-         nil))
-    (save-excursion
-      (goto-char (point-min))
-      (let ((charsets (mm-find-mime-charset-region (point-min) (point-max)))
-           charset)
-       (cond
-        ;; No encoding.
-        ((null charsets)
-         nil)
-        ;; Too many charsets.
-        ((> (length charsets) 1)
-         charsets)
-        ;; We encode.
-        (t
-         (let ((charset (car charsets))
-               start)
-           (when (or t
-                     ;; We always decode.
-                     (not (mm-coding-system-equal
-                           charset buffer-file-coding-system)))
-             (while (not (eobp))
-               (if (eq (char-charset (char-after)) 'ascii)
-                   (when start
-                     (save-restriction
-                       (narrow-to-region start (point))
-                       (mm-encode-coding-region start (point) charset)
-                       (goto-char (point-max)))
-                     (setq start nil))
-                 (unless start
-                   (setq start (point))))
-               (forward-char 1))
-             (when start
-               (mm-encode-coding-region start (point) charset)
-               (setq start nil)))
-           charset)))))))
-
-(defun mm-body-encoding (charset)
-  "Do Content-Transfer-Encoding and return the encoding of the current buffer."
-  (let ((bits (mm-body-7-or-8)))
-    (cond
-     ((eq bits '7bit)
-      bits)
-     ((eq charset mail-parse-charset)
-      bits)
-     (t
-      (let ((encoding (or (cdr (assq charset mm-body-charset-encoding-alist))
-                         'quoted-printable)))
-       (mm-encode-content-transfer-encoding encoding "text/plain")
-       encoding)))))
-
-(defun mm-body-7-or-8 ()
-  "Say whether the body is 7bit or 8bit."
-  (cond
-   ((not (featurep 'mule))
-    (if (save-excursion
-         (goto-char (point-min))
-         (re-search-forward mm-8bit-char-regexp nil t))
-       '8bit
-      '7bit))
-   (t
-    ;; Mule version
-    (if (and (null (delq 'ascii
-                        (mm-find-charset-region (point-min) (point-max))))
-            ;;!!!The following is necessary because the function
-            ;;!!!above seems to return the wrong result under
-            ;;!!!Emacs 20.3.  Sometimes.
-            (save-excursion
-              (goto-char (point-min))
-              (skip-chars-forward "\0-\177")
-              (eobp)))
-       '7bit
-      '8bit))))
-
-;;;
-;;; Functions for decoding
-;;;
-
-(defun mm-decode-content-transfer-encoding (encoding &optional type)
-  (prog1
-      (condition-case error
-         (cond
-          ((eq encoding 'quoted-printable)
-           (quoted-printable-decode-region (point-min) (point-max)))
-          ((eq encoding 'base64)
-           (base64-decode-region (point-min)
-                                 ;; Some mailers insert whitespace
-                                 ;; junk at the end which
-                                 ;; base64-decode-region dislikes.
-                                 (save-excursion
-                                   (goto-char (point-max))
-                                   (skip-chars-backward "\n\t ")
-                                   (point))))
-          ((memq encoding '(7bit 8bit binary))
-           )
-          ((null encoding)
-           )
-          ((memq encoding '(x-uuencode x-uue))
-           (funcall mm-uu-decode-function (point-min) (point-max)))
-          ((eq encoding 'x-binhex)
-           (funcall mm-uu-binhex-decode-function (point-min) (point-max)))
-          ((functionp encoding)
-           (funcall encoding (point-min) (point-max)))
-          (t
-           (message "Unknown encoding %s; defaulting to 8bit" encoding)))
-       (error
-        (message "Error while decoding: %s" error)
-        nil))
-    (when (and
-          (memq encoding '(base64 x-uuencode x-uue x-binhex))
-          (equal type "text/plain"))
-      (goto-char (point-min))
-      (while (search-forward "\r\n" nil t)
-       (replace-match "\n" t t)))))
-
-(defun mm-decode-body (charset &optional encoding type)
-  "Decode the current article that has been encoded with ENCODING.
-The characters in CHARSET should then be decoded."
-  (if (stringp charset)
-    (setq charset (intern (downcase charset))))
-  (if (or (not charset) (memq charset mail-parse-ignored-charsets))
-      (setq charset mail-parse-charset))
-  (save-excursion
-    (when encoding
-      (mm-decode-content-transfer-encoding encoding type))
-    (when (featurep 'mule)
-      (let (mule-charset)
-       (when (and charset
-                  (setq mule-charset (mm-charset-to-coding-system charset))
-                  ;; buffer-file-coding-system
-                  ;;Article buffer is nil coding system
-                  ;;in XEmacs
-                  enable-multibyte-characters
-                  (or (not (eq mule-charset 'ascii))
-                      (setq mule-charset mail-parse-charset)))
-         (mm-decode-coding-region (point-min) (point-max) mule-charset))))))
-
-(defun mm-decode-string (string charset)
-  "Decode STRING with CHARSET."
-  (if (stringp charset)
-    (setq charset (intern (downcase charset))))
-  (if (or (not charset) (memq charset mail-parse-ignored-charsets))
-      (setq charset mail-parse-charset))
-  (or
-   (when (featurep 'mule)
-     (let (mule-charset)
-       (when (and charset
-                 (setq mule-charset (mm-charset-to-coding-system charset))
-                 enable-multibyte-characters
-                 (or (not (eq mule-charset 'ascii))
-                     (setq mule-charset mail-parse-charset)))
-        (mm-decode-coding-string string mule-charset))))
-   string))
-
-(provide 'mm-bodies)
-
-;; mm-bodies.el ends here
diff --git a/lisp/mm-decode.el b/lisp/mm-decode.el
deleted file mode 100644 (file)
index 8b5b91a..0000000
+++ /dev/null
@@ -1,679 +0,0 @@
-;;; mm-decode.el --- Functions for decoding MIME things
-;; Copyright (C) 1998,99 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:
-
-(require 'mail-parse)
-(require 'mailcap)
-(require 'mm-bodies)
-
-;;; Convenience macros.
-
-(defmacro mm-handle-buffer (handle)
-  `(nth 0 ,handle))
-(defmacro mm-handle-type (handle)
-  `(nth 1 ,handle))
-(defsubst mm-handle-media-type (handle)
-  (if (stringp (car handle))
-      (car handle)
-    (car (mm-handle-type handle))))
-(defsubst mm-handle-media-supertype (handle)
-  (car (split-string (mm-handle-media-type handle) "/")))
-(defsubst mm-handle-media-subtype (handle)
-  (cadr (split-string (mm-handle-media-type handle) "/")))
-(defmacro mm-handle-encoding (handle)
-  `(nth 2 ,handle))
-(defmacro mm-handle-undisplayer (handle)
-  `(nth 3 ,handle))
-(defmacro mm-handle-set-undisplayer (handle function)
-  `(setcar (nthcdr 3 ,handle) ,function))
-(defmacro mm-handle-disposition (handle)
-  `(nth 4 ,handle))
-(defmacro mm-handle-description (handle)
-  `(nth 5 ,handle))
-(defmacro mm-handle-cache (handle)
-  `(nth 6 ,handle))
-(defmacro mm-handle-set-cache (handle contents)
-  `(setcar (nthcdr 6 ,handle) ,contents))
-(defmacro mm-handle-id (handle)
-  `(nth 7 ,handle))
-(defmacro mm-make-handle (&optional buffer type encoding undisplayer
-                                   disposition description cache
-                                   id)
-  `(list ,buffer ,type ,encoding ,undisplayer
-        ,disposition ,description ,cache ,id))
-
-(defvar mm-inline-media-tests
-  '(("image/jpeg"
-     mm-inline-image
-     (lambda (handle)
-       (mm-valid-and-fit-image-p 'jpeg handle)))
-    ("image/png"
-     mm-inline-image
-     (lambda (handle)
-       (mm-valid-and-fit-image-p 'png handle)))
-    ("image/gif"
-     mm-inline-image
-     (lambda (handle)
-       (mm-valid-and-fit-image-p 'gif handle)))
-    ("image/tiff"
-     mm-inline-image
-     (lambda (handle)
-       (mm-valid-and-fit-image-p 'tiff handle)) )
-    ("image/xbm"
-     mm-inline-image
-     (lambda (handle)
-       (mm-valid-and-fit-image-p 'xbm handle)))
-    ("image/x-xbitmap"
-     mm-inline-image
-     (lambda (handle)
-       (mm-valid-and-fit-image-p 'xbm handle)))
-    ("image/xpm"
-     mm-inline-image
-     (lambda (handle)
-       (mm-valid-and-fit-image-p 'xpm handle)))
-    ("image/x-pixmap"
-     mm-inline-image
-     (lambda (handle)
-       (mm-valid-and-fit-image-p 'xpm handle)))
-    ("image/bmp"
-     mm-inline-image
-     (lambda (handle)
-       (mm-valid-and-fit-image-p 'bmp handle)))
-    ("text/plain" mm-inline-text identity)
-    ("text/enriched" mm-inline-text identity)
-    ("text/richtext" mm-inline-text identity)
-    ("text/html"
-     mm-inline-text
-     (lambda (handle)
-       (locate-library "w3")))
-    ("text/x-vcard"
-     mm-inline-text
-     (lambda (handle)
-       (locate-library "vcard")))
-    ("message/delivery-status" mm-inline-text identity)
-    ("message/rfc822" mm-inline-message identity)
-    ("text/.*" mm-inline-text identity)
-    ("audio/wav" mm-inline-audio
-     (lambda (handle)
-       (and (or (featurep 'nas-sound) (featurep 'native-sound))
-           (device-sound-enabled-p))))
-    ("audio/au"
-     mm-inline-audio
-     (lambda (handle)
-       (and (or (featurep 'nas-sound) (featurep 'native-sound))
-           (device-sound-enabled-p))))
-    ("multipart/alternative" ignore identity)
-    ("multipart/mixed" ignore identity)
-    ("multipart/related" ignore identity))
-  "Alist of media types/test that say whether the media types can be displayed inline.")
-
-(defvar mm-inlined-types
-  '("image/.*" "text/.*" "message/delivery-status" "message/rfc822")
-  "List of media types that are to be displayed inline.")
-  
-(defvar mm-automatic-display
-  '("text/plain" "text/enriched" "text/richtext" "text/html"
-    "text/x-vcard" "image/.*" "message/delivery-status" "multipart/.*"
-    "message/rfc822")
-  "A list of MIME types to be displayed automatically.")
-
-(defvar mm-attachment-override-types
-  '("text/plain" "text/x-vcard")
-  "Types that should have \"attachment\" ignored if they can be displayed inline.")
-
-(defvar mm-automatic-external-display nil
-  "List of MIME type regexps that will be displayed externally automatically.")
-
-(defvar mm-discouraged-alternatives nil
-  "List of MIME types that are discouraged when viewing multipart/alternative.
-Viewing agents are supposed to view the last possible part of a message,
-as that is supposed to be the richest.  However, users may prefer other
-types instead, and this list says what types are most unwanted.  If,
-for instance, text/html parts are very unwanted, and text/richtech are
-somewhat unwanted, then the value of this variable should be set
-to:
-
- (\"text/html\" \"text/richtext\")")
-
-(defvar mm-tmp-directory
-  (cond ((fboundp 'temp-directory) (temp-directory))
-       ((boundp 'temporary-file-directory) temporary-file-directory)
-       ("/tmp/"))
-  "Where mm will store its temporary files.")
-
-(defvar mm-inline-large-images nil
-  "If non-nil, then all images fit in the buffer.")
-
-;;; Internal variables.
-
-(defvar mm-dissection-list nil)
-(defvar mm-last-shell-command "")
-(defvar mm-content-id-alist nil)
-
-;;; The functions.
-
-(defun mm-dissect-buffer (&optional no-strict-mime)
-  "Dissect the current buffer and return a list of MIME handles."
-  (save-excursion
-    (let (ct ctl type subtype cte cd description id result)
-      (save-restriction
-       (mail-narrow-to-head)
-       (when (or no-strict-mime
-                 (mail-fetch-field "mime-version"))
-         (setq ct (mail-fetch-field "content-type")
-               ctl (ignore-errors (mail-header-parse-content-type ct))
-               cte (mail-fetch-field "content-transfer-encoding")
-               cd (mail-fetch-field "content-disposition")
-               description (mail-fetch-field "content-description")
-               id (mail-fetch-field "content-id"))))
-      (if (or (not ctl)
-             (not (string-match "/" (car ctl))))
-         (mm-dissect-singlepart
-          '("text/plain") nil no-strict-mime
-          (and cd (ignore-errors (mail-header-parse-content-disposition cd)))
-          description)
-       (setq type (split-string (car ctl) "/"))
-       (setq subtype (cadr type)
-             type (pop type))
-       (setq
-        result
-        (cond
-         ((equal type "multipart")
-          (cons (car ctl) (mm-dissect-multipart ctl)))
-         (t
-          (mm-dissect-singlepart
-           ctl
-           (and cte (intern (downcase (mail-header-remove-whitespace
-                                       (mail-header-remove-comments
-                                        cte)))))
-           no-strict-mime
-           (and cd (ignore-errors (mail-header-parse-content-disposition cd)))
-           description id))))
-       (when id
-         (when (string-match " *<\\(.*\\)> *" id)
-           (setq id (match-string 1 id)))
-         (push (cons id result) mm-content-id-alist))
-       result))))
-
-(defun mm-dissect-singlepart (ctl cte &optional force cdl description id)
-  (when (or force
-           (not (equal "text/plain" (car ctl))))
-    (let ((res (mm-make-handle
-               (mm-copy-to-buffer) ctl cte nil cdl description nil id)))
-      (push (car res) mm-dissection-list)
-      res)))
-
-(defun mm-remove-all-parts ()
-  "Remove all MIME handles."
-  (interactive)
-  (mapcar 'mm-remove-part mm-dissection-list)
-  (setq mm-dissection-list nil))
-
-(defun mm-dissect-multipart (ctl)
-  (goto-char (point-min))
-  (let* ((boundary (concat "\n--" (mail-content-type-get ctl 'boundary)))
-       (close-delimiter (concat (regexp-quote boundary) "--[ \t]*$"))
-       start parts
-       (end (save-excursion
-              (goto-char (point-max))
-              (if (re-search-backward close-delimiter nil t)
-                  (match-beginning 0)
-                (point-max)))))
-    (while (search-forward boundary end t)
-      (goto-char (match-beginning 0))
-      (when start
-       (save-excursion
-         (save-restriction
-           (narrow-to-region start (point))
-           (setq parts (nconc (list (mm-dissect-buffer t)) parts)))))
-      (forward-line 2)
-      (setq start (point)))
-    (when start
-      (save-excursion
-       (save-restriction
-         (narrow-to-region start end)
-         (setq parts (nconc (list (mm-dissect-buffer t)) parts)))))
-    (nreverse parts)))
-
-(defun mm-copy-to-buffer ()
-  "Copy the contents of the current buffer to a fresh buffer."
-  (save-excursion
-    (let ((obuf (current-buffer))
-         beg)
-      (goto-char (point-min))
-      (search-forward-regexp "^\n" nil t)
-      (setq beg (point))
-      (set-buffer (generate-new-buffer " *mm*"))
-      (insert-buffer-substring obuf beg)
-      (current-buffer))))
-
-(defun mm-display-part (handle &optional no-default)
-  "Display the MIME part represented by HANDLE.
-Returns nil if the part is removed; inline if displayed inline;
-external if displayed external."
-  (save-excursion
-    (mailcap-parse-mailcaps)
-    (if (mm-handle-displayed-p handle)
-       (mm-remove-part handle)
-      (let* ((type (mm-handle-media-type handle))
-            (method (mailcap-mime-info type)))
-       (if (mm-inlined-p handle)
-           (progn
-             (forward-line 1)
-             (mm-display-inline handle)
-             'inline)
-         (when (or method
-                   (not no-default))
-           (if (and (not method)
-                    (equal "text" (car (split-string type))))
-               (progn
-                 (forward-line 1)
-                 (mm-insert-inline handle (mm-get-part handle))
-                 'inline)
-             (mm-display-external
-              handle (or method 'mailcap-save-binary-file))
-             'external)))))))
-
-(defun mm-display-external (handle method)
-  "Display HANDLE using METHOD."
-  (mm-with-unibyte-buffer
-    (if (functionp method)
-       (let ((cur (current-buffer)))
-         (if (eq method 'mailcap-save-binary-file)
-             (progn
-               (set-buffer (generate-new-buffer "*mm*"))
-               (setq method nil))
-           (mm-insert-part handle)
-           (let ((win (get-buffer-window cur t)))
-             (when win
-               (select-window win)))
-           (switch-to-buffer (generate-new-buffer "*mm*")))
-         (buffer-disable-undo)
-         (mm-set-buffer-file-coding-system mm-binary-coding-system)
-         (insert-buffer-substring cur)
-         (message "Viewing with %s" method)
-         (let ((mm (current-buffer))
-               (non-viewer (assoc "non-viewer"
-                                  (mailcap-mime-info
-                                   (mm-handle-media-type handle)) t)))
-           (unwind-protect
-               (if method
-                   (funcall method)
-                 (mm-save-part handle))
-             (when (and (not non-viewer)
-                        method)
-               (mm-handle-set-undisplayer handle mm)))))
-      ;; The function is a string to be executed.
-      (mm-insert-part handle)
-      (let* ((dir (make-temp-name (expand-file-name "emm." mm-tmp-directory)))
-            (filename (mail-content-type-get
-                       (mm-handle-disposition handle) 'filename))
-            (needsterm (assoc "needsterm"
-                              (mailcap-mime-info
-                               (mm-handle-media-type handle)) t))
-            process file buffer)
-       ;; We create a private sub-directory where we store our files.
-       (make-directory dir)
-       (set-file-modes dir 448)
-       (if filename
-           (setq file (expand-file-name (file-name-nondirectory filename)
-                                        dir))
-         (setq file (make-temp-name (expand-file-name "mm." dir))))
-       (write-region (point-min) (point-max) file nil 'nomesg)
-       (message "Viewing with %s" method)
-       (unwind-protect
-           (setq process
-                 (if needsterm
-                     (start-process "*display*" nil
-                                    "xterm"
-                                    "-e" shell-file-name "-c"
-                                    (format method
-                                            (mm-quote-arg file)))
-                   (start-process "*display*"
-                                  (setq buffer (generate-new-buffer "*mm*"))
-                                  shell-file-name
-                                  "-c" (format method
-                                               (mm-quote-arg file)))))
-         (mm-handle-set-undisplayer handle (cons file buffer)))
-       (message "Displaying %s..." (format method file))))))
-
-(defun mm-remove-parts (handles)
-  "Remove the displayed MIME parts represented by HANDLE."
-  (if (and (listp handles)
-          (bufferp (car handles)))
-      (mm-remove-part handles)
-    (let (handle)
-      (while (setq handle (pop handles))
-       (cond
-        ((stringp handle)
-         )
-        ((and (listp handle)
-              (stringp (car handle)))
-         (mm-remove-parts (cdr handle)))
-        (t
-         (mm-remove-part handle)))))))
-
-(defun mm-destroy-parts (handles)
-  "Remove the displayed MIME parts represented by HANDLE."
-  (if (and (listp handles)
-          (bufferp (car handles)))
-      (mm-destroy-part handles)
-    (let (handle)
-      (while (setq handle (pop handles))
-       (cond
-        ((stringp handle)
-         )
-        ((and (listp handle)
-              (stringp (car handle)))
-         (mm-destroy-parts (cdr handle)))
-        (t
-         (mm-destroy-part handle)))))))
-
-(defun mm-remove-part (handle)
-  "Remove the displayed MIME part represented by HANDLE."
-  (when (listp handle)
-    (let ((object (mm-handle-undisplayer handle)))
-      (ignore-errors
-       (cond
-        ;; Internally displayed part.
-        ((mm-annotationp object)
-         (delete-annotation object))
-        ((or (functionp object)
-             (and (listp object)
-                  (eq (car object) 'lambda)))
-         (funcall object))
-        ;; Externally displayed part.
-        ((consp object)
-         (ignore-errors (delete-file (car object)))
-         (ignore-errors (delete-directory (file-name-directory (car object))))
-         (ignore-errors (kill-buffer (cdr object))))
-        ((bufferp object)
-         (when (buffer-live-p object)
-           (kill-buffer object)))))
-      (mm-handle-set-undisplayer handle nil))))
-
-(defun mm-display-inline (handle)
-  (let* ((type (mm-handle-media-type handle))
-        (function (cadr (assoc type mm-inline-media-tests))))
-    (funcall function handle)
-    (goto-char (point-min))))
-
-(defun mm-inlinable-p (handle)
-  "Say whether HANDLE can be displayed inline."
-  (let ((alist mm-inline-media-tests)
-       (type (mm-handle-media-type handle))
-       test)
-    (while alist
-      (when (equal type (caar alist))
-       (setq test (caddar alist)
-             alist nil)
-       (setq test (funcall test handle)))
-      (pop alist))
-    test))
-
-(defun mm-automatic-display-p (handle)
-  "Say whether the user wants HANDLE to be displayed automatically."
-  (let ((methods mm-automatic-display)
-       (type (mm-handle-media-type handle))
-       method result)
-    (while (setq method (pop methods))
-      (when (and (string-match method type)
-                (mm-inlinable-p handle))
-       (setq result t
-             methods nil)))
-    result))
-
-(defun mm-inlined-p (handle)
-  "Say whether the user wants HANDLE to be displayed automatically."
-  (let ((methods mm-inlined-types)
-       (type (mm-handle-media-type handle))
-       method result)
-    (while (setq method (pop methods))
-      (when (and (string-match method type)
-                (mm-inlinable-p handle))
-       (setq result t
-             methods nil)))
-    result))
-
-(defun mm-attachment-override-p (handle)
-  "Say whether HANDLE should have attachment behavior overridden."
-  (let ((types mm-attachment-override-types)
-       (type (mm-handle-media-type handle))
-       ty)
-    (catch 'found
-      (while (setq ty (pop types))
-       (when (and (string-match ty type)
-                  (mm-inlinable-p handle))
-         (throw 'found t))))))
-
-(defun mm-automatic-external-display-p (type)
-  "Return the user-defined method for TYPE."
-  (let ((methods mm-automatic-external-display)
-       method result)
-    (while (setq method (pop methods))
-      (when (string-match method type)
-       (setq result t
-             methods nil)))
-    result))
-
-(defun mm-destroy-part (handle)
-  "Destroy the data structures connected to HANDLE."
-  (when (listp handle)
-    (mm-remove-part handle)
-    (when (buffer-live-p (mm-handle-buffer handle))
-      (kill-buffer (mm-handle-buffer handle)))))
-
-(defun mm-handle-displayed-p (handle)
-  "Say whether HANDLE is displayed or not."
-  (mm-handle-undisplayer handle))
-
-;;;
-;;; Functions for outputting parts
-;;;
-
-(defun mm-get-part (handle)
-  "Return the contents of HANDLE as a string."
-  (mm-with-unibyte-buffer
-    (mm-insert-part handle)
-    (buffer-string)))
-
-(defun mm-insert-part (handle)
-  "Insert the contents of HANDLE in the current buffer."
-  (let ((cur (current-buffer)))
-    (save-excursion
-      (if (member (mm-handle-media-supertype handle) '("text" "message"))
-         (with-temp-buffer
-           (insert-buffer-substring (mm-handle-buffer handle))
-           (mm-decode-content-transfer-encoding
-            (mm-handle-encoding handle)
-            (mm-handle-media-type handle))
-           (let ((temp (current-buffer)))
-             (set-buffer cur)
-             (insert-buffer-substring temp)))
-       (mm-with-unibyte-buffer
-         (insert-buffer-substring (mm-handle-buffer handle))
-         (mm-decode-content-transfer-encoding
-          (mm-handle-encoding handle)
-          (mm-handle-media-type handle))
-         (let ((temp (current-buffer)))
-           (set-buffer cur)
-           (insert-buffer-substring temp)))))))
-
-(defvar mm-default-directory nil)
-
-(defun mm-save-part (handle)
-  "Write HANDLE to a file."
-  (let* ((name (mail-content-type-get (mm-handle-type handle) 'name))
-        (filename (mail-content-type-get
-                   (mm-handle-disposition handle) 'filename))
-        file)
-    (when filename
-      (setq filename (file-name-nondirectory filename)))
-    (setq file
-         (read-file-name "Save MIME part to: "
-                         (expand-file-name
-                          (or filename name "")
-                          (or mm-default-directory default-directory))))
-    (setq mm-default-directory (file-name-directory file))
-    (when (or (not (file-exists-p file))
-             (yes-or-no-p (format "File %s already exists; overwrite? "
-                                  file)))
-      (mm-save-part-to-file handle file))))
-
-(defun mm-save-part-to-file (handle file)
-  (mm-with-unibyte-buffer
-    (mm-insert-part handle)
-    ;; Now every coding system is 100% binary within mm-with-unibyte-buffer
-    ;; Is text still special?
-    (let ((coding-system-for-write
-          (if (equal "text" (mm-handle-media-supertype handle))
-              buffer-file-coding-system
-            'binary))
-         ;; Don't re-compress .gz & al.  Arguably we should make
-         ;; `file-name-handler-alist' nil, but that would chop
-         ;; ange-ftp which it's reasonable to use here.
-         (inhibit-file-name-operation 'write-region)
-         (inhibit-file-name-handlers
-          (if (equal (mm-handle-media-type handle)
-                     "application/octet-stream")
-              (cons 'jka-compr-handler inhibit-file-name-handlers)
-            inhibit-file-name-handlers)))
-      (write-region (point-min) (point-max) file))))
-
-(defun mm-pipe-part (handle)
-  "Pipe HANDLE to a process."
-  (let* ((name (mail-content-type-get (mm-handle-type handle) 'name))
-        (command
-         (read-string "Shell command on MIME part: " mm-last-shell-command)))
-    (mm-with-unibyte-buffer
-      (mm-insert-part handle)
-      (shell-command-on-region (point-min) (point-max) command nil))))
-
-(defun mm-interactively-view-part (handle)
-  "Display HANDLE using METHOD."
-  (let* ((type (mm-handle-media-type handle))
-        (methods
-         (mapcar (lambda (i) (list (cdr (assoc 'viewer i))))
-                 (mailcap-mime-info type 'all)))
-        (method (completing-read "Viewer: " methods)))
-    (mm-display-external (copy-sequence handle) method)))
-
-(defun mm-preferred-alternative (handles &optional preferred)
-  "Say which of HANDLES are preferred."
-  (let ((prec (if preferred (list preferred)
-               (mm-preferred-alternative-precedence handles)))
-       p h result type handle)
-    (while (setq p (pop prec))
-      (setq h handles)
-      (while h
-       (setq handle (car h))
-       (setq type (mm-handle-media-type handle))
-       (when (and (equal p type)
-                  (mm-automatic-display-p handle)
-                  (or (stringp (car handle))
-                      (not (mm-handle-disposition handle))
-                      (equal (car (mm-handle-disposition handle))
-                             "inline")))
-         (setq result handle
-               h nil
-               prec nil))
-       (pop h)))
-    result))
-
-(defun mm-preferred-alternative-precedence (handles)
-  "Return the precedence based on HANDLES and mm-discouraged-alternatives."
-  (let ((seq (nreverse (mapcar (lambda (h)
-                                (mm-handle-media-type h))
-                              handles))))
-    (dolist (disc (reverse mm-discouraged-alternatives))
-      (dolist (elem (copy-sequence seq))
-       (when (string-match disc elem)
-         (setq seq (nconc (delete elem seq) (list elem))))))
-    seq))
-
-(defun mm-get-content-id (id)
-  "Return the handle(s) referred to by ID."
-  (cdr (assoc id mm-content-id-alist)))
-
-(defun mm-get-image (handle)
-  "Return an image instance based on HANDLE."
-  (let ((type (mm-handle-media-subtype handle))
-       spec)
-    ;; Allow some common translations.
-    (setq type
-         (cond
-          ((equal type "x-pixmap")
-           "xpm")
-          ((equal type "x-xbitmap")
-           "xbm")
-          (t type)))
-    (or (mm-handle-cache handle)
-       (mm-with-unibyte-buffer
-         (mm-insert-part handle)
-         (prog1
-             (setq spec
-                   (ignore-errors
-                     (cond
-                      ((equal type "xbm")
-                       ;; xbm images require special handling, since
-                       ;; the only way to create glyphs from these
-                       ;; (without a ton of work) is to write them
-                       ;; out to a file, and then create a file
-                       ;; specifier.
-                       (let ((file (make-temp-name
-                                    (expand-file-name "emm.xbm"
-                                                      mm-tmp-directory))))
-                         (unwind-protect
-                             (progn
-                               (write-region (point-min) (point-max) file)
-                               (make-glyph (list (cons 'x file))))
-                           (ignore-errors
-                             (delete-file file)))))
-                      (t
-                       (make-glyph
-                        (vector (intern type) :data (buffer-string)))))))
-           (mm-handle-set-cache handle spec))))))
-
-(defun mm-image-fit-p (handle)
-  "Say whether the image in HANDLE will fit the current window."
-  (let ((image (mm-get-image handle)))
-    (or mm-inline-large-images
-       (and (< (glyph-width image) (window-pixel-width))
-            (< (glyph-height image) (window-pixel-height))))))
-
-(defun mm-valid-image-format-p (format)
-  "Say whether FORMAT can be displayed natively by Emacs."
-  (and (fboundp 'valid-image-instantiator-format-p)
-       (valid-image-instantiator-format-p format)))
-
-(defun mm-valid-and-fit-image-p (format handle)
-  "Say whether FORMAT can be displayed natively and HANDLE fits the window."
-  (and window-system
-       (mm-valid-image-format-p format)
-       (mm-image-fit-p handle)))
-
-(provide 'mm-decode)
-
-;; mm-decode.el ends here
diff --git a/lisp/mm-encode.el b/lisp/mm-encode.el
deleted file mode 100644 (file)
index fbc2d7c..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-;;; mm-encode.el --- Functions for encoding MIME things
-;; Copyright (C) 1998,99 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:
-
-(require 'mail-parse)
-(require 'mailcap)
-
-(defvar mm-content-transfer-encoding-defaults
-  '(("text/.*" quoted-printable)
-    ("message/rfc822" 8bit)
-    ("application/emacs-lisp" 8bit)
-    ("application/x-patch" 8bit)
-    (".*" base64))
-  "Alist of regexps that match MIME types and their encodings.")
-
-(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="
-         (mail-quote-string (downcase (symbol-name charset))) "\n")
-  (insert "Content-Transfer-Encoding: "
-         (downcase (symbol-name encoding)) "\n"))
-
-(defun mm-insert-multipart-headers ()
-  "Insert multipart/mixed headers."
-  (let ((boundary "=-=-="))
-    (insert "MIME-Version: 1.0\n")
-    (insert (format "Content-Type: multipart/mixed; boundary=\"%s\"\n"
-                   boundary))
-    boundary))
-
-(defun mm-default-file-encoding (file)
-  "Return a default encoding for FILE."
-  (if (not (string-match "\\.[^.]+$" file))
-      "application/octet-stream"
-    (mailcap-extension-to-mime (match-string 0 file))))
-
-(defun mm-encode-content-transfer-encoding (encoding &optional type)
-  (cond
-   ((eq encoding 'quoted-printable)
-    (quoted-printable-encode-region (point-min) (point-max)))
-   ((eq encoding 'base64)
-    (when (equal type "text/plain")
-      (goto-char (point-min))
-      (while (search-forward "\n" nil t)
-       (replace-match "\r\n" t t)))
-    (condition-case error
-       (base64-encode-region (point-min) (point-max))
-      (error
-       (message "Error while decoding: %s" error)
-       nil)))
-   ((memq encoding '(7bit 8bit binary))
-    )
-   ((null encoding)
-    )
-   ((functionp encoding)
-    (ignore-errors (funcall encoding (point-min) (point-max))))
-   (t
-    (message "Unknown encoding %s; defaulting to 8bit" encoding))))
-
-(defun mm-encode-buffer (type)
-  "Encode the buffer which contains data of TYPE.
-The encoding used is returned."
-  (let* ((mime-type (if (stringp type) type (car type)))
-        (encoding
-         (or (and (listp type)
-                  (cadr (assq 'encoding type)))
-             (mm-content-transfer-encoding mime-type)))
-        (bits (mm-body-7-or-8)))
-    ;; We force buffers that are 7bit to be unencoded, no matter
-    ;; what the preferred encoding is.
-    (when (eq bits '7bit)
-      (setq encoding bits))
-    (mm-encode-content-transfer-encoding encoding mime-type)
-    encoding))
-
-(defun mm-insert-headers (type encoding &optional file)
-  "Insert headers for TYPE."
-  (insert "Content-Type: " type)
-  (when file
-    (insert ";\n\tname=\"" (file-name-nondirectory file) "\""))
-  (insert "\n")
-  (insert (format "Content-Transfer-Encoding: %s\n" encoding))
-  (insert "Content-Disposition: inline")
-  (when file
-    (insert ";\n\tfilename=\"" (file-name-nondirectory file) "\""))
-  (insert "\n")
-  (insert "\n"))
-
-(defun mm-content-transfer-encoding (type)
-  "Return a CTE suitable for TYPE."
-  (let ((rules mm-content-transfer-encoding-defaults))
-    (catch 'found
-      (while rules
-       (when (string-match (caar rules) type)
-         (throw 'found (cadar rules)))
-       (pop rules)))))
-
-(provide 'mm-encode)
-
-;;; mm-encode.el ends here
diff --git a/lisp/mm-util.el b/lisp/mm-util.el
deleted file mode 100644 (file)
index 0fa5e3c..0000000
+++ /dev/null
@@ -1,336 +0,0 @@
-;;; mm-util.el --- Utility functions for MIME things
-;; Copyright (C) 1998,99 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:
-
-(defconst mm-running-xemacs (string-match "XEmacs" emacs-version))
-
-(defconst mm-binary-coding-system
-  (if mm-running-xemacs
-      'binary 'no-conversion)
-  "100% binary coding system.")
-
-(defconst mm-text-coding-system
-  (and (fboundp 'coding-system-list)
-   (if (memq system-type '(windows-nt ms-dos ms-windows))
-       'raw-text-dos 'raw-text))
-  "Text-safe coding system (For removing ^M).")
-
-(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)
-    (viscii vietnamese-viscii-lower)
-    (iso-2022-jp latin-jisx0201 japanese-jisx0208 japanese-jisx0208-1978)
-    (euc-kr korean-ksc5601)
-    (cn-gb-2312 chinese-gb2312)
-    (cn-big5 chinese-big5-1 chinese-big5-2)
-    (tibetan tibetan)
-    (thai-tis620 thai-tis620)
-    (iso-2022-7bit ethiopic arabic-1-column arabic-2-column)
-    (iso-2022-jp-2 latin-iso8859-1 greek-iso8859-7
-                  latin-jisx0201 japanese-jisx0208-1978
-                  chinese-gb2312 japanese-jisx0208
-                  korean-ksc5601 japanese-jisx0212
-                  katakana-jisx0201)
-    (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.")
-
-
-(eval-and-compile
-  (mapcar
-   (lambda (elem)
-     (let ((nfunc (intern (format "mm-%s" (car elem)))))
-       (if (fboundp (car elem))
-          (fset nfunc (car elem))
-        (fset nfunc (cdr elem)))))
-   '((decode-coding-string . (lambda (s a) s))
-     (encode-coding-string . (lambda (s a) s))
-     (encode-coding-region . ignore)
-     (coding-system-list . ignore)
-     (decode-coding-region . ignore)
-     (char-int . identity)
-     (device-type . ignore)
-     (coding-system-equal . equal)
-     (annotationp . ignore)
-     (set-buffer-file-coding-system . ignore)
-     (make-char
-      . (lambda (charset int)
-         (int-to-char int)))
-     (read-coding-system
-      . (lambda (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-coding-system-list nil)
-(defun mm-get-coding-system-list ()
-  "Get the coding system list."
-  (or mm-coding-system-list
-      (setq mm-coding-system-list (mm-coding-system-list))))
-
-(defvar mm-charset-synonym-alist
-  '((big5 . cn-big5)
-    (gb2312 . cn-gb-2312)
-    (x-ctext . ctext))
-  "A mapping from invalid charset names to the real charset names.")
-
-(defconst mm-auto-save-coding-system
-  (cond 
-   ((memq 'emacs-mule (mm-get-coding-system-list))
-    (if (memq system-type '(windows-nt ms-dos ms-windows))
-       'emacs-mule-dos 'emacs-mule))
-   ((memq 'escape-quoted (mm-get-coding-system-list))
-    'escape-quoted)
-   ((memq 'no-conversion (mm-get-coding-system-list))
-    'no-conversion)
-   (t nil))
-  "Coding system of auto save file.")
-
-;;; Internal variables:
-
-;;; Functions:
-
-(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-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-synonym-alist))
-           charset))
-  (when lbt
-    (setq charset (intern (format "%s-%s" charset lbt))))
-  (cond
-   ;; Running in a non-MULE environment.
-   ((null (mm-get-coding-system-list))
-    charset)
-   ;; ascii
-   ((eq charset 'us-ascii)
-    'ascii)
-   ;; Check to see whether we can handle this charset.
-   ((memq charset (mm-get-coding-system-list))
-    charset)
-   ;; Nope.
-   (t
-    nil)))
-
-(defun mm-replace-chars-in-string (string from to)
-  "Replace characters in STRING from FROM to TO."
-  (let ((string (substring string 0))  ;Copy string.
-       (len (length string))
-       (idx 0))
-    ;; Replace all occurrences of FROM with TO.
-    (while (< idx len)
-      (when (= (aref string idx) from)
-       (aset string idx to))
-      (setq idx (1+ idx)))
-    string))
-
-(defsubst mm-enable-multibyte ()
-  "Enable multibyte in the current buffer."
-  (when (and (fboundp 'set-buffer-multibyte)
-            (default-value 'enable-multibyte-characters))
-    (set-buffer-multibyte t)))
-
-(defsubst mm-disable-multibyte ()
-  "Disable multibyte in the current buffer."
-  (when (fboundp 'set-buffer-multibyte)
-    (set-buffer-multibyte nil)))
-
-(defun mm-preferred-coding-system (charset)
-  ;; A typo in some Emacs versions.
-  (or (get-charset-property charset 'prefered-coding-system)
-      (get-charset-property charset 'preffered-coding-system)))
-
-(defun mm-mime-charset (charset)
-  "Return the MIME charset corresponding to the MULE CHARSET."
-  (if (fboundp 'coding-system-get)
-      ;; This exists in Emacs 20.
-      (or
-       (and (mm-preferred-coding-system charset)
-           (coding-system-get
-            (mm-preferred-coding-system charset) 'mime-charset))
-       (and (eq charset 'ascii)
-           'us-ascii)
-       (mm-preferred-coding-system charset)
-       (mm-mule-charset-to-mime-charset charset))
-    ;; This is for XEmacs.
-    (mm-mule-charset-to-mime-charset charset)))
-
-(defun mm-find-mime-charset-region (b e)
-  "Return the MIME charsets needed to encode the region between B and E."
-  (let ((charsets
-        (mapcar 'mm-mime-charset
-                (delq 'ascii
-                      (mm-find-charset-region b e)))))
-    (when (memq 'iso-2022-jp-2 charsets)
-      (setq charsets (delq 'iso-2022-jp charsets)))
-    (delete-duplicates charsets)))
-
-(defsubst mm-multibyte-p ()
-  "Say whether multibyte is enabled."
-  (and (boundp 'enable-multibyte-characters)
-       enable-multibyte-characters))
-
-(defmacro mm-with-unibyte-buffer (&rest forms)
-  "Create a temporary buffer, and evaluate FORMS there like `progn'.
-See also `with-temp-file' and `with-output-to-string'."
-  (let ((temp-buffer (make-symbol "temp-buffer"))
-       (multibyte (make-symbol "multibyte")))
-    `(if (not (boundp 'enable-multibyte-characters))
-        (with-temp-buffer ,@forms)
-       (let ((,multibyte (default-value 'enable-multibyte-characters))
-            ,temp-buffer)
-        (unwind-protect
-            (progn
-              (setq-default enable-multibyte-characters nil)
-              (setq ,temp-buffer
-                    (get-buffer-create (generate-new-buffer-name " *temp*")))
-              (unwind-protect
-                  (with-current-buffer ,temp-buffer
-                    (let ((buffer-file-coding-system mm-binary-coding-system)
-                          (coding-system-for-read mm-binary-coding-system)
-                          (coding-system-for-write mm-binary-coding-system))
-                      ,@forms))
-                (and (buffer-name ,temp-buffer)
-                     (kill-buffer ,temp-buffer))))
-          (setq-default enable-multibyte-characters ,multibyte))))))
-(put 'mm-with-unibyte-buffer 'lisp-indent-function 0)
-(put 'mm-with-unibyte-buffer 'edebug-form-spec '(body))
-
-(defun mm-find-charset-region (b e)
-  "Return a list of charsets in the region."
-  (cond
-   ((and (boundp 'enable-multibyte-characters)
-        enable-multibyte-characters
-        (fboundp 'find-charset-region))
-    (find-charset-region b e))
-   ((not (boundp 'current-language-environment))
-    (save-excursion
-      (save-restriction
-       (narrow-to-region b e)
-       (goto-char (point-min))
-       (skip-chars-forward "\0-\177")
-       (if (eobp)
-           '(ascii)
-         (delq nil (list 'ascii mail-parse-charset))))))
-   (t
-    ;; We are in a unibyte buffer, so we futz around a bit.
-    (save-excursion
-      (save-restriction
-       (narrow-to-region b e)
-       (goto-char (point-min))
-       (let ((entry (assoc (capitalize current-language-environment)
-                           language-info-alist)))
-         (skip-chars-forward "\0-\177")
-         (if (eobp)
-             '(ascii)
-           (list 'ascii (car (last (assq 'charset entry)))))))))))
-
-(defun mm-read-charset (prompt)
-  "Return a charset."
-  (intern
-   (completing-read
-    prompt
-    (mapcar (lambda (e) (list (symbol-name (car e))))
-           mm-mime-mule-charset-alist)
-    nil t)))
-
-(defun mm-quote-arg (arg)
-  "Return a version of ARG that is safe to evaluate in a shell."
-  (let ((pos 0) new-pos accum)
-    ;; *** bug: we don't handle newline characters properly
-    (while (setq new-pos (string-match "[]*[;!'`\"$\\& \t{} |()<>]" arg pos))
-      (push (substring arg pos new-pos) accum)
-      (push "\\" accum)
-      (push (list (aref arg new-pos)) accum)
-      (setq pos (1+ new-pos)))
-    (if (= pos 0)
-        arg
-      (apply 'concat (nconc (nreverse accum) (list (substring arg pos)))))))
-
-(defun mm-auto-mode-alist ()
-  "Return an `auto-mode-alist' with only the .gz (etc) thingies."
-  (let ((alist auto-mode-alist)
-       out)
-    (while alist
-      (when (listp (cdar alist))
-       (push (car alist) out))
-      (pop alist))
-    (nreverse out)))
-
-(defun mm-insert-file-contents (filename &optional visit beg end replace)
-  "Like `insert-file-contents', q.v., but only reads in the file.
-A buffer may be modified in several ways after reading into the buffer due
-to advanced Emacs features, such as file-name-handlers, format decoding,
-find-file-hooks, etc.
-  This function ensures that none of these modifications will take place."
-  (let ((format-alist nil)
-       (auto-mode-alist (mm-auto-mode-alist))
-       (default-major-mode 'fundamental-mode)
-       (enable-local-variables nil)
-        (after-insert-file-functions nil)
-       (enable-local-eval nil)
-       (find-file-hooks nil))
-    (insert-file-contents filename visit beg end replace)))
-
-(provide 'mm-util)
-
-;;; mm-util.el ends here
diff --git a/lisp/mm-uu.el b/lisp/mm-uu.el
deleted file mode 100644 (file)
index 8d3ff3b..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-;;; mm-uu.el -- Return uu stuffs as mm handles
-;; Copyright (c) 1998,99 by Shenghuo Zhu
-
-;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
-;; Keywords: postscript uudecode binhex shar forward
-
-;; This file is part of pgnus.
-
-;; 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 'message)
-(require 'nnheader)
-(require 'mm-decode)
-(require 'mailcap)
-
-(eval-and-compile
-  (autoload 'binhex-decode-region "binhex")
-  (autoload 'binhex-decode-region-external "binhex")
-  (autoload 'uudecode-decode-region "uudecode")
-  (autoload 'uudecode-decode-region-external "uudecode"))
-
-(defun mm-uu-copy-to-buffer (from to)
-  "Copy the contents of the current buffer to a fresh buffer."
-  (save-excursion
-    (let ((obuf (current-buffer)))
-      (set-buffer (generate-new-buffer " *mm-uu*"))
-      (insert-buffer-substring obuf from to)
-      (current-buffer))))
-
-;;; postscript
-
-(defconst mm-uu-postscript-begin-line "^%!PS-")
-(defconst mm-uu-postscript-end-line "^%%EOF$")
-
-(defconst mm-uu-uu-begin-line "^begin[ \t]+[0-7][0-7][0-7][ \t]+")
-(defconst mm-uu-uu-end-line "^end[ \t]*$")
-
-(defcustom mm-uu-decode-function 'uudecode-decode-region
-  "*Function to uudecode.
-Internal function is done in elisp by default, therefore decoding may
-appear to be horribly slow . You can make Gnus use the external Unix
-decoder, such as uudecode."
-  :type '(choice (item :tag "internal" uudecode-decode-region)
-                (item :tag "external" uudecode-decode-region-external))
-  :group 'gnus-article-mime) 
-
-(defconst mm-uu-binhex-begin-line
-  "^:...............................................................$")
-(defconst mm-uu-binhex-end-line ":$")
-
-(defcustom mm-uu-binhex-decode-function 'binhex-decode-region
-  "*Function to binhex decode.
-Internal function is done in elisp by default, therefore decoding may
-appear to be horribly slow . You can make Gnus use the external Unix
-decoder, such as hexbin."
-  :type '(choice (item :tag "internal" binhex-decode-region)
-                (item :tag "external" binhex-decode-region-external))
-  :group 'gnus-article-mime) 
-
-(defconst mm-uu-shar-begin-line "^#! */bin/sh")
-(defconst mm-uu-shar-end-line "^exit 0\\|^$")
-
-;;; Thanks to Edward J. Sabol <sabol@alderaan.gsfc.nasa.gov> and 
-;;; Peter von der Ah\'e <pahe@daimi.au.dk>
-(defconst mm-uu-forward-begin-line "^-+ \\(?:Start of \\)?Forwarded message")
-(defconst mm-uu-forward-end-line "^-+ End of forwarded message")
-
-(defvar mm-uu-begin-line nil)
-
-(defconst mm-uu-identifier-alist
-  '((?% . postscript) (?b . uu) (?: . binhex) (?# . shar)
-    (?- . forward)))
-
-(defvar mm-dissect-disposition "inline"
-  "The default disposition of uu parts.
-This can be either \"inline\" or \"attachment\".")
-
-(defun mm-uu-configure-p  (key val)
-  (member (cons key val) mm-uu-configure-list))
-
-(defun mm-uu-configure (&optional symbol value)
-  (if symbol (set-default symbol value))
-  (setq mm-uu-begin-line nil)
-  (mapcar '(lambda (type)
-            (if (mm-uu-configure-p type 'disabled) 
-                nil
-              (setq mm-uu-begin-line
-                    (concat mm-uu-begin-line
-                            (if mm-uu-begin-line "\\|")
-                            (symbol-value
-                             (intern (concat "mm-uu-" (symbol-name type)
-                                             "-begin-line")))))))
-         '(uu postscript binhex shar forward)))
-
-(defcustom mm-uu-configure-list nil
-  "A list of mm-uu configuration.
-To disable dissecting shar codes, for instance, add
-`(shar . disabled)' to this list."
-  :type '(repeat (cons 
-                 (choice (item postscript)
-                         (item uu) 
-                         (item binhex)
-                         (item shar)
-                         (item forward))
-                 (choice (item disabled))))
-  :group 'gnus-article-mime
-  :set 'mm-uu-configure) 
-
-(mm-uu-configure)
-
-;;;### autoload
-
-(defun mm-uu-dissect ()
-  "Dissect the current buffer and return a list of uu handles."
-  (let (ct ctl cte charset text-start start-char end-char
-          type file-name end-line result text-plain-type 
-          start-char-1 end-char-1
-          (case-fold-search t))
-    (save-excursion
-      (save-restriction
-       (mail-narrow-to-head)
-       (when (and (mail-fetch-field "mime-version")
-                  (setq ct (mail-fetch-field "content-type")))
-         (setq cte (message-fetch-field "content-transfer-encoding" t)
-               ctl (ignore-errors (mail-header-parse-content-type ct))
-               charset (and ctl (mail-content-type-get ctl 'charset)))
-         (if (stringp cte)
-             (setq cte (intern (downcase (mail-header-remove-whitespace
-                                          (mail-header-remove-comments
-                                           cte)))))))
-       (goto-char (point-max)))
-      (forward-line)
-      (setq text-start (point)
-           text-plain-type (cons "text/plain"
-                                 (if charset
-                                     (list (cons 'charset charset)))))
-      (while (re-search-forward mm-uu-begin-line nil t)
-       (setq start-char (match-beginning 0))
-       (setq type (cdr (assq (aref (match-string 0) 0)
-                             mm-uu-identifier-alist)))
-       (setq file-name
-             (if (and (eq type 'uu)
-                      (looking-at "\\(.+\\)$"))
-                 (and (match-string 1)
-                      (let ((nnheader-file-name-translation-alist
-                             '((?/ . ?,) (? . ?_) (?* . ?_) (?$ . ?_))))
-                        (nnheader-translate-file-chars (match-string 1))))))
-       (forward-line) ;; in case of failure
-       (setq start-char-1 (point))
-       (setq end-line (symbol-value
-                       (intern (concat "mm-uu-" (symbol-name type)
-                                       "-end-line"))))
-       (when (and (re-search-forward end-line nil t)
-                  (not (eq (match-beginning 0) (match-end 0))))
-         (setq end-char-1 (match-beginning 0))
-         (forward-line)
-         (setq end-char (point))
-         (when (or (not (eq type 'binhex))
-                   (setq file-name
-                         (ignore-errors
-                           (binhex-decode-region start-char end-char t))))
-           (if (> start-char text-start)
-               (push
-                (mm-make-handle (mm-uu-copy-to-buffer text-start start-char)
-                      text-plain-type cte)
-                result))
-           (push
-            (cond
-             ((eq type 'postscript)
-              (mm-make-handle (mm-uu-copy-to-buffer start-char end-char)
-                    '("application/postscript")))
-             ((eq type 'forward)
-              (mm-make-handle (mm-uu-copy-to-buffer start-char-1 end-char-1)
-                    '("message/rfc822")))
-             ((eq type 'uu)
-              (mm-make-handle (mm-uu-copy-to-buffer start-char end-char)
-                    (list (or (and file-name
-                                   (string-match "\\.[^\\.]+$" file-name)
-                                   (mailcap-extension-to-mime
-                                    (match-string 0 file-name)))
-                              "application/octet-stream"))
-                    'x-uuencode nil
-                    (if (and file-name (not (equal file-name "")))
-                        (list mm-dissect-disposition
-                              (cons 'filename file-name)))))
-             ((eq type 'binhex)
-              (mm-make-handle (mm-uu-copy-to-buffer start-char end-char)
-                    (list (or (and file-name
-                                   (string-match "\\.[^\\.]+$" file-name)
-                                   (mailcap-extension-to-mime
-                                    (match-string 0 file-name)))
-                              "application/octet-stream"))
-                    'x-binhex nil
-                    (if (and file-name (not (equal file-name "")))
-                        (list mm-dissect-disposition
-                              (cons 'filename file-name)))))
-             ((eq type 'shar)
-              (mm-make-handle (mm-uu-copy-to-buffer start-char end-char)
-                    '("application/x-shar"))))
-            result)
-           (setq text-start end-char))))
-      (when result
-       (if (> (point-max) (1+ text-start))
-           (push
-            (mm-make-handle (mm-uu-copy-to-buffer text-start (point-max))
-                  text-plain-type cte)
-            result))
-       (setq result (cons "multipart/mixed" (nreverse result))))
-      result)))
-
-;;;### autoload
-(defun mm-uu-test ()
-  "Check whether the current buffer contains uu stuffs."
-  (save-excursion
-    (save-restriction
-      (mail-narrow-to-head)
-      (goto-char (point-max)))
-    (forward-line)
-    (let (type end-line result
-              (case-fold-search t))
-      (while (and mm-uu-begin-line
-                 (not result) (re-search-forward mm-uu-begin-line nil t))
-       (forward-line)
-       (setq type (cdr (assq (aref (match-string 0) 0)
-                             mm-uu-identifier-alist)))
-       (setq end-line (symbol-value
-                       (intern (concat "mm-uu-" (symbol-name type)
-                                       "-end-line"))))
-       (if (and (re-search-forward end-line nil t)
-                (not (eq (match-beginning 0) (match-end 0))))
-           (setq result t)))
-      result)))
-
-(provide 'mm-uu)
-
-;;; mm-uu.el ends here
diff --git a/lisp/mm-view.el b/lisp/mm-view.el
deleted file mode 100644 (file)
index 19e017a..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-;;; mm-view.el --- Functions for viewing MIME objects
-;; Copyright (C) 1998,99 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)
-(require 'mm-decode)
-
-(eval-and-compile
-  (autoload 'gnus-article-prepare-display "gnus-art")
-  (autoload 'vcard-parse-string "vcard")
-  (autoload 'vcard-format-string "vcard"))
-
-;;;
-;;; Functions for displaying various formats inline
-;;;
-
-(defun mm-inline-image (handle)
-  (let ((b (point))
-       (annot (make-annotation (mm-get-image handle) nil 'text))
-       buffer-read-only)
-    (insert "\n")
-    (mm-handle-set-undisplayer
-     handle
-     `(lambda ()
-       (let (buffer-read-only)
-         (delete-annotation ,annot)
-         (delete-region ,(set-marker (make-marker) b)
-                        ,(set-marker (make-marker) (point))))))
-    (set-extent-property annot 'mm t)
-    (set-extent-property annot 'duplicable t)))
-
-(defvar mm-w3-setup nil)
-(defun mm-setup-w3 ()
-  (unless mm-w3-setup
-    (require 'w3)
-    (w3-do-setup)
-    (require 'url)
-    (require 'w3-vars)
-    (require 'url-vars)
-    (setq mm-w3-setup t)))
-
-(defun mm-inline-text (handle)
-  (let ((type (mm-handle-media-subtype handle))
-       text buffer-read-only)
-    (cond
-     ((equal type "html")
-      (mm-setup-w3)
-      (setq text (mm-get-part handle))
-      (let ((b (point))
-           (url-standalone-mode t)
-           (url-current-object
-            (url-generic-parse-url (format "cid:%s" (mm-handle-id handle))))
-           (width (window-width))
-           (charset (mail-content-type-get
-                     (mm-handle-type handle) 'charset)))
-       (save-excursion
-         (insert text)
-         (save-restriction
-           (narrow-to-region b (point))
-           (goto-char (point-min))
-           (if (or (re-search-forward
-                    w3-meta-content-type-charset-regexp nil t)
-                   (re-search-forward
-                    w3-meta-charset-content-type-regexp nil t))
-               (setq charset (w3-coding-system-for-mime-charset 
-                              (buffer-substring-no-properties 
-                               (match-beginning 2) 
-                               (match-end 2)))))
-           (delete-region (point-min) (point-max))
-           (insert (mm-decode-string text charset))
-           (save-window-excursion
-             (save-restriction
-               (let ((w3-strict-width width)
-                     (url-standalone-mode t))
-                 (condition-case var
-                     (w3-region (point-min) (point-max))
-                   (error)))))
-           (mm-handle-set-undisplayer
-            handle
-            `(lambda ()
-               (let (buffer-read-only)
-                 (if (functionp 'remove-specifier)
-                     (mapc (lambda (prop)
-                             (remove-specifier
-                              (face-property 'default prop) (current-buffer)))
-                           '(background background-pixmap foreground)))
-                 (delete-region ,(point-min-marker)
-                                ,(point-max-marker)))))))))
-     ((or (equal type "enriched")
-         (equal type "richtext"))
-      (save-excursion
-       (mm-with-unibyte-buffer
-         (mm-insert-part handle)
-         (save-window-excursion
-           (enriched-decode (point-min) (point-max))
-           (setq text (buffer-string)))))
-      (mm-insert-inline handle text))
-     ((equal type "x-vcard")
-      (mm-insert-inline
-       handle
-       (concat "\n-- \n"
-              (vcard-format-string
-               (vcard-parse-string (mm-get-part handle)
-                                   'vcard-standard-filter)))))
-     (t
-      (setq text (mm-get-part handle))
-      (let ((b (point))
-           (charset (mail-content-type-get
-                     (mm-handle-type handle) 'charset)))
-       (insert (mm-decode-string text charset))
-       (save-restriction
-         (narrow-to-region b (point))
-         (set-text-properties (point-min) (point-max) nil)
-         (mm-handle-set-undisplayer
-          handle
-          `(lambda ()
-             (let (buffer-read-only)
-               (delete-region ,(point-min-marker)
-                              ,(point-max-marker)))))))))))
-
-(defun mm-insert-inline (handle text)
-  "Insert TEXT inline from HANDLE."
-  (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)
-  (let ((url-standalone-mode t))
-    (w3-prepare-buffer)))
-
-(defun mm-view-message ()
-  (mm-enable-multibyte)
-  (gnus-article-prepare-display)
-  (run-hooks 'gnus-article-decode-hook)
-  (fundamental-mode)
-  (goto-char (point-min)))
-
-(defun mm-inline-message (handle)
-  (let ((b (point))
-       gnus-displaying-mime handles)
-    (save-excursion
-      (save-restriction
-       (narrow-to-region b b)
-       (mm-insert-part handle)
-       (let (gnus-article-mime-handles)
-         (run-hooks 'gnus-article-decode-hook)
-         (gnus-article-prepare-display)
-         (setq handles gnus-article-mime-handles))
-       (when handles
-         (setq gnus-article-mime-handles
-               (append gnus-article-mime-handles handles)))
-       (mm-handle-set-undisplayer
-        handle
-        `(lambda ()
-           (let (buffer-read-only)
-             (ignore-errors
-               ;; This is only valid on XEmacs.
-               (mapc (lambda (prop)
-                       (remove-specifier
-                        (face-property 'default prop) (current-buffer)))
-                     '(background background-pixmap foreground)))
-             (delete-region ,(point-min-marker) ,(point-max-marker)))))))))
-
-(provide 'mm-view)
-
-;; mm-view.el ends here
diff --git a/lisp/mm.el b/lisp/mm.el
deleted file mode 100644 (file)
index 1b57cb1..0000000
+++ /dev/null
@@ -1,1283 +0,0 @@
-;;; mm.el,v --- Mailcap parsing routines, and MIME handling
-;; Author: wmperry
-;; Created: 1996/05/28 02:46:51
-;; Version: 1.96
-;; Keywords: mail, news, hypermedia
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Copyright (c) 1994, 1995, 1996 by William M. Perry <wmperry@cs.indiana.edu>
-;;; Copyright (c) 1996 - 1998 Free Software Foundation, Inc.
-;;;
-;;; This file is not part of GNU Emacs, but the same permissions apply.
-;;;
-;;; GNU Emacs is free software; you can redistribute it and/or modify
-;;; it under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 2, or (at your option)
-;;; any later version.
-;;;
-;;; GNU Emacs is distributed in the hope that it will be useful,
-;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;;; Boston, MA 02111-1307, USA.
-;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Generalized mailcap parsing and access routines
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;;
-;;; Data structures
-;;; ---------------
-;;; 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.
-;;;
-;;; The main interface to this code is:
-;;;
-;;; To set everything up:
-;;;
-;;;  (mm-parse-mailcaps [path])
-;;;
-;;;  Where PATH is a unix-style path specification (: separated list
-;;;  of strings).  If PATH is nil, the environment variable MAILCAPS
-;;;  will be consulted.  If there is no environment variable, then a
-;;;  default list of paths is used.
-;;;
-;;; To retrieve the information:
-;;;  (mm-mime-info st [nd] [request])
-;;;
-;;;  Where st and nd are positions in a buffer that contain the
-;;;  content-type header information of a mail/news/whatever message.
-;;;  st can optionally be a string that contains the content-type
-;;;  information.
-;;;
-;;;  Third 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.
-;;;
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Variables, etc
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(eval-and-compile
-  (require 'cl)
-;LMI was here
-  ;;(require 'devices)
-  )
-
-(defconst mm-version (let ((x "1.96"))
-                      (if (string-match "Revision: \\([^ \t\n]+\\)" x)
-                          (substring x (match-beginning 1) (match-end 1))
-                        x))
-  "Version # of MM package")
-
-(defvar mm-parse-args-syntax-table
-  (copy-syntax-table emacs-lisp-mode-syntax-table)
-  "A syntax table for parsing sgml attributes.")
-
-(modify-syntax-entry ?' "\"" mm-parse-args-syntax-table)
-(modify-syntax-entry ?` "\"" mm-parse-args-syntax-table)
-(modify-syntax-entry ?{ "(" mm-parse-args-syntax-table)
-(modify-syntax-entry ?} ")" mm-parse-args-syntax-table)
-
-(defvar mm-mime-data
-  '(
-    ("multipart"   . (
-                     ("alternative". (("viewer" . mm-multipart-viewer)
-                                      ("type"   . "multipart/alternative")))
-                     ("mixed"      . (("viewer" . mm-multipart-viewer)
-                                      ("type"   . "multipart/mixed")))
-                     (".*"         . (("viewer" . mm-save-binary-file)
-                                      ("type"   . "multipart/*")))
-                     )
-     )
-    ("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" . mm-save-binary-file)
-                                        ("type" ."application/octet-stream")))
-                     ("dvi"        . (("viewer" . "open %s")
-                                      ("type"   . "application/dvi")
-                                      ("test"   . (eq (device-type) 'ns))))
-                     ("dvi"        . (("viewer" . "xdvi %s")
-                                      ("test"   . (eq (device-type) 'x))
-                                      ("needsx11")
-                                      ("type"   . "application/dvi")))
-                     ("dvi"        . (("viewer" . "dvitty %s")
-                                      ("test"   . (not (getenv "DISPLAY")))
-                                      ("type"   . "application/dvi")))
-                     ("emacs-lisp" . (("viewer" . mm-maybe-eval)
-                                      ("type"   . "application/emacs-lisp")))
-;                    ("x-tar"      . (("viewer" . tar-mode)
-;                                     ("test"   . (fboundp 'tar-mode))
-;                                     ("type"   . "application/x-tar")))
-                     ("x-tar"      . (("viewer" . mm-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" . mm-save-binary-file)
-                                      ("type"   . "application/zip")
-                                      ("copiousoutput")))
-                     ("pdf"        . (("viewer" . "acroread %s")
-                                      ("type"   . "application/pdf")))
-                     ("postscript" . (("viewer" . "open %s")
-                                      ("type"   . "application/postscript")
-                                      ("test"   . (eq (device-type) 'ns))))
-                     ("postscript" . (("viewer" . "ghostview %s")
-                                      ("type" . "application/postscript")
-                                      ("test"   . (eq (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-play-sound-file)
-                              ("test"   . (or (featurep 'nas-sound)
-                                              (featurep 'native-sound)))
-                              ("type"   . "audio/*")))
-                     (".*" . (("viewer" . "showaudio")
-                              ("type"   . "audio/*")))
-                     ))
-    ("message"     . (
-                     ("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 (device-type) 'x))
-                                 ("needsx11")))
-                     ("x11-dump" . (("viewer" . "xwud -in %s")
-                                    ("type" . "image/x-xwd")
-                                    ("compose" . "xwd -frame > %s")
-                                    ("test"   . (eq (device-type) 'x))
-                                    ("needsx11")))
-                     ("windowdump" . (("viewer" . "xwud -in %s")
-                                      ("type" . "image/x-xwd")
-                                      ("compose" . "xwd -frame > %s")
-                                      ("test"   . (eq (device-type) 'x))
-                                      ("needsx11")))
-                     (".*" . (("viewer" . "open %s")
-                              ("type"   . "image/*")
-                              ("test"   . (eq (device-type) 'ns))))
-                     (".*" . (("viewer" . "xv -perfect %s")
-                              ("type" . "image/*")
-                              ("test"   . (eq (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-region))
-                                    ("type"   . "text/enriched")))
-                     ("html"  . (("viewer" . w3-prepare-buffer)
-                                 ("test"   . (fboundp 'w3-prepare-buffer))
-                                 ("type"   . "text/html")))
-                     ))
-    ("video"       . (
-                     ("mpeg" . (("viewer" . "mpeg_play %s")
-                                ("type"   . "video/mpeg")
-                                ("test"   . (eq (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 mm-content-transfer-encodings
-  '(("base64"     . base64-decode-region)
-    ("7bit"       . ignore)
-    ("8bit"       . ignore)
-    ("binary"     . ignore)
-    ("x-compress" . ("uncompress" "-c"))
-    ("x-gzip"     . ("gzip" "-dc"))
-    ("compress"   . ("uncompress" "-c"))
-    ("gzip"       . ("gzip" "-dc"))
-    ("x-hqx"      . ("mcvert" "-P" "-s" "-S"))
-    ("quoted-printable" . mm-decode-quoted-printable)
-    )
-  "*An assoc list of content-transfer-encodings and how to decode them.")
-
-(defvar mm-download-directory nil
-  "*Where downloaded files should go by default.")
-
-(defvar mm-temporary-directory (or (getenv "TMPDIR") "/tmp")
-  "*Where temporary files go.")
-
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; A few things from w3 and url, just in case this is used without them
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun mm-generate-unique-filename (&optional fmt)
-  "Generate a unique filename in mm-temporary-directory"
-  (if (not fmt)
-      (let ((base (format "mm-tmp.%d" (user-real-uid)))
-           (fname "")
-           (x 0))
-       (setq fname (format "%s%d" base x))
-       (while (file-exists-p
-               (expand-file-name fname mm-temporary-directory))
-         (setq x (1+ x)
-               fname (concat base (int-to-string x))))
-       (expand-file-name fname mm-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 mm-temporary-directory))
-       (setq x (1+ x)
-             fname (format fmt (concat base (int-to-string x)))))
-      (expand-file-name fname mm-temporary-directory))))
-
-(if (and (fboundp 'copy-tree)
-        (subrp (symbol-function 'copy-tree)))
-    (fset 'mm-copy-tree 'copy-tree)
-  (defun mm-copy-tree (tree)
-    (if (consp tree)
-       (cons (mm-copy-tree (car tree))
-             (mm-copy-tree (cdr tree)))
-      (if (vectorp tree)
-         (let* ((new (copy-sequence tree))
-                (i (1- (length new))))
-           (while (>= i 0)
-             (aset new i (mm-copy-tree (aref new i)))
-             (setq i (1- i)))
-           new)
-       tree))))
-
-;LMI was here
-;(require 'mule-sysdp)
-
-(if (not (fboundp 'w3-save-binary-file))
-    (defun mm-save-binary-file ()
-      ;; Ok, this is truly fucked.  In XEmacs, if you use the mouse to select
-      ;; a URL that gets saved via this function, read-file-name will pop up a
-      ;; dialog box for file selection.  For some reason which buffer we are in
-      ;; gets royally screwed (even with save-excursions and the whole nine
-      ;; yards).  SO, we just keep the old buffer name around and away we go.
-      (let ((old-buff (current-buffer))
-           (file (read-file-name "Filename to save as: "
-                                 (or mm-download-directory "~/")
-                                 (file-name-nondirectory (url-view-url t))
-                                 nil
-                                 (file-name-nondirectory (url-view-url t))))
-           (require-final-newline nil))
-       (set-buffer old-buff)
-       (mule-write-region-no-coding-system (point-min) (point-max) file)
-       (kill-buffer (current-buffer))))
-  (fset 'mm-save-binary-file 'w3-save-binary-file))
-
-(defun mm-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)))
-
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; The mailcap parser
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun mm-viewer-unescape (format &optional filename url)
-  (save-excursion
-    (set-buffer (get-buffer-create " *mm-parse*"))
-    (erase-buffer)
-    (insert format)
-    (goto-char (point-min))
-    (while (re-search-forward "%\\(.\\)" nil t)
-       (let ((escape (aref (match-string 1) 0)))
-        (replace-match "" t t)
-        (case escape
-          (?% (insert "%"))
-          (?s (insert (or filename "\"\"")))
-          (?u (insert (or url "\"\""))))))
-    (buffer-string)))
-
-(defun mm-in-assoc (elt list)
-  ;; Check to see if ELT matches any of the regexps in the car elements of LIST
-  (let (rslt)
-    (while (and list (not rslt))
-      (and (car (car list))
-          (string-match (car (car list)) elt)
-          (setq rslt (car list)))
-      (setq list (cdr list)))
-    rslt))
-
-(defun mm-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)))
-
-(defun mm-parse-mailcaps (&optional path)
-  ;; Parse out all the mailcaps specified in a unix-style path string PATH
-  (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
-                (mm-string-to-tokens 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))
-         (mm-parse-mailcap (car fnames)))
-      (setq fnames (cdr fnames)))))
-
-(defun mm-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
-       )
-    (save-excursion
-      (set-buffer (get-buffer-create " *mailcap*"))
-      (erase-buffer)
-      (insert-file-contents fname)
-      (set-syntax-table mm-parse-args-syntax-table)
-      (mm-replace-regexp "#.*" "")              ; Remove all comments
-      (mm-replace-regexp "\n+" "\n")         ; And blank lines
-      (mm-replace-regexp "\\\\[ \t\n]+" " ") ; And collapse spaces
-      (mm-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))))
-                         (mm-parse-mailcap-extras save-pos (point))))
-       (mm-mailcap-entry-passes-test info)
-       (mm-add-mailcap-entry major minor info)))))
-
-(defun mm-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 mm-string-to-tokens (str &optional delim)
-  "Return a list of words from the string STR"
-  (setq delim (or delim ? ))
-  (let (results y)
-    (mapcar
-     (function
-      (lambda (x)
-       (cond
-        ((and (= x delim) y) (setq results (cons y results) y nil))
-        ((/= x delim) (setq y (concat y (char-to-string x))))
-        (t nil)))) str)
-    (nreverse (cons y results))))
-
-(defun mm-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 (assoc "test" info)); The test clause
-       )
-    (setq status (and test (mm-string-to-tokens (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))))
-
-(defun mm-parse-args (st &optional nd nodowncase)
-  ;; Return an assoc list of attribute/value pairs from an RFC822-type string
-  (let (
-       name                            ; From name=
-       value                           ; its value
-       results                         ; Assoc list of results
-       name-pos                        ; Start of XXXX= position
-       val-pos                         ; Start of value position
-       )
-    (save-excursion
-      (if (stringp st)
-         (progn
-           (set-buffer (get-buffer-create " *mm-temp*"))
-           (set-syntax-table mm-parse-args-syntax-table)
-           (erase-buffer)
-           (insert st)
-           (setq st (point-min)
-                 nd (point-max)))
-       (set-syntax-table mm-parse-args-syntax-table))
-      (save-restriction
-       (narrow-to-region st nd)
-       (goto-char (point-min))
-       (while (not (eobp))
-         (skip-chars-forward "; \n\t")
-         (setq name-pos (point))
-         (skip-chars-forward "^ \n\t=;")
-         (if (not nodowncase)
-             (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)
-                 value
-                 (cond
-                  ((or (= (or (char-after val-pos) 0) ?\")
-                       (= (or (char-after val-pos) 0) ?'))
-                   (buffer-substring (1+ val-pos)
-                                     (condition-case ()
-                                         (prog2
-                                             (forward-sexp 1)
-                                             (1- (point))
-                                           (skip-chars-forward "\""))
-                                       (error
-                                        (skip-chars-forward "^ \t\n")
-                                        (point)))))
-                  (t
-                   (buffer-substring val-pos
-                                     (progn
-                                       (skip-chars-forward "^;")
-                                       (skip-chars-backward " \t")
-                                       (point)))))))
-         (setq results (cons (cons name value) results))
-         (skip-chars-forward "; \n\t"))
-       results))))
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; The action routines.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun mm-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 mm-unescape-mime-test (test type-info)
-  (let ((buff (get-buffer-create " *unescape*"))
-       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 " "))))
-      (save-excursion
-       (set-buffer buff)
-       (erase-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 (assoc "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 mm-unescape-mime-test. %s" test)))))
-
-(defun mm-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   (assoc "test"   viewer-info))
-        (test (cdr test-info))
-        (viewer (cdr (assoc "viewer" viewer-info)))
-        (default-directory (expand-file-name "~/"))
-        status
-        parsed-test
-       )
-    (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 (mm-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)))))
-
-(defun mm-add-mailcap-entry (major minor info)
-  (let ((old-major (assoc major mm-mime-data)))
-    (if (null old-major)               ; New major area
-       (setq mm-mime-data
-             (cons (cons major (list (cons minor info)))
-                   mm-mime-data))
-      (let ((cur-minor (assoc minor old-major)))
-       (cond
-        ((or (null cur-minor)          ; New minor area, or
-             (assoc "test" info))      ; Has a test, insert at beginning
-         (setcdr old-major (cons (cons minor info) (cdr old-major))))
-        ((and (not (assoc "test" info)); No test info, replace completely
-              (not (assoc "test" cur-minor)))
-         (setcdr cur-minor info))
-        (t
-         (setcdr old-major (cons (cons minor info) (cdr old-major)))))))))
-
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; The main whabbo
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun mm-viewer-lessp (x y)
-  ;; Return t iff viewer X is more desirable than viewer Y
-  (let ((x-wild (string-match "[*?]" (or (cdr-safe (assoc "type" x)) "")))
-       (y-wild (string-match "[*?]" (or (cdr-safe (assoc "type" y)) "")))
-       (x-lisp (not (stringp (or (cdr-safe (assoc "viewer" x)) ""))))
-       (y-lisp (not (stringp (or (cdr-safe (assoc "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 mm-mime-info (st &optional nd request)
-  "Get the mime viewer command for HEADERLINE, return nil if none found.
-Expects a complete content-type header line as its argument.  This can
-be simple like text/html, or complex like text/plain; charset=blah; foo=bar
-
-Third 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."
-  (let (
-       major                           ; Major encoding (text, etc)
-       minor                           ; Minor encoding (html, etc)
-       info                            ; Other info
-       save-pos                        ; Misc. position during parse
-       major-info                      ; (assoc major mm-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
-       )
-    (save-excursion
-      (cond
-       ((null st)
-       (set-buffer (get-buffer-create " *mimeparse*"))
-       (erase-buffer)
-       (insert "text/plain")
-       (setq st (point-min)))
-       ((stringp st)
-       (set-buffer (get-buffer-create " *mimeparse*"))
-       (erase-buffer)
-       (insert st)
-       (setq st (point-min)))
-       ((null nd)
-       (narrow-to-region st (progn (goto-char st) (end-of-line) (point))))
-       (t (narrow-to-region st nd)))
-      (goto-char st)
-      (skip-chars-forward ": \t\n")
-      (buffer-enable-undo)
-      (setq viewer
-           (catch 'mm-exit
-             (setq save-pos (point))
-             (skip-chars-forward "^/")
-             (downcase-region save-pos (point))
-             (setq major (buffer-substring save-pos (point)))
-             (if (not (setq major-info (cdr (assoc major mm-mime-data))))
-                 (throw 'mm-exit nil))
-             (skip-chars-forward "/ \t\n")
-             (setq save-pos (point))
-             (skip-chars-forward "^ \t\n;")
-             (downcase-region save-pos (point))
-             (setq minor (buffer-substring save-pos (point)))
-             (if (not
-                  (setq viewers (mm-possible-viewers major-info minor)))
-                 (throw 'mm-exit nil))
-             (skip-chars-forward "; \t")
-             (if (eolp)
-                 nil                           ; No qualifiers
-               (setq save-pos (point))
-               (end-of-line)
-               (setq info (mm-parse-args save-pos (point)))
-               )
-             (while viewers
-               (if (mm-viewer-passes-test (car viewers) info)
-                   (setq passed (cons (car viewers) passed)))
-               (setq viewers (cdr viewers)))
-             (setq passed (sort (nreverse passed) 'mm-viewer-lessp))
-             (car passed)))
-      (if (and (stringp (cdr (assoc "viewer" viewer)))
-              passed)
-         (setq viewer (car passed)))
-      (widen)
-      (cond
-       ((and (null viewer) (not (equal major "default")))
-       (mm-mime-info "default" nil request))
-       ((or (null request) (equal request ""))
-       (mm-unescape-mime-test (cdr (assoc "viewer" viewer)) info))
-       ((stringp request)
-       (if (or (string= request "test") (string= request "viewer"))
-           (mm-unescape-mime-test (cdr-safe (assoc request viewer)) info)))
-       (t
-       ;; MUST make a copy *sigh*, else we modify mm-mime-data
-       (setq viewer (mm-copy-tree viewer))
-       (let ((view (assoc "viewer" viewer))
-             (test (assoc "test" viewer)))
-         (if view (setcdr view (mm-unescape-mime-test (cdr view) info)))
-         (if test (setcdr test (mm-unescape-mime-test (cdr test) info))))
-       viewer)))))
-
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Experimental MIME-types parsing
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defvar mm-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")
-    (".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 mm-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
-                (mm-string-to-tokens 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))
-         (mm-parse-mimetype-file (car fnames)))
-      (setq fnames (cdr fnames)))))
-
-(defun mm-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
-       )
-    (save-excursion
-      (set-buffer (get-buffer-create " *mime-types*"))
-      (erase-buffer)
-      (insert-file-contents fname)
-      (mm-replace-regexp "#.*" "")
-      (mm-replace-regexp "\n+" "\n")
-      (mm-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 mm-mime-extensions
-               (cons
-                (cons (if (= (string-to-char (car extns)) ?.)
-                          (car extns)
-                        (concat "." (car extns))) type) mm-mime-extensions)
-               extns (cdr extns)))))))
-
-(defun mm-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) mm-mime-extensions)))
-
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Editing/Composition of body parts
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun mm-compose-type (type)
-  ;; Compose a body section of MIME-type TYPE.
-  (let* ((info (mm-mime-info type nil 5))
-        (fnam (mm-generate-unique-filename))
-        (comp (or (cdr (assoc "compose" info))))
-        (ctyp (cdr (assoc "composetyped" info)))
-        (buff (get-buffer-create " *mimecompose*"))
-        (typeit (not ctyp))
-        (retval "")
-        (usef nil))
-    (setq comp (mm-unescape-mime-test (or comp ctyp) info))
-    (while (string-match "\\([^\\\\]\\)%s" comp)
-      (setq comp (concat (substring comp 0 (match-end 1)) fnam
-                        (substring comp (match-end 0) nil))
-           usef t))
-    (call-process shell-file-name nil
-                 (if usef nil buff)
-                 nil shell-command-switch comp)
-    (setq retval
-         (concat
-          (if typeit (concat "Content-type: " type "\r\n\r\n") "")
-          (if usef
-              (save-excursion
-                (set-buffer buff)
-                (erase-buffer)
-                (insert-file-contents fnam)
-                (buffer-string))
-            (save-excursion
-              (set-buffer buff)
-              (buffer-string)))
-          "\r\n"))
-    retval))   
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Misc.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun mm-type-to-file (type)
-  "Return the file extension for content-type TYPE"
-  (rassoc type mm-mime-extensions))
-
-\f
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Miscellaneous MIME viewers written in elisp
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun mm-play-sound-file (&optional buff)
-  "Play a sound file in buffer BUFF (defaults to current buffer)"
-  (setq buff (or buff (current-buffer)))
-  (let ((fname (mm-generate-unique-filename "%s.au"))
-       (synchronous-sounds t))         ; Play synchronously
-    (mule-write-region-no-coding-system (point-min) (point-max) fname)
-    (kill-buffer (current-buffer))
-    (play-sound-file fname)
-    (condition-case ()
-       (delete-file fname)
-      (error nil))))
-    
-(defun mm-parse-mime-headers (&optional no-delete)
-  "Return a list of the MIME headers at the top of this buffer.  If
-optional argument NO-DELETE is non-nil, don't delete the headers."
-  (let* ((st (point-min))
-        (nd (progn
-              (goto-char (point-min))
-              (skip-chars-forward " \t\n")
-              (if (re-search-forward "^\r*$" nil t)
-                  (1+ (point))
-                (point-max))))
-        save-pos
-        status
-        hname
-        hvalu
-        result
-        search
-        )
-    (narrow-to-region st (min nd (point-max)))
-    (goto-char (point-min))
-    (while (not (eobp))
-      (skip-chars-forward " \t\n\r")
-      (setq save-pos (point))
-      (skip-chars-forward "^:\n\r")
-      (downcase-region save-pos (point))
-      (setq hname (buffer-substring save-pos (point)))
-      (skip-chars-forward ": \t ")
-      (setq save-pos (point))
-      (skip-chars-forward "^\n\r")
-      (setq search t)
-      (while search
-       (skip-chars-forward "^\n\r")
-       (save-excursion
-         (skip-chars-forward "\n\r")
-         
-         (setq search
-               (string-match "[ \t]"
-                             (char-to-string
-                              (or (char-after (point)) ?a)))))
-       (if search
-           (skip-chars-forward "\n\r")))
-      (setq hvalu (buffer-substring save-pos (point))
-           result (cons (cons hname hvalu) result)))
-    (or no-delete (delete-region st nd))
-    result))
-
-(defun mm-find-available-multiparts (separator &optional buf)
-  "Return a list of mime-headers for the various body parts of a 
-multipart message in buffer BUF with separator SEPARATOR.
-The different multipart specs are put in `mm-temporary-directory'."
-  (let ((sep (concat "^--" separator "\r*$"))
-       headers
-       fname
-       results)
-    (save-excursion
-      (and buf (set-buffer buf))
-      (goto-char (point-min))
-      (while (re-search-forward sep nil t)
-       (let ((st (set-marker (make-marker)
-                             (progn
-                               (forward-line 1)
-                               (beginning-of-line)
-                               (point))))
-             (nd (set-marker (make-marker)
-                             (if (re-search-forward sep nil t)
-                                 (1- (match-beginning 0))
-                               (point-max)))))
-         (narrow-to-region st nd)
-         (goto-char st)
-         (if (looking-at "^\r*$")
-             (insert "Content-type: text/plain\n"
-                     "Content-length: " (int-to-string (- nd st)) "\n"))
-         (setq headers (mm-parse-mime-headers)
-               fname (mm-generate-unique-filename))
-         (let ((x (or (cdr (assoc "content-type" headers)) "text/plain")))
-           (if (string-match "name=\"*\\([^ \"]+\\)\"*" x)
-               (setq fname (expand-file-name
-                            (substring x (match-beginning 1)
-                                       (match-end 1))
-                            mm-temporary-directory))))
-         (widen)
-         (if (assoc "content-transfer-encoding" headers)
-             (let ((coding (cdr
-                            (assoc "content-transfer-encoding" headers)))
-                   (cmd nil))
-               (setq coding (and coding (downcase coding))
-                     cmd (or (cdr (assoc coding
-                                         mm-content-transfer-encodings))
-                             (read-string
-                              (concat "How shall I decode " coding "? ")
-                              "cat")))
-               (if (string= cmd "") (setq cmd "cat"))
-               (if (stringp cmd)
-                   (shell-command-on-region st nd cmd t)
-                 (funcall cmd st nd))
-               (or (eq cmd 'ignore) (set-marker nd (point)))))
-         (write-region st nd fname nil 5)
-         (delete-region st nd)
-         (setq results (cons
-                        (cons
-                         (cons "mm-filename" fname) headers) results)))))
-    results))
-
-(defun mm-format-multipart-as-html (&optional buf type)
-  (if buf (set-buffer buf))
-  (let* ((boundary (if (string-match
-                       "boundary[ \t]*=[ \t\"]*\\([^ \"\t\n]+\\)"
-                       type)
-                      (regexp-quote
-                       (substring type (match-beginning 1) (match-end 1)))))
-        (parts    (mm-find-available-multiparts boundary)))
-    (erase-buffer)
-    (insert "<html>\n"
-           " <head>\n"
-           "  <title>Multipart Message</title>\n"
-           " </head>\n"
-           " <body>\n"
-           "   <h1> Multipart message encountered </h1>\n"
-           "   <p> I have encountered a multipart MIME message.\n"
-           "       The following parts have been detected.  Please\n"
-           "       select which one you want to view.\n"
-           "   </p>\n"
-           "   <ul>\n"
-           (mapconcat 
-            (function (lambda (x)
-                        (concat "    <li> <a href=\"file:"
-                                (cdr (assoc "mm-filename" x))
-                                "\">"
-                                (or (cdr (assoc "content-description" x)) "")
-                                "--"
-                                (or (cdr (assoc "content-type" x))
-                                    "unknown type")
-                                "</a> </li>")))
-            parts "\n")
-           "   </ul>\n"
-           " </body>\n"
-           "</html>\n"
-           "<!-- Automatically generated by MM v" mm-version "-->\n")))
-
-(defun mm-multipart-viewer ()
-  (mm-format-multipart-as-html
-   (current-buffer)
-   (cdr (assoc "content-type" url-current-mime-headers)))
-  (let ((w3-working-buffer (current-buffer)))
-    (w3-prepare-buffer)))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Transfer encodings we can decrypt automatically
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(defun mm-decode-quoted-printable (&optional st nd)
-  (interactive)
-  (setq st (or st (point-min))
-       nd (or nd (point-max)))
-  (save-restriction
-    (narrow-to-region st nd)
-    (save-excursion
-      (let ((buffer-read-only nil))
-       (goto-char (point-min))
-       (while (re-search-forward "=[0-9A-F][0-9A-F]" nil t)
-         (replace-match 
-          (char-to-string 
-           (+
-            (* 16 (mm-hex-char-to-integer 
-                   (char-after (1+ (match-beginning 0)))))
-            (mm-hex-char-to-integer
-             (char-after (1- (match-end 0))))))))))
-    (goto-char (point-max))))
-
-;; Taken from hexl.el.
-(defun mm-hex-char-to-integer (character)
-  "Take a char and return its value as if it was a hex digit."
-  (if (and (>= character ?0) (<= character ?9))
-      (- character ?0)
-    (let ((ch (logior character 32)))
-      (if (and (>= ch ?a) (<= ch ?f))
-         (- ch (- ?a 10))
-       (error (format "Invalid hex digit `%c'." ch))))))
-
-
-\f
-(require 'base64)
-(provide 'mm)
diff --git a/lisp/mml.el b/lisp/mml.el
deleted file mode 100644 (file)
index 286c8e4..0000000
+++ /dev/null
@@ -1,703 +0,0 @@
-;;; mml.el --- A package for parsing and validating MML documents
-;; Copyright (C) 1998,99 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 'mm-util)
-(require 'mm-bodies)
-(require 'mm-encode)
-(require 'mm-decode)
-
-(eval-and-compile
-  (autoload 'message-make-message-id "message"))
-
-(defvar mml-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 mml-parse ()
-  "Parse the current buffer as an MML document."
-  (goto-char (point-min))
-  (let ((table (syntax-table)))
-    (unwind-protect
-       (progn
-         (set-syntax-table mml-syntax-table)
-         (mml-parse-1))
-      (set-syntax-table table))))
-
-(defun mml-parse-1 ()
-  "Parse the current buffer as an MML document."
-  (let (struct tag point contents charsets warn)
-    (while (and (not (eobp))
-               (not (looking-at "<#/multipart")))
-      (cond
-       ((looking-at "<#multipart")
-       (push (nconc (mml-read-tag) (mml-parse-1)) struct))
-       ((looking-at "<#external")
-       (push (nconc (mml-read-tag) (list (cons 'contents (mml-read-part))))
-             struct))
-       (t
-       (if (looking-at "<#part")
-           (setq tag (mml-read-tag))
-         (setq tag (list 'part '(type . "text/plain"))
-               warn t))
-       (setq point (point)
-             contents (mml-read-part)
-             charsets (mm-find-mime-charset-region point (point)))
-       (if (< (length charsets) 2)
-           (push (nconc tag (list (cons 'contents contents)))
-                 struct)
-         (let ((nstruct (mml-parse-singlepart-with-multiple-charsets
-                         tag point (point))))
-           (when (and warn
-                      (not
-                       (y-or-n-p
-                        (format
-                         "Warning: Your message contains %d parts.  Really send? "
-                         (length nstruct)))))
-             (error "Edit your message to use only one charset"))
-           (setq struct (nconc nstruct struct)))))))
-    (unless (eobp)
-      (forward-line 1))
-    (nreverse struct)))
-
-(defun mml-parse-singlepart-with-multiple-charsets (orig-tag beg end)
-  (save-excursion
-    (narrow-to-region beg end)
-    (goto-char (point-min))
-    (let ((current (mm-mime-charset (char-charset (following-char))))
-         charset struct space newline paragraph)
-      (while (not (eobp))
-       (cond
-        ;; The charset remains the same.
-        ((or (eq (setq charset (mm-mime-charset
-                                (char-charset (following-char)))) 'us-ascii)
-             (eq charset current)))
-        ;; The initial charset was ascii.
-        ((eq current 'us-ascii)
-         (setq current charset
-               space nil
-               newline nil
-               paragraph nil))
-        ;; We have a change in charsets.
-        (t
-         (push (append
-                orig-tag
-                (list (cons 'contents
-                            (buffer-substring-no-properties
-                             beg (or paragraph newline space (point))))))
-               struct)
-         (setq beg (or paragraph newline space (point))
-               current charset
-               space nil
-               newline nil
-               paragraph nil)))
-       ;; Compute places where it might be nice to break the part.
-       (cond
-        ((memq (following-char) '(?  ?\t))
-         (setq space (1+ (point))))
-        ((eq (following-char) ?\n)
-         (setq newline (1+ (point))))
-        ((and (eq (following-char) ?\n)
-              (not (bobp))
-              (eq (char-after (1- (point))) ?\n))
-         (setq paragraph (point))))
-       (forward-char 1))
-      ;; Do the final part.
-      (unless (= beg (point))
-       (push (append orig-tag
-                     (list (cons 'contents
-                                 (buffer-substring-no-properties
-                                  beg (point)))))
-             struct))
-      struct)))
-
-(defun mml-read-tag ()
-  "Read a tag and return the contents."
-  (let (contents name elem val)
-    (forward-char 2)
-    (setq name (buffer-substring-no-properties
-               (point) (progn (forward-sexp 1) (point))))
-    (skip-chars-forward " \t\n")
-    (while (not (looking-at ">"))
-      (setq elem (buffer-substring-no-properties
-                 (point) (progn (forward-sexp 1) (point))))
-      (skip-chars-forward "= \t\n")
-      (setq val (buffer-substring-no-properties
-                (point) (progn (forward-sexp 1) (point))))
-      (when (string-match "^\"\\(.*\\)\"$" val)
-       (setq val (match-string 1 val)))
-      (push (cons (intern elem) val) contents)
-      (skip-chars-forward " \t\n"))
-    (forward-char 1)
-    (skip-chars-forward " \t\n")
-    (cons (intern name) (nreverse contents))))
-
-(defun mml-read-part ()
-  "Return the buffer up till the next part, multipart or closing part or multipart."
-  (let ((beg (point)))
-    ;; If the tag ended at the end of the line, we go to the next line.
-    (when (looking-at "[ \t]*\n")
-      (forward-line 1))
-    (if (re-search-forward
-        "<#\\(/\\)?\\(multipart\\|part\\|external\\)." nil t)
-       (prog1
-           (buffer-substring-no-properties beg (match-beginning 0))
-         (if (or (not (match-beginning 1))
-                 (equal (match-string 2) "multipart"))
-             (goto-char (match-beginning 0))
-           (when (looking-at "[ \t]*\n")
-             (forward-line 1))))
-      (buffer-substring-no-properties beg (goto-char (point-max))))))
-
-(defvar mml-boundary nil)
-(defvar mml-base-boundary "-=-=")
-(defvar mml-multipart-number 0)
-
-(defun mml-generate-mime ()
-  "Generate a MIME message based on the current MML document."
-  (let ((cont (mml-parse))
-       (mml-multipart-number 0))
-    (if (not cont)
-       nil
-      (with-temp-buffer
-       (if (and (consp (car cont))
-                (= (length cont) 1))
-           (mml-generate-mime-1 (car cont))
-         (mml-generate-mime-1 (nconc (list 'multipart '(type . "mixed"))
-                                     cont)))
-       (buffer-string)))))
-
-(defun mml-generate-mime-1 (cont)
-  (cond
-   ((eq (car cont) 'part)
-    (let (coded encoding charset filename type)
-      (setq type (or (cdr (assq 'type cont)) "text/plain"))
-      (if (member (car (split-string type "/")) '("text" "message"))
-         (with-temp-buffer
-           (cond
-            ((cdr (assq 'buffer cont))
-             (insert-buffer-substring (cdr (assq 'buffer cont))))
-            ((and (setq filename (cdr (assq 'filename cont)))
-                  (not (equal (cdr (assq 'nofile cont)) "yes")))
-             (mm-insert-file-contents filename))
-            (t
-             (save-restriction
-               (narrow-to-region (point) (point))
-               (insert (cdr (assq 'contents cont)))
-               ;; Remove quotes from quoted tags.
-               (goto-char (point-min))
-               (while (re-search-forward
-                       "<#!+/?\\(part\\|multipart\\|external\\)" nil t)
-                 (delete-region (+ (match-beginning 0) 2)
-                                (+ (match-beginning 0) 3))))))
-           (setq charset (mm-encode-body))
-           (setq encoding (mm-body-encoding charset))
-           (setq coded (buffer-string)))
-       (mm-with-unibyte-buffer
-         (cond
-          ((cdr (assq 'buffer cont))
-           (insert-buffer-substring (cdr (assq 'buffer cont))))
-          ((and (setq filename (cdr (assq 'filename cont)))
-                (not (equal (cdr (assq 'nofile cont)) "yes")))
-           (mm-insert-file-contents filename))
-          (t
-           (insert (cdr (assq 'contents cont)))))
-         (setq encoding (mm-encode-buffer type)
-               coded (buffer-string))))
-      (mml-insert-mime-headers cont type charset encoding)
-      (insert "\n")
-      (insert coded)))
-   ((eq (car cont) 'external)
-    (insert "Content-Type: message/external-body")
-    (let ((parameters (mml-parameter-string
-                      cont '(expiration size permission)))
-         (name (cdr (assq 'name cont))))
-      (when name
-       (setq name (mml-parse-file-name name))
-       (if (stringp name)
-           (mml-insert-parameter
-            (mail-header-encode-parameter "name" name)
-            "access-type=local-file")
-         (mml-insert-parameter
-          (mail-header-encode-parameter
-           "name" (file-name-nondirectory (nth 2 name)))
-          (mail-header-encode-parameter "site" (nth 1 name))
-          (mail-header-encode-parameter
-           "directory" (file-name-directory (nth 2 name))))
-         (mml-insert-parameter
-          (concat "access-type="
-                  (if (member (nth 0 name) '("ftp@" "anonymous@"))
-                      "anon-ftp"
-                    "ftp")))))      
-      (when parameters
-       (mml-insert-parameter-string
-        cont '(expiration size permission))))
-    (insert "\n\n")
-    (insert "Content-Type: " (cdr (assq 'type cont)) "\n")
-    (insert "Content-ID: " (message-make-message-id) "\n")
-    (insert "Content-Transfer-Encoding: "
-           (or (cdr (assq 'encoding cont)) "binary"))
-    (insert "\n\n")
-    (insert (or (cdr (assq 'contents cont))))
-    (insert "\n"))
-   ((eq (car cont) 'multipart)
-    (let ((mml-boundary (mml-compute-boundary cont)))
-      (insert (format "Content-Type: multipart/%s; boundary=\"%s\"\n"
-                     (or (cdr (assq 'type cont)) "mixed")
-                     mml-boundary))
-      (insert "\n")
-      (setq cont (cddr cont))
-      (while cont
-       (insert "\n--" mml-boundary "\n")
-       (mml-generate-mime-1 (pop cont)))
-      (insert "\n--" mml-boundary "--\n")))
-   (t
-    (error "Invalid element: %S" cont))))
-
-(defun mml-compute-boundary (cont)
-  "Return a unique boundary that does not exist in CONT."
-  (let ((mml-boundary (mml-make-boundary)))
-    ;; This function tries again and again until it has found
-    ;; a unique boundary.
-    (while (not (catch 'not-unique
-                 (mml-compute-boundary-1 cont))))
-    mml-boundary))
-
-(defun mml-compute-boundary-1 (cont)
-  (let (filename)
-    (cond
-     ((eq (car cont) 'part)
-      (with-temp-buffer
-       (cond
-        ((cdr (assq 'buffer cont))
-         (insert-buffer-substring (cdr (assq 'buffer cont))))
-        ((and (setq filename (cdr (assq 'filename cont)))
-              (not (equal (cdr (assq 'nofile cont)) "yes")))
-         (mm-insert-file-contents filename))
-        (t
-         (insert (cdr (assq 'contents cont)))))
-       (goto-char (point-min))
-       (when (re-search-forward (concat "^--" (regexp-quote mml-boundary))
-                                nil t)
-         (setq mml-boundary (mml-make-boundary))
-         (throw 'not-unique nil))))
-     ((eq (car cont) 'multipart)
-      (mapcar 'mml-compute-boundary-1 (cddr cont))))
-    t))
-
-(defun mml-make-boundary ()
-  (concat (make-string (% (incf mml-multipart-number) 60) ?=)
-         (if (> mml-multipart-number 17)
-             (format "%x" mml-multipart-number)
-           "")
-         mml-base-boundary))
-
-(defun mml-make-string (num string)
-  (let ((out ""))
-    (while (not (zerop (decf num)))
-      (setq out (concat out string)))
-    out))
-
-(defun mml-insert-mime-headers (cont type charset encoding)
-  (let (parameters disposition description)
-    (setq parameters
-         (mml-parameter-string
-          cont '(name access-type expiration size permission)))
-    (when (or charset
-             parameters
-             (not (equal type "text/plain")))
-      (when (consp charset)
-       (error
-        "Can't encode a part with several charsets."))
-      (insert "Content-Type: " type)
-      (when charset
-       (insert "; " (mail-header-encode-parameter
-                     "charset" (symbol-name charset))))
-      (when parameters
-       (mml-insert-parameter-string
-        cont '(name access-type expiration size permission)))
-      (insert "\n"))
-    (setq parameters
-         (mml-parameter-string
-          cont '(filename creation-date modification-date read-date)))
-    (when (or (setq disposition (cdr (assq 'disposition cont)))
-             parameters)
-      (insert "Content-Disposition: " (or disposition "inline"))
-      (when parameters
-       (mml-insert-parameter-string
-        cont '(filename creation-date modification-date read-date)))
-      (insert "\n"))
-    (unless (eq encoding '7bit)
-      (insert (format "Content-Transfer-Encoding: %s\n" encoding)))
-    (when (setq description (cdr (assq 'description cont)))
-      (insert "Content-Description: "
-             (mail-encode-encoded-word-string description) "\n"))))
-
-(defun mml-parameter-string (cont types)
-  (let ((string "")
-       value type)
-    (while (setq type (pop types))
-      (when (setq value (cdr (assq type cont)))
-       ;; Strip directory component from the filename parameter.
-       (when (eq type 'filename)
-         (setq value (file-name-nondirectory value)))
-       (setq string (concat string "; "
-                            (mail-header-encode-parameter
-                             (symbol-name type) value)))))
-    (when (not (zerop (length string)))
-      string)))
-
-(defun mml-insert-parameter-string (cont types)
-  (let (value type)
-    (while (setq type (pop types))
-      (when (setq value (cdr (assq type cont)))
-       ;; Strip directory component from the filename parameter.
-       (when (eq type 'filename)
-         (setq value (file-name-nondirectory value)))
-       (mml-insert-parameter
-        (mail-header-encode-parameter
-         (symbol-name type) value))))))
-
-(defvar ange-ftp-path-format)
-(defvar efs-path-regexp)
-(defun mml-parse-file-name (path)
-  (if (if (boundp 'efs-path-regexp)
-         (string-match efs-path-regexp path)
-       (if (boundp 'ange-ftp-path-format)
-           (string-match (car ange-ftp-path-format))))
-      (list (match-string 1 path) (match-string 2 path)
-           (substring path (1+ (match-end 2))))
-    path))
-
-(defun mml-insert-buffer (buffer)
-  "Insert BUFFER at point and quote any MML markup."
-  (save-restriction
-    (narrow-to-region (point) (point))
-    (insert-buffer-substring buffer)
-    (mml-quote-region (point-min) (point-max))
-    (goto-char (point-max))))
-
-;;;
-;;; Transforming MIME to MML
-;;;
-
-(defun mime-to-mml ()
-  "Translate the current buffer (which should be a message) into MML."
-  ;; First decode the head.
-  (save-restriction
-    (message-narrow-to-head)
-    (mail-decode-encoded-word-region (point-min) (point-max)))
-  (let ((handles (mm-dissect-buffer t)))
-    (goto-char (point-min))
-    (search-forward "\n\n" nil t)
-    (delete-region (point) (point-max))
-    (if (stringp (car handles))
-       (mml-insert-mime handles)
-      (mml-insert-mime handles t))
-    (mm-destroy-parts handles)))
-
-(defun mml-to-mime ()
-  "Translate the current buffer from MML to MIME."
-  (message-encode-message-body)
-  (save-restriction
-    (message-narrow-to-headers)
-    (mail-encode-encoded-word-buffer)))
-
-(defun mml-insert-mime (handle &optional no-markup)
-  (let (textp buffer)
-    ;; Determine type and stuff.
-    (unless (stringp (car handle))
-      (unless (setq textp (equal (mm-handle-media-supertype handle)
-                                "text"))
-       (save-excursion
-         (set-buffer (setq buffer (generate-new-buffer " *mml*")))
-         (mm-insert-part handle))))
-    (unless no-markup
-      (mml-insert-mml-markup handle buffer textp))
-    (cond
-     ((stringp (car handle))
-      (mapcar 'mml-insert-mime (cdr handle))
-      (insert "<#/multipart>\n"))
-     (textp
-      (mm-insert-part handle)
-      (goto-char (point-max)))
-     (t
-      (insert "<#/part>\n")))))
-
-(defun mml-insert-mml-markup (handle &optional buffer nofile)
-  "Take a MIME handle and insert an MML tag."
-  (if (stringp (car handle))
-      (insert "<#multipart type=" (mm-handle-media-subtype handle)
-             ">\n")
-    (insert "<#part type=" (mm-handle-media-type handle))
-    (dolist (elem (append (cdr (mm-handle-type handle))
-                         (cdr (mm-handle-disposition handle))))
-      (insert " " (symbol-name (car elem)) "=\"" (cdr elem) "\""))
-    (when (mm-handle-disposition handle)
-      (insert " disposition=" (car (mm-handle-disposition handle))))
-    (when buffer
-      (insert " buffer=\"" (buffer-name buffer) "\""))
-    (when nofile
-      (insert " nofile=yes"))
-    (when (mm-handle-description handle)
-      (insert " description=\"" (mm-handle-description handle) "\""))
-    (insert ">\n")))
-
-(defun mml-insert-parameter (&rest parameters)
-  "Insert PARAMETERS in a nice way."
-  (dolist (param parameters)
-    (insert ";")
-    (let ((point (point)))
-      (insert " " param)
-      (when (> (current-column) 71)
-       (goto-char point)
-       (insert "\n ")
-       (end-of-line)))))
-
-;;;
-;;; Mode for inserting and editing MML forms
-;;;
-
-(defvar mml-mode-map
-  (let ((map (make-sparse-keymap))
-       (main (make-sparse-keymap)))
-    (define-key map "f" 'mml-attach-file)
-    (define-key map "b" 'mml-attach-buffer)
-    (define-key map "e" 'mml-attach-external)
-    (define-key map "q" 'mml-quote-region)
-    (define-key map "m" 'mml-insert-multipart)
-    (define-key map "p" 'mml-insert-part)
-    (define-key map "v" 'mml-validate)
-    (define-key map "P" 'mml-preview)
-    (define-key main "\M-m" map)
-    main))
-
-(easy-menu-define
- mml-menu mml-mode-map ""
- '("MML"
-   ("Attach"
-    ["File" mml-attach-file t]
-    ["Buffer" mml-attach-buffer t]
-    ["External" mml-attach-external t])
-   ("Insert"
-    ["Multipart" mml-insert-multipart t]
-    ["Part" mml-insert-part t])
-   ["Quote" mml-quote-region t]
-   ["Validate" mml-validate t]
-   ["Preview" mml-preview t]))
-
-(defvar mml-mode nil
-  "Minor mode for editing MML.")
-
-(defun mml-mode (&optional arg)
-  "Minor mode for editing MML.
-
-\\{mml-mode-map}"
-  (interactive "P")
-  (if (not (set (make-local-variable 'mml-mode)
-               (if (null arg) (not mml-mode)
-                 (> (prefix-numeric-value arg) 0))))
-      nil
-    (set (make-local-variable 'mml-mode) t)
-    (unless (assq 'mml-mode minor-mode-alist)
-      (push `(mml-mode " MML") minor-mode-alist))
-    (unless (assq 'mml-mode minor-mode-map-alist)
-      (push (cons 'mml-mode mml-mode-map)
-           minor-mode-map-alist)))
-  (run-hooks 'mml-mode-hook))
-
-;;;
-;;; Helper functions for reading MIME stuff from the minibuffer and
-;;; inserting stuff to the buffer.
-;;;
-
-(defun mml-minibuffer-read-file (prompt)
-  (let ((file (read-file-name prompt nil nil t)))
-    ;; Prevent some common errors.  This is inspired by similar code in
-    ;; VM.
-    (when (file-directory-p file)
-      (error "%s is a directory, cannot attach" file))
-    (unless (file-exists-p file)
-      (error "No such file: %s" file))
-    (unless (file-readable-p file)
-      (error "Permission denied: %s" file))
-    file))
-
-(defun mml-minibuffer-read-type (name &optional default)
-  (let* ((default (or default
-                     (mm-default-file-encoding name)
-                     ;; Perhaps here we should check what the file
-                     ;; looks like, and offer text/plain if it looks
-                     ;; like text/plain.
-                     "application/octet-stream"))
-        (string (completing-read
-                 (format "Content type (default %s): " default)
-                 (mapcar
-                  'list
-                  (delete-duplicates
-                   (nconc
-                    (mapcar (lambda (m) (cdr m))
-                            mailcap-mime-extensions)
-                    (apply
-                     'nconc
-                     (mapcar
-                      (lambda (l)
-                        (delq nil
-                              (mapcar
-                               (lambda (m)
-                                 (let ((type (cdr (assq 'type (cdr m)))))
-                                   (if (equal (cadr (split-string type "/"))
-                                              "*")
-                                       nil
-                                     type)))
-                               (cdr l))))
-                      mailcap-mime-data)))
-                   :test 'equal)))))
-    (if (not (equal string ""))
-       string
-      default)))
-
-(defun mml-minibuffer-read-description ()
-  (let ((description (read-string "One line description: ")))
-    (when (string-match "\\`[ \t]*\\'" description)
-      (setq description nil))
-    description))
-
-(defun mml-quote-region (beg end)
-  "Quote the MML tags in the region."
-  (interactive "r")
-  (save-excursion
-    (save-restriction
-      ;; Temporarily narrow the region to defend from changes
-      ;; invalidating END.
-      (narrow-to-region beg end)
-      (goto-char (point-min))
-      ;; Quote parts.
-      (while (re-search-forward
-             "<#/?!*\\(multipart\\|part\\|external\\)" nil t)
-       (goto-char (match-beginning 1))
-       (insert "!")))))
-
-(defun mml-insert-tag (name &rest plist)
-  "Insert an MML tag described by NAME and PLIST."
-  (when (symbolp name)
-    (setq name (symbol-name name)))
-  (insert "<#" name)
-  (while plist
-    (let ((key (pop plist))
-         (value (pop plist)))
-      (when value
-       ;; Quote VALUE if it contains suspicious characters.
-       (when (string-match "[\"\\~/* \t\n]" value)
-         (setq value (prin1-to-string value)))
-       (insert (format " %s=%s" key value)))))
-  (insert ">\n<#/" name ">\n"))
-
-;;; Attachment functions.
-
-(defun mml-attach-file (file &optional type description)
-  "Attach a file to the outgoing MIME message.
-The file is not inserted or encoded until you send the message with
-`\\[message-send-and-exit]' or `\\[message-send]'.
-
-FILE is the name of the file to attach.  TYPE is its content-type, a
-string of the form \"type/subtype\".  DESCRIPTION is a one-line
-description of the attachment."
-  (interactive
-   (let* ((file (mml-minibuffer-read-file "Attach file: "))
-         (type (mml-minibuffer-read-type file))
-         (description (mml-minibuffer-read-description)))
-     (list file type description)))
-  (mml-insert-tag 'part 'type type 'filename file 'disposition "attachment"
-                 'description description))
-
-(defun mml-attach-buffer (buffer &optional type description)
-  "Attach a buffer to the outgoing MIME message.
-See `mml-attach-file' for details of operation."
-  (interactive
-   (let* ((buffer (read-buffer "Attach buffer: "))
-         (type (mml-minibuffer-read-type buffer "text/plain"))
-         (description (mml-minibuffer-read-description)))
-     (list buffer type description)))
-  (mml-insert-tag 'part 'type type 'buffer buffer 'disposition "attachment"
-                 'description description))
-
-(defun mml-attach-external (file &optional type description)
-  "Attach an external file into the buffer.
-FILE is an ange-ftp/efs specification of the part location.
-TYPE is the MIME type to use."
-  (interactive
-   (let* ((file (mml-minibuffer-read-file "Attach external file: "))
-         (type (mml-minibuffer-read-type file))
-         (description (mml-minibuffer-read-description)))
-     (list file type description)))
-  (mml-insert-tag 'external 'type type 'name file 'disposition "attachment"
-                 'description description))
-
-(defun mml-insert-multipart (&optional type)
-  (interactive (list (completing-read "Multipart type (default mixed): "
-                    '(("mixed") ("alternative") ("digest") ("parallel")
-                      ("signed") ("encrypted"))
-                    nil nil "mixed")))
-  (or type
-      (setq type "mixed"))
-  (mml-insert-tag "multipart" 'type type)
-  (forward-line -1))
-
-(defun mml-preview (&optional raw)
- "Display current buffer with Gnus, in a new buffer.
-If RAW, don't highlight the article."
- (interactive "P")
- (let ((buf (current-buffer)))
-   (switch-to-buffer (get-buffer-create 
-                     (concat (if raw "*Raw MIME preview of "
-                               "*MIME preview of ") (buffer-name))))
-   (erase-buffer)
-   (insert-buffer buf)
-   (mml-to-mime)
-   (unless raw
-     (run-hooks 'gnus-article-decode-hook)
-     (let ((gnus-newsgroup-name "dummy"))
-      (gnus-article-prepare-display)))
-   (fundamental-mode)
-   (setq buffer-read-only t)
-   (goto-char (point-min))))
-
-(defun mml-validate ()
-  "Validate the current MML document."
-  (interactive)
-  (mml-parse))
-
-(provide 'mml)
-
-;;; mml.el ends here
index 9d94eb8..1989225 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nnagent.el --- offline backend for Gnus
-;; Copyright (C) 1997,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1997,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news, mail
@@ -73,7 +73,7 @@
             (ftp-error (setq err (format "%s" arg)))))
       (nnagent-close-server)
       (nnheader-report
-       'nnagent (or err
+       'nnagent (or err 
                    (format "No such file or directory: %s" dir))))
      ((not (file-directory-p (file-truename dir)))
       (nnagent-close-server)
 
 (deffoo nnagent-request-post (&optional server)
   (gnus-agent-insert-meta-information 'news gnus-command-method)
-  (gnus-request-accept-article "nndraft:queue" nil t t))
-
-(deffoo nnagent-request-set-mark (group action server)
-  action)
+  (gnus-request-accept-article "nndraft:queue"))
 
 ;; Use nnml functions for just about everything.
 (nnoo-import nnagent
index f26fe4f..def1e0c 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nnbabyl.el --- rmail mbox access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
@@ -32,8 +32,7 @@
 (require 'nnheader)
 (condition-case nil
     (require 'rmail)
-  (t (nnheader-message
-      5 "Ignore rmail errors from this file, you don't have rmail")))
+  (t (nnheader-message 5 "Ignore rmail errors from this file, you don't have rmail")))
 (require 'nnmail)
 (require 'nnoo)
 (eval-when-compile (require 'cl))
            start end number)
        (set-buffer (setq nnbabyl-mbox-buffer
                          (nnheader-find-file-noselect
-                          nnbabyl-mbox-file nil t)))
+                          nnbabyl-mbox-file nil 'raw)))
        ;; Save previous buffer mode.
        (setq nnbabyl-previous-buffer-mode
              (cons (cons (point-min) (point-max))
                    major-mode))
 
-       (buffer-disable-undo)
+       (buffer-disable-undo (current-buffer))
        (widen)
        (setq buffer-read-only nil)
        (fundamental-mode)
index b6601db..007d8e5 100644 (file)
 (eval-when-compile (require 'cl))
 
 (eval-and-compile
-  (unless (fboundp 'open-network-stream)
-    (require 'tcp)))
-
-(eval-when-compile (require 'cl))
-
-(eval-and-compile
   (autoload 'news-setup "rnewspost")
   (autoload 'news-reply-mode "rnewspost")
   (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
@@ -89,7 +84,7 @@
   "If t, the expiry date for a given article will be set to the time
 it was marked as expireable; otherwise the date will be the time the
 article was posted to nndb")
-
+  
 ;; Variables copied from nntp
 
 (defvoo nndb-server-opened-hook '(nntp-send-authinfo-from-file)
@@ -139,7 +134,7 @@ article was posted to nndb")
        (push art rest)))
     rest))
 
-
+      
 ;;
 (deffoo nndb-request-type (group &optional article)
   nndb-article-type)
@@ -180,19 +175,20 @@ article was posted to nndb")
                   msg))
        (if (nnmail-expired-article-p
             group
-            (date-to-time (substring msg (match-beginning 1) (match-end 1)))
+            (gnus-encode-date
+             (substring msg (match-beginning 1) (match-end 1)))
             force)
            (progn
              (setq delete-list (concat delete-list " " (int-to-string art)))
              (setq num-delete  (1+ num-delete)))
          (push art rest))))
     (if (> (length delete-list) 0)
-       (progn
+       (progn 
          (nnheader-message 5 "Deleting %s article(s) from %s"
                            (int-to-string num-delete) group)
          (nntp-send-command "^[23].*\n" "X-DELETE" delete-list))
       )
-
+       
     (nnheader-message 5 "")
     (nconc rest articles)))
 
@@ -214,7 +210,7 @@ article was posted to nndb")
   "Let the nndb backend expire articles"
   (let (days art-string delete-list (num-delete 0))
     (nntp-possibly-change-group group server)
-
+    
     ;; first calculate the wait period in days
     (setq days (or (and nnmail-expiry-wait-function
                        (funcall nnmail-expiry-wait-function group))
@@ -227,12 +223,12 @@ article was posted to nndb")
           (setq days -1))
          ((eq days 'immediate)
           (setq days 0)))
-
+    
 
     ;; build article string
     (setq art-string (concat days " " (nndb-build-article-string articles)))
     (nntp-send-command "^\.\r?\n\\|^[345].*\n" "X-EXPIRE" art-string)
-
+    
     (setq delete-list (nndb-get-remote-expire-response))
     (setq num-delete (length delete-list))
     (if (> num-delete 0)
@@ -259,7 +255,7 @@ Optional LAST is ignored."
   ;; which it will be for nndb, which is all that matters anyway
   (let ((new-group (nth 1 accept-form)) result)
     (nntp-possibly-change-group group server)
-
+    
     ;; use the move command for nndb-to-nndb moves
     (if (string-match "^nndb" new-group)
        (let ((new-group-name (gnus-group-real-name new-group)))
@@ -281,7 +277,7 @@ Optional LAST is ignored."
                                       t))
        result)
       )))
-
+  
 (deffoo nndb-request-accept-article (group server &optional last)
   "The article in the current buffer is put into GROUP."
   (nntp-possibly-change-group group server)
@@ -289,9 +285,9 @@ Optional LAST is ignored."
     (when (nntp-send-command "^[23].*\r?\n" "ACCEPT" group)
       (nnheader-insert "")
       (nntp-send-buffer "^[23].*\n"))
-
+    
     (set-buffer nntp-server-buffer)
-    (setq msg (buffer-substring (point-min) (point-max)))
+    (setq msg (buffer-string (point-min) (point-max)))
     (or (string-match "^\\([0-9]+\\)" msg)
        (error "nndb: %s" msg))
     (setq art (substring msg (match-beginning 1) (match-end 1)))
@@ -299,7 +295,7 @@ Optional LAST is ignored."
     (list art)))
 
 (deffoo nndb-request-replace-article (article group buffer)
-  "ARTICLE is the number of the article in GROUP to be replaced
+  "ARTICLE is the number of the article in GROUP to be replaced 
 with the contents of the BUFFER."
   (set-buffer buffer)
   (when (nntp-send-command "^[23].*\r?\n" "X-REPLACE" (int-to-string article))
@@ -318,7 +314,7 @@ with the contents of the BUFFER."
 (deffoo nndb-status-message (&optional server)
   "Return server status as a string."
   (set-buffer nntp-server-buffer)
-  (buffer-substring (point-min) (point-max)))
+  (buffer-string (point-min) (point-max)))
 
 ;; Import stuff from nntp
 
@@ -326,3 +322,6 @@ with the contents of the BUFFER."
   (nntp))
 
 (provide 'nndb)
+
+
+
index a46ad74..a3b5eae 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nndir.el --- single directory newsgroup access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
index e2f9be8..0da245a 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nndoc.el --- single file access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
@@ -31,7 +31,6 @@
 (require 'nnmail)
 (require 'nnoo)
 (require 'gnus-util)
-(require 'mm-util)
 (eval-when-compile (require 'cl))
 
 (nnoo-declare nndoc)
@@ -39,8 +38,8 @@
 (defvoo nndoc-article-type 'guess
   "*Type of the file.
 One of `mbox', `babyl', `digest', `news', `rnews', `mmdf', `forward',
-`rfc934', `rfc822-forward', `mime-parts', `standard-digest',
-`slack-digest', `clari-briefs', `nsmail' or `guess'.")
+`rfc934', `rfc822-forward', `mime-digest', `mime-parts', `standard-digest',
+`slack-digest', `clari-briefs' or `guess'.")
 
 (defvoo nndoc-post-type 'mail
   "*Whether the nndoc group is `mail' or `post'.")
@@ -48,14 +47,12 @@ One of `mbox', `babyl', `digest', `news', `rnews', `mmdf', `forward',
 (defvoo nndoc-open-document-hook 'nnheader-ms-strip-cr
   "Hook run after opening a document.
 The default function removes all trailing carriage returns
-from the document.")
+from the document.")  
 
 (defvar nndoc-type-alist
   `((mmdf
      (article-begin .  "^\^A\^A\^A\^A\n")
      (body-end .  "^\^A\^A\^A\^A\n"))
-    (nsmail
-     (article-begin .  "^From - "))
     (news
      (article-begin . "^Path:"))
     (rnews
@@ -84,6 +81,12 @@ from the document.")
      (head-end . "^\t")
      (generate-head-function . nndoc-generate-clari-briefs-head)
      (article-transform-function . nndoc-transform-clari-briefs))
+    (mime-digest
+     (article-begin . "")
+     (head-end . "^ ?$")
+     (body-end . "")
+     (file-end . "")
+     (subtype digest guess))
     (mime-parts
      (generate-head-function . nndoc-generate-mime-parts-head)
      (article-transform-function . nndoc-transform-mime-parts))
@@ -140,13 +143,10 @@ from the document.")
 (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 acts as the association key and is an ordinal
-;; starting at 1.  HEAD-BEGIN [0], HEAD-END [1], BODY-BEGIN [2] and BODY-END
-;; [3] are positions in the `nndoc' buffer.  LINE-COUNT [4] is a count of
-;; lines in the body.  For MIME dissections only, ARTICLE-INSERT [5] and
-;; SUMMARY-INSERT [6] give headers to insert for full article or summary line
-;; generation, respectively.  Other headers usually follow directly from the
-;; buffer.  Value `nil' means no insert.
+;; 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)
@@ -158,6 +158,8 @@ from the document.")
 (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.")
@@ -185,7 +187,7 @@ from the document.")
                (insert-buffer-substring
                 nndoc-current-buffer (car entry) (nth 1 entry)))
              (goto-char (point-max))
-             (unless (eq (char-after (1- (point))) ?\n)
+             (unless (= (char-after (1- (point))) ?\n)
                (insert "\n"))
              (insert (format "Lines: %d\n" (nth 4 entry)))
              (insert ".\n")))
@@ -287,10 +289,10 @@ from the document.")
       (setq nndoc-dissection-alist nil)
       (save-excursion
        (set-buffer nndoc-current-buffer)
-       (mm-enable-multibyte)
+       (buffer-disable-undo (current-buffer))
        (erase-buffer)
        (if (stringp nndoc-address)
-           (mm-insert-file-contents nndoc-address)
+           (nnheader-insert-file-contents nndoc-address)
          (insert-buffer-substring nndoc-address))
        (run-hooks 'nndoc-open-document-hook))))
     ;; Initialize the nndoc structures according to this new document.
@@ -341,9 +343,6 @@ from the document.")
                (setq entry (pop alist)))
       (when (memq subtype (or (cdr (assq 'subtype entry)) '(guess)))
        (goto-char (point-min))
-       ;; Remove blank lines.
-       (while (eq (following-char) ?\n)
-         (delete-char 1))
        (when (numberp (setq result (funcall (intern
                                              (format "nndoc-%s-type-p"
                                                      (car entry))))))
@@ -453,30 +452,38 @@ from the document.")
        (limit (search-forward "\n\n" nil t)))
     (goto-char (point-min))
     (when (and limit
-              (re-search-forward
-               (concat "\
-^Content-Type:[ \t]*multipart/[a-z]+ *; *\\(\\(\n[ \t]\\)?.*;\\)*"
-                       "\\(\n[ \t]\\)?[ \t]*boundary=\"?[^\"\n]*[^\" \t\n]")
-               limit t))
+               (re-search-forward
+                (concat "\
+^Content-Type:[ \t]*multipart/[a-z]+;\\(.*;\\)*"
+                        "[ \t\n]*[ \t]boundary=\"?[^\"\n]*[^\" \t\n]")
+          limit t))
       t)))
 
 (defun nndoc-transform-mime-parts (article)
-  (let* ((entry (cdr (assq article nndoc-dissection-alist)))
-        (headers (nth 5 entry)))
-    (when headers
+  (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))
-      (insert headers))))
-
-(defun nndoc-generate-mime-parts-head (article)
-  (let* ((entry (cdr (assq article nndoc-dissection-alist)))
-        (headers (nth 6 entry)))
-    (save-restriction
-      (narrow-to-region (point) (point))
-      (insert-buffer-substring
-       nndoc-current-buffer (car entry) (nth 1 entry))
-      (goto-char (point-max)))
-    (when headers
-      (insert headers))))
+      (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))
@@ -509,6 +516,27 @@ from the document.")
     (insert "From: " "clari@clari.net (" (or from "unknown") ")"
            "\nSubject: " (or subject "(no subject)") "\n")))
 
+(defun nndoc-mime-digest-type-p ()
+  (let ((case-fold-search t)
+       boundary-id b-delimiter entry)
+    (when (and
+          (re-search-forward
+           (concat "^Content-Type: *multipart/digest;[ \t\n]*[ \t]"
+                   "boundary=\"?\\([^\"\n]*[^\" \t\n]\\)")
+           nil t)
+          (match-beginning 1))
+      (setq boundary-id (match-string 1)
+           b-delimiter (concat "\n--" boundary-id "[\n \t]+"))
+      (setq entry (assq 'mime-digest nndoc-type-alist))
+      (setcdr entry
+             (list
+              (cons 'head-end "^ ?$")
+              (cons 'body-begin "^ ?\n")
+              (cons 'article-begin b-delimiter)
+              (cons 'body-end-function 'nndoc-digest-body-end)
+              (cons 'file-end (concat "\n--" boundary-id "--[ \t]*$"))))
+      t)))
+
 (defun nndoc-standard-digest-type-p ()
   (when (and (re-search-forward (concat "^" (make-string 70 ?-) "\n\n") nil t)
             (re-search-forward
@@ -558,14 +586,11 @@ from the document.")
     (insert "From: "  (or from "unknown")
            "\nSubject: " (or subject "(no subject)") "\n")))
 
-(defun nndoc-nsmail-type-p ()
-  (when (looking-at "From - ")
-    t))
-
 (deffoo nndoc-request-accept-article (group &optional server last)
   nil)
 
 
+
 ;;;
 ;;; Functions for dissecting the documents
 ;;;
@@ -584,9 +609,6 @@ from the document.")
     (save-excursion
       (set-buffer nndoc-current-buffer)
       (goto-char (point-min))
-      ;; Remove blank lines.
-      (while (eq (following-char) ?\n)
-       (delete-char 1))
       ;; Find the beginning of the file.
       (when nndoc-file-begin
        (nndoc-search nndoc-file-begin))
@@ -647,128 +669,92 @@ the header of this entity, and one article per sub-entity."
        nndoc-mime-split-ordinal 0)
   (save-excursion
     (set-buffer nndoc-current-buffer)
-    (nndoc-dissect-mime-parts-sub (point-min) (point-max) nil nil nil)))
-
-(defun nndoc-dissect-mime-parts-sub (head-begin body-end article-insert
-                                               position parent)
-  "Dissect an entity, within a composite MIME message.
-The complete message or MIME entity extends from HEAD-BEGIN to BODY-END.
-ARTICLE-INSERT should be added at beginning for generating a full article.
+    (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.
-PARENT is the message-ID of the parent summary line, or nil for none."
-  (let ((case-fold-search t)
-       (message-id (nnmail-message-id))
-       head-end body-begin summary-insert message-rfc822 multipart-any
-       subject content-type type subtype boundary-regexp)
-    ;; Gracefully handle a missing body.
-    (goto-char head-begin)
-    (if (search-forward "\n\n" body-end t)
-       (setq head-end (1- (point))
-             body-begin (point))
-      (setq head-end body-end
-           body-begin body-end))
-    (narrow-to-region head-begin head-end)
-    ;; Save MIME attributes.
-    (goto-char head-begin)
-    (setq content-type (message-fetch-field "Content-Type"))
-    (when content-type
-      (when (string-match
-            "^ *\\([^ \t\n/;]+\\)/\\([^ \t\n/;]+\\)" content-type)
-       (setq type (downcase (match-string 1 content-type))
-             subtype (downcase (match-string 2 content-type))
-             message-rfc822 (and (string= type "message")
-                                 (string= subtype "rfc822"))
-             multipart-any (string= type "multipart")))
-      (when (string-match ";[ \t\n]*name=\\([^ \t\n;]+\\)" content-type)
-       (setq subject (match-string 1 content-type)))
-      (when (string-match "boundary=\"?\\([^\"\n]*[^\" \t\n]\\)" content-type)
-       (setq boundary-regexp (concat "^--"
-                                     (regexp-quote
-                                      (match-string 1 content-type))
-                                     "\\(--\\)?[ \t]*\n"))))
-    (unless subject
-      (when (or multipart-any (not article-insert))
-       (setq subject (message-fetch-field "Subject"))))
-    (unless type
-      (setq type "text"
-           subtype "plain"))
-    ;; Prepare the article and summary inserts.
-    (unless article-insert
-      (setq article-insert (buffer-substring (point-min) (point-max))
-           head-end head-begin))
-    (setq summary-insert article-insert)
-    ;; - summary Subject.
-    (setq summary-insert
-         (let ((line (concat "Subject: <" position
-                             (and position multipart-any ".")
-                             (and multipart-any "*")
-                             (and (or position multipart-any) " ")
-                             (cond ((string= subtype "plain") type)
-                                   ((string= subtype "basic") type)
-                                   (t subtype))
-                             ">"
-                             (and subject " ")
-                             subject
-                             "\n")))
-           (if (string-match "Subject:.*\n\\([ \t].*\n\\)*" summary-insert)
-               (replace-match line t t summary-insert)
-             (concat summary-insert line))))
-    ;; - summary Message-ID.
-    (setq summary-insert
-         (let ((line (concat "Message-ID: " message-id "\n")))
-           (if (string-match "Message-ID:.*\n\\([ \t].*\n\\)*" summary-insert)
-               (replace-match line t t summary-insert)
-             (concat summary-insert line))))
-    ;; - summary References.
-    (when parent
-      (setq summary-insert
-           (let ((line (concat "References: " parent "\n")))
-             (if (string-match "References:.*\n\\([ \t].*\n\\)*"
-                               summary-insert)
-                 (replace-match line t t summary-insert)
-               (concat summary-insert line)))))
-    ;; Generate dissection information for this entity.
-    (push (list (incf nndoc-mime-split-ordinal)
-               head-begin head-end body-begin body-end
-               (count-lines body-begin body-end)
-               article-insert summary-insert)
-         nndoc-dissection-alist)
-    ;; Recurse for all sub-entities, if any.
-    (widen)
-    (cond
-     (message-rfc822
-      (save-excursion
-       (nndoc-dissect-mime-parts-sub body-begin body-end nil
-                                     position message-id)))
-     ((and multipart-any boundary-regexp)
-      (let ((part-counter 0)
-           part-begin part-end eof-flag)
-       (while (string-match "\
-^\\(Lines\\|Content-\\(Type\\|Transfer-Encoding\\)\\):.*\n\\([ \t].*\n\\)*"
-                            article-insert)
-         (setq article-insert (replace-match "" t t article-insert)))
-       (let ((case-fold-search nil))
-         (goto-char body-begin)
-         (setq eof-flag (not (re-search-forward boundary-regexp body-end t)))
+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 part-begin (point))
-           (cond ((re-search-forward boundary-regexp body-end t)
+           (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 part-end (point))
+                  (setq end (point))
                   (forward-line 1))
-                 (t (setq part-end body-end
+                 (t (setq end body-end
                           eof-flag t)))
-           (save-excursion
-             (nndoc-dissect-mime-parts-sub
-              part-begin part-end article-insert
-              (concat position
-                      (and position ".")
-                      (format "%d" (incf part-counter)))
-              message-id)))))))))
+           (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)
index 196779f..c6f23c4 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nndraft.el --- draft article access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -30,7 +30,6 @@
 (require 'gnus-start)
 (require 'nnmh)
 (require 'nnoo)
-(require 'mm-util)
 (eval-when-compile
   (require 'cl)
   ;; This is just to shut up the byte-compiler.
   (save-excursion
     (set-buffer nntp-server-buffer)
     (erase-buffer)
-    (let* (article)
+    (let* ((buf (get-buffer-create " *draft headers*"))
+          article)
+      (set-buffer buf)
+      (buffer-disable-undo (current-buffer))
+      (erase-buffer)
       ;; We don't support fetching by Message-ID.
       (if (stringp (car articles))
          'headers
        (while articles
-         (narrow-to-region (point) (point))
+         (set-buffer buf)
          (when (nndraft-request-article
                 (setq article (pop articles)) group server (current-buffer))
            (goto-char (point-min))
                (forward-line -1)
              (goto-char (point-max)))
            (delete-region (point) (point-max))
-           (goto-char (point-min))
-           (insert (format "221 %d Article retrieved.\n" article))
-           (widen)
+           (set-buffer nntp-server-buffer)
            (goto-char (point-max))
+           (insert (format "221 %d Article retrieved.\n" article))
+           (insert-buffer-substring buf)
            (insert ".\n")))
 
        (nnheader-fold-continuation-lines)
           (newest (if (file-newer-than-file-p file auto) file auto))
           (nntp-server-buffer (or buffer nntp-server-buffer)))
       (when (and (file-exists-p newest)
-                (let ((nnmail-file-coding-system
-                       (if (file-newer-than-file-p file auto)
-                           (if (equal group "drafts")
-                               message-draft-coding-system
-                             mm-text-coding-system)
-                         mm-auto-save-coding-system)))
-                  (nnmail-find-file newest)))
+                (nnmail-find-file newest))
        (save-excursion
          (set-buffer nntp-server-buffer)
          (goto-char (point-min))
   (let ((gnus-verbose-backends nil)
        (buf (current-buffer))
         article file)
-    (with-temp-buffer
-      (insert-buffer-substring buf)
+    (nnheader-temp-write nil
+      (insert-buffer buf)
       (setq article (nndraft-request-accept-article
-                    group (nnoo-current-server 'nndraft) t 'noinsert)
-           file (nndraft-article-filename article)))
-    (setq buffer-file-name (expand-file-name file)
-         buffer-auto-save-file-name (make-auto-save-file-name))
+                    group (nnoo-current-server 'nndraft) t 'noinsert))
+      (setq file (nndraft-article-filename article)))
+    (setq buffer-file-name (expand-file-name file))
+    (setq buffer-auto-save-file-name (make-auto-save-file-name))
     (clear-visited-file-modtime)
     article))
 
        (let ((auto (nndraft-auto-save-file-name
                     (nndraft-article-filename article))))
          (when (file-exists-p auto)
-           (funcall nnmail-delete-file-function auto)))
-       (dolist (backup
-                (let ((kept-new-versions 1)
-                      (kept-old-versions 0))
-                  (cdr (find-backup-file-name
-                        (nndraft-article-filename article)))))
-         (when (file-exists-p backup)
-           (funcall nnmail-delete-file-function backup)))))
+           (funcall nnmail-delete-file-function auto)))))
     res))
 
 (deffoo nndraft-request-accept-article (group &optional server last noinsert)
    nnmh-retrieve-headers
    nnmh-request-group
    nnmh-close-group
-   nnmh-request-list
+   nnmh-request-list 
    nnmh-request-newsgroups
    nnmh-request-move-article
    nnmh-request-replace-article))
index 2c6fb78..7da5466 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nneething.el --- arbitrary file access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
   "Regexp saying what files to exclude from the group.
 If this variable is nil, no files will be excluded.")
 
-(defvoo nneething-include-files nil
-  "Regexp saying what files to include in the group.
-If this variable is non-nil, only files matching this regexp will be
-included.")
-
 \f
 
 ;;; Internal variables.
@@ -73,6 +68,8 @@ included.")
 
 \f
 
+(autoload 'gnus-encode-coding-string "gnus-ems")
+
 ;;; Interface functions.
 
 (nnoo-define-basics nneething)
@@ -127,8 +124,7 @@ included.")
           (nnmail-find-file file)      ; Insert the file in the nntp buf.
           (unless (nnheader-article-p) ; Either it's a real article...
             (goto-char (point-min))
-            (nneething-make-head
-             file (current-buffer))    ; ... or we fake some headers.
+            (nneething-make-head file (current-buffer)) ; ... or we fake some headers.
             (insert "\n"))
           t))))
 
@@ -217,16 +213,6 @@ included.")
                  (setq files (cdr files)))
              (setq prev f))
            (setq f (cdr f)))))
-      ;; Remove files not matching the inclusion regexp.
-      (when nneething-include-files
-       (let ((f files)
-             prev)
-         (while f
-           (if (not (string-match nneething-include-files (car f)))
-               (if prev (setcdr prev (cdr f))
-                 (setq files (cdr files)))
-             (setq prev f))
-           (setq f (cdr f)))))
       ;; Remove deleted files from the map.
       (let ((map nneething-map)
            prev)
@@ -257,7 +243,7 @@ included.")
        (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 '")
@@ -316,8 +302,7 @@ included.")
                       (substring file
                                  (match-beginning 1)
                                  (match-end 1))
-                    (when (string-match
-                           "/\\(users\\|home\\)/\\([^/]+\\)/" file)
+                    (when (string-match "/\\(users\\|home\\)/\\([^/]+\\)/" file)
                       (setq login (substring file
                                              (match-beginning 2)
                                              (match-end 2))
@@ -331,7 +316,7 @@ included.")
   (save-excursion
     (set-buffer (get-buffer-create nneething-work-buffer))
     (setq case-fold-search nil)
-    (buffer-disable-undo)
+    (buffer-disable-undo (current-buffer))
     (erase-buffer)
     (cond
      ((not (file-exists-p file))
@@ -359,13 +344,10 @@ included.")
 
 (defun nneething-file-name (article)
   "Return the file name of ARTICLE."
-  (let ((dir (file-name-as-directory nneething-address))
-        fname)
-    (if (numberp article)
-       (if (setq fname (cadr (assq article nneething-map)))
-           (concat dir fname)
-         (make-temp-name (concat dir "nneething")))
-      (concat dir article))))
+  (concat (file-name-as-directory nneething-address)
+         (if (numberp article)
+             (cadr (assq article nneething-map))
+           article)))
 
 (provide 'nneething)
 
index b0dd971..db9666b 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nnfolder.el --- mail folder access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Scott Byer <byer@mv.us.adobe.com>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -90,13 +90,6 @@ time saver for large mailboxes.")
 (defvoo nnfolder-buffer-alist nil)
 (defvoo nnfolder-scantime-alist nil)
 (defvoo nnfolder-active-timestamp nil)
-(defvoo nnfolder-active-file-coding-system mm-text-coding-system)
-(defvoo nnfolder-active-file-coding-system-for-write 
-    nnmail-active-file-coding-system)
-(defvoo nnfolder-file-coding-system mm-text-coding-system)
-(defvoo nnfolder-file-coding-system-for-write nnheader-file-coding-system
-  "Coding system for save nnfolder file.
-If NIL, NNFOLDER-FILE-CODING-SYSTEM is used.")
 
 \f
 
@@ -273,14 +266,15 @@ If NIL, NNFOLDER-FILE-CODING-SYSTEM is used.")
   (when group
     (unless (assoc group nnfolder-group-alist)
       (push (list group (cons 1 0)) nnfolder-group-alist)
-      (nnfolder-save-active nnfolder-group-alist nnfolder-active-file)
+      (nnmail-save-active nnfolder-group-alist nnfolder-active-file)
       (nnfolder-read-folder group)))
   t)
 
 (deffoo nnfolder-request-list (&optional server)
   (nnfolder-possibly-change-group nil server)
   (save-excursion
-    (let ((nnmail-file-coding-system nnfolder-active-file-coding-system))
+    (let ((nnmail-file-coding-system nnmail-active-file-coding-system)
+         (pathname-coding-system 'binary))
       (nnmail-find-file nnfolder-active-file)
       (setq nnfolder-group-alist (nnmail-get-active)))
     t))
@@ -292,8 +286,7 @@ If NIL, NNFOLDER-FILE-CODING-SYSTEM is used.")
 (deffoo nnfolder-request-list-newsgroups (&optional server)
   (nnfolder-possibly-change-group nil server)
   (save-excursion
-    (let ((nnmail-file-coding-system nnfolder-file-coding-system))
-      (nnmail-find-file nnfolder-newsgroups-file))))
+    (nnmail-find-file nnfolder-newsgroups-file)))
 
 (deffoo nnfolder-request-expire-articles
   (articles newsgroup &optional server force)
@@ -306,10 +299,7 @@ If NIL, NNFOLDER-FILE-CODING-SYSTEM is used.")
       (set-buffer nnfolder-current-buffer)
       (while (and articles is-old)
        (goto-char (point-min))
-       (when (and (nnfolder-goto-article (car articles))
-                  (search-forward (concat "\n" nnfolder-article-marker)
-                                  nil t))
-         (forward-sexp)
+       (when (nnfolder-goto-article (car articles))
          (if (setq is-old
                    (nnmail-expired-article-p
                     newsgroup
@@ -326,7 +316,7 @@ If NIL, NNFOLDER-FILE-CODING-SYSTEM is used.")
        (nnheader-message 5 "Deleting articles...done"))
       (nnfolder-save-buffer)
       (nnfolder-adjust-min-active newsgroup)
-      (nnfolder-save-active nnfolder-group-alist nnfolder-active-file)
+      (nnmail-save-active nnfolder-group-alist nnfolder-active-file)
       (nconc rest articles))))
 
 (deffoo nnfolder-request-move-article (article group server
@@ -338,6 +328,7 @@ If NIL, NNFOLDER-FILE-CODING-SYSTEM is used.")
        (nnfolder-request-article article group server)
        (save-excursion
         (set-buffer buf)
+        (buffer-disable-undo (current-buffer))
         (erase-buffer)
         (insert-buffer-substring nntp-server-buffer)
         (goto-char (point-min))
@@ -358,7 +349,7 @@ If NIL, NNFOLDER-FILE-CODING-SYSTEM is used.")
         (when last
           (nnfolder-save-buffer)
           (nnfolder-adjust-min-active group)
-          (nnfolder-save-active nnfolder-group-alist nnfolder-active-file))))
+          (nnmail-save-active nnfolder-group-alist nnfolder-active-file))))
       result)))
 
 (deffoo nnfolder-request-accept-article (group &optional server last)
@@ -396,7 +387,7 @@ If NIL, NNFOLDER-FILE-CODING-SYSTEM is used.")
           (nnfolder-save-buffer)
           (when nnmail-cache-accepted-message-ids
             (nnmail-cache-close)))))
-      (nnfolder-save-active nnfolder-group-alist nnfolder-active-file)
+      (nnmail-save-active nnfolder-group-alist nnfolder-active-file)
       (unless result
        (nnheader-report 'nnfolder "Couldn't store article"))
       result)))
@@ -413,7 +404,7 @@ If NIL, NNFOLDER-FILE-CODING-SYSTEM is used.")
       (goto-char (point-min))
       (if xfrom
          (insert "From " xfrom "\n")
-       (unless (looking-at "From ")
+       (unless (looking-at message-unix-mail-delimiter)
          (insert "From nobody " (current-time-string) "\n"))))
     (nnfolder-normalize-buffer)
     (set-buffer nnfolder-current-buffer)
@@ -439,7 +430,7 @@ If NIL, NNFOLDER-FILE-CODING-SYSTEM is used.")
        nnfolder-current-group nil
        nnfolder-current-buffer nil)
   ;; Save the active file.
-  (nnfolder-save-active nnfolder-group-alist nnfolder-active-file)
+  (nnmail-save-active nnfolder-group-alist nnfolder-active-file)
   t)
 
 (deffoo nnfolder-request-rename-group (group new-name &optional server)
@@ -458,7 +449,7 @@ If NIL, NNFOLDER-FILE-CODING-SYSTEM is used.")
           (setq nnfolder-current-buffer nil
                 nnfolder-current-group nil)
           ;; Save the new group alist.
-          (nnfolder-save-active nnfolder-group-alist nnfolder-active-file)
+          (nnmail-save-active nnfolder-group-alist nnfolder-active-file)
           ;; We kill the buffer instead of renaming it and stuff.
           (kill-buffer (current-buffer))
           t))))
@@ -520,21 +511,17 @@ Returns t if successful, nil otherwise."
   "Delete the message that point is in.
 If optional argument LEAVE-DELIM is t, then mailbox delimiter is not
 deleted.  Point is left where the deleted region was."
-  (save-restriction
-    (narrow-to-region
-     (save-excursion
-       ;; In case point is at the beginning of the message already.
-       (forward-line 1)
-       (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.
@@ -547,14 +534,14 @@ deleted.  Point is left where the deleted region was."
   ;; Change group.
   (when (and group
             (not (equal group nnfolder-current-group)))
-    (let ((pathname-coding-system nnmail-pathname-coding-system))
+    (let ((pathname-coding-system 'binary))
       (nnmail-activate 'nnfolder)
       (when (and (not (assoc group nnfolder-group-alist))
                 (not (file-exists-p
                       (nnfolder-group-pathname group))))
        ;; The group doesn't exist, so we create a new entry for it.
        (push (list group (cons 1 0)) nnfolder-group-alist)
-       (nnfolder-save-active nnfolder-group-alist nnfolder-active-file))
+       (nnmail-save-active nnfolder-group-alist nnfolder-active-file))
 
       (if dont-check
          (setq nnfolder-current-group group
@@ -584,10 +571,7 @@ deleted.  Point is left where the deleted region was."
              ;; See whether we need to create the new file.
              (unless (file-exists-p file)
                (gnus-make-directory (file-name-directory file))
-               (let ((nnmail-file-coding-system 
-                      (or nnfolder-file-coding-system-for-write
-                          nnfolder-file-coding-system-for-write)))
-                 (nnmail-write-region 1 1 file t 'nomesg)))
+               (nnmail-write-region 1 1 file t 'nomesg))
              (when (setq nnfolder-current-buffer (nnfolder-read-folder group))
                (set-buffer nnfolder-current-buffer)
                (push (list group nnfolder-current-buffer)
@@ -598,10 +582,10 @@ deleted.  Point is left where the deleted region was."
   (let* (save-list group-art)
     (goto-char (point-min))
     ;; The From line may have been quoted by movemail.
-    (when (looking-at ">From")
+    (when (looking-at (concat ">" message-unix-mail-delimiter))
       (delete-char 1))
     ;; This might come from somewhere else.
-    (unless (looking-at "From ")
+    (unless (looking-at message-unix-mail-delimiter)
       (insert "From nobody " (current-time-string) "\n")
       (goto-char (point-min)))
     ;; Quote all "From " lines in the article.
@@ -675,7 +659,7 @@ deleted.  Point is left where the deleted region was."
       (when inf
        (setq nnfolder-buffer-alist (delq inf nnfolder-buffer-alist)))
       (when nnfolder-group-alist
-       (nnfolder-save-active nnfolder-group-alist nnfolder-active-file))
+       (nnmail-save-active nnfolder-group-alist nnfolder-active-file))
       (push (list group (nnfolder-read-folder group))
            nnfolder-buffer-alist))))
 
@@ -696,10 +680,7 @@ deleted.  Point is left where the deleted region was."
 
 (defun nnfolder-read-folder (group)
   (let* ((file (nnfolder-group-pathname group))
-        (buffer (set-buffer
-                 (let ((nnheader-file-coding-system 
-                        nnfolder-file-coding-system))
-                   (nnheader-find-file-noselect file)))))
+        (buffer (set-buffer (nnheader-find-file-noselect file))))
     (if (equal (cadr (assoc group nnfolder-scantime-alist))
               (nth 5 (file-attributes file)))
        ;; This looks up-to-date, so we don't do any scanning.
@@ -710,13 +691,9 @@ deleted.  Point is left where the deleted region was."
          (save-buffer))
       ;; Parse the damn thing.
       (save-excursion
-       (goto-char (point-min))
-       ;; Remove any blank lines at the start.
-       (while (eq (following-char) ?\n)
-         (delete-char 1))
        (nnmail-activate 'nnfolder)
        ;; Read in the file.
-       (let ((delim "^From ")
+       (let ((delim (concat "^" message-unix-mail-delimiter))
              (marker (concat "\n" nnfolder-article-marker))
              (number "[0-9]+")
              (active (or (cadr (assoc group nnfolder-group-alist))
@@ -725,7 +702,7 @@ deleted.  Point is left where the deleted region was."
              (minid (lsh -1 -1))
              maxid start end newscantime
              buffer-read-only)
-         (buffer-disable-undo)
+         (buffer-disable-undo (current-buffer))
          (setq maxid (cdr active))
          (goto-char (point-min))
 
@@ -785,7 +762,7 @@ deleted.  Point is left where the deleted region was."
 
          (set-marker end nil)
          ;; Make absolutely sure that the active list reflects reality!
-         (nnfolder-save-active nnfolder-group-alist nnfolder-active-file)
+         (nnmail-save-active nnfolder-group-alist nnfolder-active-file)
          ;; Set the scantime for this group.
          (setq newscantime (visited-file-modtime))
          (if scantime
@@ -796,8 +773,7 @@ deleted.  Point is left where the deleted region was."
 
 ;;;###autoload
 (defun nnfolder-generate-active-file ()
-  "Look for mbox folders in the nnfolder directory and make them into groups.
-This command does not work if you use short group names."
+  "Look for mbox folders in the nnfolder directory and make them into groups."
   (interactive)
   (nnmail-activate 'nnfolder)
   (let ((files (directory-files nnfolder-directory))
@@ -821,8 +797,7 @@ This command does not work if you use short group names."
 
 (defun nnfolder-group-pathname (group)
   "Make pathname for GROUP."
-  (setq group
-       (mm-encode-coding-string group nnmail-pathname-coding-system))
+  (setq group (gnus-encode-coding-string group nnmail-pathname-coding-system))
   (let ((dir (file-name-as-directory (expand-file-name nnfolder-directory))))
     ;; If this file exists, we use it directly.
     (if (or nnmail-use-long-file-names
@@ -836,16 +811,7 @@ This command does not work if you use short group names."
   (when (buffer-modified-p)
     (run-hooks 'nnfolder-save-buffer-hook)
     (gnus-make-directory (file-name-directory (buffer-file-name)))
-    (let ((coding-system-for-write 
-          (or nnfolder-file-coding-system-for-write
-              nnfolder-file-coding-system)))
-      (save-buffer))))
-
-(defun nnfolder-save-active (group-alist active-file)
-  (let ((nnmail-active-file-coding-system
-        (or nnfolder-active-file-coding-system-for-write
-            nnfolder-active-file-coding-system)))
-    (nnmail-save-active group-alist active-file)))
+    (save-buffer)))
 
 (provide 'nnfolder)
 
index 74c556c..c580ac5 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nngateway.el --- posting news via mail gateways
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news, mail
@@ -55,7 +55,7 @@ parameter -- the gateway address.")
            (nngateway-open-server server))
     ;; Rewrite the header.
     (let ((buf (current-buffer)))
-      (with-temp-buffer
+      (nnheader-temp-write nil
        (insert-buffer-substring buf)
        (message-narrow-to-head)
        (funcall nngateway-header-transformation nngateway-address)
index 696f7c9..7ef13f2 100644 (file)
@@ -1,6 +1,5 @@
-
 ;;; nnheader.el --- header access macros for Gnus and its backends
-;; Copyright (C) 1987-1990,1993-1999 Free Software Foundation, Inc.
+;; Copyright (C) 1987,88,89,90,93,94,95,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
 
 ;;; Commentary:
 
+;; These macros may look very much like the ones in GNUS 4.1.  They
+;; are, in a way, but you should note that the indices they use have
+;; been changed from the internal GNUS format to the NOV format.  The
+;; makes it possible to read headers from XOVER much faster.
+;;
+;; The format of a header is now:
+;; [number subject from date id references chars lines xref]
+;;
+;; (That last entry is defined as "misc" in the NOV format, but Gnus
+;; uses it for xrefs.)
+
 ;;; Code:
 
 (eval-when-compile (require 'cl))
 
 (require 'mail-utils)
-(require 'mm-util)
 
 (defvar nnheader-max-head-length 4096
   "*Max length of the head of articles.")
@@ -40,7 +49,7 @@
 
 (defvar nnheader-file-name-translation-alist nil
   "*Alist that says how to translate characters in file names.
-For instance, if \":\" is invalid as a file character in file names
+For instance, if \":\" is illegal as a file character in file names
 on your system, you could say something like:
 
 \(setq nnheader-file-name-translation-alist '((?: . ?_)))")
@@ -52,21 +61,11 @@ on your system, you could say something like:
  (autoload 'cancel-function-timers "timers")
  (autoload 'gnus-point-at-eol "gnus-util")
  (autoload 'gnus-delete-line "gnus-util")
- (autoload 'gnus-buffer-live-p "gnus-util"))
+ (autoload 'gnus-buffer-live-p "gnus-util")
+ (autoload 'gnus-encode-coding-string "gnus-ems"))
 
 ;;; Header access macros.
 
-;; These macros may look very much like the ones in GNUS 4.1.  They
-;; are, in a way, but you should note that the indices they use have
-;; been changed from the internal GNUS format to the NOV format.  The
-;; makes it possible to read headers from XOVER much faster.
-;;
-;; The format of a header is now:
-;; [number subject from date id references chars lines xref extra]
-;;
-;; (That next-to-last entry is defined as "misc" in the NOV format,
-;; but Gnus uses it for xrefs.)
-
 (defmacro mail-header-number (header)
   "Return article number in HEADER."
   `(aref ,header 0))
@@ -141,23 +140,14 @@ on your system, you could say something like:
   "Set article xref of HEADER to xref."
   `(aset ,header 8 ,xref))
 
-(defmacro mail-header-extra (header)
-  "Return the extra headers in HEADER."
-  `(aref ,header 9))
-
-(defmacro mail-header-set-extra (header extra)
-  "Set the extra headers in HEADER to EXTRA."
-  `(aset ,header 9 ',extra))
-
 (defun make-mail-header (&optional init)
   "Create a new mail header structure initialized with INIT."
-  (make-vector 10 init))
+  (make-vector 9 init))
 
 (defun make-full-mail-header (&optional number subject from date id
-                                       references chars lines xref
-                                       extra)
+                                       references chars lines xref)
   "Create a new mail header structure initialized with the parameters given."
-  (vector number subject from date id references chars lines xref extra))
+  (vector number subject from date id references chars lines xref))
 
 ;; fake message-ids: generation and detection
 
@@ -243,12 +233,11 @@ on your system, you could say something like:
               ;; promising.
               (if (and (search-forward "\nin-reply-to: " nil t)
                        (setq in-reply-to (nnheader-header-value))
-                       (string-match "<[^\n>]+>" in-reply-to))
+                       (string-match "<[^>]+>" in-reply-to))
                   (let (ref2)
                     (setq ref (substring in-reply-to (match-beginning 0)
                                          (match-end 0)))
-                    (while (string-match "<[^\n>]+>"
-                                         in-reply-to (match-end 0))
+                    (while (string-match "<[^>]+>" in-reply-to (match-end 0))
                       (setq ref2 (substring in-reply-to (match-beginning 0)
                                             (match-end 0)))
                       (when (> (length ref2) (length ref))
@@ -268,20 +257,7 @@ on your system, you could say something like:
           (progn
             (goto-char p)
             (and (search-forward "\nxref: " nil t)
-                 (nnheader-header-value)))
-
-          ;; Extra.
-          (when nnmail-extra-headers
-            (let ((extra nnmail-extra-headers)
-                  out)
-              (while extra
-                (goto-char p)
-                (when (search-forward
-                       (concat "\n" (symbol-name (car extra)) ": ") nil t)
-                  (push (cons (car extra) (nnheader-header-value))
-                        out))
-                (pop extra))
-              out))))
+                 (nnheader-header-value)))))
       (when naked
        (goto-char (point-min))
        (delete-char 1)))))
@@ -294,27 +270,13 @@ on your system, you could say something like:
 
 (defmacro nnheader-nov-read-integer ()
   '(prog1
-       (if (eq (char-after) ?\t)
+       (if (= (following-char) ?\t)
           0
         (let ((num (ignore-errors (read (current-buffer)))))
           (if (numberp num) num 0)))
      (or (eobp) (forward-char 1))))
 
-(defmacro nnheader-nov-parse-extra ()
-  '(let (out string)
-     (while (not (memq (char-after) '(?\n nil)))
-       (setq string (nnheader-nov-field))
-       (when (string-match "^\\([^ :]+\\): " string)
-        (push (cons (intern (match-string 1 string))
-                    (substring string (match-end 0)))
-              out)))
-     out))
-
-(defmacro nnheader-nov-read-message-id ()
-  '(let ((id (nnheader-nov-field)))
-     (if (string-match "^<[^>]+>$" id)
-        id
-       (nnheader-generate-fake-message-id))))
+;; (defvar nnheader-none-counter 0)
 
 (defun nnheader-parse-nov ()
   (let ((eol (gnus-point-at-eol)))
@@ -323,14 +285,15 @@ on your system, you could say something like:
      (nnheader-nov-field)              ; subject
      (nnheader-nov-field)              ; from
      (nnheader-nov-field)              ; date
-     (nnheader-nov-read-message-id)    ; id
+     (or (nnheader-nov-field)
+        (nnheader-generate-fake-message-id)) ; id
      (nnheader-nov-field)              ; refs
      (nnheader-nov-read-integer)       ; chars
      (nnheader-nov-read-integer)       ; lines
-     (if (eq (char-after) ?\n)
+     (if (= (following-char) ?\n)
         nil
        (nnheader-nov-field))           ; misc
-     (nnheader-nov-parse-extra))))     ; extra
+     )))
 
 (defun nnheader-insert-nov (header)
   (princ (mail-header-number header) (current-buffer))
@@ -348,16 +311,7 @@ on your system, you could say something like:
   (princ (or (mail-header-lines header) 0) (current-buffer))
   (insert "\t")
   (when (mail-header-xref header)
-    (insert "Xref: " (mail-header-xref header)))
-  (when (or (mail-header-xref header)
-           (mail-header-extra header))
-    (insert "\t"))
-  (when (mail-header-extra header)
-    (let ((extra (mail-header-extra header)))
-      (while extra
-       (insert (symbol-name (caar extra))
-               ": " (cdar extra) "\t")
-        (pop extra))))
+    (insert "Xref: " (mail-header-xref header) "\t"))
   (insert "\n"))
 
 (defun nnheader-insert-article-line (article)
@@ -445,7 +399,6 @@ the line could be found."
   (save-excursion
     (unless (gnus-buffer-live-p nntp-server-buffer)
       (setq nntp-server-buffer (get-buffer-create " *nntpd*")))
-    (mm-enable-multibyte)
     (set-buffer nntp-server-buffer)
     (erase-buffer)
     (kill-all-local-variables)
@@ -471,12 +424,12 @@ the line could be found."
   (when (file-exists-p file)
     (if (eq nnheader-max-head-length t)
        ;; Just read the entire file.
-       (mm-insert-file-contents file)
+       (nnheader-insert-file-contents file)
       ;; Read 1K blocks until we find a separator.
       (let ((beg 0)
            format-alist)
        (while (and (eq nnheader-head-chop-length
-                       (nth 1 (mm-insert-file-contents
+                       (nth 1 (nnheader-insert-file-contents
                                file nil beg
                                (incf beg nnheader-head-chop-length))))
                    (prog1 (not (search-forward "\n\n" nil t))
@@ -492,7 +445,7 @@ the line could be found."
       nil
     (narrow-to-region (point-min) (1- (point)))
     (goto-char (point-min))
-    (while (looking-at "[a-zA-Z][^ \t]+:.*\n\\([ \t].*\n\\)*\\|From .*\n")
+    (while (looking-at "[A-Z][^ \t]+:.*\n\\([ \t].*\n\\)*\\|From .*\n")
       (goto-char (match-end 0)))
     (prog1
        (eobp)
@@ -501,8 +454,7 @@ the line could be found."
 (defun nnheader-insert-references (references message-id)
   "Insert a References header based on REFERENCES and MESSAGE-ID."
   (if (and (not references) (not message-id))
-      ;; This is invalid, but not all articles have Message-IDs.
-      ()
+      ()                               ; This is illegal, but not all articles have Message-IDs.
     (mail-position-on-field "References")
     (let ((begin (save-excursion (beginning-of-line) (point)))
          (fill-column 78)
@@ -541,11 +493,57 @@ the line could be found."
 (defun nnheader-set-temp-buffer (name &optional noerase)
   "Set-buffer to an empty (possibly new) buffer called NAME with undo disabled."
   (set-buffer (get-buffer-create name))
-  (buffer-disable-undo)
+  (buffer-disable-undo (current-buffer))
   (unless noerase
     (erase-buffer))
   (current-buffer))
 
+(defmacro nnheader-temp-write (file &rest forms)
+  "Create a new buffer, evaluate FORMS there, and write the buffer to FILE.
+Return the value of FORMS.
+If FILE is nil, just evaluate FORMS and don't save anything.
+If FILE is t, return the buffer contents as a string."
+  (let ((temp-file (make-symbol "temp-file"))
+       (temp-buffer (make-symbol "temp-buffer"))
+       (temp-results (make-symbol "temp-results")))
+    `(save-excursion
+       (let* ((,temp-file ,file)
+             (default-major-mode 'fundamental-mode)
+             (,temp-buffer
+              (set-buffer
+               (get-buffer-create
+                (generate-new-buffer-name " *nnheader temp*"))))
+             ,temp-results)
+        (unwind-protect
+            (progn
+              (setq ,temp-results (progn ,@forms))
+              (cond
+               ;; Don't save anything.
+               ((null ,temp-file)
+                ,temp-results)
+               ;; Return the buffer contents.
+               ((eq ,temp-file t)
+                (set-buffer ,temp-buffer)
+                (buffer-string))
+               ;; Save a file.
+               (t
+                (set-buffer ,temp-buffer)
+                ;; Make sure the directory where this file is
+                ;; to be saved exists.
+                (when (not (file-directory-p
+                            (file-name-directory ,temp-file)))
+                  (make-directory (file-name-directory ,temp-file) t))
+                ;; Save the file.
+                (write-region (point-min) (point-max)
+                              ,temp-file nil 'nomesg)
+                ,temp-results)))
+          ;; Kill the buffer.
+          (when (buffer-name ,temp-buffer)
+            (kill-buffer ,temp-buffer)))))))
+
+(put 'nnheader-temp-write 'lisp-indent-function 1)
+(put 'nnheader-temp-write 'edebug-form-spec '(form body))
+
 (defvar jka-compr-compression-info-list)
 (defvar nnheader-numerical-files
   (if (boundp 'jka-compr-compression-info-list)
@@ -690,7 +688,7 @@ without formatting."
   (or (not (numberp gnus-verbose-backends))
       (<= level gnus-verbose-backends)))
 
-(defvar nnheader-pathname-coding-system 'binary
+(defvar nnheader-pathname-coding-system 'iso-8859-1
   "*Coding system for pathname.")
 
 (defun nnheader-group-pathname (group dir &optional file)
@@ -702,7 +700,7 @@ without formatting."
         (concat dir group "/")
        ;; If not, we translate dots into slashes.
        (concat dir
-              (mm-encode-coding-string
+              (gnus-encode-coding-string
                (nnheader-replace-chars-in-string group ?. ?/)
                nnheader-pathname-coding-system)
               "/")))
@@ -765,7 +763,7 @@ If FILE, find the \".../etc/PACKAGE\" file instead."
 (defvar nnheader-file-coding-system 'raw-text
   "Coding system used in file backends of Gnus.")
 
-(defun mm-insert-file-contents (filename &optional visit beg end replace)
+(defun nnheader-insert-file-contents (filename &optional visit beg end replace)
   "Like `insert-file-contents', q.v., but only reads in the file.
 A buffer may be modified in several ways after reading into the buffer due
 to advanced Emacs features, such as file-name-handlers, format decoding,
@@ -775,22 +773,20 @@ find-file-hooks, etc.
        (auto-mode-alist (nnheader-auto-mode-alist))
        (default-major-mode 'fundamental-mode)
        (enable-local-variables nil)
-        (after-insert-file-functions nil)
-       (enable-local-eval nil)
-       (find-file-hooks nil)
-       (coding-system-for-read nnheader-file-coding-system))
-    (insert-file-contents filename visit beg end replace)))
+       (after-insert-file-functions nil)
+       (find-file-hooks nil))
+    (insert-file-contents-as-coding-system
+     nnheader-file-coding-system filename visit beg end replace)))
 
 (defun nnheader-find-file-noselect (&rest args)
   (let ((format-alist nil)
        (auto-mode-alist (nnheader-auto-mode-alist))
        (default-major-mode 'fundamental-mode)
        (enable-local-variables nil)
-        (after-insert-file-functions nil)
-       (enable-local-eval nil)
-       (find-file-hooks nil)
-       (coding-system-for-read nnheader-file-coding-system))
-    (apply 'find-file-noselect args)))
+       (after-insert-file-functions nil)
+       (find-file-hooks nil))
+    (apply 'find-file-noselect-as-coding-system
+          nnheader-file-coding-system args)))
 
 (defun nnheader-auto-mode-alist ()
   "Return an `auto-mode-alist' with only the .gz (etc) thingies."
@@ -826,6 +822,8 @@ find-file-hooks, etc.
   `(let ((new (generate-new-buffer " *nnheader replace*"))
         (cur (current-buffer))
         (start (point-min)))
+     (set-buffer new)
+     (buffer-disable-undo (current-buffer))
      (set-buffer cur)
      (goto-char (point-min))
      (while (,(if regexp 're-search-forward 'search-forward)
@@ -858,6 +856,23 @@ find-file-hooks, etc.
 (fset 'nnheader-cancel-timer 'cancel-timer)
 (fset 'nnheader-cancel-function-timers 'cancel-function-timers)
 
+(defun nnheader-Y-or-n-p (prompt)
+  "Ask user a \"Y/n\" question. Return t if answer is neither \"n\", \"N\" nor \"C-g\"."
+  (let ((cursor-in-echo-area t)
+       (echo-keystrokes 0)
+       (inhibit-quit t)
+       ans)
+    (let (message-log-max)
+      (while (not (memq ans '(?\  ?N ?Y ?\C-g ?\e ?\n ?\r ?n ?y)))
+       (message "%s(Y/n) " prompt)
+       (setq ans (read-char-exclusive))))
+    (if (memq ans '(?\C-g ?N ?n))
+       (progn
+         (message "%s(Y/n) No" prompt)
+         nil)
+      (message "%s(Y/n) Yes" prompt)
+      t)))
+
 (when (string-match "XEmacs\\|Lucid" emacs-version)
   (require 'nnheaderxm))
 
index ecd256b..7c1435c 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nnheaderxm.el --- making Gnus backends work under XEmacs
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
       (,function ,@args))
    time repeat))
 
+(defun nnheader-xmas-Y-or-n-p (prompt)
+  "Ask user a \"Y/n\" question. Return t if answer is neither \"n\", \"N\" nor \"C-g\"."
+  (if (should-use-dialog-box-p)
+      (yes-or-no-p-dialog-box prompt)
+    (let ((cursor-in-echo-area t)
+         (echo-keystrokes 0)
+         (inhibit-quit t)
+         event)
+      (message "%s(Y/n) " prompt)
+      (while (or (not (key-press-event-p (setq event (next-command-event))))
+                (not (or (eq (event-key event) 'escape)
+                         (memq (event-to-character event)
+                               '(?\  ?N ?Y ?\C-g ?\e ?\n ?\r ?n ?y))))))
+      (if (memq (event-key event) '(?\C-g ?N ?n))
+         (progn
+           (message "%s(Y/n) No" prompt)
+           nil)
+       (message "%s(Y/n) Yes" prompt)
+       t))))
+
 (fset 'nnheader-run-at-time 'nnheader-xmas-run-at-time)
 (fset 'nnheader-cancel-timer 'delete-itimer)
 (fset 'nnheader-cancel-function-timers 'ignore)
+(fset 'nnheader-Y-or-n-p 'nnheader-xmas-Y-or-n-p)
 
 (provide 'nnheaderxm)
 
index 8818e50..38a0244 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nnkiboze.el --- select virtual news access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -80,7 +80,7 @@
          (save-excursion
            (set-buffer nntp-server-buffer)
            (erase-buffer)
-           (mm-insert-file-contents nov)
+           (nnheader-insert-file-contents nov)
            (nnheader-nov-delete-outside-range
             (car articles) (car (last articles)))
            'nov))))))
          (nnkiboze-request-scan group))
        (if (not (file-exists-p nov-file))
            (nnheader-report 'nnkiboze "Can't select group %s" group)
-         (mm-insert-file-contents nov-file)
+         (nnheader-insert-file-contents nov-file)
          (if (zerop (buffer-size))
              (nnheader-insert "211 0 0 0 %s\n" group)
            (goto-char (point-min))
   ;; Remove NOV lines of articles that are marked as read.
   (when (and (file-exists-p (nnkiboze-nov-file-name))
             nnkiboze-remove-read-articles)
-    (with-temp-file (nnkiboze-nov-file-name)
+    (nnheader-temp-write (nnkiboze-nov-file-name)
       (let ((cur (current-buffer)))
-       (mm-insert-file-contents (nnkiboze-nov-file-name))
+       (nnheader-insert-file-contents (nnkiboze-nov-file-name))
        (goto-char (point-min))
        (while (not (eobp))
          (if (not (gnus-article-read-p (read cur)))
@@ -209,7 +209,7 @@ Finds out what articles are to be part of the nnkiboze groups."
 
 (defun nnkiboze-generate-group (group)
   (let* ((info (nth 2 (gnus-gethash group gnus-newsrc-hashtb)))
-        (newsrc-file (concat nnkiboze-directory
+        (newsrc-file (concat nnkiboze-directory 
                               (nnheader-translate-file-chars
                                (concat group ".newsrc"))))
         (nov-file (concat nnkiboze-directory
@@ -230,9 +230,9 @@ Finds out what articles are to be part of the nnkiboze groups."
     ;; Load the kiboze newsrc file for this group.
     (when (file-exists-p newsrc-file)
       (load newsrc-file))
-    (with-temp-file nov-file
+    (nnheader-temp-write nov-file
       (when (file-exists-p nov-file)
-       (insert-file-contents nov-file))
+       (nnheader-insert-file-contents nov-file))
       (setq nov-buffer (current-buffer))
       ;; Go through the active hashtb and add new all groups that match the
       ;; kiboze regexp.
@@ -287,7 +287,7 @@ Finds out what articles are to be part of the nnkiboze groups."
                                           (car ginfo)))
                                  0))
                           (progn
-                            (ignore-errors
+                            (ignore-errors 
                               (gnus-group-select-group nil))
                             (eq major-mode 'gnus-summary-mode)))
                  ;; We are now in the group where we want to be.
@@ -318,7 +318,7 @@ Finds out what articles are to be part of the nnkiboze groups."
        (gnus-message 3 "nnkiboze: Checking %s...done" (caar newsrc))
        (setq newsrc (cdr newsrc))))
     ;; We save the kiboze newsrc for this group.
-    (with-temp-file newsrc-file
+    (nnheader-temp-write newsrc-file
       (insert "(setq nnkiboze-newsrc '")
       (gnus-prin1 nnkiboze-newsrc)
       (insert ")\n")))
index e450dec..bb2b4a9 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nnlistserv.el --- retrieving articles via web mailing list archives
-;; Copyright (C) 1997,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1997,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news, mail
 
 (defun nnlistserv-kk-search (search)
   (url-insert-file-contents
-   (concat (format (nnweb-definition 'address) search)
+   (concat (format (nnweb-definition 'address) search) 
           (nnweb-definition 'index)))
   t)
 
index 9af078b..8e8359e 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nnmail.el --- mail support functions for the Gnus mail backends
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news, mail
 (eval-when-compile (require 'cl))
 
 (require 'nnheader)
+(require 'timezone)
 (require 'message)
 (require 'custom)
 (require 'gnus-util)
-(require 'mail-source)
-(require 'mm-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."
@@ -171,12 +171,43 @@ Eg.:
   :group 'nnmail
   :type 'boolean)
 
-(defcustom nnmail-spool-file '((file))
+(defcustom nnmail-spool-file
+  (or (getenv "MAIL")
+      (concat "/usr/spool/mail/" (user-login-name)))
   "*Where the mail backends will look for incoming mail.
-This variable is a list of mail source specifiers.
-This variable is obsolete; `mail-sources' should be used instead."
+This variable is \"/usr/spool/mail/$user\" by default.
+If this variable is nil, no mail backends will read incoming mail.
+If this variable is a list, all files mentioned in this list will be
+used as incoming mailboxes.
+If this variable is a directory (i. e., it's name ends with a \"/\"),
+treat all files in that directory as incoming spool files."
   :group 'nnmail-files
-  :type 'sexp)
+  :type '(choice (file :tag "File")
+                (repeat :tag "Files" file)))
+
+(defcustom nnmail-crash-box "~/.gnus-crash-box"
+  "File where Gnus will store mail while processing it."
+  :group 'nnmail-files
+  :type 'file)
+
+(defcustom nnmail-use-procmail nil
+  "*If non-nil, the mail backends will look in `nnmail-procmail-directory' for spool files.
+The file(s) in `nnmail-spool-file' will also be read."
+  :group 'nnmail-procmail
+  :type 'boolean)
+
+(defcustom nnmail-procmail-directory "~/incoming/"
+  "*When using procmail (and the like), incoming mail is put in this directory.
+The Gnus mail backends will read the mail from this directory."
+  :group 'nnmail-procmail
+  :type 'directory)
+
+(defcustom nnmail-procmail-suffix "\\.spool"
+  "*Suffix of files created by procmail (and the like).
+This variable might be a suffix-regexp to match the suffixes of
+several files - eg. \".spool[0-9]*\"."
+  :group 'nnmail-procmail
+  :type 'regexp)
 
 (defcustom nnmail-resplit-incoming nil
   "*If non-nil, re-split incoming procmail sorted mail."
@@ -201,6 +232,22 @@ links, you could set this variable to `copy-file' instead."
                (function-item copy-file)
                (function :tag "Other")))
 
+(defcustom nnmail-movemail-program "movemail"
+  "*A command to be executed to move mail from the inbox.
+The default is \"movemail\".
+
+This can also be a function.  In that case, the function will be
+called with two parameters -- the name of the INBOX file, and the file
+to be moved to."
+  :group 'nnmail-files
+  :group 'nnmail-retrieve
+  :type 'string)
+
+(defcustom nnmail-pop-password-required nil
+  "*Non-nil if a password is required when reading mail using POP."
+  :group 'nnmail-retrieve
+  :type 'boolean)
+
 (defcustom nnmail-read-incoming-hook
   (if (eq system-type 'windows-nt)
       '(nnheader-ms-strip-cr)
@@ -233,6 +280,7 @@ If you use `display-time', you could use something like this:
   :group 'nnmail-prepare
   :type 'hook)
 
+;; Suggested by Erik Selberg <speed@cs.washington.edu>.
 (defcustom nnmail-prepare-incoming-hook nil
   "Hook called before treating incoming mail.
 The hook is run in a buffer with all the new, incoming mail."
@@ -277,6 +325,15 @@ discarded after running the split process."
   :group 'nnmail-split
   :type 'hook)
 
+;; Suggested by Mejia Pablo J <pjm9806@usl.edu>.
+(defcustom nnmail-tmp-directory nil
+  "*If non-nil, use this directory for temporary storage.
+Used when reading incoming mail."
+  :group 'nnmail-files
+  :group 'nnmail-retrieve
+  :type '(choice (const :tag "default" nil)
+                (directory :format "%v")))
+
 (defcustom nnmail-large-newsgroup 50
   "*The number of the articles which indicates a large newsgroup.
 If the number of the articles is greater than the value, verbose
@@ -293,12 +350,8 @@ the following:
 
 GROUP: Mail will be stored in GROUP (a string).
 
-\(FIELD VALUE [- RESTRICT [- RESTRICT [...]]] SPLIT): If the message
-  field FIELD (a regexp) contains VALUE (a regexp), store the messages 
-  as specified by SPLIT.  If RESTRICT (a regexp) matches some string
-  after FIELD and before the end of the matched VALUE, return NIL,
-  otherwise process SPLIT.  Multiple RESTRICTs add up, further
-  restricting the possibility of processing SPLIT.
+\(FIELD VALUE SPLIT): If the message field FIELD (a regexp) contains
+  VALUE (a regexp), store the messages as specified by SPLIT.
 
 \(| SPLIT...): Process each SPLIT expression until one of them matches.
   A SPLIT expression is said to match if it will cause the mail
@@ -310,10 +363,6 @@ GROUP: Mail will be stored in GROUP (a string).
   the buffer containing the message headers.  The return value FUNCTION
   should be a split, which is then recursively processed.
 
-\(! FUNCTION SPLIT): Call FUNCTION with the result of SPLIT.  The
-  return value FUNCTION should be a split, which is then recursively
-  processed.
-
 FIELD must match a complete field name.  VALUE must match a complete
 word according to the `nnmail-split-fancy-syntax-table' syntax table.
 You can use \".*\" in the regexps to match partial field names or words.
@@ -341,13 +390,6 @@ Example:
             ;; Other mailing lists...
             (any \"procmail@informatik\\\\.rwth-aachen\\\\.de\" \"procmail.list\")
             (any \"SmartList@informatik\\\\.rwth-aachen\\\\.de\" \"SmartList.list\")
-             ;; Both lists below have the same suffix, so prevent
-             ;; cross-posting to mkpkg.list of messages posted only to 
-             ;; the bugs- list, but allow cross-posting when the
-             ;; message was really cross-posted.
-             (any \"bugs-mypackage@somewhere\" \"mypkg.bugs\")
-             (any \"mypackage@somewhere\" - \"bugs-mypackage\" \"mypkg.list\")
-             ;; 
             ;; People...
             (any \"larsi@ifi\\\\.uio\\\\.no\" \"people.Lars Magne Ingebrigtsen\"))
          ;; Unmatched mail goes to the catch all group.
@@ -367,6 +409,12 @@ Example:
   :group 'nnmail-split
   :type '(repeat (cons :format "%v" symbol regexp)))
 
+(defcustom nnmail-delete-incoming t
+  "*If non-nil, the mail backends will delete incoming files after
+splitting."
+  :group 'nnmail-retrieve
+  :type 'boolean)
+
 (defcustom nnmail-message-id-cache-length 1000
   "*The approximate number of Message-IDs nnmail will keep in its cache.
 If this variable is nil, no checking on duplicate messages will be
@@ -383,7 +431,7 @@ performed."
 
 (defcustom nnmail-treat-duplicates 'warn
   "*If non-nil, nnmail keep a cache of Message-IDs to discover mail duplicates.
-Three values are valid: nil, which means that nnmail is not to keep a
+Three values are legal: nil, which means that nnmail is not to keep a
 Message-ID cache; `warn', which means that nnmail should insert extra
 headers to warn the user about the duplication (this is the default);
 and `delete', which means that nnmail will delete duplicated mails.
@@ -396,21 +444,16 @@ parameter.  It should return nil, `warn' or `delete'."
                 (const warn)
                 (const delete)))
 
-(defcustom nnmail-extra-headers nil
-  "*Extra headers to parse."
-  :group 'nnmail
-  :type '(repeat symbol))
-
-(defcustom nnmail-split-header-length-limit 512
-  "Header lines longer than this limit are excluded from the split function."
-  :group 'nnmail
-  :type 'integer)
-
 ;;; Internal variables.
 
 (defvar nnmail-split-history nil
   "List of group/article elements that say where the previous split put messages.")
 
+(defvar nnmail-current-spool nil)
+
+(defvar nnmail-pop-password nil
+  "*Password to use when reading mail from a POP server, if required.")
+
 (defvar nnmail-split-fancy-syntax-table nil
   "Syntax table used by `nnmail-split-fancy'.")
 (unless (syntax-table-p nnmail-split-fancy-syntax-table)
@@ -422,6 +465,11 @@ parameter.  It should return nil, `warn' or `delete'."
 (defvar nnmail-prepare-save-mail-hook nil
   "Hook called before saving mail.")
 
+(defvar nnmail-moved-inboxes nil
+  "List of inboxes that have been moved.")
+
+(defvar nnmail-internal-password nil)
+
 (defvar nnmail-split-tracing nil)
 (defvar nnmail-split-trace nil)
 
@@ -438,27 +486,23 @@ parameter.  It should return nil, `warn' or `delete'."
 (defvar nnmail-file-coding-system 'raw-text
   "Coding system used in nnmail.")
 
-(defvar nnmail-incoming-coding-system
-  mm-text-coding-system
-  "Coding system used in reading inbox")
-
-(defvar nnmail-pathname-coding-system 'binary
-  "*Coding system for pathname.")
-
 (defun nnmail-find-file (file)
   "Insert FILE in server buffer safely."
   (set-buffer nntp-server-buffer)
-  (delete-region (point-min) (point-max))
+  (erase-buffer)
   (let ((format-alist nil)
         (after-insert-file-functions nil))
     (condition-case ()
-       (let ((coding-system-for-read nnmail-file-coding-system)
-             (auto-mode-alist (nnheader-auto-mode-alist))
-             (pathname-coding-system nnmail-pathname-coding-system))
-         (insert-file-contents file)
+       (let ((pathname-coding-system 'binary))
+         (insert-file-contents-as-coding-system
+          nnmail-file-coding-system file)
          t)
       (file-error nil))))
 
+(defvar nnmail-pathname-coding-system
+  'iso-8859-1
+  "*Coding system for pathname.")
+
 (defun nnmail-group-pathname (group dir &optional file)
   "Make pathname for GROUP."
   (concat
@@ -470,12 +514,174 @@ parameter.  It should return nil, `warn' or `delete'."
         (concat dir group "/")
        ;; If not, we translate dots into slashes.
        (concat dir
-              (mm-encode-coding-string
+              (gnus-encode-coding-string
                (nnheader-replace-chars-in-string group ?. ?/)
                nnmail-pathname-coding-system)
               "/")))
    (or file "")))
 
+(defun nnmail-date-to-time (date)
+  "Convert DATE into time."
+  (condition-case ()
+      (let* ((d1 (timezone-parse-date date))
+            (t1 (timezone-parse-time (aref d1 3))))
+       (apply 'encode-time
+              (mapcar (lambda (el)
+                        (and el (string-to-number el)))
+                      (list
+                       (aref t1 2) (aref t1 1) (aref t1 0)
+                       (aref d1 2) (aref d1 1) (aref d1 0)
+                       (number-to-string
+                        (* 60 (timezone-zone-to-minute
+                                (or (aref d1 4) (current-time-zone)))))))))
+    ;; 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'."
+  (if (not (file-writable-p nnmail-crash-box))
+      (gnus-error 1 "Can't write to crash box %s.  Not moving mail"
+                 nnmail-crash-box)
+    ;; If the crash box exists and is empty, we delete it.
+    (when (and (file-exists-p nnmail-crash-box)
+              (zerop (nnheader-file-size (file-truename nnmail-crash-box))))
+      (delete-file nnmail-crash-box))
+    (let ((tofile (file-truename (expand-file-name nnmail-crash-box)))
+         (popmail (string-match "^po:" inbox))
+         movemail errors result)
+      (unless popmail
+       (setq inbox (file-truename (expand-file-name inbox)))
+       (setq movemail t)
+       ;; On some systems, /usr/spool/mail/foo is a directory
+       ;; and the actual inbox is /usr/spool/mail/foo/foo.
+       (when (file-directory-p inbox)
+         (setq inbox (expand-file-name (user-login-name) inbox))))
+      (if (member inbox nnmail-moved-inboxes)
+         ;; We don't try to move an already moved inbox.
+         nil
+       (if popmail
+           (progn
+             (when (and nnmail-pop-password
+                        (not nnmail-internal-password))
+               (setq nnmail-internal-password nnmail-pop-password))
+             (when (and nnmail-pop-password-required
+                        (not nnmail-internal-password))
+               (setq nnmail-internal-password
+                     (nnmail-read-passwd
+                      (format "Password for %s: "
+                              (substring inbox (+ popmail 3))))))
+             (nnheader-message 5 "Getting mail from the post office..."))
+         (when (or (and (file-exists-p tofile)
+                        (/= 0 (nnheader-file-size tofile)))
+                   (and (file-exists-p inbox)
+                        (/= 0 (nnheader-file-size inbox))))
+           (nnheader-message 5 "Getting mail from %s..." inbox)))
+       ;; Set TOFILE if have not already done so, and
+       ;; rename or copy the file INBOX to TOFILE if and as appropriate.
+       (cond
+        ((file-exists-p tofile)
+         ;; The crash box exists already.
+         t)
+        ((and (not popmail)
+              (not (file-exists-p inbox)))
+         ;; There is no inbox.
+         (setq tofile nil))
+        (t
+         ;; If getting from mail spool directory, use movemail to move
+         ;; rather than just renaming, so as to interlock with the
+         ;; mailer.
+         (unwind-protect
+             (save-excursion
+               (setq errors (generate-new-buffer " *nnmail loss*"))
+               (buffer-disable-undo errors)
+               (if (nnheader-functionp nnmail-movemail-program)
+                   (condition-case err
+                       (progn
+                         (funcall nnmail-movemail-program inbox tofile)
+                         (setq result 0))
+                     (error
+                      (save-excursion
+                        (set-buffer errors)
+                        (insert (prin1-to-string err))
+                        (setq result 255))))
+                 (let ((default-directory "/"))
+                   (setq result
+                         (apply
+                          'call-process
+                          (append
+                           (list
+                            (expand-file-name
+                             nnmail-movemail-program exec-directory)
+                            nil errors nil inbox tofile)
+                           (when nnmail-internal-password
+                             (list nnmail-internal-password)))))))
+               (push inbox nnmail-moved-inboxes)
+               (if (and (not (buffer-modified-p errors))
+                        (zerop result))
+                   ;; No output => movemail won
+                   (progn
+                     (unless popmail
+                       (when (file-exists-p tofile)
+                         (set-file-modes tofile nnmail-default-file-modes))))
+                 (set-buffer errors)
+                 ;; There may be a warning about older revisions.  We
+                 ;; ignore those.
+                 (goto-char (point-min))
+                 (if (search-forward "older revision" nil t)
+                     (progn
+                       (unless popmail
+                         (when (file-exists-p tofile)
+                           (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")
+                   (delete-region (point) (point-max))
+                   (goto-char (point-min))
+                   (when (looking-at "movemail: ")
+                     (delete-region (point-min) (match-end 0)))
+                   (unless (yes-or-no-p
+                            (format "movemail: %s (%d return).  Continue? "
+                                    (buffer-string) result))
+                     (error "%s" (buffer-string)))
+                   (setq tofile nil)))))))
+       (nnheader-message 5 "Getting mail from %s...done" inbox)
+       (and errors
+            (buffer-name errors)
+            (kill-buffer errors))
+       tofile))))
+
 (defun nnmail-get-active ()
   "Returns an assoc of group names and active ranges.
 nn*-request-list should have been called before calling this function."
@@ -493,14 +699,14 @@ nn*-request-list should have been called before calling this function."
              group-assoc)))
     group-assoc))
 
-(defvar nnmail-active-file-coding-system 'raw-text
+(defvar nnmail-active-file-coding-system 'binary
   "*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)
@@ -511,20 +717,34 @@ nn*-request-list should have been called before calling this function."
       (insert (format "%s %d %d y\n" (car group) (cdadr group)
                      (caadr group))))))
 
-(defun nnmail-get-split-group (file source)
+(defun nnmail-get-split-group (file group)
   "Find out whether this FILE is to be split into GROUP only.
-If SOURCE is a directory spec, try to return the group name component."
-  (if (eq (car source) 'directory)
-      (let ((file (file-name-nondirectory file)))
-       (mail-source-bind (directory source)
-         (if (string-match (concat (regexp-quote suffix) "$") file)
-             (substring file 0 (match-beginning 0))
-           nil)))
-    nil))
+If GROUP is non-nil and we are using procmail, return the group name
+only when the file is the correct procmail file.  When GROUP is nil,
+return nil if FILE is a spool file or the procmail group for which it
+is a spool.  If not using procmail, return GROUP."
+  (if (or (eq nnmail-spool-file 'procmail)
+         nnmail-use-procmail)
+      (if (string-match (concat "^" (regexp-quote
+                                    (expand-file-name
+                                     (file-name-as-directory
+                                      nnmail-procmail-directory)))
+                               "\\([^/]*\\)"
+                               nnmail-procmail-suffix "$")
+                       (expand-file-name file))
+         (let ((procmail-group (substring (expand-file-name file)
+                                          (match-beginning 1)
+                                          (match-end 1))))
+           (if group
+               (if (string-equal group procmail-group)
+                   group
+                 nil)
+             procmail-group))
+       nil)
+    group))
 
 (defun nnmail-process-babyl-mail-format (func artnum-func)
   (let ((case-fold-search t)
-       (count 0)
        start message-id content-length do-search end)
     (while (not (eobp))
       (goto-char (point-min))
@@ -596,10 +816,8 @@ If SOURCE is a directory spec, try to return the group name component."
          (narrow-to-region start (point))
          (goto-char (point-min))
          (nnmail-check-duplication message-id func artnum-func)
-         (incf count)
          (setq end (point-max))))
-      (goto-char end))
-    count))
+      (goto-char end))))
 
 (defsubst nnmail-search-unix-mail-delim ()
   "Put point at the beginning of the next Unix mbox message."
@@ -620,7 +838,7 @@ If SOURCE is a directory spec, try to return the group name component."
          (when (and (or (bobp)
                         (save-excursion
                           (forward-line -1)
-                          (eq (char-after) ?\n)))
+                          (= (following-char) ?\n)))
                     (save-excursion
                       (forward-line 1)
                       (while (looking-at ">From \\|From ")
@@ -649,7 +867,7 @@ If SOURCE is a directory spec, try to return the group name component."
          (when (and (or (bobp)
                         (save-excursion
                           (forward-line -1)
-                          (eq (char-after) ?\n)))
+                          (= (following-char) ?\n)))
                     (save-excursion
                       (forward-line 1)
                       (while (looking-at ">From \\|From ")
@@ -661,13 +879,14 @@ If SOURCE is a directory spec, try to return the group name component."
 
 (defun nnmail-process-unix-mail-format (func artnum-func)
   (let ((case-fold-search t)
-       (count 0)
        start message-id content-length end skip head-end)
     (goto-char (point-min))
     (if (not (and (re-search-forward "^From " nil t)
                  (goto-char (match-beginning 0))))
        ;; Possibly wrong format?
-       (error "Error, unknown mail format! (Possibly corrupted.)")
+       (progn
+         (pop-to-buffer (nnheader-find-file-noselect nnmail-current-spool))
+         (error "Error, unknown mail format! (Possibly corrupted.)"))
       ;; Carry on until the bitter end.
       (while (not (eobp))
        (setq start (point)
@@ -740,22 +959,21 @@ If SOURCE is a directory spec, try to return the group name component."
          (save-restriction
            (narrow-to-region start (point))
            (goto-char (point-min))
-           (incf count)
            (nnmail-check-duplication message-id func artnum-func)
            (setq end (point-max))))
-       (goto-char end)))
-    count))
+       (goto-char end)))))
 
 (defun nnmail-process-mmdf-mail-format (func artnum-func)
   (let ((delim "^\^A\^A\^A\^A$")
        (case-fold-search t)
-       (count 0)
        start message-id end)
     (goto-char (point-min))
     (if (not (and (re-search-forward delim nil t)
                  (forward-line 1)))
        ;; Possibly wrong format?
-       (error "Error, unknown mail format! (Possibly corrupted.)")
+       (progn
+         (pop-to-buffer (nnheader-find-file-noselect nnmail-current-spool))
+         (error "Error, unknown mail format! (Possibly corrupted.)"))
       ;; Carry on until the bitter end.
       (while (not (eobp))
        (setq start (point))
@@ -793,47 +1011,10 @@ If SOURCE is a directory spec, try to return the group name component."
          (save-restriction
            (narrow-to-region start (point))
            (goto-char (point-min))
-           (incf count)
            (nnmail-check-duplication message-id func artnum-func)
            (setq end (point-max))))
        (goto-char end)
-       (forward-line 2)))
-    count))
-
-(defun nnmail-process-maildir-mail-format (func artnum-func)
-  ;; In a maildir, every file contains exactly one mail.
-  (let ((case-fold-search t)
-       message-id)
-    (goto-char (point-min))
-    ;; Find the end of the head.
-    (narrow-to-region
-     (point-min)
-     (if (search-forward "\n\n" nil t)
-        (1- (point))
-       ;; This will never happen, but just to be on the safe side --
-       ;; if there is no head-body delimiter, we search a bit manually.
-       (while (and (looking-at "From \\|[^ \t]+:")
-                  (not (eobp)))
-        (forward-line 1)
-        (point))))
-    ;; Find the Message-ID header.
-    (goto-char (point-min))
-    (if (re-search-forward "^Message-ID:[ \t]*\\(<[^>]+>\\)" nil t)
-       (setq message-id (match-string 1))
-      ;; There is no Message-ID here, so we create one.
-      (save-excursion
-       (when (re-search-backward "^Message-ID[ \t]*:" nil t)
-         (beginning-of-line)
-         (insert "Original-")))
-      (forward-line 1)
-      (insert "Message-ID: " (setq message-id (nnmail-message-id)) "\n"))
-    (run-hooks 'nnmail-prepare-incoming-header-hook)
-    ;; Allow the backend to save the article.
-    (widen)
-    (save-excursion
-      (goto-char (point-min))
-      (nnmail-check-duplication message-id func artnum-func))
-    1))
+       (forward-line 2)))))
 
 (defun nnmail-split-incoming (incoming func &optional exit-func
                                       group artnum-func)
@@ -842,35 +1023,33 @@ FUNC will be called with the buffer narrowed to each mail."
   (let (;; If this is a group-specific split, we bind the split
        ;; methods to just this group.
        (nnmail-split-methods (if (and group
+                                      (or (eq nnmail-spool-file 'procmail)
+                                          nnmail-use-procmail)
                                       (not nnmail-resplit-incoming))
                                  (list (list group ""))
                                nnmail-split-methods)))
     (save-excursion
       ;; Insert the incoming file.
       (set-buffer (get-buffer-create " *nnmail incoming*"))
+      (buffer-disable-undo (current-buffer))
       (erase-buffer)
-      (let ((nnheader-file-coding-system nnmail-incoming-coding-system))
-       (mm-insert-file-contents incoming))
-      (prog1
-         (if (zerop (buffer-size))
-             0
-           (goto-char (point-min))
-           (save-excursion (run-hooks 'nnmail-prepare-incoming-hook))
-           ;; Handle both babyl, MMDF and unix mail formats, since
-           ;; movemail will use the former when fetching from a
-           ;; mailbox, the latter when fetching from a file.
-           (cond ((or (looking-at "\^L")
-                      (looking-at "BABYL OPTIONS:"))
-                  (nnmail-process-babyl-mail-format func artnum-func))
-                 ((looking-at "\^A\^A\^A\^A")
-                  (nnmail-process-mmdf-mail-format func artnum-func))
-                 ((looking-at "Return-Path:")
-                  (nnmail-process-maildir-mail-format func artnum-func))
-                 (t
-                  (nnmail-process-unix-mail-format func artnum-func))))
-       (when exit-func
-         (funcall exit-func))
-       (kill-buffer (current-buffer))))))
+      (nnheader-insert-file-contents incoming)
+      (unless (zerop (buffer-size))
+       (goto-char (point-min))
+       (save-excursion (run-hooks 'nnmail-prepare-incoming-hook))
+       ;; Handle both babyl, MMDF and unix mail formats, since movemail will
+       ;; use the former when fetching from a mailbox, the latter when
+       ;; fetching from a file.
+       (cond ((or (looking-at "\^L")
+                  (looking-at "BABYL OPTIONS:"))
+              (nnmail-process-babyl-mail-format func artnum-func))
+             ((looking-at "\^A\^A\^A\^A")
+              (nnmail-process-mmdf-mail-format func artnum-func))
+             (t
+              (nnmail-process-unix-mail-format func artnum-func))))
+      (when exit-func
+       (funcall exit-func))
+      (kill-buffer (current-buffer)))))
 
 (defun nnmail-article-group (func &optional trace)
   "Look at the headers and return an alist of groups that match.
@@ -878,7 +1057,7 @@ FUNC will be called with the group name to determine the article number."
   (let ((methods nnmail-split-methods)
        (obuf (current-buffer))
        (beg (point-min))
-       end group-art method grp)
+       end group-art method regrepp)
     (if (and (sequencep methods)
             (= (length methods) 1))
        ;; If there is only just one group to put everything in, we
@@ -904,10 +1083,10 @@ FUNC will be called with the group name to determine the article number."
        ;; existence to process.
        (goto-char (point-min))
        (while (not (eobp))
-         (unless (< (move-to-column nnmail-split-header-length-limit)
-                    nnmail-split-header-length-limit)
-           (delete-region (point) (progn (end-of-line) (point))))
-         (forward-line 1))
+         (end-of-line)
+         (if (> (current-column) 1024)
+             (gnus-delete-line)
+           (forward-line 1)))
        ;; Allow washing.
        (goto-char (point-min))
        (run-hooks 'nnmail-split-hook)
@@ -945,24 +1124,25 @@ FUNC will be called with the group name to determine the article number."
                          (not group-art)))
            (goto-char (point-max))
            (setq method (pop methods)
-                 grp (car method))
+                 regrepp nil)
            (if (or methods
                    (not (equal "" (nth 1 method))))
                (when (and
                       (ignore-errors
                         (if (stringp (nth 1 method))
-                            (let ((expand (string-match "\\\\[0-9&]" grp))
-                                  (pos (re-search-backward (cadr method)
-                                                           nil t)))
-                              (and expand
-                                   (setq grp (nnmail-expand-newtext grp)))
-                              pos)
+                            (progn
+                              (setq regrepp
+                                    (string-match "\\\\[0-9&]" (car method)))
+                              (re-search-backward (cadr method) nil t))
                           ;; Function to say whether this is a match.
-                          (funcall (nth 1 method) grp)))
+                          (funcall (nth 1 method) (car method))))
                       ;; Don't enter the article into the same
                       ;; group twice.
-                      (not (assoc grp group-art)))
-                 (push (cons grp (funcall func grp))
+                      (not (assoc (car method) group-art)))
+                 (push (cons (if regrepp
+                                 (nnmail-expand-newtext (car method))
+                               (car method))
+                             (funcall func (car method)))
                        group-art))
              ;; This is the final group, which is used as a
              ;; catch-all.
@@ -1022,9 +1202,8 @@ Return the number of characters in the body."
       (insert (format "Xref: %s" (system-name)))
       (while group-alist
        (insert (format " %s:%d"
-                       (mm-encode-coding-string
-                        (caar group-alist)
-                        nnmail-pathname-coding-system)
+                       (gnus-encode-coding-string (caar group-alist)
+                                             nnmail-pathname-coding-system)
                        (cdar group-alist)))
        (setq group-alist (cdr group-alist)))
       (insert "\n"))))
@@ -1052,19 +1231,17 @@ Return the number of characters in the body."
   "Translate TAB characters into SPACE characters."
   (subst-char-in-region (point-min) (point-max) ?\t ?  t))
 
-(defun nnmail-fix-eudora-headers ()
-  "Eudora has a broken References line, but an OK In-Reply-To."
-  (goto-char (point-min))
-  (when (re-search-forward "^X-Mailer:.*Eudora" nil t)
-    (goto-char (point-min))
-    (when (re-search-forward "^References:" nil t)
-      (beginning-of-line)
-      (insert "X-Gnus-Broken-Eudora-"))))
+;;; Utility functions
 
-(custom-add-option 'nnmail-prepare-incoming-header-hook
-                  'nnmail-fix-eudora-headers)
+(defun nnmail-make-complex-temp-name (prefix)
+  (let ((newname (make-temp-name prefix))
+       (newprefix prefix))
+    (while (file-exists-p newname)
+      (setq newprefix (concat newprefix "x"))
+      (setq newname (make-temp-name newprefix)))
+    newname))
 
-;;; Utility functions
+;; Written by Per Abrahamsen <amanda@iesd.auc.dk>.
 
 (defun nnmail-split-fancy ()
   "Fancy splitting method.
@@ -1115,77 +1292,49 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
      ((eq (car split) ':)
       (nnmail-split-it (save-excursion (eval (cdr split)))))
 
-     ;; Builtin ! operation.
-     ((eq (car split) '!)
-      (funcall (cadr split) (nnmail-split-it (caddr split))))
-
      ;; Check the cache for the regexp for this split.
      ((setq cached-pair (assq split nnmail-split-cache))
-      (let (split-result
-           (end-point (point-max))
-           (value (nth 1 split)))
-       (if (symbolp value)
-           (setq value (cdr (assq value nnmail-split-abbrev-alist))))
-       (while (and (goto-char end-point)
-                   (re-search-backward (cdr cached-pair) nil t))
-         (when nnmail-split-tracing
-           (push (cdr cached-pair) nnmail-split-trace))
-         (let ((split-rest (cddr split))
-               (end (match-end 0))
-               ;; The searched regexp is \(\(FIELD\).*\)\(VALUE\).  So,
-               ;; start-of-value is the the point just before the
-               ;; beginning of the value, whereas after-header-name is
-               ;; the point just after the field name.
-               (start-of-value (match-end 1))
-               (after-header-name (match-end 2)))
-           ;; Start the next search just before the beginning of the
-           ;; VALUE match.
-           (setq end-point (1- start-of-value))
-           ;; Handle - RESTRICTs
-           (while (eq (car split-rest) '-)
-             ;; RESTRICT must start after-header-name and
-             ;; end after start-of-value, so that, for
-             ;; (any "foo" - "x-foo" "foo.list")
-             ;; we do not exclude foo.list just because
-             ;; the header is: ``To: x-foo, foo''
-             (goto-char end)
-             (if (and (re-search-backward (cadr split-rest)
-                                          after-header-name t)
-                      (> (match-end 0) start-of-value))
-                 (setq split-rest nil)
-               (setq split-rest (cddr split-rest))))
-           (when split-rest
-             (goto-char end)
-             (let ((value (nth 1 split)))
-               (if (symbolp value)
-                   (setq value (cdr (assq value nnmail-split-abbrev-alist))))
-               ;; Someone might want to do a \N sub on this match, so get the
-               ;; correct match positions.
-               (re-search-backward value start-of-value))
-             (dolist (sp (nnmail-split-it (car split-rest)))
-               (unless (memq sp split-result)
-                 (push sp split-result))))))
-       split-result))
+      (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))
-            partial regexp)
-       (if (symbolp value)
-           (setq value (cdr (assq value nnmail-split-abbrev-alist))))
-       (if (string= ".*" (substring value 0 2))
-           (setq value (substring value 2)
-                 partial ""))
-       (setq regexp (concat "^\\(\\("
+            (regexp (concat "^\\(\\("
                             (if (symbolp field)
                                 (cdr (assq field nnmail-split-abbrev-alist))
                               field)
-                            "\\):.*\\)"
-                            (or partial "\\<")
-                            "\\("
-                            value
-                            "\\)\\>"))
+                            "\\):.*\\)\\<\\("
+                            (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.
@@ -1224,6 +1373,68 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
        (apply 'concat (nreverse expanded))
       newtext)))
 
+;; Get a list of spool files to read.
+(defun nnmail-get-spool-files (&optional group)
+  (if (null nnmail-spool-file)
+      ;; No spool file whatsoever.
+      nil
+    (let* ((procmails
+           ;; If procmail is used to get incoming mail, the files
+           ;; are stored in this directory.
+           (and (file-exists-p nnmail-procmail-directory)
+                (or (eq nnmail-spool-file 'procmail)
+                    nnmail-use-procmail)
+                (directory-files
+                 nnmail-procmail-directory
+                 t (concat (if group (concat "^" (regexp-quote group)) "")
+                           nnmail-procmail-suffix "$"))))
+          (p procmails)
+          (crash (when (and (file-exists-p nnmail-crash-box)
+                            (> (nnheader-file-size
+                                (file-truename nnmail-crash-box))
+                               0))
+                   (list nnmail-crash-box))))
+      ;; Remove any directories that inadvertently match the procmail
+      ;; suffix, which might happen if the suffix is "".
+      (while p
+       (when (file-directory-p (car p))
+         (setq procmails (delete (car p) procmails)))
+       (setq p (cdr p)))
+      ;; Return the list of spools.
+      (append
+       crash
+       (cond ((and group
+                  (or (eq nnmail-spool-file 'procmail)
+                      nnmail-use-procmail)
+                  procmails)
+             procmails)
+            ((and group
+                  (eq nnmail-spool-file 'procmail))
+             nil)
+            ((listp nnmail-spool-file)
+             (nconc
+              (apply
+               'nconc
+               (mapcar
+                (lambda (file)
+                  (if (and (not (string-match "^po:" file))
+                           (file-directory-p file))
+                      (nnheader-directory-regular-files file)
+                    (list file)))
+                nnmail-spool-file))
+              procmails))
+            ((stringp nnmail-spool-file)
+             (if (and (not (string-match "^po:" nnmail-spool-file))
+                      (file-directory-p nnmail-spool-file))
+                 (nconc
+                  (nnheader-directory-regular-files nnmail-spool-file)
+                  procmails)
+               (cons nnmail-spool-file procmails)))
+            ((eq nnmail-spool-file 'pop)
+             (cons (format "po:%s" (user-login-name)) procmails))
+            (t
+             procmails))))))
+
 ;; Activate a backend only if it isn't already activated.
 ;; If FORCE, re-read the active file even if the backend is
 ;; already activated.
@@ -1273,8 +1484,9 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
       (set-buffer
        (setq nnmail-cache-buffer
             (get-buffer-create " *nnmail message-id cache*")))
+      (buffer-disable-undo (current-buffer))
       (when (file-exists-p nnmail-message-id-cache-file)
-       (mm-insert-file-contents nnmail-message-id-cache-file))
+       (nnheader-insert-file-contents nnmail-message-id-cache-file))
       (set-buffer-modified-p nil)
       (current-buffer))))
 
@@ -1337,19 +1549,12 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
                    (t
                     nnmail-treat-duplicates))))
         group-art)
-    ;; We insert a line that says what the mail source is.
-    (let ((case-fold-search t))
-      (goto-char (point-min))
-      (re-search-forward "^message-id[ \t]*:" nil t)
-      (beginning-of-line)
-      (insert (format "X-Gnus-Mail-Source: %s\n" mail-source-string)))
-
     ;; Let the backend save the article (or not).
     (cond
      ((not duplication)
+      (nnmail-cache-insert message-id)
       (funcall func (setq group-art
-                         (nreverse (nnmail-article-group artnum-func))))
-      (nnmail-cache-insert message-id))
+                         (nreverse (nnmail-article-group artnum-func)))))
      ((eq action 'delete)
       (setq group-art nil))
      ((eq action 'warn)
@@ -1372,8 +1577,6 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
 
 ;;; Get new mail.
 
-(defvar nnmail-fetched-sources nil)
-
 (defun nnmail-get-value (&rest args)
   (let ((sym (intern (apply 'format args))))
     (when (boundp sym)
@@ -1382,14 +1585,9 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
 (defun nnmail-get-new-mail (method exit-func temp
                                   &optional group spool-func)
   "Read new incoming mail."
-  (let* ((sources (or mail-sources
-                     (if (listp nnmail-spool-file) nnmail-spool-file
-                       (list nnmail-spool-file))))
+  (let* ((spools (nnmail-get-spool-files group))
         (group-in group)
-        (i 0)
-        (new 0)
-        (total 0)
-        incoming incomings source)
+        nnmail-current-spool incoming incomings spool)
     (when (and (nnmail-get-value "%s-get-new-mail" method)
               nnmail-spool-file)
       ;; We first activate all the groups.
@@ -1398,68 +1596,61 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
       (run-hooks 'nnmail-pre-get-new-mail-hook)
       ;; Open the message-id cache.
       (nnmail-cache-open)
-      ;; The we go through all the existing mail source specification
-      ;; and fetch the mail from each.
-      (while (setq source (pop sources))
-       ;; Be compatible with old values.
-       (cond
-        ((stringp source)
-         (setq source
-               (cond
-                ((string-match "^po:" source)
-                 (list 'pop :user (substring source (match-end 0))))
-                ((file-directory-p source)
-                 (list 'directory :path source))
-                (t
-                 (list 'file :path source)))))
-        ((eq source 'procmail)
-         (message "Invalid value for nnmail-spool-file: `procmail'")
-         nil))
-       ;; Hack to only fetch the contents of a single group's spool file.
-       (when (and (eq (car source) 'directory)
-                  group)
-         (mail-source-bind (directory source)
-           (setq source (append source
-                                (list
-                                 :predicate
-                                 `(lambda (file)
-                                    (string-match
-                                     ,(concat
-                                       (regexp-quote (concat group suffix))
-                                       "$")
-                                     file)))))))
-       (when nnmail-fetched-sources
-         (if (member source nnmail-fetched-sources)
-             (setq source nil)
-           (push source nnmail-fetched-sources)))
-       (when source
-         (nnheader-message 4 "%s: Reading incoming mail from %s..."
-                           method (car source))
-         (when (setq new
-                     (mail-source-fetch
-                      source
-                      `(lambda (file orig-file)
-                         (nnmail-split-incoming
-                          file ',(intern (format "%s-save-mail" method))
-                          ',spool-func
-                          (nnmail-get-split-group orig-file source)
-                          ',(intern (format "%s-active-number" method))))))
-           (incf total new)
-           (incf i))))
+      ;; The we go through all the existing spool files and split the
+      ;; mail from each.
+      (while spools
+       (setq spool (pop spools))
+       ;; We read each spool file if either the spool is a POP-mail
+       ;; spool, or the file exists.  We can't check for the
+       ;; existence of POPped mail.
+       (when (or (string-match "^po:" spool)
+                 (and (file-exists-p (file-truename spool))
+                      (> (nnheader-file-size (file-truename spool)) 0)))
+         (nnheader-message 3 "%s: Reading incoming mail..." method)
+         (when (and (nnmail-move-inbox spool)
+                    (file-exists-p nnmail-crash-box))
+           (setq nnmail-current-spool spool)
+           ;; There is new mail.  We first find out if all this mail
+           ;; is supposed to go to some specific group.
+           (setq group (nnmail-get-split-group spool group-in))
+           ;; We split the mail
+           (nnmail-split-incoming
+            nnmail-crash-box (intern (format "%s-save-mail" method))
+            spool-func group (intern (format "%s-active-number" method)))
+           ;; Check whether the inbox is to be moved to the special tmp dir.
+           (setq incoming
+                 (nnmail-make-complex-temp-name
+                  (expand-file-name
+                   (if nnmail-tmp-directory
+                       (concat
+                        (file-name-as-directory nnmail-tmp-directory)
+                        (file-name-nondirectory
+                         (concat (file-name-as-directory temp) "Incoming")))
+                     (concat (file-name-as-directory temp) "Incoming")))))
+           (unless (file-exists-p (file-name-directory incoming))
+             (make-directory (file-name-directory incoming) t))
+           (rename-file nnmail-crash-box incoming t)
+           (push incoming incomings))))
       ;; If we did indeed read any incoming spools, we save all info.
-      (unless (zerop total)
+      (when incomings
        (nnmail-save-active
         (nnmail-get-value "%s-group-alist" method)
         (nnmail-get-value "%s-active-file" method))
        (when exit-func
          (funcall exit-func))
        (run-hooks 'nnmail-read-incoming-hook)
-       (nnheader-message 4 "%s: Reading incoming mail (%d new)...done" method
-                         total))
+       (nnheader-message 3 "%s: Reading incoming mail...done" method))
       ;; Close the message-id cache.
       (nnmail-cache-close)
       ;; Allow the user to hook.
-      (run-hooks 'nnmail-post-get-new-mail-hook))))
+      (run-hooks 'nnmail-post-get-new-mail-hook)
+      ;; Delete all the temporary files.
+      (while incomings
+       (setq incoming (pop incomings))
+       (and nnmail-delete-incoming
+            (file-exists-p incoming)
+            (file-writable-p incoming)
+            (delete-file incoming))))))
 
 (defun nnmail-expired-article-p (group time force &optional inhibit)
   "Say whether an article that is TIME old in GROUP should be expired."
@@ -1480,9 +1671,27 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
             ;; This is an ange-ftp group, and we don't have any dates.
             nil)
            ((numberp days)
-            (setq days (days-to-time days))
+            (setq days (nnmail-days-to-time days))
             ;; Compare the time with the current time.
-            (ignore-errors (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)
+  "Read a password using PROMPT.
+If ARGS, PROMPT is used as an argument to `format'."
+  (let ((prompt
+        (if args
+            (apply 'format prompt args)
+          prompt)))
+    (unless nnmail-read-passwd
+      (if (functionp 'read-passwd)
+         (setq nnmail-read-passwd 'read-passwd)
+       (if (load "passwd" t)
+           (setq nnmail-read-passwd 'read-passwd)
+         (unless (fboundp 'ange-ftp-read-passwd)
+           (autoload 'ange-ftp-read-passwd "ange-ftp"))
+         (setq nnmail-read-passwd 'ange-ftp-read-passwd))))
+    (funcall nnmail-read-passwd prompt)))
 
 (defun nnmail-check-syntax ()
   "Check (and modify) the syntax of the message in the current buffer."
@@ -1494,9 +1703,9 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
 
 (defun nnmail-write-region (start end filename &optional append visit lockname)
   "Do a `write-region', and then set the file modes."
-  (let ((coding-system-for-write nnmail-file-coding-system)
-       (pathname-coding-system nnmail-pathname-coding-system))
-    (write-region start end filename append visit lockname)
+  (let ((pathname-coding-system 'binary))
+    (write-region-as-coding-system
+     nnmail-file-coding-system start end filename append visit lockname)
     (set-file-modes filename nnmail-default-file-modes)))
 
 ;;;
@@ -1531,11 +1740,11 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
        (goto-char (point-min))
        (while (re-search-forward "[^ \t=]+" nil t)
          (setq name (match-string 0))
-         (if (not (eq (char-after) ?=))
+         (if (not (= (following-char) ?=))
              ;; Implied "yes".
              (setq value "yes")
            (forward-char 1)
-           (if (not (eq (char-after) ?\"))
+           (if (not (= (following-char) ?\"))
                (if (not (looking-at "[^ \t]"))
                    ;; Implied "no".
                    (setq value "no")
@@ -1592,6 +1801,15 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
              his nil)))
     found))
 
+(eval-and-compile
+  (autoload 'pop3-movemail "pop3"))
+
+(defun nnmail-pop3-movemail (inbox crashbox)
+  "Function to move mail from INBOX on a pop3 server to file CRASHBOX."
+  (let ((pop3-maildrop
+         (substring inbox (match-end (string-match "^po:" inbox)))))
+    (pop3-movemail crashbox)))
+
 (defun nnmail-within-headers-p ()
   "Check to see if point is within the headers of a unix mail message.
 Doesn't change point."
index 38f36c2..1f05d1d 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nnmbox.el --- mail mbox access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 (defvoo nnmbox-group-alist nil)
 (defvoo nnmbox-active-timestamp nil)
 
-(defvoo nnmbox-file-coding-system mm-text-coding-system)
-(defvoo nnmbox-file-coding-system-for-write nil)
-(defvoo nnmbox-active-file-coding-system mm-text-coding-system)
-(defvoo nnmbox-active-file-coding-system-for-write nil)
-
 \f
 
 ;;; Interface functions
            (nnmbox-article-group-number)))))))
 
 (deffoo nnmbox-request-group (group &optional server dont-check)
-  (nnmbox-possibly-change-newsgroup nil server)
   (let ((active (cadr (assoc group nnmbox-group-alist))))
     (cond
      ((or (null active)
                       (1+ (- (cdr active) (car active)))
                       (car active) (cdr active) group)))))
 
-(defun nnmbox-save-buffer ()
-  (let ((coding-system-for-write 
-        (or nnmbox-file-coding-system-for-write
-            nnmbox-file-coding-system)))
-        (save-buffer)))
-
-(defun nnmbox-save-active (group-alist active-file)
-  (let ((nnmail-active-file-coding-system
-        (or nnmbox-active-file-coding-system-for-write
-            nnmbox-active-file-coding-system)))
-    (nnmail-save-active group-alist active-file)))
-
 (deffoo nnmbox-request-scan (&optional group server)
   (nnmbox-possibly-change-newsgroup group server)
   (nnmbox-read-mbox)
    (lambda ()
      (save-excursion
        (set-buffer nnmbox-mbox-buffer)
-       (nnmbox-save-buffer)))
+       (save-buffer)))
    (file-name-directory nnmbox-mbox-file)
    group
    (lambda ()
         (set-buffer nnmbox-mbox-buffer)
         (goto-char (point-max))
         (insert-buffer-substring in-buf)))
-     (nnmbox-save-active nnmbox-group-alist nnmbox-active-file))))
+     (nnmail-save-active nnmbox-group-alist nnmbox-active-file))))
 
 (deffoo nnmbox-close-group (group &optional server)
   t)
   (unless (assoc group nnmbox-group-alist)
     (push (list group (cons 1 0))
          nnmbox-group-alist)
-    (nnmbox-save-active nnmbox-group-alist nnmbox-active-file))
+    (nnmail-save-active nnmbox-group-alist nnmbox-active-file))
   t)
 
 (deffoo nnmbox-request-list (&optional server)
   (save-excursion
-    (let ((nnmail-file-coding-system
-          nnmbox-active-file-coding-system))
-      (nnmail-find-file nnmbox-active-file))
+    (nnmail-find-file nnmbox-active-file)
     (setq nnmbox-group-alist (nnmail-get-active))
     t))
 
                (nnmbox-delete-mail))
            (push (car articles) rest)))
        (setq articles (cdr articles)))
-      (nnmbox-save-buffer)
+      (save-buffer)
       ;; Find the lowest active article in this group.
       (let ((active (nth 1 (assoc newsgroup nnmbox-group-alist))))
        (goto-char (point-min))
                    (<= (car active) (cdr active)))
          (setcar active (1+ (car active)))
          (goto-char (point-min))))
-      (nnmbox-save-active nnmbox-group-alist nnmbox-active-file)
+      (nnmail-save-active nnmbox-group-alist nnmbox-active-file)
       (nconc rest articles))))
 
 (deffoo nnmbox-request-move-article
      (nnmbox-request-article article group server)
      (save-excursion
        (set-buffer buf)
+       (buffer-disable-undo (current-buffer))
        (erase-buffer)
        (insert-buffer-substring nntp-server-buffer)
        (goto-char (point-min))
        (goto-char (point-min))
        (when (search-forward (nnmbox-article-string article) nil t)
         (nnmbox-delete-mail))
-       (and last (nnmbox-save-buffer))))
+       (and last (save-buffer))))
     result))
 
 (deffoo nnmbox-request-accept-article (group &optional server last)
        (when last
         (when nnmail-cache-accepted-message-ids
           (nnmail-cache-close))
-        (nnmbox-save-active nnmbox-group-alist nnmbox-active-file)
-        (nnmbox-save-buffer))))
+        (nnmail-save-active nnmbox-group-alist nnmbox-active-file)
+        (save-buffer))))
     result))
 
 (deffoo nnmbox-request-replace-article (article group buffer)
        nil
       (nnmbox-delete-mail t t)
       (insert-buffer-substring buffer)
-      (nnmbox-save-buffer)
+      (save-buffer)
       t)))
 
 (deffoo nnmbox-request-delete-group (group &optional force server)
          (setq found t)
          (nnmbox-delete-mail))
        (when found
-         (nnmbox-save-buffer)))))
+         (save-buffer)))))
   ;; Remove the group from all structures.
   (setq nnmbox-group-alist
        (delq (assoc group nnmbox-group-alist) nnmbox-group-alist)
        nnmbox-current-group nil)
   ;; Save the active file.
-  (nnmbox-save-active nnmbox-group-alist nnmbox-active-file)
+  (nnmail-save-active nnmbox-group-alist nnmbox-active-file)
   t)
 
 (deffoo nnmbox-request-rename-group (group new-name &optional server)
        (replace-match new-ident t t)
        (setq found t))
       (when found
-       (nnmbox-save-buffer))))
+       (save-buffer))))
   (let ((entry (assoc group nnmbox-group-alist)))
     (when entry
       (setcar entry new-name))
     (setq nnmbox-current-group nil)
     ;; Save the new group alist.
-    (nnmbox-save-active nnmbox-group-alist nnmbox-active-file)
+    (nnmail-save-active nnmbox-group-alist nnmbox-active-file)
     t))
 
 \f
            (not (buffer-name nnmbox-mbox-buffer)))
     (save-excursion
       (set-buffer (setq nnmbox-mbox-buffer
-                       (let ((nnheader-file-coding-system
-                              nnmbox-file-coding-system))
-                         (nnheader-find-file-noselect
-                          nnmbox-mbox-file nil t))))
-      (mm-enable-multibyte)
-      (buffer-disable-undo)))
+                       (nnheader-find-file-noselect
+                        nnmbox-mbox-file nil 'raw)))
+      (buffer-disable-undo (current-buffer))))
   (when (not nnmbox-group-alist)
     (nnmail-activate 'nnmbox))
   (if newsgroup
 
 (defun nnmbox-create-mbox ()
   (when (not (file-exists-p nnmbox-mbox-file))
-    (let ((nnmail-file-coding-system
-          nnmbox-file-coding-system-for-write))
-      (nnmail-write-region 1 1 nnmbox-mbox-file t 'nomesg))))
+    (nnmail-write-region 1 1 nnmbox-mbox-file t 'nomesg)))
 
 (defun nnmbox-read-mbox ()
   (nnmail-activate 'nnmbox)
            (alist nnmbox-group-alist)
            start end number)
        (set-buffer (setq nnmbox-mbox-buffer
-                         (let ((nnheader-file-coding-system
-                                nnmbox-file-coding-system))
-                           (nnheader-find-file-noselect
-                            nnmbox-mbox-file nil t))))
-       (mm-enable-multibyte)
-       (buffer-disable-undo)
+                         (nnheader-find-file-noselect
+                          nnmbox-mbox-file nil 'raw)))
+       (buffer-disable-undo (current-buffer))
 
        ;; Go through the group alist and compare against
        ;; the mbox file.
index c41ea70..8aafd7d 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nnmh.el --- mhspool access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
                                (expand-file-name nnmh-toplev))))
               dir)
              (nnheader-replace-chars-in-string
-              (mm-decode-coding-string (substring dir (match-end 0))
-                                       nnmail-pathname-coding-system)
+              (gnus-decode-coding-string (substring dir (match-end 0))
+                                         nnmail-pathname-coding-system)
               ?/ ?.))
            (apply 'max files)
            (apply 'min files)))))))
     (setq articles (sort articles (lambda (art1 art2)
                                    (> (car art1) (car art2)))))
     ;; Finally write this list back to the .nnmh-articles file.
-    (with-temp-file nnmh-file
+    (nnheader-temp-write nnmh-file
       (insert ";; Gnus article active file for " group "\n\n")
       (insert "(setq nnmh-newsgroup-articles '")
       (gnus-prin1 articles)
index 5429682..e7a1df9 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nnml.el --- mail spool access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
@@ -86,8 +86,6 @@ all.  This may very well take some time.")
 
 (defvar nnml-nov-buffer-file-name nil)
 
-(defvoo nnml-file-coding-system nnmail-file-coding-system)
-
 \f
 
 ;;; Interface functions.
@@ -142,7 +140,9 @@ all.  This may very well take some time.")
 (deffoo nnml-open-server (server &optional defs)
   (nnoo-change-server 'nnml server defs)
   (when (not (file-exists-p nnml-directory))
-    (ignore-errors (make-directory nnml-directory t)))
+    (condition-case ()
+       (make-directory nnml-directory t)
+      (error)))
   (cond
    ((not (file-exists-p nnml-directory))
     (nnml-close-server)
@@ -183,9 +183,7 @@ all.  This may very well take some time.")
       (nnheader-report 'nnml "No such file: %s" path))
      ((file-directory-p path)
       (nnheader-report 'nnml "File is a directory: %s" path))
-     ((not (save-excursion (let ((nnmail-file-coding-system
-                                 nnml-file-coding-system))
-                            (nnmail-find-file path))))
+     ((not (save-excursion (nnmail-find-file path)))
       (nnheader-report 'nnml "Couldn't read file: %s" path))
      (t
       (nnheader-report 'nnml "Article %s retrieved" id)
@@ -227,7 +225,6 @@ all.  This may very well take some time.")
   t)
 
 (deffoo nnml-request-create-group (group &optional server args)
-  (nnml-possibly-change-directory nil server)
   (nnmail-activate 'nnml)
   (cond
    ((assoc group nnml-group-alist)
@@ -252,8 +249,9 @@ all.  This may very well take some time.")
 (deffoo nnml-request-list (&optional server)
   (save-excursion
     (let ((nnmail-file-coding-system nnmail-active-file-coding-system)
-         (pathname-coding-system 'binary))
-      (nnmail-find-file nnml-active-file))
+         (pathname-coding-system 'binary)) ; for XEmacs/mule
+      (nnmail-find-file nnml-active-file)
+      )
     (setq nnml-group-alist (nnmail-get-active))
     t))
 
@@ -264,7 +262,8 @@ all.  This may very well take some time.")
   (save-excursion
     (nnmail-find-file nnml-newsgroups-file)))
 
-(deffoo nnml-request-expire-articles (articles group &optional server force)
+(deffoo nnml-request-expire-articles (articles group
+                                              &optional server force)
   (nnml-possibly-change-directory group server)
   (let ((active-articles
         (nnheader-directory-articles nnml-current-directory))
@@ -365,14 +364,16 @@ all.  This may very well take some time.")
     (let ((chars (nnmail-insert-lines))
          (art (concat (int-to-string article) "\t"))
          headers)
-      (when (ignore-errors
-             (nnmail-write-region
-              (point-min) (point-max)
-              (or (nnml-article-to-file article)
-                  (concat nnml-current-directory
-                          (int-to-string article)))
-              nil (if (nnheader-be-verbose 5) nil 'nomesg))
-             t)
+      (when (condition-case ()
+               (progn
+                 (nnmail-write-region
+                  (point-min) (point-max)
+                  (or (nnml-article-to-file article)
+                      (concat nnml-current-directory
+                              (int-to-string article)))
+                  nil (if (nnheader-be-verbose 5) nil 'nomesg))
+                 t)
+             (error nil))
        (setq headers (nnml-parse-head chars article))
        ;; Replace the NOV line in the NOV file.
        (save-excursion
@@ -413,7 +414,9 @@ all.  This may very well take some time.")
          (nnheader-message 5 "Deleting article %s in %s..." article group)
          (funcall nnmail-delete-file-function article))))
     ;; Try to delete the directory itself.
-    (ignore-errors (delete-directory nnml-current-directory)))
+    (condition-case ()
+       (delete-directory nnml-current-directory)
+      (error nil)))
   ;; Remove the group from all structures.
   (setq nnml-group-alist
        (delq (assoc group nnml-group-alist) nnml-group-alist)
@@ -427,9 +430,11 @@ all.  This may very well take some time.")
   (nnml-possibly-change-directory group server)
   (let ((new-dir (nnmail-group-pathname new-name nnml-directory))
        (old-dir (nnmail-group-pathname group nnml-directory)))
-    (when (ignore-errors
-           (make-directory new-dir t)
-           t)
+    (when (condition-case ()
+             (progn
+               (make-directory new-dir t)
+               t)
+           (error nil))
       ;; We move the articles file by file instead of renaming
       ;; the directory -- there may be subgroups in this group.
       ;; One might be more clever, I guess.
@@ -444,7 +449,9 @@ all.  This may very well take some time.")
        (when (file-exists-p overview)
          (rename-file overview (concat new-dir nnml-nov-file-name))))
       (when (<= (length (directory-files old-dir)) 2)
-       (ignore-errors (delete-directory old-dir)))
+       (condition-case ()
+           (delete-directory old-dir)
+         (error nil)))
       ;; That went ok, so we change the internal structures.
       (let ((entry (assoc group nnml-group-alist)))
        (when entry
@@ -462,8 +469,8 @@ all.  This may very well take some time.")
      ((not (file-exists-p file))
       (nnheader-report 'nnml "File %s does not exist" file))
      (t
-      (with-temp-file file
-       (mm-insert-file-contents file)
+      (nnheader-temp-write file
+       (nnheader-insert-file-contents file)
        (nnmail-replace-status name value))
       t))))
 
@@ -496,6 +503,7 @@ all.  This may very well take some time.")
 (defun nnml-find-group-number (id)
   (save-excursion
     (set-buffer (get-buffer-create " *nnml id*"))
+    (buffer-disable-undo (current-buffer))
     (let ((alist nnml-group-alist)
          number)
       ;; We want to look through all .overview files, but we want to
@@ -519,7 +527,7 @@ all.  This may very well take some time.")
                     nnml-nov-file-name))
        number found)
     (when (file-exists-p nov)
-      (mm-insert-file-contents nov)
+      (nnheader-insert-file-contents nov)
       (while (and (not found)
                  (search-forward id nil t)) ; We find the ID.
        ;; And the id is in the fourth field.
@@ -530,7 +538,9 @@ all.  This may very well take some time.")
          (setq found t)
          ;; We return the article number.
          (setq number
-               (ignore-errors (read (current-buffer))))))
+               (condition-case ()
+                   (read (current-buffer))
+                 (error nil)))))
       number)))
 
 (defun nnml-retrieve-headers-with-nov (articles &optional fetch-old)
@@ -541,7 +551,7 @@ all.  This may very well take some time.")
        (save-excursion
          (set-buffer nntp-server-buffer)
          (erase-buffer)
-         (mm-insert-file-contents nov)
+         (nnheader-insert-file-contents nov)
          (if (and fetch-old
                   (not (numberp fetch-old)))
              t                         ; Don't remove anything.
@@ -566,10 +576,15 @@ all.  This may very well take some time.")
       (file-exists-p nnml-current-directory))))
 
 (defun nnml-possibly-create-directory (group)
-  (let ((dir (nnmail-group-pathname group nnml-directory)))
-    (unless (file-exists-p dir)
-      (make-directory (directory-file-name dir) t)
-      (nnheader-message 5 "Creating mail directory %s" dir))))
+  (let (dir dirs)
+    (setq dir (nnmail-group-pathname group nnml-directory))
+    (while (not (file-directory-p dir))
+      (push dir dirs)
+      (setq dir (file-name-directory (directory-file-name dir))))
+    (while dirs
+      (make-directory (directory-file-name (car dirs)))
+      (nnheader-message 5 "Creating mail directory %s" (car dirs))
+      (setq dirs (cdr dirs)))))
 
 (defun nnml-save-mail (group-art)
   "Called narrowed to an article."
@@ -677,7 +692,7 @@ all.  This may very well take some time.")
                       nnml-nov-file-name))
          (erase-buffer)
          (when (file-exists-p nnml-nov-buffer-file-name)
-           (mm-insert-file-contents nnml-nov-buffer-file-name)))
+           (nnheader-insert-file-contents nnml-nov-buffer-file-name)))
        (push (cons group buffer) nnml-nov-buffer-alist)
        buffer)))
 
@@ -718,7 +733,7 @@ all.  This may very well take some time.")
     (let ((dirs (directory-files dir t nil t))
          dir)
       (while (setq dir (pop dirs))
-       (when (and (not (string-match "^\\." (file-name-nondirectory dir)))
+       (when (and (not (member (file-name-nondirectory dir) '("." "..")))
                   (file-directory-p dir))
          (nnml-generate-nov-databases-1 dir seen))))
     ;; Do this directory.
@@ -758,7 +773,7 @@ all.  This may very well take some time.")
     (save-excursion
       ;; Init the nov buffer.
       (set-buffer nov-buffer)
-      (buffer-disable-undo)
+      (buffer-disable-undo (current-buffer))
       (erase-buffer)
       (set-buffer nntp-server-buffer)
       ;; Delete the old NOV file.
@@ -767,7 +782,7 @@ all.  This may very well take some time.")
       (while files
        (unless (file-directory-p (setq file (concat dir (cdar files))))
          (erase-buffer)
-         (mm-insert-file-contents file)
+         (nnheader-insert-file-contents file)
          (narrow-to-region
           (goto-char (point-min))
           (progn
index 21b17c3..9c27786 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nnoo.el --- OO Gnus Backends
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
                        (cdr (assq pbackend (nnoo-parents backend))))
     (prog1
        (apply function args)
-      ;; Copy the changed variables back into the child.
-      (let ((vars (cdr (assq pbackend (nnoo-parents backend)))))
-       (while vars
-         (set (cadar vars) (symbol-value (caar vars)))
-         (setq vars (cdr vars)))))))
+    ;; Copy the changed variables back into the child.
+    (let ((vars (cdr (assq pbackend (nnoo-parents backend)))))
+      (while vars
+       (set (cadar vars) (symbol-value (caar vars)))
+       (setq vars (cdr vars)))))))
 
 (defun nnoo-execute (backend function &rest args)
   "Execute FUNCTION on behalf of BACKEND."
index 22c22da..e764150 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nnsoup.el --- SOUP access for Gnus
-;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 (defvoo nnsoup-directory "~/SOUP/"
   "*SOUP packet directory.")
 
-(defvoo nnsoup-tmp-directory
-    (cond ((fboundp 'temp-directory) (temp-directory))
-         ((boundp 'temporary-file-directory) temporary-file-directory)
-         ("/tmp/"))
+(defvoo nnsoup-tmp-directory "/tmp/"
   "*Where nnsoup will store temporary files.")
 
 (defvoo nnsoup-replies-directory (concat nnsoup-directory "replies/")
@@ -73,8 +70,8 @@ The SOUP packet file name will be inserted at the %s.")
   "*Regular expression matching SOUP packets in `nnsoup-packet-directory'.")
 
 (defvoo nnsoup-always-save t
-  "If non nil commit the reply buffer on each message send.
-This is necessary if using message mode outside Gnus with nnsoup as a
+  "If non nil commit the reply buffer on each message send. 
+This is necessary if using message mode outside Gnus with nnsoup as a 
 backend for the messages.")
 
 \f
@@ -379,7 +376,7 @@ backend for the messages.")
             (or force
                 nnsoup-group-alist-touched))
     (setq nnsoup-group-alist-touched nil)
-    (with-temp-file nnsoup-active-file
+    (nnheader-temp-write nnsoup-active-file
       (gnus-prin1 `(setq nnsoup-group-alist ',nnsoup-group-alist))
       (insert "\n")
       (gnus-prin1 `(setq nnsoup-current-prefix ,nnsoup-current-prefix))
@@ -533,9 +530,9 @@ backend for the messages.")
        (when (file-exists-p (concat nnsoup-directory file))
          (save-excursion               ; Load the file.
            (set-buffer (get-buffer-create buffer-name))
-           (buffer-disable-undo)
+           (buffer-disable-undo (current-buffer))
            (push (cons nnsoup-current-group (current-buffer)) nnsoup-buffers)
-           (mm-insert-file-contents (concat nnsoup-directory file))
+           (nnheader-insert-file-contents (concat nnsoup-directory file))
            (current-buffer))))))
 
 (defun nnsoup-file (prefix &optional message)
@@ -669,6 +666,8 @@ backend for the messages.")
   (require 'mail-utils)
   (let ((tembuf (generate-new-buffer " message temp"))
        (case-fold-search nil)
+       (real-header-separator mail-header-separator)
+       (mail-header-separator "")
        delimline
        (mailbuf (current-buffer)))
     (unwind-protect
@@ -694,11 +693,15 @@ backend for the messages.")
            ;; Change header-delimiter to be what sendmail expects.
            (goto-char (point-min))
            (re-search-forward
-            (concat "^" (regexp-quote mail-header-separator) "\n"))
+            (concat "^" (regexp-quote real-header-separator) "\n"))
            (replace-match "\n")
            (backward-char 1)
            (setq delimline (point-marker))
+           ;; Insert an extra newline if we need it to work around
+           ;; Sun's bug that swallows newlines.
            (goto-char (1+ delimline))
+           (when (eval message-mailer-swallows-blank-line)
+             (newline))
            (let ((msg-buf
                   (gnus-soup-store
                    nnsoup-replies-directory
@@ -749,10 +752,11 @@ backend for the messages.")
                                 (string-to-int (match-string 1 f2)))))))
        active group lines ident elem min)
     (set-buffer (get-buffer-create " *nnsoup work*"))
+    (buffer-disable-undo (current-buffer))
     (while files
       (nnheader-message 5 "Doing %s..." (car files))
       (erase-buffer)
-      (mm-insert-file-contents (car files))
+      (nnheader-insert-file-contents (car files))
       (goto-char (point-min))
       (if (not (re-search-forward "^[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t[^\t]*\t *\\(Xref: \\)? *[^ ]* \\([^ ]+\\):[0-9]" nil t))
          (setq group "unknown")
index 2f5ee8c..6914f78 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nnspool.el --- spool access for GNU Emacs
-;; Copyright (C) 198,998,89,90,93,94,95,96,97,98 Free Software Foundation, Inc.
+;; Copyright (C) 1988,89,90,93,94,95,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -28,6 +28,7 @@
 
 (require 'nnheader)
 (require 'nntp)
+(require 'timezone)
 (require 'nnoo)
 (eval-when-compile (require 'cl))
 
@@ -136,14 +137,9 @@ there.")
              (setq beg (point))
              (inline (nnheader-insert-head file))
              (goto-char beg)
-             (if (search-forward "\n\n" nil t)
-                 (progn
-                   (forward-char -1)
-                   (insert ".\n"))
-               (goto-char (point-max))
-               (if (bolp)
-                   (insert ".\n")
-                 (insert "\n.\n")))
+             (search-forward "\n\n" nil t)
+             (forward-char -1)
+             (insert ".\n")
              (delete-region (point) (point-max)))
 
            (and do-message
@@ -284,7 +280,7 @@ there.")
        (while (and (not (looking-at
                          "\\([^ ]+\\) +\\([0-9]+\\)[0-9][0-9][0-9] "))
                    (zerop (forward-line -1))))
-       (let ((seconds (time-to-seconds (date-to-time date)))
+       (let ((seconds (nnspool-seconds-since-epoch date))
              groups)
          ;; Go through lines and add the latest groups to a list.
          (while (and (looking-at "\\([^ ]+\\) +[0-9]+ ")
@@ -366,7 +362,7 @@ there.")
          (erase-buffer)
          (if nnspool-sift-nov-with-sed
              (nnspool-sift-nov-with-sed articles nov)
-           (mm-insert-file-contents nov)
+           (nnheader-insert-file-contents nov)
            (if (and fetch-old
                     (not (numberp fetch-old)))
                t                       ; We want all the headers.
@@ -424,6 +420,7 @@ there.")
 (defun nnspool-find-id (id)
   (save-excursion
     (set-buffer (get-buffer-create " *nnspool work*"))
+    (buffer-disable-undo (current-buffer))
     (erase-buffer)
     (ignore-errors
       (call-process "grep" nil t nil (regexp-quote id) nnspool-history-file))
@@ -439,7 +436,7 @@ there.")
   (erase-buffer)
   (condition-case ()
       (let ((nnheader-file-coding-system nnspool-file-coding-system))
-       (mm-insert-file-contents file)
+       (nnheader-insert-file-contents file)
        t)
     (file-error nil)))
 
@@ -456,6 +453,18 @@ there.")
   "Find the path for GROUP."
   (nnheader-group-pathname group nnspool-spool-directory article))
 
+(defun nnspool-seconds-since-epoch (date)
+  (let* ((tdate (mapcar (lambda (ti) (and ti (string-to-int ti)))
+                       (timezone-parse-date date)))
+        (ttime (mapcar (lambda (ti) (and ti (string-to-int ti)))
+                       (timezone-parse-time
+                        (aref (timezone-parse-date date) 3))))
+        (unix (encode-time (nth 2 ttime) (nth 1 ttime) (nth 0 ttime)
+                           (nth 2 tdate) (nth 1 tdate) (nth 0 tdate)
+                           (nth 4 tdate))))
+    (+ (* (car unix) 65536.0)
+       (cadr unix))))
+
 (provide 'nnspool)
 
 ;;; nnspool.el ends here
index 8b778d8..d7665b5 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nntp.el --- nntp access for Gnus
-;;; Copyright (C) 1987-90,92-99 Free Software Foundation, Inc.
+;;; Copyright (C) 1987-90,92-97 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -85,8 +85,7 @@ case, this list will be used as the parameter list given to rsh.")
 (defvoo nntp-rlogin-user-name nil
   "*User name on remote system when using the rlogin connect method.")
 
-(defvoo nntp-telnet-parameters
-    '("exec" "telnet" "-8" "${NNTPSERVER:=news}" "nntp")
+(defvoo nntp-telnet-parameters '("exec" "telnet" "-8" "${NNTPSERVER:=news}" "nntp")
   "*Parameters to `nntp-open-telnet'.
 That function may be used as `nntp-open-connection-function'.  In that
 case, this list will be executed as a command after logging in
@@ -151,12 +150,6 @@ server there that you can connect to.  See also
 (defvoo nntp-warn-about-losing-connection t
   "*If non-nil, beep when a server closes connection.")
 
-(defvoo nntp-coding-system-for-read 'binary
-  "*Coding system to read from NNTP.")
-
-(defvoo nntp-coding-system-for-write 'binary
-  "*Coding system to write to NNTP.")
-
 (defcustom nntp-authinfo-file "~/.authinfo"
   ".netrc-like file that holds nntp authinfo passwords."
   :type
@@ -210,18 +203,8 @@ If this variable is nil, which is the default, no timers are set.")
 (defvoo nntp-server-xover 'try)
 (defvoo nntp-server-list-active-group 'try)
 
-(defvar nntp-async-needs-kluge
-  (string-match "^GNU Emacs 20\\.3\\." (emacs-version))
-  "*When non-nil, nntp will poll asynchronous connections
-once a second.  By default, this is turned on only for Emacs
-20.3, which has a bug that breaks nntp's normal method of
-noticing asynchronous data.")
-
-(defvar nntp-async-timer nil)
-(defvar nntp-async-process-list nil)
-
 (eval-and-compile
-  (autoload 'mail-source-read-passwd "mail-source")
+  (autoload 'nnmail-read-passwd "nnmail")
   (autoload 'open-ssl-stream "ssl"))
 
 \f
@@ -281,9 +264,9 @@ noticing asynchronous data.")
          (nntp-decode-text (not decode))
          (unless discard
            (save-excursion
-             (set-buffer buffer)
-             (goto-char (point-max))
-             (insert-buffer-substring (process-buffer process))
+             (set-buffer buffer)
+             (goto-char (point-max))
+             (insert-buffer-substring (process-buffer process))
              ;; Nix out "nntp reading...." message.
              (when nntp-have-messaged
                (setq nntp-have-messaged nil)
@@ -336,7 +319,17 @@ noticing asynchronous data.")
        ((eq callback 'ignore)
        t)
        ((and callback wait-for)
-       (nntp-async-wait process wait-for buffer decode callback)
+       (save-excursion
+         (set-buffer (process-buffer process))
+         (unless nntp-inside-change-function
+           (erase-buffer))
+         (setq nntp-process-decode decode
+               nntp-process-to-buffer buffer
+               nntp-process-wait-for wait-for
+               nntp-process-callback callback
+               nntp-process-start-point (point-max)
+               after-change-functions
+               (list 'nntp-after-change-function-callback)))
        t)
        (wait-for
        (nntp-wait-for process wait-for buffer decode))
@@ -397,7 +390,7 @@ noticing asynchronous data.")
   (cond
    ;; A result that starts with a 2xx code is terminated by
    ;; a line with only a "." on it.
-   ((eq (char-after) ?2)
+   ((eq (following-char) ?2)
     (if (re-search-forward "\n\\.\r?\n" nil t)
        t
       nil))
@@ -476,65 +469,64 @@ noticing asynchronous data.")
 (deffoo nntp-retrieve-groups (groups &optional server)
   "Retrieve group info on GROUPS."
   (nntp-possibly-change-group nil server)
-  (when (nntp-find-connection-buffer nntp-server-buffer)
-    (save-excursion
-      (set-buffer (nntp-find-connection-buffer nntp-server-buffer))
-      ;; The first time this is run, this variable is `try'.  So we
-      ;; try.
-      (when (eq nntp-server-list-active-group 'try)
-       (nntp-try-list-active (car groups)))
-      (erase-buffer)
-      (let ((count 0)
-           (received 0)
-           (last-point (point-min))
-           (nntp-inhibit-erase t)
-           (command (if nntp-server-list-active-group "LIST ACTIVE" "GROUP")))
-       (while groups
-         ;; Send the command to the server.
-         (nntp-send-command nil command (pop groups))
-         (incf count)
-         ;; Every 400 requests we have to read the stream in
-         ;; order to avoid deadlocks.
-         (when (or (null groups)       ;All requests have been sent.
-                   (zerop (% count nntp-maximum-request)))
-           (nntp-accept-response)
-           (while (progn
-                    (goto-char last-point)
-                    ;; Count replies.
-                    (while (re-search-forward "^[0-9]" nil t)
-                      (incf received))
-                    (setq last-point (point))
-                    (< received count))
-             (nntp-accept-response))))
-
-       ;; Wait for the reply from the final command.
-       (goto-char (point-max))
-       (re-search-backward "^[0-9]" nil t)
-       (when (looking-at "^[23]")
+  (save-excursion
+    (set-buffer (nntp-find-connection-buffer nntp-server-buffer))
+    ;; The first time this is run, this variable is `try'.  So we
+    ;; try.
+    (when (eq nntp-server-list-active-group 'try)
+      (nntp-try-list-active (car groups)))
+    (erase-buffer)
+    (let ((count 0)
+         (received 0)
+         (last-point (point-min))
+         (nntp-inhibit-erase t)
+         (command (if nntp-server-list-active-group "LIST ACTIVE" "GROUP")))
+      (while groups
+       ;; Send the command to the server.
+       (nntp-send-command nil command (pop groups))
+       (incf count)
+       ;; Every 400 requests we have to read the stream in
+       ;; order to avoid deadlocks.
+       (when (or (null groups)         ;All requests have been sent.
+                 (zerop (% count nntp-maximum-request)))
+         (nntp-accept-response)
          (while (progn
-                  (goto-char (point-max))
-                  (if (not nntp-server-list-active-group)
-                      (not (re-search-backward "\r?\n" (- (point) 3) t))
-                    (not (re-search-backward "^\\.\r?\n" (- (point) 4) t))))
-           (nntp-accept-response)))
+                  (goto-char last-point)
+                  ;; Count replies.
+                  (while (re-search-forward "^[0-9]" nil t)
+                    (incf received))
+                  (setq last-point (point))
+                  (< received count))
+           (nntp-accept-response))))
+
+      ;; Wait for the reply from the final command.
+      (goto-char (point-max))
+      (re-search-backward "^[0-9]" nil t)
+      (when (looking-at "^[23]")
+       (while (progn
+                (goto-char (point-max))
+                (if (not nntp-server-list-active-group)
+                    (not (re-search-backward "\r?\n" (- (point) 3) t))
+                  (not (re-search-backward "^\\.\r?\n" (- (point) 4) t))))
+         (nntp-accept-response)))
+
+      ;; Now all replies are received.  We remove CRs.
+      (goto-char (point-min))
+      (while (search-forward "\r" nil t)
+       (replace-match "" t t))
 
-       ;; Now all replies are received.  We remove CRs.
+      (if (not nntp-server-list-active-group)
+         (progn
+           (copy-to-buffer nntp-server-buffer (point-min) (point-max))
+           'group)
+       ;; We have read active entries, so we just delete the
+       ;; superfluous gunk.
        (goto-char (point-min))
-       (while (search-forward "\r" nil t)
-         (replace-match "" t t))
-
-       (if (not nntp-server-list-active-group)
-           (progn
-             (copy-to-buffer nntp-server-buffer (point-min) (point-max))
-             'group)
-         ;; We have read active entries, so we just delete the
-         ;; superfluous gunk.
-         (goto-char (point-min))
-         (while (re-search-forward "^[.2-5]" nil t)
-           (delete-region (match-beginning 0)
-                          (progn (forward-line 1) (point))))
-         (copy-to-buffer nntp-server-buffer (point-min) (point-max))
-         'active)))))
+       (while (re-search-forward "^[.2-5]" nil t)
+         (delete-region (match-beginning 0)
+                        (progn (forward-line 1) (point))))
+       (copy-to-buffer nntp-server-buffer (point-min) (point-max))
+       'active))))
 
 (deffoo nntp-retrieve-articles (articles &optional group server)
   (nntp-possibly-change-group group server)
@@ -585,7 +577,7 @@ noticing asynchronous data.")
       (and (numberp nntp-large-newsgroup)
           (> number nntp-large-newsgroup)
           (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.
       (set-buffer nntp-server-buffer)
@@ -616,14 +608,9 @@ noticing asynchronous data.")
           (setq nntp-server-list-active-group t)))))
 
 (deffoo nntp-list-active-group (group &optional server)
-  "Return the active info on GROUP (which can be a regexp)."
-  (nntp-possibly-change-group nil server)
-  (nntp-send-command "^\\.*\r?\n" "LIST ACTIVE" group))
-
-(deffoo nntp-request-group-articles (group &optional server)
-  "Return the list of existing articles in GROUP."
+  "Return the active info on GROUP (which can be a regexp."
   (nntp-possibly-change-group nil server)
-  (nntp-send-command "^\\.*\r?\n" "LISTGROUP" group))
+  (nntp-send-command "^.*\r?\n" "LIST ACTIVE" group))
 
 (deffoo nntp-request-article (article &optional group server buffer command)
   (nntp-possibly-change-group group server)
@@ -694,7 +681,7 @@ noticing asynchronous data.")
            ;; 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.
+           ;; the process.  
            (sleep-for 1))))
       (when (buffer-name (process-buffer process))
        (kill-buffer (process-buffer process)))
@@ -711,7 +698,7 @@ noticing asynchronous data.")
            ;; 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.
+           ;; the process.  
            (sleep-for 1))))
       (when (buffer-name (process-buffer process))
        (kill-buffer (process-buffer process))))))
@@ -731,7 +718,7 @@ noticing asynchronous data.")
     (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)
@@ -752,7 +739,7 @@ noticing asynchronous data.")
 This function is supposed to be called from `nntp-server-opened-hook'.
 It will make innd servers spawn an nnrpd process to allow actual article
 reading."
-  (nntp-send-command "^.*\n" "MODE READER"))
+  (nntp-send-command "^.*\r?\n" "MODE READER"))
 
 (defun nntp-send-authinfo (&optional send-if-force)
   "Send the AUTHINFO to the nntp server.
@@ -780,7 +767,7 @@ If SEND-IF-FORCE, only send authinfo to the server if the
        (or passwd
           nntp-authinfo-password
           (setq nntp-authinfo-password
-                    (mail-source-read-passwd (format "NNTP (%s@%s) password: "
+                    (nnmail-read-passwd (format "NNTP (%s@%s) password: "
                                                 user nntp-address))))))))))
 
 (defun nntp-send-nosy-authinfo ()
@@ -790,7 +777,7 @@ If SEND-IF-FORCE, only send authinfo to the server if the
       (nntp-send-command "^3.*\r?\n" "AUTHINFO USER" user)
       (when t                          ;???Should check if AUTHINFO succeeded
        (nntp-send-command "^2.*\r?\n" "AUTHINFO PASS"
-                          (mail-source-read-passwd "NNTP (%s@%s) password: "
+                          (nnmail-read-passwd "NNTP (%s@%s) password: "
                                               user nntp-address))))))
 
 (defun nntp-send-authinfo-from-file ()
@@ -799,7 +786,7 @@ If SEND-IF-FORCE, only send authinfo to the server if the
 The authinfo login name is taken from the user's login name and the
 password contained in '~/.nntp-authinfo'."
   (when (file-exists-p "~/.nntp-authinfo")
-    (with-temp-buffer
+    (nnheader-temp-write nil
       (insert-file-contents "~/.nntp-authinfo")
       (goto-char (point-min))
       (nntp-send-command "^3.*\r?\n" "AUTHINFO USER" (user-login-name))
@@ -828,7 +815,7 @@ password contained in '~/.nntp-authinfo'."
       (format " *server %s %s %s*"
              nntp-address nntp-port-number
              (gnus-buffer-exists-p buffer))))
-    (mm-enable-multibyte)
+    (buffer-disable-undo (current-buffer))
     (set (make-local-variable 'after-change-functions) nil)
     (set (make-local-variable 'nntp-process-wait-for) nil)
     (set (make-local-variable 'nntp-process-callback) nil)
@@ -841,8 +828,8 @@ password contained in '~/.nntp-authinfo'."
   "Open a connection to PORT on ADDRESS delivering output to BUFFER."
   (run-hooks 'nntp-prepare-server-hook)
   (let* ((pbuffer (nntp-make-process-buffer buffer))
-        (timer
-         (and nntp-connection-timeout
+        (timer 
+         (and nntp-connection-timeout 
               (nnheader-run-at-time
                nntp-connection-timeout nil
                `(lambda ()
@@ -850,12 +837,10 @@ password contained in '~/.nntp-authinfo'."
                     (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))
-               (funcall nntp-open-connection-function pbuffer))
+             (funcall nntp-open-connection-function pbuffer)
            (error nil)
            (quit nil))))
-    (when timer
+    (when timer 
       (nnheader-cancel-timer timer))
     (when (and (buffer-name pbuffer)
               process)
@@ -878,7 +863,8 @@ password contained in '~/.nntp-authinfo'."
        nil))))
 
 (defun nntp-open-network-stream (buffer)
-  (open-network-stream "nntpd" buffer nntp-address nntp-port-number))
+  (open-network-stream-as-binary
+   "nntpd" buffer nntp-address nntp-port-number))
 
 (defun nntp-open-ssl-stream (buffer)
   (let* ((ssl-program-arguments '("-connect" (concat host ":" service)))
@@ -906,97 +892,40 @@ password contained in '~/.nntp-authinfo'."
            (eval (cadr entry))
          (funcall (cadr entry)))))))
 
-(defun nntp-async-wait (process wait-for buffer decode callback)
-  (save-excursion
-    (set-buffer (process-buffer process))
-    (unless nntp-inside-change-function
-      (erase-buffer))
-    (setq nntp-process-wait-for wait-for
-         nntp-process-to-buffer buffer
-         nntp-process-decode decode
-         nntp-process-callback callback
-         nntp-process-start-point (point-max))
-    (setq after-change-functions '(nntp-after-change-function))
-    (if nntp-async-needs-kluge
-       (nntp-async-kluge process))))
-
-(defun nntp-async-kluge (process)
-  ;; emacs 20.3 bug: process output with encoding 'binary
-  ;; doesn't trigger after-change-functions.
-  (unless nntp-async-timer
-    (setq nntp-async-timer
-         (nnheader-run-at-time 1 1 'nntp-async-timer-handler)))
-  (add-to-list 'nntp-async-process-list process))
-
-(defun nntp-async-timer-handler ()
-  (mapcar
-   (lambda (proc)
-     (if (memq (process-status proc) '(open run))
-        (nntp-async-trigger proc)
-       (nntp-async-stop proc)))
-   nntp-async-process-list))
-
-(defun nntp-async-stop (proc)
-  (setq nntp-async-process-list (delq proc nntp-async-process-list))
-  (when (and nntp-async-timer (not nntp-async-process-list))
-    (nnheader-cancel-timer nntp-async-timer)
-    (setq nntp-async-timer nil)))
-
-(defun nntp-after-change-function (beg end len)
-  (unwind-protect
-      ;; we only care about insertions at eob
-      (when (and (eq 0 len) (eq (point-max) end))
-       (save-match-data
-         (let ((proc (get-buffer-process (current-buffer))))
-           (when proc
-             (nntp-async-trigger proc)))))
-    ;; any throw from after-change-functions will leave it
-    ;; set to nil.  so we reset it here, if necessary.
-    (when quit-flag
-      (setq after-change-functions '(nntp-after-change-function)))))
-
-(defun nntp-async-trigger (process)
-  (save-excursion
-    (set-buffer (process-buffer process))
-    (when nntp-process-callback
-      ;; do we have an error message?
-      (goto-char nntp-process-start-point)
-      (if (memq (following-char) '(?4 ?5))
-         ;; wants credentials?
-         (if (looking-at "480")
-             (nntp-handle-authinfo nntp-process-to-buffer)
-           ;; report error message.
-           (nntp-snarf-error-message)
-           (nntp-do-callback nil))
-
-       ;; got what we expect?
-       (goto-char (point-max))
-       (when (re-search-backward
-              nntp-process-wait-for nntp-process-start-point t)
-         (nntp-async-stop process)
-         ;; convert it.
+(defun nntp-after-change-function-callback (beg end len)
+  (when nntp-process-callback
+    (save-match-data
+      (if (and (= beg (point-min))
+              (memq (char-after beg) '(?4 ?5)))
+         ;; Report back error messages.
+         (save-excursion
+           (goto-char beg)
+           (if (looking-at "480")
+               (nntp-handle-authinfo nntp-process-to-buffer)
+             (nntp-snarf-error-message)
+             (funcall nntp-process-callback nil)))
+       (goto-char end)
+       (when (and (> (point) nntp-process-start-point)
+                  (re-search-backward nntp-process-wait-for
+                                      nntp-process-start-point t))
          (when (gnus-buffer-exists-p nntp-process-to-buffer)
-           (let ((buf (current-buffer))
-                 (start nntp-process-start-point)
-                 (decode nntp-process-decode))
+           (let ((cur (current-buffer))
+                 (start nntp-process-start-point))
              (save-excursion
                (set-buffer nntp-process-to-buffer)
                (goto-char (point-max))
-               (save-restriction
-                 (narrow-to-region (point) (point))
-                 (insert-buffer-substring buf start)
-                 (when decode
-                   (nntp-decode-text))))))
-         ;; report it.
-         (goto-char (point-max))
-         (nntp-do-callback
-          (buffer-name (get-buffer nntp-process-to-buffer))))))))
-
-(defun nntp-do-callback (arg)
-  (let ((callback nntp-process-callback)
-       (nntp-inside-change-function t))
-    (setq nntp-process-callback nil)
-    (funcall callback arg)))
+               (let ((b (point)))
+                 (insert-buffer-substring cur start)
+                 (narrow-to-region b (point-max))
+                 (nntp-decode-text)
+                 (widen)))))
+         (goto-char end)
+         (let ((callback nntp-process-callback)
+               (nntp-inside-change-function t))
+           (setq nntp-process-callback nil)
+           (save-excursion
+             (funcall callback (buffer-name
+                                (get-buffer nntp-process-to-buffer))))))))))
 
 (defun nntp-snarf-error-message ()
   "Save the error message in the current buffer."
@@ -1006,7 +935,7 @@ password contained in '~/.nntp-authinfo'."
     (nnheader-report 'nntp message)
     message))
 
-(defun nntp-accept-process-output (process &optional timeout)
+(defun nntp-accept-process-output (process)
   "Wait for output from PROCESS and message some dots."
   (save-excursion
     (set-buffer (or (nntp-find-connection-buffer nntp-server-buffer)
@@ -1016,7 +945,7 @@ password contained in '~/.nntp-authinfo'."
       (unless (< len 10)
        (setq nntp-have-messaged t)
        (nnheader-message 7 "nntp read: %dk" len)))
-    (accept-process-output process (or timeout 1))))
+    (accept-process-output process 1)))
 
 (defun nntp-accept-response ()
   "Wait for output from the process that outputs to BUFFER."
@@ -1038,7 +967,10 @@ password contained in '~/.nntp-authinfo'."
        (save-excursion
          (set-buffer (process-buffer (car entry)))
          (erase-buffer)
-         (nntp-send-command "^[245].*\n" "GROUP" group)
+         (nntp-send-string (car entry) (concat "GROUP " group))
+         ;; allow for unexpected responses, since this can be called
+         ;; from a timer with quit inhibited
+         (nntp-wait-for-string "^[245].*\n")
          (setcar (cddr entry) group)
          (erase-buffer))))))
 
@@ -1174,6 +1106,7 @@ password contained in '~/.nntp-authinfo'."
          (delete-char -1))
        (goto-char (point-min))
        (delete-matching-lines "^\\.$\\|^[1-5][0-9][0-9] ")
+       ;;(copy-to-buffer nntp-server-buffer (point-min) (point-max))
        t))))
 
   nntp-server-xover)
@@ -1230,9 +1163,10 @@ password contained in '~/.nntp-authinfo'."
   (save-excursion
     (set-buffer buffer)
     (erase-buffer)
-    (let ((proc (apply
-                'start-process
-                "nntpd" buffer nntp-telnet-command nntp-telnet-switches))
+    (let ((proc (as-binary-process
+                (apply
+                 'start-process
+                 "nntpd" buffer nntp-telnet-command nntp-telnet-switches)))
          (case-fold-search t))
       (when (memq (process-status proc) '(open run))
        (process-send-string proc "set escape \^X\n")
@@ -1255,7 +1189,7 @@ password contained in '~/.nntp-authinfo'."
         proc (concat
               (or nntp-telnet-passwd
                   (setq nntp-telnet-passwd
-                        (mail-source-read-passwd "Password: ")))
+                        (nnmail-read-passwd "Password: ")))
               "\n"))
        (erase-buffer)
        (nntp-wait-for-string nntp-telnet-shell-prompt)
@@ -1277,13 +1211,15 @@ password contained in '~/.nntp-authinfo'."
 (defun nntp-open-rlogin (buffer)
   "Open a connection to SERVER using rsh."
   (let ((proc (if nntp-rlogin-user-name
-                 (apply 'start-process
-                        "nntpd" buffer nntp-rlogin-program
-                        nntp-address "-l" nntp-rlogin-user-name
-                        nntp-rlogin-parameters)
-               (apply 'start-process
-                      "nntpd" buffer nntp-rlogin-program nntp-address
-                      nntp-rlogin-parameters))))
+                 (as-binary-process
+                  (apply 'start-process
+                         "nntpd" buffer nntp-rlogin-program
+                         nntp-address "-l" nntp-rlogin-user-name
+                         nntp-rlogin-parameters))
+               (as-binary-process
+                (apply 'start-process
+                       "nntpd" buffer nntp-rlogin-program nntp-address
+                       nntp-rlogin-parameters)))))
     (save-excursion
       (set-buffer buffer)
       (nntp-wait-for-string "^\r*20[01]")
index 19fa59f..4829341 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nnvirtual.el --- virtual newsgroups access for Gnus
-;; Copyright (C) 1994,95,96,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1994,95,96,97,98 Free Software Foundation, Inc.
 
 ;; Author: David Moore <dmoore@ucsd.edu>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -219,9 +219,7 @@ to virtual article number.")
          (if buffer
              (save-excursion
                (set-buffer buffer)
-               ;; We bind this here to avoid double decoding.
-               (let ((gnus-article-decode-hook nil))
-                 (gnus-request-article-this-buffer (cdr amap) cgroup)))
+               (gnus-request-article-this-buffer (cdr amap) cgroup))
            (gnus-request-article (cdr amap) cgroup))))))))
 
 
@@ -289,7 +287,6 @@ to virtual article number.")
         ;; The component group might be a virtual group.
         (nmark (gnus-request-update-mark cgroup (cdr nart) mark)))
     (when (and nart
-              (memq mark gnus-auto-expirable-marks)
               (= mark nmark)
               (gnus-group-auto-expirable-p cgroup))
       (setq mark gnus-expirable-mark)))
@@ -362,15 +359,6 @@ to virtual article number.")
                       (cdr gnus-message-group-art)))))
       (gnus-request-post (gnus-find-method-for-group group)))))
 
-
-(deffoo nnvirtual-request-expire-articles (articles group 
-                                                   &optional server force)
-  (nnvirtual-possibly-change-server server)
-  (setq nnvirtual-component-groups
-       (delete (nnvirtual-current-group) nnvirtual-component-groups))
-  (dolist (group nnvirtual-component-groups)
-    (gnus-group-expire-articles-1 group)))
-
 \f
 ;;; Internal functions.
 
@@ -397,7 +385,7 @@ to virtual article number.")
     (insert "\t"))
 
   ;; Remove any spaces at the beginning of the Xref field.
-  (while (eq (char-after (1- (point))) ? )
+  (while (= (char-after (1- (point))) ? )
     (forward-char -1)
     (delete-char 1))
 
@@ -429,7 +417,7 @@ to virtual article number.")
 
   ;; Ensure a trailing \t.
   (end-of-line)
-  (or (eq (char-after (1- (point))) ?\t)
+  (or (= (char-after (1- (point))) ?\t)
       (insert ?\t)))
 
 
@@ -448,24 +436,19 @@ If UPDATE-P is not nil, call gnus-group-update-group on the components."
                        (nnvirtual-partition-sequence
                         (gnus-list-of-unread-articles
                          (nnvirtual-current-group)))))
-         (type-marks
-          (delq nil
-                (mapcar (lambda (ml)
-                          (if (eq (car ml) 'score)
-                              nil
-                            (cons (car ml)
-                                  (nnvirtual-partition-sequence (cdr ml)))))
-                        (gnus-info-marks (gnus-get-info
-                                          (nnvirtual-current-group))))))
+         (type-marks (mapcar (lambda (ml)
+                               (cons (car ml)
+                                     (nnvirtual-partition-sequence (cdr ml))))
+                             (gnus-info-marks (gnus-get-info
+                                               (nnvirtual-current-group)))))
          mark type groups carticles info entry)
 
       ;; Ok, atomically move all of the (un)read info, clear any old
       ;; marks, and move all of the current marks.  This way if someone
       ;; hits C-g, you won't leave the component groups in a half-way state.
-      (progn
+      (gnus-atomic-progn
        ;; move (un)read
-       ;; bind for workaround guns-update-read-articles
-       (let ((gnus-newsgroup-active nil))
+       (let ((gnus-newsgroup-active nil)) ;workaround guns-update-read-articles
          (while (setq entry (pop unreads))
            (gnus-update-read-articles (car entry) (cdr entry))))
 
@@ -474,11 +457,7 @@ If UPDATE-P is not nil, call gnus-group-update-group on the components."
        (while groups
          (when (and (setq info (gnus-get-info (pop groups)))
                     (gnus-info-marks info))
-           (gnus-info-set-marks
-            info
-            (if (assq 'score (gnus-info-marks info))
-                (list (assq 'score (gnus-info-marks info)))
-              nil))))
+           (gnus-info-set-marks info nil)))
 
        ;; Ok, currently type-marks is an assq list with keys of a mark type,
        ;; with data of an assq list with keys of component group names
index 843e220..5a673cd 100644 (file)
@@ -1,5 +1,5 @@
 ;;; nnweb.el --- retrieving articles via web search engines
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
 (require 'message)
 (require 'gnus-util)
 (require 'gnus)
+(require 'w3)
+(require 'url)
 (require 'nnmail)
-(require 'mm-util)
-(eval-when-compile
-  (ignore-errors
-    (require 'w3)
-    (require 'url)
-    (require 'w3-forms)))
-;; Report failure to find w3 at load time if appropriate.
-(eval '(progn
-        (require 'w3)
-        (require 'url)
-        (require 'w3-forms)))
+(ignore-errors
+  (require 'w3-forms))
 
 (nnoo-declare nnweb)
 
@@ -215,8 +208,7 @@ and `altavista'.")
 
 (deffoo nnweb-request-delete-group (group &optional force server)
   (nnweb-possibly-change-server group server)
-  (gnus-pull group nnweb-group-alist t)
-  (nnweb-write-active)
+  (gnus-pull group nnweb-group-alist)
   (gnus-delete-file (nnweb-overview-file group))
   t)
 
@@ -227,8 +219,8 @@ and `altavista'.")
 (defun nnweb-read-overview (group)
   "Read the overview of GROUP and build the map."
   (when (file-exists-p (nnweb-overview-file group))
-    (with-temp-buffer
-      (mm-insert-file-contents (nnweb-overview-file group))
+    (nnheader-temp-write nil
+      (nnheader-insert-file-contents (nnweb-overview-file group))
       (goto-char (point-min))
       (let (header)
        (while (not (eobp))
@@ -241,7 +233,7 @@ and `altavista'.")
 
 (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)))))))
@@ -262,7 +254,7 @@ and `altavista'.")
 
 (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 ()
index ec0d071..e25abbb 100644 (file)
 
 ;;; Code:
 
-(eval-when-compile (require 'cl))      ;and ah ain't kiddin' 'bout it
+(eval-when-compile (require 'cl))              ;and ah ain't kiddin' 'bout it
 
-(defvar parse-time-syntax (make-vector 256 nil))
-(defvar parse-time-digits (make-vector 256 nil))
+(put 'parse-time-syntax 'char-table-extra-slots 0)
+
+(defvar parse-time-syntax (make-char-table 'parse-time-syntax))
+(defvar parse-time-digits (make-char-table 'parse-time-syntax))
 
 ;; Byte-compiler warnings
 (defvar elt)
 
 (unless (aref parse-time-digits ?0)
   (loop for i from ?0 to ?9
-       do (aset parse-time-digits i (- i ?0))))
+       do (set-char-table-range parse-time-digits i (- i ?0))))
 
 (unless (aref parse-time-syntax ?0)
   (loop for i from ?0 to ?9
-       do (aset parse-time-syntax i ?0))
+       do (set-char-table-range parse-time-syntax i ?0))
   (loop for i from ?A to ?Z
-       do (aset parse-time-syntax i ?A))
+       do (set-char-table-range parse-time-syntax i ?A))
   (loop for i from ?a to ?z
-       do (aset parse-time-syntax i ?a))
-  (aset parse-time-syntax ?+ 1)
-  (aset parse-time-syntax ?- -1)
-  (aset parse-time-syntax ?: ?d)
+       do (set-char-table-range parse-time-syntax i ?a))
+  (set-char-table-range parse-time-syntax ?+ 1)
+  (set-char-table-range parse-time-syntax ?- -1)
+  (set-char-table-range parse-time-syntax ?: ?d)
   )
 
 (defsubst digit-char-p (char)
@@ -87,8 +89,7 @@
          (setq integer (+ (* integer 10) digit)
                index (1+ index)))
        (if (/= index end)
-           (signal 'parse-error `("not an integer"
-                                  ,(substring string (or start 0) end)))
+           (signal 'parse-error `("not an integer" ,(substring string (or start 0) end)))
          (* sign integer))))))
 
 (defun parse-time-tokenize (string)
                list)))
     (nreverse list)))
 
-(defvar parse-time-months '(("jan" . 1) ("feb" . 2) ("mar" . 3)
-                           ("apr" . 4) ("may" . 5) ("jun" . 6)
-                           ("jul" . 7) ("aug" . 8) ("sep" . 9)
-                           ("oct" . 10) ("nov" . 11) ("dec" . 12)))
-(defvar parse-time-weekdays '(("sun" . 0) ("mon" . 1) ("tue" . 2)
-                             ("wed" . 3) ("thu" . 4) ("fri" . 5) ("sat" . 6)))
-(defvar parse-time-zoneinfo `(("z" 0) ("ut" 0) ("gmt" 0)
-                             ("pst" ,(* -8 3600)) ("pdt" ,(* -7 3600) t)
-                             ("mst" ,(* -7 3600)) ("mdt" ,(* -6 3600) t)
-                             ("cst" ,(* -6 3600)) ("cdt" ,(* -5 3600) t)
-                             ("est" ,(* -5 3600)) ("edt" ,(* -4 3600) t))
+(defvar parse-time-months '(("Jan" . 1) ("Feb" . 2) ("Mar" . 3)
+                           ("Apr" . 4) ("May" . 5) ("Jun" . 6)
+                           ("Jul" . 7) ("Aug" . 8) ("Sep" . 9)
+                           ("Oct" . 10) ("Nov" . 11) ("Dec" . 12)))
+(defvar parse-time-weekdays '(("Sun" . 0) ("Mon" . 1) ("Tue" . 2)
+                             ("Wed" . 3) ("Thu" . 4) ("Fri" . 5) ("Sat" . 6)))
+(defvar parse-time-zoneinfo `(("Z" 0) ("UT" 0) ("GMT" 0)
+                             ("PST" ,(* -8 3600)) ("PDT" ,(* -7 3600) t)
+                             ("MST" ,(* -7 3600)) ("MDT" ,(* -6 3600) t)
+                             ("CST" ,(* -6 3600)) ("CDT" ,(* -5 3600) t)
+                             ("EST" ,(* -5 3600)) ("EDT" ,(* -4 3600) t))
   "(zoneinfo seconds-off daylight-savings-time-p)")
 
 (defvar parse-time-rules
   `(((6) parse-time-weekdays)
     ((3) (1 31))
     ((4) parse-time-months)
-    ((5) (100 4038))
+    ((5) (1970 2038))
     ((2 1 0)
      ,#'(lambda () (and (stringp elt)
                        (= (length elt) 8)
                            (* 60 (parse-integer elt 1 3)))
                      (if (= (aref elt 0) ?-) -1 1))))
     ((5 4 3)
-     ,#'(lambda () (and (stringp elt)
-                       (= (length elt) 10)
-                       (= (aref elt 4) ?-)
-                       (= (aref elt 7) ?-)))
+     ,#'(lambda () (and (stringp elt) (= (length elt) 10) (= (aref elt 4) ?-) (= (aref elt 7) ?-)))
      [0 4] [5 7] [8 10])
-    ((2 1 0)
+    ((2 1)
      ,#'(lambda () (and (stringp elt) (= (length elt) 5) (= (aref elt 2) ?:)))
-     [0 2] [3 5] ,#'(lambda () 0))
-    ((2 1 0)
-     ,#'(lambda () (and (stringp elt)
-                       (= (length elt) 4)
-                       (= (aref elt 1) ?:)))
-     [0 1] [2 4] ,#'(lambda () 0))
-    ((2 1 0)
-     ,#'(lambda () (and (stringp elt)
-                       (= (length elt) 7)
-                       (= (aref elt 1) ?:)))
-     [0 1] [2 4] [5 7])
-    ((5) (50 99) ,#'(lambda () (+ 1900 elt)))
-    ((5) (0 49) ,#'(lambda () (+ 2000 elt))))
+     [0 2] [3 5])
+    ((5) (70 99) ,#'(lambda () (+ 1900 elt))))
   "(slots predicate extractor...)")
 
 (defun parse-time-string (string)
   "Parse the time-string STRING into (SEC MIN HOUR DAY MON YEAR DOW DST TZ).
 The values are identical to those of `decode-time', but any values that are
 unknown are returned as nil."
-  (let ((time (list nil nil nil nil nil nil nil nil nil))
-       (temp (parse-time-tokenize (downcase string))))
+  (let ((time (list nil nil nil nil nil nil nil nil nil nil))
+       (temp (parse-time-tokenize string)))
     (while temp
       (let ((elt (pop temp))
            (rules parse-time-rules)
@@ -186,27 +173,25 @@ unknown are returned as nil."
                 (slots (pop rule))
                 (predicate (pop rule))
                 (val))
-           (when (and (not (nth (car slots) time)) ;not already set
-                      (setq val (cond ((and (consp predicate)
-                                            (not (eq (car predicate)
-                                                     'lambda)))
-                                       (and (numberp elt)
-                                            (<= (car predicate) elt)
-                                            (<= elt (cadr predicate))
-                                            elt))
-                                      ((symbolp predicate)
-                                       (cdr (assoc elt
-                                                   (symbol-value predicate))))
-                                      ((funcall predicate)))))
-             (setq exit t)
-             (while slots
-               (let ((new-val (and rule
-                                   (let ((this (pop rule)))
-                                     (if (vectorp this)
-                                         (parse-integer
-                                          elt (aref this 0) (aref this 1))
-                                       (funcall this))))))
-                 (rplaca (nthcdr (pop slots) time) (or new-val val)))))))))
+           (if (and (not (nth (car slots) time)) ;not already set
+                    (setq val (cond ((and (consp predicate)
+                                          (not (eq (car predicate) 'lambda)))
+                                     (and (numberp elt)
+                                          (<= (car predicate) elt)
+                                          (<= elt (cadr predicate))
+                                          elt))
+                                    ((symbolp predicate)
+                                     (cdr (assoc elt (symbol-value predicate))))
+                                    ((funcall predicate)))))
+               (progn
+                 (setq exit t)
+                 (while slots
+                   (let ((new-val (and rule
+                                       (let ((this (pop rule)))
+                                         (if (vectorp this)
+                                             (parse-integer elt (aref this 0) (aref this 1))
+                                           (funcall this))))))
+                     (rplaca (nthcdr (pop slots) time) (or new-val val))))))))))
     time))
 
 (provide 'parse-time)
diff --git a/lisp/pop3-fma.el b/lisp/pop3-fma.el
new file mode 100644 (file)
index 0000000..293efe6
--- /dev/null
@@ -0,0 +1,402 @@
+;; 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.16
+;; 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" pass)
+;;         ("po:username1@mailhost1.your.domain1" apop)
+;;                         :
+;;                         :
+;;        ))
+;;
+;;     pass means normal authentication USER/PASS.
+;;     apop means authentication using APOP.
+;;
+;; When using apop , Please set pop3-fma-movemail-type 'lisp.
+;; movemail.exe does not work on APOP protocol.
+;;
+;; 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))))
+  )
+
+(defgroup pop3-fma nil
+  "Multile POP3 account utility for Gnus."
+  :prefix "pop3-fma-"
+  :group 'mail
+  :group 'news)
+
+(defconst pop3-fma-version-number "1.16")
+(defconst pop3-fma-codename
+;;  "J boy"                    ; 1.00
+;;  "Blood line"               ; 1.10
+;;  "Star ring"                        ; 1.11
+;;  "Goodbye Game"             ; 1.12
+;;  "Love is Gamble"           ; 1.13
+;;  "Lonely"                   ; 1.14
+  "Feel the wind"              ; 1.16
+  )
+(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\" type)
+   (\"po:user2@mailhost2\" type)
+  )
+Type must be pass or apop."
+  :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")))
+
+(defcustom pop3-fma-save-password-information nil
+  "*If non nil , save POP Server's password information.
+============== Important notice =====================
+Please take care of your password information.
+If set to t , your pop3 password is saved in pop3-fma-password in raw text.
+So , Anybody can see this information by describe-variable.
+If there is any problem , please set this variable to nil(default).
+============== Important notice ====================="
+  :group 'pop3-fma
+  :type 'boolean)
+
+;;; Internal variables.
+(defvar pop3-fma-password nil
+  "*POP3 password , user , mailhost information for Gnus.")
+
+(defvar pop3-fma-movemail-program
+  (if (eq system-type 'windows-nt)
+      "movemail.exe"
+    "movemail")
+  "*External program name your movemail.")
+
+
+;; Temporary variable
+(defvar hdr nil)
+(defvar passwd nil)
+(defvar str nil)
+(defvar spool nil)
+(defvar movemail-output-buffer " *movemail-out*")
+(defvar pop3-fma-commandline-arguments nil)
+
+;;; To silence byte compiler
+(and
+ (fboundp 'eval-when-compile)
+ (eval-when-compile
+   (save-excursion
+     (beginning-of-defun)
+     (eval-region (point-min) (point)))
+   (let (case-fold-search)
+     (mapcar
+      (function
+       (lambda (symbol)
+        (unless (boundp symbol)
+          (make-local-variable symbol)
+          (eval (list 'setq symbol nil)))))
+      '(:group
+       :prefix :type
+       pop3-maildrop
+       pop3-mailhost
+       ))
+     (make-local-variable 'byte-compile-warnings)
+     (setq byte-compile-warnings 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))))
+             (pop3-password
+              (if pop3-fma-save-password-information
+                  (pop3-fma-read-passwd (substring inbox (match-end (string-match "^.*@" inbox))))
+                (pop3-fma-input-password
+                 (substring inbox (match-end (string-match "^.*@" inbox)))
+                 (substring inbox (match-end (string-match "^po:" inbox))
+                            (- (match-end (string-match "^.*@" inbox)) 1)))))
+             (pop3-authentication-scheme
+              (nth 1 (assoc inbox pop3-fma-spool-file-alist)))
+             (pop3-fma-movemail-type (pop3-fma-get-movemail-type inbox)))
+         (if (eq pop3-authentication-scheme 'pass)
+             (message "Checking new mail user %s at %s using USER/PASS ..." pop3-maildrop pop3-mailhost)
+           (message "Checking new mail user %s at %s using APOP ..." 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-commandline-arguments))
+                        (not (memq (concat "po:" pop3-maildrop) pop3-fma-commandline-arguments)))
+                   (progn
+                     (setq pop3-fma-commandline-arguments
+                           (append
+                            pop3-fma-movemail-arguments
+                                   (list
+                                    (concat "po:" pop3-maildrop)
+                                    crashbox
+                                    pop3-password)))))
+               (if (not (get-buffer movemail-output-buffer))
+                   (get-buffer-create movemail-output-buffer))
+               (set-buffer movemail-output-buffer)
+               (erase-buffer)
+               (apply 'call-process (concat
+                                     exec-directory
+                                     pop3-fma-movemail-program)
+                      nil movemail-output-buffer nil
+                      pop3-fma-commandline-arguments)
+               (let ((string (buffer-string)))
+                 (if (> (length string) 0)
+                     (progn
+                       (if (y-or-n-p
+                            (concat (substring string 0
+                                               (- (length string) 1))
+                                               " continue ??"))
+                           nil
+                         nil)))))
+           (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)))
+  passwd)
+
+(defun pop3-fma-input-password (mailhost maildrop)
+  (pop3-fma-read-noecho
+   (format "POP Password for %s at %s: " maildrop mailhost) t))
+
+(setq pop3-read-passwd 'pop3-fma-read-passwd
+      nnmail-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
+                     passwd)))))
+    (setcar (cdr (cdr (assoc pop3-mailhost pop3-fma-password)))
+           passwd)
+    (message "POP password registered.")
+    passwd)
+;;
+;;;###autoload
+(defun pop3-fma-set-pop3-password()
+  (interactive)
+  (if pop3-fma-save-password-information
+      (progn
+       (mapcar
+        (lambda (x)
+          (let ((pop3-maildrop
+                 (substring (car x) (match-end (string-match "^po:" (car x)))
+                            (- (match-end (string-match "^.*@" (car x))) 1)))
+                (pop3-mailhost
+                 (substring (car x) (match-end (string-match "^.*@" (car 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
+                          (mapcar
+                           (lambda (spool)
+                             (car spool))
+                           pop3-fma-spool-file-alist))))
+;;
+(defmacro pop3-fma-read-char-exclusive ()
+  (cond ((featurep 'xemacs)
+        '(let ((table (quote ((backspace . ?\C-h) (delete . ?\C-?)
+                              (left . ?\C-h))))
+               event key)
+           (while (not
+                   (and
+                    (key-press-event-p (setq event (next-command-event)))
+                    (setq key (or (event-to-character event)
+                                  (cdr (assq (event-key event) table)))))))
+           key))
+       ((fboundp 'read-char-exclusive)
+        '(read-char-exclusive))
+       (t
+        '(read-char))))
+;;
+(defun 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 (pop3-fma-read-char-exclusive))
+      (cond ((eq ?\C-g c)
+            (setq quit-flag t
+                  done t))
+           ((memq c '(?\r ?\n ?\e))
+            (setq done t))
+           ((eq ?\C-u c)
+            (setq ans ""))
+           ((and (/= ?\b c) (/= ?\177 c))
+            (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)))))
+;;
+;;
+(defun pop3-fma-get-movemail-type (inbox)
+  (if (eq (nth 1 (assoc inbox pop3-fma-spool-file-alist)) 'apop)
+      'lisp
+    pop3-fma-movemail-type))
+;;
+(provide 'pop3-fma)
+;;
+;; pop3-fma.el ends here.
+
+
index 7c745a8..a07b805 100644 (file)
@@ -1,10 +1,10 @@
 ;;; pop3.el --- Post Office Protocol (RFC 1460) interface
 
-;; Copyright (C) 1996-1999 Free Software Foundation, Inc.
+;; Copyright (C) 1996,1997,1998 Free Software Foundation, Inc.
 
 ;; Author: Richard L. Pieri <ratinox@peorth.gweep.net>
 ;; Keywords: mail, pop3
-;; Version: 1.3r
+;; Version: 1.3m+
 
 ;; This file is part of GNU Emacs.
 
@@ -37,7 +37,7 @@
 (require 'mail-utils)
 (provide 'pop3)
 
-(defconst pop3-version "1.3r")
+(defconst pop3-version "1.3m+")
 
 (defvar pop3-maildrop (or (user-login-name) (getenv "LOGNAME") (getenv "USER") nil)
   "*POP3 maildrop.")
@@ -85,50 +85,45 @@ Used for APOP authentication.")
           (pop3-pass process))
          (t (error "Invalid POP3 authentication scheme.")))
     (setq message-count (car (pop3-stat process)))
-    (unwind-protect
-       (while (<= n message-count)
-         (message (format "Retrieving message %d of %d from %s..."
-                          n message-count pop3-mailhost))
-         (pop3-retr process n crashbuf)
-         (save-excursion
-           (set-buffer crashbuf)
-           (write-region (point-min) (point-max) crashbox t 'nomesg)
-           (set-buffer (process-buffer process))
-           (while (> (buffer-size) 5000)
-             (goto-char (point-min))
-             (forward-line 50)
-             (delete-region (point-min) (point))))
-         (pop3-dele process n)
-         (setq n (+ 1 n))
-         (if pop3-debug (sit-for 1) (sit-for 0.1))
-         )
-      (pop3-quit process))
+    (while (<= n message-count)
+      (message (format "Retrieving message %d of %d from %s..."
+                      n message-count pop3-mailhost))
+      (pop3-retr process n crashbuf)
+      (save-excursion
+       (set-buffer crashbuf)
+       (write-region-as-binary (point-min) (point-max) crashbox 'append)
+       (set-buffer (process-buffer process))
+       (while (> (buffer-size) 5000)
+         (goto-char (point-min))
+         (forward-line 50)
+         (delete-region (point-min) (point))))
+      (pop3-dele process n)
+      (setq n (+ 1 n))
+      (if pop3-debug (sit-for 1) (sit-for 0.1))
+      )
+    (pop3-quit process)
     (kill-buffer crashbuf)
     )
-  t)
+  )
 
 (defun pop3-open-server (mailhost port)
   "Open TCP connection to MAILHOST.
 Returns the process associated with the connection."
   (let ((process-buffer
         (get-buffer-create (format "trace of POP session to %s" mailhost)))
-       (process)
-       (coding-system-for-read 'binary)   ;; because FSF Emacs 20 and
-       (coding-system-for-write 'binary)  ;; XEmacs 20 & 21 are st00pid
-    )
+       (process))
     (save-excursion
       (set-buffer process-buffer)
       (erase-buffer)
       (setq pop3-read-point (point-min))
       )
     (setq process
-         (open-network-stream "POP" process-buffer mailhost port))
+         (open-network-stream-as-binary "POP" process-buffer mailhost port))
     (let ((response (pop3-read-response process t)))
       (setq pop3-timestamp
            (substring response (or (string-match "<" response) 0)
                       (+ 1 (or (string-match ">" response) -1)))))
-    process
-    ))
+    process))
 
 ;; Support functions
 
@@ -164,7 +159,7 @@ Return the response string if optional second argument is non-nil."
       (setq match-end (point))
       (goto-char pop3-read-point)
       (if (looking-at "-ERR")
-         (signal 'error (list (buffer-substring (point) (- match-end 2))))
+         (error (buffer-substring (point) (- match-end 2)))
        (if (not (looking-at "+OK"))
            (progn (setq pop3-read-point match-end) nil)
          (setq pop3-read-point match-end)
@@ -192,10 +187,12 @@ Return the response string if optional second argument is non-nil."
 (defvar pop3-read-passwd nil)
 (defun pop3-read-passwd (prompt)
   (if (not pop3-read-passwd)
-      (if (load "passwd" t)
+      (if (functionp 'read-passwd)
          (setq pop3-read-passwd 'read-passwd)
-       (autoload 'ange-ftp-read-passwd "ange-ftp")
-       (setq pop3-read-passwd 'ange-ftp-read-passwd)))
+       (if (load "passwd" t)
+           (setq pop3-read-passwd 'read-passwd)
+         (autoload 'ange-ftp-read-passwd "ange-ftp")
+         (setq pop3-read-passwd 'ange-ftp-read-passwd))))
   (funcall pop3-read-passwd prompt))
 
 (defun pop3-clean-region (start end)
@@ -247,15 +244,7 @@ Return the response string if optional second argument is non-nil."
              (setq From_ (concat (substring From_ 0 (match-beginning 0))
                                  (substring From_ (match-end 0)))))
            (goto-char (point-min))
-           (insert From_)
-           (re-search-forward "\n\n")
-           (narrow-to-region (point) (point-max))
-           (let ((size (- (point-max) (point-min))))
-             (goto-char (point-min))
-             (widen)
-             (forward-line -2)
-             (insert (format "Content-Length: %s\n" size)))
-           )))))
+           (insert From_))))))
 
 ;; The Command Set
 
diff --git a/lisp/qp.el b/lisp/qp.el
deleted file mode 100644 (file)
index 50fd046..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-;;; qp.el --- Quoted-Printable functions
-;; Copyright (C) 1998,99 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:
-
-(defvar quoted-printable-encoding-characters
-  (mapcar 'identity "0123456789ABCDEFabcdef"))
-
-(defun quoted-printable-decode-region (from to)
-  "Decode quoted-printable in the region between FROM and TO."
-  (interactive "r")
-  (save-excursion
-    (goto-char from)
-    (while (search-forward "=" to t)
-      (cond
-       ;; End of the line.
-       ((eq (char-after) ?\n)
-       (delete-char -1)
-       (delete-char 1))
-       ;; Encoded character.
-       ((and
-        (memq (char-after) quoted-printable-encoding-characters)
-        (memq (char-after (1+ (point)))
-              quoted-printable-encoding-characters))
-       (subst-char-in-region
-        (1- (point)) (point) ?=
-        (string-to-number
-         (buffer-substring (point) (+ 2 (point)))
-         16))
-       (delete-char 2))
-       ;; Quoted equal sign.
-       ((eq (char-after) ?=)
-       (delete-char 1))
-       ;; End of buffer.
-       ((eobp)
-       (delete-char -1))
-       ;; Invalid.
-       (t
-       (message "Malformed MIME quoted-printable message"))))))
-
-(defun quoted-printable-decode-string (string)
- "Decode the quoted-printable-encoded STRING and return the results."
- (with-temp-buffer
-   (insert string)
-   (quoted-printable-decode-region (point-min) (point-max))
-   (buffer-string)))
-
-(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."
-  (interactive "r")
-  (save-excursion
-    (save-restriction
-      (narrow-to-region from to)
-      (mm-encode-body)
-      ;; Encode all the non-ascii and control characters.
-      (goto-char (point-min))
-      (while (and (skip-chars-forward
-                  (or class "^\000-\007\013\015-\037\200-\377="))
-                 (not (eobp)))
-       (insert
-        (prog1
-            (upcase (format "=%02x" (char-after)))
-          (delete-char 1))))
-      ;; Encode white space at the end of lines.
-      (goto-char (point-min))
-      (while (re-search-forward "[ \t]+$" nil t)
-       (goto-char (match-beginning 0))
-       (while (not (eolp))
-         (insert
-          (prog1
-              (upcase (format "=%02x" (char-after)))
-            (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))))))
-
-(defun quoted-printable-encode-string (string)
- "QP-encode STRING and return the results."
- (mm-with-unibyte-buffer
-   (insert string)
-   (quoted-printable-encode-region (point-min) (point-max))
-   (buffer-string)))
-
-(provide 'qp)
-
-;; qp.el ends here
diff --git a/lisp/rfc1522.el b/lisp/rfc1522.el
deleted file mode 100644 (file)
index 98c8ea8..0000000
+++ /dev/null
@@ -1,276 +0,0 @@
-;;; rfc1522.el --- Functions for encoding and decoding rfc1522 messages
-;; 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:
-
-(require 'base64)
-(require 'qp)
-(require 'mm-util)
-
-(defvar rfc1522-header-encoding-alist
-  '(("Newsgroups" . nil)
-    ("Message-ID" . nil)
-    (t . mime))
-  "*Header/encoding method alist.
-The list is traversed sequentially.  The keys can either be
-header regexps or `t'.
-
-The values can be:
-
-1) nil, in which case no encoding is done;
-2) `mime', in which case the header will be encoded according to 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 rfc1522-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 RFC1522 encodings.
-Valid encodings are nil, `Q' and `B'.")
-
-(defvar rfc1522-encoding-function-alist
-  '((Q . rfc1522-q-encode-region)
-    (B . base64-encode-region)
-    (nil . ignore))
-  "Alist of RFC1522 encodings to encoding functions.")
-
-(defvar rfc1522-q-encoding-alist
-  '(("\\(From\\|Cc\\|To\\|Bcc\||Reply-To\\):" . "[^-A-Za-z0-9!*+/=_]")
-    ("." . "[\000-\007\013\015-\037\200-\377=_?]"))
-  "Alist of header regexps and valid Q characters.")
-
-;;;
-;;; Functions for encoding RFC1522 messages
-;;;
-
-(defun rfc1522-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)))
-
-;;;###autoload
-(defun rfc1522-encode-message-header ()
-  "Encode the message header according to `rfc1522-header-encoding-alist'.
-Should be called narrowed to the head of the message."
-  (interactive "*")
-  (when (featurep 'mule)
-    (save-excursion
-      (let ((alist rfc1522-header-encoding-alist)
-           elem method)
-       (while (not (eobp))
-         (save-restriction
-           (rfc1522-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)
-                 (rfc1522-encode-region (point-min) (point-max)))
-                ;; Hm.
-                (t))))
-           (goto-char (point-max))))))))
-
-(defun rfc1522-encode-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
-               ;(rfc1522-encode start (setq start (point)) prev)
-               (setq prev c))))
-           (forward-char 1)))
-       (when (and (not prev) qstart)
-         (rfc1522-encode qstart qend qprev)
-         (setq qstart nil)))
-      (when qstart
-       (rfc1522-encode qstart qend qprev)
-       (setq qstart nil)))))
-
-(defun rfc1522-encode-string (string)
-  "Encode words in STRING."
-  (with-temp-buffer
-    (insert string)
-    (rfc1522-encode-region (point-min) (point-max))
-    (buffer-string)))
-
-(defun rfc1522-encode (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
-                             rfc1522-charset-encoding-alist)))
-        (start (concat
-                "=?" (downcase (symbol-name mime-charset)) "?"
-                (downcase (symbol-name encoding)) "?")))
-    (save-restriction
-      (narrow-to-region b e)
-      (insert
-       (prog1
-          (mm-encode-coding-string (buffer-string) mime-charset)
-        (delete-region (point-min) (point-max))))
-      (funcall (cdr (assq encoding rfc1522-encoding-function-alist))
-              (point-min) (point-max))
-      (goto-char (point-min))
-      (insert start)
-      (goto-char (point-max))
-      (insert "?=")
-      ;; Encoded words can't be more than 75 chars long, so we have to
-      ;; split the long ones up.
-      (end-of-line)
-      (while (> (current-column) 74)
-       (beginning-of-line)
-       (forward-char 73)
-       (insert "?=\n " start)
-       (end-of-line)))))
-
-(defun rfc1522-q-encode-region (b e)
-  "Encode the header contained in REGION with the Q encoding."
-  (save-excursion
-    (save-restriction
-      (narrow-to-region (goto-char b) e)
-      (let ((alist rfc1522-q-encoding-alist))
-       (while alist
-         (when (looking-at (caar alist))
-           (quoted-printable-encode-region b e nil (cdar alist))
-           (subst-char-in-region (point-min) (point-max) ?  ?_))
-         (pop alist))))))
-
-;;;
-;;; Functions for decoding RFC1522 messages
-;;;
-
-(defvar rfc1522-encoded-word-regexp
-  "=\\?\\([^][\000-\040()<>@,\;:\\\"/?.=]+\\)\\?\\(B\\|Q\\)\\?\\([!->@-~]+\\)\\?=")
-
-;;;###autoload
-(defun rfc1522-decode-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 "\\(" rfc1522-encoded-word-regexp "\\)"
-                     "\\(\n?[ \t]\\)+"
-                     "\\(" rfc1522-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 rfc1522-encoded-word-regexp nil t)
-       (insert (rfc1522-parse-and-decode
-                (prog1
-                    (match-string 0)
-                  (delete-region (match-beginning 0) (match-end 0)))))))))
-
-;;;###autoload
-(defun rfc1522-decode-string (string)
- "Decode the quoted-printable-encoded STRING and return the results."
- (with-temp-buffer
-   (insert string)
-   (inline
-     (rfc1522-decode-region (point-min) (point-max)))
-   (buffer-string)))
-
-(defun rfc1522-parse-and-decode (word)
-  "Decode WORD and return it if it is an encoded word.
-Return WORD if not."
-  (if (not (string-match rfc1522-encoded-word-regexp word))
-      word
-    (or
-     (condition-case nil
-        (rfc1522-decode
-         (match-string 1 word)
-         (upcase (match-string 2 word))
-         (match-string 3 word))
-       (error word))
-     word)))
-
-(defun rfc1522-decode (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
-         (mm-replace-chars-in-string string ?_ ? )))
-       (t (error "Invalid encoding: %s" encoding)))
-       cs))))
-
-(provide 'rfc1522)
-
-;;; rfc1522.el ends here
diff --git a/lisp/rfc1843.el b/lisp/rfc1843.el
deleted file mode 100644 (file)
index f16cfcb..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-;;; rfc1843.el --- HZ (rfc1843) decoding
-;; Copyright (c) 1998 by Shenghuo Zhu <zsh@cs.rochester.edu>
-
-;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
-;; $Revision: 1.1.1.3 $
-;; Keywords: news HZ
-;; Time-stamp: <Tue Oct  6 23:48:49 EDT 1998 zsh>
-
-;; This file is not part of GNU Emacs, but the same permissions
-;; apply.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published
-;; by the Free Software Foundation; either version 2, or (at your
-;; option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-;; General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;; Usage:
-;; (require 'rfc1843)
-;; (rfc1843-gnus-setup)
-;;
-;; Test:
-;; (rfc1843-decode-string  "~{<:Ky2;S{#,NpJ)l6HK!#~}")
-
-;;; Code:
-
-(require 'mm-util)
-
-(defvar rfc1843-word-regexp
-  "~\\({\\([\041-\167][\041-\176]\\| \\)+\\(~}\\|$\\)")
-
-(defvar rfc1843-word-regexp-strictly
-      "~\\({\\([\041-\167][\041-\176]\\)+\\(~}\\|$\\)")
-
-(defvar rfc1843-hzp-word-regexp
-  "~\\({\\([\041-\167][\041-\176]\\| \\)+\\|\
-[<>]\\([\041-\175][\041-\176]\\| \\)+\\)\\(~}\\|$\\)")
-
-(defvar rfc1843-hzp-word-regexp-strictly
-      "~\\({\\([\041-\167][\041-\176]\\)+\\|\
-[<>]\\([\041-\175][\041-\176]\\)+\\)\\(~}\\|$\\)")
-
-(defcustom rfc1843-decode-loosely nil
-  "Loosely check HZ encoding if non-nil.
-When it is set non-nil, only buffers or strings with strictly
-HZ-encoded are decoded."
-  :type 'boolean
-  :group 'gnus)
-
-(defcustom rfc1843-decode-hzp t
-  "HZ+ decoding support if non-nil.
-HZ+ specification (also known as HZP) is to provide a standardized
-7-bit representation of mixed Big5, GB, and ASCII text for convenient
-e-mail transmission, news posting, etc.
-The document of HZ+ 0.78 specification can be found at
-ftp://ftp.math.psu.edu/pub/simpson/chinese/hzp/hzp.doc"
-  :type 'boolean
-  :group 'gnus)
-
-(defcustom rfc1843-newsgroups-regexp "chinese\\|hz"
-  "Regexp of newsgroups in which might be HZ encoded."
-  :type 'string
-  :group 'gnus)
-
-(defun rfc1843-decode-region (from to)
-  "Decode HZ in the region between FROM and TO."
-  (interactive "r")
-  (let (str firstc)
-    (save-excursion
-      (goto-char from)
-      (if (or rfc1843-decode-loosely
-             (re-search-forward (if rfc1843-decode-hzp
-                                    rfc1843-hzp-word-regexp-strictly
-                                  rfc1843-word-regexp-strictly) to t))
-         (save-restriction
-           (narrow-to-region from to)
-           (goto-char (point-min))
-           (while (re-search-forward (if rfc1843-decode-hzp
-                                         rfc1843-hzp-word-regexp
-                                       rfc1843-word-regexp) (point-max) t)
-             (setq str (match-string 1))
-             (setq firstc (aref str 0))
-             (insert (mm-decode-coding-string
-                      (rfc1843-decode
-                       (prog1
-                           (substring str 1)
-                         (delete-region (match-beginning 0) (match-end 0)))
-                       firstc)
-                      (if (eq firstc ?{) 'cn-gb-2312 'cn-big5))))
-           (goto-char (point-min))
-           (while (search-forward "~" (point-max) t)
-             (cond ((eq (char-after) ?\n)
-                    (delete-char -1)
-                    (delete-char 1))
-                 ((eq (char-after) ?~)
-                  (delete-char 1)))))))))
-
-(defun rfc1843-decode-string (string)
-  "Decode HZ STRING and return the results."
-  (let ((m (mm-multibyte-p)))
-    (with-temp-buffer
-      (when m
-       (mm-enable-multibyte))
-      (insert string)
-      (inline
-       (rfc1843-decode-region (point-min) (point-max)))
-      (buffer-string))))
-
-(defun rfc1843-decode (word &optional firstc)
-  "Decode HZ WORD and return it"
-  (let ((i -1) (s (substring word 0)) v)
-    (if (or (not firstc) (eq firstc ?{))
-       (while (< (incf i) (length s))
-         (if (eq (setq v (aref s i)) ? ) nil
-           (aset s i (+ 128 v))))
-      (while (< (incf i) (length s))
-       (if (eq (setq v (aref s i)) ? ) nil
-         (setq v (+ (* 94 v) (aref s (1+ i)) -3135))
-         (aset s i (+ (/ v 157) (if (eq firstc ?<) 201 161)))
-         (setq v (% v 157))
-         (aset s (incf i) (+ v (if (< v 63) 64 98))))))
-    s))
-
-(defun rfc1843-decode-article-body ()
-   "Decode HZ encoded text in the article body."
-   (if (string-match (concat "\\<\\(" rfc1843-newsgroups-regexp "\\)\\>")
-                    gnus-newsgroup-name)
-       (save-excursion
-        (save-restriction
-          (message-narrow-to-head)
-          (goto-char (point-max))
-          (widen)
-          (rfc1843-decode-region (point) (point-max))))))
-
-(defvar rfc1843-old-gnus-decode-header-function  nil)
-(defvar gnus-decode-header-methods)
-(defvar gnus-decode-encoded-word-methods)
-
-(defun rfc1843-gnus-setup ()
-  "Setup HZ decoding for Gnus."
-  (require 'gnus-art)
-  (require 'gnus-sum)
-  (add-hook 'gnus-article-decode-hook 'rfc1843-decode-article-body t)
-  (setq gnus-decode-encoded-word-function
-       'gnus-multi-decode-encoded-word-string
-       gnus-decode-header-function
-       'gnus-multi-decode-header
-       gnus-decode-encoded-word-methods
-       (nconc gnus-decode-encoded-word-methods
-              (list
-               (cons (concat "\\<\\(" rfc1843-newsgroups-regexp "\\)\\>")
-                     'rfc1843-decode-string)))
-       gnus-decode-header-methods
-       (nconc gnus-decode-header-methods
-              (list
-               (cons (concat "\\<\\(" rfc1843-newsgroups-regexp "\\)\\>")
-                     'rfc1843-decode-region)))))
-
-(provide 'rfc1843)
-
-;;; rfc1843.el ends here
diff --git a/lisp/rfc2047.el b/lisp/rfc2047.el
deleted file mode 100644 (file)
index 6e7512c..0000000
+++ /dev/null
@@ -1,358 +0,0 @@
-;;; rfc2047.el --- Functions for encoding and decoding rfc2047 messages
-;; Copyright (C) 1998,99 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
-  (eval
-   '(unless (fboundp 'base64-decode-string)
-      (require 'base64))))
-
-(require 'qp)
-(require 'mm-util)
-(require 'ietf-drums)
-(require 'mail-prsvr)
-
-(defvar rfc2047-header-encoding-alist
-  '(("Newsgroups" . nil)
-    ("Message-ID" . nil)
-    (t . mime))
-  "*Header/encoding method alist.
-The list is traversed sequentially.  The keys can either be
-header regexps or `t'.
-
-The values can be:
-
-1) nil, in which case no encoding is done;
-2) `mime', in which case the header will be encoded according to RFC2047;
-3) a charset, in which case it will be encoded as that charse;
-4) `default', in which case the field will be encoded as the rest
-   of the article.")
-
-(defvar rfc2047-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 . B)
-    (koi8-r . B)
-    (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 RFC2047 encodings.
-Valid encodings are nil, `Q' and `B'.")
-
-(defvar rfc2047-encoding-function-alist
-  '((Q . rfc2047-q-encode-region)
-    (B . rfc2047-b-encode-region)
-    (nil . ignore))
-  "Alist of RFC2047 encodings to encoding functions.")
-
-(defvar rfc2047-q-encoding-alist
-  '(("\\(From\\|Cc\\|To\\|Bcc\||Reply-To\\):" . "-A-Za-z0-9!*+/=_")
-    ("." . "^\000-\007\013\015-\037\200-\377=_?"))
-  "Alist of header regexps and valid Q characters.")
-
-;;;
-;;; Functions for encoding RFC2047 messages
-;;;
-
-(defun rfc2047-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 rfc2047-encode-message-header ()
-  "Encode the message header according to `rfc2047-header-encoding-alist'.
-Should be called narrowed to the head of the message."
-  (interactive "*")
-  (when (featurep 'mule)
-    (save-excursion
-      (goto-char (point-min))
-      (let ((alist rfc2047-header-encoding-alist)
-           elem method)
-       (while (not (eobp))
-         (save-restriction
-           (rfc2047-narrow-to-field)
-           (when (rfc2047-encodable-p)
-             ;; We found something that may perhaps be encoded.
-             (while (setq elem (pop alist))
-               (when (or (and (stringp (car elem))
-                              (looking-at (car elem)))
-                         (eq (car elem) t))
-                 (setq alist nil
-                       method (cdr elem))))
-             (when method
-               (cond
-                ((eq method 'mime)
-                 (rfc2047-encode-region (point-min) (point-max))
-                 (rfc2047-fold-region (point-min) (point-max)))
-                ;; Hm.
-                (t))))
-           (goto-char (point-max)))))
-      (when mail-parse-charset
-       (encode-coding-region (point-min) (point-max)
-                             mail-parse-charset)))))
-
-(defun rfc2047-encodable-p ()
-  "Say whether the current (narrowed) buffer contains characters that need encoding."
-  (let ((charsets
-        (mapcar
-         'mm-mime-charset
-         (mm-find-charset-region (point-min) (point-max))))
-       (cs (list 'us-ascii mail-parse-charset))
-       found)
-    (while charsets
-      (unless (memq (pop charsets) cs)
-       (setq found t)))
-    found))
-
-(defun rfc2047-dissect-region (b e)
-  "Dissect the region between B and E into words."
-  (let (words)
-    (save-restriction
-      (narrow-to-region b e)
-      (goto-char (point-min))
-      (while (re-search-forward
-             (concat "[^" ietf-drums-tspecials " \t\n]+") nil t)
-       (push
-        (list (match-beginning 0) (match-end 0)
-              (car (delq 'ascii (mm-find-charset-region
-                                 (match-beginning 0) (match-end 0)))))
-        words))
-      words)))
-
-(defun rfc2047-encode-region (b e)
-  "Encode all encodable words in REGION."
-  (let ((words (rfc2047-dissect-region b e))
-       beg end current word)
-    (while (setq word (pop words))
-      (if (equal (nth 2 word) current)
-         (setq beg (nth 0 word))
-       (when current
-         (rfc2047-encode beg end current))
-       (setq current (nth 2 word)
-             beg (nth 0 word)
-             end (nth 1 word))))
-    (when current
-      (rfc2047-encode beg end current))))
-
-(defun rfc2047-encode-string (string)
-  "Encode words in STRING."
-  (with-temp-buffer
-    (insert string)
-    (rfc2047-encode-region (point-min) (point-max))
-    (buffer-string)))
-
-(defun rfc2047-encode (b e charset)
-  "Encode the word in the region with CHARSET."
-  (let* ((mime-charset (mm-mime-charset charset))
-        (encoding (or (cdr (assq mime-charset
-                                 rfc2047-charset-encoding-alist))
-                      'B))
-        (start (concat
-                "=?" (downcase (symbol-name mime-charset)) "?"
-                (downcase (symbol-name encoding)) "?"))
-        (first t))
-    (save-restriction
-      (narrow-to-region b e)
-      (when (eq encoding 'B)
-       ;; break into lines before encoding
-       (goto-char (point-min))
-       (while (not (eobp))
-         (goto-char (min (point-max) (+ 15 (point))))
-         (unless (eobp)
-           (insert "\n"))))
-      (mm-encode-coding-region (point-min) (point-max) mime-charset)
-      (funcall (cdr (assq encoding rfc2047-encoding-function-alist))
-              (point-min) (point-max))
-      (goto-char (point-min))
-      (while (not (eobp))
-       (unless first
-         (insert " "))
-       (setq first nil)
-       (insert start)
-       (end-of-line)
-       (insert "?=")
-       (forward-line 1)))))
-
-(defun rfc2047-fold-region (b e)
-  "Fold the long lines in the region."
-  (save-restriction
-    (narrow-to-region b e)
-    (goto-char (point-min))
-    (let ((break nil))
-      (while (not (eobp))
-       (cond
-        ((memq (char-after) '(?  ?\t))
-         (setq break (point)))
-        ((and (not break)
-              (looking-at "=\\?"))
-         (setq break (point)))
-        ((and (looking-at "\\?=")
-              (> (- (point) (save-excursion (beginning-of-line) (point))) 76))
-         (goto-char break)
-         (insert "\n ")
-         (forward-line 1)))
-       (unless (eobp)
-         (forward-char 1))))))
-
-(defun rfc2047-b-encode-region (b e)
-  "Encode the header contained in REGION with the B encoding."
-  (save-restriction
-    (narrow-to-region (goto-char b) e)
-    (while (not (eobp))
-      (base64-encode-region (point) (progn (end-of-line) (point)) t)
-      (if (and (bolp) (eolp))
-         (delete-backward-char 1))
-      (forward-line))))
-
-(defun rfc2047-q-encode-region (b e)
-  "Encode the header contained in REGION with the Q encoding."
-  (save-excursion
-    (save-restriction
-      (narrow-to-region (goto-char b) e)
-      (let ((alist rfc2047-q-encoding-alist))
-       (while alist
-         (when (looking-at (caar alist))
-           (quoted-printable-encode-region b e nil (cdar alist))
-           (subst-char-in-region (point-min) (point-max) ?  ?_)
-           (setq alist nil))
-         (pop alist))
-       (goto-char (point-min))
-       (while (not (eobp))
-         (goto-char (min (point-max) (+ 64 (point))))
-         (search-backward "=" (- (point) 2) t)
-         (unless (eobp)
-           (insert "\n")))))))
-
-;;;
-;;; Functions for decoding RFC2047 messages
-;;;
-
-(defvar rfc2047-encoded-word-regexp
-  "=\\?\\([^][\000-\040()<>@,\;:\\\"/?.=]+\\)\\?\\(B\\|Q\\)\\?\\([!->@-~ +]+\\)\\?=")
-
-(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)))))
-         (when (and (mm-multibyte-p)
-                    mail-parse-charset)
-           (mm-decode-coding-region b e mail-parse-charset))
-         (setq b (point)))
-       (when (and (mm-multibyte-p)
-                  mail-parse-charset
-                  (not (eq mail-parse-charset 'us-ascii)))
-         (mm-decode-coding-region b (point-max) mail-parse-charset))))))
-
-(defun rfc2047-decode-string (string)
-  "Decode the quoted-printable-encoded STRING and return the results."
-  (let ((m (mm-multibyte-p)))
-    (with-temp-buffer
-      (when m
-       (mm-enable-multibyte))
-      (insert string)
-      (inline
-       (rfc2047-decode-region (point-min) (point-max)))
-      (buffer-string))))
-
-(defun rfc2047-parse-and-decode (word)
-  "Decode WORD and return it if it is an encoded word.
-Return WORD if not."
-  (if (not (string-match rfc2047-encoded-word-regexp word))
-      word
-    (or
-     (condition-case nil
-        (rfc2047-decode
-         (match-string 1 word)
-         (upcase (match-string 2 word))
-         (match-string 3 word))
-       (error word))
-     word)))
-
-(defun rfc2047-decode (charset encoding string)
-  "Decode STRING that uses CHARSET with ENCODING.
-Valid ENCODINGs are \"B\" and \"Q\".
-If your Emacs implementation can't decode CHARSET, it returns nil."
-  (if (stringp charset)
-    (setq charset (intern (downcase charset))))
-  (if (or (not charset) (memq charset mail-parse-ignored-charsets))
-      (setq charset mail-parse-charset))
-  (let ((cs (mm-charset-to-coding-system charset)))
-    (when cs
-      (when (and (eq cs 'ascii)
-                mail-parse-charset)
-       (setq cs mail-parse-charset))
-      (mm-decode-coding-string
-       (cond
-       ((equal "B" encoding)
-        (base64-decode-string string))
-       ((equal "Q" encoding)
-        (quoted-printable-decode-string
-         (mm-replace-chars-in-string string ?_ ? )))
-       (t (error "Invalid encoding: %s" encoding)))
-       cs))))
-
-(provide 'rfc2047)
-
-;;; rfc2047.el ends here
diff --git a/lisp/rfc2231.el b/lisp/rfc2231.el
deleted file mode 100644 (file)
index 8ee24b9..0000000
+++ /dev/null
@@ -1,207 +0,0 @@
-;;; rfc2231.el --- Functions for decoding rfc2231 headers
-;; Copyright (C) 1998,99 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 'ietf-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 (ietf-drums-token-to-list ietf-drums-text-token))
-         (stoken (ietf-drums-token-to-list ietf-drums-tspecials))
-         (ntoken (ietf-drums-token-to-list "0-9"))
-         (prev-value "")
-         display-name mailbox c display-string parameters
-         attribute value type subtype number encoded
-         prev-attribute)
-      (ietf-drums-init (mail-header-remove-whitespace
-                       (mail-header-remove-comments string)))
-      (let ((table (copy-syntax-table ietf-drums-syntax-table)))
-       (modify-syntax-entry ?\' "w" table)
-       ;; The following isn't valid, but one should be liberal
-       ;; in what one receives.
-       (modify-syntax-entry ?\: "w" table)
-       (set-syntax-table table))
-      (setq c (char-after))
-      (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 (char-after))
-         (unless (eq c ?\;)
-           (error "Invalid header: %s" string))
-         (forward-char 1)
-         ;; If c in nil, then this is an invalid header, but
-         ;; since elm generates invalid headers on this form,
-         ;; we allow it.
-         (when (setq c (char-after))
-           (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 (char-after))
-           (setq encoded nil)
-           (when (eq c ?*)
-             (forward-char 1)
-             (setq c (char-after))
-             (when (memq c ntoken)
-               (setq number
-                     (string-to-number
-                      (buffer-substring
-                       (point) (progn (forward-sexp 1) (point)))))
-               (setq c (char-after))
-               (when (eq c ?*)
-                 (setq encoded t)
-                 (forward-char 1)
-                 (setq c (char-after)))))
-           ;; 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 (char-after))
-           (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))
-
-       (when type
-         `(,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))))
-
-(defun rfc2231-encode-string (param value)
-  "Return and PARAM=VALUE string encoded according to RFC2231."
-  (let ((control (ietf-drums-token-to-list ietf-drums-no-ws-ctl-token))
-       (tspecial (ietf-drums-token-to-list ietf-drums-tspecials))
-       (special (ietf-drums-token-to-list "*'%\n\t"))
-       (ascii (ietf-drums-token-to-list ietf-drums-text-token))
-       (num -1)
-       spacep encodep charsetp charset broken)
-    (with-temp-buffer
-      (insert value)
-      (goto-char (point-min))
-      (while (not (eobp))
-       (cond
-        ((or (memq (following-char) control)
-             (memq (following-char) tspecial)
-             (memq (following-char) special))
-         (setq encodep t))
-        ((eq (following-char) ? )
-         (setq spacep t))
-        ((not (memq (following-char) ascii))
-         (setq charsetp t)))
-       (forward-char 1))
-      (when charsetp
-       (setq charset (mm-encode-body)))
-      (cond
-       ((or encodep charsetp)
-       (goto-char (point-min))
-       (while (not (eobp))
-         (when (> (current-column) 60)
-           (insert "\n")
-           (setq broken t))
-         (if (or (not (memq (following-char) ascii))
-                 (memq (following-char) control)
-                 (memq (following-char) tspecial)
-                 (memq (following-char) special)
-                 (eq (following-char) ? ))
-             (progn
-               (insert "%" (format "%02x" (following-char)))
-               (delete-char 1))
-           (forward-char 1)))
-       (goto-char (point-min))
-       (insert (or charset "ascii") "''")
-       (goto-char (point-min))
-       (if (not broken)
-           (insert param "*=")
-         (while (not (eobp))
-           (insert param "*" (format "%d" (incf num)) "*=")
-           (forward-line 1))))
-       (spacep
-       (goto-char (point-min))
-       (insert param "=\"")
-       (goto-char (point-max))
-       (insert "\""))
-       (t
-       (goto-char (point-min))
-       (insert param "=")))
-      (buffer-string))))
-
-(provide 'rfc2231)
-
-;;; rfc2231.el ends here
index e2160eb..24c31f6 100644 (file)
@@ -26,6 +26,7 @@
 ;;; Code:
 
 (require 'easymenu)
+(require 'timezone)
 (eval-when-compile (require 'cl))
 
 (defvar gnus-score-mode-hook nil
@@ -39,8 +40,7 @@
 
 (defvar gnus-score-mode-map nil)
 (unless gnus-score-mode-map
-  (setq gnus-score-mode-map (make-sparse-keymap))
-  (set-keymap-parent gnus-score-mode-map emacs-lisp-mode-map)
+  (setq gnus-score-mode-map (copy-keymap emacs-lisp-mode-map))
   (define-key gnus-score-mode-map "\C-c\C-c" 'gnus-score-edit-exit)
   (define-key gnus-score-mode-map "\C-c\C-d" 'gnus-score-edit-insert-date)
   (define-key gnus-score-mode-map "\C-c\C-p" 'gnus-score-pretty-print))
@@ -51,8 +51,6 @@
     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.
@@ -83,7 +81,7 @@ This mode is an extended emacs-lisp mode.
 (defun gnus-score-edit-insert-date ()
   "Insert date in numerical format."
   (interactive)
-  (princ (time-to-days (current-time)) (current-buffer)))
+  (princ (gnus-score-day-number (current-time)) (current-buffer)))
 
 (defun gnus-score-pretty-print ()
   "Format the current score file."
@@ -100,8 +98,7 @@ This mode is an extended emacs-lisp mode.
   (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
@@ -109,6 +106,11 @@ This mode is an extended emacs-lisp mode.
     (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
index a05d47f..e6c13f7 100644 (file)
@@ -1,5 +1,5 @@
 ;;; smiley.el --- displaying smiley faces
-;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
 ;; Author: Wes Hardaker <hardaker@ece.ucdavis.edu>
 ;; Keywords: fun
@@ -31,7 +31,7 @@
 
 ;; To use:
 ;; (require 'smiley)
-;; (setq gnus-treat-display-smileys t)
+;; (add-hook 'gnus-article-display-hook 'gnus-smiley-display t)
 
 ;; The smilies were drawn by Joe Reiss <jreiss@vt.edu>.
 
@@ -63,7 +63,7 @@
     ("\\(:-+\\]+\\)\\W" 1 "FaceGoofy.xpm")
     ("\\(:-*D\\)\\W" 1 "FaceGrinning.xpm")
     ("\\(:-*[)>}»]+\\)\\W" 1 "FaceHappy.xpm")
-    ("\\(=[)»]+\\)\\W" 1 "FaceHappy.xpm")
+    ("\\(=[)>»]+\\)\\W" 1 "FaceHappy.xpm")
     ("\\(:-*[/\\\"]\\)[^/]\\W" 1 "FaceIronic.xpm")
     ("\\([8|]-*[|Oo%]\\)\\W" 1 "FaceKOed.xpm")
     ("\\([:|]-*#+\\)\\W" 1 "FaceNyah.xpm")
@@ -88,7 +88,7 @@
     ("\\(:-+D\\)\\W" 1 "FaceGrinning.xpm")
     ("\\(:-+[}»]+\\)\\W" 1 "FaceHappy.xpm")
     ("\\(:-*)+\\)\\W" 1 "FaceHappy.xpm")
-    ("\\(=[)]+\\)\\W" 1 "FaceHappy.xpm")
+    ("\\(=[)>]+\\)\\W" 1 "FaceHappy.xpm")
     ("\\(:-+[/\\\"]+\\)\\W" 1 "FaceIronic.xpm")
     ("\\([8|]-+[|Oo%]\\)\\W" 1 "FaceKOed.xpm")
     ("\\([:|]-+#+\\)\\W" 1 "FaceNyah.xpm")
@@ -162,7 +162,7 @@ above them."
 (defun smiley-popup-menu (e)
   (interactive "e")
   (popup-menu
-   `("Smilies"
+   `("Smilies" 
      ["Toggle This Smiley" (smiley-toggle-extent ,e) t]
      ["Toggle All Smilies" (smiley-toggle-extents ,e) t])))
 
@@ -180,8 +180,6 @@ above them."
           (glyph (make-glyph
                   (list
                    (cons 'x (expand-file-name pixmap smiley-data-directory))
-                   (cons 'mswindows
-                         (expand-file-name pixmap smiley-data-directory))
                    (cons 'tty smiley)))))
       (setq smiley-glyph-cache (cons (cons pixmap glyph) smiley-glyph-cache))
       (set-glyph-face glyph 'default)
@@ -230,7 +228,7 @@ above them."
 ;;;###autoload
 (defun smiley-buffer (&optional buffer st nd)
   (interactive)
-  (when (featurep '(or x mswindows))
+  (when (featurep 'x)
     (save-excursion
       (when buffer
        (set-buffer buffer))
@@ -277,12 +275,10 @@ above them."
                  (set-extent-property ant 'smiley-extent ext)
                  (set-extent-property ext 'smiley-annotation ant)
                  ;; Help
-                 (set-extent-property
-                  ext 'help-echo
-                  "button2 toggles smiley, button3 pops up menu")
-                 (set-extent-property
-                  ant 'help-echo
-                  "button2 toggles smiley, button3 pops up menu")
+                 (set-extent-property ext 'help-echo
+                                      "button2 toggles smiley, button3 pops up menu")
+                 (set-extent-property ant 'help-echo
+                                      "button2 toggles smiley, button3 pops up menu")
                  (set-extent-property ext 'balloon-help
                                       "Mouse button2 - toggle smiley
 Mouse button3 - menu")
@@ -298,10 +294,10 @@ Mouse button3 - menu"))
   (save-excursion
     (goto-char start)
     (when (and (re-search-backward "[()]" nil t)
-              (eq (char-after) ?\()
+              (= (following-char) ?\()
               (goto-char end)
               (or (not (re-search-forward "[()]" nil t))
-                  (eq (char-after (1- (point))) ?\()))
+                  (= (char-after (1- (point))) ?\()))
       t)))
 
 (defvar gnus-article-buffer)
@@ -311,8 +307,11 @@ Mouse button3 - menu"))
   (interactive)
   (save-excursion
     (set-buffer gnus-article-buffer)
-    (article-goto-body)
-    (smiley-buffer (current-buffer) (point-min) (point-max))))
+    (goto-char (point-min))
+    ;; We skip the headers.
+    (unless (search-forward "\n\n" nil t)
+      (goto-char (point-max)))
+    (smiley-buffer (current-buffer) (point))))
 
 (provide 'smiley)
 
diff --git a/lisp/smtp.el b/lisp/smtp.el
new file mode 100644 (file)
index 0000000..1954200
--- /dev/null
@@ -0,0 +1,451 @@
+;;; 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)
+
+
+(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 '()))
+    (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-as-binary
+                        "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 (or (/= (forward-line 1) 0) (eobp))
+           (setq data-continue nil)))
+
+      (smtp-send-data-1 process sending-data)
+      )
+    )
+  )
+
+(defun smtp-deduce-address-list (smtp-text-buffer header-start header-end)
+  "Get address list suitable for smtp RCPT TO: <address>."
+  (require 'mail-utils)  ;; pick up mail-strip-quoted-names
+  (let ((case-fold-search t)
+       (simple-address-list "")
+       this-line
+       this-line-end
+       addr-regexp
+       (smtp-address-buffer (generate-new-buffer " *smtp-mail*")))
+    (unwind-protect
+       (save-excursion
+         ;;
+         (set-buffer smtp-address-buffer)
+         (erase-buffer)
+         (insert-buffer-substring smtp-text-buffer
+                                  header-start header-end)
+         (goto-char (point-min))
+         ;; RESENT-* fields should stop processing of regular fields.
+         (save-excursion
+           (if (re-search-forward "^RESENT-TO:" header-end t)
+               (setq addr-regexp
+                     "^\\(RESENT-TO:\\|RESENT-CC:\\|RESENT-BCC:\\)")
+             (setq addr-regexp  "^\\(TO:\\|CC:\\|BCC:\\)")))
+
+         (while (re-search-forward addr-regexp header-end t)
+           (replace-match "")
+           (setq this-line (match-beginning 0))
+           (forward-line 1)
+           ;; get any continuation lines
+           (while (and (looking-at "^[ \t]+") (< (point) header-end))
+             (forward-line 1))
+           (setq this-line-end (point-marker))
+           (setq simple-address-list
+                 (concat simple-address-list " "
+                         (mail-strip-quoted-names
+                          (buffer-substring this-line this-line-end))))
+           )
+         (erase-buffer)
+         (insert-string " ")
+         (insert-string simple-address-list)
+         (insert-string "\n")
+         ;; newline --> blank
+         (subst-char-in-region (point-min) (point-max) 10 ?  t)
+         ;; comma   --> blank
+         (subst-char-in-region (point-min) (point-max) ?, ?  t)
+         ;; tab     --> blank
+         (subst-char-in-region (point-min) (point-max)  9 ?  t)
+
+         (goto-char (point-min))
+         ;; tidyness in case hook is not robust when it looks at this
+         (while (re-search-forward "[ \t]+" header-end t) (replace-match " "))
+
+         (goto-char (point-min))
+         (let (recipient-address-list)
+           (while (re-search-forward " \\([^ ]+\\) " (point-max) t)
+             (backward-char 1)
+             (setq recipient-address-list
+                   (cons (buffer-substring (match-beginning 1) (match-end 1))
+                         recipient-address-list))
+             )
+           recipient-address-list)
+         )
+      (kill-buffer smtp-address-buffer))
+    ))
+
+(defun smtp-do-bcc (header-end)
+  "Delete BCC: and their continuation lines from the header area.
+There may be multiple BCC: lines, and each may have arbitrarily
+many continuation lines."
+  (let ((case-fold-search t))
+    (save-excursion
+      (goto-char (point-min))
+      ;; iterate over all BCC: lines
+      (while (re-search-forward "^BCC:" header-end t)
+       (delete-region (match-beginning 0) (progn (forward-line 1) (point)))
+       ;; get rid of any continuation lines
+       (while (and (looking-at "^[ \t].*\n") (< (point) header-end))
+         (replace-match ""))
+       )
+      ) ;; save-excursion
+    ) ;; let
+  )
+
+(provide 'smtp)
+
+;;; smtp.el ends here
diff --git a/lisp/smtpmail.el b/lisp/smtpmail.el
new file mode 100644 (file)
index 0000000..77a5947
--- /dev/null
@@ -0,0 +1,285 @@
+;;; smtpmail.el --- simple SMTP protocol (RFC 821) for sending mail
+
+;; Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+
+;; Author: Tomoji Kagatani <kagatani@rbc.ncl.omron.co.jp>
+;; Maintainer: Brian D. Carlstrom <bdc@ai.mit.edu>
+;; ESMTP support: Simon Leinen <simon@switch.ch>
+;; Keywords: mail
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; Send Mail to smtp host from smtpmail temp buffer.
+
+;; Please add these lines in your .emacs(_emacs).
+;;
+;;(setq send-mail-function 'smtpmail-send-it)
+;;(setq smtp-default-server "YOUR SMTP HOST")
+;;(setq smtp-service "smtp")
+;;(setq smtp-local-domain "YOUR DOMAIN NAME")
+;;(setq smtp-debug-info t)
+;;(autoload 'smtpmail-send-it "smtpmail")
+;;(setq user-full-name "YOUR NAME HERE")
+
+;; To queue mail, set smtpmail-queue-mail to t and use 
+;; smtpmail-send-queued-mail to send.
+
+
+;;; Code:
+
+(require 'smtp)
+(require 'sendmail)
+(require 'time-stamp)
+
+;;;
+
+(defcustom smtpmail-queue-mail nil 
+  "*Specify if mail is queued (if t) or sent immediately (if nil).
+If queued, it is stored in the directory `smtpmail-queue-dir'
+and sent with `smtpmail-send-queued-mail'."
+  :type 'boolean
+  :group 'smtp)
+
+(defcustom smtpmail-queue-dir "~/Mail/queued-mail/"
+  "*Directory where `smtpmail.el' stores queued mail."
+  :type 'directory
+  :group 'smtp)
+
+(defvar smtpmail-queue-index-file "index"
+  "File name of queued mail index,
+This is relative to `smtpmail-queue-dir'.")
+
+(defvar smtpmail-queue-index (concat smtpmail-queue-dir
+                                    smtpmail-queue-index-file))
+
+(defvar smtpmail-recipient-address-list nil)
+
+
+;;;
+;;;
+;;;
+
+(defun smtpmail-send-it ()
+  (require 'mail-utils)
+  (let ((errbuf (if mail-interactive
+                   (generate-new-buffer " smtpmail errors")
+                 0))
+       (tembuf (generate-new-buffer " smtpmail temp"))
+       (case-fold-search nil)
+       resend-to-addresses
+       delimline
+       (mailbuf (current-buffer)))
+    (unwind-protect
+       (save-excursion
+         (set-buffer tembuf)
+         (erase-buffer)
+         (insert-buffer-substring mailbuf)
+         (goto-char (point-max))
+         ;; require one newline at the end.
+         (or (= (preceding-char) ?\n)
+             (insert ?\n))
+         ;; Change header-delimiter to be what sendmail expects.
+         (goto-char (point-min))
+         (re-search-forward
+           (concat "^" (regexp-quote mail-header-separator) "\n"))
+         (replace-match "\n")
+         (backward-char 1)
+         (setq delimline (point-marker))
+;;       (sendmail-synch-aliases)
+         (if mail-aliases
+             (expand-mail-aliases (point-min) delimline))
+         (goto-char (point-min))
+         ;; ignore any blank lines in the header
+         (while (and (re-search-forward "\n\n\n*" delimline t)
+                     (< (point) delimline))
+           (replace-match "\n"))
+         (let ((case-fold-search t))
+           (goto-char (point-min))
+           (goto-char (point-min))
+           (while (re-search-forward "^Resent-to:" delimline t)
+             (setq resend-to-addresses
+                   (save-restriction
+                     (narrow-to-region (point)
+                                       (save-excursion
+                                         (end-of-line)
+                                         (point)))
+                     (append (mail-parse-comma-list)
+                             resend-to-addresses))))
+;;; Apparently this causes a duplicate Sender.
+;;;        ;; If the From is different than current user, insert Sender.
+;;;        (goto-char (point-min))
+;;;        (and (re-search-forward "^From:"  delimline t)
+;;;             (progn
+;;;               (require 'mail-utils)
+;;;               (not (string-equal
+;;;                     (mail-strip-quoted-names
+;;;                      (save-restriction
+;;;                        (narrow-to-region (point-min) delimline)
+;;;                        (mail-fetch-field "From")))
+;;;                     (user-login-name))))
+;;;             (progn
+;;;               (forward-line 1)
+;;;               (insert "Sender: " (user-login-name) "\n")))
+           ;; Don't send out a blank subject line
+           (goto-char (point-min))
+           (if (re-search-forward "^Subject:[ \t]*\n" delimline t)
+               (replace-match ""))
+           ;; Put the "From:" field in unless for some odd reason
+           ;; they put one in themselves.
+           (goto-char (point-min))
+           (if (not (re-search-forward "^From:" delimline t))
+               (let* ((login user-mail-address)
+                      (fullname (user-full-name)))
+                 (cond ((eq mail-from-style 'angles)
+                        (insert "From: " fullname)
+                        (let ((fullname-start (+ (point-min) 6))
+                              (fullname-end (point-marker)))
+                          (goto-char fullname-start)
+                          ;; Look for a character that cannot appear unquoted
+                          ;; according to RFC 822.
+                          (if (re-search-forward "[^- !#-'*+/-9=?A-Z^-~]"
+                                                 fullname-end 1)
+                              (progn
+                                ;; Quote fullname, escaping specials.
+                                (goto-char fullname-start)
+                                (insert "\"")
+                                (while (re-search-forward "[\"\\]"
+                                                          fullname-end 1)
+                                  (replace-match "\\\\\\&" t))
+                                (insert "\""))))
+                        (insert " <" login ">\n"))
+                       ((eq mail-from-style 'parens)
+                        (insert "From: " login " (")
+                        (let ((fullname-start (point)))
+                          (insert fullname)
+                          (let ((fullname-end (point-marker)))
+                            (goto-char fullname-start)
+                            ;; RFC 822 says \ and nonmatching parentheses
+                            ;; must be escaped in comments.
+                            ;; Escape every instance of ()\ ...
+                            (while (re-search-forward "[()\\]" fullname-end 1)
+                              (replace-match "\\\\\\&" t))
+                            ;; ... then undo escaping of matching parentheses,
+                            ;; including matching nested parentheses.
+                            (goto-char fullname-start)
+                            (while (re-search-forward 
+                                    "\\(\\=\\|[^\\]\\(\\\\\\\\\\)*\\)\\\\(\\(\\([^\\]\\|\\\\\\\\\\)*\\)\\\\)"
+                                    fullname-end 1)
+                              (replace-match "\\1(\\3)" t)
+                              (goto-char fullname-start))))
+                        (insert ")\n"))
+                       ((null mail-from-style)
+                        (insert "From: " login "\n")))))
+           ;; Insert an extra newline if we need it to work around
+           ;; Sun's bug that swallows newlines.
+           (goto-char (1+ delimline))
+           (if (eval mail-mailer-swallows-blank-line)
+               (newline))
+           ;; Find and handle any FCC fields.
+           (goto-char (point-min))
+           (if (re-search-forward "^FCC:" delimline t)
+               (mail-do-fcc delimline))
+           (if mail-interactive
+               (save-excursion
+                 (set-buffer errbuf)
+                 (erase-buffer))))
+         ;;
+         ;;
+         ;;
+         (setq smtpmail-recipient-address-list
+               (or resend-to-addresses
+                   (smtp-deduce-address-list tembuf (point-min) delimline)))
+
+         (smtp-do-bcc delimline)
+         ; Send or queue
+         (if (not smtpmail-queue-mail)
+             (if smtpmail-recipient-address-list
+                 (if (not (smtp-via-smtp
+                           smtpmail-recipient-address-list tembuf))
+                     (error "Sending failed; SMTP protocol error"))
+               (error "Sending failed; no recipients"))
+           (let* ((file-data (concat 
+                              smtpmail-queue-dir
+                              (time-stamp-strftime 
+                               "%02y%02m%02d-%02H%02M%02S")))
+                  (file-elisp (concat file-data ".el"))
+                  (buffer-data (create-file-buffer file-data))
+                  (buffer-elisp (create-file-buffer file-elisp))
+                  (buffer-scratch "*queue-mail*"))
+             (save-excursion
+               (set-buffer buffer-data)
+               (erase-buffer)
+               (insert-buffer tembuf)
+               (write-file file-data)
+               (set-buffer buffer-elisp)
+               (erase-buffer)
+               (insert (concat
+                        "(setq smtpmail-recipient-address-list '"
+                        (prin1-to-string smtpmail-recipient-address-list)
+                        ")\n"))                    
+               (write-file file-elisp)
+               (set-buffer (generate-new-buffer buffer-scratch))
+               (insert (concat file-data "\n"))
+               (append-to-file (point-min) 
+                               (point-max) 
+                               smtpmail-queue-index)
+               )
+             (kill-buffer buffer-scratch)
+             (kill-buffer buffer-data)
+             (kill-buffer buffer-elisp))))
+      (kill-buffer tembuf)
+      (if (bufferp errbuf)
+         (kill-buffer errbuf)))))
+
+(defun smtpmail-send-queued-mail ()
+  "Send mail that was queued as a result of setting `smtpmail-queue-mail'."
+  (interactive)
+  ;;; Get index, get first mail, send it, get second mail, etc...
+  (let ((buffer-index (find-file-noselect smtpmail-queue-index))
+       (file-msg "")
+       (tembuf nil))
+    (save-excursion
+      (set-buffer buffer-index)
+      (beginning-of-buffer)
+      (while (not (eobp))
+       (setq file-msg (buffer-substring (point) (save-excursion
+                                                  (end-of-line)
+                                                  (point))))
+       (load file-msg)
+       (setq tembuf (find-file-noselect file-msg))
+       (if smtpmail-recipient-address-list
+           (if (not (smtp-via-smtp smtpmail-recipient-address-list tembuf))
+               (error "Sending failed; SMTP protocol error"))
+         (error "Sending failed; no recipients"))  
+       (delete-file file-msg)
+       (delete-file (concat file-msg ".el"))
+       (kill-buffer tembuf)
+       (kill-line 1))      
+      (set-buffer buffer-index)
+      (save-buffer smtpmail-queue-index)
+      (kill-buffer buffer-index)
+      )))
+
+
+;;;
+
+(provide 'smtpmail)
+
+;;; smtpmail.el ends here
diff --git a/lisp/time-date.el b/lisp/time-date.el
deleted file mode 100644 (file)
index c40ddbe..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-;;; time-date.el --- Date and time handling functions
-;; Copyright (C) 1998,99 Free Software Foundation, Inc.
-
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;;     Masanobu Umeda <umerin@mse.kyutech.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:
-
-(require 'parse-time)
-
-(defun date-to-time (date)
-  "Convert DATE into time."
-  (condition-case ()
-      (apply 'encode-time (parse-time-string date))
-    (error (error "Invalid date: %s" date))))
-
-(defun time-to-seconds (time)
-  "Convert TIME to a floating point number."
-  (+ (* (car time) 65536.0)
-     (cadr time)
-     (/ (or (caddr time) 0) 1000000.0)))
-
-(defun seconds-to-time (seconds)
-  "Convert SECONDS (a floating point number) to an Emacs time structure."
-  (list (floor seconds 65536)
-       (floor (mod seconds 65536))
-       (floor (* (- seconds (ffloor seconds)) 1000000))))
-
-(defun time-less-p (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 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 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 (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)))))
-
-(defun subtract-time (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 date-to-day (date)
-  "Return the number of days between year 1 and DATE."
-  (time-to-days (date-to-time date)))
-
-(defun days-between (date1 date2)
-  "Return the number of days between DATE1 and DATE2."
-  (- (date-to-day date1) (date-to-day date2)))
-
-(defun date-leap-year-p (year)
-  "Return t if YEAR is a leap year."
-  (or (and (zerop (% year 4))
-          (not (zerop (% year 100))))
-      (zerop (% year 400))))
-
-(defun time-to-day-in-year (time)
-  "Return the day number within the year of the date month/day/year."
-  (let* ((tim (decode-time time))
-        (month (nth 4 tim))
-        (day (nth 3 tim))
-        (year (nth 5 tim))
-        (day-of-year (+ day (* 31 (1- month)))))
-    (when (> month 2)
-      (setq day-of-year (- day-of-year (/ (+ 23 (* 4 month)) 10)))
-      (when (date-leap-year-p year)
-       (setq day-of-year (1+ day-of-year))))
-    day-of-year))
-
-(defun time-to-days (time)
-  "The number of days between the Gregorian date 0001-12-31bce and TIME.
-The Gregorian date Sunday, December 31, 1bce is imaginary."
-  (let* ((tim (decode-time time))
-        (month (nth 4 tim))
-        (day (nth 3 tim))
-        (year (nth 5 tim)))
-    (+ (time-to-day-in-year time)      ;       Days this year
-       (* 365 (1- year))               ;       + Days in prior years
-       (/ (1- year) 4)                 ;       + Julian leap years
-       (- (/ (1- year) 100))           ;       - century years
-       (/ (1- year) 400))))            ;       + Gregorian leap years
-
-(defun safe-date-to-time (date)
-  "Parse DATE and return a time structure.
-If DATE is malformed, a zero time will be returned."
-  (condition-case ()
-      (date-to-time date)
-    (error '(0 0))))
-
-(provide 'time-date)
-
-;;; time-date.el ends here
diff --git a/lisp/uudecode.el b/lisp/uudecode.el
deleted file mode 100644 (file)
index 299f83b..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-;;; uudecode.el -- elisp native uudecode
-;; Copyright (c) 1998 by Shenghuo Zhu <zsh@cs.rochester.edu>
-
-;; Author: Shenghuo Zhu <zsh@cs.rochester.edu>
-;; $Revision: 5.7 $
-;; Keywords: uudecode
-
-;; This file is not part of GNU Emacs, but the same permissions
-;; apply.
-
-;; GNU Emacs is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
-
-;;; Commentary:
-
-;;     Lots of codes are stolen from mm-decode.el, gnus-uu.el and
-;;     base64.el
-
-;;; Code:
-
-(if (not (fboundp 'char-int))
-    (fset 'char-int 'identity))
-
-(defvar uudecode-decoder-program "uudecode"
-  "*Non-nil value should be a string that names a uu decoder.
-The program should expect to read uu data on its standard
-input and write the converted data to its standard output.")
-
-(defvar uudecode-decoder-switches nil
-  "*List of command line flags passed to the command named by uudecode-decoder-program.")
-
-(defconst uudecode-alphabet "\040-\140")
-
-(defconst uudecode-begin-line "^begin[ \t]+[0-7][0-7][0-7][ \t]+\\(.*\\)$")
-(defconst uudecode-end-line "^end[ \t]*$")
-
-(defconst uudecode-body-line
-  (let ((i 61) (str "^M"))
-    (while (> (setq i (1- i)) 0)
-      (setq str (concat str "[^a-z]")))
-    (concat str ".?$")))
-
-(defvar uudecode-temporary-file-directory
-  (cond ((fboundp 'temp-directory) (temp-directory))
-       ((boundp 'temporary-file-directory) temporary-file-directory)
-       ("/tmp")))
-
-;;;###autoload
-(defun uudecode-decode-region-external (start end &optional file-name)
-  "uudecode region between START and END with external decoder.
-
-If FILE-NAME is non-nil, save the result to FILE-NAME."
-  (interactive "r\nP")
-  (let ((cbuf (current-buffer)) tempfile firstline work-buffer status)
-    (save-excursion
-      (goto-char start)
-      (when (re-search-forward uudecode-begin-line nil t)
-       (forward-line 1)
-       (setq firstline (point))
-       (cond ((null file-name))
-             ((stringp file-name))
-             (t
-              (setq file-name (read-file-name "File to Name:"
-                                              nil nil nil
-                                              (match-string 1)))))
-       (setq tempfile (if file-name
-                          (expand-file-name file-name)
-                        (make-temp-name
-                         ;; /tmp/uu...
-                         (expand-file-name
-                          "uu" uudecode-temporary-file-directory))))
-       (let ((cdir default-directory) default-process-coding-system)
-         (unwind-protect
-             (progn
-               (set-buffer (setq work-buffer
-                                 (generate-new-buffer " *uudecode-work*")))
-               (buffer-disable-undo work-buffer)
-               (insert "begin 600 " (file-name-nondirectory tempfile) "\n")
-               (insert-buffer-substring cbuf firstline end)
-               (cd (file-name-directory tempfile))
-               (apply 'call-process-region
-                      (point-min)
-                      (point-max)
-                      uudecode-decoder-program
-                      nil
-                      nil
-                      nil
-                      uudecode-decoder-switches))
-           (cd cdir) (set-buffer cbuf)))
-       (if (file-exists-p tempfile)
-           (unless file-name
-             (goto-char start)
-             (delete-region start end)
-             (let (format-alist)
-               (insert-file-contents-literally tempfile)))
-         (message "Can not uudecode")))
-      (and work-buffer (kill-buffer work-buffer))
-      (ignore-errors (or file-name (delete-file tempfile))))))
-
-(if (string-match "XEmacs" emacs-version)
-    (defalias 'uudecode-insert-char 'insert-char)
-  (defun uudecode-insert-char (char &optional count ignored buffer)
-    (if (or (null buffer) (eq buffer (current-buffer)))
-       (insert-char char count)
-      (with-current-buffer buffer
-       (insert-char char count)))))
-
-;;;###autoload
-
-(defun uudecode-decode-region (start end &optional file-name)
-  "uudecode region between START and END.
-If FILE-NAME is non-nil, save the result to FILE-NAME."
-  (interactive "r\nP")
-  (let ((work-buffer nil)
-       (done nil)
-       (counter 0)
-       (remain 0)
-       (bits 0)
-       (lim 0) inputpos
-       (non-data-chars (concat "^" uudecode-alphabet)))
-    (unwind-protect
-       (save-excursion
-         (goto-char start)
-         (when (re-search-forward uudecode-begin-line nil t)
-           (cond ((null file-name))
-                 ((stringp file-name))
-                 (t
-                  (setq file-name (expand-file-name
-                                   (read-file-name "File to Name:"
-                                                   nil nil nil
-                                                   (match-string 1))))))
-           (setq work-buffer (generate-new-buffer " *uudecode-work*"))
-           (buffer-disable-undo work-buffer)
-           (forward-line 1)
-           (skip-chars-forward non-data-chars end)
-           (while (not done)
-             (setq inputpos (point))
-             (setq remain 0 bits 0 counter 0)
-             (cond
-              ((> (skip-chars-forward uudecode-alphabet end) 0)
-               (setq lim (point))
-               (setq remain
-                     (logand (- (char-int (char-after inputpos)) 32) 63))
-               (setq inputpos (1+ inputpos))
-               (if (= remain 0) (setq done t))
-               (while (and (< inputpos lim) (> remain 0))
-                 (setq bits (+ bits
-                               (logand
-                                (-
-                                 (char-int (char-after inputpos)) 32) 63)))
-                 (if (/= counter 0) (setq remain (1- remain)))
-                 (setq counter (1+ counter)
-                       inputpos (1+ inputpos))
-                 (cond ((= counter 4)
-                        (uudecode-insert-char
-                         (lsh bits -16) 1 nil work-buffer)
-                        (uudecode-insert-char
-                         (logand (lsh bits -8) 255) 1 nil work-buffer)
-                        (uudecode-insert-char (logand bits 255) 1 nil
-                                        work-buffer)
-                        (setq bits 0 counter 0))
-                       (t (setq bits (lsh bits 6)))))))
-             (cond
-                (done)
-                ((> 0 remain)
-                 (error "uucode line ends unexpectly")
-                 (setq done t))
-                ((and (= (point) end) (not done))
-                 ;(error "uucode ends unexpectly")
-                 (setq done t))
-                ((= counter 3)
-                 (uudecode-insert-char (logand (lsh bits -16) 255) 1 nil
-                                 work-buffer)
-                 (uudecode-insert-char (logand (lsh bits -8) 255) 1 nil
-                                 work-buffer))
-                ((= counter 2)
-                 (uudecode-insert-char (logand (lsh bits -10) 255) 1 nil
-                                 work-buffer)))
-             (skip-chars-forward non-data-chars end))
-           (if file-name
-               (save-excursion
-                 (set-buffer work-buffer)
-                 (write-file file-name))
-             (or (markerp end) (setq end (set-marker (make-marker) end)))
-             (goto-char start)
-             (insert-buffer-substring work-buffer)
-             (delete-region (point) end))))
-      (and work-buffer (kill-buffer work-buffer)))))
-
-(provide 'uudecode)
-
-;;; uudecode.el ends here
index b203277..4a6b8a0 100755 (executable)
--- a/make.bat
+++ b/make.bat
@@ -22,10 +22,6 @@ rem
 rem which will allow the batch file to accept an unlimited number of\r
 rem parameters.\r
 \r
-rem Clear PWD so emacs doesn't get confused\r
-set GNUS_PWD_SAVE=%PWD%\r
-set PWD=\r
-\r
 if "%1" == "" goto usage\r
 \r
 cd lisp\r
@@ -58,7 +54,4 @@ echo                    eg. d:\emacs\19.34
 echo        copy indicates that the compiled files should be copied to your\r
 echo             emacs lisp, info, and etc directories\r
 \r
-rem Restore PWD so whoever called this batch file doesn't get confused\r
-set PWD=%GNUS_PWD_SAVE%\r
-set GNUS_PWD_SAVE=\r
 :end\r
diff --git a/readme b/readme
deleted file mode 100644 (file)
index e3064ef..0000000
--- a/readme
+++ /dev/null
@@ -1,52 +0,0 @@
-This package contains a beta version of Gnus.  The lisp directory
-contains the source lisp files, and the texi directory contains a
-draft of the Gnus info pages.
-
-To use Gnus you first have to unpack the files, which you've obviously
-done, because you are reading this.
-
-You should definitely byte-compile the source files. To do that, you
-can simply say "./configure; make" in this directory.  If you are
-using XEmacs, you *must* say "make EMACS=xemacs".  In that case you
-may also want to pull down the package of nice glyphs from
-<URL:http://www.gnus.org/etc.tar.gz>.  It should be installed
-into the "gnus-5.4.53/etc" directory.
-
-Then you have to tell Emacs where Gnus is. You might put something
-like
-
-   (setq load-path (cons (expand-file-name "~/gnus-5.4.53/lisp") load-path))
-
-in your .emacs file, or wherever you keep such things.  
-
-To enable reading the Gnus manual, you could say something like:
-
-  (setq Info-default-directory-list 
-        (cons "~/gnus-5.4.53/texi" Info-default-directory-list))
-
-Note that Gnus and GNUS can't coexist in a single Emacs. They both use
-the same function and variable names.  If you have been running GNUS
-in your Emacs, you should probably exit that Emacs and start a new one
-to fire up Gnus.
-
-Gnus does absolutely not work with anything older than Emacs 19.33 or
-XEmacs 19.14.  So you definitely need a new Emacs.
-
-Then you do a `M-x gnus', and everything should... uhm... it should
-work, but it might not. Set `debug-on-error' to t, and mail me the
-backtraces, or, better yet, find out why Gnus does something wrong,
-fix it, and send me the diffs. :-)
-
-There are four main things I want your help and input on:
-
-1) Startup. Does everything go smoothly, and why not?
-
-2) Any errors while you read news normally?
-
-3) Any errors if you do anything abnormal?
-
-4) Features you do not like, or do like, but would like to tweak a
-   bit, and features you would like to see.
-
-Send any comments and all your bug fixes/complaints to
-`bugs@gnus.org'. 
index 893bd16..fd2879c 100644 (file)
-1999-07-07 10:26:59  Robin S. Socha  <robin@socha.net>
+1998-08-27 07:29:17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Mail Folders): Addition.
+
+1998-08-25 08:06:28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Posting Styles): Document this-is.
+       (Virtual Groups): Addition.
+
+1998-08-18 00:30:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Article Hiding): Addition.
+
+1998-08-16 14:53:45  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (NNTP): Reinstated.
+       (Asynchronous Fetching): No header prefetch.
 
-       * gnus.texi (Scoring Tips): Typo.
+1998-08-15 13:01:41  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-07-06 11:41:59  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.texi (Summary Score Commands): Change.
 
-       * gnus.texi (Mail Source Specifiers): Fix.
-       (Mail Source Customization): Deleted obsolete vars.
+1998-08-14 01:31:36  Simon Josefsson  <jas@pdc.kth.se>
 
-1999-07-05 05:16:55  Laura Conrad  <lconrad@world.std.com>
+       * gnus.texi (Posting Styles): New 'body style.
 
-       * gnus.texi (Mail in a Newsreader): Rewrite.
+1998-08-13 21:17:00  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-07-04 04:33:50  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.texi (Paging the Article): Addition.
 
-       * gnus.texi (Posting Styles): Fix.
-       (Mail in a Newsreader): New.
+1998-08-13 00:13:47  Simon Josefsson  <jas@pdc.kth.se>
 
-1999-06-13 02:29:22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.texi (Mail Group Commands): Typo.
 
-       * gnus.texi (MIME Commands): Addition.
-       (Article Miscellania): New.
-       (Customizing Articles): Addition.
+1998-08-12 21:28:09  Simon Josefsson  <jas@pdc.kth.se>
 
-1999-06-12 00:13:25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.texi (Article Caching): gnus-cacheable-groups.
+       (Newest Features): remove gnus-cacheable-groups.
 
-       * gnus.texi (Comparing Mail Backends): Slight edits.
+1998-08-12 22:01:12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-06-12 00:13:20  Karl Kleinpaste  <karl@justresearch.com>
+       * message.texi (Forwarding): Addition.
 
-       * gnus.texi (Comparing Mail Backends): New.
+1998-08-11 20:33:53  Justin Zaglio  <justin@caxton.com>
 
-1999-06-11 21:47:22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.texi (Group Maintenance): Fix.
 
-       * gnus.texi (Group Score): Doc fix.
-       (The Active File): Addition.
+1998-08-11 11:44:20  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Group Maintenance): Fix.
+
+1998-08-10 08:59:25  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Article Highlighting): Addition.
+       (Article Fontisizing): Fix.
+       (Article Hiding): Change.
+       (Article Hiding): Fix.
+
+1998-08-09 15:32:24  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Hiding Headers): Fix.
+       (Article Hiding): Addition.
        (Document Groups): Addition.
 
-1999-04-18  Didier Verna  <verna@inf.enst.fr>
+1998-08-08 06:06:37  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus.texi (Article treatment): document the new variable
-       `gnus-article-date-lapsed-new-header'.
+       * gnus.texi (Fancy Mail Splitting): Change.
 
-1999-04-26  Robert Bihlmeyer  <robbe@orcus.priv.at>
+1998-08-06 02:12:04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-       * gnus.texi (Posting Styles): Typo.
+       * gnus.texi: De-legalize.
 
-1999-04-18 12:46:33  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.texi: De-legalize.
 
-       * gnus.texi (Summary Score Commands): Typo.
-       (Choosing a Mail Backend): Addition.
+       * gnus.texi (Summary Maneuvering): Fix.
 
-1999-04-18 09:24:51  Yoshiki Hayashi  <g740685@komaba.ecc.u-tokyo.ac.jp>
+1998-07-21 17:51  Simon Josefsson  <jas@pdc.kth.se>
 
-       * gnus.texi (Startup Variables): Fix.
+       * gnus.texi (Splitting Mail): junk is fancy splitting only
 
-1999-04-18 09:12:28  Starback  <starback@ling.uu.se>
+       * gnus.texi (Fancy Mail Splitting): warn about junk
 
-       * gnus.texi (Subscription Methods): Typo.
+1998-07-27 02:28:33  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
-1999-04-18 08:22:27  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.texi (Topic Commands): Fix.
 
-       * gnus.texi (Little Disk Space): Addition.
+1998-07-27 02:23:17  Robert Bihlmeyer  <robbe@orcus.priv.at>
 
-1999-03-25  Erik Toubro Nielsen  <erik@ifad.dk>
+       * gnus.texi (Score Decays): Fix.
 
-       * gnus.texi (gnus-thread-sort-functions). 'reverse' => 'not'
+Sun Jul 12 04:03:27 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1999-04-17 10:21:01  Jack Twilley  <jmt+usenet@nycap.rr.com>
+       * gnus.texi (Home Score File): Addition.
 
-       * gnus.texi (Fancy Mail Splitting): Addition.
+Fri Jul 10 04:26:23 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1999-04-07 06:13:08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.texi (NNTP): Addition.
 
-       * gnus.texi (Gnus Development): New.
+Sat Jul  4 14:24:29 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1999-03-06 20:12:50  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.texi (Gnus Utility Functions): Addition.
 
-       * gnus.texi (Generic Marking Commands): New.
+Thu Jul  2 11:37:51 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1999-03-01 16:41:42  Rob Browning  <rlb@cs.utexas.edu>
+       * gnus.texi (Posting Styles): Ununcommented.
 
-       * gnus.texi (Score Variables): Clarify.
+Wed Jul  1 17:57:54 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1999-02-26  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+       * gnus.texi (Topic Commands): Addition.
 
-       * gnus.texi: Add ',' after @xrefs.
+Tue Jun 30 16:11:27 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1999-02-26 20:54:34  Jason R. Mastaler  <jason@4b.org>
+       * gnus.texi (Topic Commands): Addition.
 
-       * gnus.texi (Article Date): Added joke by Colin Rafferty
-       (colin@xemacs.org).
+Mon Jun 29 21:46:13 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1999-02-26 08:26:10  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.texi (Article Keymap): Typo.
 
-       * gnus.texi (Mail Source Specifiers): Fix.
+Sun Jun 28 17:41:10 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-Thu Feb 25 00:28:49 1999  Shenghuo ZHU  <zsh@cs.rochester.edu>
+       * gnus.texi (Formatting Fonts): Typo fix.
 
-       * gnus.texi (Category Syntax): Typo fix.
+Sat Jun 27 04:37:14 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1999-02-21 11:42:54  Vladimir Volovich  <vvv@vvv.vsu.ru>
+       * gnus.texi (Mail-To-News Gateways): Addition.
+       (Mail-To-News Gateways): Typo.
 
-       * Makefile.in (.texi): Fix check for MAKEINFO.
+Fri Jun 26 13:33:00 1998  Yoshiki Hayashi  <g740685@komaba.ecc.u-tokyo.ac.jp>
 
-1999-02-20 17:33:55  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.texi (Summary Buffer Lines): Typo fix.
 
-       * gnus.texi (Mail Source Specifiers): Addition.
+Fri Jun 26 05:53:22 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1999-02-11 19:19:02  Carsten Leonhardt  <leo@arioch.oche.de>
+       * gnus.texi (Score File Format): Addition.
+       (Mode Line Formatting): New.
+       (Summary Buffer Mode Line): Addition.
 
-       * gnus.texi (Mail Source Specifiers): Document maildir.
+Thu Jun 25 11:24:14 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1999-02-09 16:21:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.texi (Summary Score Commands): Deletia.
 
-       * gnus.texi (Charsets): New.
+Wed Jun 24 00:37:32 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1999-02-04 03:45:15  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.texi (Auto Save): Addition.
+       (Mail-To-News Gateways): Addition.
+       (NNTP): Addition.
 
-       * emacs-mime.texi (Conversion): New.
+Wed Jun  3 03:30:47 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1999-02-03 03:04:18  Miguel de Icaza  <miguel@nuclecu.unam.mx>
+       * message.texi (Message Headers): Addition.
 
-       * gnus.texi (Fetching Mail): Typo fix.
+       * gnus.texi (Compatibility): Addition.
 
-1999-02-02 22:28:42  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Tue May 19 02:44:31 1998  Mike Pullen  <mpullen@midwest.net>
 
-       * gnus.texi (Mail Source Specifiers): Addition.
+       * gnus.texi.orig: Typo fixes.
 
-1999-02-01 21:05:18  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Wed Apr 29 21:52:28 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Article Hiding): Addition.
+       * gnus.texi (Key Index): Untabified.
+       (Group Parameters): Fix.
 
-1999-01-28 08:08:28  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Apr 26 15:32:45 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Washing Mail): Addition.
+       * gnus.texi (Summary Post Commands): Ref to Message.
 
-1999-01-27 14:30:39  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.texi (Various Message Variables): Deletia.
 
-       * gnus.texi (Article Washing): Addition.
+Fri Apr 24 16:00:40 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1999-01-25 04:24:01  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.texi (Unread Articles): Typo.
+       (Summary Buffer Lines): Fix.
+       (Foreign Groups): Addition.
+       (Posting Server): Addition.
 
-       * message.texi (MIME): New.
+Sat Mar 28 08:57:46 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Mail Sources): New.
-       (Mail Source Specifiers): New.
-       (Mail Source Customization): New.
-       (Fetching Mail): New.
+       * gnus.texi (Example Methods): Addition.
 
-1999-01-23 09:47:16  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Thu Mar 26 15:47:54 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Article Washing): Removed.
-       (Customizing Articles): Addition.
+       * gnus.texi (Limiting): Mention `/ *'.
 
-1999-01-16 20:36:48  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Thu Mar 19 13:02:20 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Customizing Articles): Rewrite.
-       Remove mention of gnus-article-display-hook.
+       * gnus.texi (NNTP): Addition.
+       Removed spurious white space.
 
-1999-01-12 07:14:12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Fri Mar 13 21:05:47 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (To From Newsgroups): Addition.
+       * gnus.texi (Quassia Gnus): Fix.
+       (Agent Expiry): Addition.
 
-1999-01-03 13:54:51  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Mar  8 13:56:37 1998  James Troup  <J.J.Troup@scm.brad.ac.uk>
 
-       * gnus.texi (Group Agent Commands): Addition.
+       * gnus.texi (Group Highlighting): Removed old example.
 
-1998-12-19 23:29:50  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Mar  8 00:19:24 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Splitting Mail): Addition.
+       * gnus.texi (Group Info): Fix ".".
 
-1998-12-13 08:54:07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Mar  7 17:09:49 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * message.texi (Insertion): Add.
+       * gnus.texi: Took direntries out again, since makeinfo doesn't
+       understand them.
+       (Agent Expiry): New.
+       (Quassia Gnus): New.
 
-1998-12-03 13:34:48  James Troup  <james@nocrew.org>
+Sat Mar  7 16:14:10 1998  Dan Christensen  <jdc@chow.mat.jhu.edu>
 
-       * gnus.texi (MIME Commands): Typo fix.
+       * gnus.texi (Group Parameters): Mention add-to-list.
 
-1998-12-03  Didier Verna  <verna@inf.enst.fr>
+Sat Feb 28 14:21:12 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Group Parameters): update for the posting-style group
-       parameter.
+       * gnus.texi (NNTP): Addition.
 
-1998-12-02 01:04:22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-03-01  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
 
-       * gnus.texi (Emacsen): Addition.
-       (Picon Useless Configuration): Addition.
+       * gnus.texi (Easy Picons): Removed references to
+       `gnus-group-display-picons'.
+       (Hard Picons): Ditto.
 
-1998-12-01 00:27:04  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+1998-03-01  Kim-Minh Kaplan  <KimMinh.Kaplan@utopia.eunet.fr>
 
-       * emacs-mime.texi (rfc2045): New.
+       * gnus.texi (Easy Picons): Removed references to
+       `gnus-group-display-picons'.
+       (Hard Picons): Ditto.
 
-1998-11-29 00:03:43  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Mon Feb 23 18:05:09 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * emacs-mime.texi (Composing): New chapter.
+       * gnus.texi: Direntry not handled by Emacs 19.34.
 
-1998-11-25  Karl Eichwalder  <ke@gnu.franken.de>
+1998-02-21  SL Baur  <steve@altair.xemacs.org>
 
-       * Makefile.in (install): Remove emacs-info, add emacs-mime.
+       * gnus.texi: Add a direntry field.
+       * message.texi: Ditto.  (Data taken from Emacs 20.2 info/dir).
 
-1998-11-25 10:56:08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Feb 22 03:24:43 1998  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (To From Newsgroups): Addition.
-       (Anything Groups): Addition.
+       * 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.
-       (MIME Commands): Addition.
 
-1998-11-19 04:05:15  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * message.texi (Various Commands): Add.
 
-       * gnus.texi (Really Various Summary Commands): Addition.
+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.
 
-1998-11-18 00:52:46  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Thu May  1 14:06:57 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (MIME Commands): Addition.
+       * 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.
 
-1998-11-07 17:18:07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Wed Mar 12 06:57:14 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Gnus Reference Guide): Renamed.
+       * gnus.texi (Various Various): Addition.
 
-1998-10-26 22:03:08  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sat Mar  8 03:41:47 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Article Washing): Fix.
-       (MIME Commands): Change.
+       * gnus.texi (Group Parameters): Added example.
+       (Duplicates): Fix.
 
-1998-10-25 01:51:56  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Fri Mar  7 10:49:43 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Headers): Addition.
+       * Makefile: New "install" target.
 
-1998-10-24 08:37:12  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Thu Mar  6 08:01:37 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Summary Buffer Lines): Addition.
-       (To): New.
-       (To): Addition.
+       * gnus.texi (Mail and Procmail): Fix.
 
-1998-10-15 18:15:34  Simon Josefsson  <jas@pdc.kth.se>
+Sun Mar  2 02:08:40 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Group Info): Must be list of ranges.
+       * gnus.texi (Startup Files): Addition.
+       (Score File Format): Fix.
 
-1998-10-19 01:27:26  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Fri Feb 28 23:23:31 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Article Washing): Addition.
+       * 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.
 
-1998-10-18 00:20:58  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Mon Feb 10 07:18:16 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Changing Servers): Addition.
+       * gnus.texi (Article Commands): Addition.
 
-1998-10-17 21:34:57  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Mon Feb  3 19:59:10 1997  Paul Franklin  <paul@cs.washington.edu>
 
-       * gnus.texi (Windows Configuration): Addition.
+       * gnus-group.el (gnus-group-edit-group): Allow editing of bad
+       groups.
 
-1998-10-01 07:55:35  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Wed Feb  5 02:00:46 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Splitting Mail): Fix.
-       (Washing Mail): Fix.
+       * message.texi (Mail Variables): Change.
 
-1998-09-30 05:54:45  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Tue Feb  4 02:33:31 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * message.texi (Mail Aliases): New.
+
+       * gnus.texi (Splitting Mail): Addition.
+
+Mon Feb  3 07:31:47 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Mode Lines): Addition.
+
+Mon Jan 27 17:51:29 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Highlighting and Menus): Removed
+       `gnus-display-type'.
+
+Sat Jan 25 08:09:30 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (The Active File): Addition.
+
+Fri Jan 24 05:07:28 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Summary Mail Commands): Addition.
+       (Required Backend Functions): Deletia.
+       (Article Washing): Addition.
+       (Summary Mail Commands): Addition.
+
+Mon Jan 20 22:19:40 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Followups To Yourself): Fix.
+
+Fri Jan 17 00:55:51 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (NoCeM): Update.
+
+Wed Jan 15 02:23:03 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Mail Group Commands): Fix.
+
+Tue Jan  7 09:36:36 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Summary Buffer Lines): Correction.
+
+Mon Jan  6 22:49:12 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (NoCeM): Addition.
+
+Fri Jan  3 18:13:02 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * message.texi (Various Commands): Addition.
+
+Thu Jan  2 16:12:27 1997  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Optional Backend Functions): Fix.
+
+Mon Dec 16 13:53:28 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Exiting the Summary Buffer): Update.
+
+Fri Dec 13 01:04:41 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Limiting): Addition.
+
+Sat Dec  7 21:10:23 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Example Methods): Addition.
+
+Fri Dec  6 12:38:14 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Group Parameters): Update.
+
+1996-11-30  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Terminology): Addition.
+
+Wed Nov 27 03:13:05 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
        * gnus.texi (Selecting a Group): Addition.
 
-1998-09-13 08:58:56  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Tue Nov 26 12:42:47 1996  Martin Buchholz  <mrb@eng.sun.com>
+
+       * message.texi: Typo fixes and stuff.
+
+Thu Nov 21 17:45:57 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Canceling and Superseding): Fix.
 
-       * dir (File): Updated.
+Wed Nov 20 15:42:36 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-1998-09-12 08:53:05  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+       * gnus.texi (New Groups): Addition.
+       (Summary Sorting): Addition.
 
-       * emacs-mime.texi: New file.
+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.
 
-1998-09-11 08:52:50  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Wed Nov  6 03:52:05 1996  C. R. Oldham  <cro@nca.asu.edu>
 
-       * gnus.texi (Group Score Commands): Fix.
-       (Saving Articles): Fix.
-       (Agent Expiry): Fix.
-       (Using MIME): Change.
+       * Makefile (.texi.dvi): Fix rule.
 
-1998-09-10 03:19:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Tue Nov  5 10:45:39 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
-       * gnus.texi (Windows Configuration): Addition.
+       * gnus.texi (Other Decode Variables): Addition.
+       (Mail-like Backends): New.
 
-1998-09-06  Mike McEwan  <mike@lotusland.demon.co.uk>
+Tue Nov  5 06:41:46 1996  Hrvoje Niksic  <hniksic@srce.hr>
 
-       * gnus.texi (Category Syntax): Added doc about agent categories
-       and download scoring.
+       * gnus.texi (Score File Format): Added warning.
 
-1998-09-05 17:36:14  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Mon Oct 28 15:50:08 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
 
-       * gnus.texi (Sorting Groups): Change.
-       (Various Summary Stuff): Addition.
+       * gnus.texi (Startup Variables): Addition.
 
-1998-09-04 00:40:07  David S. Goldberg  <dsg@mitre.org>
+Fri Oct 25 09:04:59 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
 
-       * gnus.texi (Article Hiding): Verify.
+       * gnus.texi (Summary Mail Commands): Addition.
 
-1998-08-31 11:46:57  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Wed Oct 23 08:28:29 1996  Hrvoje Niksic  <hniksic@srce.hr>
 
-       * gnus.texi (Mail Folders): Addition.
+       * 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.
 
-1998-08-27 07:29:17  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+Sun Aug 18 18:06:49 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
 
-       * gnus.texi (Mail Folders): Addition.
+       * gnus.texi (Web Searches): Change and addition.
+
+Sat Aug 17 22:24:34 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Startup Files): Addition.
+       (Anything Groups): Addition.
+
+Thu Aug 15 17:59:12 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Followups To Yourself): Addition.
+       (Setting Process Marks): Addition.
+       (Process/Prefix): Addition.
+       (Startup Files): Addition.
+       (Mail-To-News Gateways): New.
+
+Wed Aug 14 15:02:14 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Home Score File): Fix.
+       (Various Various): New.
+
+Tue Aug 13 10:38:47 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Error Messaging): New.
+       (Mail Backend Variables): Fix.
+       (Foreign Groups): Added references.
+       (Sorting Groups): Addition.
+
+Sun Aug 11 02:52:37 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (User-Defined Specs): Correction.
+       (Unavailable Servers): Addition.
+       (Moderation): New.
+       (Summary Mail Commands): Addition.
+       (Crosspost Handling): Addition.
+
+Sat Aug 10 00:13:39 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Summary Buffer Lines): Correction.
+       (Top): Name fix.
+       (Compilation ): Addition.
+       (Group Parameters): Addition.
+       (Troubleshooting): Addition.
+
+Fri Aug  9 07:17:59 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Selecting a Group): Addition.
+       (Score Decays): New.
+       (Score File Format): Addition.
+       (Changing Servers): Addition.
+       (Selecting a Group): Addition.
+       (Really Various Summary Commands): Addition.
+
+Thu Aug  8 05:39:31 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Read Articles): Addition.
+       (Foreign Groups): Addition.
+       (User-Defined Specs): Separated.
+       (Formatting Fonts): Ditto.
+       (Advanced Formatting): New.
+       (Formatting Basics): Addition.
+       (Formatting Variables): Split.
+
+Wed Aug  7 22:00:56 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.texi (Hooking New Backends Into Gnus): New node.
+
+Wed Aug  7 01:02:08 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Setting Marks): Addition.
+       (Formatting Variables): Addition.
+
+Mon Aug  5 20:20:42 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Formatting Variables): Addition.
+
+Sun Aug  4 07:15:28 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Score File Format): Addition.
+       (Adaptive Scoring): Addition.
+
+Sat Aug  3 17:35:36 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Group Parameters): Addition.
+       (Home Score File): New.
+       (Topic Parameters): New.
+
+Wed Jul 31 15:34:12 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (are): Fix.
+
+Wed Jul 31 15:32:57 1996  David S. Goldberg  <dsg@linus.mitre.org>
+
+       * gnus.texi (buffer-name): Addition.
+
+Fri Aug  2 00:32:39 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Pick and Read): Addition.
+       (Article Hiding): Addition.
+       (Article Signature): Made into own node.
+
+Thu Aug  1 00:25:41 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * message.texi (Wide Reply): Addition.
+       (Bouncing): Addition.
+
+       * gnus.texi (Crosspost Handling): Made into own node.
+       (Duplicate Suppression): New.
+       (Document Server Internals): New.
+       (Changing Servers): New.
+
+Wed Jul 31 15:37:44 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi: Fix
+
+Mon Jul 29 10:12:24 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Misc Article): Addition.
+       (Advanced Scoring Tips): New.
+       (Advanced Scoring Example): New.
+       (Advanced Scoring Syntax): New.
+       (Advanced Scoring): New.
diff --git a/texi/Makefile b/texi/Makefile
deleted file mode 100644 (file)
index ea5ef8f..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-TEXI2DVI=texi2dvi
-EMACS=emacs
-MAKEINFO=$(EMACS) -batch -q -no-site-file
-INFOSWI=-l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer
-XINFOSWI=-l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer
-LATEX=latex
-DVIPS=dvips
-PERL=perl
-INFODIR=/usr/local/info
-
-all: gnus message
-
-most: texi2latex.elc latex latexps
-
-.SUFFIXES: .texi .dvi .ps
-
-.texi:
-       $(MAKEINFO) -eval '(find-file "$<")' $(XINFOSWI)
-
-dvi: gnus.dvi message.dvi
-
-.texi.dvi :
-       $(PERL) -n -e 'print unless (/\@iflatex/ .. /\@end iflatex/)' $< > gnustmp.texi
-       $(TEXI2DVI) gnustmp.texi
-       cp gnustmp.dvi $*.dvi
-       rm gnustmp.*
-
-refcard.dvi: refcard.tex gnuslogo.refcard gnusref.tex
-       $(LATEX) refcard.tex
-
-clean:
-       rm -f gnus.*.bak *.ky *.cp *.fn *.cps *.kys *.log *.aux *.dvi *.vr \
-       *.tp *.toc *.pg gnus.latexi *.aux *.[cgk]idx \
-       gnus.ilg gnus.ind gnus.[cgk]ind gnus.idx \
-       gnus.tmptexi *.tmplatexi gnus.tmplatexi1 texput.log *.orig *.rej \
-       gnus.latexi*~* tmp/*.ps xface.tex picons.tex smiley.tex *.latexi
-
-makeinfo: 
-       makeinfo -o gnus gnus.texi      
-       makeinfo -o message message.texi        
-
-texi2latex.elc: texi2latex.el
-       $(EMACS) -batch -l bytecomp --eval '(byte-compile-file "texi2latex.el")'
-
-latex: gnus.texi texi2latex.elc
-       $(EMACS) -batch -q -no-site-file gnus.texi -l ./texi2latex.elc -f latexi-translate
-
-latexps: 
-       make texi2latex.elc
-       rm -f gnus.aux
-       egrep -v "label.*Index|chapter.*Index" gnus.latexi > gnus.tmplatexi1
-       $(LATEX) gnus.tmplatexi1
-       ./splitindex
-       makeindex -o gnus.kind gnus.kidx
-       makeindex -o gnus.cind gnus.cidx
-       makeindex -o gnus.gind gnus.gidx
-       sed 's/\\char 5E\\relax {}/\\symbol{"5E}/' < gnus.kind > gnus.tmpkind
-       mv gnus.tmpkind gnus.kind
-       egrep -v "end{document}" gnus.tmplatexi1 > gnus.tmplatexi
-       cat postamble.tex >> gnus.tmplatexi
-       $(LATEX) gnus.tmplatexi 
-       $(LATEX) gnus.tmplatexi 
-       $(DVIPS) -f gnus.dvi > gnus.ps
-
-pss:   
-       make latex
-       make latexps
-
-psout:
-       make latex
-       make latexboth
-       make out
-
-latexboth: 
-       rm -f gnus-manual-a4.ps.gz gnus-manual-standard.ps.gz 
-       make latexps
-       mv /local/tmp/larsi/gnus.ps /local/tmp/larsi/gnus-manual-a4.ps
-       gzip /local/tmp/larsi/gnus-manual-a4.ps 
-       sed 's/,a4paper//' gnus.latexi > gnus-standard.latexi 
-       mv gnus-standard.latexi gnus.latexi
-       make latexps
-       mv /local/tmp/larsi/gnus.ps /local/tmp/larsi/gnus-manual-standard.ps 
-       gzip /local/tmp/larsi/gnus-manual-standard.ps 
-
-out:
-       cp /local/tmp/larsi/gnus-manual-standard.ps.gz \
-       /local/tmp/larsi/gnus-manual-a4.ps.gz \
-       /local/ftp/pub/emacs/gnus/manual
-       mv /local/tmp/larsi/gnus-manual-standard.ps.gz \
-       /local/tmp/larsi/gnus-manual-a4.ps.gz \
-       /hom/larsi/www_docs/www.gnus.org/documents
-
-veryclean:
-       make clean
-       rm -f gnus.dvi gnus.ps
-
-distclean:
-       make clean
-       rm -f *.orig *.rej *.elc *~ gnus gnus-[0-9] gnus-[0-9][0-9]
-       rm -f message message-[0-9]
-
-install:
-       cp gnus gnus-[0-9] gnus-[0-9][0-9] $(INFODIR)
-       cp message $(INFODIR)
-
-
-tmps:
-       if [ ! -e tmp ]; then mkdir tmp; fi
-       make screens
-       make herdss
-       make etcs
-       make piconss
-       make xfaces
-       make smiley
-       make miscs
-
-herdss:
-       cd herds ; for i in new-herd-[0-9]*.gif; do echo $$i; giftopnm $$i | pnmcrop -white | pnmmargin -white 9 | pnmscale 2 | pnmconvol convol5.pnm  | ppmtopgm | pnmdepth 255 | pnmtops -width 100 -height 100 -noturn > ../tmp/`basename $$i .gif`.ps; done
-       cd herds ; giftopnm new-herd-section.gif | pnmscale 4 | pnmconvol convol11.pnm | ppmtopgm | pnmdepth 255 | pnmtops -noturn -width 100 -height 100 > ../tmp/new-herd-section.ps
-
-
-screens:
-       cd screen ; for i in *.gif; do echo $$i; giftopnm $$i | pnmmargin -black 1 | ppmtopgm | pnmtops -width 100 -height 100 -noturn > ../tmp/`basename $$i .gif`.ps; done    
-
-miscs:
-       giftopnm misc/larsi.gif | ppmtopgm | pnmtops -noturn > tmp/larsi.ps
-       tifftopnm misc/eseptember.tif | pnmscale 4 | ppmtopgm | pnmtops -noturn  -width 100 -height 100 > tmp/september.ps
-       tifftopnm misc/fseptember.tif | pnmscale 2 | ppmtopgm | pnmtops -noturn  -width 100 -height 100 > tmp/fseptember.ps
-       tifftopnm misc/fred.tif | pnmscale 2 | ppmtopgm | pnmtops -noturn  -width 100 -height 100 > tmp/fred.ps
-       tifftopnm misc/ered.tif | pnmscale 2 | ppmtopgm | pnmtops -noturn  -width 100 -height 100 > tmp/red.ps
-
-etcs:
-       cd etc; for i in gnus-*.xpm; do echo $$i; xpmtoppm $$i | ppmtopgm | pnmdepth 255 | pnmtops -noturn > ../tmp/`basename $$i .xpm`.ps; done
-
-piconss:
-       cd picons; for i in *.xbm; do echo $$i; xbmtopbm $$i | pnmtops -noturn > ../tmp/picons-`basename $$i .xbm`.ps; done
-       cd picons; for i in *.gif; do echo $$i; giftopnm $$i | ppmtopgm | pnmtops -noturn > ../tmp/picons-`basename $$i .gif`.ps; done
-       for i in tmp/picons-*.ps; do echo "\\gnuspicon{$$i}"; done > picons.tex
-
-xfaces:
-       cd xface; for i in *.gif; do echo $$i; giftopnm $$i | ppmtopgm | pnmtops -noturn > ../tmp/xface-`basename $$i .gif`.ps; done
-       for i in tmp/xface-*.ps; do \
-               if [ -n "$$a" ]; then a=""; echo "{$$i}"; else \
-               a="h"; echo -n "\\gnusxface{$$i}"; fi done > xface.tex; \
-               if [ -n "$$a" ]; then echo "{$$i}" >> xface.tex; fi
-
-smiley:
-       cd smilies; tifftopnm BigFace.tif | ppmtopgm | pnmtops > ../tmp/BigFace.ps
-       cd smilies; for i in *.xpm; do echo $$i; sed "s/none/#FFFFFF/" $$i | xpmtoppm | ppmtopgm | pnmdepth 255 | pnmtops > ../tmp/smiley-`basename $$i .xpm`.ps; done
-       for i in tmp/smiley-*.ps; do \
-               if [ -n "$$a" ]; then a=""; echo "{$$i}"; else \
-               a="h"; echo -n "\\gnussmiley{$$i}"; fi done > smiley.tex; \
-               if [ -n "$$a" ]; then echo "{$$i}" >> smiley.tex; fi
-
-pspackage:
-       tar czvf pspackage.tar.gz gnus-faq.texi gnus.texi herds misc pagestyle.sty picons pixidx.sty postamble.tex ps screen smilies splitindex texi2latex.el xface Makefile README etc
-
-complete:
-       make texi2latex.elc
-       make tmps
-       make pss
index 8056fe7..77db83e 100644 (file)
@@ -18,20 +18,22 @@ INSTALL_DATA = @INSTALL_DATA@
 SHELL = /bin/sh
 PAPERTYPE=a4
 
-all: gnus message emacs-mime
+all: gnus message
+
+ja: gnus-ja message-ja
 
 most: texi2latex.elc latex latexps
 
 .SUFFIXES: .texi .dvi .ps
 
 .texi:
-       if test -x $(MAKEINFO); then \
-         makeinfo -o $* $<; \
-       else \
+       if test $(MAKEINFO) = no; then \
          $(EMACSINFO) -eval '(find-file "$<")' $(XINFOSWI); \
+       else \
+         makeinfo -o $* $<; \
        fi
 
-dvi: gnus.dvi message.dvi refcard.dvi emacs-mime.dvi
+dvi: gnus.dvi message.dvi refcard.dvi
 
 .texi.dvi :
        $(PERL) -n -e 'print unless (/\@iflatex/ .. /\@end iflatex/)' $< > gnustmp.texi
@@ -112,11 +114,10 @@ distclean:
        make clean
        rm -f *.orig *.rej *.elc *~ gnus gnus-[0-9] gnus-[0-9][0-9] Makefile
        rm -f message message-[0-9]
-       rm -f emacs-mime
 
 install:
        $(SHELL) $(top_srcdir)/mkinstalldirs $(infodir)
-       @for file in gnus message emacs-mime; do \
+       @for file in gnus message gnus-ja message-ja; do \
          for ifile in `echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \
            if test -f $$ifile; then \
              echo " $(INSTALL_DATA) $$ifile $(infodir)/$$ifile"; \
diff --git a/texi/TRANSLATION.ja b/texi/TRANSLATION.ja
new file mode 100644 (file)
index 0000000..1538b5f
--- /dev/null
@@ -0,0 +1,27 @@
+This file documents about translation policy.\r
+There is an ongoing project to make gnus-ja.texi.\r
+Any volunteers are welcomed.\r
+\r
+\e$BF|K\8lLu$K4X$9$kN.57$r@bL@$9$k%U%!%$%k$G$9!#\e(B\r
+gnus-ja.texi \e$B$r:n@.$9$k%W%m%8%'%/%H$,?J9TCf$G$9!#\e(B\r
+\e$B%W%m%8%'%/%H;22C<T$rJg=8$7$F$$$^$9!#\e(B\r
+\e$B;22C4uK><T$O\e(B Semi-gnus \e$B%^%K%e%"%k%W%m%8%'%/%H$N%Z!<%8\e(B\r
+http://www.komaba.ecc.u-tokyo.ac.jp/%7Eg740685/Semi-gnus/index.html\r
+\e$B$rFI$s$G$/$@$5$$!#\e(B\r
+\r
+\e$B0J2<$N\e(B2\e$B$D$OLu<T$N0l?M$+$D%W%m%8%'%/%H$N<g:K<T\e(B (\e$B$G$"$k$i$7$$\e(B) \r
+Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp> \e$B$NK]Lu$K4X$9$k5,B'\e(B\r
+\e$B$G$9!#$3$N5,B'$O$h$jNI$$$H;W$o$l$k$b$N$,8+$D$+$C$?>l9g$K$OJQ99$5$l$k2D\e(B\r
+\e$BG=@-$,$"$j$^$9!#$^$?!"$h$jNI$$0F$d!"B>$N5,B'$rIU$12C$($?$$>l9g$O!"\e(B\r
+semi-gnus-ja \e$B%a!<%j%s%0%j%9%H$K$=$N0F$r=q$/$+!"\e(Bjaist \e$B$N\e(B Open CVS \e$B$K=q\e(B\r
+\e$B$-9~$_8"8B$r;}$C$F$$$kJ}$OD>@\=q$-9~$_$r$7$F$/$@$5$$!#\e(B(CVS \e$B$N>l9g$G$b!"\e(B\r
+semi-gnus-ja \e$B$GJQ99$N9pCN$r$9$k;v$,K>$^$7$$$G$9!#\e(B) semi-gnus-ja \e$B%a!<%j\e(B\r
+\e$B%s%0%j%9%H$N2CF~$N;EJ}$KIU$$$F$b!">e5-$N\e(B URI \e$B$r;2>H$7$F$/$@$5$$!#\e(B\r
+\r
+1. \e$B$J$k$Y$/%+%?%+%J$O;H$o$J$$$h$&$K$9$k!#\e(B\r
+   (\e$BF|K\8l$K$G$-$k$H$3$m$O$J$k$Y$/F|K\8l$K$9$k!#\e(B\r
+    \e$B>l9g$K$h$C$F$O?7$7$$8l$rDj5A$9$k;v$b$"$k!#\e(B)\r
+\r
+2. \e$B1Q8l$rIU2C$7$?J}$,J,$+$j$d$9$$$H;W$o$l$k8l6g$O!"\e(B\r
+   \e$BF|K\8l$ND>8e$K3g8L$NCf$KF~$l$k!#\e(B\r
+\r
diff --git a/texi/custom.texi b/texi/custom.texi
deleted file mode 100644 (file)
index 5b6fe4a..0000000
+++ /dev/null
@@ -1,695 +0,0 @@
-\input texinfo.tex
-
-@c %**start of header
-@setfilename custom
-@settitle The Customization Library
-@iftex
-@afourpaper
-@headings double
-@end iftex
-@c %**end of header
-
-@node Top, Introduction, (dir), (dir)
-@comment  node-name,  next,  previous,  up
-@top The Customization Library
-
-Version: 1.82
-
-@menu
-* Introduction::                
-* User Commands::               
-* The Customization Buffer::    
-* Declarations::                
-* Utilities::                   
-* The Init File::               
-* Wishlist::                    
-@end menu
-
-@node   Introduction, User Commands, Top, Top
-@comment  node-name,  next,  previous,  up
-@section Introduction
-
-This library allows customization of @dfn{user options}.  Currently two
-types of user options are supported, namely @dfn{variables} and
-@dfn{faces}.  Each user option can have four different values
-simultaneously:
-@table @dfn
-@item factory setting
-The value specified by the programmer.
-@item saved value
-The value saved by the user as the default for this variable.  This
-overwrites the factory setting when starting a new emacs.
-@item current value
-The value used by Emacs.  This will not be remembered next time you
-run Emacs.
-@item widget value
-The value entered by the user in a customization buffer, but not yet
-applied.
-@end table
-
-Variables also have a @dfn{type}, which specifies what kind of values
-the variable can hold, and how the value is presented in a customization
-buffer.  By default a variable can hold any valid expression, but the
-programmer can specify a more limited type when declaring the variable.
-
-The user options are organized in a number of @dfn{groups}.  Each group
-can contain a number user options, as well as other groups.  The groups
-allows the user to concentrate on a specific part of emacs.
-
-@node  User Commands, The Customization Buffer, Introduction, Top
-@comment  node-name,  next,  previous,  up
-@section User Commands
-
-The following commands will create a customization buffer:
-
-@table @code
-@item customize
-Create a customization buffer containing a specific group, by default
-the @code{emacs} group.
-
-@item customize-variable
-Create a customization buffer containing a single variable.  
-
-@item customize-face
-Create a customization buffer containing a single face.
-
-@item customize-apropos
-Create a customization buffer containing all variables, faces, and
-groups that match a user specified regular expression.
-@end table
-
-@node The Customization Buffer, Declarations, User Commands, Top
-@comment  node-name,  next,  previous,  up
-@section The Customization Buffer.
-
-The customization buffer allows the user to make temporary or permanent
-changes to how specific aspects of emacs works, by setting and editing
-user options.  
-
-The customization buffer contains three types of text:
-
-@table @dfn
-@item informative text
-where the normal editing commands are disabled.
-
-@item editable fields
-where you can edit with the usual emacs commands.  Editable fields are
-usually displayed with a grey background if your terminal supports
-colors, or an italic font otherwise.
-
-@item buttons
-which can be activated by either pressing the @kbd{@key{ret}} while
-point is located on the text, or pushing @kbd{mouse-2} while the mouse
-pointer is above the tex.  Buttons are usually displayed in a bold
-font. 
-@end table
-
-You can move to the next the next editable field or button by pressing
-@kbd{@key{tab}} or the previous with @kbd{M-@key{tab}}.  Some buttons
-have a small helpful message about their purpose, which will be
-displayed when you move to it with the @key{tab} key.  
-
-The buffer is divided into three part, an introductory text, a list of
-customization options, and a line of customization buttons.  Each part
-will be described in the following. 
-
-@menu
-* The Introductory Text::       
-* The Customization Options::   
-* The Variable Options::        
-* The Face Options::            
-* The Group Options::           
-* The State Button::            
-* The Customization Buttons::   
-@end menu
-
-@node  The Introductory Text, The Customization Options, The Customization Buffer, The Customization Buffer
-@comment  node-name,  next,  previous,  up
-@subsection  The Introductory Text
-
-The start of the buffer contains a short explanation of what it is, and
-how to get help.  It will typically look like this:
-
-@example
-This is a customization buffer.
-Push RET or click mouse-2 on the word _help_ for more information.
-@end example
-
-Rather boring.  It is mostly just informative text, but the word
-@samp{help} is a button that will bring up this document when
-activated.  
-
-@node  The Customization Options, The Variable Options, The Introductory Text, The Customization Buffer
-@comment  node-name,  next,  previous,  up
-@subsection The Customization Options
-
-Each customization option looks similar to the following text:
-
-@example
- *** custom-background-mode: default 
- State: this item is unchanged from its factory setting.
- [ ] [?] The brightness of the background.
-@end example
-
-The option contains the parts described below.
-
-@table @samp
-@item ***
-The Level Button.  The customization options in the buffer are organized
-in a hierarchy, which is indicated by the number of stars in the level
-button.  The top level options will be shown as @samp{*}.  When they are
-expanded, the suboptions will be shown as @samp{**}.  The example option
-is thus a subsuboption.
-
-Activating the level buttons will toggle between hiding and exposing the
-content of that option.  The content can either be the value of the
-option, as in this example, or a list of suboptions.
-
-@item custom-background-mode
-This is the tag of the the option.  The tag is a name of a variable, a
-face, or customization group.  Activating the tag has an effect that
-depends on the exact type of the option.  In this particular case,
-activating the tag will bring up a menu that will allow you to choose
-from the three possible values of the `custom-background-mode'
-variable. 
-
-@item default
-After the tag, the options value is shown.  Depending on its type, you
-may be able to edit the value directly.  If an option should contain a
-file name, it is displayed in an editable field, i.e. you can edit it
-using the standard emacs editing commands.
-
-@item State: this item is unchanged from its factory setting.
-The state line.  This line will explain the state of the option,
-e.g. whether it is currently hidden, or whether it has been modified or
-not.  Activating the button will allow you to change the state, e.g. set
-or reset the changes you have made.  This is explained in detail in the
-following sections.
-
-@item [ ]
-The magic button.  This is an abbreviated version of the state line. 
-
-@item [?] 
-The documentation button.  If the documentation is more than one line,
-this button will be present.  Activating the button will toggle whether
-the complete documentation is shown, or only the first line.
-
-@item The brightness of the background.
-This is a documentation string explaining the purpose of this particular
-customization option.
-
-@end table
-
-@node  The Variable Options, The Face Options, The Customization Options, The Customization Buffer
-@comment  node-name,  next,  previous,  up
-@subsection The Variable Options
-
-The most common customization options are emacs lisp variables.  The
-actual editing of these variables depend on what type values the
-variable is expected to contain.  For example, a lisp variable whose
-value should be a string will typically be represented with an editable
-text field in the buffer, where you can change the string directly.  If
-the value is a list, each item in the list will be presented in the
-buffer buffer on a separate line, with buttons to insert new items in
-the list, or delete existing items from the list.  You may want to see 
-@ref{User Interface,,, widget, The Widget Library}, where some examples
-of editing are discussed.  
-
-You can either choose to edit the value directly, or edit the lisp
-value for that variable.  The lisp value is a lisp expression that
-will be evaluated when you start emacs.  The result of the evaluation
-will be used as the initial value for that variable.  Editing the
-lisp value is for experts only, but if the current value of the
-variable is of a wrong type (i.e. a symbol where a string is expected),
-the `edit lisp' mode will always be selected.
-
-You can see what mode is currently selected by looking at the state
-button.  If it uses parenthesises (like @samp{( )}) it is in edit lisp
-mode, with square brackets (like @samp{[ ]}) it is normal edit mode.
-You can switch mode by activating the state button, and select either
-@samp{Edit} or @samp{Edit lisp} from the menu.
-
-You can change the state of the variable with the other menu items:
-
-@table @samp
-@item Set
-When you have made your modifications in the buffer, you need to
-activate this item to make the modifications take effect.  The
-modifications will be forgotten next time you run emacs.
-
-@item Save
-Unless you activate this item instead!  This will mark the modification
-as permanent, i.e. the changes will be remembered in the next emacs
-session.
-
-@item Reset
-If you have made some modifications and not yet applied them, you can
-undo the modification by activating this item.
-
-@item Reset to Saved
-Activating this item will reset the value of the variable to the last
-value you marked as permanent with `Save'.
-
-@item Reset to Factory Settings
-Activating this item will undo all modifications you have made, and
-reset the value to the initial value specified by the program itself. 
-@end table
-
-By default, the value of large or complicated variables are hidden.   You
-can show the value by clicking on the level button.
-
-@node  The Face Options, The Group Options, The Variable Options, The Customization Buffer
-@comment  node-name,  next,  previous,  up
-@subsection The Face Options
-
-A face is an object that controls the appearance of some buffer text.
-The face has a number of possible attributes, such as boldness,
-foreground color, and more.  For each attribute you can specify whether
-this attribute is controlled by the face, and if so, what the value is.
-For example, if the attribute bold is not controlled by a face, using
-that face on some buffer text will not affect its boldness.  If the bold
-attribute is controlled by the face, it can be turned either on or of.
-
-It is possible to specify that a face should have different attributes
-on different device types.  For example, a face may make text red on a
-color device, and bold on a monochrome device.  You do this by
-activating `Edit All' in the state menu.
-
-The way this is presented in the customization buffer is to have a list
-of display specifications, and for each display specification a list of
-face attributes.  For each face attribute, there is a checkbox
-specifying whether this attribute has effect and what the value is.
-Here is an example:
-
-@example
- *** custom-invalid-face: (sample)
- State: this item is unchanged from its factory setting.
- [ ] Face used when the customize item is invalid.
- [INS] [DEL] Display: [ ] Type: [ ] X [ ] PM [ ] Win32 [ ] DOS [ ] TTY
-                      [X] Class: [X] Color [ ] Grayscale [ ] Monochrome
-                      [ ] Background: [ ] Light [ ] Dark
-             Attributes: [ ] Bold: off 
-                         [ ] Italic: off 
-                         [ ] Underline: off 
-                         [X] Foreground: yellow (sample)
-                         [X] Background: red (sample)
-                         [ ] Stipple:  
- [INS] [DEL] Display: all
-             Attributes: [X] Bold: on 
-                         [X] Italic: on 
-                         [X] Underline: on 
-                         [ ] Foreground: default (sample)
-                         [ ] Background: default (sample)
-                         [ ] Stipple:  
- [INS]
-@end example
-
-This has two display specifications.  The first will match all color
-displays, independently on what window system the device belongs to, and
-whether background color is dark or light.  For devices matching this
-specification, @samp{custom-invalid-face} will force text to be
-displayed in yellow on red, but leave all other attributes alone.
-
-The second display will simply match everything.  Since the list is
-prioritised, this means that it will match all non-color displays.  For
-these, the face will not affect the foreground or background color, but
-force the font to be both bold, italic, and underline.
-
-You can add or delete display specifications by activating the
-@samp{[INS]} and @samp{[DEL]} buttons, and modify them by clicking on
-the check boxes.  The first checkbox in each line in the display
-specification is special.  It specify whether this particular property
-will even be relevant.  By not checking the box in the first display, we
-match all device types, also device types other than those listed.
-
-After modifying the face, you can activate the state button to make the
-changes take effect.  The menu items in the state button menu is similar
-to the state menu items for variables described in the previous section.
-
-@node  The Group Options, The State Button, The Face Options, The Customization Buffer
-@comment  node-name,  next,  previous,  up
-@subsection The Group Options
-
-Since Emacs has approximately a zillion configuration options, they have
-been organized in groups.  Each group can contain other groups, thus
-creating a customization hierarchy.  The nesting of the customization
-within the visible part of this hierarchy is indicated by the number of
-stars in the level button.
-
-Since there is really no customization needed for the group itself, the
-menu items in the groups state button will affect all modified group
-members recursively.  Thus, if you activate the @samp{Set} menu item,
-all variables and faces that have been modified and belong to that group
-will be applied.  For those members that themselves are groups, it will
-work as if you had activated the @samp{Set} menu item on them as well.
-
-@node  The State Button, The Customization Buttons, The Group Options, The Customization Buffer
-@comment  node-name,  next,  previous,  up
-@subsection The State Line and The Magic Button
-
-The state line has two purposes.  The first is to hold the state menu,
-as described in the previous sections.  The second is to indicate the
-state of each customization item.  
-
-For the magic button, this is done by the character inside the brackets.
-The following states have been defined, the first that applies to the
-current item will be used:
-
-@table @samp
-@item -
-The option is currently hidden.  For group options that means the
-members are not shown, for variables and faces that the value is not
-shown.  You cannot perform any of the state change operations on a
-hidden customization option.
-
-@item *
-The value if this option has been modified in the buffer, but not yet
-applied.  
-
-@item +
-The item has has been set by the user.
-
-@item :
-The current value of this option is different from the saved value.   
-
-@item !
-The saved value of this option is different from the factory setting.
-
-@item @@
-The factory setting of this option is not known.  This occurs when you
-try to customize variables or faces that have not been explicitly
-declared as customizable.
-
-@item SPC
-The factory setting is still in effect.
-
-@end table
-
-For non-hidden group options, the state shown is the most severe state
-of its members, where more severe means that it appears earlier in the
-list above (except hidden members, which are ignored).
-
-@node  The Customization Buttons,  , The State Button, The Customization Buffer
-@comment  node-name,  next,  previous,  up
-@subsection The Customization Buttons
-
-The last part of the customization buffer looks like this:
-
-@example
-[Set] [Save] [Reset] [Done]
-@end example
-
-Activating the @samp{[Set]}, @samp{[Save]}, or @samp{[Reset]}
-button will affect all modified customization items that are visible in
-the buffer.  @samp{[Done]} will bury the buffer.
-
-@node   Declarations, Utilities, The Customization Buffer, Top
-@comment  node-name,  next,  previous,  up
-@section Declarations
-
-This section describes how to declare customization groups, variables,
-and faces.  It doesn't contain any examples, but please look at the file
-@file{cus-edit.el} which contains many declarations you can learn from.
-
-@menu
-* Declaring Groups::            
-* Declaring Variables::         
-* Declaring Faces::             
-* Usage for Package Authors::   
-@end menu
-
-All the customization declarations can be changes by keyword arguments.
-Groups, variables, and faces all share these common keywords:
-
-@table @code
-@item :group
-@var{value} should be a customization group. 
-Add @var{symbol} to that group. 
-@item :link
-@var{value} should be a widget type. 
-Add @var{value} to the extrenal links for this customization option.
-Useful widget types include @code{custom-manual}, @code{info-link}, and
-@code{url-link}. 
-@item :load
-Add @var{value} to the files that should be loaded nefore displaying
-this customization option.  The value should be iether a string, which
-should be a string which will be loaded with @code{load-library} unless
-present in @code{load-history}, or a symbol which will be loaded with
-@code{require}. 
-@item :tag
-@var{Value} should be a short string used for identifying the option in
-customization menus and buffers.  By default the tag will be
-automatically created from the options name.
-@end table
-
-@node  Declaring Groups, Declaring Variables, Declarations, Declarations
-@comment  node-name,  next,  previous,  up
-@subsection Declaring Groups
-
-Use @code{defgroup} to declare new customization groups. 
-
-@defun defgroup symbol members doc [keyword value]...
-Declare @var{symbol} as a customization group containing @var{members}. 
-@var{symbol} does not need to be quoted.
-
-@var{doc} is the group documentation.
-
-@var{members} should be an alist of the form ((@var{name}
-@var{widget})...) where @var{name} is a symbol and @var{widget} is a
-widget for editing that symbol.  Useful widgets are
-@code{custom-variable} for editing variables, @code{custom-face} for
-editing faces, and @code{custom-group} for editing groups.@refill
-
-Internally, custom uses the symbol property @code{custom-group} to keep
-track of the group members, and @code{group-documentation} for the
-documentation string. 
-
-The following additional @var{keyword}'s are defined:
-
-@table @code
-@item :prefix
-@var{value} should be a string.  If the string is a prefix for the name
-of a member of the group, that prefix will be ignored when creating a
-tag for that member.
-@end table
-@end defun
-
-@node  Declaring Variables, Declaring Faces, Declaring Groups, Declarations
-@comment  node-name,  next,  previous,  up
-@subsection Declaring Variables
-
-Use @code{defcustom} to declare user editable variables.
-
-@defun defcustom symbol value doc [keyword value]...
-Declare @var{symbol} as a customizable variable that defaults to @var{value}.
-Neither @var{symbol} nor @var{value} needs to be quoted.
-If @var{symbol} is not already bound, initialize it to @var{value}.
-
-@var{doc} is the variable documentation.
-
-The following additional @var{keyword}'s are defined:
-
-@table @code
-@item :type    
-@var{value} should be a widget type.
-@item :options
-@var{value} should be a list of possible members of the specified type.
-For hooks, this is a list of function names.
-@end table
-
-@xref{Sexp Types,,,widget,The Widget Library}, for information about
-widgets to use together with the @code{:type} keyword.
-@end defun
-
-Internally, custom uses the symbol property @code{custom-type} to keep
-track of the variables type, @code{factory-value} for the program
-specified default value, @code{saved-value} for a value saved by the
-user, and @code{variable-documentation} for the documentation string.
-
-Use @code{custom-add-option} to specify that a specific function is
-useful as an meber of a hook.
-
-@defun custom-add-option symbol option
-To the variable @var{symbol} add @var{option}.
-
-If @var{symbol} is a hook variable, @var{option} should be a hook
-member.  For other types variables, the effect is undefined."
-@end defun
-
-@node  Declaring Faces, Usage for Package Authors, Declaring Variables, Declarations
-@comment  node-name,  next,  previous,  up
-@subsection Declaring Faces
-
-Faces are declared with @code{defface}.
-
-@defun defface face spec doc [keyword value]... 
-
-Declare @var{face} as a customizable face that defaults to @var{spec}.
-@var{face} does not need to be quoted.
-
-If @var{face} has been set with `custom-set-face', set the face attributes
-as specified by that function, otherwise set the face attributes
-according to @var{spec}.
-
-@var{doc} is the face documentation.
-
-@var{spec} should be an alist of the form @samp{((@var{display} @var{atts})...)}.
-
-@var{atts} is a list of face attributes and their values.  The possible
-attributes are defined in the variable `custom-face-attributes'.
-Alternatively, @var{atts} can be a face in which case the attributes of
-that face is used.
-
-The @var{atts} of the first entry in @var{spec} where the @var{display}
-matches the frame should take effect in that frame.  @var{display} can
-either be the symbol `t', which will match all frames, or an alist of
-the form @samp{((@var{req} @var{item}...)...)}@refill
-
-For the @var{display} to match a FRAME, the @var{req} property of the
-frame must match one of the @var{item}.  The following @var{req} are
-defined:@refill
-
-@table @code
-@item type
-(the value of (window-system))@*
-Should be one of @code{x} or @code{tty}.
-
-@item class
-(the frame's color support)@*
-Should be one of @code{color}, @code{grayscale}, or @code{mono}.
-
-@item background
-(what color is used for the background text)@*
-Should be one of @code{light} or @code{dark}.
-@end table
-  
-Internally, custom uses the symbol property @code{factory-face} for the
-program specified default face properties, @code{saved-face} for
-properties saved by the user, and @code{face-doc-string} for the
-documentation string.@refill
-
-@end defun
-
-@node Usage for Package Authors,  , Declaring Faces, Declarations
-@comment  node-name,  next,  previous,  up
-@subsection Usage for Package Authors
-
-The recommended usage for the author of a typical emacs lisp package is
-to create one group identifying the package, and make all user options
-and faces members of that group.  If the package has more than around 20
-such options, they should be divided into a number of subgroups, with
-each subgroup being member of the top level group.
-
-The top level group for the package should itself be member of one or
-more of the standard customization groups.  There exists a group for
-each @emph{finder} keyword.  Press @kbd{C-c p} to see a list of finder
-keywords, and add you group to each of them, using the @code{:group}
-keyword. 
-
-@node  Utilities, The Init File, Declarations, Top
-@comment  node-name,  next,  previous,  up
-@section Utilities
-
-These utilities can come in handy when adding customization support. 
-
-@deffn Widget custom-manual
-Widget type for specifying the info manual entry for a customization
-option.  It takes one argument, an info address.
-@end deffn
-
-@defun custom-add-to-group group member widget
-To existing @var{group} add a new @var{member} of type @var{widget},
-If there already is an entry for that member, overwrite it.
-@end defun
-
-@defun custom-add-link symbol widget
-To the custom option @var{symbol} add the link @var{widget}.
-@end defun
-
-@defun custom-add-load symbol load
-To the custom option @var{symbol} add the dependency @var{load}.
-@var{load} should be either a library file name, or a feature name.
-@end defun
-
-@defun custom-menu-create symbol &optional name
-Create menu for customization group @var{symbol}.
-If optional @var{name} is given, use that as the name of the menu. 
-Otherwise make up a name from @var{symbol}.
-The menu is in a format applicable to @code{easy-menu-define}.
-@end defun
-
-@node  The Init File, Wishlist, Utilities, Top
-@comment  node-name,  next,  previous,  up
-@section The Init File
-
-When you save the customizations, call to @code{custom-set-variables},
-@code{custom-set-faces} are inserted into the file specified by
-@code{custom-file}.  By default @code{custom-file} is your @file{.emacs}
-file.  If you use another file, you must explicitly load it yourself.
-The two functions will initialize variables and faces as you have
-specified.
-
-@node  Wishlist,  , The Init File, Top
-@comment  node-name,  next,  previous,  up
-@section Wishlist
-
-@itemize @bullet
-@item
-The menu items should be grayed out when the information is
-missing.  I.e. if a variable doesn't have a factory setting, the user
-should not be allowed to select the @samp{Factory} menu item.
-
-@item 
-Better support for keyboard operations in the customize buffer.
-
-@item
-Integrate with @file{w3} so you can customization buffers with much
-better formatting.  I'm thinking about adding a <custom>name</custom>
-tag.  The latest w3 have some support for this, so come up with a
-convincing example.
-
-@item
-Add an `examples' section, with explained examples of custom type
-definitions. 
-
-@item
-Support selectable color themes.  I.e., change many faces by setting one
-variable.
-
-@item
-Support undo using lmi's @file{gnus-undo.el}.
-
-@item
-Make it possible to append to `choice', `radio', and `set' options.
-
-@item
-Make it possible to customize code, for example to enable or disable a
-global minor mode.
-
-@item
-Ask whether set or modified variables should be saved in
-@code{kill-buffer-hook}. 
-
-Ditto for @code{kill-emacs-query-functions}.
-
-@item
-Command to check if there are any customization options that
-does not belong to an existing group. 
-
-@item
-Optionally disable the point-cursor and instead highlight the selected
-item in XEmacs.  This is like the *Completions* buffer in XEmacs.
-Suggested by Jens Lautenbacher
-@samp{<jens@@lemming0.lem.uni-karlsruhe.de>}.@refill
-
-@item
-Empty customization groups should start open (harder than it looks).
-
-@item
-Make it possible to include a comment/remark/annotation when saving an
-option.
-
-@end itemize
-
-@contents
-@bye
index 08eb94d..a169da0 100644 (file)
--- a/texi/dir
+++ b/texi/dir
@@ -5,6 +5,5 @@ File: dir       Node: Top       This is the Gnus Info tree
 
 * Menu: 
 
-* Gnus: (gnus).                        The news reader Gnus.
-* Message: (message).          The Message sending thingamabob.
-* Emacs MIME: (emacs-mime).    Libraries for handling MIME.
+* Gnus: (gnus).                The news reader Gnus.
+* Message: (message).  The Message sending thingamabob.
diff --git a/texi/emacs-mime.texi b/texi/emacs-mime.texi
deleted file mode 100644 (file)
index 93e1d6e..0000000
+++ /dev/null
@@ -1,1240 +0,0 @@
-\input texinfo                  @c -*-texinfo-*-
-
-@setfilename emacs-mime
-@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) 1998,99 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-@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,99 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-
-@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
-* Interface Functions::   An abstraction over the basic functions.
-* Basic Functions::       Utility and basic parsing functions.
-* Decoding and Viewing::  A framework for decoding and viewing.
-* Composing::             MML; a language for describing MIME parts.
-* Standards::             A summary of RFCs and working documents used.
-* Index::                 Function and variable index.
-@end menu
-
-
-@node Interface Functions
-@chapter Interface Functions
-@cindex interface functions
-@cindex mail-parse
-
-The @code{mail-parse} library is an abstraction over the actual
-low-level libraries that are described in the next chapter.
-
-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\"")
-@result{} ("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)
-@result{} "b980912.gif"
-@end example
-
-@item mail-header-encode-parameter
-@findex mail-header-encode-parameter
-Takes a parameter string and returns an encoded version of the string.
-This is used for parameters in headers like @code{Content-Type} and
-@code{Content-Disposition}.
-
-@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)")
-@result{} "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\"")
-@result{} "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)")
-@result{} "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>")
-@result{} ("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>")
-@result{} (("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")
-@result{} "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")
-@result{} "This is naïve, baby"
-@end example
-
-@end table
-
-Currently, @code{mail-parse} is an abstraction over @code{ietf-drums},
-@code{rfc2047}, @code{rfc2045} and @code{rfc2231}.  These are documented
-in the subsequent sections.
-
-
-
-@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
-* rfc2045::      Encoding @code{Content-Type} headers.
-* rfc2231::      Parsing @code{Content-Type} headers.
-* ietf-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.
-* binhex::       Binhex decoding.
-* uudecode::     Uuencode decoding.
-* rfc1843::      Decoding HZ-encoded text.
-* mailcap::      How parts are displayed is specified by the @file{.mailcap} file
-@end menu
-
-
-@node rfc2045
-@section rfc2045
-
-RFC2045 is the ``main'' @sc{mime} document, and as such, one would
-imagine that there would be a lot to implement.  But there isn't, since
-most of the implementation details are delegated to the subsequent
-RFCs.
-
-So @file{rfc2045.el} has only a single function:
-
-@table @code
-@item rfc2045-encode-string
-@findex rfc2045-encode-string
-Takes a parameter and a value and returns a @samp{PARAM=VALUE} string.
-@var{value} will be quoted if there are non-safe characters in it.
-@end table
-
-
-@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!\"")
-@result{} ("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 returns
-the value of the specified attribute.
-
-@item rfc2231-encode-string
-@findex rfc2231-encode-string
-Encode a parameter in headers likes @code{Content-Type} and
-@code{Content-Disposition}.
-
-@end table
-
-
-@node ietf-drums
-@section ietf-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 ietf-drums-remove-comments
-@findex ietf-drums-remove-comments
-Remove the comments from the argument and return the results.
-
-@item ietf-drums-remove-whitespace
-@findex ietf-drums-remove-whitespace
-Remove linear white space from the string and return the results.
-Spaces inside quoted strings and comments are left untouched.
-
-@item ietf-drums-get-comment
-@findex ietf-drums-get-comment
-Return the last most comment from the string.
-
-@item ietf-drums-parse-address
-@findex ietf-drums-parse-address
-Parse an address string and return a list that contains the mailbox and
-the plain text name.
-
-@item ietf-drums-parse-addresses
-@findex ietf-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 ietf-drums-parse-date
-@findex ietf-drums-parse-date
-Parse a date string and return an Emacs time structure.
-
-@item ietf-drums-narrow-to-header
-@findex ietf-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 convert 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")
-@result{} (54 21 12 12 9 1998 6 nil 7200)
-
-(date-to-time "Sat Sep 12 12:21:54 1998 +0200")
-@result{} (13818 19266)
-
-(time-to-seconds '(13818 19266))
-@result{} 905595714.0
-
-(seconds-to-time 905595714.0)
-@result{} (13818 19266 0)
-
-(time-to-day '(13818 19266))
-@result{} 729644
-
-(days-to-time 729644)
-@result{} (961933 65536)
-
-(time-since '(13818 19266))
-@result{} (0 430)
-
-(time-less-p '(13818 19266) '(13818 19145))
-@result{} nil
-
-(subtract-time '(13818 19266) '(13818 19145))
-@result{} (0 121)
-
-(days-between "Sat Sep 12 12:21:54 1998 +0200"
-              "Sat Sep 07 12:21:54 1998 +0200")
-@result{} 5
-
-(date-leap-year-p 2000)
-@result{} t
-
-(time-to-day-in-year '(13818 19266))
-@result{} 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
-@cindex 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 binhex
-@section binhex
-@cindex binhex
-@cindex Apple
-@cindex Macintosh
-
-@code{binhex} is an encoding that originated in Macintosh environments.
-The following function is supplied to deal with these:
-
-@table @code
-@item binhex-decode-region
-@findex binhex-decode-region
-Decode the encoded text in the region.  If given a third parameter, only
-decode the @code{binhex} header and return the filename.
-
-@end table
-
-
-@node uudecode
-@section uudecode
-@cindex uuencode
-@cindex uudecode
-
-@code{uuencode} is probably still the most popular encoding of binaries
-used on Usenet, although @code{base64} rules the mail world.
-
-The following function is supplied by this package:
-
-@table @code
-@item uudecode-decode-region
-@findex uudecode-decode-region
-Decode the text in the region.
-@end table
-
-
-@node rfc1843
-@section rfc1843
-@cindex rfc1843
-@cindex HZ
-@cindex Chinese
-
-RFC1843 deals with mixing Chinese and ASCII characters in messages.  In
-essence, RFC1843 switches between ASCII and Chinese by doing this:
-
-@example
-This sentence is in ASCII.
-The next sentence is in GB.~@{<:Ky2;S@{#,NpJ)l6HK!#~@}Bye.
-@end example
-
-Simple enough, and widely used in China.
-
-The following functions are available to handle this encoding:
-
-@table @code
-@item rfc1843-decode-region
-Decode HZ-encoded text in the region.
-
-@item rfc1843-decode-string
-Decode a HZ-encoded string and return the result.
-
-@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/*; gimp -8 %s
-audio/wav; wavplayer %s
-@end example
-
-This says that all image files should be displayed with @samp{xv}, and
-that realaudio files should be played by @samp{rvplayer}.
-
-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 analysis.
-
-@menu
-* Dissection::     Analyzing a @sc{mime} message.
-* Handles::        Handle manipulations.
-* Display::        Displaying handles.
-* Customization::  Variables that affect display.
-@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 Customization
-@section Customization
-
-@table @code
-
-@item mm-inline-media-tests
-This is an alist where the key is a @sc{mime} type, the second element
-is a function to display the part @dfn{inline} (i.e., inside Emacs), and 
-the third element is a form to be @code{eval}ed to say whether the part
-can be displayed inline.
-
-This variable specifies whether a part @emph{can} be displayed inline,
-and, if so, how to do it.  It does not say whether parts are
-@emph{actually} displayed inline.
-
-@item mm-inlined-types
-This, on the other hand, says what types are to be displayed inline, if
-they satisfy the conditions set by the variable above.  It's a list of
-@sc{mime} media types.
-
-@item mm-automatic-display
-This is a list of types that are to be displayed ``automatically'', but
-only if the above variable allows it.  That is, only inlinable parts can
-be displayed automatically.
-
-@item mm-attachment-override-types
-Some @sc{mime} agents create parts that have a content-disposition of
-@samp{attachment}.  This variable allows overriding that disposition and 
-displaying the part inline.  (Note that the disposition is only
-overridden if we are able to, and want to, display the part inline.)
-
-@item mm-discouraged-alternatives
-List of @sc{mime} types that are discouraged when viewing
-@samp{multipart/alternative}.  Viewing agents are supposed to view the
-last possible part of a message, as that is supposed to be the richest.
-However, users may prefer other types instead, and this list says what
-types are most unwanted.  If, for instance, @samp{text/html} parts are
-very unwanted, and @samp{text/richtech} parts are somewhat unwanted,
-then the value of this variable should be set to:
-
-@lisp
-("text/html" "text/richtext")
-@end lisp
-
-@item mm-inline-large-images-p
-When displaying inline images that are larger than the window, XEmacs
-does not enable scrolling, which means that you cannot see the whole
-image.  To prevent this, the library tries to determine the image size
-before displaying it inline, and if it doesn't fit the window, the
-library will display it externally (e.g. with @samp{ImageMagick} or
-@samp{xv}).  Setting this variable to @code{t} disables this check and
-makes the library display all inline images as inline, regardless of
-their size.
-
-
-@end table
-
-
-
-@node Composing
-@chapter Composing
-@cindex Composing
-@cindex MIME Composing
-@cindex MML
-@cindex MIME Meta Language
-
-Creating a @sc{mime} message is boring and non-trivial.  Therefore, a
-library called @code{mml} has been defined that parses a language called
-MML (@sc{mime} Meta Language) and generates @sc{mime} messages.
-
-@findex mml-generate-mime
-The main interface function is @code{mml-generate-mime}.  It will
-examine the contents of the current (narrowed-to) buffer and return a
-string containing the @sc{mime} message.
-
-@menu
-* Simple MML Example::             An example MML document.
-* MML Definition::                 All valid MML elements.
-* Advanced MML Example::           Another example MML document.
-* Conversion::                     Going from @sc{mime} to MML and vice versa.
-@end menu
-
-
-@node Simple MML Example
-@section Simple MML Example
-
-Here's a simple @samp{multipart/alternative}:
-
-@example
-<#multipart type=alternative>
-This is a plain text part.
-<#part type=text/enriched>
-<center>This is a centered enriched part</center>
-<#/multipart>
-@end example
-
-After running this through @code{mml-generate-mime}, we get this:
-
-@example
-Content-Type: multipart/alternative; boundary="=-=-="
-
-
---=-=-=
-
-
-This is a plain text part.
-
---=-=-=
-Content-Type: text/enriched
-
-
-<center>This is a centered enriched part</center>
-
---=-=-=--
-@end example
-
-
-@node MML Definition
-@section MML Definition
-
-The MML language is very simple.  It looks a bit like an SGML
-application, but it's not.
-
-The main concept of MML is the @dfn{part}.  Each part can be of a
-different type or use a different charset.  The way to delineate a part
-is with a @samp{<#part ...>} tag.  Multipart parts can be introduced
-with the @samp{<#multipart ...>} tag.  Parts are ended by the
-@samp{<#/part>} or @samp{<#/multipart>} tags.  Parts started with the
-@samp{<#part ...>} tags are also closed by the next open tag.
-
-There's also the @samp{<#external ...>} tag.  These introduce
-@samp{external/message-body} parts.
-
-Each tag can contain zero or more parameters on the form
-@samp{parameter=value}.  The values may be enclosed in quotation marks,
-but that's not necessary unless the value contains white space.  So
-@samp{filename=/home/user/#hello$^yes} is perfectly valid.
-
-The following parameters have meaning in MML; parameters that have no
-meaning are ignored.  The MML parameter names are the same as the
-@sc{mime} parameter names; the things in the parentheses say which
-header it will be used in.
-
-@table @samp
-@item type
-The @sc{mime} type of the part (@code{Content-Type}).
-
-@item filename
-Use the contents of the file in the body of the part
-(@code{Content-Disposition}).
-
-@item charset
-The contents of the body of the part are to be encoded in the character
-set speficied (@code{Content-Type}).
-
-@item name
-Might be used to suggest a file name if the part is to be saved
-to a file (@code{Content-Type}).
-
-@item disposition
-Valid values are @samp{inline} and @samp{attachment}
-(@code{Content-Disposition}).
-
-@item encoding
-Valid values are @samp{7bit}, @samp{8bit}, @samp{quoted-printable} and
-@samp{base64} (@code{Content-Transfer-Encoding}).
-
-@item description
-A description of the part (@code{Content-Description}).
-
-@item creation-date
-RFC822 date when the part was created (@code{Content-Disposition}).
-
-@item modification-date
-RFC822 date when the part was modified (@code{Content-Disposition}).
-
-@item read-date
-RFC822 date when the part was read (@code{Content-Disposition}).
-
-@item size
-The size (in octets) of the part (@code{Content-Disposition}).
-
-@end table
-
-Parameters for @samp{application/octet-stream}:
-
-@table @samp
-@item type
-Type of the part; informal---meant for human readers
-(@code{Content-Type}).
-@end table
-
-Parameters for @samp{message/external-body}:
-
-@table @samp
-@item access-type
-A word indicating the supported access mechanism by which the file may
-be obtained.  Values include @samp{ftp}, @samp{anon-ftp}, @samp{tftp},
-@samp{localfile}, and @samp{mailserver}.  (@code{Content-Type}.)
-
-@item expiration
-The RFC822 date after which the file may no longer be fetched.
-(@code{Content-Type}.)
-
-@item size
-The size (in octets) of the file.  (@code{Content-Type}.)
-
-@item permission
-Valid values are @samp{read} and @samp{read-write}
-(@code{Content-Type}).
-
-@end table
-
-
-@node Advanced MML Example
-@section Advanced MML Example
-
-Here's a complex multipart message.  It's a @samp{multipart/mixed} that
-contains many parts, one of which is a @samp{multipart/alternative}.
-
-@example
-<#multipart type=mixed>
-<#part type=image/jpeg filename=~/rms.jpg disposition=inline>
-<#multipart type=alternative>
-This is a plain text part.
-<#part type=text/enriched name=enriched.txt>
-<center>This is a centered enriched part</center>
-<#/multipart>
-This is a new plain text part.
-<#part disposition=attachment>
-This plain text part is an attachment.
-<#/multipart>
-@end example
-
-And this is the resulting @sc{mime} message:
-
-@example
-Content-Type: multipart/mixed; boundary="=-=-="
-
-
---=-=-=
-
-
-
---=-=-=
-Content-Type: image/jpeg;
- filename="~/rms.jpg"
-Content-Disposition: inline;
- filename="~/rms.jpg"
-Content-Transfer-Encoding: base64
-
-/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRof
-Hh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/wAALCAAwADABAREA/8QAHwAA
-AQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR
-BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RF
-RkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip
-qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEB
-AAA/AO/rifFHjldNuGsrDa0qcSSHkA+gHrXKw+LtWLrMb+RgTyhbr+HSug07xNqV9fQtZrNI
-AyiaE/NuBPOOOP0rvRNE880KOC8TbXXGCv1FPqjrF4LDR7u5L7SkTFT/ALWOP1xXgTuXfc7E
-sx6nua6rwp4IvvEM8chCxWxOdzn7wz6V9AaB4S07w9p5itow0rDLSY5Pt9K43xO66P4xs71m
-2QXiGCbA4yOVJ9+1aYORkdK434lyNH4ahCnG66VT9Nj15JFbPdX0MS43M4VQf5/yr2vSpLnw
-5ZW8dlCZ8KFXjOPX0/mK6rSPEGt3Angu44fNEReHYNvIH3TzXDeKNO8RX+kSX2ouZkicTIOc
-L+g7E810ulFjpVtv3bwgB3HJyK5L4quY/C9sVxk3ij/xx6850u7t1mtp/wDlpEw3An3Jr3Dw
-34gsbWza4nBlhC5LDsaW6+IFgupQyCF3iHH7gA7c9R9ay7zx6t7aX9jHC4smhfBkGCvHGfrm
-tLQ7hbnRrV1GPkAP1x1/Hr+Ncr8Vzjwrbf8AX6v/AKA9eQRyYlQk8Yx9K6XTNbkgia2ciSIn
-7p5Ga9Atte0LTLKO6it4i7dVRFJDcZ4PvXN+JvEMF9bILVGXJLSZ4zkjivRPDaeX4b08HOTC
-pOffmua+KkbS+GLVUGT9tT/0B68eeIpIFYjB70+OOVXyoOM9+M1eaWeCLzHPyHGO/NVWvJJm
-jQ8KGH1NfQWhXSXmh2c8eArRLwO3HSv/2Q==
-
---=-=-=
-Content-Type: multipart/alternative; boundary="==-=-="
-
-
---==-=-=
-
-
-This is a plain text part.
-
---==-=-=
-Content-Type: text/enriched;
- name="enriched.txt"
-
-
-<center>This is a centered enriched part</center>
-
---==-=-=--
-
---=-=-=
-
-This is a new plain text part.
-
---=-=-=
-Content-Disposition: attachment
-
-
-This plain text part is an attachment.
-
---=-=-=--
-@end example
-
-
-@node Conversion
-@section Conversion
-
-@findex mime-to-mml
-A (multipart) @sc{mime} message can be converted to MML with the
-@code{mime-to-mml} function.  It works on the message in the current
-buffer, and substitutes MML markup for @sc{mime} boundaries.
-Non-textual parts do not have their contents in the buffer, but instead
-have the contents in separate buffers that are referred to from the MML
-tags.
-
-@findex mml-to-mime
-An MML message can be converted back to @sc{mime} by the
-@code{mml-to-mime} function.
-
-These functions are in certain senses ``lossy''---you will not get back
-an identical message if you run @sc{mime-to-mml} and then
-@sc{mml-to-mime}.  Not only will trivial things like the order of the
-headers differ, but the contents of the headers may also be different.
-For instance, the original message may use base64 encoding on text,
-while @sc{mml-to-mime} may decide to use quoted-printable encoding, and
-so on.
-
-In essence, however, these two functions should be the inverse of each
-other.  The resulting contents of the message should remain equivalent,
-if not identical.
-
-
-@node Standards
-@chapter Standards
-
-The Emacs @sc{mime} library implements handling of various elements
-according to a (somewhat) large number of RFCs, drafts and standards
-documents.  This chapter lists the relevant ones.  They can all be
-fetched from @samp{http://www.stud.ifi.uio.no/~larsi/notes/}.
-
-@table @dfn
-@item RFC822
-@itemx STD11
-Standard for the Format of ARPA Internet Text Messages.
-
-@item RFC1036
-Standard for Interchange of USENET Messages
-
-@item RFC2045
-Format of Internet Message Bodies
-
-@item RFC2046
-Media Types
-
-@item RFC2047
-Message Header Extensions for Non-ASCII Text
-
-@item RFC2048
-Registration Procedures
-
-@item RFC2049
-Conformance Criteria and Examples
-
-@item RFC2231
-MIME Parameter Value and Encoded Word Extensions: Character Sets,
-Languages, and Continuations
-
-@item RFC1843
-HZ - A Data Format for Exchanging Files of Arbitrarily Mixed Chinese and
-ASCII characters
-
-@item draft-ietf-drums-msg-fmt-05.txt
-Draft for the successor of RFC822
-
-@item RFC2112
-The MIME Multipart/Related Content-type
-
-@item RFC1892
-The Multipart/Report Content Type for the Reporting of Mail System
-Administrative Messages
-
-@item RFC2183
-Communicating Presentation Information in Internet Messages: The
-Content-Disposition Header Field
-
-@end table
-
-
-@node Index
-@chapter Index
-@printindex cp
-
-@summarycontents
-@contents
-@bye
-
-@c End:
diff --git a/texi/gnus-faq-ja.texi b/texi/gnus-faq-ja.texi
new file mode 100644 (file)
index 0000000..31e588e
--- /dev/null
@@ -0,0 +1,468 @@
+@c Insert  "\input texinfo" at 1st line before texing this file alone.
+@c -*-texinfo-*-
+@c Copyright (C) 1998 Keiichi Suzuki
+@setfilename gnus-faq-ja.info
+
+@node Frequently Asked Questions
+@section \e$BIQHK$K?R$M$i$l$k<ALd\e(B
+
+\e$B$3$l$O\e(B Semi-gnus \e$B$KBP$9$kNI$/$"$k<ALd$H!"$=$l$KBP$9$k2sEz=8$G$9!#$b$7$"\e(B
+\e$B$J$?$,%&%'%V%V%i%&%6!<$r;}$C$F$$$k$J$i!"%O%$%Q!<%F%-%9%HHG$,\e(B 
+@file{http://www.mdcnet.co.jp/%7Ekeiichi/semi-gnus-faq-ja.shtml} \e$B$G<j$K\e(B
+\e$BF~$j!"$*$=$i$/$"$J$?$,$3$l$r<u$1<h$C$F$+$i99?7$5$l$F$$$k$G$7$g$&!#\e(B
+
+@menu
+* Introduction::          Gnus \e$B$N>R2p!#\e(B
+* Installation FAQ::      Gnus \e$B$NF3F~!#\e(B
+* Customization FAQ::     Gnus \e$B$N%+%9%?%^%$%:!#\e(B
+* Reading News FAQ::      \e$B%K%e!<%9$rFI$`;v$K4X$9$k<ALd!#\e(B
+* Reading Mail FAQ::      \e$B%a!<%k$rFI$`;v$K4X$9$k<ALd!#\e(B
+* Mailing list FAQ::      \e$B%a!<%j%s%0%j%9%H$K4X$9$k<ALd!#\e(B
+@end menu
+
+
+@node Introduction
+@subsection \e$B>R2p\e(B
+\e$B$3$NJ8=q$O!"\e(B Semi-gnus \e$B$KBP$9$k$h$/$"$k<ALd$H!"$=$l$KBP$9$k2sEz=8$G$9!#\e(B
+
+Semi-gnus \e$B$O\e(B Emacs \e$B>e$GF0:n$9$k%M%C%H%K%e!<%9!&%j!<%@!<\e(B / \e$BEE;R%a!<%k!&%f!<\e(B
+\e$B%6!<!&%(%$%8%'%s%H\e(B (MUA) \e$B$G$9!#\e(BSemi-gnus \e$B$N%*%j%8%J%k$H$J$C$F$$$k\e(B Gnus 
+\e$B$O!"8=:_\e(B6\e$B<~G/$r7^$(!"$=$N4V\e(B Emacs \e$B$NI8=`%Q%C%1!<%8$H$7$F$bG[I[$5$l$F$-$^\e(B
+\e$B$7$?!#\e(B Gnus 5 \e$B$O:G?7$N\e(B(\e$B$=$7$F:G9b$N\e(B)\e$B$b$N$G$9!#\e(B Gnus \e$B$N%*%j%8%J%k!&%P!<%8%g\e(B
+\e$B%s$O\e(B Masanobu UMEDA \e$B$K$h$k\e(BGNUS \e$B$G$9!#\e(B 1994\e$BG/$N=)$,G&$S4s$k:"!"\e(B Lars
+Magne Ingebrigtsen \e$B$O\e(B Gnus \e$B$r=q$-D>$=$&$H7h0U$7$^$7$?!#\e(B
+
+\e$B$7$+$7!"\e(B Gnus \e$BC1FH$G$O\e(B MIME \e$B2=$5$l$?5-;v!&%a!<%k$rFI$`$3$H$O$G$-$^$;$s!#\e(B 
+\e$B$=$3$G!"\e(B Emacs \e$B>e$G\e(B MIME \e$B%5%]!<%H$r$9$k$?$a$N%Q%C%1!<%8$G$"$k\e(B SEMI \e$B$r;H\e(B
+\e$BMQ$7$F0lIt$N?M$?$A$,\e(B Gnus \e$B$r;HMQ$9$k$h$&$K$J$j$^$7$?!#$7$+$7!"$3$l$K$O\e(B 
+Gnus \e$B$K\e(B patch \e$B$r$"$F$kI,MW$,$"$k>e$K%*%j%8%J%k$N\e(B Gnus (\e$B$3$A$i$b\e(B 
+Quassia-Gnus \e$B$H8F$P$l3+H/ESCf$G$7$?\e(B)\e$B$NJQ99FbMF$K$h$C$F$O$=$N\e(B patch \e$B<+BN\e(B
+\e$B$b:n$jD>$5$J$1$l$P$J$j$^$;$s$G$7$?!#$=$s$J\e(B 1997\e$BG/$N\e(B11\e$B7n!"<i2,CNI'\e(B 
+<morioka@@jaist.ac.jp> \e$B$O<~0O\e(B(\e$B9%$-<T$?$A\e(B)\e$B$N4|BT$K2!$5$l\e(B SEMI \e$B$KBP1~$7$?!"\e(B
+\e$BB?9q8l$N$?$a$N\e(B Gnus\e$B!"\e(B Semi-gnus \e$B$r8x3+$7$?$N$G$9!#\e(B
+
+Semi-gnus \e$B$N%=!<%9!&%3!<%I$O8=:_\e(B CVS \e$B$G4IM}$5$l$F$*$j!"M-;V$NJ}!9$K$h$C\e(B
+\e$B$FF|!92~A1$,$J$5$l$F$$$^$9!#\e(B
+
+Semi-gnus \e$B$N:GBg$N6/$_$O%*%j%8%J%k$N\e(B Gnus \e$B$+$i0z$-7Q$,$l$?!"6/NO$J%+%9%?\e(B
+\e$B%^%$%:5!G=$H\e(B SEMI \e$B$,$b$?$i$96/NO$J\e(BMIME \e$B%5%]!<%H$K$"$j$^$9!#:G=i$N0lJM$G\e(B
+\e$B$O$3$N%+%9%?%^%$%:5!G=$NK-IY$5$KB?>/62I]$r46$8$k$+$bCN$l$^$;$s!"$7$+$7!"\e(B
+\e$B$"$J$?$,$=$N5!G=$rI,MW$K$J$k$^$G$OJ#;($J5!G=$N$[$H$s$I$rL5;k$9$k$3$H$,$G\e(B
+\e$B$-$^$9!#\e(B \e$B$b$7!"$"$J$?$,$^$"$^$"$NNL$N%a%$%k$r<u$1<h$k\e(B(\e$B$$$/$D$b$N%a!<%j%s\e(B
+\e$B%0%j%9%H$K;22C$7$F$$$k\e(B)\e$B!"$^$?$O!"Hs>o$KN.NL$NB?$$%a!<%j%s%0%j%9%H$K;22C\e(B
+\e$B$7$F$$$k$N$G$"$l$P!"$"$J$?$O\e(B Semi-gnus \e$B$G%a%$%k$rFI$`$?$a$ND4::$r$O$8$a\e(B
+\e$B$?$/$J$k$G$7$g$&!#\e(B
+
+\e$B$3$N\e(B FAQ \e$B$O!"NkLZ7=0l$K$h$C$FJ]<i$5$l$F$$$^$9!#\e(B \e$B$3$N\e(B FAQ \e$B$N4pAC$H$J$C$F\e(B
+\e$B$$$k%*%j%8%J%k\e(B Gnus \e$B$N\e(B FAQ \e$B$rJ]<i$5$l$F$$$k\e(B Justin Sheehy \e$B;a$K46<U$rJ{$2!"\e(B
+\e$B$^$?\e(B Justin Sheehy \e$B;a0JA0$K\e(B Gnus FAQ \e$B$G$9$P$i$7$$:n6H$r$5$l$F$$$?!"\e(BSteve
+Baur \e$B;a!"\e(B Per Abrahamsen \e$B;a$K46<U$7$^$9!#\e(B
+
+\e$BB>$NJ}K!\e(B(\e$B%a%$%k!"%M%C%H%K%e!<%9Ey\e(B)\e$B$G>pJs$rF@$h$&$H$9$kA0$K!"$^$:$3$N\e(B FAQ 
+\e$B$r8+$F$_$F$/$@$5$$!#\e(B
+
+\e$B$3$N>pJs$O\e(B Semi-gnus (Ja) \e$B%a%$%j%s%0!&%j%9%H$N1g=u$r<u$1$FJT=8$7$?$b$N$G!"\e(B
+\e$BJ8@U$O;d!"NkLZ7=0l$K$"$j$^$9!#\e(B
+
+@node Installation FAQ
+@subsection \e$BF3F~\e(B
+
+@itemize @bullet
+@item 
+Q1.1: \e$B:G?7$N%P!<%8%g%s$O\e(B? 
+
+\e$B8=:_$NI8=`%Q%C%1!<%8$N:G?7%P!<%8%g%s$O\e(B Semi-gnus 6.7 (tag: gnus-6_7) \e$B$G!"\e(B
+\e$B3+H/HG$N:G?7%P!<%8%g%s$O\e(B Semi-gnus 6.8 (tag: gnus-6_8) \e$B$G$9!#\e(B
+
+Semi-gnus 6.7 \e$B$r;HMQ$9$k$?$a$K$OJL%Q%C%1!<%8$N\e(B FLIM 1.7 / SEMI (\e$B$^$?$O\e(B 
+WEMI) 1.8 \e$B$,I,MW$G$9!#\e(B \e$B$=$NB>!"\e(B APEL \e$B$,I,MW$K$J$j$^$9$,!"I,MW$J%P!<%8%g\e(B
+\e$B%s$O\e(B FLIM / SEMI (WEMI) \e$B%Q%C%1!<%8Fb$N\e(B README \e$B$r;2>H$7$F$/$@$5$$!#\e(B
+
+Semi-gnus \e$B$N%P!<%8%g%s$O!"I,MW$J\e(B SEMI (WEMI) \e$B$*$h$S\e(B FLIM \e$B$N%P!<%8%g%s$K\e(B
+\e$B?<$/4X78$7$F$$$^$9!#\e(B \e$BI,$:!"\e(B Semi-gnus \e$B$N%P!<%8%g%s$K$"$C$?\e(B SEMI (WEMI) 
+\e$B$*$h$S\e(B FLIM \e$B$r;HMQ$7$F$/$@$5$$!#\e(B
+
+\e$B8=:_!"$+$J$j$N%O%$%Z!<%9$G%P!<%8%g%s$,>e$,$C$F$$$^$9!#\e(B CVS \e$B$N\e(B main trunk
+(tag \e$BL5$7\e(B) \e$B$,0BDj%P!<%8%g%s$G$9!#\e(B
+
+@item 
+Q1.2: \e$BF~<jJ}K!$O\e(B? 
+
+CVS \e$B$K$h$kG[I[$r<g$H$7!"\e(Banonymous ftp \e$B$K$h$kG[I[$O$=$l$rJL$N7A$GG[I[$7$F\e(B
+\e$B$$$k$@$1$N$b$N$H$$$&0LCV$E$1$K$J$C$F$$$^$9!#\e(B
+
+CVS \e$B$G$N<hF@\e(B
+
+\e$B=i$a$F\e(B CVS \e$B$G<hF@$9$k$H$-$O0J2<$N$h$&$K$7$^$9!#\e(B
+
+@itemize @bullet
+@item login
+\e$B<!$NJ}K!$G%m%0%$%s$7$^$9!#\e(B% \e$B$O%W%m%s%W%H$G$9!#\e(B
+
+% cvs -d \
+   :pserver:anonymous@@chamonix.jaist.ac.jp:/hare/cvs/root login
+
+  CVS password: [CR] # NULL string
+
+@item checkout
+Semi-gnus \e$B$r%A%'%C%/%"%&%H$7$^$9!#<B:]$K$O!"\e(B-r gnus-6_8 \e$B$N$h$&$K%?%0$rIU\e(B
+\e$B$1$F<B9T$7$^$9!#\e(B
+
+% cvs -d \
+   :pserver:anonymous@@chamonix.jaist.ac.jp:/hare/cvs/root \
+   checkout [-r TAG] gnus
+
+@end itemize
+
+2\e$B2sL\$+$i$O!"\e(B
+
+% cvs -d :pserver:anonymous@@chamonix.jaist.ac.jp:/hare/cvs/root \
+   update [-r TAG] gnus
+
+\e$B$K$h$j<hF@$7$^$9!#\e(B
+
+anonymous ftp \e$B$G$N<hF@\e(B
+
+anonymous ftp \e$B$G$O0J2<$N>l=j$+$i<hF@$G$-$^$9!#\e(B
+
+@file{ftp://ftp.jaist.ac.jp/GNU/elisp/semi-gnus/snapshots/}
+
+SEMI, FLIM, APEL \e$B$N<hF@\e(B
+
+SEMI, FLIM, APEL \e$B$O!"\e(Banonymous ftp \e$B$G0J2<$N>l=j$+$i<hF@$7$^$9!#\e(B
+
+@table @var
+@item SEMI
+@file{ftp://ftp.jaist.ac.jp/GNU/elisp/semi/}
+
+@item FLIM
+@file{ftp://ftp.jaist.ac.jp/GNU/elisp/flim/}
+
+@item APEL
+@file{ftp://ftp.jaist.ac.jp/GNU/elisp/apel/}
+
+@end table
+
+@item 
+Q1.3: \e$BI,MW$J\e(B Emacs \e$B$N%P!<%8%g%s$O\e(B? 
+
+Semi-gnus \e$B$,8x<0$KBP1~$7$F$$$k\e(B Emacs \e$B$N%P!<%8%g%s$O<!$NDL$j$G$9!#\e(B
+
+@itemize @bullet
+@item 
+GNU Emacs
+
+\e$B%P!<%8%g%s\e(B 20.1 \e$B0J>e!#\e(B
+
+@item 
+XEmacs
+
+\e$B%P!<%8%g%s\e(B 20.2 \e$B0J>e$N\e(BMule \e$B5!G=IU$-\e(B
+
+@item
+Meadow
+
+\e$B%P!<%8%g%s\e(B 1.00 \e$B0J>e!#\e(B(Mule for Windows \e$B$G$OF0$-$^$;$s!#\e(B)
+@end itemize
+
+\e$B;32,9nH~$5$s\e(B <yamaoka@@ga.sony.co.jp> \e$B:n$NHs8x<0$N\e(B 
+@file{semi-mule23@@1934-YYMMDD.tar.gz} \e$B$r;HMQ$9$l$P\e(B Mule 2.3 / Emacs
+19.34 \e$B$G$OF0:n$9$k$G$7$g$&!#\e(B
+
+\e$B$3$l$O!"<!$N$H$3$m$+$i<hF@$7$F2<$5$$!#\e(B
+
+@file{http://www.jpl.org/elips}
+
+@item
+Q1.4: Semi-gnus \e$B$r\e(B GNU Emacs \e$B$H\e(B XEmacs \e$B$NN>J}$GF0$+$9$3$H$O$G$-$^$9$+\e(B? 
+
+\e$B%=!<%9!&%l%Y%k\e(B( *.el )\e$B$G$O2DG=$G$9!#\e(B 
+
+\e$B$7$+$7!"%P%$%H!&%3%s%Q%$%k$7$?%U%!%$%k\e(B ( *.elc ) \e$B$O6&M-$G$-$^$;$s$N$G!"\e(B
+\e$B$=$l$>$l;HMQ$9$k\e(B emacs \e$B$G%P%$%H%3%s%Q%$%k$9$kI,MW$,$"$j$^$9!#\e(B
+
+@item
+Q1.5: Semi-gnus \e$B$K$D$$$F$N>pJs8;$O\e(B?
+
+@table @var
+
+@item \e$B%K%e!<%9%0%k!<%W\e(B
+
+fj.news.reader.gnus \e$B$,$"$j$^$9$,!"\e(B Semi-gnus \e$B$K4X$7$F$N<ALd$G2sEz$rF@$i\e(B
+\e$B$l$k$H$9$l$P!"$[$H$s$I\e(B Semi-gnus-ja \e$B%a%$%j%s%0!&%j%9%H$N%a%s%P!<$G$7$g$&!#\e(B
+
+@item \e$B%a!<%j%s%0%j%9%H\e(B
+
+\e$B>\$7$/$O!"\e(B@xref{Mailing list FAQ, \e$B%a!<%j%s%0%j%9%H\e(B}, \e$B$r;2>H$7$F$/$@$5$$!#\e(B
+
+\e$B8=:_!"$3$l$,$b$C$H$b3N<B$J>pJs8;$G$7$g$&!#\e(B Semi-gnus \e$B$r;H$&$N$G$"$l$P!"\e(B
+\e$B@'Hs;22C$9$k$3$H$r$*$9$9$a$7$^$9!#\e(B
+
+\e$B%@%$%8%'%9%HHG%5!<%S%9$O$"$j$^$;$s!#\e(B
+
+@item WWW
+
+\e$B8x<0$N\e(B Semi-gnus \e$B%[!<%`%Z!<%8$,$G$-$kM=Dj$G$9!#<9I.<TJg=8Cf$G$9!#\e(B
+
+@end table
+
+@item
+Q1.6: Semi-gnus \e$B$HO"7H$9$k%Q%C%1!<%8$O\e(B?
+
+@table @var
+
+@item SEMI
+
+Semi-gnus \e$B$G$O\e(B TM \e$B$O;HMQ$G$-$^$;$s!#Be$o$j$K\e(B SEMI \e$B$r;HMQ$7$^$9!#\e(B
+Semi-gnus \e$B$r;HMQ$9$k$?$a$K$O\e(B SEMI, FLIM, APEL \e$B$OI,?\$G$9!#\e(B
+
+.emacs \e$B$N\e(B gnus \e$B$N=i4|@_Dj$h$jA0$K0J2<$N@_Dj$r=q$$$F2<$5$$\e(B:
+
+@lisp
+(load "mime-setup")
+@end lisp
+
+@item Insidious Big Brother Database 
+
+BBDB \e$B$O\e(B Netscape \e$B$GM-L>$J\e(B Jamie Zawinski <jwz@@netscape.com> \e$B$N:n$G!"\e(BGNU
+Emacs \e$BMQ$N\e(Brolodex-like \e$B$J%G!<%?%Y!<%9%W%m%0%i%`$G$9!#\e(B Jamie \e$B$O\e(B BBDB \e$B$N\e(B 
+Web \e$B%Z!<%8$r;}$C$F$$$^$9!#\e(B @file{http://people.netscape.com/jwz/bbdb/}\e$B$3\e(B
+\e$B$l$O!"<!$N$H$3$m$K$b$"$j$^$9!#\e(B 
+@file{ftp://ftp.xemacs.org/pub/xemacs/bbdb/} gnus-bbdb \e$B$O\e(B Brian Edmonds 
+\e$B$N<!$N$H$3$m$+$i$bF~<j$G$-$^$9!#\e(B 
+@file{http://www.cs.ubc.ca/spider/edmonds/usenet/gnus/gnus-bbdb.el}\e$B$3$l\e(B
+\e$B$O!"\e(B BBDB \e$B$N?7$7$$%P!<%8%g%sMQ$G!"FbMF$,\e(B gnus-bbdb.el \e$B$G$9!#\e(B
+
+Jamie \e$B$O8x<0$K$O\e(B BBDB \e$B$N%a%$%s%F%J!<%7%C%W$r\e(B Matt Simmons \e$B$K0z$-EO$7$F$$\e(B
+\e$B$^$9!#\e(B \e$BH`$N?7$7$$%P!<%8%g%s$OB8:_$7$^$9$,!"$"$/$^$G$b!HHs8x<0!I$J$b$N$G\e(B
+\e$B$9!#\e(B \e$B$3$l$O<!$N>l=j$K$"$j$^$9!#\e(B 
+@file{http://www.netcom.com/%7Esimmonmt/index.html}
+
+Semi-gnus \e$B$G;HMQ$9$k>l9g$K$O!"I,$:\e(B Q2.1 \e$B$r;2>H$7$F$/$@$5$$!#\e(B 
+
+@item gnus-offline
+gnus-offline \e$B$O!";T@nC#:H\e(B <t-ichi@@po.shiojiri.ne.jp> \e$B$N:n$G!"\e(B Semi-gnus 
+\e$B$r$$$o$f$k!V%*%U%i%$%s;HMQ!W\e(B(\e$B%K%e!<%95-;v!"%a%$%k$NAw<u?.$r0l3g$7$F9T$$!"\e(B
+\e$B$=$l$i$N%a%C%;!<%8$NFI$_=q$-$O%5!<%P!<$KL$@\B3$N>uBV$G9T$&\e(B)\e$B$9$k$3$H$rMF\e(B
+\e$B0W$K$9$k$?$a$N%Q%C%1!<%8$G$9!#\e(B
+
+\e$BF~<j@h$H!";HMQJ}K!$O<!$N$H$3$m$G$9!#\e(B 
+@file{http://www.shiojiri.ne.jp/%7Et-ichi/meadow.html}
+\e$B%_%i!<$O$3$A$i$G$9!#\e(B 
+@file{http://www.jpl.org/elips/}
+
+T-gnus (tag: ichikawa) \e$B$K$OI8=`$G4^$^$l$F$$$^$9!#\e(B
+
+@end table
+
+@item
+Q1.7: Draft \e$B$KJ]B8$7$?%a%C%;!<%8$r3+$/$HJ8;z$,2=$1$F$7$^$$$^$9!#\e(B
+
+gnus \e$B$,FI$_9~$_$K;HMQ$7$F$$$k$b$N$H0c$&%3!<%G%#%s%0%7%9%F%`$GJ]B8$5$l$F\e(B
+\e$B$$$k;v$,860x$G$9!#0J2<$N@_Dj$G2r7h$9$k$O$:$G$9!#\e(B
+
+@lisp
+(add-hook 'message-setup-hook
+          (lambda ()
+            (set-buffer-file-coding-system 'iso-2022-7bit)))
+@end lisp
+
+Q2.2 \e$B$b;2>H$7$F2<$5$$!#\e(B
+
+@item 
+Q1.8: Semi-gnus \e$B$N5/F0$rAa$/$9$k$K$O\e(B? 
+
+\e$B9XFI$7$F$$$J$$%0%k!<%W$r\e(B ``kill'' (*Group* \e$B%P%C%U%!!<$G\e(B C-k) \e$B$7$F$"$k$3\e(B
+\e$B$H$r3NG'$7$F$/$@$5$$!#$=$7$F!">o$K\e(B ``.newsrc'' \e$B$r>.$5$/J]$D$h$&$K$7$F$/\e(B
+\e$B$@$5$$!#\e(B
+
+@end itemize
+
+@node Customization FAQ
+@subsection \e$B%+%9%?%^%$%:$K4X$9$k\e(B FAQ
+
+@itemize @bullet
+@item
+Q2.1: Semi-gnus \e$B$N%P!<%8%g%s$r$"$2$?$i\e(B BBDB \e$B$,F0$+$J$/$J$C$F$7$^$$$^$7$?!#\e(B
+
+Semi-gnus 6.8 \e$B0J9_$N%P!<%8%g%s$G$O!"%*%j%8%J%k$N\e(B bbdb-gnus.el \e$B$OF0:n$7$^\e(B
+\e$B$;$s!#\e(B \e$B<!$N$h$&$KBP1~$7$F$/$@$5$$!#\e(B 
+
+@enumerate a
+@item
+bbdb-gnus.el \e$B$G!"\e(B gnus-article-buffer \e$B$NBe$j$K\e(B 
+gnus-original-article-buffer \e$B$r;2>H$9$k$h$&$K$9$k!#\e(B
+
+\e$B$b$7!"%*%j%8%J%k$N\e(B Gnus (September \e$B0J9_\e(B) \e$B$r;H$C$F$$$k$N$G$"$l$P!"$3$NJ}\e(B
+\e$BK!$,NI$$$G$7$g$&!#\e(B
+
+@item
+bbdb/gnus-update-record \e$B$r\e(B gnus-article-prepare-hook \e$B$NBe$j$K\e(B 
+gnus-article-display-hook \e$B$KDI2C$9$k!#\e(B
+
+@end enumerate
+
+a \e$B$NJ}K!!"$*$h$S\e(B bbdb-user-mail-names \e$B$KBP1~$7$?\e(B BBDB 2.00.01 \e$B$KBP$9$k\e(B 
+patch \e$B!"4pK\E*$J@_DjNc$,!"\e(B 
+@file{http://www.mdcnet.co.jp/~keiichi/bbdb.shtml} \e$B$K$"$j$^$9!#\e(B
+
+@item
+Q2.2: hook \e$B$r@_Dj$7$?$i\e(B Semi-gnus \e$B$NF0:n$,$*$+$7$/$J$C$?\e(B
+
+\e$BDL>o$NJQ?t$G$bF1MM$G$9$,!"\e(B Semi-gnus \e$B$G$OB?$/$N\e(B hook \e$B$K=i4|CM$,@_Dj$5$l\e(B
+\e$B$F$$$^$9!#\e(B
+
+\e$B$3$NCM$rJQ99$7$h$&$H$7$F!"JQ?t$,Dj5A$5$l$F$$$k%U%!%$%k$r%m!<%I$9$kA0$K\e(B 
+setq / add-hook \e$BEy$r9T$&$H!"$3$l$i$N=i4|CM$,@_Dj$5$l$:!"\e(B Semi-gnus \e$B$,@5\e(B
+\e$B>o$KF0:n$7$J$/$J$k>l9g$,$"$j$^$9!#\e(B(\e$BFC$K\e(B Semi-gnus \e$B$N%P!<%8%g%s$,JQ$C$?>l\e(B
+\e$B9g\e(B)
+
+\e$B$3$l$rKI$0$?$a$K$b!"\e(B Semi-gnus \e$B$K4X$9$k@_Dj$O$G$-$k$@$1\e(B ~/.gnus.el \e$BFb$G\e(B
+\e$B9T$&$h$&$K$7$F$/$@$5$$!#\e(B
+
+@item
+Q2.3: \e$B08@h$K$h$C$F\e(B Signature \e$B$rJQ99$9$k$K$O\e(B? 
+
+SEMI \e$B$K$O\e(B signature.el \e$B$H$$$&$3$N$?$a$N%D!<%k$,IUB0$7$F$$$^$9!#;HMQJ}K!$O0J2<$N$H$*$j$G$9!#\e(B 
+
+tm \e$B$N\e(B info \e$B$NFbMF$r\e(B SEMI \e$B$K9g$o$;$FJQ99$7$?$b$N$G$9!#\e(B
+
+SEMI \e$B$K$O\e(B *signature* \e$B$H$$$&\e(B signature \e$B$N<+F0@ZBX$(\e(B tool \e$B$,ImB0$7$F$*$j!"\e(B
+`semi-setup.el' \e$B$O$3$N@_Dj$b9T$J$$$^$9!#\e(Bmessage header \e$B$N\e(B field \e$B$K9g$o$;\e(B
+\e$B$F\e(B signature \e$B$N<+F0@ZBX$r9T$J$$$?$$>l9g$O\e(B `~/.emacs' \e$B$K0J2<$N$h$&$J$b$N\e(B
+\e$B$rF~$l$F2<$5$$!#!J>\$7$/$O\e(B signature.el \e$B$N@bL@=q$r;2>H$7$F2<$5$$!K\e(B
+
+@lisp
+(setq signature-file-alist
+      '((("Newsgroups" . "jokes")       . "~/.signature-jokes")
+        (("Newsgroups" . ("zxr" "nzr")) . "~/.signature-sun")
+        (("To" . ("ishimaru" "z-suzuki")) . "~/.signature-sun")
+        (("To" . "tea")                 . "~/.signature-jokes")
+        (("To" . ("sim" "oku" "takuo")) . "~/.signature-formal")
+        ))
+@end lisp
+
+@defvar mime-setup-use-signature
+
+\e$B$3$NJQ?t$,\e(B @code{nil} \e$B0J30$N;~!"\e(B@file{signature.el} \e$B$r;H$$$^$9!#=i4|CM$O\e(B 
+@code{t} \e$B$G$9!#\e(B
+@end defvar
+
+@defvar mime-setup-signature-key-alist
+
+\e$B3F\e(B major-mode \e$B$K$*$$$F\e(B signature \e$BA^F~L?Na$r@_Dj$9$Y$-\e(B key \e$B$r;XDj$7$^$9!#\e(B
+\e$B=i4|CM$O\e(B
+
+@lisp
+       ((mail-mode . "\C-c\C-w"))
+@end lisp
+
+\e$B$G$9!#\e(B
+
+\e$B$3$l$rJQ99$7$?$$>l9g$O!"4X?t\e(B set-alist \e$B$J$I$r;H$C$F$3$NJQ?t$r=q$-49$(\e(B
+\e$B$F2<$5$$!#\e(B
+
+@lisp
+(set-alist 'mime-setup-signature-key-alist
+          'news-reply-mode "\C-c\C-w")
+@end lisp
+
+@end defvar
+
+@defvar mime-setup-default-signature-key
+
+\e$B$"$k\e(B major-mode \e$B$K$*$$$F\e(B signature \e$BA^F~L?Na$r@_Dj$9$Y$-\e(B key \e$B$,8+$D$+$i$J\e(B
+\e$B$$>l9g!"$3$NJQ?t$K@_Dj$5$l$?\e(B key \e$B$,MQ$$$i$l$^$9!#=i4|CM$O!"\e(B
+@code{"\C-c\C-s"} \e$B$G$9!#\e(B
+@end defvar
+
+gnus-posting-style \e$B$r;HMQ$9$k;v$b$G$-$^$9!#\e(B
+
+@end itemize
+
+@node Reading News FAQ
+@subsection \e$B%K%e!<%9$rFI$`\e(B
+
+@node Reading Mail FAQ
+@subsection \e$B%a!<%k$rFI$`\e(B
+
+@node Mailing list FAQ
+@subsection \e$B%a!<%j%s%0%j%9%H\e(B
+
+@itemize bullet
+@item
+Q5.1: \e$B%a%$%j%s%0!&%j%9%H$+$iC&B`$9$k$K$O\e(B? 
+
+@table @var
+@item \e$BF|K\8lMQ\e(B 
+@file{semi-gnus-ja-unsubscribe@@meadow.scphys.kyoto-u.ac.jp} \e$B$K6u$N%a%$\e(B
+\e$B%k$rAw$C$F2<$5$$!#\e(B(Subject \e$B$bITMW$G$9!#\e(B)
+
+@item \e$B1Q8lMQ\e(B 
+@file{semi-gnus-en-unsubscribe@@meadow.scphys.kyoto-u.ac.jp} \e$B$K6u$N%a%$\e(B
+\e$B%k$rAw$C$F2<$5$$!#\e(B(Subject \e$B$bITMW$G$9!#\e(B)
+
+@end table
+
+@item
+Q5.2: \e$B%a%$%j%s%0!&%j%9%H$K;22C$9$k$K$O\e(B? 
+
+Semi-gnus \e$B$G$O!"MxMQ<T$H0];}<T$H$$$&=>Mh$NB?$/$N%Q%C%1!<%8$G:NMQ$5$l$F$$\e(B
+\e$B$k3+H/BN@)$O<h$C$F$$$^$;$s!#\e(B \e$B$=$N$?$a!"%a!<%j%s%0%j%9%H$H$7$F$bMxMQ<TMQ!"\e(B
+\e$B3+H/<TMQ$H$$$&6hJL$r9T$C$F$$$^$;$s!#\e(B
+
+@table @var
+@item \e$BF|K\8lMQ\e(B 
+@file{semi-gnus-ja-help@@meadow.scphys.kyoto-u.ac.jp} \e$B$K6u$N%a!<%k$rAw$C\e(B
+\e$B$F!"Aw$i$l$F$/$k%a!<%k$N;X<($K=>$C$F$/$/$@$5$$!#\e(B(Subject \e$B$bITMW$G$9!#\e(B) 
+
+@item \e$B1Q8lMQ\e(B 
+@file{semi-gnus-en-help@@meadow.scphys.kyoto-u.ac.jp} \e$B$K6u$N%a!<%k$rAw$C\e(B
+\e$B$F!"Aw$i$l$F$/$k%a!<%k$N;X<($K=>$C$F$/$@$5$$!#\e(B(Subject \e$B$bITMW$G$9!#\e(B)
+
+@end table
+
+@item
+Q5.3: Semi-gnus \e$B$K4X$9$kJ}?K7hDj$O\e(B? 
+
+Semi-gnus \e$B$N3+H/Ey$K4X$9$kJ}?K$N7hDj$OA4$F\e(B Semi-gnus-ja/en \e$B%a!<%j%s%0%j\e(B
+\e$B%9%HFb$G9T$o$l$^$9!#\e(B \e$B3F%a%s%P!<$+$i$NDs0F$O%"%s%1!<%H$N7A$GDs0F$5$l7h5D\e(B
+\e$B$5$l$^$9$,!"$=$NJ}K!$O<!$N<j=g$G9T$o$l$^$9!#\e(B
+
+@enumerate
+@item
+\e$B$3$N<j=g$O!"8xE*$J;^$N:n@.$d!";^$N4IM}K!!"\e(Bsnapshot \e$B$N07$$$J$I$N!"8xE*$J\e(B
+\e$B0F7o$K4X$7$F!"C10l$NJ}?K$r7hDj$5$l$k>l9g$KE,MQ$5$l$k!#\e(B \e$B;dE*$J;^$dHG$K4X\e(B
+\e$B$7$F$OE,MQ$5$l$J$$!#\e(B
+
+@item
+\e$B8xE*$J0F7o$NDs0F$*$h$S5DO@$O\e(B semi-gnus-ja@@meadow.scphys.kyoto-u.ac.jp \e$B$b\e(B
+\e$B$7$/$O\e(Bsemi-gnus-en@@meadow.scphys.kyoto-u.ac.jp \e$B$G9T$&!#\e(B
+
+@item
+\e$B:G=*E*$JJ}?K$O%"%s%1!<%H7k2L$NB??t0U8+$r:NMQ$9$k!#\e(B 
+
+@item
+\e$BDs0F<T$O%"%s%1!<%H$N2sEz4|8B$r@_$1$k$3$H$,$G$-$k!#$3$l$O#1F|0J>e$G$J$1$l\e(B
+\e$B$P$J$i$J$$!#\e(B
+
+@item
+\e$BDs0F<T$,%"%s%1!<%H$N2sEz4|8B$r;XDj$7$J$+$C$?>l9g!"Ds0FF|$h$j#1=54V8e$r2s\e(B
+\e$BEz4|8B$H$9$k!#\e(B
+
+@item
+\e$BDs0F<T$O!"%"%s%1!<%H$N2sEz4|8BFb$K!"$3$N%"%s%1!<%H$K#5L>0J>e$N2sEz$,$"$C\e(B
+\e$B$?;~E@$G%"%s%1!<%H$N=*N;$r@k8@$G$-$k!#\e(B \e$B$3$N>l9g!"%"%s%1!<%H$NB??t0U8+$r\e(B
+\e$B7kO@$H$9$k!#\e(B
+
+@item
+\e$B2sEz4|8B$,2a$.$F$b!"#5L>0J>e$N2sEz$,$J$$>l9g$O!"Ds0F<T$,$=$N7kO@$r7hDj$9\e(B
+\e$B$k$3$H$,$G$-$k!#\e(B
+
+@item
+\e$B;22C<T$O%"%s%1!<%H$N2sEz4|8BFb$K%"%s%1!<%H$N2sEz4|8B$N1dD9$rMW5a$G$-$k!#\e(B
+\e$BDs0F<T$,$3$l$rG'$a$k$+#5?M0J>e$N;22C<T$,$3$l$rG'$a$?>l9g!"2sEz4|8B$O1dD9\e(B
+\e$B$5$l$k!#\e(B
+@end enumerate
+
+@end itemize
diff --git a/texi/gnus-ja.texi b/texi/gnus-ja.texi
new file mode 100644 (file)
index 0000000..b742de3
--- /dev/null
@@ -0,0 +1,19702 @@
+\input texinfo                  @c -*-texinfo-*-
+
+@setfilename gnus-ja
+@settitle Semi-gnus 6.9.2 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{\gnusbraceleft}{{$>$}}
+\newcommand{\gnusbraceright}{{$>$}}
+
+\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\e(B
+\e$B$l$F$$$k8B$j!"$3$N%U%!%$%k$r\e(B Tex \e$B$K$+$1$F!"$=$N7k2L$r0u:~$9$k$3$H$r5v2D\e(B
+\e$B$9$k\e(B (\e$B$3$NCJMn$O0u:~$5$l$?%^%K%e%"%k$G$O;2>H$5$l$^$;$s\e(B)\e$B!#\e(B
+
+@end ignore
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that the
+entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+\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.9.2 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.9.2 \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!"\e(B2 \e$BHVL\$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$B=i4|@_Dj\e(B (default) \e$B$N%5!<%P!<$,Mn$A$F$$$k$H$-$O!"EvA3\e(B gnus \e$B$N5/F0$K$$$/\e(B
+\e$B$D$+$NLdBj$,H/@8$7$^$9!#$7$+$7!"%K%e!<%9%0%k!<%W$NB>$K$$$/$D$+%a!<%k$N%0\e(B
+\e$B%k!<%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\e(B
+\e$B$r;H$&$3$H$,$G$-$^$9!#5^$$$G$$$k$H$-$K$b$T$C$?$j$G$7$g$&!#$3$NL?Na$OK\Mh\e(B
+\e$B$N%5!<%P!<$K$O@\B3$7$^$;$s!=!=$=$NBe$o$j$K!"%l%Y%k\e(B 1 \e$B$H\e(B 2 \e$B$K$"$k$9$Y$F$N\e(B
+\e$B%0%k!<%W$r3hF0>uBV$K$7$^$9!J4pK\%0%k!<%W$G$J$$%0%k!<%W$O$=$N\e(B 2 \e$B$D$N%l%Y\e(B
+\e$B%k$K$7$F$*$/$N$,K>$^$7$$$G$7$g$&!K!#\e(B
+
+
+@node Slave Gnusae
+@section gnus \e$B$r%9%l!<%V$K$9$k\e(B
+@cindex slave
+
+\e$B$"$J$?$O\e(B 2 \e$B$D0J>e$N\e(B Emacs \e$B$H!"\e(B2 \e$B$D0J>e$N\e(B gnus \e$B$rF1;~$KF0$+$7$?$$$H;W$&$+\e(B
+\e$B$b$7$l$^$;$s!#0c$C$?\e(B @file{.newsrc} \e$B%U%!%$%k$r;H$C$F$$$k$J$i!JNc$($P!"\e(B2 
+\e$B$D$N0c$C$?%5!<%P!<$+$iFI$_9~$`$?$a$K!"\e(B2 \e$B$D$N0c$C$?\e(B gnus \e$B$rF0:n$5$;$F$$$k\e(B
+\e$B>l9g!K!"$^$C$?$/LdBj$O$"$j$^$;$s!#$=$l$r9T$($PNI$$$@$1$G$9!#\e(B
+
+\e$BLdBj$O!"F1$8\e(B @code{.newsrc} \e$B%U%!%$%k$r;H$&#2$D$N\e(B gnus \e$B$rF0$+$=$&$H$7$?$H\e(B
+\e$B$-$K5/$3$j$^$9!#\e(B
+
+\e$B$3$NLdBj$KBP=h$9$k$?$a$K!"\e(Bgnus \e$B%?%o!<$N%7%s%/%?%s%/$K$$$k2f!9$O?7$7$$35\e(B
+\e$BG0$K$?$I$j$D$-$^$7$?!#\e(B@dfn{\e$B%^%9%?!<\e(B} \e$B$H\e(B @dfn{\e$B%9%l!<%V\e(B} \e$B$G$9!#!J2f!9$O$3\e(B
+\e$B$N35G0$KFC5v$r?=@A$7$^$7$?!#$=$7$F!"$=$N8@MU$NCx:n8"$rF@$^$7$?!#$*8_$$$K\e(B
+\e$B4XO"$7$F$3$l$i$N8@MU$r;H$$$?$$$J$i!"#12s;H$&Kh$K!";d$K\e(B $1 \e$B$rAw$i$J$1$l$P\e(B
+\e$B$J$j$^$;$s!#$b$A$m$s!"\e(B@dfn{\e$B%3%s%T%e!<%?!<%"%W%j%1!<%7%g%s$N%^%9%?!<!?%9\e(B
+\e$B%l!<%V4X78\e(B}\e$B$N;HMQNA$O$b$C$H9b$/$J$j$^$9!#!K\e(B
+
+\e$B$H$K$+$/!"\e(B@kbd{M-x gnus}\e$B!J$b$7$/$O!"IaCJ$d$C$F$$$kJ}K!!K$G\e(B gnus \e$B$rIaDL$K\e(B
+\e$B5/F0$7$^$9!#$=$N8e$N%9%l!<%V\e(B gnus \e$B$O$=$l$>$l\e(B @kbd{M-x gnus-slave} \e$B$G5/F0\e(B
+\e$B$7$^$9!#%9%l!<%V$OIaDL$N\e(B @file{.newsrc} \e$B$OJ]B8$7$^$;$s$,!"Be$o$j$K\e(B 
+@dfn{\e$B%9%l!<%V%U%!%$%k\e(B} \e$B$K%9%l!<%V$N5/F0Cf$K$I$N$h$&$J%0%k!<%W$,FI$^$l$?\e(B
+\e$B$+$H$$$&>pJs$@$1$rJ]B8$7$^$9!#%^%9%?!<\e(B gnus \e$B$,5/F0$9$k$H$-!"$=$l$O$=$l$i\e(B
+\e$B$N%9%l!<%V%U%!%$%k$rFI$_9~$_!J$=$7$F>C$7!K!"$=$l$i$+$i$9$Y$F$N>pJs$r<h$j\e(B
+\e$B9~$_$^$9!#!J%9%l!<%V%U%!%$%k$O!":G=*E*$JJQ99$,M%@h$5$l$k$h$&$K$=$l$i$,:n\e(B
+\e$B$i$l$?0lO"$NF0:n$NCf$GFI$^$l$^$9!#!K\e(B 
+
+\e$B$b$A$m$s!"%9%l!<%V%U%!%$%k$+$i$N>pJs$OIaDL$N!JNc$($P!"%^%9%?!<$N!K%U%!%$\e(B
+\e$B%k$h$j$bM%@h$5$l$^$9!#\e(B
+
+
+@node Fetching a Group
+@section \e$B%0%k!<%W$r<hF@$9$k\e(B
+@cindex fetching a group
+
+@findex gnus-fetch-group
+\e$B;~!9!"!H$3$N%0%k!<%W$rFI$_$?$$$N$G$"$C$F!"\e(Bgnus \e$B$,5/F0$7$F$$$k$+$I$&$+$r\e(B
+\e$B5$$K$7$?$/$J$$!#!I$H$$$&$3$H$,$G$-$l$PJXMx$J$3$H$,$"$j$^$9!#$3$l$O!"MxMQ\e(B
+\e$B<T$h$j$b%W%m%0%i%`$N%3!<%I$r=q$/?M$KJXMx$J5!G=$G$9$,!"$I$A$i$K$7$m!"%3%^\e(B
+\e$B%s%I\e(B @code{gnus-fetch-group} \e$B$O$3$N5!G=$rDs6!$7$^$9!#$=$N%3%^%s%I$O!"%0\e(B
+\e$B%k!<%W$NL>A0$r0z?t$H$7$F$H$j$^$9!#\e(B
+
+
+@node New Groups
+@section \e$B?7$7$$%0%k!<%W\e(B
+@cindex new groups
+@cindex subscription
+
+@vindex gnus-check-new-newsgroups
+\e$B?7$7$$%K%e!<%9%0%k!<%W$rA4$/8+$J$$$GK~B-$G$"$k$J$i$P!"\e(B
+@code{gnus-check-new-newsgroups} \e$B$r\e(B @code{nil} \e$B$K@_Dj$9$k$3$H$,$G$-$^$9!#\e(B
+\e$B$3$l$r@_Dj$7$?>l9g!"5/F0$K$+$+$k;~4V$,C;$/$J$j$^$9!#$3$NJQ?t$,\e(B nil \e$B$K@_\e(B
+\e$BDj$5$l$F$$$F$b!"%0%k!<%W%P%C%U%!$G\e(B @kbd{U} \e$B$r2!$;$P$$$D$G$b?7$7$$%0%k!<\e(B
+\e$B%W$r9XFI$9$k$3$H$,$G$-$^$9\e(B (@pxref{Group Maintenance})\e$B!#@_Dj$5$l$F$$$J$$\e(B
+\e$B>l9g\e(B (default) \e$B$G$O$3$NJQ?t$O\e(B @code{ask-server} \e$B$G$9!#$3$NJQ?t$,\e(B 
+@code{always} \e$B$K@_Dj$5$l$F$$$k$H!"L?Na\e(B @kbd{g} \e$B$r<B9T$7$?$H$-$G$b\e(B gnus 
+\e$B$O%P%C%/%(%s%I$K?7$7$$%0%k!<%W$rC5$9$3$H$r5a$a$^$9\e(B (@pxref{Scanning New
+Messages})\e$B!#\e(B
+
+@menu
+* Checking New Groups::      \e$B$I$N%0%k!<%W$,?7$7$$$+$r7hDj$9$k!#\e(B
+* Subscription Methods::     \e$B?7$7$$%0%k!<%W$KBP$7$F\e(B gnus \e$B$O2?$r$9$Y$-$+\e(B
+* Filtering New Groups::     Gnus \e$B$KFCDj$N?7$7$$%0%k!<%W$rL5;k$5$;$k\e(B
+@end menu
+
+
+@node Checking New Groups
+@subsection \e$B?7$7$$%0%k!<%W$rD4$Y$k\e(B
+
+Gnus \e$B$O!"IaDL$O%0%k!<%W$,?7$7$$$+$I$&$+$r!"9XFI$7$F$$$k%0%k!<%W$H:o=|$5\e(B
+\e$B$l$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\e(B
+\e$B$j7hDj$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\e(B
+\e$B%5!<%P!<$K!":G8e$K@\B3$7$F$+$i?7$7$$%0%k!<%W$,$G$-$F$$$k$+$I$&$+$r?R$M$^\e(B
+\e$B$9!#$3$NJ}K!$OB.$$$7!"0B>e$,$j$G$9!#$3$l$K$h$j!":o=|$5$l$?%0%k!<%W$N%j%9\e(B
+\e$B%H$rJ];}$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%#\e(B
+\e$B%9%/>CHqNL$b>/$J$/$J$j$^$9!#$=$l$J$i!"$I$&$7$F$3$l$,=i4|@_Dj\e(B (default) 
+\e$B$G$O$J$$$N$G$7$g$&!);DG0$J$,$i!"$9$Y$F$N%5!<%P!<$,$3$NL?Na$rM}2r$9$k$o$1\e(B
+\e$B$G$O$J$$$N$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-newsroup-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$,=i4|@_Dj\e(B 
+(default) \e$B$K$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!"\e(B
+\e$B!J\e(B@kbd{S z} \e$B$K$h$C$F!KE,@Z$KA4$F$r:o=|$7$?$j!"!J\e(B@kbd{u} \e$B$K$h$C$F!K9XFI$7\e(B
+\e$B$?$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{.newsrc} \e$B$r$$$8$j$?$/$J$$>l9g$O!"\e(B
+@code{gnus-options-subscribe} \e$B$H\e(B @code{gnus-options-not-subscribe} \e$B$N#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{.newsrc} \e$B$N\e(B @samp{optinos -n} \e$B9T$HA4$/F1$8$3$H$r$7$^$9!#$I$A$i$NJQ\e(B
+\e$B?t$b@55,I=8=$G!"?7$7$$%0%k!<%W$OA0<T$K9gCW$9$l$PL5>r7o$K9XFI$5$l!"8e<T$K\e(B
+\e$B9gCW$9$k$HL5;k$5$l$^$9!#\e(B
+
+@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{.newsrc} \e$B$K$D$$$F$9$Y$FCN$C$F$$$^$9!#$9$Y$F\e(B
+\e$B$N9XFI>pJs$OEAE}E*$K$3$N%U%!%$%k$KC_@Q$5$l$^$9!#\e(B
+
+@sc{GNUS} \e$B$G$OJ*;v$,>/!9J#;($K$J$C$F$$$^$9!#%U%!%$%k\e(B @file{.newsrc} \e$B$r:G\e(B
+\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 
+
+@vindex gnus-always-read-dribble-file
+\e$B$b$7\e(B @code{gnus-always-read-dribble-file} \e$B$,\e(B @code{nil} \e$B$G$J$1$l$P!"\e(Bgnus 
+\e$B$OMxMQ<T$K?R$M$k;vL5$/!"%I%j%V%k%U%!%$%k$r5/F0;~$KFI$_9~$_$^$9!#\e(B
+
+
+
+@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!<%9$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!<%9%5!<%P!<$K$O<B:]$K$OB8:_$7$J$$!"$H$$$&%0%k!<\e(B
+\e$B%W$N$3$H$G$9!#56%0%k!<%W$rD4$Y$k$N$K$O$+$J$j;~4V$,$+$+$j$^$9$N$G!";~4V$H\e(B
+\e$B;q8;$r@aLs$9$k$?$a$K!"$3$N5!G=$O;H$o$J$$$[$&$,$$$$$G$7$g$&!#$=$7$F!"Be$o\e(B
+\e$B$j$K%0%k!<%W%P%C%U%!$G;~!956%0%k!<%W$rD4$Y$k$N$,NI$$$G$7$g$&\e(B
+(@pxref{Group Maintenance} \e$B$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!<%9$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$r354Q$G$-$k!#2?$,FI$a$k$N$+8+$F$_$h$&!#\e(B
+* Exiting Gnus::           \e$B%K%e!<%9FI$`$N$r$d$a$F!";E;v$r$7$h$&!#\e(B
+* Group Topics::           \e$B%0%k!<%W$r@Z$j:.$<$F!"%H%T%C%/$4$H$KJ,3d$9$k!#\e(B
+* Misc Group Stuff::       \e$BB>$K$G$-$k$3$H!#\e(B
+@end menu
+
+
+@node Group Buffer Format
+@section \e$B%0%k!<%W%P%C%U%!$N7A<0\e(B
+
+@menu
+* Group Line Specification::       \e$B%0%k!<%W%P%C%U%!$N8+$(J}$r7h$a$k!#\e(B
+* Group Modeline Specification::   \e$B%0%k!<%W%P%C%U%!$N%b!<%I9T!#\e(B
+* Group Highlighting::             \e$B%0%k!<%W%P%C%U%!$K$-$l$$$K?'$r$D$1$k!#\e(B
+@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!<%9%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{Mode Line
+Formatting}) \e$B$r@_Dj$9$k$3$H$GJQ99$G$-$^$9!#$3$$$D$O;XDjJ8;z$r$"$s$^$j$?\e(B
+\e$B$/$5$sCN$C$F$^$;$s!#\e(B
+
+@table @samp
+@item S
+\e$B4pK\%K%e!<%9%5!<%P!<!#\e(B
+@item M
+\e$B4pK\A*BrJ}K!!#\e(B
+@end table
+
+
+@node Group Highlighting
+@subsection \e$B%0%k!<%W$N%O%$%i%$%H\e(B
+@cindex highlighting
+@cindex group highlighting
+
+@vindex gnus-group-highlight
+\e$B%0%k!<%W%P%C%U%!$N%O%$%i%$%H$O\e(B @code{gnus-group-highlight} \e$BJQ?t\e(B
+\e$B$K$h$C$F@)8f$5$l$F$$$^$9!#$3$l$O\e(B @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!<%9%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 u
+@kindex G u (Group)
+@vindex gnus-useful-groups
+@findex gnus-group-make-useful-group
+@code{gnus-useful-groups} \e$B$K$"$k%0%k!<%W$N0l$D$r$D$/$j$^$9\e(B 
+(@code{gnus-group-make-useful-group})\e$B!#\e(B
+
+@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@pxref{Group Levels} \e$B$b;2>H\e(B
+\e$B$7$F2<$5$$!#\e(B@code{gnus-activate-level} \e$B$b30It%K%e!<%9%0%k!<%W$N3hF02=$K\e(B
+\e$B1F6A$r5Z$\$7$^$9!#\e(B
+
+
+@node Group Parameters
+@section \e$B%0%k!<%W%Q%i%a!<%?\e(B
+@cindex group parameters
+
+\e$B%0%k!<%W%Q%i%a!<%?$O!"$"$kFCDj$N%0%k!<%W%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!<%9$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!<%9%0%k!<%W$G$9$,!"%5!<%P$O%a!<\e(B
+\e$B%k%K%e!<%9%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!<%9\e(B
+\e$B%0%k!<%W$rI=$o$7$F$$$k$H$-$O!"\e(B@kbd{f} \e$B$r2!$7$?$H$-$K%a!<%k%0%k!<%W$N%k!<%k\e(B
+\e$B$,E,MQ$5$l$k$H$$$&$3$H$G$9!#\e(B
+
+\e$B$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!<%95-;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!<%9%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!#\e(B1\e$B2s$N\e(B @kbd{C-u} \e$B$N8e$G2!$5$l$k$H!"\e(B
+\e$B%5!<%P!<$K?7$7$$%0%k!<%W$r?R$M$k$?$a$KJ}K!\e(B @code{ask-server} \e$B$r;H$$$^$9!#\e(B
+2\e$B2s$N\e(B @kbd{C-u} \e$B$N8e$G2!$5$l$k$H!"%5!<%P!<$K?7$7$$%0%k!<%W$r?R$M$k$?$a$K\e(B
+\e$B:G$b40A4$G$"$k$H;W$o$l$kJ}K!$rMQ$$!"?7$7$$%0%k!<%W$r%>%s%S$H$7$F9XFI$7$^\e(B
+\e$B$9!#\e(B
+
+@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!#\e(B
+\e$B$3$NL?Na$O<g$K$$$/$D$+$N%H%T%C%/$KF1$8%0%k!<%W$,$"$C$F!"$=$l$r%H%T%C%/$N\e(B
+\e$B0l$D$+$i<h$j=|$-$?$$$H$-$KLrN)$A$^$9!#$"$J$?$O%0%k!<%W$rA4$F$N%H%T%C%/$+\e(B
+\e$B$i<h$j=|$-$?$$$H;W$&$+$bCN$l$^$;$s$,!"$=$N>l9g$O!"\e(Bgnus \e$B$O$"$J$?$,<!2s$K\e(B 
+gnus \e$B$r5/F0$7$?$H$-$K$=$l$r%k!<%H%H%T%C%/$KIU$12C$($^$9!#<B:]$N$H$3$m!"\e(B
+\e$BA4$F$N?7$7$$%0%k!<%W\e(B (\e$B$b$A$m$s!"$=$l$O$I$N%H%T%C%/$K$bB0$7$F$$$^$;$s\e(B) \e$B$O\e(B
+\e$B%k!<%H%H%T%C%/$K8=$o$l$^$9!#\e(B
+
+\e$B$3$NL?Na$O%W%m%;%90u\e(B/\e$B@\F,0z?t$N=,47$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
+@itemx TAB
+@kindex T TAB (Topic)
+@kindex TAB (Topic)
+@findex gnus-topic-indent
+\e$B8=:_$N%H%T%C%/$N\e(B ``\e$B;z2<$2\e(B'' \e$B$r9T$$!"$=$NA0$N%H%T%C%/$NI{%H%T%C%/$K$7$^$9\e(B 
+(@code{gnus-topic-indent})\e$B!#@\F,0z?t$rM?$($k$H!"H?BP$K$=$N%H%T%C%/\e(B
+\e$B$N;z2<$2$rLa$7$^$9!#\e(B
+
+@item M-TAB
+@kindex M-TAB (Topic)
+@findex gnus-topic-unindent
+\e$B8=:_$N%H%T%C%/$N\e(B ``\e$B;z2<$22sI|\e(B'' (un-indent) \e$B$r9T$$!"$=$l$,8=:_$N?F$N?F$N\e(B
+\e$BI{%H%T%C%/$K$J$k$h$&$K$7$^$9\e(B (@code{gnus-topic-unindent})\e$B!#\e(B
+
+@item C-k
+@kindex C-k (Topic)
+@findex gnus-topic-kill-group
+\e$B%0%k!<%W$"$k$$$O%H%T%C%/$r\e(B kill \e$B$7$^$9\e(B(@code{gnus-topic-kill-group})\e$B!#%H\e(B
+\e$B%T%C%/Fb$K$"$C$?%0%k!<%W$bA4$F!"%H%T%C%/$H0l=o$K:o=|$5$l$^$9!#\e(B
+
+@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!<%9$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!<%9$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-score} \e$B$H$N:9$,\e(B @code{gnus-summary-zcore-fuzz}
+\e$B$h$j$b>.$5$$$H!"$3$N;EMM$O;H$o$l$^$;$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 (@pxref{Mode Line
+Formatting})\e$B!#\e(B@code{gnus-summary-mode-line-format} \e$B$r2?$G$b9%$-$J$b$N$K\e(B
+\e$BJQ99$7$F$/$@$5$$!#%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 z
+\e$B8=:_$N5-;v%9%3%"!#\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!#\e(B(@dfn{\e$BF1$8\e(B} \e$B$O$3$3$G$O\e(B @dfn{\e$BBgBNF1$8\e(B} \e$B$H$$$&0UL#$+$bCN$l\e(B
+\e$B$^$;$s!#>\:Y$O\e(B @code{gnus-summary-gather-subject-limit} \e$B$r8+$F$/$@$5$$\e(B
+(@pxref{Customizing Threading} \e$B$b;2>H$7$F$/$@$5$$\e(B)\e$B!#\e(B) \e$BF1$8I=Bj$N5-;v$,L5\e(B
+\e$B$$$H$-$O:G=i$NL$FI5-;v$K0\F0$7$^$9!#\e(B
+
+\e$B$3$NJQ?t$O!"%9%l%C%II=<($r9T$C$F$$$k$H$-$O$"$^$jLr$KN)$?$J$$$G$7$g$&!#\e(B
+
+@item gnus-summary-check-current
+@vindex gnus-summary-check-current
+@code{nil} \e$B$G$J$$$H!"$9$Y$F$N!XL$FI!Y0\F0L?Na$O!"<!!J$b$7$/$OA0!K$N5-;v$K\e(B
+\e$B0\F0$7$^$;$s!#$=$NBe$o$j$K!"$=$l$i$O8=:_$N5-;v$rA*$S$^$9!#\e(B
+
+@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-next-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 M-RET
+@kindex M-RET (\e$B35N,\e(B)
+@findex gnus-summary-scroll-down
+\e$B8=:_$N5-;v$r0l9T8e$m$X%9%/%m!<%k$7$^$9\e(B (@code{gnus-summary-scroll-down})\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!<%9$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!<%9$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!<%9%0%k!<%W$KE>Aw$7$^$9\e(B
+(@code{gnus-summary-post-forward})\e$B!#@\F,0z?t$,M?$($i$l$?$H$-$O!"E>Aw5-;v\e(B
+\e$B$N%X%C%@!<$r40A4$K<h$j9~$_$^$9!#\e(B
+
+@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!<%9%0%k!<%W$KAw$j$^$9\e(B
+(@code{gnus-uu-digest-mail-forward})\e$B!#$3$NL?Na$O%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47\e(B
+\e$B$rMQ$$$^$9!#\e(B
+
+@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!<%9$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$*$)!"$9$s$4$$?78l6g$@!*!K$r7hDj$9$k0u$,$"$j$^\e(B
+\e$B$9!#1Q;z$N0u$O0lHLE*$K$O\e(B @dfn{\e$B4{FI\e(B}\e$B$r0UL#$7!"1Q;z$G$J$$J8;z$O0lHLE*$K\e(B
+@dfn{\e$BL$FI\e(B}\e$B$r0UL#$7$^$9!#\e(B
+
+\e$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-pick-unmark-article-or-thread
+\e$B%9%l%C%I$+5-;v$rL$A*Br$K$7$^$9\e(B 
+@code{gnus-pick-unmark-article-or-thread})\e$B!#JQ?t\e(B 
+@code{gnus-thread-hide-subtree} \e$B$,\e(B true \e$B$G$"$l$P!"$3$N%-!<$O%9%l%C%I$N:G\e(B
+\e$B=i$N5-;v$G;H$o$l$?$H$-$O%9%l%C%I$rL$A*Br$K$7$^$9!#$=$&$G$J$$>l9g$O!"$=$N\e(B
+\e$B5-;v$@$1$rL$A*Br$K$7$^$9!#$=$N9T$N%9%l%C%I$+5-;v$rL$A*Br$K$9$k$?$a$K$3$N\e(B
+\e$B%-!<$K?tCM@\F,0z?t$rM?$($k;v$,$G$-$^$9!#\e(B
+
+@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
+@subsubsection \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!<%9%j!<%@!<$,B8:_$9$k8=:_$G$O!"\e(B
+\e$B$"$^$j$K87$7$$MW5a$+$bCN$l$^$;$s!#$b$7$=$&;W$&$N$J$i!"$3$NJQ?t$rNc$($P\e(B 
+20 \e$B$K@_Dj$7$F!"I=Bj$N:G=i$N\e(B 20 \e$BJ8;z$@$1$,0lCW$9$k$3$H$rMW5a$9$k$h$&$K$9$k\e(B
+\e$B$3$H$,$G$-$^$9!#$3$NJQ?t$rK\Ev$KDc$$?t;z$K@_Dj$9$k$H!"\e(Bgnus \e$B$,L\$KF~$kA4$F\e(B
+\e$B$r0l$D$N%9%l%C%I$K=8$a$k$N$r8+$k$3$H$,$G$-$k$G$7$g$&!#$=$7$F!"$=$l$O$"$^$j\e(B
+\e$BM-MQ$G$O$"$j$^$;$s!#\e(B
+
+@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!<%9%j!<%@!<$GEj9F$7$?5-;v$OE,@Z$K=8$a$i$l$J$$$H$$$&$3$H$G\e(B
+\e$B$b$"$j$^$9!#A*Br8"$O$"$J$?$K$"$j$^$9!=!=1VIB$+%3%l%i$+!#\e(B
+
+@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
+@subsubsection \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
+@subsubsection \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
+
+@c @vindex gnus-use-header-prefetch
+@c @code{gnus-use-header-prefetch} \e$B$,\e(B @code{nil} \e$B$G$J$$$H!"<!$N%0%k!<%W$+$i\e(B
+@c \e$B5-;v$r@h$K<hF@$7$^$9!#\e(B
+
+
+@node Article Caching
+@section \e$B5-;v$N%-%c%C%7%e\e(B
+@cindex article caching
+@cindex caching
+
+\e$B$b$7\e(B@emph{\e$BHs>o$K\e(B}\e$BCY$$\e(B @sc{nntp} \e$B@\B3$G$"$k$J$i$P!"5-;v%-%c%C%7%e$r$9$k$3$H\e(B
+\e$B$r9M$($k$+$b$7$l$^$;$s!#$=$&$9$k$H!"$=$l$>$l$N5-;v$O$"$J$?$N%[!<%`%G%#%l%/\e(B
+\e$B%H%j$N2<$K%m!<%+%k$KN/$a$i$^$9!#4{$K?dB,$5$l$F$$$k$+$bCN$l$^$;$s$,!"$3$l$O\e(B 
+@emph{\e$B5pBg$J\e(B}\e$B%G%#%9%/%9%Z!<%9$r?)$$!"\e(Bi\e$B%N!<%I$bHs>o$KB.$/?)$$$D$V$92DG=@-$,\e(B
+\e$B$"$k$?$a!"$=$l$O$"$J$?$NF,$r1K$,$;$k;v$K$J$k$+$b$7$l$^$;$s!#%&%)%C%+$NCf$G!#\e(B
+
+\e$B$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
+@vindex gnus-cacheable-groups
+\e$B$$$/$D$+$N%0%k!<%W$G$O%-%c%C%7%e$r$7$?$/$J$$$H$$$&$N$ONI$/$"$k;v$G$9!#Nc$(\e(B
+\e$B$P!"\e(B@code{nnml} \e$B%a!<%k%G%#%l%/%H%j!<$,%[!<%`%G%#%l%/%H%j!<$N2<$K$"$l$P!"$=\e(B
+\e$B$l$r$"$J$?$N%[!<%`%G%#%l%/%H%j!<$N2<$NJL$N>l=j$K%-%c%C%7%e$9$k$N$O0UL#$NL5\e(B
+\e$B$$;v$G$9!#$"$J$?$,#2G\$NMFNL$r;H$&;v$,NI$$$H46$8$J$$8B$j$O!#\e(B
+
+\e$B%-%c%C%7%e$r@)8B$9$k$?$a$K!"\e(B@code{gnus-uncacheable-groups} \e$B$r\e(B \e$B$r%-%c%C%7%e\e(B
+\e$B$9$k%0%k!<%W$NO"A[%j%9%H!"Nc$($P\e(B @samp{^nntp}\e$B!"$H$9$k$+!"@55,I=8=\e(B 
+@code{gnus-uncacheable-group} \e$B$rNc$($P!"\e(B@samp{^nnml} \e$B$K@_Dj$7$F2<$5$$!#\e(B
+\e$BN>J}$NJQ?t$N=i4|CM$O\e(B @code{nil} \e$B$G$9!#$b$7%0%k!<%W$,N>J}$N@55,I=8=$K9gCW\e(B
+\e$B$9$k$H!"$=$N%0%k!<%W$O%-%c%C%7%e$5$l$^$;$s!#\e(B
+
+@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!<%9%0%k!<%W$rFI$s$G$$$F!"$=$N$^$^1J1s$KJ]B8$7$FHkB"$7$?$$!"$$\e(B
+\e$B$/$D$+$N2ACM$"$kJu@P$K=P2q$C$?$H$7$^$7$g$&!#IaDL$O$=$l$r%U%!%$%k$KJ]B8$7$^\e(B
+\e$B$9!JB?$/$NJ]B8L?Na$N0l$D$r;H$C$F!K!#$=$l$NLdBj$O!"C1$K$"$N!"7y$J$@$1$G$9!#\e(B
+\e$BM}A[E*$K$O!"5-;v$O%0%k!<%W$G$"$J$?$,8+$D$1$?>l=j$K1J1s$K;D$C$F$$$k$Y$-$G$7$g\e(B
+\e$B$&!#%K%e!<%9%5!<%P!<$K$*$1$k4|8B:o=|$K$O1F6A$5$l$J$$$G!#\e(B
+
+\e$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!<%9%0%k!<%WA4BN$rI|9f2=\e(B
+\e$B$7$FJ]B8$7$?$$$N$G$"$l$P!"IaDL$O\e(B @kbd{M P a} (@code{gnus-uu-mark-all})
+\e$B$H$7!"$=$l$+$i\e(B @kbd{X U} (@code{gnus-uu-decode-uu-and-save}) \e$B$H$7$^$9!#\e(B
+
+\e$B$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
+@subsubsection \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
+@subsubsection 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 highlighting
+
+\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
+@findex gnus-article-maybe-highlight
+\e$B8=:_$N5-;v$r$b$C$H%O%$%i%$%H\e(B (highlight) \e$B$7$^$9!#$3$N4X?t$O!"%X%C%@!<!"\e(B
+\e$B0zMQJ8!"=pL>$r%O%$%i%$%H$7!"K\BN\e(B (body) \e$B$HF,\e(B (head) \e$B$K%\%?%s$r2C$($^$9!#\e(B
+
+\e$B$?$$$F$$$NMxMQ<T$OBe$o$j$K\e(B @code{gnus-article-highlight} \e$B$r\e(B 
+@code{gnus-article-display-hook} (@pxref{Customizing Articles}) \e$B$G;H$&$[\e(B
+\e$B$&$r9%$`$G$7$g$&!#$3$l$O>/$7$@$1@Q6K@-$,8:>/$7$^$9\e(B---\e$B$=$l$O%X%C%@!<$H=p\e(B
+\e$BL>$@$1$r%O%$%i%$%H$7!"%\%?%s$r2C$($^$9!#\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%$\e(B
+\e$B%i%$%H$OJQ?t\e(B @code{gnus-header-face-alist} \e$B$K$7$?$,$C$F$J$5$l!"$=$l$O$=\e(B
+\e$B$l$>$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=8=\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\e(B
+\e$B%O%$%i%$%H$9$k$N$K;H$o$l$k%U%'%$%9\e(B (face) (@pxref{Faces and Fonts})\e$B!"\e(B
+@var{\e$BFbMF\e(B}\e$B$O%X%C%@!<$NCM$r%O%$%i%$%H$9$k%U%'%$%9$G$9!#:G=i$K9gCW$7$?$b$N\e(B
+\e$B$,;H$o$l$^$9!#\e(B@var{\e$B@55,I=8=\e(B}\e$B$O\e(B @samp{^} \e$B$,IU$1$i$l$k$Y$-$G$O$J$$;v$KCm0U\e(B
+\e$B$7$F$/$@$5$$!=!=\e(Bgnus \e$B$,$=$l$rIU$12C$($^$9!#\e(B
+
+@item W H c
+@kindex W H c \e$B!J35N,!K\e(B
+@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!#5-;v$r<+F0E*$K%O%$%i%$%H$9$k\e(B
+\e$BJ}K!$K$D$$$F$O\e(B @xref{Customizing Articles} \e$B$r;2>H$7$F2<$5$$!#\e(B
+@end table
+
+
+@node Article Fontisizing
+@subsection \e$B5-;v$N%U%)%s%HJQ99\e(B
+@cindex emphasis
+@cindex article emphasis
+
+@cindex gnus-article-emphasize
+@kindex W e \e$B!J35N,!K\e(B
+\e$B?M!9$O$h$/%K%e!<%9$N5-;v$G\e(B @samp{_\e$B$3$l\e(B_} \e$B$d\e(B @samp{*\e$B$3$l\e(B*} \e$B$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-emphasis-alist
+\e$B6/D4$,$I$N$h$&$K1i;;$5$l$k$+$OJQ?t\e(B @code{gnus-emphasis-alist} \e$B$K$h$C$F@)\e(B
+\e$B8f$5$l$^$9!#$3$l$O:G=i$NMWAG$,9gCW$9$k$Y$-@55,I=8=$G$"$kO"A[%j%9%H$G$9!#\e(B
+\e$B#2HVL\$NMWAG$O$I$N@55,I=8=$N%0%k!<%W$,6/D48lA4BN$r8+$D$1$k$?$a$K;H$o$l$k\e(B
+\e$B$+$r<($9?t;z$G$9!##3HVL\$O$I$N@55,I=8=$N%0%k!<%W$,I=<($5$l%O%$%i%$%H$5$l\e(B
+\e$B$k$+$r7h$a$k?t;z$G$9!#!J$3$N#2$D$N%0%k!<%W$N4V$N5-;v$O1#$5$l$^$9!#!K#4HV\e(B
+\e$BL\$O%O%$%i%$%H$N%U%'%$%9$G$9!#\e(B
+
+@lisp
+(setq gnus-emphasis-alist
+      '(("_\\(\\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=i4|@_Dj$G$O#7$D$N5,B'$,$"$j!"$=$l$i$O0J2<$N%U%'%$%9$rMQ$$$^$9!'\e(B
+@code{gnus-emphasis-bold}, @code{gnus-emphasis-italic},
+@code{gnus-emphasis-underline}, @code{gnus-emphasis-bold-italic},
+@code{gnus-emphasis-underline-italic},
+@code{gnus-emphasis-underline-bold},
+@code{gnus-emphasis-underline-bold-italic}.
+
+\e$B$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
+\e$B5-;v$r<+F0E*$K%U%)%s$HJQ99$5$;$k$?$a$K$O\e(B @xref{Customizing Articles} \e$B$r\e(B
+\e$B;2>H$7$F2<$5$$!#\e(B
+
+
+@node Article Hiding
+@subsection \e$B5-;v$r1#$9\e(B
+@cindex article hiding
+
+\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$B5-;v%P%C%U%!$G$?$/$5$s$N1#F?$r$7$^$9\e(B (@kbd{gnus-article-hide})\e$B!#FC$K!"$3\e(B
+\e$B$N4X?t$O%X%C%@!<!"\e(BPGP\e$B!"0zMQJ8$H=pL>$r1#$7$^$9!#\e(B
+
+@item W W h
+@kindex W W h \e$B!J35N,!K\e(B
+@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-cited-opend-text-button-line-format
+@itemx gnus-cited-closed-text-button-line-format
+@vindex gnus-cited-closed-text-button-line-format
+@vindex gnus-cited-opend-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$?%j!<%8%g%s$NJ8;z$N?t$G$9!#\e(B
+@item n
+\e$B1#$5$l$?J8$N9T$N?t$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
+
+@item W W C-c
+@kindex W W C-c (\e$B35N,\e(B)
+@findex gnus-article-hide-citation-maybe
+
+\e$B0J2<$N\e(B2\e$B$D$NJQ?t$K4p$E$$$F0zMQ$r1#$7$^$9\e(B 
+(@code{gnus-article-hide-citation-maybe}):
+
+@table @code
+@item gnus-cite-hide-percentage
+@vindex gnus-cite-hide-percentage
+\e$B$b$70zMQJ8$,$3$NJQ?t\e(B (\e$B=i4|CM$O\e(B 50) \e$B$h$jBg$-$$3d9g$G$"$l$P!"0zMQJ8$r1#$7\e(B
+\e$B$^$9!#\e(B
+
+@item gnus-cite-hide-absolute
+@vindex gnus-cite-hide-absolute
+\e$B1#$5$l$k0zMQJ8$O>/$J$/$H$b$3$ND9$5\e(B (\e$B=i4|CM\e(B 10) \e$B$G$J$1$l$P$J$j$^$;$s!#\e(B
+@end table
+
+@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
+
+\e$B<+F0E*$K5-;v$NMWAG$r1#$9$?$a$NJ}K!$O\e(B @xref{Customizing Articles} \e$B$r;2>H\e(B
+\e$B$7$F2<$5$$!#\e(B
+
+
+@node Article Washing
+@subsection \e$B5-;v@vBu\e(B
+@cindex washing
+@cindex article washing
+
+\e$B;d$?$A$O$3$l$r$b$C$H$b$JM}M3$N2<$G!X5-;v@vBu!Y\e(B(article washing) \e$B$H8F$s$G$$\e(B
+\e$B$^$9!#$9$J$o$A!"%-!<\e(B @kbd{A} \e$B$O;H$o$l$F$$$k$N$G!"Be$o$j$K%-!<\e(B @kbd{W} \e$B$r;H\e(B
+\e$B$&I,MW$,$"$k$N$G$9!#\e(B
+
+\e$B;d$?$A$O\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!#%Z!<%8$N6h@Z$j$KIU$$$F$O\e(B 
+@xref{Misc Article} \e$B$r;2>H$7$F2<$5$$!#\e(B
+
+@item W r
+@kindex W r \e$B!J35N,!K\e(B
+@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
+
+\e$B5-;v$N@vBu$r<+F0E*$K$9$k$?$a$NJ}K!$O\e(B @xref{Customizing Articles} \e$B$r;2>H\e(B
+\e$B$7$F2<$5$$!#\e(B
+
+
+@node Article Buttons
+@subsection \e$B5-;v$N%\%?%s\e(B
+@cindex buttons
+
+\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
+
+\e$B5-;v$r<+F0E*$K%\%?%s2=$9$kJ}K!$O\e(B @xref{Customizing Articles} \e$B$r;2>H$7$F\e(B
+\e$B2<$5$$!#\e(B
+
+
+@node Article Date
+@subsection \e$B5-;v$NF|IU\e(B
+
+\e$BF|IU$OJ9$$$?;v$NL5$$2?$+JUnA$J;~4VBS\e(B (timezone) \e$B$G:n@.$5$l$F$$$k;v$,NI$/$"\e(B
+\e$B$k$N$G!"5-;v$,Aw$i$l$?$H$-$K2?;~$G$"$C$?$+$rCN$k;v$,$G$-$k$N$OHs>o$KNI$$;v\e(B
+\e$B$G$7$g$&!#\e(B
+
+@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
+
+\e$B<+F0E*$K9%$`=q<0$GF|IU$rI=<($9$kJ}K!$O\e(B @xref{Customizing Articles} \e$B$r;2\e(B
+\e$B>H$7$F2<$5$$!#\e(B
+
+
+@node Article Signature
+@subsection \e$B5-;v$N=pL>\e(B
+@cindex signatures
+@cindex article signature
+
+@vindex gnus-signature-separator
+\e$B$=$l$>$l$N5-;v$O#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!<%9$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-pick-article-or-thread
+\e$B8=:_$N9T$N5-;v$+%9%l%C%I$rA*Br$7$^$9\e(B 
+(@code{gnus-pickd-article-or-thread})\e$B!#$b$7JQ?t\e(B 
+@code{gnus-thread-hide-subtree} \e$B$,\e(B true \e$B$G$"$l$P!"$3$N%-!<$O%9%l%C%I$N:G\e(B
+\e$B=i$N5-;v$G;H$o$l$?$H$-$O%9%l%C%IA4BN$rA*Br$7$^$9!#$=$&$G$J$1$l$P!"$=$l$O\e(B
+\e$B$=$N5-;v$@$1$rA*Br$7$^$9!#$b$7?tCM@\F,0z?t$rM?$($i$l$l$P$=$N%9%l%C%I$+5-\e(B
+\e$B;v$X$H@8$s$G$$$-!"$=$l$rA*Br$7$^$9!#\e(B (\e$B9T?t$OIaDL$O35N,A*Br9T$N:G=i$KI=<(\e(B
+\e$B$5$l$F$$$^$9!#\e(B)
+
+@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-pick-unmark-article-or-thread
+\e$B%9%l%C%I$+5-;v$rL$A*Br$K$7$^$9\e(B (@code{gnus-pick-unmark-article-or-thread})\e$B!#JQ?t\e(B @code{gnus-thread-hide-subtree} \e$B$,\e(B true \e$B$G$"$l$P!"$3$N%-!<$O%9%l%C%I$N:G=i$G;H$o$l$l$P%9%l%C%I$rL$A*Br$K$7$^$9!#$=$&$G$J$$>l9g$O$=$l$O5-;v$@$1$rL$A*Br$K$7$^$9!#$=$N9T$K$"$k%9%l%C%I$+5-;v$rL$A*Br$K$9$k$?$a$K$3$N%-!<$K?tCM@\F,0z?t$rM?$($k;v$,$G$-$^$9!#\e(B
+
+@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$BA4$F$NIaDL$N35N,%b!<%IL?Na$OA*Br%b!<%I\e(B (pick-mode)\e$B$G$b;HMQ2DG=$G$9$,!"\e(B
+@kbd{u} \e$B$ONc30$G$9!#$7$+$7!"F1$84X?t\e(B 
+@code{gnus-summary-tick-article-forward} \e$B$K3d$jEv$F$i$l$F$$$k\e(B @kbd{!} \e$B$r\e(B
+\e$B;H$&;v$,$G$-$^$9!#\e(B
+
+\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\e(B (@pxref{Mode
+Line Formatting})\e$B!#%G%#%U%)%k%H$O\e(B @samp{Gnus: %%b %S %Z} \e$B$G$9!#;HMQ2DG=\e(B
+\e$B$J;XDj$O\e(B @pxref{Summary Buffer Mode Line} \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 t
+@kindex B t (\e$B35N,\e(B)
+@findex gnus-summary-respool-trace
+\e$BF1MM$K!"$3$NL?Na$O:FN/$a9~$_$r$9$k$H$-$K;H$o$l$?A4$F$NFC5iJ,3dJ}<0$r!"$b\e(B
+\e$B$7$=$l$,$"$l$PI=<($7$^$9\e(B (@code{gnus-summary-respool-trace})\e$B!#\e(B
+
+@item B p
+@kindex B p \e$B!J35N,!K\e(B
+@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!<%9%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-newsrc})\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 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!<%9%j!<%@$,62I]$G;`$s$G$7$^$&$b$N$G$9!#\e(B
+
+@sc{mime} \e$B$O$=$N5-;v$,$I$s$JJ8;z=89g$r;HMQ$7$F$$$k$+!"$=$NJ8;z$r$I$&Id9f2=\e(B
+\e$B$7$F$$$k$+$r;XDj$9$k$3$H$,$G$-!"$5$i$K$O3($d$=$NB>$N$_$@$i$J$b$N$rL5<Y5$$J\e(B
+\e$B3J9%$N5-;v$GKd$a9~$`$3$H$5$(2DG=$K$7$^$9!#\e(B
+
+@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
+@findex gnus-article-maybe-hide-headers
+\e$B=i4|@_Dj$G$O$G$O$3$N%U%C%/$K$O\e(B @code{gnus-article-maybe-hide-headers},
+@code{gnus-hide-boring-headers}, @code{gnus-article-treat-overstrike},
+@code{gnus-article-maybe-highlight} (XEmacs \e$B$G$O!"\e(B
+@code{gnus-article-display-x-face} \e$B$b\e(B) \e$B$@$1$,4^$^$l$F$$$^$9$,!"$3$N%U%C\e(B
+\e$B%/$KF~$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$B$$!#Cm0UE@$H$7$F!"$3$N%U%C%/$G$O4X?t$N=g=x$,1F6A$9$k$3$H$,$"$k$N$G!"$*K>\e(B
+\e$B$_$N7k2L$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{C-c ^} \e$B$r2!\e(B
+\e$B$9$H!"\e(Bgnus \e$B$O%5!<%P!<$+$i$=$N5-;v$r<h$C$F$3$h$&$H$7$^$9\e(B
+(@code{gnus-article-refer-article})\e$B!#\e(B
+
+@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$?MM<0J8;z\e(B
+\e$BNs$G$9\e(B (@pxref{Mode Line Formatting})\e$B!#$3$l$O0J2<$N0l$D$N3HD%$r=|$$$F!"\e(B
+\e$B$=$NJQ?t$HF1$8MM<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
+* Posting Styles::       \e$B$"$J$?$,C/$G$"$k$+$r;XDj$9$k$h$j4JC1$JJ}K!!#\e(B   
+* Drafts::               \e$B%a%C%;!<%8$N1d4|$H5qH]$5$l$?%a%C%;!<%8!#\e(B
+* Rejected Articles::    \e$B%5!<%P!<$,$"$J$?$N5-;v$r9%$-$G$J$$$H$-$K2?$,5/$3$k!)\e(B
+@end menu
+
+\e$BEj9F$9$k$Y$-$G$J$+$C$?5-;v$r:o=|$9$k$?$a$N>pJs$O\e(B @pxref{Canceling and
+Superseding} \e$B$r;2>H$7$F$/$@$5$$!#\e(B
+
+
+@node Mail
+@section \e$B%a!<%k\e(B
+
+\e$B=P$F9T$/%a!<%k$r%+%9%?%^%$%:$9$kJQ?t$G$9!'\e(B
+
+@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!<%95-;v:n@.$N$?$a$NJQ?t!'\e(B
+
+@table @code
+@item gnus-sent-message-ids-file
+@vindex gnus-sent-message-ids-file
+Gnus \e$B$OAw?.$7$?A4$F$N%a!<%k$N\e(B @code{Message-ID} \e$BMzNr%U%!%$%k\e(B (history
+file) \e$B$rJ]B8$7$^$9!#$b$7%a!<%k$r4{$KAw$C$?;v$,H/8+$5$l$?$J$i!"MxMQ<T$K%a!<\e(B
+\e$B%k$r:FAw$9$k$+$I$&$+$r?R$M$^$9!#!J$3$l$O<g$KF1$8%Q%1%C%H$rJ#?t2sAw$k798~$N\e(B
+\e$B$"$k\e(B @sc{soup} \e$B%Q%1%C%H$d!"$=$l$K;w$?$h$&$J$b$N$r07$C$F$$$k$H$-$KLr$KN)$A\e(B
+\e$B$^$9!#!K$3$NJQ?t$O$3$NMzNr%U%!%$%k$,$I$3$K$"$k$+$r;XDj$7$^$9!#%G%#%U%)%k%H\e(B
+\e$B$G$O\e(B @file{~/News/Sent-Message-IDs} \e$B$G$9!#\e(BGnus \e$B$,MzNr%U%!%$%k$rJ];}$9$k;v\e(B
+\e$B$rK>$^$J$$$N$G$"$l$P!"$3$NJQ?t$r\e(B @code{nil} \e$B$K@_Dj$9$k;v$,$G$-$^$9!#\e(B
+
+@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!<%9%5!<%P!<$,K\Ev$K%a!<%j%s%0%j%9%H$+$i\e(B @sc{nntp} \e$B%5!<\e(B
+\e$B%P!<$X$N%2!<%H%&%'%$$rDs6!$7$F$$$k$N$G$"$l$P!"$=$l$i$N%0%k!<%W$OLdBj$J$/\e(B
+\e$BFI$a$k$G$7$g$&!#$7$+$74JC1$K$O$=$l$i$KEj9F\e(B/\e$B%U%)%m!<%"%C%W$9$k$3$H$O$G$-\e(B
+\e$B$^$;$s!#0l$D$N2r7hK!$O\e(B \e$B%0%k!<%W%Q%i%a!<%?\e(B (@pxref{Group Parameters}) \e$B$K\e(B 
+@code{to-address} \e$B$r2C$($k;v$G$9!#4JC1$K$G$-$k$N$O!"\e(B
+@code{gnus-mailing-list-groups} \e$B$r!"K\Ev$K%a!<%j%s%0%j%9%H$G$"$k$h$&$J%0\e(B
+\e$B%k!<%W$K9gCW$9$k@55,I=8=$K@_Dj$9$k$3$H$G$9!#$=$N8e$O!"$9$/$J$/$H$b!"%a!<\e(B
+\e$B%j%s%0%j%9%H$X$N%U%)%m!<%"%C%W$O$?$$$F$$$N$H$-$KF0:n$7$^$9!#$3$l$i$N%0%k!<\e(B
+\e$B%W$KEj9F$9$k;v$O\e(B (@kbd{a}) \e$B$=$l$G$b6lDK$r0z$-5/$3$9$G$7$g$&$1$I!#\e(B
+
+@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!<%9%0%k!<%WL>$rD4$Y$F!"E,@Z$J%0%k!<%WL>!J$b$7$/$O\e(B
+\e$BL>A0$N%j%9%H!K$rJV$94X?t$K@_Dj$9$k;v$,$G$-$^$9!#\e(B
+
+\e$B$3$NJQ?t$O\e(B @code{gnus-message-archive-group} \e$B$NBe$o$j$K;H$&;v$,$G$-$^$9\e(B
+\e$B$,!"8e<T$NJ}$,9%$^$7$$J}K!$G$9!#\e(B
+@end table
+
+
+@node Posting Styles
+@section \e$BEj9FMM<0\e(B
+@cindex posting styles
+@cindex styles
+
+\e$B$=$l$i$O$9$Y$FJQ?t$G!"$=$l$O;d$NF,$r1K$,$;$^$9!#\e(B
+
+\e$B$=$l$G!"$J$<$I$N%0%k!<%W$KEj9F$9$k$+$K$h$C$F0c$C$?\e(B @code{Organization} 
+\e$B$H=pL>$rK>$`$N$G$7$g$&$+!)$=$7$F!"$"$J$?$O2HDm$N%^%7%s$H?&>l$N%^%7%s$NN>\e(B
+\e$BJ}$+$iEj9F$7$F!"0c$C$?\e(B @code{From} \e$B9T$d$=$NB>$N$b$N$rK>$`$N$G$9$+!)\e(B
+
+@vindex gnus-posting-styles
+\e$B$=$N$h$&$J;v$r$9$kJ}K!$N0l$D$OJQ99$5$l$kI,MW$N$"$kJQ?t$rJQ99$9$k8-$$%U%C\e(B
+\e$B%/$r=q$/;v$G$9!#$=$l$O>/$7B`6~$J$N$G!"MxMQ<T$K$3$l$i$N;v$r<j7Z$JO"A[%j%9\e(B
+\e$B%H$G;XDj$9$k$H$$$&$9$P$i$7$$CeA[$K$?$I$jCe$$$??M$,$$$^$7$?!#$3$l$OJQ?t\e(B 
+@code{gnus-posting-styles} \e$B$NNc$G$9\e(B:
+
+@lisp
+((".*"
+   (signature "Peacs and happiness")
+   (organization "What me?"))
+ ("^comp"
+  (signature "Death to everybody"))
+ ("comp.emacs.i-love-it"
+  (organization "Emacs is it")))
+@end lisp
+
+\e$B$3$NNc$+$i?dB,$5$l$k$h$&$K!"$3$NO"A[%j%9%H$O$$$/$D$+$N\e(B @dfn{\e$BMM<0\e(B}
+(style) \e$B$+$i$J$C$F$$$^$9!#$=$l$>$l$NMM<0$O:G=i$NMWAG$,2?$i$+$N7A$G\e(B ``\e$B9g\e(B
+\e$BCW\e(B'' \e$B$7$?$H$-$KE,MQ$5$l$^$9!#O"A[%j%9%HA4BN$O:G=i$+$i:G8e$^$GH?I|$7$F<B\e(B
+\e$B9T$5$l!"$=$l$>$l$N9gCW$,E,MQ$5$l$^$9!#$3$l$O!"8e$NMM<0$NB0@-$,A0$K9gCW$7\e(B
+\e$B$?MM<0$NB0@-$r>e=q$-$9$k$H8@$&;v$G$9!#$G$9$+$i!"\e(B
+@samp{comp.programming.literate} \e$B$O!"=pL>\e(B @samp{Death to everybody} \e$B$H\e(B 
+@code{Organization} \e$B%X%C%@!<\e(B @samp{What me?} \e$B$r;}$A$^$9!#\e(B
+
+\e$B$=$l$>$l$NMM<0$N:G=i$NMWAG$O\e(B @code{\e$B9gCW\e(B} (match) \e$B$H8F$P$l$^$9!#$b$7$=$l\e(B
+\e$B$,J8;zNs$G$"$l$P!"\e(Bgnus \e$B$O$=$l$r%0%k!<%WL>$K@55,I=8=$H$7$F9gCWA`:n$r9T$$\e(B
+\e$B$^$9!#$b$7$=$l$,4X?t$N%7%s%\%k$G$"$l$P!"$=$N4X?t$,0z?tL5$7$G8F$P$l$^$9!#\e(B
+\e$B$=$l$,JQ?t$N%7%s%\%k$G$"$l$P!"$=$NJQ?t$,;2>H$5$l$^$9!#$=$l$,%j%9%H$G$"$l\e(B
+\e$B$P!"$=$N%j%9%H$,\e(B @code{\e$BI>2A\e(B} \e$B$5$l$^$9!#$I$N>l9g$G$b!"$3$l$,\e(B @code{nil} 
+\e$B$G$J$$CM$r5"$;$P!"MM<0$O\e(B @code{\e$B9gCW$7$?\e(B} \e$B$H8@$$$^$9!#\e(B
+
+\e$B$=$l$>$l$NMM<0$OG$0U$NNL$N\e(B @dfn{\e$BB0@-\e(B} \e$B$r;}$D;v$,$G$-$^$9!#$=$l$>$l$NB0@-\e(B
+\e$B$O\e(B @var{(name . value)} \e$B$NBP$K$h$j@.$jN)$C$F$$$^$9!#B0@-L>$O!"\e(B
+@code{signature}, @code{signature-file}, @code{organization},
+@code{address}, @code{name}, @code{body} \e$B$N$I$l$+$G$"$k;v$,$G$-$^$9!#B0\e(B
+\e$B@-L>$OJ8;zNs$G$"$k;v$b$G$-$^$9!#$=$N>l9g$O!"$3$l$O%X%C%@!<L>$H$7$F;H$o$l!"\e(B
+\e$B$=$NCM$,5-;v$N%X%C%@!<$KA^F~$5$l$^$9!#\e(B
+
+\e$BB0@-CM$OJ8;zNs\e(B (\e$B$=$N$^$^;H$o$l$^$9\e(B)\e$B!"4X?t\e(B (\e$BJV$jCM$,;H$o$l$^$9\e(B)\e$B!"JQ?t\e(B (\e$B$=\e(B
+\e$B$NCM$,;H$o$l$^$9\e(B)\e$B!"%j%9%H\e(B (\e$B$=$l$O\e(B @code{\e$BI>2A\e(B} \e$B$5$l$F!"JV$jCM$,;H$o$l$^$9\e(B) 
+\e$B$G$"$k;v$,$G$-$^$9!#\e(B
+
+\e$B$b$7!":n@.$7$h$&$H$7$F$$$k%a%C%;!<%8$,%K%e!<%95-;v$+%a!<%k%a%C%;!<%8$G$"\e(B
+\e$B$k$+$rD4$Y$?$$$H$-$O!"\e(B2\e$B$D$NF0E*$KB+G{$5$l$kJQ?t\e(B 
+@code{message-this-is-news} \e$B$H\e(B @code{message-thiss-is-mail} \e$B$rD4$Y$k;v$,\e(B
+\e$B$G$-$^$9!#\e(B
+
+@vindex message-this-is-mail
+@vindex message-this-is-news
+
+\e$B$=$7$F!"$3$l$ONc$G$9\e(B:
+
+@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
+
+
+@node Drafts
+@section \e$B2<=q$-\e(B
+@cindex drafts
+
+\e$B$b$7%a%C%;!<%8!J%a!<%k$b$7$/$O%K%e!<%9!K$r=q$$$F$$$k$H$-$K!"FMA3%*!<%V%s\e(B
+\e$B$K%9%F!<%-$,F~$C$F$$$k;v$r;W$$=P$7$?$J$i!J$b$7$/$O!"$"$J$?$,$H!<$C$F$b$9\e(B
+\e$B$4$$:Z?)<g5A<T$G!"7T$r%U!<%I%W%m%;%C%5!<$r$$$l$F$$$k$J$i!K!"=q$$$F$$$k%a%C\e(B
+\e$B%;!<%8$rJ]B8$9$kJ}K!$,$"$l$PNI$$$H;W$&$G$7$g$&!#$=$&$9$l$P!"$$$D$+JL$NF|\e(B
+\e$B$KJT=8$rB3$1$k;v$,$G$-!"$=$l$,40@.$7$?$H;W$C$?$H$-$KAw$k;v$,$G$-$^$9!#\e(B
+
+\e$B$($'!"?4G[$7$J$$$G$/$@$5$$!#\e(BGnus \e$B$N%a!<%k$HEj9FL?Na$r;H$&2?$i$+$N%a%C%;!<\e(B
+\e$B%8$r=q$-;O$a$?$H$-$K!"<j$KF~$l$k%P%C%U%!$O<+F0E*$KFCJL$J\e(B @dfn{draft} \e$B%0%k!<\e(B
+\e$B%W$K4XO"IU$1$i$l$^$9!#IaDL$NJ}K!$G%P%C%U%!$rJ]B8$9$l$P!J$?$H$($P!"\e(B
+@kbd{C-x C-s}\e$B!K!"$=$N5-;v$O$=$3$KJ]B8$5$l$^$9!#!J<+F0J]B8%U%!%$%k$b2<=q$-\e(B
+\e$B%0%k!<%W\e(B (draft group) \e$B$K9T$-$^$9!#!K\e(B
+
+@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!<%9%5!<%P!<$O5-;v$r5qH]$7$^$9!#$*$=$i$/%5!<%P!<$O$"$J$?$N4i$r9%$-\e(B
+\e$B$G$O$J$$$N$G$7$g$&!#$*$=$i$/$=$l$O;4$a$K46$8$?$+$i$G$7$g$&!#$*$=$i$/\e(B 
+@emph{\e$B0-Kb\e(B (demon) \e$B$,$$$k$N$G$7$g$&\e(B}\e$B!#\e(B \e$B$*$=$i$/0zMQJ8$rF~$l$9$.$?$N$G$7$g\e(B
+\e$B$&!#$*$=$i$/%G%#%9%/$,0lGU$@$C$?$N$G$7$g$&!#$*$=$i$/%5!<%P!<$,Mn$A$F$$$?$N\e(B
+\e$B$G$7$g$&!#\e(B
+
+\e$B$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!<%9$r\e(B gnus \e$B$GFI$`!#\e(B
+* Getting Mail::          \e$B8D?ME*$J%a!<%k$r\e(B gnus \e$B$GFI$`!#\e(B
+* Other Sources::         \e$B%G%#%l%/%H%j!<!"%U%!%$%k!"\e(BSOUP \e$B%Q%1%C%H$rFI$`!#\e(B
+* Combined Groups::       \e$BJ#?t$N%0%k!<%W$r0l$D$N%0%k!<%W$K7k9g$9$k!#\e(B
+* Gnus Unplugged::        \e$B%K%e!<%9$H%a!<%k$r%*%U%i%$%s$GFI$`!#\e(B
+@end menu
+
+@node The Server Buffer
+@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!<%9$,<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!<%9$,<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\e(B (@pxref{Mode Line Formatting})\e$B!#0J2<$N;XDj$OM}\e(B
+\e$B2r$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/active} \e$B$K$J$j$^$9!#$b$7?7$7$$;v\e(B
+\e$B<B>e$N\e(B @code{nnml} \e$B%5!<%P!<$rDj5A$7$?>l9g!"\e(B@code{nnml-directory} \e$B$r@_Dj\e(B
+\e$B$9$k$@$1$G$O=<J,$G$O\e(B@emph{\e$B$"$j$^$;$s\e(B}---\e$B$"$J$?$OK>$s$@>uBV$K$J$k$h$&$K!"\e(B
+\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!<%9$N<hF@\e(B
+@cindex reading news
+@cindex newsbackends
+
+\e$B%K%e!<%9%j!<%@!<$OIaDL$O%K%e!<%9$rFI$`;v$K;H$o$l$^$9!#\e(BGnus \e$B$O8=:_$O%K%e!<\e(B
+\e$B%:$r<hF@$9$k$?$a$K\e(B2\e$B$D$@$1$NJ}K!$rDs6!$7$F$$$^$9\e(B---@sc{nntp} \e$B%5!<%P!<$+!"\e(B
+\e$B%m!<%+%k%9%W!<%k$+$iFI$`;v$,$G$-$^$9!#\e(B
+
+@menu
+* NNTP::               @sc{nntp} \e$B%5!<%P!<$+$i%K%e!<%9$rFI$`!#\e(B
+* News Spool::         \e$B%m!<%+%k%9%W!<%k$+$i%K%e!<%9$rFI$`!#\e(B
+@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{default}\e$B!"\e(B
+@samp{force} \e$B$G$9!#\e(B(\e$B:G8e$N$b$N$OM-8z$J\e(B @code{.netrc}/@code{ftp} \e$B$N6h@Z$j\e(B
+\e$B0u$G$O$"$j$^$;$s!#$3$l$,%U%!%$%k\e(B @file{.authinfo} \e$B$,\e(B @file{.netrc} \e$B%U%!\e(B
+\e$B%$%kMM<0$+$i0o$l$kM#0l$NJ}K!$G$9!#\e(B)
+
+@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
+
+@samp{machine} \e$B9T$K9gCW$7$J$$A4$F$N%5!<%P!<$KE,MQ$5$l$k\e(B @samp{default} 
+\e$B9T$rDI2C$9$k;v$b$G$-$^$9!#\e(B
+
+@example
+default force yes
+@end example
+
+\e$B$3$l$O0JA0$K=q$+$l$F$$$J$$A4$F$N%5!<%P!<$KL?Na\e(B @samp{AUTHINFO} \e$B$r6/@)E*\e(B
+\e$B$KAw$j$^$9!#\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$,=i4|@_Dj$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(B4\e$B$D$N4{@=4X?t$,Ds6!$5\e(B
+\e$B$l$F$$$^$9\e(B: 
+
+@table @code
+@item nntp-open-network-stream
+\e$B$3$l$O=i4|@_Dj$G!"C1=c$K1s3V%7%9%F%`$N2?$i$+$N%]!<%H$+B>$N$b$K@\B3$7$^$9!#\e(B
+
+@item nntp-open-rlogin
+@samp{rlogin} \e$B$r1s3V%7%9%F%`$K9T$C$F!"$=$3$+$i;EMM2DG=$J\e(B @sc{nntp} \e$B%5!<\e(B
+\e$B%P!<$K\e(B @samp{telnet} \e$B$r$7$^$9!#\e(B
+
+@code{nntp-open-rlogin} \e$B$K4XO"$7$?JQ?t$G$9\e(B:
+
+@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
+
+@item nntp-open-telnet
+\e$B1s3V%7%9%F%`$K\e(B @samp{telnet} \e$B$r$7$F!"\e(B@sc{nntp} \e$B%5!<%P!<$K$?$I$jCe$/$?$a\e(B
+\e$B$K$b$&0lEY\e(B @code{telnet} \e$B$r$7$^$9!#\e(B
+
+@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
+
+@findex nntp-open-ssl-stream
+@item nntp-open-ssl-stream
+\e$B%5!<%P!<$K\e(B @dfn{\e$B0BA4$J\e(B} \e$B%A%c%s%M%k$r;H$C$F%5!<%P!<$K@\B3$7$^$9!#$3$l$r;H\e(B
+\e$B$&$?$a$K$O!"\e(BSSLay \e$B$,%$%s%9%H!<%k$5$l$F$$$J$1$l$P$J$j$^$;$s\e(B 
+(@file{ftp://ftp.psy.uq.oz.au/pub/Crypto/SSL} \e$B$H!"\e(B@file{ssl.el} (\e$BNc$($P!"\e(B
+W3 \e$B$NG[I[$+$i\e(B) \e$B$,I,MW$K$J$j$^$9\e(B)\e$B!#$=$l$+$i%5!<%P!<$r<!$N$h$&$KDj5A$7$^$9\e(B:
+
+@lisp
+;; Type `C-c C-c after you'ver finished editing.
+;;
+;; "snews" is port 563 and is predefined in our /etc/services
+;; 
+(nntp "snews.bar.com"
+      (nntp-open-connection-function nntp-open ssl-stream)
+      (nntp-port-number "snews")
+      (nntp-address "snews.bar.com"))
+@end lisp
+
+@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%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
+
+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!#IaDL$N@55,I=8=$N9gCW$,$J$5$l$^$9!#Nc$O2<$NJ}$r8+$F2<$5$$!#\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!#Hs>o$KCm0U$7$F;H$C$F2<$5$$!#\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
+
+@item
+@code{nil}: \e$B$b$7J,3d$,\e(B @code{nil} \e$B$G$"$l$P!"$=$l$OL5;k$5$l$^$9!#\e(B
+
+@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-\\b\\(\\w+\\)@@lists.debian.org" "mail.debian.\\1")
+@end example
+
+\e$B$b$7J8;zNs$,MWAG\e(B @samp{\&} \e$B$r4^$s$G$$$k$H!"Be$o$j$KA0$G9gCW$7$?J8;zNs$,\e(B
+\e$B;H$o$l$^$9!#F1MM$K!"MWAG\e(B @samp{\\1} \e$B$+$i\e(B @samp{\\9} \e$B$^$G$O%0%k!<%WIU$1\e(B 1 
+\e$B$+$i\e(B 9 \e$B$^$G$G9gCW$7$?J8;zJ8$GBeBX$5$l$^$9!#\e(B
+
+@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{Foreign
+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{Group 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
+@subsubsection 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
+@subsubsection 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
+@subsubsection \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
+@subsubsection 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
+@subsubsection \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
+
+@item nnfolder-save-buffer-hook
+@vindex nnfolder-save-buffer-hook
+@cindex backup files
+\e$B%U%)%k%@!<$rJ]B8$9$kA0$K<B9T$5$l$k%U%C%/$G$9!#\e(B@code{nnfolder} \e$B%P%C%U%!$K\e(B
+\e$BBP$7$F$5$($b\e(B Emacs \e$B$ODL>o$N%P%C%/%"%C%W$NJQL>$r$9$k;v$KCm0U$7$F2<$5$$!#\e(B
+\e$B$3$N5!G=$rL58z$K$7$?$$$N$G$"$l$P!"%U%!%$%k\e(B @file{.emacs} \e$B$G<!$N$h$&$J;v\e(B
+\e$B$r$9$k;v$,$G$-$^$9\e(B:
+
+@lisp
+(defun turn off-backup ()
+  (set (make-local-variable 'backup-inhibited) t))
+
+(add-hook 'nnfolder-save-buffer-hook 'turn-off-backup)
+@end lisp
+
+@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-parts
+\e$B=8G[G[Aw\e(B (digest) \e$B$NB>$N\e(B MIME \e$BB?ItJ,%a%C%;!<%8\e(B (multipart message) \e$B$G$9!#\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
+
+\e$B0J2<$N4{@=4X?t$,B8:_$7$^$9\e(B:
+
+@findex nngateway-simple-header-transformation
+@table @code
+
+@item nngateway-simple-header-transformaton
+@var{newsgroup}@@@code{nngateway-address} \e$B$N$h$&$J\e(B @code{To} \e$B%X%C%@!<$r\e(B
+\e$B$D$/$j$^$9!#\e(B
+
+@findex nngateway-mail2news-header-transformation
+
+@item nngateway-mail2news-header-transformation
+@code{nngateway-address} \e$B$N$h$&$J\e(B @code{To} \e$B%X%C%@!<$r$D$/$j$^$9!#\e(B
+
+\e$B$3$3$KNc$,$"$j$^$9!#\e(B
+
+@lisp
+(setq gnus-post-method
+      '(nngateway "mail2news@@replay.com"
+                  (nngateway-header-transformation
+                   nngateway-mail2news-header-transformation)))
+@end lisp
+
+@end table
+
+
+@end table
+
+\e$B$D$^$j!"$3$l$r;H$&$K$O!"$3$s$JIw$K$9$k$@$1$G$9!#\e(B
+
+@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\\+server\\.jp:soc\\.motss$\\|^nntp\\+server\\.no:soc\\.motss$"
+@end example
+
+(\e$B$G$b$A$g$C$HCm0U!#\e(B@kbd{G m} \e$B$G%0%k!<%W$r:n@.$9$k$H$-$O!"%P%C%/\e(B
+\e$B%9%i%C%7%e$rFs=E$KIU$1$F$O$$$1$^$;$s!#$=$7$FJ8;zNs$N:G=i$H:G8e$N\e(B
+\e$B0zMQ5-9f$b<h$jJ'$C$F$/$@$5$$!#\e(B)
+
+\e$B$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
+
+@code{nnvirtual} \e$B$O%a!<%k$H%K%e!<%9$NN>J}$N%0%k!<%W$r9=@.%0%k!<%W$H$9$k\e(B
+\e$B;v$,$G$-$^$9!#\e(B@code{nnvirtual} \e$B%0%k!<%W$N5-;v$KJVEz$9$k$H$-$O!"\e(B
+@code{nnvirtual} \e$B$O5-;v$N=P=j$N9=@.%0%k!<%W$N%P%C%/%(%s%I$K$=$l$,%K%e!<\e(B
+\e$B%9$N%P%C%/%(%s%I$G$"$k$+%a!<%k$N%P%C%/%(%s%I$G$"$k$+$r?R$M$J$1$l$P$J$j$^\e(B
+\e$B$;$s!#$7$+$7!"\e(B@kbd{^} \e$B$r$7$?$H$-$K$O!"IaDL$O9=@.%P%C%/%(%s%I$,$3$l$rCN$k\e(B
+\e$B3N$+$JJ}K!$O$J$/!"$=$N>l9g$O!"\e(B@code{nnvirtual} \e$B$O\e(B gnus \e$B$K5-;v$O%K%e!<%9\e(B
+\e$B$G$J$$%P%C%/%(%s%I$+$iMh$?$H9p$2$k;v$K$J$j$^$9!#\e(B (\e$B0BA4$N$?$a$K!#\e(B)
+
+\e$B$3$N$h$&$J>l9g$O!"%a%C%;!<%8%P%C%U%!$G$N\e(B @kbd{C-c C-t} \e$B$,1~Ez$7$h$&$H$7\e(B
+\e$B$F$$$k5-;v$+$i\e(B @code{Newsgroups} \e$B9T$rH4$-=P$7$FA^F~$7$^$9!#\e(B
+
+
+
+@node Kibozed Groups
+@subsection Kiboze \e$B%0%k!<%W\e(B
+@cindex nnkiboze
+@cindex kibozing
+
+@dfn{Kiboze} \e$B$9$k!"$H$O!"\e(B``\e$B%K%e!<%9%9%W!<%kA4It\e(B(\e$B$"$k$$$O$=$N0lIt\e(B)
+\e$B$+$i\e(B grep \e$B$9$k$3$H\e(B'' \e$B$H%*%C%/%9%U%)!<%IBg<-E5$K$h$C$FDj5A$5$l$F$$\e(B
+\e$B$^$9!#\e(B@code{nnkiboze} \e$B$O$3$l$r$"$J$?$N$?$a$K9T$C$F$/$l$k%P%C%/%(\e(B
+\e$B%s%I$G$9!#4r$7$$$M\e(B! \e$B$3$l$G$I$s$J\e(B @sc{nntp} \e$B%5!<%P!<$G$b!"Lr$KN)\e(B
+\e$B$?$J$$MW5a$G;_$^$C$F$7$^$&$^$G9s;H$9$k$3$H$,$G$-$k$M!#$"$"!"$J$s\e(B
+\e$B$F9,$;$J$s$@\e(B!
+
+@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!#M-8z$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 (@pxref{Mode Line Formatting})\e$B!#\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-group-send-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$-$k!#\e(B
+* Converting Kill Files::    \e$B:o=|%U%!%$%k$r%9%3%"%U%!%$%k$KJQ49$9$k!#\e(B
+* GroupLens::                \e$B$I$l$rFI$`$N$,9%$-$+$NM=8@$rF@$k!#\e(B
+* Advanced Scoring::         \e$B%9%3%"$NK!B'$r:n$k$?$a$KO@M}I=8=$r;H$&!#\e(B
+* Score Decays::             \e$B%9%3%"$r8O$l$F$$$+$;$k$N$OLr$KN)$D;v$b$"$k!#\e(B
+@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 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 r
+References \e$B9T$K%9%3%"$r$D$1$^$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
+
+@item t
+\e$B%9%l%C%I$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!#\e(B
+
+\e$B$3$l$i$N=R8l$O$b$7\e(B
+
+@example
+(PREDICATE HEADER MATCH)
+@end example
+
+\e$B$NI>2A$,\e(B @code{nil} \e$B$G$J$$$H!"??$H$J$j$^$9!#Nc$($P!">e5i9gCW\e(B 
+@code{("lines" 4 <)} (@pxref{Advanced Scoring}) \e$B$O7k2L$H$7$F0J2<$N<0$K$J\e(B
+\e$B$j$^$9!#\e(B
+
+@lisp
+(< header-value 4)
+@end lisp
+
+\e$B$b$7$/$OB>$NJ}K!$K$7$^$7$g$&\e(B: @code{<} \e$B$r\e(B @code{Lines} \e$B$G\e(B 4 \e$B$r9gCW$H$7$F\e(B
+\e$B;H$C$F$$$k$H$-$O!"5-;v$,\e(B4\e$B9T$h$j$b>/$J$$$H$-$K%9%3%"$,DI2C$5$l$^$9!#\e(B(\e$B:.Mp\e(B
+\e$B$7$F!"H?BP$G$O$J$$$+$H9M$(0W$$$G$9!#$G$b!"$=$&$G$O$J$$$N$G$9!#;d$,;W$&$K!#\e(B)
+
+\e$B9gCW$,\e(B @code{Lines} \e$B$G$J$5$l$F$$$k$H!"$$$/$D$+$N%P%C%/%(%s%I\e(B 
+(@code{nndir}\e$B$N$h$&$J$b$N\e(B) \e$B$O\e(B @code{Lines} \e$B%X%C%@!<$r:n@.$7$J$$$?$a$KA4\e(B
+\e$B$F$N5-;v$,\e(B 0 \e$B9T$G$"$k$H$7$F07$o$l$k;v$K5$$rIU$1$F$/$@$5$$!#$3$l$O$b$7>/\e(B
+\e$B$7$N9T$7$+$J$$5-;v$N%9%3%"$r2<$2$F$$$k$N$J$i!"JQ$J7k2L$,5/$3$jF@$k;v$K$J\e(B
+\e$B$j$^$9!#\e(B
+
+@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
+
+@findex gnus-hierarchial-home-score-file
+@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$BB?$N4X?t$O0J2<$N0J2<$N$b$N$r4^$_$^$9\e(B
+
+@table @code
+@item gnus-current-home-scre-file
+@findex gnus-current-home-score-file
+``\e$B8=:_$N\e(B'' \e$BI8=`%9%3%"%U%!%$%k$rJV$7$^$9!#$3$l$O%9%3%"L?Na$K%9%3%"%U%!%$\e(B
+\e$B%k$N\e(B ``\e$B:GFbIt\e(B'' \e$B9gCW$X$NEPO?$r2C$($k$h$&$K$7$^$9!#\e(B
+
+@end table
+
+\e$B$b$7\e(B @samp{emacs} \e$B%0%k!<%WMQ$N%9%3%"%U%!%$%k$H!"$=$l$H$OJL$N\e(B
+@samp{comp} \e$B%0%k!<%WMQ$N%9%3%"%U%!%$%k$r;H$$!"B>$NA4It$N%0%k!<%W\e(B
+\e$B$G$O$=$l$>$lFH<+$N%9%3%"%U%!%$%k$r;H$$$?$$$N$G$"$l$P!"\e(B
+
+@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.stud.ifi.uio.no/~larsi/ding-other/gnus-kill-to-score}
+\e$B$+$iF~<j$9$k$3$H$,$G$-$^$9!#\e(B
+
+\e$B$b$7$"$J$?$N>C5n%U%!%$%k$,Hs>o$KJ#;($J$b$N$G$"$l$P\e(B --- \e$B$=$l$K\e(B
+@code{gnus-kill} \e$B7A<00J30$N$b$N$,$?$/$5$s4^$^$l$F$$$l$P!"$=$l$i\e(B
+\e$B$r<j$GJQ49$7$J$1$l$P$J$j$^$;$s!#$"$k$$$OC1$K$=$l$i$r!"$=$N$^$^$K\e(B
+\e$B$7$F$*$$$F$/$@$5$$!#\e(BGnus \e$B$O0JA0F1MM$K$=$l$i$r;H$C$F$/$l$k$G$7$g\e(B
+\e$B$&!#\e(B
+
+
+@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 Scoring 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-decay-score-function
+Gnus \e$B$O$3$NLdBj$N2r7h$r=u$1$k$?$a$K%9%3%"$rIe$i$;$k5!9=$rDs6!$7$^$9!#%9\e(B
+\e$B%3%"%U%!%$%k$OFI$_9~$^$l!"\e(B @code{gnus-decay-scores} \e$B$,\e(B @code{nil} \e$B$G$J$$\e(B
+\e$B$H!"\e(Bgnus \e$B$O%9%3%"%U%!%$%k$rIeGT5!9=$rDL$7!"A4$F$N1JB3$G$J$$%9%3%"K!B'$N\e(B
+\e$B%9%3%"$r2<$2$^$9!#IeGT<+?H$O4X?t\e(B @code{gnus-decay-score-function} \e$B$K$h$C\e(B
+\e$B$F<B9T$5$l!"=i4|@_Dj$O\e(B @code{gnus-decay-score} \e$B$G$9!#0J2<$O$=$N4X?t$NDj\e(B
+\e$B5A$G$9\e(B:
+
+@lisp
+(defun gnus-decay-score (score)
+  "Decay SCORE.
+This is done 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
+
+
+@node Various
+@chapter \e$B$$$m$$$m\e(B
+
+@menu
+* Process/Prefix::             \e$BB?$/$N07$$L?Na$G;H$o$l$k=,47!#\e(B
+* Interactive::                Gnus \e$B$KB?$/$N<ALd$r?R$M$5$;$k!#\e(B
+* Symbolic Prefixes::          \e$B$$$/$D$+$N\e(B gnus \e$B$N4X?t$KA*Br8"$rDs6!$9$kJ}K!!#\e(B
+* Formatting Variables::       \e$B%P%C%U%!$,$I$N$h$&$K8+$($k$Y$-$+$r;XDj$9$k;v$,$G$-$k!#\e(B
+* Windows Configuration::      Gnus \e$B%P%C%U%!%&%#%s%I%&$r@_Dj$9$k!#\e(B
+* Faces and Fonts::            \e$B%U%'%$%9$,$I$N$h$&$K8+$($k$+$rJQ99$9$k!#\e(B
+* Compilation::                \e$B$I$N$h$&$K$7$F\e(B gnus \e$B$NB.EY$r>e$2$k$+!#\e(B
+* Mode Lines::                 \e$B%b!<%I9T$K>pJs$rI=<($9$k!#\e(B
+* Highlighting and Menus::     \e$B%P%C%U%!$rAGE($G?4CO$h$/8+$;$k!#\e(B
+* Buttons::                    \e$B4JC1$J\e(B10\e$BJb$G%"%-%l%9g'$rF@$k!#\e(B
+* Daemons::                    Gnus \e$B$O$"$J$?$NN"$GJ*;v$r<B9T$9$k;v$,$G$-$k!#\e(B
+* NoCeM::                      Spam \e$B$dB>$NB@$j$d$9$$?);v$rHr$1$kJ}K!!#\e(B
+* Undo::                       \e$B$$$/$D$+$NF0:n$O85$KLa$9;v$,$G$-$k!#\e(B
+* Moderation::                 \e$B$"$J$?$,%b%G%l!<%?!<$@$C$?$i$I$&$9$k$+!#\e(B
+* XEmacs Enhancements::        XEmacs \e$B$G$O$b$C$H3($d$=$NB>$N$b$N$,B8:_$9$k!#\e(B
+* Fuzzy Matching::             \e$BBg$-$JLJLS$C$F2?!)\e(B
+* Thwarting Email Spam::       \e$BM>7W$J>&6HE*EE;R%a!<%k$rHr$1$kJ}K!!#\e(B
+* Various Various::            \e$BK\Ev$K$$$m$$$m$J$b$N!#\e(B
+@end menu
+
+
+@node Process/Prefix
+@section \e$B%W%m%;%9\e(B/\e$B@\F,0z?t\e(B
+@cindex process/prefix convention
+
+\e$BB?$/$N4X?t!"$=$NCf$G$b5-;v$N0\F0!"I|9f2=!"J]B8$r$9$k$?$a$N4X?t$O!"\e(B
+@dfn{\e$B%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47\e(B} \e$B$H$7$FCN$i$l$F$$$k$b$N$r;H$$$^$9!#\e(B
+
+\e$B$3$l$OMxMQ<T$,$I$N5-;v$KL?Na$r<B9T$7$?$$$+$r8+$D$1$k$?$a$NJ}K!$G$9!#\e(B
+
+\e$B$=$l$O$3$N$h$&$J46$8$G$9\e(B:
+
+\e$B$b$7?tCM@\F,0z?t$,\e(B N \e$B$G$"$k$H!"8=:_$N5-;v$+$i;O$a$F!"<!$N\e(B N \e$B5-;v$K:n6H$r\e(B
+\e$B<B9T$7$^$9!#$b$7?tCM@\F,0z?t$,Ii$G$"$k$H!"8=:_$N5-;v$+$i;O$a$F!"A0$N\e(B N 
+\e$B5-;v$K:n6H$r<B9T$7$^$9!#\e(B
+
+@vindex transient-mark-mode
+@code{transient-mark-mode} \e$B$,\e(B @code{nil} \e$B$G$J$/!"%j!<%8%g%s$,A`:n$5$l$F\e(B
+\e$B$$$k$H!"%j!<%8%g%s$K$"$kA4$F$N5-;v$K:n6H$,$J$5$l$^$9!#\e(B
+
+
+\e$B$b$7@\F,0z?t$,L5$$$1$l$I!"$$$/$D$+$N5-;v$O%W%m%;%90u$,IU$$$F$$$k$H$$$&>l\e(B
+\e$B9g$O!"%W%m%;%90u$NIU$$$F$$$k5-;v$K:n6H$,<B9T$5$l$^$9!#\e(B
+
+\e$B?tCM@\F,0z?t$d%W%m%;%90u$NIU$$$F$$$k5-;v$,L5$$>l9g$O!"8=:_$N5-;v$K$@$1:n\e(B
+\e$B6H$r<B9T$7$^$9!#\e(B
+
+\e$B$3$l$OK\Ev$KHs>o$K4JC1$G$9$,!"6CC2$rHr$1$i$l$k$h$&$K>\:Y$rL@$i$+$K$7$F$*\e(B
+\e$B$/I,MW$,$"$k$N$G$9!#\e(B
+
+\e$B%W%m%;%90u$KH?1~$9$k5-;v$O8=:_$N%W%m%;%90u$NIU$$$F$$$k5-;v$N%j%9%H$r%9%?%C\e(B
+\e$B%/$K@Q$_!"A4$F$N%W%m%;%90u$N5-;v$N%j%9%H$r>C5n$7$^$9!#A02s$N@_Dj$r\e(B 
+@kbd{M P y} \e$B$GI|5l$5$;$k;v$,$G$-$^$9\e(B (@pxref{Setting Process Marks})\e$B!#\e(B
+
+@vindex gnus-summary-goto-unread
+\e$BB?$/$N?M!9$r6C$+$;!"62$,$i$;$k$H;W$o$l$k$3$H$O!"Nc$($P!"\e(B@kbd{3 d} \e$B$OK\Ev\e(B
+\e$B$K\e(B @kbd{d} @kbd{d} @kbd{d} \e$B$HF1$8;v$r$9$k;v$G$9!#$=$l$>$l$N\e(B @kbd{d} (\e$B$3\e(B
+\e$B$l$O8=:_$N5-;v$K4{FI$N0u$rIU$1$^$9\e(B) \e$B$O=i4|@_Dj$G$O0u$rIU$1$?8e$K<!$NL$FI\e(B
+\e$B5-;v$K0\F0$9$k$N$G!"\e(B@kbd{3 d} \e$B$O35N,%P%C%U%!$,$I$N$h$&$G$"$C$F$b!"<!$N\e(B3
+\e$B$D$NL$FI5-;v$r4{FI$K$7$^$9!#$b$C$HJ,$+$j$d$9$$F0:n$N$?$a$K$O\e(B 
+@code{gnus-summary-goto-unread} \e$B$r\e(B @code{nil} \e$B$K@_Dj$7$F$/$@$5$$!#\e(B
+
+
+@node Interactive
+@section \e$BBPOCE*\e(B
+@cindex interaction
+
+@table @code
+
+@item gnus-novice-user
+@vindex gnus-novice-user
+\e$B$b$7$3$NJQ?t$,\e(B @code{nil} \e$B$G$J$$$H!"$"$J$?$O\e(B Usenet \e$B$N@$3&$K?7$7$/F~$C$F\e(B
+\e$BMh$??M$G$"$k$+!"Hs>o$K?5=E$J?M$G!"$3$l$OK\Ev$KNI$$;v$G$9!#2?$+4m81$J;v$r\e(B
+\e$B$9$kA0$K!"\e(B``\e$BK\Ev$K$3$l$r$7$?$$$N$G$9$+!)\e(B'' \e$B$H$$$&$h$&$J<ALd$r<u$1$^$9!#\e(B
+\e$B$3$l$O=i4|@_Dj$G$O\e(B @code{t} \e$B$G$9!#\e(B
+
+@item gnus-expert-user
+@vindex gnus-expert-user
+\e$B$3$NJQ?t$,\e(B @code{nil} \e$B$G$J$$$H!"$"$J$?$O\e(B gnus \e$B$+$i$[$H$s$I<ALd$r<u$1$k;v\e(B
+\e$B$O$"$j$^$;$s!#$3$l$OC1=c$K$"$J$?$,$I$N$h$&$JJQ$J;v$r$7$F$$$F$b!"2?$r$7$F\e(B
+\e$B$$$k$+$r$o$+$C$F$$$k$H8+$J$7$^$9!#\e(B
+
+@item gnus-interactive-catchup
+@vindex gnus-interactive-catcup
+@code{nil} \e$B$G$J$$$H!"%0%k!<%W$KDI$$$D$/\e(B (catchup) \e$BA0$K!"3NG'$rMW5a$7$^$9!#\e(B
+\e$B$3$l$O=i4|@_Dj$G\e(B @code{t} \e$B$G$9!#\e(B
+
+@item gnus-interactive-exit
+@vindex gnus-interactive-exit
+Gnus \e$B$r=*N;$9$kA0$K3NG'$rMW5a$7$^$9!#$3$NJQ?t$O=i4|@_Dj$G\e(B @code{t} \e$B$G$9!#\e(B
+@end table
+
+
+@node Symbolic Prefixes
+@section \e$B%7%s%\%k$N@\F,0z?t\e(B
+@cindex symbolic prefixes
+
+\e$BHs>o$KB?$/$N\e(B Emacs \e$B$NL?Na$O\e(B (\e$B?tCM\e(B) \e$B@\F,0z?t$KH?1~$7$^$9!#Nc$($P!"\e(B
+@kbd{C-u 4 C-f} \e$B$O%]%$%s%H$r\e(B4\e$BJ8;z@h$K0\F0$7!"\e(B@kbd{C-u 9 0 0 I s s p} \e$B$O\e(B
+\e$B1JB3\e(B @code{Suject} \e$BJ8;zNs$N0lIt%9%3%"K!B'$N\e(B900\e$B$r8=:_$N5-;v$K2C$($^$9!#\e(B
+
+\e$B$3$l$OAGE($GNI$$$N$G$9$,!"L?Na$K$b$&>/$7DI2C$N>pJs$rM?$($?$$$H$-$O$I$&$9\e(B
+\e$B$l$PNI$$$N$G$7$g$&!)$(!<$H!"$?$$$F$$$NL?Na$,$7$F$$$k;v$O!"\e(B``\e$B@8$N\e(B'' \e$B@\F,\e(B
+\e$B0z?t$rFCJL$JJ}K!$G2r<a$9$k;v$G$9!#Nc$($P!"\e(B@kbd{C-u 0 C-x C-s} \e$B$O8=:_$N5-\e(B
+\e$B;v$rJ]B8$9$k$H$-$K%P%C%/%"%C%W%U%!%$%k$r:n$i$J$$$GM_$7$$$H$$$&$3$H$r0UL#\e(B
+\e$B$7$^$9!#$G$b!"%P%C%/%"%C%W%U%!%$%k$r:n$i$J$$$GJ]B8$7!"F1;~$K\e(B Emacs \e$B$K8w$C\e(B
+\e$B$FM_$7$/!"AGE($J2;3Z$r1iAU$7$FM_$7$$$H$-$O$I$&$9$l$PNI$$$G$7$g$&!)$=$l$O\e(B
+\e$BIT2DG=$G!"$*$=$i$/$=$l$,IT2DG=$G$"$C$F$b$"$J$?$O9,$;$G$7$g$&!#\e(B
+
+@kindex M-i (\e$B35N,\e(B)
+@findex gnus-symbolic-argument
+\e$B;d$O$=$&$G$O$"$j$^$;$s!#$G$9$+$i!";d$O\e(B2\e$B$D$a$N@\F,0z?t\e(B---@dfn{\e$B%7%s%\%k@\\e(B
+\e$BF,0z?t\e(B} \e$B$r2C$($^$7$?!#@\F,%-!<$O\e(B @kbd{M-i}
+(@code{gnus-symbolic-argument}) \e$B$G!"<!$K2!$5$l$kJ8;z$,CM$G$9!#K>$`$@$1B?\e(B
+\e$B$/$N\e(B @kbd{M-i} \e$B@\F,8l$r@Q$_=E$M$k;v$,$G$-$^$9!#\e(B@kbd{M-i a M-C-u} \e$B$O\e(B ``\e$BL?\e(B
+\e$BNa\e(B @kbd{M-C-u} \e$B$K%7%s%\%k@\F,0z?t\e(B @code{a} \e$B$rM?$($k\e(B'' \e$B$H$$$&$3$H$G$9!#\e(B
+@kbd{M-i a M-i b M-C-u} \e$B$OL?Na\e(B @kbd{M-C-u} \e$B$K%7%s%\%k@\F,0z?t\e(B @code{a}
+@code{b} \e$B$rM?$($k\e(B'' \e$B$H$$$&;v$G$9!#<q;]$OJ,$+$C$?$G$7$g$&!#\e(B
+
+\e$B%7%s%\%k@\F,0z?t$r<u$1IU$1$J$$L?Na$K$=$l$rBG80$9$k;v$O2?$b0-$$;v$r$7$^$;\e(B
+\e$B$s$,!"NI$$;v$b2?$b$7$^$;$s!#8=:_$N$H$3$m!"$"$^$jB?$/$N4X?t$,%7%s%\%k@\F,\e(B
+\e$B0z?t$rLrN)$F$F$$$k$o$1$G$O$"$j$^$;$s!#\e(B
+
+\e$B$b$7$I$N$h$&$K\e(B gnus \e$B$,$3$l$r<BAu$7$F$$$k$+$K6=L#$,$"$k$J$i!"\e(B
+@pxref{Extended Interactive} \e$B$r8+$F$/$@$5$$!#\e(B
+
+
+@node Formatting Variables
+@section \e$B=qK!;EMMJQ?t\e(B
+@cindex formatting variables
+
+\e$B$3$N%^%K%e%"%k$rDL$7$F!"$"$J$?$O$*$=$i$/\e(B @code{gnus-group-line-format} 
+\e$B$d\e(B @code{gnus-summary-mode-line-format} \e$B$N$h$&$K8F$P$l$k$?$/$5$s$NJQ?t$,\e(B
+\e$B$"$k;v$K5$IU$$$?$G$7$g$&!#$3$l$i$O\e(B gnus \e$B$,?'!9$J%P%C%U%!$G$I$N$h$&$K9T$r\e(B
+\e$B=PNO$9$k$+$r@)8f$7$^$9!#Hs>o$K$?$/$5$s$N$b$N$,$"$j$^$9!#9,1?$J;v$K!"$=$l\e(B
+\e$B$i$O$9$Y$FF1$89=J8$r;H$$$^$9$N$G!"$"$^$j7y$JL\$K$O2q$o$J$$$G$7$g$&!#\e(B
+
+\e$B=qK!;EMM\e(B (format) \e$B;XDj$NNc$,$"$j$^$9\e(B (\e$B%0%k!<%W%P%C%U%!$h$j\e(B):
+@samp{%M%S%5y: %(%g%)\n}\e$B!#$=$l$O<B:]$KHs>o$K=9$/!"$?$/$5$s$N%Q!<%;%s%H5-\e(B
+\e$B9f$,$I$3$K$G$b$"$j$^$9!#\e(B
+
+@menu
+* Formatting Basics::     \e$B=qK!;EMMJQ?t$O4pK\E*$K=qK!;XDjJ8;zNs$G$"$k!#\e(B
+* Mode Line Formatting::  \e$B%b!<%I9T$N=qK!;EMMJQ?t$K4X$9$k$$$/$D$+$N5,B'!#\e(B
+* Advanced Formatting::   \e$B?'!9$JJ}K!$G=PNO$r=$@5$9$k!#\e(B
+* User-Defined Specs::    Gnus \e$B$K$"$J$?<+?H$N4X?t$r8F$P$;$k!#\e(B
+* Formatting Fonts::      \e$B;EMM$rB?:L$GAGE($K8+$;$k!#\e(B
+@end menu
+
+\e$B8=:_$N$H$3$m!"\e(Bgnus \e$B$O0J2<$N=qK!;EMMJQ?t$r;H$$$^$9\e(B:
+@code{gnus-group-line-format}\e$B!"\e(B@code{gnus-summary-line-format}\e$B!"\e(B
+@code{gnus-server-line-format}\e$B!"\e(B@code{gnus-topic-line-format}\e$B!"\e(B
+@code{gnus-group-mode-line-format}\e$B!"\e(B@code{gnus-summary-mode-line-format}\e$B!"\e(B
+@code{gnus-article-mode-line-format}\e$B!"\e(B
+@code{gnus-server-mode-line-format}\e$B!"\e(B
+@code{gnus-summary-pick-line-format}\e$B!#\e(B
+
+\e$B$3$l$iA4$F$N=qK!;EMMJQ?t$OG$0U$N\e(B elisp \e$B<0$G$"$k;v$b$G$-$^$9!#$=$N>l9g$O!"\e(B
+\e$B$=$l$i$OMW5a$5$l$k9T$KA^F~$9$k$?$a$K\e(B @code{\e$BI>2A\e(B} \e$B$5$l$^$9!#\e(B
+
+@kindex M-x gnus-update-format
+@findex gnus-update-format
+Gnus \e$B$O$"$J$?<+?H$N=qK!;EMM;XDj$r:n$k<jEA$$$r$9$kL?Na$rHw$($F$$$^$9!#\e(B
+@kbd{M-x gnus-update-format} \e$B$O8=:_$N<0$r\e(B @code{\e$BI>2A\e(B} \e$B$7!"Ev$N;XDj$r99?7\e(B
+\e$B$7!"7k2L$N\e(B lisp \e$B<0$r<B9T$7$F9T$r:n@.$9$k;v$r<B83$G$-$k%P%C%U%!$K0\F0$7$^\e(B
+\e$B$9!#\e(B
+
+
+
+@node Formatting Basics
+@subsection \e$B=qK!;EMM$N4pK\\e(B
+
+\e$B$=$l$>$l$NMWAG\e(B @samp{%} \e$B$OEv$N%P%C%U%!$,:n@.$5$l$k$H$-$K2?$i$+$NJ8;zNs$d\e(B
+\e$BB>$N$b$N$GCV$-49$($i$l$^$9!#\e(B@samp{%5y} \e$B$O\e(B ``@samp{y} \e$B;XDj$rA^F~$7!"\e(B5\e$BJ8;z\e(B
+\e$B$N>l=j$rF@$k$?$a$K6uGr$rF~$l$J$5$$\e(B'' \e$B$H$$$&;v$G$9!#\e(B
+
+\e$BIaDL$N\e(B C \e$B$d\e(B Emacs Lisp \e$B$N=qK!;EMM\e(B (format) \e$BJ8;zNs$HF1$8$h$&$K!"\e(B@samp{%} 
+\e$B$H=qK!;EMM$N7?$NJ8;z$N4V$N?tCM=$>~;R$O>o$K>/$J$/$H$b$=$ND9$5$K$J$k$h$&$K!"\e(B
+\e$B=PNO$K\e(B @dfn{\e$B5M$a\e(B} \e$B$l$i$l$^$9!#\e(B@samp{%5y} \e$B$O$=$NItJ,$r>o$K\e(B (\e$B>/$J$/$H$b\e(B) 5
+\e$BJ8;z$ND9$5$K$J$k$h$&$K!":8$K6uGr$r5M$a$^$9!#$b$7\e(B @samp{%-5y} \e$B$H$9$l$P!"\e(B
+\e$BBe$o$j$K1&B&$K5M$a9~$_$^$9!#\e(B
+
+\e$BFC$KD9$$CM$+$i$=$NItJ,$rJ]8n$9$k$?$a$K!"D9$5$r@)8B$7$?$$$H$b;W$&$G$7$g$&!#\e(B
+\e$B$=$N$?$a$K$O!"\e(B@samp{%4,6y} \e$B$H$9$k;v$,$G$-$F!"$3$l$O$=$NNN0h$O7h$7$F\e(B6\e$BJ8;z\e(B
+\e$B$rD6$($kD9$5$K$O$J$i$:!"\e(B4\e$BJ8;z$h$j>/$J$$D9$5$K$J$i$J$$$H$$$&;v$G$9!#\e(B
+
+
+@node Mode Line Formatting
+@subsection \e$B%b!<%I9T=qK!;EMM\e(B
+
+\e$B%b!<%I9T=qK!;EMMJQ?t\e(B (\e$B$9$J$o$A!"\e(B@code{gnus-summary-mode-line-format}) \e$B$O\e(B
+\e$B0J2<$N\e(B2\e$B$D$N0c$$0J30$O!"%P%C%U%!9T$K4p$E$/=qK!;EMMJQ?t$H\e(B 
+(@pxref{Formatting Basics}) \e$BF1$8$h$&$J5,B'$K=>$$$^$9\e(B:
+
+@enumerate
+
+@item
+\e$B:G8e$K2~9T\e(B (@samp{\n}) \e$B$,$"$C$F$O$J$j$^$;$s!#\e(B
+
+@item
+\e$BFCJL$J\e(B @samp{%%b} \e$B;XDj$r%P%C%U%!L>$rI=<($9$k$?$a$K;H$&$3$H$,$G$-$^$9!#$(!<\e(B
+\e$B$H!"K\Ev$O$=$l$O;XDj$G$O$J$$$N$G$9\e(B---@samp{%%} \e$B$OC1$K=qK!;EMM$,5!3#E*$K\e(B
+\e$B@Z$jNv$/$N$r@Z$jH4$1$F\e(B @samp{%} \e$B$r$=$N$^$^EO$9$?$a$NJ}K!$G!"\e(BEmacs \e$B$,\e(B 
+@samp{%b} \e$B$r<u$1<h$k$H!"\e(BEmacs \e$B$N%b!<%I9TI=<($NItJ,$,$=$l$r\e(B ``\e$B%P%C%U%!L>\e(B
+\e$B$rI=<($7$J$5$$\e(B'' \e$B$H2r<a$7$^$9!#\e(BEmacs \e$B$,M}2r$9$k%b!<%I9T;XDj$N40A4$J0lMw\e(B
+\e$B$r8+$k$?$a$K$O!"JQ?t\e(B @code{mode-line-format} \e$B$N@bL@J8$r8+$F2<$5$$!#\e(B
+
+@end enumerate
+
+
+@node Advanced Formatting
+@subsection \e$B>e5i=qK!;EMM\e(B
+
+\e$B2?$i$+$NJ}K!$GNN0h$r8e$G=hM}$9$k$N$OIQHK$KLr$KN)$A$^$9!#ItJ,$r5M$a9~$`!"\e(B
+\e$B@)8B$9$k!"@Z$j<h$k$3$H$HFCDj$NCM$rM^@)$9$k;v$O!"\e(B@dfn{\e$B%A%k%@=$>~;R\e(B} \e$B$r;H\e(B
+\e$B$&;v$K$h$jC#@.$5$l$^$9!#$h$/$"$k%A%k%@;XDj$O$3$N$h$&$K8+$($k$+$b$7$l$^$;\e(B
+\e$B$s\e(B @samp{%~(cut 3)~(ignore "0")y}\e$B!#\e(B
+
+\e$B$3$l$i$OM-8z$J=$>~;R$G$9\e(B:
+
+@table @code
+@item pad
+@itemx pad-left
+\e$BMW5a$5$l$?D9$5$K$J$k$^$G!"NN0h$K6uGr$r:8B&$+$i5M$a9~$_$^$9!#\e(B
+
+@item pad-right
+\e$BMW5a$5$l$?D9$5$K$J$k$^$G!"NN0h$K6uGr$r1&B&$+$i5M$a9~$_$^$9!#\e(B
+
+@item max
+@itemx max-left
+\e$B;XDj$5$l$?D9$5$K$J$k$h$&$K!"J8;z$r:8B&$+$i@Z$j<h$j$^$9!#\e(B
+
+@item max-right
+\e$B;XDj$5$l$?D9$5$K$J$k$h$&$K!"J8;z$r1&B&$+$i@Z$j<h$j$^$9!#\e(B
+
+@item cut
+@itemx cut-left
+\e$B;XDj$5$l$??t$NJ8;z$r:8B&$+$i@Z$jMn$H$7$^$9!#\e(B
+
+@item cut-right
+\e$B;XDj$5$l$??t$NJ8;z$r1&B&$+$i@Z$jMn$H$7$^$9!#\e(B
+
+@item ignore
+\e$BNN0h$,;XDj$5$l$?CM$HEy$7$1$l$P\e(B (equal) \e$B!"6uJ8;zNs$rJV$7$^$9!#\e(B
+
+@item form
+@samp{@@} \e$B;XDj$,;H$o$l$?$H$-$K!";XDj$5$l$?<0$rNN0h$NCM$H$7$F;H$$$^$9!#\e(B
+@end table
+
+\e$BNc$r=P$7$F$_$^$7$g$&!#35N,%b!<%I9T$G$N\e(B @samp{%o} \e$B;XDj$O>.7?$N\e(B ISO0861 \e$BMM\e(B
+\e$B<0$NF|IU$rJV$7$^$9\e(B---@samp{19960809T230410} \e$B$G$9!#$3$l$OH/2;$7$K$/$$$N$G!"\e(B
+\e$B@$5*$rI=$9?t$H;~4V$r:o$.Mn$H$7$F!"\e(B6\e$BJ8;z$NF|IU$r;D$7$?$$$H;W$$$^$9!#$=$l\e(B
+\e$B$O\e(B @samp{%~(cut-left 2)~(max-right 6)~(pad 6)o} \e$B$H$J$k$G$7$g$&!#\e(B(\e$B@Z$jMn\e(B
+\e$B$H$7\e(B (cutting) \e$B$O\e(B \e$B:GBg8B\e(B (maxing) \e$B$h$j@h$K$J$5$l$^$9$N$G!"7e$GAGE($K8+$(\e(B
+\e$B$k$h$&$K$9$k$?$a$KF|IU$,\e(B6\e$BJ8;z$h$j>/$J$/L5$/$J$i$J$$;v$rJ]>Z$9$k$?$a$K5M\e(B
+\e$B$a9~$_\e(B (padding) \e$B$,I,MW$K$J$j$^$9!#\e(B)
+
+\e$BL5;k\e(B (ignore) \e$B$,:G=i$K$J$5$l$^$9!#$=$l$+$i@Z$jMn$H$7\e(B (cut) \e$B$,9T$o$l$^$9!#\e(B
+\e$B$=$7$F!"$=$l$+$i:G8e$NA`:n!"5M$a9~$_\e(B (pad) \e$B$,9T$o$l$^$9!#\e(B
+
+\e$B$b$7$3$l$i$N>e5i;2>H$r$?$/$5$s;H$C$F$$$k$J$i!"\e(Bgnus \e$B$,$H$F$bCY$/$J$k$N$,\e(B
+\e$B$o$+$k$G$7$g$&!#$3$l$O$"$J$?$N9T$N308+$KK~B-$7$?$H$-$K\e(B @kbd{M-x
+gnus-compile} \e$B$r<B9T$9$k;v$G3JCJ$KB.EYDc2<$r8:$i$9;v$,$G$-$^$9!#\e(B
+@xref{Compilation}\e$B!#\e(B
+
+
+@node User-Defined Specs
+@subsection \e$BMxMQ<TDj5A$N;XDj\e(B
+
+\e$BA4$F$N;XDj$OMxMQ<TDj5A\e(B---@samp{u} \e$B$N;XDj$rA^F~$9$k;v$,$G$-$^$9!#=qK!;EMM\e(B
+\e$BJ8;zNs$N<!$NJ8;z$O%"%k%U%!%Y%C%H$G$"$kI,MW$,$"$j$^$9!#\e(BGnus \e$B$O4X?t\e(B 
+@code{gnus-user-format-function-}@samp{X} \e$B$r8F$S!"$3$3$G\e(B @samp{X} \e$B$O\e(B 
+@samp{%u} \e$B$KB3$/%"%k%U%!%Y%C%H$G$9!#4X?t$K$OC10l$N0z?t$,M?$($i$l$^$9\e(B---
+\e$B0z?t$N0UL#$O4X?t$,$I$N%P%C%U%!$+$i8F$P$l$F$$$k$+$K$h$C$FJQ$o$j$^$9!#4X?t\e(B
+\e$B$OJ8;zNs$rJV$9$Y$-$G!"$=$l$OB>$N;XDj$+$i$N>pJs$HA4$/F1$8$h$&$K%P%C%U%!$K\e(B
+\e$BA^F~$5$l$^$9!#4X?t$O0UL#$NL5$$CM$H6&$K8F$P$l$k;v$b$"$j$($^$9$N$G!"$=$l$N\e(B
+\e$BBP:v$r$9$k$Y$-$G$9!#\e(B
+
+\e$B?7$7$$4X?t$rDj5A$7$J$$$G$b!"%A%k%@=$>~;R\e(B (@pxref{Advanced Formatting}) 
+\e$B$r;H$C$F$[$H$s$IF1$8;v$rC#@.$9$k;v$,$G$-$^$9!#Nc$G$9\e(B: @samp{%~(form
+(count-lines (point-min) (point)))@@}\e$B!#$3$3$GM?$($i$l$?<0$OI>2A$5$l$F!"\e(B
+\e$B8=:_$N9T?t$r$b$?$i$7!"$=$l$+$iA^F~$5$l$^$9!#\e(B
+
+
+@node Formatting Fonts
+@subsection \e$B=qK!;EMM%U%)%s%H\e(B
+
+\e$B%O%$%i%$%H$N$?$a$N;XDj$,$"$j!"$=$l$i$OA4$F$N=qK!;EMMJQ?t$K$h$C$F6&M-$5$l\e(B
+\e$B$F$$$^$9!#\e(B@samp{%(} \e$B$H\e(B @samp{%)} \e$B;XDj$N4V$NJ8>O$OFCJL$J\e(B 
+@code{mouse-face} \e$B%W%m%Q%F%#$,@_Dj$5$l!"$=$l$O$=$3$K%^%&%9$N%]%$%s%?!<$r\e(B
+\e$B$"$o$;$?$H$-$K\e(B (@code{gnus-mouse-face} \e$B$K$h$C$F\e(B) \e$B%O%$%i%$%H$5$l$k$3$H$K\e(B
+\e$B$J$j$^$9!#\e(B
+
+
+@samp{%@{} \e$B$H\e(B @samp{%@}} \e$B;XDj$N4V$NJ8>O$O\e(B @code{gnus-face-0} \e$B$r;H$C$FIa\e(B
+\e$BDL$N%U%'%$%9$,@_Dj$5$l!"$=$l$O=i4|@_Dj$G\e(B @code{bold} \e$B$G$9!#$b$7\e(B 
+@samp{%@{1} \e$B$H$7$?$J$i!"Be$o$j$K\e(B @code{gnus-face-1} \e$B$rF@!"0J2<F1MM$G$9!#\e(B
+\e$BM_$7$$$@$1$?$/$5$s$N%U%'%$%9$r:n$C$F$/$@$5$$!#F1$8;v$,\e(B @code{mouse-face} 
+\e$B;XDj$K$b8@$($^$9\e(B---@samp{hello} \e$B$,\e(B @code{gnus-mouse-face-3} \e$B$G%^%&%9!]%O\e(B
+\e$B%$%i%$%H$5$l$k$?$a$K$O!"\e(B@samp{%3(hello%)} \e$B$H$9$k;v$,$G$-$^$9!#\e(B
+
+\e$B$3$l$O%0%k!<%W%P%C%U%!$NBeBX<jK!$G$9\e(B:
+
+@lisp
+;; 3\e$B$D$N%U%'%$%9$N7?$r:n$k!#\e(B
+(setq gnus-face-1 'bold)
+(setq gnus-face-3 'italic)
+
+;; \e$B2f!9$O5-;v$N?t$r%\!<%k%I$GNP$N%U%'%$%9\e(B
+;; \e$B$K$7$?$$$N$G!"\e(B`my-green-bold' \e$B$H8F$P$l$k\e(B
+;; \e$B?7$7$$%U%'%$%9$r:n$C$?!#\e(B
+(copy-face 'bold 'my-green-bold)
+;; \e$B?'$r@_Dj$9$k!#\e(B
+(set-face-foreground 'my-green-bold "ForestGreen")
+(setq gnus-face-2 'my-green-bold)
+
+;; \e$B?7$7$$>eEy$N=qK!;EMM$r@_Dj$9$k!#\e(B
+(setq gnus-group-line-format
+      "%M%S%3@{%5y%@}%2[:%] %(%1@{%g%@}%)\n")
+@end lisp
+
+\e$B$"$J$?$,$3$N0F$r;H$C$F40A4$KFI$a$J$/$FHs>o$K2<IJ$JI=<($r:n$k;v$,$G$-$k$H\e(B
+\e$B3N?.$7$F$$$^$9!#3Z$7$s$G$/$@$5$$!*\e(B
+
+@samp{%(} \e$B;XDj\e(B (\e$B$d$=$NN`$N$b$N\e(B) \e$B$O%b!<%I9TJQ?t$G$OA4$/0UL#$r$J$5$J$$;v$K\e(B
+\e$BCm0U$7$F$/$@$5$$!#\e(B
+
+
+@node Windows Configuration
+@section \e$B%&%#%s%I%&$N@_Dj\e(B
+@cindex windows configuration
+
+\e$B$$$(!"\e(BX \e$B$K4X$9$k;v$O$"$j$^$;$s$N$G!"$*$H$J$7$/$7$F2<$5$$!#\e(B
+
+@vindex gnus-use-full-window
+\e$B$b$7\e(B @code{gnus-use-full-window} \e$B$,\e(B @code{nil} \e$B$G$J$$$H!"\e(Bgnus \e$B$OA4$F$NB>\e(B
+\e$B$N%&%#%s%I%&$r>C$7$F!"\e(BEmacs \e$B$N2hLLA4BN$r@jM-$7$^$9!#$3$l$O=i4|@_Dj$G\e(B 
+@code{t} \e$B$G$9!#\e(B
+
+@vindex gnus-buffer-configuration
+@code{gnus-buffer-configuration} \e$B$O$=$l$>$l$N\e(B gnus \e$B$N%P%C%U%!$,$I$N$/$i\e(B
+\e$B$$$N6u4V$rM?$($i$l$k$Y$-$+$r8=$7$^$9!#$3$l$O$3$NJQ?t$NH4?h$G$9\e(B:
+
+@lisp
+((group (vertical 1.0 (group 1.0 point)
+                      (if gnus-carpal (group-carpal 4))))
+ (article (vertical 1.0 (summary 0.25 point)
+                        (article 1.0))))
+@end lisp
+
+\e$B$3$l$OO"A[%j%9%H$G$9!#\e(B@dfn{\e$B%-!<\e(B} \e$B$O2?$i$+$NF0:n$dB>$N$b$N$rG$L?$9$k%7%s\e(B
+\e$B%\%k$G$9!#Nc$($P!"%0%k!<%W%P%C%U%!$rI=<($9$k$H$-$O!"%&%#%s%I%&@_Dj4X?t$O\e(B 
+@code{group} \e$B$r%-!<$H$7$F;H$$$^$9!#;HMQ2DG=$JL>A0$N40A4$J0lMw$O2<$K5s$2\e(B
+\e$B$i$l$F$$$^$9!#\e(B
+
+@dfn{\e$BCM\e(B} (\e$B$9$J$o$A!"\e(B@dfn{\e$BJ,3d\e(B}) \e$B$O$=$l$>$l$N%P%C%U%!$,$I$l$/$i$$$r@j$a$k\e(B
+\e$B$Y$-$+$r;XDj$7$^$9!#\e(B@code{article} \e$BJ,3d$rNc$K<h$k$H\e(B -
+
+@lisp
+(article (vertical 1.0 (summary 0.25 point)
+                       (article 1.0)))
+@end lisp
+
+\e$B$3$N\e(B @dfn{\e$BJ,3d\e(B} \e$B$O35N,%P%C%U%!\e(B (summary buffer) \e$B$,2hLL$N>e$N\e(B 25% \e$B$r@j$a\e(B
+\e$B$k$Y$-$G!"$=$l$O5-;v%P%C%U%!\e(B (article buffer) \e$B$N>e$KG[CV$5$l$^$9!#$*5$$E\e(B
+\e$B$-$NDL$j!"\e(B100% + 25% \e$B$O<B:]$O\e(B 125% \e$B$G$9\e(B (\e$B$($'!"3'$5$s$N7W;;$O$3$NMM$K$J$C\e(B
+\e$B$?$H;W$$$^$9!#\e(B) \e$B$7$+$7!"FCJL$J?t;z\e(B @code{1.0} \e$B$O!";D$j$N%P%C%U%!$,I,MW$J\e(B
+\e$B$b$N$r<h$j5n$C$?8e$K!";HMQ2DG=$J;D$j$N6u4VA4$F$r5[$$<h$k!"$H$$$&;v$r9g?^\e(B
+\e$B$9$k$?$a$K;H$o$l$^$9!#\e(B1\e$B$D$NJ,3d$K$D$-!"\e(B@code{1.0} \e$B$NBg$-$5;XDj$N%P%C%U%!\e(B
+\e$B$O0l$D$@$1$G$J$/$F$O$J$j$^$;$s!#\e(B
+
+\e$B%]%$%s%H$O>JN,2DG=$J\e(B3\e$B$DL\$NMWAG!"\e(B@code{point} \e$B$r;}$D%P%C%U%!$KCV$+$l$^$9!#\e(B
+@code{frame} \e$BJ,3d$G$O!"%?%0\e(B @code{frame-focus} \e$B$,9=@.MWAG$G$"$k\e(B (\e$B$9$J$o\e(B
+\e$B$A!"\e(B@code{point} \e$B%?%0$,B8:_$9$k$+$I$&$+$K$h$C$F!"%j%9%H$N\e(B3\e$BHVL\$+\e(B4\e$BHVL\$+\e(B
+\e$B$KB8:_$9$kMWAG\e(B) \e$BMUJ,3d$r;}$D:G8e$NI{J,3d$,>GE@$rF@$k;v$K$J$j$^$9!#\e(B
+
+\e$B<!$O$b$C$HJ#;($JNc$G$9\e(B:
+
+@lisp
+(article (vertical 1.0 (group 4)
+                       (summary 0.25 point)
+                       (if gnus-carpal (summary-carpal 4))
+                       (article 1.0)))
+@end lisp
+
+\e$B$b$7Bg$-$5;XDj$,IbF0>.?tE@?t$NBe$o$j$K@0?t$G$"$C$?$J$i!"$=$l$O3d9g$G$O$J\e(B
+\e$B$/!"$I$N$/$i$$B?$/$N9T$r%P%C%U%!$,@j$a$k$Y$-$+$r;XDj$9$k$?$a$K;H$o$l$^$9!#\e(B
+
+\e$B$b$7\e(B @dfn{\e$BJ,3d\e(B} \e$B$,\e(B @code{\e$BI>2A\e(B} \e$B$5$l$k$b$N$N$h$&$K8+$($k$H$-$O\e(B (\e$BL@3N$K$9\e(B
+\e$B$k$H\e(B---\e$BJ,3d$N\e(B @code{car} \e$B$,4X?t$+86;O4X?t\e(B (subr) \e$B$G$"$k$H$-$O\e(B)\e$B!"$3$NJ,3d\e(B
+\e$B$O\e(B @code{\e$BI>2A\e(B} \e$B$5$l$^$9!#7k2L$,\e(B @code{nil} \e$B$G$J$$$J$i!"$=$l$OJ,3d$H$7$F\e(B
+\e$BMQ$$$i$l$^$9!#$3$l$O!"\e(B@code{gnus-carpal} \e$B$,\e(B @code{nil} \e$B$G$"$l$P\e(B3\e$B$D$N%P%C\e(B
+\e$B%U%!$,!"\e(B@code{gnus-carpal} \e$B$,\e(B @code{nil} \e$B$G$J$$$J$i!"\e(B4\e$B$D$N%P%C%U%!$,B8:_\e(B
+\e$B$9$k$H$$$&;v$G$9!#\e(B
+
+\e$B$^$@J#;($G$O$J$$$G$9$C$F!)\e(B \e$B$=$l$G$O!"Bg$-$5$K$3$l$r;n$7$F$_$F2<$5$$\e(B:
+
+@lisp
+(article (horizontal 1.0
+             (vertical 0.5
+                 (group 1.0)
+                 (gnus-carpal 4))
+             (vertical 1.0
+                 (summary 0.25 point)
+                 (summary-carpal 4)
+                 (article 1.0))))
+@end lisp
+
+\e$B$*$)$C$H!#\e(B2\e$B$D$N%P%C%U%!$KIT;W5D$J\e(B 100% \e$B%?%0$,IU$$$F$$$^$9!#$=$7$F!"$"$N\e(B 
+@code{horizontal} \e$B$C$F$$$&$b$N$O2?$G$7$g$&!)\e(B
+
+\e$B$b$7J,3d$N0l$D$N:G=i$NMWAG$,\e(B @code{horizontal} \e$B$G$"$C$?$J$i!"\e(Bgnus \e$B$O\e(B \e$B%&%#\e(B
+\e$B%s%I%&$r?eJ?$KJ,3d$7!"\e(B2\e$B$D$N%&%#%s%I%&$r2#$KJB$Y$^$9!#$3$l$i$N$=$l$>$l$N\e(B
+\e$B>.JR$NCf$G$O!"A4$F$rIaDL$NN.57$G9T$&;v$,$G$-$^$9!#\e(B@code{horizontal} \e$B$N8e\e(B
+\e$B$N?t;z$O!"$3$N>.JR$K2hLL$N$I$l$/$i$$$N3d9g$,M?$($i$l$k$+$r;XDj$7$^$9!#\e(B
+
+\e$B$=$l$>$l$NJ,3d$G$O!"\e(B100% \e$B$N%?%0$r;}$DMWAG$,\e(B @emph{\e$BI,$:\e(B} \e$B0l$D$"$kI,MW$,$"\e(B
+\e$B$j$^$9!#J,3d$O7h$7$F@53N$K$O9T$o$l$^$;$s$N$G!"$3$N%P%C%U%!$,J,3d$+$i;D$5\e(B
+\e$B$l$?A4$F$N9T$r@jNN$7$^$9!#\e(B
+
+\e$B$b$&>/$7@5<0$K$9$k$?$a$K!"$3$3$KM-8z$JJ,3d$,$I$N$h$&$K$J$k$+$NDj5A$,$"$j\e(B
+\e$B$^$9\e(B:
+
+@example
+split       = frame | horizontal | vertical | buffer | form
+frame       = "(frame " size *split ")"
+horizontal  = "(horizontal " size *split ")"
+vertical    = "(vertical " size *split ")"
+buffer      = "(" buffer-name " " size *[ "point" ] *[ "frame-focus"] ")"
+size        = number | frame-params
+buffer-name = group | article | summary ...
+@end example
+
+\e$B@)8B$K$O!"\e(B@code{frame} \e$B$O:G>e0L$NJ,3d$H$7$F$7$+8=$l$k;v$,$G$-$J$$$H$$$&\e(B
+\e$B$b$N$,$"$j$^$9!#\e(B@var{form} \e$B$OM-8z$JJ,3d$rJV$9\e(B Emacs Lisp \e$B$N<0\e(B (form) \e$B$G\e(B
+\e$B$J$1$l$P$J$j$^$;$s!#$=$l$>$l$NJ,3d$O40A4$K:F5"E*$G!"G$0U$N?t$N\e(B 
+@code{vertical} \e$B$H\e(B @code{horizontal} \e$BJ,3d$r4^$`;v$,$G$-$^$9!#\e(B
+
+@vindex gnus-window-min-width
+@vindex gnus-window-min-height
+@cindex window height
+@cindex window width
+\e$B@5$7$$Bg$-$5$r8+$D$1$k$N$O>/$7J#;($G$9!#$I$N%&%#%s%I%&$b\e(B 
+@code{gnus-window-min-height} (\e$B=i4|CM\e(B 1) \e$B$NJ8;z$N9b$5$h$j$b>.$5$/$F$O$J\e(B
+\e$B$i$:!">/$J$/$H$b\e(B @code{gnus-window-min-width} (\e$B=i4|CM\e(B 1) \e$B$NJ8;zI}$G$J$/\e(B
+\e$B$F$O$J$j$^$;$s!#\e(BGnus \e$B$OJ,3d$rE,MQ$9$kA0$K$3$l$r6/@)$7$h$&$H;n$_$^$9!#$b\e(B
+\e$B$7IaDL$N\e(B Emacs \e$B$N%&%#%s%I%&$NI}\e(B/\e$B9b$5@)8B$r;H$$$?$$$J$i!"$3$N\e(B2\e$B$D$NJQ?t$r\e(B 
+@code{nil} \e$B$K$9$k$@$1$GNI$$$G$9!#\e(B
+
+\e$B$b$7\e(B Emacs \e$B$NMQ8l$K$J$8$s$G$$$J$$$N$J$i!"\e(B@code{horizontal} \e$B$H\e(B 
+@code{vertical} \e$BJ,3d$O!"4|BT$9$k$b$N$HH?BP$NF0:n$r$9$k$G$7$g$&!#\e(B
+@code{horizontal} \e$BJ,3d$NCf$N%&%#%s%I%&$O2#$KJB$s$GI=<($5$l!"\e(B
+@code{vertical} \e$BJ,3d$NCf$N%&%#%s%I%&$O>e2<$KI=<($5$l$^$9!#\e(B
+
+@findex gnus-configure-frame
+\e$B%&%#%s%I%&$N@_CV$K4X$7$F<B83$r$7$F$_$?$$$N$G$"$l$P!"$h$$J}K!$OJ,3d$GD>@\\e(B 
+@code{gnus-configure-frame} \e$B$r8F$V$3$H$G$9!#$3$l$O%P%C%U%!$rJ,3d$9$k$H$-\e(B
+\e$B$KA4$F$NK\Ev$N;E;v$r$9$k4X?t$G$9!#2<$N$b$N$O\e(B5\e$B%&%#%s%I%&$N$H$F$b$P$+$2$?\e(B
+\e$B@_Dj$G$9!#\e(B2\e$B$D$r%0%k!<%W%P%C%U%!$K!"\e(B3\e$B$D$r5-;v%P%C%U%!$N$?$a$K=<$F$^$9!#\e(B 
+(\e$B$=$l$O$P$+$2$F$$$k$H8@$C$?$G$7$g!#\e(B) \e$B$b$72<$NJ8$r\e(B @code{\e$BI>2A\e(B} \e$B$9$k$H!"Ia\e(B
+\e$BDL$N\e(B gnus \e$B$N7PO)$r;H$o$J$$$G!"$9$0$K$=$l$,$I$N$h$&$K8+$($k$+$N9M$($rF@$k\e(B
+\e$B;v$,$G$-$^$9!#K~B-$9$k$^$G$=$l$GM7$s$G!"$=$l$+$i\e(B 
+@code{gnus-add-configuration} \e$B$r;H$C$F?7$7$$A[A|$r%P%C%U%!@_Dj%j%9%H$K2C\e(B
+\e$B$($F2<$5$$!#\e(B
+
+@lisp
+(gnus-configure-frame
+ '(horizontal 1.0
+    (vertical 10
+      (group 1.0)
+      (article 0.3 point))
+    (vertical 1.0
+      (article 1.0)
+      (horizontal 4
+        (group 1.0)
+        (article 10)))))
+@end lisp
+
+\e$B$$$/$D$+$N%U%l!<%`$bM_$7$$$+$b$7$l$^$;$s!#4JC1$G$9\e(B---@code{frame} \e$BJ,3d$r\e(B
+\e$B;H$&$@$1$G$9\e(B:
+
+@lisp
+(gnus-configure-frame
+ '(frame 1.0
+         (vertical 1.0
+                   (summary 0.25 point frame-focus)
+                   (article 1.0))
+         (vertical ((height . 5) (width . 15)
+                    (user-position . t)
+                    (left . -1) (top . 1))
+                   (picon 1.0))))
+
+@end lisp
+
+\e$B$3$NJ,3d$N7k2L$O!":G=i\e(B (\e$B$b$7$/$O!"\e(B``\e$B<g$J\e(B'') \e$B%U%l!<%`$O8+47$l$?35N,\e(B/\e$B5-;v\e(B
+\e$B%&%#%s%I%&@_Dj$G!">.$5$JDI2C$N%U%l!<%`$,\e(B picon \e$B$rI=<($9$k$?$a$K:n$i$l$k\e(B
+\e$B$H$$$&;v$K$J$j$^$9!#$4Mw$NDL$j!"IaDL$N\e(B @code{1.0} \e$B:G>e0L;XDj$NBe$o$j$K!"\e(B
+\e$B$=$l$>$l$NDI2C$NJ,3d$,%U%l!<%`%Q%i%a!<%?O"A[%j%9%H$rBg$-$5;XDj$H$7$F;}$?\e(B
+\e$B$J$1$l$P$J$j$^$;$s!#\e(B@xref{Frame Parameters, , Frame Parameters, elisp,
+The GNU Emacs Lisp Reference Manual}. XEmacs \e$B$G$O!"%U%l!<%`%W%m%Q%F%#%j\e(B
+\e$B%9%H$b;H$($^$9\e(B---\e$BNc$($P!"\e(B@code{(height 5 width 15 left -1 top 1)} \e$B$O$=$N\e(B
+\e$B$h$&$J%Q%i%a!<%?%j%9%H$G$9!#\e(B
+
+\e$B$3$l$O\e(B @code{gnus-buffer-configuration} \e$B$K;EMM2DG=$J%-!<$N0lMw$G$9\e(B:
+
+@code{group}\e$B!"\e(B@code{summary}\e$B!"\e(B@code{article}\e$B!"\e(B@code{server}\e$B!"\e(B
+@code{browse}\e$B!"\e(B@code{message}\e$B!"\e(B@code{pick}\e$B!"\e(B@code{info}\e$B!"\e(B
+@code{summary-faq}\e$B!"\e(B@code{edit-group}\e$B!"\e(B@code{edit-server}\e$B!"\e(B
+@code{edit-score}\e$B!"\e(B@code{post}\e$B!"\e(B@code{reply}\e$B!"\e(B@code{forward}\e$B!"\e(B
+@code{reply-yank}\e$B!"\e(B@code{mail-bounce}\e$B!"\e(B@code{draft}\e$B!"\e(B@code{pipe}\e$B!"\e(B
+@code{bug}\e$B!"\e(B@code{compose-bounce}\e$B!"\e(B@code{score-trace}\e$B!#\e(B
+
+\e$B%-!<\e(B @code{message} \e$B$O\e(B @code{gnus-group-mail} \e$B$H\e(B 
+@code{gnus-summary-mail-other-window} \e$B$NN>J}$G;H$o$l$k;v$KCm0U$7$F2<$5$$!#\e(B
+\e$B$b$7\e(B2\e$B$D$r6hJL$9$k$[$&$,K>$^$7$$$J$i!"$3$N$h$&$JJ*$r;H$&;v$,$G$-$^$9\e(B:
+
+@lisp
+(message (horizontal 1.0
+                     (vertical 1.0 (message 1.0 point))
+                     (vertical 0.24
+                               (if (buffer-live-p gnus-summary-buffer)
+                                   '(summary 0.5))
+                               (group 1.0)))))
+@end lisp
+
+@findex gnus-add-configuration
+\e$BJQ?t\e(B @code{gnus-buffer-configuration} \e$B$O$H$F$bD9$/J#;($J$N$G!"C10l$N@_Dj\e(B
+\e$B$NJQ99$r4JC1$K$9$k$?$a$N4X?t$,$"$j$^$9\e(B: @code{gnus-add-configuration} \e$B$G\e(B
+\e$B$9!#$b$7!"Nc$($P!"\e(B@code{article} \e$B$N@_Dj$rJQ$($?$$$N$J$i!"<!$N$h$&$K$G$-\e(B
+\e$B$^$9\e(B:
+
+@lisp
+(gnus-add-configuration
+ '(article (vertical 1.0
+               (group 4)
+               (summary .25 point)
+               (article 1.0))))
+@end lisp
+
+\e$BIaDL$O$3$l$i$N\e(B @code{gnus-add-configuration} \e$B8F$S=P$7$r%U%!%$%k\e(B 
+@code{.gnus.el} \e$B$KF~$l$k$+!"2?$i$+$N5/F0;~$N%U%C%/$KF~$l$k$G$7$g$&\e(B---\e$B$=\e(B
+\e$B$l$i$O\e(B gnus \e$B$,FI$_9~$^$l$?8e$K<B9T$5$l$k$Y$-$G$9!#\e(B
+
+@vindex gnus-always-force-window-configuration
+\e$B$b$7@_Dj$G8@5Z$5$l$?A4$F$N%&%#%s%I%&$,4{$K8+$($F$$$k$N$G$"$l$P!"\e(Bgnus \e$B$O\e(B
+\e$B%&%#%s%I%&$N@_Dj$rJQ99$7$^$;$s!#$b$7>o$K\e(B ``\e$B@5$7$$\e(B'' \e$B%&%#%s%I%&@_Dj$r6/@)\e(B
+\e$B$7$?$$$N$G$"$l$P!"\e(B@code{gnus-always-force-window-configuration} \e$B$r\e(B 
+@code{nil} \e$B$G$J$$CM$K@_Dj$9$k;v$,$G$-$^$9!#\e(B
+
+
+@node Faces and Fonts
+@section \e$B%U%'%$%9$H%U%)%s%H\e(B
+@cindex faces
+@cindex fonts
+@cindex colors
+
+\e$B%U%)%s%H$H%U%'%$%9$rO.$k$N$OHs>o$KFq$7$+$C$?$N$G$9$,!":#F|$G$OHs>o$K4JC1\e(B
+\e$B$G$9!#C1$K\e(B @kbd{M-x customize-face} \e$B$H$d$C$F!"JQ$($?$$%U%'%$%9$rA*$S=P$7\e(B
+\e$B$F!"I8=`$N%+%9%?%^%$%:%$%s%?!<%U%'!<%9$r;H$C$FJQ99$9$k;v$,$G$-$^$9!#\e(B
+
+
+@node Compilation
+@section \e$B%3%s%Q%$%k\e(B
+@cindex compilation
+@cindex byte-compilation
+
+@findex gnus-compile
+
+\e$B$"$N9T=qK!;EMM;XDjJQ?t$r3P$($F$$$^$9$+!)\e(B @code{gnus-summary-line-format}\e$B!"\e(B
+@code{gnus-group-line-format} \e$B$J$I$J$I$G$9!#$5$F!"\e(Bgnus \e$B$O$b$A$m$s$3$l$i\e(B
+\e$B$NJQ?t$,$I$N$h$&$J$b$N$G$bCm0U$7$^$9$,!"IT1?$J;v$K!"$=$l$i$rJQ99$9$k$H!"\e(B
+\e$BBgJQ=EBg$JB.EYDc2<$r0z$-5/$3$9;v$K$J$j$^$9!#\e(B (\e$B$3$l$i$NJQ?t$N=i4|CM$O$=$l\e(B
+\e$B$i$K4XO"IU$1$i$l$?%P%$%H%3%s%Q%$%k$5$l$?4X?t$r;}$C$F$$$^$9$,!"MxMQ<T:n@.\e(B
+\e$B$N$b$N$O$b$A$m$s$=$&$G$O$"$j$^$;$s!#\e(B)
+
+\e$B$3$l$r2~A1$9$k$?$a$K!"JQ?t$rO.$j$^$o$7$F!"\e(B(\e$B$J$s$H$J$/\e(B) \e$BK~B-$7$?$H46$8$?\e(B
+\e$B8e$G!"\e(B@kbd{M-x gnus-compile} \e$B$r<B9T$9$k;v$,$G$-$^$9!#$3$l$O?7$7$$;XDj$,\e(B
+\e$B%P%$%H%3%s%Q%$%k$5$l!"$b$&0lEY:G9bB.EY$KI|5"$G$-$k$H$$$&;v$G$9!#\e(BGnus \e$B$O\e(B
+\e$B$3$l$i$N%3%s%Q%$%k$5$l$?;XDj$r%U%!%$%k\e(B @file{.newsrc.eld} \e$B$KJ]B8$7$^$9!#\e(B 
+(\e$BMxMQ<TDj5A$N4X?t$O!"$3$N4X?t$G$O%3%s%Q%$%k$5$l$^$;$s$,\e(B--\e$B$=$l$i$r%3%s%Q\e(B
+\e$B%$%k$9$k$?$a$K$O!"$=$l$i$r%U%!%$%k\e(B @code{.gnus.el} \e$B$KFM$C9~$s$G!"$=$N%U%!\e(B
+\e$B%$%k$r%P%$%H%3%s%Q%$%k$9$k$Y$-$G$9!#\e(B)
+
+
+@node Mode Lines
+@section \e$B%b!<%I9T\e(B
+@cindex mode lines
+
+@vindex gnus-update-mode-lines
+@code{gnus-updated-mode-lines} \e$B$O$I$N%P%C%U%!$,$=$N%b!<%I9T$r>o$K:G?7$N\e(B
+\e$B$b$N$K$7$F$*$/$+$r;XDj$7$^$9!#$=$l$O%7%s%\%k$N%j%9%H$G$9!#;H$&;v$N$G$-$k\e(B
+\e$B%7%s%\%k$O\e(B @code{group} \e$B!"\e(B@code{article}\e$B!"\e(B@code{summary}\e$B!"\e(B@code{server}\e$B!"\e(B
+@code{browse}\e$B!"\e(B@code{tree} \e$B$J$I$G$9!#$b$7BP1~$9$k%7%s%\%k$,B8:_$9$k$H!"\e(B
+gnus \e$B$O3:Ev$9$k$G$"$m$&>pJs$G%b!<%I9T$r99?7$7$^$9!#$3$NJQ?t$,\e(B @code{nil} 
+\e$B$G$"$k$J$i!"2hLL$N:FIA2h$O$b$C$HB.$$$G$7$g$&!#\e(B
+
+@cindex display-time
+
+@vindex gnus-mode-non-string-length
+\e$B=i4|@_Dj$G$O!"\e(Bgnus \e$B$O35N,%P%C%U%!$H5-;v%P%C%U%!$N%b!<%I9T$K8=:_$N5-;v$N\e(B
+\e$B>pJs$rI=<($7$^$9!#\e(BGnus \e$B$,I=<($7$?$$>pJs\e(B (\e$BNc$($P!"5-;v$NI=Bj\e(B) \e$B$O$7$P$7$P\e(B
+\e$B%b!<%I9T$h$j$bD9$$$3$H$,$"$k$N$G!"$I$3$+$G@Z$jMn$H$5$l$J$1$l$P$J$j$^$;$s!#\e(B
+\e$BJQ?t\e(B @code{gnus-mode-non-string-length} \e$B$O$=$N9T$NB>$NMWAG\e(B (\e$B$9$J$o$A!">p\e(B
+\e$BJs$G$J$$ItJ,\e(B) \e$B$,$I$N$/$i$$$ND9$5$G$"$k$+$r;XDj$7$^$9!#$b$7%b!<%I9T$KDI2C\e(B
+\e$B$NMWAG$rF~$l$?$J$i!"$3$NJQ?t$r=$@5$9$kI,MW$,$"$j$^$9\e(B:
+
+@c Hook written by Francesco Potorti` <pot@cnuce.cnr.it>
+@lisp
+(add-hook 'display-time-hook
+          (lambda () (setq gnus-mode-non-string-length
+                           (+ 21
+                              (if line-number-mode 5 0)
+                              (if column-number-mode 4 0)
+                              (length display-time-string)))))
+@end lisp
+
+\e$B$b$7$3$NJQ?t$,\e(B @code{nil} \e$B$G$"$k$J$i\e(B (\e$B$3$l$,=i4|CM$G$9$,\e(B)\e$B!"%b!<%I9T$O@Z\e(B
+\e$B$jMn$H$5$l$:!"5M$a9~$_$b$5$l$^$;$s!#=i4|@_Dj$O!"%P%C%U%!$N40A4$J%Q!<%;%s\e(B
+\e$B%HI=<($5$($b%b!<%I9T$+$iDI$$$d$i$l$k2DG=@-$b$"$j$^$9$N$G!"$*$=$i$/K>$^$7\e(B
+\e$B$$@_Dj$G$O$J$$$H$$$&;v$KCm0U$7$F2<$5$$!#MxMQ<T$,<+J,$N@_Dj$K9g$&$h$&$K$3\e(B
+\e$B$NJQ?t$rE,@Z$K@_Dj$7$J$1$l$P$J$j$^$;$s!#\e(B
+
+
+@node Highlighting and Menus
+@section \e$B%O%$%i%$%H$H%a%K%e!<\e(B
+@cindex visual
+@cindex highlighting
+@cindex menus
+
+@vindex gnus-visual
+\e$BJQ?t\e(B @code{gnus-visual} \e$B$O$?$$$F$$$N\e(B gnus \e$B$rAGE($K$9$kItJ,$NA`:n$r$7$^$9!#\e(B
+@code{nil} \e$B$G$"$k$H!"\e(Bgnus \e$B$O%a%K%e!<$r:n$C$?$j!"AGE($J?'$d%U%)%s%H$r;H$C\e(B
+\e$B$?$j$7$h$&$H$7$^$;$s!#$3$l$O%U%!%$%k\e(B @file{gnus-vis.el} \e$B$rFI$_9~$`;v$b6X\e(B
+\e$B;_$7$^$9!#\e(B
+
+\e$B$3$NJQ?t$O;EMM2DG=$J;k3PE*%W%m%Q%F%#$N%j%9%H$G$"$k;v$,$G$-$^$9!#0J2<$NMW\e(B
+\e$BAG$OM-8z$G!"=i4|@_Dj$G$9$Y$F4^$^$l$F$$$^$9\e(B:
+
+@table @code
+@item group-highlight
+\e$B%0%k!<%W%P%C%U%!$G%O%$%i%$%H$r$7$^$9!#\e(B
+@item summary-highlight
+\e$B35N,%P%C%U%!$G%O%$%i%$%H$r$7$^$9!#\e(B
+@item article-highlight
+\e$B5-;v%P%C%U%!$G%O%$%i%$%H$r$7$^$9!#\e(B
+@item highlight
+\e$BA4$F$N%P%C%U%!$G%O%$%i%$%H$r$9$k$h$&$K$7$^$9!#\e(B
+@item group-menu
+\e$B%0%k!<%W%P%C%U%!$G%a%K%e!<$r:n@.$7$^$9!#\e(B
+@item summary-menu
+\e$B35N,%P%C%U%!$G%a%K%e!<$r:n@.$7$^$9!#\e(B
+@item article-menu
+\e$B5-;v%P%C%U%!$G%a%K%e!<$r:n@.$7$^$9!#\e(B
+@item browse-menu
+\e$B%V%i%&%:%P%C%U%!$G%a%K%e!<$r:n@.$7$^$9!#\e(B
+@item server-menu
+\e$B%5!<%P!<%P%C%U%!$G%a%K%e!<$r:n@.$7$^$9!#\e(B
+@item score-menu
+\e$B%9%3%"%P%C%U%!$G%a%K%e!<$r:n@.$7$^$9!#\e(B
+@item menu
+\e$BA4$F$N%P%C%U%!$G%a%K%e!<$r:n@.$7$^$9!#\e(B
+@end table
+
+\e$B$G$9$+$i!"5-;v%P%C%U%!$@$1$r%O%$%i%$%H$7$?$/!"A4$F$N%P%C%U%!$G%a%K%e!<$r\e(B
+\e$B:n$j$?$$>l9g$O!"$3$N$h$&$K$9$k;v$,$G$-$^$9\e(B:
+
+@lisp
+(setq gnus-visual '(article-highlight menu))
+@end lisp
+
+\e$B$b$7%O%$%i%$%H$@$1$G!"%a%K%e!<$NN`$OM_$7$/$J$$$H$-$O!"<!$N$h$&$K$G$-$^$9\e(B:
+
+@lisp
+(setq gnus-visual '(highlight))
+@end lisp
+
+@code{gnus-visual} \e$B$,\e(B @code{t} \e$B$G$"$k$H!"%O%$%i%$%H$H%a%K%e!<$OA4$F$N\e(B 
+gnus \e$B$N%P%C%U%!$G;HMQ$5$l$^$9!#\e(B
+
+\e$BB>$NA4$F$N%P%C%U%!$N308+$K1F6A$9$kAm9gE*$JJQ?t$O\e(B:
+
+@table @code
+@item gnus-mouse-face
+@vindex gnus-mouse-face
+\e$B$3$l$O\e(B gnus \e$B$G%^%&%9$N%O%$%i%$%H$K;H$o$l$k%U%'%$%9\e(B (\e$B$9$J$o$A!"%U%)%s%H\e(B) 
+\e$B$G$9!#\e(B@code{gnus-visual} \e$B$,\e(B @code{nil} \e$B$G$"$k$H!"%^%&%9%O%$%i%$%H$O$J$5\e(B
+\e$B$l$^$;$s!#\e(B
+
+@end table
+
+\e$BA4$/0c$C$?%a%K%e!<$r:n@.$9$k$?$a$K4XO"$9$k%U%C%/$,$"$j$^$9\e(B:
+
+@table @code
+
+@item gnus-article-menu-hook
+@vindex gnus-article-menu-hook
+\e$B5-;v%b!<%I\e(B (article mode) \e$B%a%K%e!<$r:n@.$7$?8e$K8F$P$l$k%U%C%/$G$9!#\e(B
+
+@item gnus-group-menu-hook
+@vindex gnus-group-menu-hook
+\e$B%0%k!<%W%b!<%I\e(B (group mode) \e$B%a%K%e!<$r:n@.$7$?8e$K8F$P$l$k%U%C%/$G$9!#\e(B
+
+@item gnus-summary-menu-hook
+@vindex gnus-summary-menu-hook
+\e$B35N,%b!<%I\e(B (summary mode) \e$B%a%K%e!<$r:n@.$7$?8e$K8F$P$l$k%U%C%/$G$9!#\e(B
+
+@item gnus-server-menu-hook
+@vindex gnus-server-menu-hook
+\e$B%5!<%P!<%b!<%I\e(B (server mode) \e$B%a%K%e!<$r:n@.$7$?8e$K8F$P$l$k%U%C%/$G$9!#\e(B
+
+@item gnus-browse-menu-hook
+@vindex gnus-browse-menu-hook
+\e$B354Q%b!<%I\e(B (browse mode) \e$B%a%K%e!<$r:n@.$7$?8e$K8F$P$l$k%U%C%/$G$9!#\e(B
+
+@item gnus-score-menu-hook
+@vindex gnus-score-menu-hook
+\e$B%9%3%"%b!<%I\e(B (score mode) \e$B%a%K%e!<$r:n@.$7$?8e$K8F$P$l$k%U%C%/$G$9!#\e(B
+
+@end table
+
+
+@node Buttons
+@section \e$B%\%?%s\e(B
+@cindex buttons
+@cindex mouse
+@cindex click
+
+\e$B:G6a$G$O!":G?7N.9T$N%^%&%9\e(B @dfn{mouse} \e$BAuCV$,!"$A$c$s$H$7$?A`:nK!$r3X$S\e(B
+\e$B$?$,$i$J$$%J%&$J%d%s%0$N4V$GBg?M5$$G$9!#$=$l$G$O!";d$,\e(BTops 20 \e$B%7%9%F%`>e\e(B
+\e$B$G\e(B Emacs \e$B$r;H$C$F$$$?:"$N\e(B '89 \e$BG/$N2F$r;W$$5/$3$7$F$_$^$7$g$&!#\e(B300 \e$B?M$NMx\e(B
+\e$BMQ<T$,!"0l$D$N%^%7%s>e$G!"$_$s$J$,\e(B Simula \e$B%3%s%Q%$%i$rAv$i$;$F$$$^$7$?!#\e(B
+\e$B$"$"!"$P$+$P$+$7$$\e(B!
+
+\e$B$[$s$H$K$=$&$@$M!#\e(B
+
+@vindex gnus-carpal
+\e$B$^$:$G$9$M!"\e(B@code{gnus-carpal} \e$B$r\e(B @code{t} \e$B$K@_Dj$9$k$3$H$K$h$C\e(B
+\e$B$F!"%/%j%C%/$9$k$@$1$G2?$G$b$G$-$k%\%?%s$@$i$1$N%P%C%U%!$r\e(B gnus
+\e$B$KI=<($5$;$k$3$H$,$G$-$^$9!#$H$C$F$b4JC1$G$9!"$[$s$H$K!#;X05NEK!\e(B
+\e$B$N@h@8$K65$($F$"$2$F!#\e(B(\e$BLuCm\e(B: carpal \e$B$H$O<j<s$N9|$N$3$H\e(B)
+
+
+@table @code
+
+@item gnus-carpal-mode-hook
+@vindex gnus-carpal-mode-hook
+\e$BA4$F$N<j<s%b!<%I%P%C%U%!$G<B9T$9$k%U%C%/!#\e(B
+
+@item gnus-carpal-button-face
+@vindex gnus-carpal-button-face
+Face used on buttons.
+\e$B%\%?%s$K;H$o$l$k%U%'%$%9!#\e(B
+
+@item gnus-carpal-header-face
+@vindex gnus-carpal-header-face
+\e$B<j<s%P%C%U%!$N%X%C%@!<$G;HMQ$5$l$k%U%'%$%9!#\e(B
+
+@item gnus-carpal-group-buffer-buttons
+@vindex gnus-carpal-group-buffer-buttons
+\e$B%0%k!<%W%P%C%U%!$N%\%?%s!#\e(B
+
+@item gnus-carpal-summary-buffer-buttons
+@vindex gnus-carpal-summary-buffer-buttons
+\e$B35N,%P%C%U%!$N%\%?%s!#\e(B
+
+@item gnus-carpal-server-buffer-buttons
+@vindex gnus-carpal-server-buffer-buttons
+\e$B%5!<%P!<%P%C%U%!$N%\%?%s!#\e(B
+
+@item gnus-carpal-browse-buffer-buttons
+@vindex gnus-carpal-browse-buffer-buttons
+\e$B1\Mw%P%C%U%!$N%\%?%s!#\e(B
+@end table
+
+\e$BA4$F$N\e(B @code{buttons} \e$BJQ?t$O%j%9%H$G$9!#$3$N%j%9%H$NMWAG$O!"\e(B
+@code{car} \e$B$,I=<($5$l$kJ8$G\e(B @code{cdr} \e$B$,4X?t%7%s%\%k$N\e(B cons \e$B%;\e(B
+\e$B%k$+!"$b$7$/$O$?$@$NJ8;zNs$N$I$A$i$+$G$9!#\e(B
+
+
+@node Daemons
+@section \e$B%G!<%b%s\e(B
+@cindex demons
+@cindex daemons
+
+Gnus\e$B!"$=$l$O\e(B(\e$B8@$$EA$($K$h$l$P\e(B)\e$B$+$D$F=q$+$l$?$$$+$J$k%W%m%0%i%`$h\e(B
+\e$B$j$bBg$-$/!"$"$J$?$,$d$C$FM_$7$$$H;W$&$5$^$6$^$J4qL/$J$3$H$r!"$"\e(B
+\e$B$J$?$N$$$J$$$H$3$m$G9T$C$F$/$l$k$b$N$G$9!#Nc$($P!"$"$J$?$O;~$?$^\e(B
+\e$B?7Ce%a!<%k$r%A%'%C%/$7$F$b$i$$$?$/$J$k$+$bCN$l$^$;$s!#$"$k$$$O\e(B 
+Emacs \e$B$r$7$P$i$/J|$C$F$*$$$?$H$-A4$F$N%5!<%P$N@\B3$r@ZCG$7$F$b$i\e(B
+\e$B$$$?$/$J$k$+$b$7$l$^$;$s!#B>$K$b2?$+$=$&$$$C$?$3$H$G$9!#\e(B
+
+Gnus \e$B$O$5$^$6$^$J@)8f;R\e(B @dfn{handlers} \e$B$rDj5A$9$k$3$H$K$h$C$F$=\e(B
+\e$B$N$h$&$J$3$H$r2DG=$K$7$^$9!#3F@)8f;R$O;0$D$NMWAG$+$i@.$j$^$9!#\e(B
+@var{\e$B4X?t\e(B}\e$B!"\e(B@var{\e$B;~4V\e(B}\e$B!"\e(B@var{\e$B6uE>\e(B} \e$B%Q%i%a!<%?$G$9!#\e(B
+
+\e$B0J2<$O\e(B Emacs \e$B$,2?$b$7$J$$6uE>>uBV$,;0==J,B3$$$?$H$-$K@\B3$r@ZCG\e(B
+\e$B$9$k@)8f;R$NNc$G$9!#\e(B
+
+@lisp
+(gnus-demon-close-connections nil 30)
+@end lisp
+
+\e$B0J2<$O\e(B Emacs \e$B$,2?$b$7$F$$$J$$$H$-!"0l;~4VKh$K\e(B PGP \e$B%X%C%@!<$rAv::\e(B
+\e$B$9$k@)8f;R$G$9!#\e(B
+
+@lisp
+(gnus-demon-scan-pgp 60 t)
+@end lisp
+
+\e$B$3$N\e(B @var{\e$B;~4V\e(B} \e$B%Q%i%a!<%?$H$=$7$F\e(B @var{\e$B6uE>\e(B} \e$B%Q%i%a!<%?$O!"4qL/$G$+$DAG\e(B
+\e$B@2$i$7$$J}K!$G0l=o$KF0:n$7$^$9!#4pK\E*$K$O!"\e(B@var{\e$B6uE>\e(B} \e$B$,\e(B @code{nil} \e$B$N\e(B
+\e$B;~$K$O$3$N4X?t$O\e(B @var{\e$B;~4V\e(B} \e$BJ,Kh$K8F$S=P$5$l$^$9!#\e(B
+
+\e$B$b$7\e(B @var{\e$B6uE>\e(B} \e$B$,\e(B @code{t} \e$B$G$"$l$P!"$3$N4X?t$O\e(B Emacs \e$B$,2?$b$7\e(B
+\e$B$F$$$J$$;~$K8B$j!"\e(B@var{\e$B;~4V\e(B} \e$BJ,8e$K8F$S=P$5$l$^$9!#0lC6\e(B Emacs \e$B$,\e(B
+\e$B$:$C$H6uE>>uBV$K$J$C$?8e$O!"$3$N4X?t$O\e(B @var{\e$B;~4V\e(B} \e$BJ,Kh$K8F$S=P$5\e(B
+\e$B$l$^$9!#\e(B
+
+@var{\e$B6uE>\e(B} \e$B$,?t$G\e(B @var{\e$B;~4V\e(B} \e$B$b?t$G$"$k>l9g!"$3$N4X?t$O!"\e(B Emacs 
+\e$B$N6uE>>uBV$,\e(B @var{\e$B6uE>\e(B} \e$BJ,B3$$$?;~$K8B$j!"\e(B@var{\e$B;~4V\e(B} \e$BJ,Kh$K8F$S\e(B
+\e$B=P$5$l$^$9!#\e(B
+
+@var{\e$B6uE>\e(B} \e$B$,?t$G\e(B @var{\e$B;~4V\e(B} \e$B$,\e(B @code{nil} \e$B$N>l9g!"$3$N4X?t$O!"\e(B
+Emacs \e$B$N6uE>>uBV$,\e(B @var{\e$B6uE>\e(B} \e$BJ,B3$/EY$K0lEY8F$S=P$5$l$^$9!#\e(B
+
+\e$B$=$7$F\e(B @var{\e$B;~4V\e(B} \e$B$,J8;zNs$N>l9g$O!"\e(B@samp{07:31} \e$B$N$h$&$J7A<0$G\e(B
+\e$B$J$1$l$P$J$i$:!"$3$N4X?t$OKhF|$=$N:"$N;~4V$K$J$k$H0lEY8F$S=P$5$l\e(B
+\e$B$^$9!#$b$A$m$s!"\e(B@var{\e$B6uE>\e(B} \e$B%Q%i%a!<%?$GF0:n$,JQ$o$j$^$9!#\e(B
+
+@vindex gnus-demon-timestep
+(\e$B$3$3$G\e(B ``\e$BJ,\e(B'' \e$B$H8@$C$?$H$-!"$=$l$O<B:]$K$O\e(B
+@code{gnus-demon-timestep} \e$BIC$N$3$H$G$9!#$3$l$O=i4|@_Dj$G$O\e(B 60\e$B$G\e(B
+\e$B$9!#$b$7$3$NJQ?t$rJQ99$9$k$H!"A4$F$N@)8f;R$N7W;~$K1F6A$rM?$($^$9!#\e(B)
+
+@vindex gnus-use-demon
+\e$B$b$C$H$b!"$3$l$iA4It$r1?E>$9$k$h$&$K@_Dj$9$k$K$O!"\e(B
+@code{gnus-use-demon} \e$B$r\e(B @code{t} \e$B$K@_Dj$7$J$-$c$$$1$J$$$s$@$1$I\e(B
+\e$B$M!#\e(B
+
+\e$B$H$$$&$o$1$G!"@)8f;R$rDI2C$7$?$1$l$P!"\e(B @file{.gnus} \e$B%U%!%$%k$K!"\e(B
+\e$B0J2<$N$h$&$J$b$N$r=q$/$3$H$,$G$-$^$9!#\e(B
+
+@findex gnus-demon-add-handler
+@lisp
+(gnus-demon-add-handler 'gnus-demon-close-connections 30 t)
+@end lisp
+
+@findex gnus-demon-add-nocem
+@findex gnus-demon-add-scanmail
+@findex gnus-demon-add-rescan
+@findex gnus-demon-add-scan-timestamps
+@findex gnus-demon-add-disconnection
+\e$B$3$N$?$a$N4{@=4X?t$,$$$/$D$+:n@.$5$l$F$$$^$9!#\e(B
+@code{gnus-demon-add-nocem}\e$B!"\e(B 
+@code{gnus-demon-add-disconnection}\e$B!"\e(B
+@code{gnus-demon-add-nntp-close-connection}\e$B!"\e(B
+@code{gnus-demon-add-scan-timestamps}\e$B!"\e(B 
+@code{gnus-demon-add-rescan}\e$B!"\e(B@code{gnus-demon-add-scanmail} \e$B$G\e(B
+\e$B$9!#$3$l$i$NG=NO$,M_$7$1$l$P!"C1$K$3$l$i$N4X?t$r\e(B @file{.gnus} \e$B$K\e(B
+\e$BF~$l$F$/$@$5$$!#\e(B
+
+@findex gnus-demon-init
+@findex gnus-demon-cancel
+@vindex gnus-demon-handlers
+\e$B$b$7\e(B @code{gnus-demon-handlers} \e$B$G@)8f;R$rD>@\DI2C$7$?>l9g$K$O!"\e(B
+\e$B$=$l$r8z$+$;$k$?$a$K\e(B @code{gnus-demon-init} \e$B$r<B9T$7$F$/$@$5$$!#\e(B
+\e$BA4$F$N%G!<%b%s$r<h$j>C$9$K$O!"\e(B@code{gnus-demon-cancel} \e$B4X?t$r;H\e(B
+\e$B$&$3$H$,$G$-$^$9!#\e(B
+
+\e$B%G!<%b%s$NDI2C$O!"$d$j$9$.$k$N$O$H$C$F$b$*9T57$N$h$/$J$$$3$H$G$9!#\e(B
+\e$BA4$F$N%5!<%P!<$+$iA4$F$N%K%e!<%9$H%a!<%k$rFsICKh$KD4$Y$^$o$94X?t\e(B
+\e$B$rIU$12C$($A$c$C$?$j$9$k$H!"$I$s$JN)GI$J%7%9%F%`$G$b4V0c$$$J$/$*\e(B
+\e$BJ'$$H"$K$7$F$7$^$$$^$9!#$=$&F0$/$s$@$b$s!#\e(B
+
+
+@node NoCeM
+@section NoCeM
+@cindex nocem
+@cindex spam
+
+\e$B%9%Q%`\e(B @dfn{Spam} \e$B$H$O!"F1$85-;v$r2?2s$b2?2s$b2?2s$bEj9F$9$k$3$H\e(B
+\e$B$G$9!#%9%Q%`$O0-$$$3$H$G$9!#%9%Q%`$O6'0-$G$9!#\e(B
+
+\e$B%9%Q%`$ODL>o0lF|$+$=$3$i$G!"$5$^$6$^$JH?%9%Q%`5!4X$+$i<h$j>C$7$5\e(B
+\e$B$l$^$9!#$3$l$i$N5!4X$ODL>o0l=o$K!"\e(B@dfn{NoCeM} \e$B%a%C%;!<%8$bAw?.$7\e(B
+\e$B$^$9!#\e(B@dfn{NoCeM} \e$B$O\e(B ``no see-'em'' (\e$BH`$i$r8+$?$/$J$$\e(B)\e$B$HH/2;$5$l!"\e(B
+\e$B0UL#$O$=$NL>A0$NDL$j$G$9\e(B --- \e$B$3$N%a%C%;!<%8$O!":a$rHH$7$F$$$k5-\e(B
+\e$B;v$r!"$D$^$j!">C$7$F$7$^$$$^$9!#\e(B
+
+\e$B$I$&$;$=$N5-;v$,<h$j>C$7$5$l$F$7$^$&$N$J$i!"$3$l$i\e(B NoCeM \e$B%a%C%;!<\e(B
+\e$B%8$O2?$K;H$o$l$k$N$G$7$g$&\e(B? \e$B$"$k%5%$%H$G$O<h$j>C$7%a%C%;!<%8$r0z\e(B
+\e$B$-<u$1$:!"$"$k%5%$%H$G$OFCDj$N?t?M$+$i$N<h$j>C$7%a%C%;!<%8$N$_$7\e(B
+\e$B$+0z$-<u$1$^$;$s!#$=$l$G!"$"$J$?$O\e(B NoCeM \e$B%a%C%;!<%8$r;H$$$?$/$J\e(B
+\e$B$k$+$b$7$l$J$$$o$1$G$9!#$3$l$i$O\e(B @samp{alt.nocem.misc} \e$B%K%e!<%9\e(B
+\e$B%0%k!<%W$GG[I[$5$l$F$$$^$9!#\e(B
+
+Gnus \e$B$O$3$N%0%k!<%W$N%a%C%;!<%8$r<+F0E*$KFI$_!"2r<a$9$k$3$H$,$G\e(B
+\e$B$-!"$3$l$G%9%Q%`$r>C$75n$j$^$9!#\e(B
+
+\e$B$b$A$m$s!"$3$l$i$r%+%9%?%^%$%:$9$k$?$a$NJQ?t$,$$$/$D$+$"$j$^$9!#\e(B
+
+@table @code
+@item gnus-use-nocem
+@vindex gnus-use-nocem
+\e$B$3$NJQ?t$r\e(B @code{t} \e$B$K@_Dj$9$k$3$H$G3hF0$r3+;O$5$;$^$9!#=i4|@_Dj\e(B
+\e$B$G$O\e(B @code{nil} \e$B$G$9!#\e(B
+
+@item gnus-nocem-groups
+@vindex gnus-nocem-groups
+Gnus \e$B$O$3$N%0%k!<%W%j%9%H$+$i\e(B NoCeM \e$B%a%C%;!<%8$rC5$7$^$9!#=i4|@_\e(B
+\e$BDjCM$O\e(B @code{("news.lists.filters" "news.admin.net-abuse.bulletins"
+"alt.nocem.misc" "news.admin.net-abuse.announce")} \e$B$G$9!#\e(B
+
+@item gnus-nocem-issuers
+@vindex gnus-nocem-issuers
+NoCeM \e$B%a%C%;!<%8$rH/9T$9$k?M$O$?$/$5$s$$$^$9!#$3$N%j%9%H$G$O!"C/\e(B
+\e$B$N8@$&$3$H$K=>$$$?$$$+$r;XDj$7$^$9!#=i4|@_DjCM$O\e(B @code{("Automoose-1"
+"rbraver@@ohww.norman.ok.us" "clewis@@ferret.ocunix.on.ca"
+"jem@@xpat.com" "snowhare@@xmission.com" "red@@redpoll.mrfs.oh.us
+(Richard E. Depew)")} \e$B$G$9!#H`$i$O$_$s$J!"N)GI$G9b7i$J;TL1$G$9!#\e(B
+
+\e$B$3$N%j%9%H$K4^$a$i$l$kM-L>$JH?%9%Q%`2H$O0J2<$G$9!#\e(B
+
+@table @samp
+@item clewis@@ferret.ocunix.on.ca;
+@cindex Chris Lewis
+Chris Lewis --- \e$B<gMW$J%+%J%@$NH?%9%Q%`2H!#$*$=$i$/C/$h$j$bB?$/!"\e(B
+\e$B%M%C%H%K%e!<%9$NMtMQ$r<h$j>C$7$F$$$^$9!#\e(B
+
+@item Automoose-1
+@cindex CancelMoose[tm]
+\e$B<+F01?E>$N\e(B CancelMoose[tm]\e$B!#\e(B CancelMoose[tm] \e$B$O%N%k%&%'!<?M$H$5\e(B
+\e$B$l!"\e(BNoCeM \e$B$rH/L@$7$??M$G$7$?!#\e(B
+
+@item jem@@xpat.com;
+@cindex Jem
+John Milburn --- \e$B4Z9q$NH?%9%Q%`2H!#:G6a$O$+$J$jK;$7$/$J$C$F$-$F\e(B
+\e$B$$$k$h$&$G$9!#\e(B
+
+@item red@@redpoll.mrfs.oh.us (Richard E. Depew)
+Richard E. Depew --- \e$B%"%a%j%+$NC1FHH?%9%Q%`2H!#<g$KHs%P%$%J%j%0\e(B
+\e$B%k!<%W$X$N%P%$%J%jEj9F$N<h$j>C$7$H!"\e(Bspew (\e$B5UN.5-;v\e(B) \e$B$r:o=|$7$F$$\e(B
+\e$B$^$9!#\e(B
+@end table
+
+\e$B$3$l$iA4$F$N?M!9$N\e(B NoCeM \e$B%a%C%;!<%8$KN10U$9$kI,MW$O$"$j$^$;$s\e(B --- \e$B8@$&$3\e(B
+\e$B$H$rJ9$-$?$$?M$@$1$G$$$$$s$G$9!#$^$?$=$N?M$+$i$N\e(B NoCeM\e$B%a%C%;!<%8A4$F$r<u\e(B
+\e$B$1F~$l$kI,MW$b$"$j$^$;$s!#\e(BNoCeM \e$B%a%C%;!<%8$K$O$=$l$>$l<oJL\e(B @dfn{type} \e$B%X%C\e(B
+\e$B%@!<$,$D$$$F$*$j!"$3$l$O$=$N%a%C%;!<%8$N87L)$JDj5A$rM?$($F$$$^$9\e(B(\e$BB?>/$O\e(B
+\e$B87L)$J!"DxEY$M!#$?$$$F$$$O>/$@$1$I\e(B)\e$B!#NI$/;H$o$l$k<oJL$K$O!"\e(B@samp{spam}\e$B!"\e(B 
+@samp{spew}\e$B!"\e(B @samp{mmf}\e$B!"\e(B@samp{binary}\e$B!"\e(B@samp{troll} \e$B$,$"$j$^$9!#$3$l$r\e(B
+\e$B;XDj$9$k$K$O!"%j%9%H$NCf$G\e(B @var{(\e$BH/9T<T\e(B \e$B>r7o\e(B ...)} \e$BMWAG$r;H$&I,MW$,$"$j\e(B
+\e$B$^$9!#3F>r7o$OJ8;zNs\e(B (\e$B;H$$$?$$<oJL$K%^%C%A$9$k@55,I=8=\e(B) \e$B$+!"$^$?$O\e(B 
+@code{(not \e$BJ8;zNs\e(B)} \e$B$H$$$&7A<0$N%j%9%H$G$9!#$3$N>l9g$O\e(B @var{\e$BJ8;zNs\e(B} \e$B$O;H\e(B
+\e$B$$$?$/$J$$<oJL$K%^%C%A$9$k@55,I=8=$G$9!#\e(B
+
+\e$BNc$($P!"\e(BChris Lewis \e$B$+$i$N\e(B NoCeM \e$B%a%C%;!<%8$G!"\e(B@samp{troll} \e$B%a%C\e(B
+\e$B%;!<%80J30$NA4$F$rM_$7$$>l9g$K$O!"\e(B
+
+@lisp
+("clewis@@ferret.ocunix.on.ca" ".*" (not "troll"))
+@end lisp
+
+\e$B0lJ}!"H`$N\e(B @samp{spam} \e$B$H\e(B @samp{spew} \e$B%a%C%;!<%80J30$O2?$b$7$?$/\e(B
+\e$B$J$1$l$P!"0J2<$N$h$&$K$G$-$^$9!#\e(B
+
+@lisp
+("clewis@@ferret.ocunix.on.ca" (not ".*") "spew" "spam")
+@end lisp
+
+\e$B$3$N;XDj$O:8$+$i1&$KE,MQ$5$l$^$9!#\e(B
+
+
+@item gnus-nocem-verifyer
+@vindex gnus-nocem-verifyer
+@findex mc-verify
+\e$B$3$l$O\e(B NoCeM \e$BH/9T<T$,C/$G$"$k$+$H8@$C$F$$$k$+$r>ZL@$9$k4X?t$G$J\e(B
+\e$B$/$F$O$J$j$^$;$s!#=i4|@_Dj$G$O\e(B @code{mc-verify} \e$B$G$"$j!"$3$l$O\e(B
+Mailcrypt \e$B4X?t$G$9!#$b$7$3$l$,Hs>o$KCY$/$F!"$"$J$?$,>ZL@7k2L$r5$\e(B
+\e$B$K$7$J$$\e(B (\e$B$3$l$O$?$V$s4m81$G$9\e(B) \e$B$N$G$"$l$P!"$3$NJQ?t$r\e(B
+@code{nil} \e$B$K$9$k$3$H$,$G$-$^$9!#\e(B
+
+\e$B$b$7=pL>:Q$_$N\e(B NoCeM \e$B%a%C%;!<%8$r>ZL@:Q$_!"L$=pL>$N%a%C%;!<%8$r\e(B
+\e$BL$>ZL@\e(B(\e$B$G$b$=$l$r;H$&\e(B)\e$B$H$7$?$$$N$J$i!"0J2<$N$h$&$K$9$k$3$H$,$G$-\e(B
+\e$B$^$9!#\e(B
+
+@lisp
+(setq gnus-nocem-verifyer 'my-gnus-mc-verify)
+
+(defun my-gnus-mc-verify ()
+  (not (eq 'forged
+           (ignore-errors
+             (if (mc-verify)
+                 t
+               'forged)))))
+@end lisp
+
+\e$B$^$"!"$3$l$O$?$V$s4m81$G$7$g$&$1$I$M!#\e(B
+
+@item gnus-nocem-directory
+@vindex gnus-nocem-directory
+\e$B$3$l$O\e(B gnus \e$B$,\e(B NoCeM \e$B%-%c%C%7%e%U%!%$%k$rJ]B8$9$k>l=j$G$9!#=i4|\e(B
+\e$B@_DjCM$O\e(B @file{~/News/NoCeM/} \e$B$G$9!#\e(B
+
+@item gnus-nocem-expiry-wait
+@vindex gnus-nocem-expiry-wait
+\e$B8E$$\e(B NoCeM \e$B9`L\$r%-%c%C%7%e$+$i>C$9$^$G$NF|?t!#=i4|@_DjCM$O\e(B 15
+\e$B$G$9!#$3$l$rC;$/$9$k$[$I\e(B gnus \e$B$OB.$/$J$j$^$9$,!"8E$$%9%Q%`$r8+$k\e(B
+\e$B$3$H$K$J$C$F$7$^$&$+$b$7$l$^$;$s!#\e(B
+
+@end table
+
+NoCeM \e$B$r;H$&$H!"$b$7$+$9$k$H%a%b%j6t$$$K$J$k$+$b$7$l$^$;$s!#$"$J\e(B
+\e$B$?$,$?$/$5$s$N@8$-$?%0%k!<%W\e(B (\e$B$D$^$j9XFI$"$k$$$OHs9XFI%0%k!<%W\e(B) 
+\e$B$r;}$C$F$$$k$N$J$i!"\e(BEmacs \e$B%W%m%;%9$OBg$-$/$J$C$F$7$^$&$G$7$g$&!#\e(B
+\e$B$b$7$3$l$,LdBj$G$"$l$P!"Hs9XFI$N%0%k!<%W$rA4It\e(B (\e$B$"$k$$$O$=$NB?$/\e(B
+\e$B$r\e(B) \e$B>C$75n$C$F$7$^$C$?J}$,NI$$$G$9\e(B (@pxref{Subscription
+Commands})\e$B!#\e(B
+
+
+@node Undo
+@section \e$B$d$jD>$7\e(B
+@cindex undo
+
+\e$B<B9T$7$?$3$H$N$d$jD>$7$,$G$-$k$H!"$H$F$bJXMx$G$9!#IaDL$N\e(B Emacs
+\e$B%P%C%U%!$G$O!"$3$l$O==J,4JC1$G$9\e(B --- \e$BC1$K\e(B @code{undo} \e$B%\%?%s$r2!\e(B
+\e$B$9$@$1$G$9!#$7$+$7\e(B gnus \e$B$N%P%C%U%!$G$O!"$3$l$O4JC1$G$O$"$j$^$;$s!#\e(B
+
+Gnus \e$B$,%P%C%U%!!<Fb$KI=<($7$F$$$k$b$N$O!"\e(Bgnus \e$B$K$H$C$F$OA4$/2?$N\e(B
+\e$B2ACM$b$"$j$^$;$s\e(B --- \e$B$3$l$O$_$s$J!"MxMQ<T$K4qNo$K8+$($k$h$&$K%G\e(B
+\e$B%6%$%s$5$l$F$$$k$?$@$N%G!<%?$J$N$G$9!#\e(B@kbd{C-k} \e$B$G%0%k!<%W%P%C%U%!\e(B
+\e$B$+$i%0%k!<%W$r>C5n$9$k$N$O!"$=$N9T$O>C$(5n$j$^$9$,!"$=$l$O<B:]$N\e(B
+\e$BF0:n\e(B --- \e$BLdBj$N%0%k!<%W$r\e(B gnus \e$B$NFbIt9=B$BN$+$i:o=|$9$k$3$H!"$N\e(B
+\e$BC1$J$kI{:nMQ$G$7$+$"$j$^$;$s!#$3$l$i$N$d$jD>$7$O!"DL>o$N\e(B Emacs
+\e$B$N\e(B @code{undo} \e$B4X?t$G$O9T$J$&$3$H$,$G$-$^$;$s!#\e(B
+
+Gnus \e$B$O!"MxMQ<T$,2?$r$9$k$+$r21$($F$*$-!"$=$NMxMQ<T$NF0:n$N5U$r\e(B
+\e$B9T$J$&F0:n$rDs6!$9$k$3$H$K$h$C$F!"$3$l$r2?$H$+5_:Q$7$h$&$H$7$^$9!#\e(B
+\e$B$=$7$FMxMQ<T$,\e(B @code{undo} \e$B%-!<$r2!$7$?$H$-!"\e(Bgnus \e$B$O$=$N0l$D<jA0\e(B
+\e$B$NF0:n$"$k$$$OF0:n72$N5U$N%3!<%I$r<B9T$7$^$9!#$7$+$7!"A4$F$NF0:n\e(B
+\e$B$,4JC1$K2D5U$G$"$k$o$1$G$O$J$$$N$G!"\e(Bgnus \e$B$O8=:_!"$d$jD>$72DG=$J\e(B
+\e$B%-!<4X?t$O6O$+$7$+Ds6!$7$F$$$^$;$s!#$3$l$i$O!"%0%k!<%W$N:o=|!"%0%k!<\e(B
+\e$B%W$NE=$jIU$1!"%0%k!<%W$N4{FI5-;v$N%j%9%H$NJQ99!"$=$l$@$1$J$s$G$9!#\e(B
+\e$B>-Mh$O$b$C$H4X?t$,DI2C$5$l$k$+$b$7$l$^$;$s$,!"4X?t$NDI2C$O$=$l$>\e(B
+\e$B$lJ]B8$9$k$Y$-%G!<%?$rA}$d$9$3$H$K$J$k$N$G!"\e(Bgnus \e$B$O7h$7$F40A4$d\e(B
+\e$B$jD>$72DG=$K$O$J$i$J$$$G$7$g$&!#\e(B
+
+@findex gnus-undo-mode
+@vindex gnus-use-undo
+@findex gnus-undo
+\e$B$d$jD>$75!G=$O\e(B @code{gnus-undo-mode} \e$B%^%$%J!<%b!<%I$K$h$C$FDs6!\e(B
+\e$B$5$l$^$9!#$3$l$O\e(B @code{gnus-use-undo} \e$B$,\e(B @code{nil} \e$B0J30$G$"$l$P\e(B
+\e$B;HMQ$5$l!"$3$l$,=i4|@_Dj$G$9!#\e(B@kbd{M-C-_} \e$B%-!<$,\e(B
+@code{gnus-undo} \e$BL?Na$r<B9T$7$^$9!#$3$l$ODL>o$N\e(B Emacs \e$B$N\e(B
+@code{undo} \e$BL?Na$K$A$g$C$H$@$1;w$F$$$k$H;W$o$l$k$G$7$g$&!#\e(B
+
+
+@node Moderation
+@section \e$B;J2qLr\e(B
+@cindex moderation
+
+\e$B$b$7$"$J$?$,;J2q<T\e(B (\e$B%b%G%l!<%?!<\e(B) \e$B$J$i$P!"\e(B@file{gnus-mdrtn.el} 
+\e$B%Q%C%1!<%8$r;H$&$3$H$,$G$-$^$9!#$3$l$OI8=`\e(B gnus \e$B%Q%C%1!<%8$K$O4^\e(B
+\e$B$^$l$^$;$s!#\e(B@samp{larsi@@gnus.org} \e$B$K!"$I$N%0%k!<%W$N;J2q$r9T$J\e(B
+\e$B$&$N$+$r=R$Y$?%a!<%k$r=q$$$F$/$@$5$$!#$=$&$9$l$P%3%T!<$r<j$KF~$l\e(B
+\e$B$i$l$^$9!#\e(B
+
+\e$B;J2q<TMQ%Q%C%1!<%8$O35N,%P%C%U%!$N%^%$%J!<%b!<%I$H$7$F<BAu$5$l$F\e(B
+\e$B$$$^$9!#\e(B
+
+@lisp
+(add-hook 'gnus-summary-mode-hook 'gnus-moderate)
+@end lisp
+
+\e$B$r$"$J$?$N\e(B @file{.gnus.el} \e$B%U%!%$%k$KF~$l$F$/$@$5$$!#\e(B
+
+\e$B$"$J$?$,\e(B @samp{rec.zoofle} \e$B$N;J2q<T$@$H$9$k$H!"$3$l$O0J2<$N$h$&\e(B
+\e$B$KF0:n$9$k$h$&$K$J$C$F$$$^$9!#\e(B
+
+@enumerate
+@item
+@samp{Newsgroups:.*rec.zoofle} \e$B$K%^%C%A$9$k<u?.%a!<%k$rJ,N%$7$^\e(B
+\e$B$9!#$3$l$OEj9F$5$l$h$&$H$7$F$$$k5-;v$rA4$F$"$k%a!<%k%0%k!<%W\e(B --- 
+\e$BNc$($P\e(B @samp{nnml:rec.zoofle} \e$B$KF~$l$^$9!#\e(B
+
+@item
+\e$B$"$J$?$O;~@^$3$N%0%k!<%W$KF~$j!"\e(B@kbd{e} (edit-and-post) \e$B$"$k$$$O\e(B
+@kbd{s} (just send unedited) \e$BL?Na$r;H$C$F5-;v$rEj9F$7$^$9!#\e(B
+
+@item
+@samp{rec.zoofle} \e$B%K%e!<%9%0%k!<%W$rFI$s$G$$$kESCf$G!"$b$7$"$J$?\e(B
+\e$B$,>5G'$7$F$$$J$$5-;v$r$r$?$^$?$^8+$D$1$?$H$7$?$i!"\e(B@kbd{c} \e$BL?Na$G\e(B
+\e$B<h$j>C$7$G$-$^$9!#\e(B
+@end enumerate
+
+\e$BFs$D$N%0%k!<%W$G;J2q<T%b!<%I$r;H$&$H$9$l$P!"$3$&$J$j$^$9!#\e(B
+
+@lisp
+(setq gnus-moderated-list
+      "^nnml:rec.zoofle$\\|^rec.zoofle$")
+@end lisp
+
+
+@node XEmacs Enhancements
+@section XEmacs \e$B3HD%\e(B
+@cindex XEmacs
+
+XEmacs \e$B$O3($d$=$NB>$N$b$N$rI=<($9$k$3$H$,$G$-$k$N$G!"\e(Bgnus \e$B$O$3$l\e(B
+\e$B$rMxMQ$9$k$3$H$K$7$^$9!#\e(B
+
+@menu
+* Picons::    \e$B$"$J$?$,FI$s$G$$$k$b$N$N3($rI=<($9$kJ}K!!#\e(B
+* Smileys::   \e$BI=<($5$l$k$Y$/@8$^$l$?9,$;$=$&$J4i$rI=<($9$kJ}K!!#\e(B
+* Toolbar::   \e$B%/%j%C%/1n!#\e(B
+* XVarious::  \e$B$=$NB>$N\e(B XEmacs \e$B$G\e(B Gnus \e$B$JJQ?t!#\e(B
+@end menu
+
+
+@node Picons
+@subsection Picons
+
+@iftex
+@iflatex
+\include{picons}
+@end iflatex
+@end iftex
+
+\e$B$=$l$G!D!"$"$J$?$O$3$N%K%e!<%9%j!<%@!<$r$5$i$K$b$C$HCY$/$7$?$$$C\e(B
+\e$B$F$o$1$@$M\e(B! \e$B$3$l$O$=$&$9$k$N$K$T$C$?$j$JJ}K!$G$9!#$5$i$K$3$l$O!"\e(B
+\e$B$"$J$?$,%K%e!<%9$rFI$s$G$$$k$s$@$H$$$&$3$H$r!"$"$J$?$N8*1[$7$K8+\e(B
+\e$B$D$a$F$$$k?M$K0u>]$E$1$k$?$a$NAG@2$i$7$$J}K!$G$b$"$j$^$9!#\e(B
+
+@menu
+* Picon Basics::           picon \e$B$H$O2?$G!"$I$&$d$C$F<j$KF~$l$k$N$+!#\e(B
+* Picon Requirements::     XEmacs \e$B$r;H$C$F$J$1$l$P$3$3$+$i$OFI$^$J$$$G!#\e(B
+* Easy Picons::            picon \e$B$NI=<(\e(B --- \e$B3Z$JJ}K!!#\e(B
+* Hard Picons::            \e$BK\Mh$9$Y$-$3$H!#2?$+$r3X$V$3$H$,$G$-$k$@$m$&!#\e(B
+* Picon Useless Configuration:: \e$B$=$NB>$N$V$C2u$7$?$j$R$M$C$?$j$$$8$C$?$jM7$s$@$j$9$kJQ?t!#\e(B
+@end menu
+
+
+@node Picon Basics
+@subsubsection Picon \e$B$N4pAC\e(B
+
+Picon \e$B$H$O$J$s$G$7$g$&\e(B? Picons \e$B%&%'%V%5%$%H$+$iD>@\0zMQ$7$^$7$g$&!#\e(B
+
+@iftex
+@iflatex
+\margindex{}
+@end iflatex
+@end iftex
+
+@quotation
+@dfn{Picon} \e$B$H$O!"\e(B``\e$B8D?M%"%$%3%s\e(B (personal icons)'' \e$B$NN,$G$9!#$3\e(B
+\e$B$l$O!"%M%C%H>e$NMxMQ<T$d%I%a%$%s$rI=8=$9$k$N$K;H$o$l$k$?$a$N>.$5\e(B
+\e$B$J2hA|$G!"%G!<%?%Y!<%9$r;}$?$;$F!"$"$kEE;R%a!<%k%"%I%l%9$,$"$C$?\e(B
+\e$B$i!"$=$l$KE,@Z$J2hA|$r8+$D$1$i$l$k$h$&$K$7$F$*$/$b$N$G$9!#MxMQ<T\e(B
+\e$B$H%I%a%$%s0J30$K$b!"\e(BUsenet \e$B%K%e!<%9%0%k!<%W$dE75$M=Js$N$?$a$N\e(B
+picon \e$B%G!<%?%Y!<%9$,$"$j$^$9!#\e(Bpicon \e$B$OGr9u$N\e(B @code{XBM} \e$B7A<0$G$b\e(B
+\e$B%+%i!<$N\e(B @code{XPM} \e$B7A<0$G$b\e(B @code{GIF} \e$B7A<0$G$b9=$$$^$;$s!#\e(B
+@end quotation
+
+@vindex gnus-picons-piconsearch-url
+\e$B$"$J$?$,%$%s%?!<%M%C%H$X>o;~@\B3$7$F$$$k$N$J$i$P!"\e(B
+@code{gnus-picons-piconsearch-url} \e$B$KJ8;zNs\e(B @*
+@file{http://www.cs.indiana.edu/picons/search.html} \e$B$r@_Dj$9$k$3\e(B
+\e$B$H$G!"\e(BSteve Kinzler \e$B$N\e(B picon \e$B8!:w%(%s%8%s$r;H$&$3$H$,$G$-$^$9!#\e(B
+
+@vindex gnus-picons-database
+\e$B$=$&$G$J$1$l$P!"H`$N%G!<%?%Y!<%9$r<j85$KJ#@=$9$kI,MW$,$"$j$^$9!#\e(Bpicon \e$B%G!<\e(B
+\e$B%?%Y!<%9$NF~<j$H%$%s%9%H!<%k$N<j=g$O!"%&%'%V%V%i%&%6!<$G\e(B @*
+@file{http://www.cs.indiana.edu/picons/ftp/index.html} \e$B$K9T$C$F$_$F$/$@\e(B
+\e$B$5$$!#\e(BGnus \e$B$O\e(B picons \e$B$,\e(B @code{gnus-picons-database} \e$B$G<($5$l$k>l=j$K%$%s\e(B
+\e$B%9%H!<%k$7$F$"$k$b$N$H4|BT$7$^$9!#\e(B
+
+
+@node Picon Requirements
+@subsubsection Picon \e$B$NF0:n>r7o\e(B
+
+Gnus \e$B$K\e(B picon \e$B$rI=<($5$;$k$K$O!"\e(BXEmacs 19.13 \e$B$+$=$l0J9_$r<B9T$7\e(B
+\e$B$F$$$J$1$l$P$J$j$^$;$s!#B>$NHG$N\e(B Emacs \e$B$G$O$I$l$b$^$@2hA|$rI=<(\e(B
+\e$B$G$-$J$$$+$i$G$9!#\e(B
+
+\e$B$5$i$K!"\e(B@code{x} \e$B%5%]!<%HIU$-$G\e(B XEmacs \e$B$r%3%s%Q%$%k$7$F$$$J$/$F\e(B
+\e$B$O$J$j$^$;$s!#Gr9u$h$j$b$b$C$H4qNo$J?'IU$-$N\e(B picon \e$B$rI=<($9$k$?\e(B
+\e$B$a$K$O!"\e(B@code{xpm} \e$B$+\e(B @code{gif} \e$B$I$A$i$+$r\e(B XEmacs \e$B$H0l=o$K%3%s\e(B
+\e$B%Q%$%k$7$F$$$kI,MW$b$"$j$^$9!#\e(B
+
+@vindex gnus-picons-convert-x-face
+@code{X-Face} \e$B%X%C%@!<$N4i$rI=<($7$?$$$N$J$i!"\e(BXEmacs \e$B$r\e(B
+@code{xface} \e$B%5%]!<%HIU$-$G%3%s%Q%$%k$7$J$1$l$P$J$j$^$;$s!#$=$&\e(B
+\e$B$G$J$1$l$P!"\e(B@code{netpbm} \e$B%f!<%F%#%j%F%#$r%$%s%9%H!<%k$7$F$*$/$+!"\e(B
+\e$B$"$k$$$OB>$N2?$+$r;H$&$h$&$K\e(B @code{gnus-picons-convert-x-face}
+\e$BJQ?t$r$$$8$/$C$F$/$@$5$$!#\e(B
+
+
+@node Easy Picons
+@subsubsection \e$B3Z!9\e(B Picons
+
+picon \e$BI=<($rM-8z$K$9$k$K$O!"C1$K0J2<$N9T$r\e(B @file{~/.gnus} \e$B%U%!%$\e(B
+\e$B%k$KF~$l$F!"\e(Bgnus \e$B$r5/F0$7$F$/$@$5$$!#\e(B
+
+@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)
+@end lisp
+
+@code{gnus-picons-database} \e$B$,\e(B picon \e$B%G!<%?%Y!<%9$,4^$^$l$F$$$k\e(B
+\e$B%G%#%l%/%H%j$r;X$7$F$$$k$3$H$r3NG'$7$F$/$@$5$$!#\e(B
+
+\e$B$=$NBe$o$j$K\e(B Web \e$B>e$N\e(B picon \e$B8!:w%(%s%8%s$r;H$$$?$1$l$P!"$3$l$rDI\e(B
+\e$B2C$7$^$9!#\e(B
+
+@lisp
+(setq gnus-picons-piconsearch-url 
+      "http://www.cs.indiana.edu:800/piconsearch")
+@end lisp
+
+
+@node Hard Picons
+@subsubsection \e$BFq2r\e(B Picons
+
+@iftex
+@iflatex
+\margindex{}
+@end iflatex
+@end iftex
+
+Gnus \e$B$O!"%0%k!<%W$d5-;v$KF~$C$?$j=P$?$j$9$k$N$K=>$C$F\e(B picon \e$B$rI=\e(B
+\e$B<($9$k$3$H$,$G$-$^$9!#\e(BGnus \e$B$O\e(B picon \e$B%G!<%?%Y!<%9$N;0$D$N>O$H$I$&\e(B
+\e$BAj8_:nMQ$9$l$P$h$$$+$rCN$C$F$$$^$9!#$9$J$o$A!"\e(Bgnus \e$B$O%K%e!<%9%0\e(B
+\e$B%k!<%W$N3(!"Cx<T$N4i$N3(!"Cx<T$N%I%a%$%s$N\e(B picon \e$B$rI=<($9$k$3$H\e(B
+\e$B$,$G$-$^$9!#$3$N5!G=$rM-8z$K$9$k$K$O!"\e(Bpicon \e$B$r$I$3$+$i;}$C$F$/$k\e(B
+\e$B$+!"$=$7$F$I$3$KI=<($9$k$+$rA*Br$9$kI,MW$,$"$j$^$9!#\e(B
+
+@table @code
+
+@item gnus-picons-database
+@vindex gnus-picons-database
+picon \e$B%G!<%?%Y!<%9$N>l=j!#\e(B@file{news}\e$B!"\e(B @file{domains}\e$B!"\e(B
+@file{users} (\e$B$J$I$J$I\e(B) \e$B$N%5%V%G%#%l%/%H%j!<$,4^$^$l$F$$$k%G%#%l\e(B
+\e$B%/%H%j!<$r;X$7$F$$$J$1$l$P$J$j$^$;$s!#$3$l$O\e(B
+@code{gnus-picons-piconsearch-url} \e$B$,\e(B @code{nil} \e$B$G$"$k$H$-$N$_\e(B
+\e$B;HMQ$5$l$^$9!#=i4|@_DjCM$O\e(B @file{/usr/local/faces/} \e$B$G$9!#\e(B
+
+@item gnus-picons-piconsearch-url
+@vindex gnus-picons-piconsearch-url
+Web \e$B>e$N\e(B picon \e$B8!:w%(%s%8%s$N\e(B URL\e$B!#8=:_CN$i$l$F$$$kM#0l$N%(%s%8\e(B
+\e$B%s$O\e(B @file{http://www.cs.indiana.edu:800/piconsearch} \e$B$G$9!#%M%C\e(B
+\e$B%H%o!<%/CY1d$r2sHr$9$k$?$a$K\e(B icon \e$B$O%P%C%/%0%i%&%s%I$G<hF@$5$l$^\e(B
+\e$B$9!#$b$7$3$l$,\e(B @code{nil} (\e$B=i4|@_DjCM\e(B) \e$B$G$"$l$P!"\e(Bpicon \e$B$O\e(B
+@code{gnus-picons-database} \e$B$G<($5$l$k%m!<%+%k$N%G!<%?%Y!<%9$+$i\e(B
+\e$B<hF@$5$l$^$9!#\e(B
+
+@item gnus-picons-display-where
+@vindex gnus-picons-display-where
+picon \e$B2hA|$,I=<($5$l$k>l=j!#$3$l$O=i4|@_Dj$G$O\e(B @code{picons} \e$B$G\e(B
+\e$B$9\e(B (\e$B$3$l$O=i4|@_Dj$G\e(B @samp{*Picons*} \e$B%P%C%U%!$K0LCV$7$^$9\e(B)\e$B!#B>$N\e(B
+\e$BM-8z$J>l=j$H$7$F$O\e(B @code{article}\e$B!"\e(B @code{summary}\e$B!"$"$k$$$O\e(B
+@samp{*scratch*} \e$B$@$m$&$HCN$C$?$3$H$G$O$"$j$^$;$s!#$?$@$=$N%P%C\e(B
+\e$B%U%!$rI8=`$N\e(B gnus \e$BAkG[CV=hM}\e(B --- @pxref{Windows Configuration}\e$B$K\e(B
+\e$B$h$C$F8+$($k$h$&$K$7$F$*$/$3$H$r3NG'$7$F$/$@$5$$!#\e(B
+
+@item gnus-picons-group-excluded-groups
+@vindex gnus-picons-group-excluded-groups
+\e$B$3$N@55,I=8=$K%^%C%A$9$k%0%k!<%W$G$O$=$N%0%k!<%W%"%$%3%s$rI=<($5\e(B
+\e$B$;$^$;$s!#\e(B
+
+@end table
+
+\e$BCm0U\e(B: \e$B$b$7\e(B @code{gnus-use-picons} \e$B$r\e(B @code{t} \e$B$K@_Dj$9$k$H!"AkG[\e(B
+\e$BCV$K\e(B @code{picons} \e$B%P%C%U%!$r4^$a$k$h$&$K@_Dj$5$l$^$9!#\e(B
+
+\e$B$5$F!"$3$l$i$r7hDj$7$?8e$K$O!"$3$l$i$N3($,@5$7$$;~$KI=<($5$l$k$h\e(B
+\e$B$&$K!"0J2<$N4X?t$rE,@Z$J%U%C%/$KDI2C$9$kI,MW$,$"$j$^$9!#\e(B
+
+@vindex gnus-article-display-hook
+@vindex gnus-picons-display-where
+@table @code
+@item gnus-article-display-picons
+@findex gnus-article-display-picons
+\e$BCx<T$HCx<T$N%I%a%$%s$N\e(B picon \e$B$rC5$7!"\e(B
+@code{gnus-picons-display-where} \e$B%P%C%U%!$KI=<($7$^$9!#\e(B
+@code{gnus-article-display-hook} \e$B$KDI2C$7$F$/$@$5$$!#\e(B
+
+@item gnus-picons-article-display-x-face
+@findex gnus-article-display-picons
+X-Face \e$B%X%C%@!<$,$"$l$P$=$l$rI|9f2=$7I=<($7$^$9!#$3$N4X?t$O\e(B
+@code{gnus-article-display-hook} \e$B$KDI2C$7$F$/$@$5$$!#\e(B
+
+@end table
+
+\e$BCm0U\e(B: \e$B$3$l$i$O%U%C%/$KDI2C$7$J$/$F$O$J$i$J$$$N$G!"\e(B
+@code{add-hook} \e$B$NDI2C%U%i%0$K\e(B 't' \e$B$r;XDj$9$k$N$rK:$l$J$$$G$/$@$5$$!#\e(B
+
+@lisp
+(add-hook 'gnus-article-display-hook 'gnus-article-display-picons t)
+@end lisp
+
+
+@node Picon Useless Configuration
+@subsubsection \e$BL50UL#$J\e(B Picon \e$B@_Dj\e(B
+
+@iftex
+@iflatex
+\margindex{}
+@end iflatex
+@end iftex
+
+\e$B0J2<$NJQ?t$O!"$5$i$K$3$l$i$r$I$&<B9T$9$k$+!"$I$3$KG[CV$9$k$+!"$=\e(B
+\e$B$NB>Lr$K$bN)$?$J$$$I$&$G$b$h$$$3$H$r@)8f$G$-$k$h$&$K$7$^$9!#\e(B
+
+@table @code
+
+@item gnus-picons-news-directories
+@vindex gnus-picons-news-directories
+@code{gnus-picons-database} \e$B$+$i%K%e!<%9%0%k!<%W%U%'%$%9$rC5$9$?\e(B
+\e$B$a$N%5%V%G%#%l%/%H%j!<$N%j%9%H!#\e(B@code{("news")} \e$B$,=i4|@_DjCM$G$9!#\e(B
+
+@item gnus-picons-user-directories
+@vindex gnus-picons-user-directories
+@code{gnus-picons-database} \e$B$+$iMxMQ<T%U%'%$%9$rC5$9$?$a$N%5%V%G%#\e(B
+\e$B%l%/%H%j!<$N%j%9%H!#\e(B @code{("local" "users" "usenix" "misc")} \e$B$,\e(B
+\e$B=i4|@_DjCM$G$9!#\e(B
+
+@item gnus-picons-domain-directories
+@vindex gnus-picons-domain-directories
+@code{gnus-picons-database} \e$B$+$i%I%a%$%sL>%U%'%$%9$rC5$9$?$a$N%5\e(B
+\e$B%V%G%#%l%/%H%j!<$N%j%9%H!#=i4|@_DjCM$O\e(B @code{("domains")} \e$B$G$9!#\e(B
+\e$B$3$N%j%9%H$K\e(B @samp{"unknown"} \e$B$rDI2C$7$F$*$-$?$/$J$k?M$b$$$k$G$7$g\e(B
+\e$B$&!#\e(B
+
+@item gnus-picons-convert-x-face
+@vindex gnus-picons-convert-x-face
+\e$B$b$7\e(B XEmacs \e$B$K\e(B @code{xface} \e$B%5%]!<%H$,AH$_9~$^$l$F$$$J$1$l$P!"$3\e(B
+\e$B$NL?Na$,\e(B @code{X-Face} \e$B%X%C%@!<$r\e(B X \e$B%S%C%H%^%C%W\e(B (@code{xbm}) \e$B$K\e(B
+\e$BJQ49$9$k$N$K;HMQ$5$l$^$9!#=i4|@_DjCM$O\e(B @code{(format "@{ echo '/* Width=48,
+Height=48 */'; uncompface; @} | icontopbm | pbmtoxbm > %s"
+gnus-picons-x-face-file-name)} \e$B$G$9!#\e(B
+
+@item gnus-picons-x-face-file-name
+@vindex gnus-picons-x-face-file-name
+@code{X-Face} \e$B%S%C%H%^%C%W$r3JG<$7$F$*$/0l;~%U%!%$%k$NL>A0!#=i4|\e(B
+\e$B@_DjCM$O\e(B @code{(format "/tmp/picon-xface.%s.xbm"
+(user-login-name))}\e$B!#\e(B 
+
+@item gnus-picons-has-modeline-p
+@vindex gnus-picons-has-modeline-p
+@code{gnus-picons-display-where} \e$B$r\e(B @code{picons} \e$B$K@_Dj$7$F$7$^\e(B
+\e$B$&$H!"\e(BXEmacs \e$B$N%U%l!<%`$O$a$A$c$a$A$c$K$J$C$F$7$^$&$G$7$g$&!#$3\e(B
+\e$B$l$rB?>/$J$j$H$b7Z8:$9$k$K$O!"\e(B@code{gnus-picons-has-modeline-p} 
+\e$B$r\e(B @code{nil} \e$B$K@_Dj$7$F$/$@$5$$!#$3$l$O\e(B picon \e$B%P%C%U%!$+$i%b!<\e(B
+\e$B%I9T$r<h$j=|$-$^$9!#$3$l$O\e(B @code{gnus-picons-display-where} \e$B$,\e(B
+@code{picons} \e$B$N$H$-$N$_0UL#$,$"$j$^$9!#\e(B
+
+@item gnus-picons-refresh-before-display
+@vindex gnus-picons-refresh-before-display
+nil \e$B0J30$G$"$l$P!"\e(Bpicon \e$B$r7W;;$9$kA0$K5-;v%P%C%U%!$rI=<(!#\e(B
+\e$B=i4|@_DjCM$O\e(B @code{nil} \e$B$G$9!#\e(B
+
+@item gnus-picons-display-as-address
+@vindex gnus-picons-display-as-address
+@code{t} \e$B$G$"$l$P3($H0l=o$KJ8;z$GEE;R%a!<%k%"%I%l%9$rI=<(!#\e(B
+\e$B=i4|@_DjCM$O\e(B @code{t} \e$B$G$9!#\e(B
+
+@item gnus-picons-file-suffixes
+@vindex gnus-picons-file-suffixes
+picon \e$B%U%!%$%kL>$H$7$F;n$7$F$_$k3HD%;R$N=g=x%j%9%H!#=i4|@_DjCM$O\e(B 
+@code{("xpm" "gif" "xbm")} \e$B$+$i\e(B XEmacs \e$B$KAH$_9~$^$l$F$$$J$$$b$N\e(B
+\e$B$r0z$$$?$b$N$G$9!#\e(B
+
+@item gnus-picons-display-article-move-p
+@vindex gnus-picons-display-article-move-p
+picon \e$B$rI=<($7$F$$$k$H$-$K%+!<%=%k0LCV$r:G=i$N6u9T$^$GF0$+$9$+$I\e(B
+\e$B$&$+$r;XDj!#$3$l$O\e(B @code{gnus-picons-display-where} \e$B$NCM$,\e(B
+@code{article} \e$B$G$"$k$H$-$N$_8z2L$,$"$j$^$9!#\e(B
+
+@item gnus-picons-clear-cache-on-shutdown
+@vindex gnus-picons-clear-cache-on-shutdown
+Gnus \e$B$r=*N;$9$k$H$-$K\e(B picon \e$B%-%c%C%7%e$r>C$75n$k$+$I$&$+!#\e(BGnus
+\e$B$O<B9TCf$K8+$D$1$?\e(B picon \e$B$rA4$F%-%c%C%7%e$7$^$9!#$3$l$O8!:w=hM}\e(B
+\e$B$N;~4V$rB?>/@aLs$G$-$^$9$,!"%a%b%j$r$$$/$i$+?)$$$^$9!#$b$7$3$NJQ\e(B
+\e$B?t$r\e(B @code{nil} \e$B$K@_Dj$9$l$P!"\e(Bgnus \e$B$O$=$N%-%c%C%7%e$r7h$7$F>C$7\e(B
+\e$B$^$;$s!#$=$l$r>C$75n$k$K$O<j$G\e(B @code{gnus-picons-clear-cache} \e$B$r\e(B
+\e$B8F$S=P$9I,MW$,$"$j$^$9!#\e(B@code{nil} \e$B$G$J$1$l$P%-%c%C%7%e$O\e(B gnus
+\e$B$,=*N;$9$k$?$S$K>C5n$5$l$^$9!#=i4|@_DjCM$O\e(B @code{t} \e$B$G$9!#\e(B
+
+@iftex
+@iflatex
+\margindex{}
+@end iflatex
+@end iftex
+
+@end table
+
+@node Smileys
+@subsection \e$B%9%^%$%j!<\e(B
+@cindex smileys
+
+@iftex
+@iflatex
+\gnusfig{-3cm}{0.5cm}{\epsfig{figure=tmp/BigFace.ps,height=20cm}}
+\input{smiley}
+@end iflatex
+@end iftex
+
+\e$B%9%^%$%j!<\e(B @dfn{smiley} \e$B$O\e(B gnus \e$B$H$OJL$N%Q%C%1!<%8$G$9$,!"%9%^%$\e(B
+\e$B%j!<$r;H$C$F$$$k%Q%C%1!<%8$O8=:_\e(B gnus \e$B$@$1$G$9$N$G!"$3$3$G@bL@$7\e(B
+\e$B$^$9!#\e(B
+
+\e$B0l8@$G8@$($P\e(B --- gnus \e$B$G%9%^%$%j!<$r;H$&$K$O!"0J2<$r\e(B
+@file{.gnus.el} \e$B$U$!$$$k$K=q$$$F$/$@$5$$!#\e(B
+
+@lisp
+(add-hook 'gnus-article-display-hook 'gnus-smiley-display t)
+@end lisp
+
+\e$B%9%^%$%j!<$O!"J8;z$N4i%^!<%/\e(B --- @samp{:-)}\e$B!"\e(B@samp{:-=}\e$B!"\e(B
+@samp{:-(} \e$B$J$I$H$$$C$?$b$N\e(B --- \e$B$r3($KBP1~$5$;!"J8;z$N4i%^!<%/$N\e(B
+\e$BBe$o$j$K$=$N3($rI=<($7$^$9!#$3$NJQ49$OJ8;z$K%^%C%A$9$k@55,I=8=$H\e(B
+\e$B$=$l$N%U%!%$%kL>$X$NBP1~$N%j%9%H$G@)8f$5$l$^$9!#\e(B
+
+@vindex smiley-nosey-regexp-alist
+@vindex smiley-deformed-regexp-alist
+\e$B%9%^%$%j!<$O=i4|@_Dj$G$OFs$D$NJQ49O"A[%j%9%H$NNc$rDs6!$7$F$$$^$9!#\e(B
+@code{smiley-deformed-regexp-alist} (@samp{:)}\e$B!"\e(B @samp{:(} \e$B$J$I\e(B
+\e$B$K%^%C%A$9$k\e(B) \e$B$H!"\e(B@code{smiley-nosey-regexp-alist} (@samp{:-)}\e$B!"\e(B
+@samp{:-(} \e$B$J$I$K%^%C%A$9$k\e(B) \e$B$G$9!#\e(B
+
+\e$B;HMQ$5$l$kO"A[%j%9%H$O\e(B @code{smiley-regexp-alist} \e$BJQ?t$G;XDj$5$l\e(B
+\e$B$^$9!#$3$N=i4|@_DjCM$O\e(B @code{smiley-deformed-regexp-alist} \e$B$G$9!#\e(B
+
+\e$B3FMWAG$N:G=i$N9`L\$O%^%C%A$5$;$?$$@55,I=8=$G!"FsHVL\$NMWAG$O3($G\e(B
+\e$BCV$-49$($?$$%0%k!<%W$K%^%C%A$9$k@55,I=8=!"$=$7$F;0HVL\$NMWAG$OI=\e(B
+\e$B<($5$;$?$$%U%!%$%k$NL>A0$G$9!#\e(B
+
+\e$B0J2<$NJQ?t$O!"%9%^%$%j!<$,$3$l$i$N%U%!%$%k$rC5$9>l=j!"$"$k$$$O$I\e(B
+\e$B$N?'$r;H$&$+$H!"$=$NB>$N$b$N$r%+%9%?%^%$%:$7$^$9!#\e(B
+
+@table @code
+
+@item smiley-data-directory
+@vindex smiley-data-directory
+\e$B%9%^%$%j!<$,4i%U%!%$%k$rC5$9>l=j!#\e(B
+
+@item smiley-flesh-color
+@vindex smiley-flesh-color
+\e$BH)$N?'!#=i4|@_DjCM$O!"?M<o:9JLE*$@$1$I\e(B @samp{yellow} \e$B$G$9!#\e(B
+
+@item smiley-features-color
+@vindex smiley-features-color
+\e$B%U%'%$%9$N5!G=$N?'!#=i4|@_DjCM$O\e(B @samp{black} \e$B$G$9!#\e(B
+
+@item smiley-tongue-color
+@vindex smiley-tongue-color
+\e$B@e$N?'!#=i4|@_DjCM$O\e(B @samp{red} \e$B$G$9!#\e(B
+
+@item smiley-circle-color
+@vindex smiley-circle-color
+\e$B4i$N<~$j$N4]$N?'!#=i4|@_DjCM$O\e(B @samp{black} \e$B$G$9!#\e(B
+
+@item smiley-mouse-face
+@vindex smiley-mouse-face
+\e$B%^%&%9$G6/D4I=<($7$?$H$-$N4i!#\e(B
+
+@end table
+
+
+@node Toolbar
+@subsection \e$B%D!<%k%P!<\e(B
+
+@table @code
+
+@iftex
+@iflatex
+\margindex{}
+@end iflatex
+@end iftex
+
+@item gnus-use-toolbar
+@vindex gnus-use-toolbar
+@code{nil} \e$B$J$i$P%D!<%k%P!<$rI=<($7$J$$!#\e(B@code{nil} \e$B0J30$N>l9g$O!"\e(B
+@code{default-toolbar}\e$B!"\e(B@code{top-toolbar}\e$B!"\e(B
+@code{bottom-toolbar}\e$B!"\e(B@code{right-toolbar}\e$B!"\e(B@code{left-toolbar}
+\e$B$N$I$l$+$G$J$/$F$O$J$j$^$;$s!#\e(B
+
+@item gnus-group-toolbar
+@vindex gnus-group-toolbar
+\e$B%0%k!<%W%P%C%U%!Fb$N%D!<%k%P!<!#\e(B
+
+@item gnus-summary-toolbar
+@vindex gnus-summary-toolbar
+\e$B35N,%P%C%U%!Fb$N%D!<%k%P!<!#\e(B
+
+@item gnus-summary-mail-toolbar
+@vindex gnus-summary-mail-toolbar
+\e$B%a!<%k%0%k!<%W$N35N,%P%C%U%!Fb$N%D!<%k%P!<!#\e(B
+
+@end table
+
+
+@node XVarious
+@subsection \e$B$5$^$6$^$J\e(B XEmacs \e$BJQ?t\e(B
+
+@table @code
+@item gnus-xmas-glyph-directory
+@vindex gnus-xmas-glyph-directory
+\e$B$3$l$O\e(B gnus \e$B$,3($rC5$9>l=j$G$9!#\e(BGnus \e$B$ODL>o$3$N%G%#%l%/%H%j$r<+\e(B
+\e$BF08!=P$7$^$9$,!"$b$7I8=`E*$G$J$$%G%#%l%/%H%j!<9=B$$r;}$C$F$$$k>l\e(B
+\e$B9g$O!"$3$l$r<jF0$G@_Dj$9$k$3$H$,$G$-$^$9!#\e(B
+
+@item gnus-xmas-logo-color-alist
+@vindex gnus-xmas-logo-color-alist
+\e$B$3$l$OO"A[%j%9%H$G!"%-!<$O<oJL%7%s%\%k!"CM$O%?%$%H%kJG3(J8;z$NA0\e(B
+\e$BLL?'$HGX7J?'$G$9!#\e(B
+
+@item gnus-xmas-logo-color-style
+@vindex gnus-xmas-logo-color-style
+\e$B$3$l$OA05-$NO"A[%j%9%H$G?'$r8!:w$9$k$N$K;H$o$l$k%-!<$G$9!#M-8z$J\e(B
+\e$BCM$K$O\e(B @code{flame}\e$B!"\e(B @code{pine}\e$B!"\e(B @code{moss}\e$B!"\e(B@code{irish}\e$B!"\e(B 
+@code{sky}\e$B!"\e(B @code{tin}\e$B!"\e(B @code{velvet}\e$B!"\e(B @code{grape}\e$B!"\e(B
+@code{labia}\e$B!"\e(B @code{berry}\e$B!"\e(B @code{neutral}\e$B!"\e(B@code{september}
+\e$B$,$"$j$^$9!#\e(B
+
+
+@item gnus-xmas-modeline-glyph
+@vindex gnus-xmas-modeline-glyph
+\e$BA4$F$N\e(B gnus \e$B%b!<%I9T$GI=<($5$l$k3(J8;z!#$3$l$O=i4|@_Dj$G$O$A$$$5\e(B
+\e$B$J%L!<\e(B (gnu) \e$B$NF,$G$9!#\e(B
+
+@iftex
+@iflatex
+\margindex{}
+@end iflatex
+@end iftex
+
+@end table
+
+
+
+
+@node Fuzzy Matching
+@section \e$B%U%!%8!<$J0lCW\e(B
+@cindex fuzzy matching
+
+Gnus \e$B$O!"%9%3%"IU$1!"%9%l%C%I$N7A@.!"%9%l%C%IHf3S$J$I$r9T$&$H$-\e(B
+\e$B$K!"\e(B@code{Subject} \e$B9T$N%U%!%8!<$J0lCW\e(B @dfn{fuzzy matching} \e$BJ}K!\e(B
+\e$B$rDs6!$7$F$$$^$9!#\e(B
+
+\e$B@55,I=8=0lCW$H$O0c$C$F!"%U%!%8!<$J0lCW$O$H$C$F$b%U%!%8!<$G$9!#$"\e(B
+\e$B$^$j$K$b%U%!%8!<$9$.$F!"2?$,%U%!%8!<\e(B @dfn{fuzziness} \e$B$G$"$k$+$H\e(B
+\e$B$$$&Dj5A$5$($"$j$^$;$s$7!"<BAu$b2?EY$bJQ99$5$l$F$$$^$9!#\e(B
+
+\e$B4pK\E*$K$O!"$3$l$OHf3S$NA0$K9T$+$i<YKbJ*$r<h$j=|$3$&$H$7$^$9!#\e(B
+@samp{Re: } \e$B$dA^F~6g$N0u$d6uGrJ8;zEy!9$OJ8;zNs$+$i=|5n$5$l!"$=$N\e(B
+\e$B7k2L$rHf3S$7$^$9!#$3$l$O$[$H$s$I$N>l9gBEEv$J7k2L$r=P$7$^$9\e(B --- 
+\e$B$?$H$(%K%e!<%9%j!<%@!<$N2>LL$r$+$V$C$?J8;zNs@Z$j9o$_5!$G@8@.$5$l\e(B
+\e$B$?J8;zNs$,:9$7=P$5$l$F$b!"$G$9!#\e(B
+
+
+@node Thwarting Email Spam
+@section spam \e$B%a!<%k$NN"$r$+$/\e(B
+@cindex email spam
+@cindex spam
+@cindex UCE
+@cindex unsolicited commercial email
+
+\e$B$3$3:G6a$N\e(B USENET \e$B$G$O!"@kEA$N%O%2%?%+$I$b$,!"H`$i$N:>5=$d@=IJ$r\e(B
+\e$B2!$7IU$1$k$?$a$NEE;R%a!<%k%"%I%l%9$rC5$=$&$H$7$F!"5$0c$$$N$h$&$K\e(B
+\e$B%K%e!<%9>e$r$&$m$D$$$F\e(B grep \e$B$7$^$/$C$F$$$^$9!#$3$l$KBP$9$kH?F0$H\e(B
+\e$B$7$F!"B?$/$N?M!9$,\e(B @code{From} \e$B9T$KL50UL#$J%"%I%l%9$rF~$l$O$8$a\e(B
+\e$B$k$h$&$K$J$C$F$7$^$$$^$7$?!#$3$l$OHs@8;:E*$J$3$H$@$H;d$O;W$$$^$9\e(B
+--- \e$B$"$J$?$,=q$$$?$3$H$KBP$9$kJV?.$H$7$F@5Ev$J%a!<%k$rAw$k$3$H$r\e(B
+\e$BLLE]$K$5$;!"$^$?C/$,=q$$$?$b$N$J$N$+$rJ,$+$j$E$i$/$7$^$9!#$3$s$J\e(B
+\e$B=q$-49$($O7k6I$O!"2!$7IU$1@kEA%a!<%k$=$l<+?H$h$j$bBg$-$J6<0R$H$J\e(B
+\e$B$k$+$b$7$l$^$;$s!#\e(B
+
+\e$B;d$K$H$C$F$N\e(B spam \e$B%a!<%k$N:GBg$NLdBj$O!"13$N8}<B$GF~$C$F$/$k$+$i\e(B
+\e$B$G$9!#;d$,\e(B @kbd{g} \e$B$r2!$7$?$H$9$k$H!"\e(Bgnus \e$B$O\e(B 10 \e$BDL$N?7Ce%a!<%k$,\e(B
+\e$B$"$j$^$9$HM[5$$K;d$K65$($F$/$l$^$9!#;d$O\e(B ``\e$B$*$*$C!"$o!<$$\e(B! \e$BKM$C\e(B
+\e$B$F9,$;\e(B!'' \e$B$H8@$C$F%a!<%k%0%k!<%W$rA*Br$7$^$9!#$7$+$7$=$3$K$O!"Fs\e(B
+\e$B$D$N%M%:%_9V$H!"<7$D$N9-9p\e(B (`` \e$B:G?7\e(B! \e$B4q@W$NA}LS%H%K%C%/!"$U$5$U\e(B
+\e$B$5$G$D$d$D$d$NH1$r!"$"$J$?$N$D$^@h$^$G\e(B!'') \e$B$H!"2y$$2~$a?@$r?.$8\e(B
+\e$B$h!"$H$$$&0l$D$N%a!<%k$,$"$k$@$1$J$N$G$9!#\e(B
+
+\e$B$3$l$OITL{2w$G$9!#\e(B
+
+\e$B$3$l$KBP=h$9$kJ}K!$O!"\e(Bgnus \e$B$KA4$F$N\e(B spam \e$B$r\e(B @samp{spam} \e$B%a!<%k%0\e(B
+\e$B%k!<%W$KJ,N%$5$;$F$7$^$&$3$H$G$9\e(B (@pxref{Splitting Mail})\e$B!#\e(B
+
+\e$B:G=i$K!"$"$J$?$KE~C#@-$N$"$k@5$7$$%a!<%k%"%I%l%9$r0l$DA*$S!"$=$l\e(B
+\e$B$rA4$F$N$"$J$?$N%K%e!<%95-;v$N\e(B @code{From} \e$B%X%C%@!<$KF~$l$^$9!#\e(B
+(\e$B$3$3$G$O\e(B @samp{larsi@@trym.ifi.uio.no} \e$B$rA*$S$^$7$?$,!"\e(B
+@samp{larsi+usenet@@ifi.uio.no} \e$B7A<0$N$?$/$5$s$N%"%I%l%9$NJ}$,NI\e(B
+\e$B$$A*Br$G$9!#$"$J$?$N%5%$%H$N\e(B sendmail \e$B$N@_Dj$,%a!<%k%"%I%l%9$N%m!<\e(B
+\e$B%+%kIt$H$7$F$I$s$J%-!<%o!<%I$r<u$1IU$1$k$+$O!"$"$J$?$N%5%$%H$N%7\e(B
+\e$B%9%F%`4IM}<T$KJ9$$$F$/$@$5$$!#\e(B)
+
+@lisp
+(setq message-default-news-headers
+      "From: Lars Magne Ingebrigtsen <larsi@@trym.ifi.uio.no>\n")
+@end lisp
+
+\e$B$=$7$F\e(B @code{nnmail-split-fancy} \e$B$K0J2<$NJ,N%5,B'$rF~$l$^$9\e(B
+(@pxref{Fancy Mail Splitting})\e$B!#\e(B
+
+@lisp
+(
+ ...
+ (to "larsi@@trym.ifi.uio.no"
+      (| ("subject" "re:.*" "misc")
+         ("references" ".*@@.*" "misc")
+         "spam"))
+ ...
+)
+@end lisp
+
+\e$B$3$N0UL#$O!"$3$N%"%I%l%9$KFO$$$?A4$F$N%a!<%k$r$^$:5?$$$^$9$,!"\e(B
+@samp{Re:} \e$B$G;O$^$k\e(B @code{Subject} \e$B$,$D$$$F$$$k$+!"\e(B
+@code{References} \e$B%X%C%@!<$,$D$$$F$$$l$P$*$=$i$/\e(B OK \e$B$@$m$&!"$H$$\e(B
+\e$B$&$3$H$G$9!#;D$j$OA4$F\e(B @samp{spam} \e$B%0%k!<%W$K9T$-$^$9!#\e(B(\e$B$3$N%"%$\e(B
+\e$B%G%"$O$*$=$i$/\e(B Tim Pierce \e$B;a$K$h$k$b$N$G$9!#\e(B)
+
+\e$B$3$l$K2C$($F!"B?$/$N%a!<%k\e(B spam \e$B20$O!"$"$J$?$N$H$3$m$N\e(B
+@code{smtp} \e$B%5!<%P!<$HD>@\OC$7!"\e(B@code{To} \e$B%X%C%@!<$K$"$J$?$N%a!<\e(B
+\e$B%k%"%I%l%9$,L@<($5$l$J$$$h$&$K$7$^$9!#$J$s$G$=$s$J$3$H$r$9$k$N$+\e(B
+\e$B$O$o$+$j$^$;$s$,\e(B --- \e$B$*$=$i$/;d$?$A$NN"$r$+$/5!9=$NN"$r$+$/$?$a\e(B
+\e$B$+$J\e(B? \e$B$I$A$i$K$7$F$b!"BP=h$O4JC1$J$3$H$G$9\e(B --- \e$B$"$J$?08$F$G\e(B
+\e$B$J$$$b$N$rA4It\e(B @samp{spam} \e$B%0%k!<%W$K$$$l$k$@$1$G$9!#$3$l$O$*9%\e(B
+\e$B$_J,N%5,B'$N:G8e$K$3$s$JIw$KF~$l$k$3$H$G$G$-$^$9!#\e(B
+
+@lisp
+(
+ ...
+ (to "larsi" "misc")
+ "spam")
+@end lisp
+
+\e$B;d$N7P83$G$O!"$3$l$G;v<B>eA4$F$,@5$7$$%0%k!<%W$KJ,N`$5$l$^$9!#$^\e(B
+\e$B$"!"$=$l$G$b$H$-$I$-\e(B @samp{spam} \e$B%0%k!<%W$r%A%'%C%/$7$F!"@5$7$$\e(B
+\e$B%a!<%k$,$"$k$+%A%'%C%/$7$J$/$F$O$$$1$^$;$s$1$I$M!#$b$7$"$J$?$O<+\e(B
+\e$BJ,$,NI$$%M%C%H%o!<%/;TL1$G$"$k$H;W$C$F$$$k$J$i!"$=$l$>$l$N2!$7IU\e(B
+\e$B$1@kEA%a!<%k$N4X78Ev6I$K6l>p$rAw$jIU$1$k$3$H$5$($b$G$-$^$9\e(B ---
+\e$B2K$J$H$-$K$G$b$M!#\e(B
+
+\e$B$^$?!"$"$J$?$,BU$1<T$N%M%C%H%o!<%/;TL1$G$b$"$k$J$i!"\e(B
+@file{gnus-junk.el} \e$B%Q%C%1!<%8$K$h$C$F<+F0E*$K6l>p$r$$$&J}$,NI$$\e(B
+\e$B$H;W$&$+$b$7$l$^$;$s!#$3$l$O\e(B @*
+@file{<URL:http://stud2.tuwien.ac.at/~e9426626/gnus-junk.html>}
+\e$B$+$i!VL5NA$G!WMxMQ$G$-$^$9!#$[$H$s$I$N\e(B spam \e$B%a!<%k$O<+F0E*$KAw$i\e(B
+\e$B$l$F$$$k$N$G!"$A$g$C$H$@$11'Ch$N%P%i%s%9$,$H$l$k$+$b$7$l$^$;$s!#\e(B
+
+\e$B$3$l$G;d$N$H$3$m$G$OF0$$$F$$$^$9!#$3$l$G$_$s$J$O4JC1$JJ}K!$G;d$K\e(B
+\e$BO"Mm$r<h$k$3$H$,$G$-\e(B (\e$BIaDL$K\e(B @kbd{r} \e$B$r2!$9$@$1$G$G$-$k\e(B)\e$B!";d$O\e(B
+spam \e$B$KHQ$o$5$l$k$3$H$OA4$/$"$j$^$;$s!#F@!9>uBV$G$9!#;d$N0U8+$H\e(B
+\e$B$7$F$O!"\e(B @code{From} \e$B%X%C%@!<$K56B$$7$FB8:_$7$J$$%I%a%$%s$KAw$i\e(B
+\e$B$;$k$N$O%-%?%J%$$G$9!#\e(B
+
+
+@node Various Various
+@section \e$B$$$m$$$m$N$$$m$$$m\e(B
+@cindex mode lines
+@cindex highlights
+
+@table @code
+
+@item gnus-home-directory
+\e$BA4$F$N\e(B gnus \e$B$N%Q%9JQ?t$O$3$NJQ?t$K$h$C$F=i4|2=$5$l$^$9!#$=$N=i4|\e(B
+\e$B@_DjCM$O\e(B @file{~/} \e$B$G$9!#\e(B
+
+@item gnus-directory
+@vindex gnus-directory
+\e$B$?$/$5$s$N\e(B gnus \e$B3JG<%Q%9JQ?t$O$3$NJQ?t$K$h$C$F=i4|2=$5$l$^$9!#$=\e(B
+\e$B$N=i4|@_DjCM$O\e(B @samp{SAVEDIR} \e$B4D6-JQ?t$NCM$+!"$=$NJQ?t$,@_Dj$5$l\e(B
+\e$B$F$$$J$$>l9g$O\e(B @file{~/News/} \e$B$G$9!#\e(B
+
+@file{.gnus.el} \e$B%U%!%$%k$,FI$^$l$?$H$-$O\e(B gnus \e$B$N$[$H$s$I$O$9$G$K\e(B
+\e$BFI$_9~$^$l$F$$$k$H$$$&$3$H$KCm0U$7$F$/$@$5$$!#$3$l$O$D$^$j!"$3$N\e(B
+\e$BJQ?t$r\e(B @file{.gnus.el} \e$B$NCf$G@_Dj$7$F$b!"$3$NJQ?t$K$h$C$F=i4|2=\e(B
+\e$B$5$l$kB>$N%G%#%l%/%H%j!<JQ?t$O@5$7$/@_Dj$5$l$J$$$@$m$&$H$$$&$3$H\e(B
+\e$B$G$9!#$3$NJQ?t$OBe$o$j$K\e(B @file{.emacs} \e$B$G@_Dj$7$F$/$@$5$$!#\e(B
+
+@item gnus-default-directory
+@vindex gnus-default-directory
+\e$B>e5-$NJQ?t$K$OA4$/4X78$"$j$^$;$s\e(B --- \e$B$3$NJQ?t$OA4$F$N\e(B gnus \e$B%P%C\e(B
+\e$B%U%!!<$N%G%#%U%)%k%H%G%#%l%/%H%j!<$r$I$&$9$Y$-$+$r@_Dj$7$^$9!#$b\e(B
+\e$B$7\e(B @kbd{C-x C-f} \e$B$N$h$&$JL?Na$r<B9T$9$k$H!"8=:_$N%P%C%U%!!<$N%G%#\e(B
+\e$B%U%)%k%H%G%#%l%/%H%j!<$r5/E@$K$7$?%W%m%s%W%H$,=P$F$/$k$G$7$g$&!#\e(B
+
+
+
+\e$B$3$NJQ?t$,\e(B @code{nil} (\e$B$3$l$,=i4|@_DjCM\e(B) \e$B$G$"$l$P!"\e(B gnus \e$B$r5/F0\e(B
+\e$B$7$?$H$-$K$"$J$?$,$$$?%P%C%U%!!<$N%G%#%U%)%k%H%G%#%l%/%H%j!<$,%G%#\e(B
+\e$B%U%)%k%H%G%#%l%/%H%j!<$K$J$k$G$7$g$&!#\e(B
+
+@item gnus-verbose
+@vindex gnus-verbose
+\e$B$3$NJQ?t$O\e(B 0 \e$B$+$i\e(B 10 \e$B$^$G4V$N@0?t$G$9!#Bg$-$$?t;z$[$I$?$/$5$s$N\e(B
+\e$B%a%C%;!<%8$,I=<($5$l$^$9!#$3$NJQ?t$,\e(B 0 \e$B$G$"$l$P\e(B gnus \e$B$O2?$N%a%C\e(B
+\e$B%;!<%8$b8+$;$^$;$s!#$3$l$,\e(B 7 (\e$B=i4|@_DjCM\e(B) \e$B$G$"$l$PFC$K=EMW$J%a%C\e(B
+\e$B%;!<%8$,I=<($5$l!"\e(B10 \e$B$G$"$l$P\e(B gnus \e$B$O7h$7$F$*C}$j$r;_$a$:!"$?$/\e(B
+\e$B$5$s$N%a%C%;!<%8$G$"$J$?$K$a$^$$$r5/$3$5$;$k$G$7$g$&!#\e(B
+
+@item gnus-verbose-backends
+@vindex gnus-verbose-backends
+\e$B$3$NJQ?t$O\e(B @code{gnus-verbose} \e$B$HF1MM$KF0:n$7$^$9$,!"\e(Bgnus \e$BK\BN$G\e(B
+\e$B$O$J$/\e(B gnus \e$B$N%P%C%/%(%s%I$KBP$7$FE,MQ$5$l$^$9!#\e(B
+
+@item nnheader-max-head-length
+@vindex nnheader-max-head-length
+\e$B%P%C%/%(%s%I$,5-;v$N%X%C%@!<$r$^$C$9$0FI$s$G$$$k$H$-$O!"$G$-$k8B\e(B
+\e$B$j>/$J$$NL$@$1$rFI$b$&$HEXNO$7$^$9!#$3$NJQ?t\e(B (\e$B=i4|@_DjCM\e(B 4096)
+\e$B$O!"%P%C%/%(%s%I$,%X%C%@!<$HK\J8$N4V$N6h@Z$j9T$r8+$D$1$k$^$G$KFI\e(B
+\e$B$_9~$b$&$H$9$k@dBP:GBgD9$r;XDj$7$^$9!#$3$NJQ?t$,\e(B @code{nil} \e$B$G$"\e(B
+\e$B$l$P!"FI$_9~$_>e8B$O$"$j$^$;$s!#$b$7\e(B @code{t} \e$B$G$"$l$P!"%P%C%/%(\e(B
+\e$B%s%I$O5-;v$rItJ,ItJ,$GFI$_9~$b$&$H$O$;$:!"5-;vA4BN$rFI$_9~$_$^$9!#\e(B
+\e$B$3$l$O\e(B @code{ange-ftp} \e$B$d\e(B @code{efs} \e$B$N$"$k%P!<%8%g%s$G0UL#$r$b\e(B
+\e$B$A$^$9!#\e(B
+
+@item nnheader-head-chop-length
+@vindex nnheader-head-chop-length
+\e$B$3$NJQ?t\e(B (\e$B=i4|@_DjCM\e(B 2048) \e$B$O!"A05-$NA`:n$r9T$C$F$$$k$H$-$K!"$I\e(B
+\e$B$l$/$i$$$NBg$-$5$NC10L$G3F5-;v$rFI$_9~$`$+$r@_Dj$7$^$9!#\e(B
+
+@item nnheader-file-name-translation-alist
+@vindex nnheader-file-name-translation-alist
+@cindex file names
+@cindex invalid characters in file names
+@cindex characters in file names
+\e$B$3$l$O%U%!%$%kL>$NJ8;z$r$I$N$h$&$KJQ49$9$k$+$r;XDj$9$kO"A[%j%9%H\e(B
+\e$B$G$9!#Nc$($P!"$b$7\e(B @samp{:} \e$B$,$"$J$?$N%7%9%F%`$G$O%U%!%$%kL>$NJ8\e(B
+\e$B;z$H$7$F$O;H$($J$$>l9g\e(B (\e$B$"$J$?$O\e(B OS/2 \e$B%f!<%6$G$9\e(B) \e$B!"0J2<$N$h$&$K\e(B
+\e$B$9$k$3$H$,$G$-$^$9!#\e(B
+
+@lisp
+(setq nnheader-file-name-translation-alist
+      '((?: . ?_)))
+@end lisp
+
+\e$B<B:]$K$O!"$3$l$O\e(B OS/2 \e$B$H\e(B (\e$B$/$=\e(B) MS Windows \e$B%7%9%F%`>e$G$N$3$NJQ\e(B
+\e$B?t$N=i4|@_DjCM$G$9!#\e(B
+
+@item gnus-hidden-properties
+@vindex gnus-hidden-properties
+\e$B$3$l$O\e(B ``\e$BIT2D;k\e(B'' \e$B%F%-%9%H$r1#$9$?$a$K;H$o$l$kB0@-$N%j%9%H$G$9!#\e(B
+\e$B$[$H$s$I$N%7%9%F%`$G$O=i4|@_DjCM$O\e(B @code{(invisible t intangible
+t)} \e$B$G!"$3$l$OIT2D;k%F%-%9%H$r8+$($J$/$7$F?($l$J$/$7$^$9!#\e(B
+
+@item gnus-parse-headers-hook
+@vindex gnus-parse-headers-hook
+\e$B%X%C%@!<$r2r<a$9$kA0$K8F$S=P$5$l$k%U%C%/!#$3$l$ONc$($P!"<hF@$7$?\e(B
+\e$B%X%C%@!<$NE}7W>pJs$r<h$k$H$+!"$"$k$$$O$"$k<o$N%X%C%@!<$r<h$j=|$/\e(B
+\e$B$3$H$K;H$&$3$H$,$G$-$^$9!#$^$"!";d$O2?$G$3$s$J$b$N$,M_$7$$$+$h$/\e(B
+\e$B$o$+$s$J$$$s$@$1$I$M!#\e(B
+
+@item gnus-shell-command-separator
+@vindex gnus-shell-command-separator
+\e$BFs$D$N%7%'%kL?Na$r6h@Z$k$N$K;HMQ$5$l$kJ8;zNs!#=i4|@_DjCM$O\e(B
+@samp{;} \e$B$G$9!#\e(B
+
+
+@end table
+
+
+
+@node The End
+@chapter \e$B=*$o$j\e(B
+
+\e$B$O$$!"0J>e$,%^%K%e%"%k$G$9\e(B---\e$B$"$J$?$O$b$&<+J,<+?H$N?M@8$rAw$k;v$,$G$-$^\e(B
+\e$B$9!#O"Mm$r$H$C$F2<$5$$!#$"$J$?$NG-$K:#F|$O!"$H$$$C$F$*$$$F2<$5$$!#\e(B
+
+\e$B$*$*!"\e(B@strong{\e$B?@$h\e(B}---\e$B$5$h$J$i$rBQ$($k;v$O$G$-$^$;$s!#\e(B(\e$B$9$9$j5c$-!#\e(B)
+
+Ol' Charles Reznikoff \e$B$O$=$l$rHs>o$K$h$/8=$7$F$$$^$9$N$G!"$3$3$OH`$N$?$a\e(B
+\e$B$K>y$j$^$9\e(B:
+
+@quotation
+@strong{Te Deum}
+
+@sp 1
+Not because of victories @*
+I sing,@*
+having none,@*
+but for the common sunshine,@*
+the breeze,@*
+the largess of the spring.
+
+@sp 1
+Not for victory@*
+but for the day's work done@*
+as well as I was able;@*
+not for a seat upon the dais@*
+but at the common table.@*
+@end quotation
+
+\e$B;nLu\e(B:
+
+@quotation
+@strong{Te Deum}
+
+@sp 1
+\e$B>!Mx$7$?$+$i$G$O$J$/\e(B @*
+\e$B;d$O2N$&\e(B @*
+\e$B2?$bL5$$$1$l$I\e(B @*
+\e$B$"$NF|8w$d\e(B @*
+\e$BB)?a$d\e(B @*
+\e$B=U$NBg$-$5$N$?$a$K\e(B @*
+
+@sp 1
+\e$B>!Mx$N$?$a$G$O$J$/\e(B @*
+\e$B0lF|$NO+F/$N$?$a$K\e(B @*
+\e$B$^$?!"$=$l$rC#@.$G$-$?$3$H$K\e(B @*
+\e$B9b:B$N>e$N@J$N$?$a$G$O$J$/\e(B @*
+\e$BIaDL$N%F!<%V%k$N$H$3$m$G\e(B @*
+@end quotation
+
+
+@node Appendices
+@chapter \e$BIUO?\e(B
+
+@menu
+* History::                        \e$B$I$&$d$C$F\e(B gnus \e$B$,:#F|$N$h$&$K$J$C$?$+!#\e(B
+* Terminology::                    \e$B2f!9$OK\Ev$KFq$7$$!"8l$N$h$&$J8l$r;H$&!#\e(B
+* Customization::                  \e$B$"$J$?$NMW5a$K1h$C$F\e(B gnus \e$B$r;EN)$F$k!#\e(B
+* Troubleshooting::                \e$B>e<j$/9T$+$J$+$C$?$H$-$K;n$9$+$b$7$l$J$$;v!#\e(B
+* A Programmers Guide to Gnus::    \e$B?'!9$J5;=QE*$J$b$N!#\e(B
+* Emacs for Heathens::             Emacs \e$B$NMQ8l$N<jC;$JF3F~!#\e(B
+* Frequently Asked Questions::     \e$B<ALd$HEz!#\e(B
+@end menu
+
+
+@node History
+@section \e$BNr;K\e(B
+
+@cindex history
+@sc{gnus} \e$B$O\e(B \e$BG_ED\e(B \e$B@/?.;a$K$h$C$F=q$+$l$^$7$?!#\e(B94\e$BG/$N2F$,G&$S4s$C$F$/$k$3\e(B
+\e$B$m!"\e(BLars Magne Ingebrigtsen \e$B$OK0$-$F$-$F!"\e(BGnus \e$B$r=q$-D>$=$&$H7h?4$7$^$7\e(B
+\e$B$?!#\e(B
+
+\e$B$3$NL5Ni$r9T$C$??MJ*$rD4$Y$F$_$?$$$N$J$i!"$"$J$?$N\e(B (\e$B$/$=!*\e(B) \e$B%&%'%V%V%i%&\e(B
+\e$B%6!<$r\e(B @file{http://www.stud.ifi.uio.no/~larsi/} \e$B$K8~$1$k;v$,$G$-$^$9!#\e(B
+\e$B$3$l$O?7$7$/$F?h$JHG$N\e(B gnus \e$B$NBh0lG[I[>l=j$G!"\e(BNewsrc \e$B$r$V$C2u$7$F?M!9$r\e(B
+\e$B7cE\$5$l$k%5%$%H$H$7$FCN$i$l$F$$$^$9!#\e(B
+
+\e$B:G=i$N%"%k%U%!HG$N3+H/4|4V$K!"?7$7$$\e(B Gnus \e$B$O\e(B ``(ding) Gnus'' \e$B$H8F$P$l$F\e(B
+\e$B$$$^$7$?!#\e(B@dfn{(ding)} \e$B$O$b$A$m$s!"\e(B@dfn{ding is not Gnus} \e$B$NC;=L7A$G!"$3\e(B
+\e$B$l$OA4$/40A4$J13$G$9$,!"$@$l$,$=$s$J$3$H$r5$$K$9$k$G$7$g$&$+!)\e(B(\e$B$H$3$m$G!"\e(B
+\e$B$3$NC;=L7A$N\e(B ``Gnus'' \e$B$O$*$=$i$/G_ED$5$s$N0U?^DL$j\e(B ``\e$B%K%e!<%9\e(B'' \e$B$HH/2;$5\e(B
+\e$B$l$k$Y$-$G!"$=$&$9$k$H$b$C$HE,@Z$JL>A0$K$J$j$^$9!#$=$&;W$$$^$;$s$+!)\e(B)
+
+\e$B$I$A$i$K$;$h!"A4$F$N%(%M%k%.!<$r?7$7$$855$$NNI$$L>A0$rIU$1$k$N$K;H$$2L$?\e(B
+\e$B$7$?8e!"$=$NL>A0$O\e(B @emph{\e$B$"$^$j$K\e(B} \e$B855$$,NI$9$.$k$H$$$&;v$K$J$j!"$=$l$r\e(B 
+``Gnus'' \e$B$H:F$SL?L>$7$^$7$?!#$G$b!":#2s$OBgJ8;z$H>.J8;z$r:.$<$F$$$^$9!#\e(B 
+``Gnus'' \e$B$H\e(B ``@sc{gnus}'' \e$B$G$9!#\e(B \e$B?7$7$$$b$N\e(B \e$B$H\e(B \e$B8E$$$b$N!#\e(B
+
+\e$B:G=i$N\e(B ``\e$BE,@Z$J\e(B'' Gnus 5 \e$B$N%j%j!<%9$O\e(B1995\e$BG/\e(B11\e$B7n$K\e(B Emacs 19.30 \e$B$NG[I[$K4^\e(B
+\e$B$^$l$?$H$-$K$J$5$l$^$7$?\e(B (132 \e$B$N\e(B (ding) Gnus \e$B$N%j%j!<%9\e(B \e$BB-$9$3$H$N\e(B 
+Gnus5.0 \e$B$N\e(B15\e$B%j%j!<%9\e(B)\e$B!#\e(B
+
+1996\e$BG/\e(B3\e$B7n$K<!$N@$Be$N\e(B Gnus (\e$BJLL>\e(B ``September Gnus'' (99\e$B%j%j!<%9$N8e$G\e(B)) 
+\e$B$,\e(B ''Gnus 5.2`` \e$B$H$$$&L>A0$G%j%j!<%9$5$l$^$7$?\e(B (40\e$B%j%j!<%9\e(B)\e$B!#\e(B
+
+1996\e$BG/$N\e(B7\e$B7n\e(B28\e$BF|$K\e(B Red Gnus \e$B$N:n6H$,;O$^$j!"$=$l$O\e(B1997\e$BG/\e(B1\e$B7n\e(B25\e$BF|$K\e(B (84\e$B%j%j!<\e(B
+\e$B%9$N8e$G\e(B) ``Gnus 5.4'' \e$B$H$7$F%j%j!<%9$5$l$^$7$?\e(B (67 \e$B%j%j!<%9\e(B)\e$B!#\e(B
+
+1997\e$BG/\e(B9\e$B7n\e(B13\e$BF|$K!"\e(BQuassia Gnus \e$B$,3+;O$5$l!"\e(B37\e$B%j%j!<%9B3$-$^$7$?!#$=$l$O\e(B 
+``Gnus 5.6'' \e$B$H$7$F\e(B1998\e$BG/\e(B3\e$B7n\e(B8\e$BF|$K%j%j!<%9$5$l$^$7$?!#\e(B
+
+\e$B$b$7@\F,<-$r;}$C$?HG$N\e(B Gnus -- ``(ding) Gnus'', ``September Gnus'',
+``Red Gnus'', ``Quassia Gnus'' -- \e$B$K=P2q$C$F$b!":.Mp$7$J$$$G$/$@$5$$!#$"\e(B
+\e$B$J$?$,62$,$C$F$$$k;v$rCN$i$l$F$O$$$1$^$;$s!#8e$m$K2<$,$j$J$5$$!#$f$C$/$j\e(B
+\e$B$H!#B>$K2?$r$7$F$b!"Av$C$F$O9T$1$^$;$s!#$=$l$,FO$+$/$J$k$^$G!"@E$+$KJb$-\e(B
+\e$B5n$j$J$5$$!#E,@Z$K%j%j!<%9$5$l$?HG$N\e(B Gnus \e$B$r8+$D$1$F!"Be$o$j$K$=$l$K4s$j\e(B
+\e$BE:$C$F2<$5$$!#\e(B
+
+@menu
+* Why?::                Gnus \e$B$NL\E*$O2?!)\e(B
+* Compatibility::       Gnus \e$B$O\e(B @sc{gnus} \e$B$H$I$l$/$i$$8_49@-$,$"$k$N!)\e(B
+* Conformity::          Gnus \e$B$OA4$F$NI8=`$rK~$?$=$&$H$9$k!#\e(B
+* Emacsen::             Gnus \e$B$O$$$/$D$+$N8=BeE*$J\e(B Emacs \e$B4D6-$G<B9T$G$-$k!#\e(B
+* Contributors::        \e$BBgNL$N?M!9!#\e(B
+* New Features::        Gnus \e$B$N?7$7$$;v$K4X$9$k<j$,$+$j!#\e(B
+* Newest Features::     \e$B$"$^$j$K$b?7$7$$$?$a$K$^$@=q$+$l$F$$$J$$$b$N!#\e(B
+@end menu
+
+
+@node Why?
+@subsection \e$B$J$<!)\e(B
+
+Gnus \e$B$NL\E*$O2?$G$9$+!)\e(B
+
+\e$B;d$O!"$"$J$?$N9M$(IU$/;v$rA4$F$G$-$k\e(B ``\e$B$9$P$i$7$$\e(B'' ``\e$B$+$C$3$$$$\e(B'' ``\e$B$$\e(B
+\e$B$+$9\e(B'' ``\e$B$O$d$j$N\e(B'' \e$B%K%e!<%9%j!<%@$rDs6!$7$?$$$H;W$$$^$9!#$3$l$O;d$NBg85\e(B
+\e$B$NF05!$G$9$,!"\e(BGnus \e$B$N:n6H$r$7$F$$$k4V$K!"$3$N@$Be$N%K%e!<%9%j!<%@!<$OK\\e(B
+\e$BEv$K@P4o;~Be$KB0$7$F$$$k$H$$$&;v$,L@$i$+$K$J$j$^$7$?!#%K%e!<%9%j!<%@!<$O!"\e(B
+\e$B%$%s%?!<%M%C%H$NMD;y4|$+$i$[$H$s$IH/E8$7$F$$$^$;$s$G$7$?!#$b$7#k8=:_$NA}\e(B
+\e$B2CN($GNL$,A}2C$7$D$E$1$l$P!"A4$F$N8=:_$N%K%e!<%9%j!<%@!<$OA4$/Lr$KN)$?$J\e(B
+\e$B$/$J$k$G$7$g$&!#0lF|$K\e(B1000\e$B$d$b$C$H$?$/$5$s$N?7$7$$5-;v$N$"$k%K%e!<%9%0%k!<\e(B
+\e$B%W$r07$&$K$O$I$&$9$l$PNI$$$N$G$7$g$&!)\e(B \e$BEj9F$r$9$kI4K|$d$=$l$h$jB?$$?M!9\e(B
+\e$B$KCY$l$J$$$h$&$KIU$$$F$$$/$K$O$I$&$9$l$PNI$$$N$G$7$g$&!)\e(B
+
+Gnus \e$B$O$3$l$i$N<ALd$KK\Ev$N2r7h$rDs0F$7$^$9$,!";d$O\e(B Gnus \e$B$,%K%e!<%9$rFI\e(B
+\e$B$_!"<hF@$9$k$?$a$N?7$7$$J}K!$r<B83$9$k>l$H$7$F;H$o$l$FM_$7$$$G$9!#G_ED$5\e(B
+\e$B$s$N%K%e!<%9%j!<%@!<$r%P%C%/%(%s%I$+$iJ,N%$9$k$H$$$&8-L@$JJ}?K$r3HD%$9$k\e(B
+\e$B;v$K$h$C$F!"\e(BGnus \e$B$O%a!<%k$r<hF@$7$?$j!"0c$C$?$H$3$m$+$i%K%e!<%9$r<hF@$9\e(B
+\e$B$k$?$a$N?7$7$$%P%C%/%(%s%I$r=q$-$?$$?M$N$?$a$K!"4JC1$GC1=c$J%$%s%?!<%U%'!<\e(B
+\e$B%9$rDs6!$7$F$$$^$9!#;d$O!"Lr$KN)$D$G$"$m$&$H$$$&ItJ,$K$9$Y$F!"%+%9%?%^%$\e(B
+\e$B%:$N$?$a$N%U%C%/$r2C$($^$7$?!#$=$l$r$9$k;v$K$h$C$F!"C58!$7!"H/L@$7$?$$A4\e(B
+\e$B$F$N?M$r>7$$$F$$$k$N$G$9!#\e(B
+
+\e$B$*$=$i$/\e(B Gnus \e$B$O40@.$9$k;v$O$J$$$N$+$b$7$l$^$;$s!#\e(B @kbd{C-u 100 M-x
+all-hail-emacs} \e$B$H\e(B @kbd{C-u 100 M-x all-hail-xemacs} \e$B$G$9!#\e(B
+
+
+@node Compatibility
+@subsection \e$B8_49@-\e(B
+
+@cindex compatibility
+Gnus \e$B$O\e(B @sc{gnus} \e$B$H40A4$K8_49@-$,$"$k$h$&$K@_7W$5$l$F$$$^$9!#$[$H$s$IA4\e(B
+\e$B$F$N%-!<%P%$%s%G%#%s%0$O$=$N$^$^;D$C$F$$$^$9!#$b$A$m$s!"B?$/$N%-!<%P%$%s\e(B
+\e$B%G%#%s%0$,DI2C$5$l$^$7$?$,!"0l$D$+Fs$D$N$"$$$^$$$J>l9g$r=|$$$F!"8E$$%P%$\e(B
+\e$B%s%G%#%s%0$,JQ99$5$l$?;v$O$"$j$^$;$s!#\e(B
+
+\e$B2f!9$N%b%C%H!<$O\e(B:
+@quotation
+@cartouche
+@center \e$B9]E4$N9|AH$_$N6u9b$/!#\e(B
+@end cartouche
+@end quotation
+\e$B$G$9!#\e(B
+
+\e$BA4$F$NL?Na$O$=$NL>A0$,JQ$o$C$F$$$^$;$s!#$$$/$D$+$NFbIt4X?t$OL>A0$rJQ$($^\e(B
+\e$B$7$?!#\e(B
+
+@code{gnus-uu} \e$B%Q%C%1!<%8$O7`E*$KJQ2=$7$F$$$^$9!#\e(B@xref{Decoding
+Articles}.
+
+\e$B0l$D$N<gMW$J8_49@-$N<ALd$O!"$$$/$D$+$N35N,%P%C%U%!$,B8:_$9$k;v$G$9!#A4$F\e(B
+\e$B$N%0%k!<%W$rFI$_9~$`$H$-$K4XO"$9$kJQ?t$O$=$l$,B0$9$k35N,%P%C%U%!$N%P%C%U%!\e(B
+\e$B8GM-$G$9!#B?$/$N=EMW$JJQ?t$O$=$l$NA4BN$NHG$K$bJ#@=$5$l$^$9$,!"35N,%P%C%U%!\e(B
+\e$B$GL?Na$,<B9T$5$l$k$H!"$3$NJQ99$O!"$"$J$?$,Cm0U$7$F$$$J$$$H!"@5$7$/$J$$CM\e(B
+\e$B$K$J$k$+$bCN$l$^$;$s!#\e(B
+
+@sc{gnus} \e$B$NFbIt$NCN<1$K0MB8$7$?A4$F$N%3!<%I$O<B9T$G$-$J$$$G$7$g$&!#\e(B2\e$B$D\e(B
+\e$BNc$r5s$2$^$9\e(B: @code{gnus-newsrc-alist} \e$B$NJB$SBX$(\e(B (\e$B$b$7$/$O!"<B:]$O2?$i\e(B
+\e$B$+$NJ}K!$G$=$l$rJQ99$9$k;v\e(B) \e$B$O@dBP$K6X;_$5$l$F$$$^$9!#\e(B Gnus \e$B$O$3$NO"A[%j\e(B
+\e$B%9%H$NEPO?$r;X$7<($9%O%C%7%e%F!<%V%k$rJ];}$7$F$*$j\e(B (\e$B$=$l$OB?$/$N4X?t$NB.\e(B
+\e$BEY$r>e$2$^$9\e(B)\e$B!"D>@\O"A[%j%9%H$rJQ99$9$k;v$O0[>o$J7k2L$r$b$?$i$9$G$7$g$&!#\e(B
+
+@cindex hilit19
+@cindex highlighting
+\e$B8E$$\e(B hilit19 \e$B$N%3!<%I$OA4$/F0:n$7$^$;$s!#<B:]$N$H$3$m!"$*$=$i$/A4$F$N\e(B 
+hilit \e$B%3!<%I$rA4$F$N\e(B Gnus \e$B$N%U%C%/\e(B (@code{gnus-group-prepare-hook} \e$B$H\e(B 
+@code{gnus-summary-prepare-hook}) \e$B$+$i<h$j=|$/$Y$-$G$7$g$&!#\e(BGnus \e$B$O%O%$\e(B
+\e$B%i%$%H$N$?$a$N$$$m$$$m$JE}9g$5$l$?4X?t$rDs6!$7$^$9!#$3$l$i$O$b$C$HB.$/$b$C\e(B
+\e$B$H@53N$G$9!#A4$F$N?M$N?M@8$r3Z$K$9$k$?$a$K!"\e(BGnus \e$B$O=i4|@_Dj$GA4$F$N\e(B 
+hilit \e$B%U%C%/$+$iA4$F$N\e(B hilit \e$B8F$S=P$7$r<h$j=|$-$^$9!#$-$?$J$$$b$N!*\e(B \e$B$H$s\e(B
+\e$B$G$1!*\e(B
+
+@code{expire-kill} \e$B$N$h$&$J%Q%C%1!<%8$O$b$&F0:n$7$^$;$s!#<B:]!"\e(BGnus \e$B$r;H\e(B
+\e$B$$;O$a$?$H$-$K$O!"$*$=$i$/A4$F$N8E$$\e(B @sc{gnus} \e$B%Q%C%1!<%8\e(B (\e$B$HB>$N%3!<%I\e(B)
+\e$B$r>C5n$9$k$Y$-$G$7$g$&!#\e(B@sc{gnus} \e$B$K<B9T$5$;$k$?$a$K=q$$$?%3!<%I$O!"\e(BGnus 
+\e$B$,4{$K<B9T$7$F$$$k$H$$$&;v$ONI$/$"$k;v$G$9!#\e(B (\e$B$/$9$/$9!#\e(B)
+
+\e$BJ*;v$r<B9T$9$k8E$$J}K!$O$^$@;HMQ$G$-$^$9$,!"?7$7$$J}K!$@$1$,$3$N%^%K%e%"\e(B
+\e$B%k$K5-:\$5$l$F$$$^$9!#$b$7$3$N%^%K%e%"%k$rFI$s$G$$$k4V$K2?$+$r$9$k?7$7$$\e(B
+\e$BJ}K!$rH/8+$7$F$b!"8E$$J}K!$r;_$a$J$1$l$P$J$i$J$$$H$$$&;v$G$O$"$j$^$;$s!#\e(B
+
+Gnus \e$B$OA4$F$N\e(B @sc{gnus} \e$B5/F0%U%!%$%k$rM}2r$7$^$9!#\e(B
+
+@kindex M-x gnus-bug
+@findex gnus-bug
+@cindex reporting bugs
+@cindex bugs
+\e$BA4BN$H$7$F!"\e(B@sc{gnus} \e$B$NFbIt$K0MB8$7$?%3!<%I$r$[$H$s$I=q$$$F$$$J$$IaDL$N\e(B
+\e$BMxMQ<T$OLdBj$K6l$7$`;v$O$J$$$G$7$g$&!#LdBj$,5/$3$l$P!"KbK!$NL?Na\e(B 
+@kbd{M-x gnus-bug} \e$B$r<B9T$9$k;v$K$h$C$F;d$KCN$i$;$F2<$5$$!#\e(B
+
+@vindex gnus-bug-create-help-buffer
+@emph{\e$BHs>o$K\e(B} \e$B$h$/%P%0Js9p$rAw$kJJ$,$"$k$N$G$"$l$P!"$7$P$i$/$9$k$HLr$KN)\e(B
+\e$B$D\e(B help \e$B%P%C%U%!$,$&$k$5$$$H46$8$k$+$b$7$l$^$;$s!#$=$&$G$"$l$P!"$=$l$,I=\e(B
+\e$B<($5$l$k$N$rHr$1$k$?$a$K!"\e(B@code{gnus-bug-create-help-buffer} \e$B$r\e(B
+@code{nil} \e$B$K@_Dj$7$F2<$5$$!#\e(B
+
+
+@node Conformity
+@subsection \e$B0lCW@-\e(B
+
+\e$B$3$3$K$O<j$,$+$j$NL5$$H?93$O$"$j$^$;$s!"1|$5$s!#2f!9$OA4$F$NCN$i$l$F$$$k\e(B
+\e$BI8=`$K1h$C$F$$$^$9!#$b$A$m$s!"2f!9$,;?@.$G$-$J$$I8=`$H\e(B/\e$B$b$7$/$O=,47$O=|\e(B
+\e$B$-$^$9$,!#\e(B
+
+@table @strong
+
+@item RFC 822
+@cindex RFC 822
+\e$B$3$NI8=`$X$NCN$i$l$F$$$k0cH?$O$"$j$^$;$s!#\e(B
+
+@item RFC 1036
+@cindex RFC 1036
+\e$B$3$NI8=`$bCN$i$l$F$$$k0cH?$O$"$j$^$;$s!#\e(B
+
+@item Son-of RFC 1036
+@cindex Son-of RFC 1036
+\e$B$3$l$K$O$$$/$D$+$N0cH?$,$"$j$^$9!#\e(B
+
+@table @emph
+
+@item MIME
+Gnus \e$B$O\e(B MIME \e$B$N07$$$r$;$:!"$3$NI8=`$K$J$k$b$N$O\e(B \e$B$9$4$/NI$$$H9M$($F$$$k$N\e(B
+\e$B$G!"2f!9$O$3$3$KBg$-$J7j$,6u$$$F$$$k;v$K$J$j$^$9!#\e(B
+
+@item X-Newsreader
+\e$B$3$l$O\e(B ``\e$B$D$^$i$J$$%X%C%@!<\e(B'' \e$B$H9M$($i$l$F$$$^$9$,!";d$O>CHq<T$N>pJs$G$"\e(B
+\e$B$k$H8+$J$7$F$$$^$9!#\e(B@code{tin} \e$B$H\e(B @code{Netscape} \e$B$+$iAw$i$l$F$/$kHs>o$K\e(B
+\e$BB?$/$NMM<0$K1h$C$F$$$J$$5-;v$r8+$?8e$G!";d$O$=$l$i$r5-;v$rEj9F$9$k$?$a$K\e(B
+\e$B$O;H$o$J$$J}$,NI$$$H$$$&;v$rCN$j$^$7$?!#$b$7\e(B @code{X-Newsreader} \e$B%X%C%@!<\e(B
+\e$B$,L5$1$l$P;d$O$=$N>pJs$rF@$k;v$O$J$+$C$?$G$7$g$&!#\e(B
+@end table
+
+@end table
+
+\e$B>e$K=q$+$l$F$$$kJ8>O$K4X$9$k;v$G!"\e(BGnus \e$B$,$=$l$rK~$?$7$F$$$J$$$h$&$JF0:n\e(B
+\e$B$r$7$F$$$k;v$K5$IU$$$?$i!"$?$a$i$o$:$K\e(B Gnus \e$B%?%o!<$H2f!9$KCN$i$;$F2<$5$$!#\e(B
+
+
+@node Emacsen
+@subsection Emacsen
+@cindex Emacsen
+@cindex XEmacs
+@cindex Mule
+@cindex Emacs
+
+Gnus \e$B$O0J2<$N$b$N$GF0:n$7$^$9\e(B:
+
+@itemize @bullet
+
+@item
+Emacs 19.32 \e$B$H$=$l0J9_!#\e(B
+
+@item
+XEmacs 19.14 \e$B$H$=$l0J9_!#\e(B
+
+@item
+Emacs 19.32 \e$B$H$=$l0J9_$K4p$E$$$?\e(B Mule\e$B!#\e(B
+
+@end itemize
+
+Gnus \e$B$O$3$l$h$j8E$$$I$s$J\e(B Emacsen \e$B$G$b40A4$KF0:n$7$J$$$G$7$g$&!#>/$J$/$H\e(B
+\e$B$b!"?.Mj$G$-$kF0:n$O$7$J$$$G$7$g$&!#\e(B
+
+\e$B$$$m$$$m$J%W%i%C%H%U%)!<%`$N\e(B Gnus \e$B$N4V$K$O$$$/$D$+$NGyA3$H$7$?0c$$$,$"$j\e(B
+\e$B$^$9\e(B---XEmacs \e$B$O$b$C$H2hA|5!G=\e(B (\e$B%m%4$H%D!<%k%P!<\e(B) \e$B$rFCD'$K$7$F$$$^$9\e(B--\e$B$7\e(B
+\e$B$+$7!"$=$NB>$O!"A4$F$N\e(B Emacsen \e$B$G$[$H$s$IF1$8$O$:$G$9!#\e(B
+
+
+@node Contributors
+@subsection \e$B9W8%<T\e(B
+@cindex contributors
+
+\e$B?7$7$$\e(B Gnus \e$B$NHG$O\e(B (ding) \e$B%a!<%j%s%0%j%9%H$NA4$F$N?M$N=u$1$,L5$1$l$P$G$-\e(B
+\e$B$J$+$C$?$G$7$g$&!#0lG/0J>e!";d$OKhF|$H$F$b$?$/$5$s$NAGE($J%P%0%l%]!<%H$r\e(B
+\e$B<u$1<h$j!"$=$N$=$l$>$l$,;d$r4n$S$GK~$?$7$^$7$?!#0&Io!#$3$N%j%9%H$N?M!9$O\e(B
+\e$BG&BQ$rD6$($F;d$N\e(B ``\e$B$"$!!"$=$l$O$9$P$i$7$$9M$($@\e(B <type type>\e$B!"$&$s!";d$O\e(B
+\e$BBT$?$:$K$=$l$r$9$0%j%j!<%9$7$h$&\e(B <ship off>\e$B!"$=$l$OA4$/F0:n$7$J$$\e(B <type
+type>\e$B!"$&$s!";d$O$9$0$K=P$=$&\e(B <ship off> \e$B$$$d!"E;$&!"$=$l$OA4$/F0:n$7$J\e(B
+\e$B$$$>\e(B''' \e$B$H$$$&%j%j!<%9$K4X$9$k<g5A$rJQ$($F;n$7$F$-$??M!9$G$9!#\e(B
+Micro$oft---\e$B$"$!!#%"%^%A%e%"!#;d$O\e(B @emph{\e$B$b$C$H\e(B} \e$B0-$$!#\e(B (\e$B$b$7$/$O!"\e(B``\e$B$h\e(B
+\e$B$j0-$$\e(B''\e$B!)\e(B ``\e$B$b$C$H0-$$\e(B''\e$B!)\e(B ``\e$B:G0-\e(B''\e$B!)\e(B)
+
+\e$B;d$O$3$N5!2q$K$3$N3X2q$K\e(B... \e$B$*$*$C$H!"0c$C$?!#\e(B
+
+@itemize @bullet
+
+@item
+\e$BG_ED\e(B \e$B@/?.\e(B---\e$B85$N\e(B @sc{gnus} \e$B$r=q$$$??M$G$9!#\e(B
+
+@item
+Per Abrahamsen--custom\e$B!"%9%3%"!"%O%$%i%$%H$H\e(B @sc{soup} \e$B%3!<%I\e(B (\e$BB>$NB?$/\e(B
+\e$B$N;v$H6&$K\e(B)\e$B!#\e(B
+
+@item
+Luis Fernandes---\e$B%G%6%$%s$H%0%i%U%#%C%/!#\e(B
+
+@item
+Erik Naggum---\e$B1g=u!"9M$(!"%5%]!<%H!"%3!<%I$H$=$NB>!#\e(B
+
+@item
+Wes Hardaker---@file{gnus-picon.el} \e$B$H\e(B @dfn{picon} \e$B$NItJ,$N%^%K%e%"%k\e(B 
+(@pxref{Picons})\e$B!#\e(B
+
+@item
+Kim-Minh Kaplan---picon \e$B%3!<%I$KCV$1$k99$J$k:n6H!#\e(B
+
+@item
+Brad Miller---@file{gnus-gl.el} \e$B$H\e(B Grouplens \e$B$NItJ,$N%^%K%e%"%k\e(B 
+(@pxref{GroupLens})\e$B!#\e(B
+
+@item
+Sudish Joseph---\e$B?t$(@Z$l$J$$$[$I$N%P%0$N=$@5!#\e(B
+
+@item
+Ilja Weis---@file{gnus-topic.el}\e$B!#\e(B
+
+@item
+Steven L. Baur---\e$B$?$/$5$s$N$?$/$5$s$N$?$/$5$s$N%P%0$NH/8+$H=$@5!#\e(B
+
+@item
+Vladimir Alexiev---refcard \e$B$H%j%U%!%l%s%9$N>.:};R!#\e(B
+
+@item
+Felix Lee & Jamie Zawinski---\e$B;d$O\e(B Felix Lee \e$B$H\e(B JWZ \e$B$N\e(B XGnus \e$BG[I[$+$i$$$/\e(B
+\e$B$D$+$NItJ,$rEp$_$^$7$?!#\e(B
+
+@item
+Scott Byer---@file{nnfolder.el} \e$B$N3HD%$H2~D{!#\e(B
+
+@item
+Peter Mutsaers---\e$B8E;v5-;v$N%9%3%"%3!<%I!#\e(B
+
+@item
+Ken Raebburn---POP \e$B%a!<%k%5%]!<%H!#\e(B
+
+@item
+Hallvard B Furuseth---\e$B$$$m$$$m$J>.$5$JJ*$dItJ,!"FC$K\e(B .newsrc \e$B%U%!%$%k$r\e(B
+\e$B07$&ItJ,!#\e(B
+
+@item
+Brian Edmonds---@file{gnus-bbdbb.el}\e$B!#\e(B
+
+@item
+David Moore--@file{nnvirtual.el} \e$B$N2~D{$HB?$/$NB>$N;v!#\e(B
+
+@item
+Kevin Davidson---@dfn{ding} \e$B$NL>A0$r;W$$IU$-$^$7$?!#$G$9$+$i!"H`$r@U$a$F\e(B
+\e$B2<$5$$!#\e(B
+
+@item
+Fran\e,Ag\e(Bois Pinard---\e$BB?$/$N!"B?$/$N6=L#?<$/40A4$J%P%0%l%]!<%H$H\e(B autoconf \e$B$N\e(B
+\e$B%5%]!<%H!#\e(B
+
+@end itemize
+
+\e$B$3$N%^%K%e%"%k\e(B (Gnus \e$B1Q8lHG\e(B) \e$B$O\e(B Adrian Aichner \e$B$H\e(B Ricardo Nassif\e$B!"\e(BMark
+Borges \e$B$K$h$C$F9;@5$5$l!"\e(BJost Krieger \e$B$K$h$C$F0lItJ,$r9;@5$5$l$^$7$?!#\e(B
+
+\e$B0J2<$N?M!9$OB?$/$N%Q%C%A$HDs0F$G9W8%$7$^$7$?\e(B:
+
+Christopher Davis,
+Andrew Eskilsson,
+Kai Grossjohann,
+David K\e,Ae\e(Bgedal,
+Richard Pieri,
+Fabrice Popineau,
+Daniel Quinlan,
+Jason L. Tibbitts, III,
+and
+Jack Vinson.
+
+\e$B$=$l$H!"0J2<$N?M$K$b%Q%C%A$d$=$NB>$N$b$N$r46<U$7$^$9\e(B:
+
+Jari Aalto,
+Adrian Aichner,
+Vladimir Alexiev,
+Russ Allbery,
+Peter Arius,
+Matt Armstrong,
+Marc Auslander,
+Frank Bennett,
+Robert Bihlmeyer,
+Chris Bone,
+Mark Borges,
+Mark Boyns,
+Lance A. Brown,
+Kees de Bruin,
+Martin Buchholz,
+Joe Buehler,
+Kevin Buhr,
+Alastair Burt,
+Joao Cachopo,
+Zlatko Calusic,
+Massimo Campostrini,
+Castor,
+David Charlap,
+Dan Christensen,
+Kevin Christian,
+Michael R. Cook,
+Glenn Coombs,
+Frank D. Cringle,
+Geoffrey T. Dairiki,
+Andre Deparade,
+Ulrik Dickow,
+Dave Disser,
+Rui-Tao Dong, @c ?
+Joev Dubach,
+Michael Welsh Duggan,
+Dave Edmondson,
+Paul Eggert,
+Enami Tsugutomo, @c Enami
+Michael Ernst,
+Luc Van Eycken,
+Sam Falkner,
+Nelson Jose dos Santos Ferreira,
+Sigbjorn Finne,
+Decklin Foster,
+Gary D. Foster,
+Paul Franklin,
+Guy Geens,
+Arne Georg Gleditsch,
+David S. Goldberg,
+Michelangelo Grigni,
+D. Hall,
+Magnus Hammerin,
+Kenichi Handa, @c Handa
+Raja R. Harinath,
+Yoshiki Hayashi, @c ?
+P. E. Jareth Hein,
+Hisashige Kenji, @c Hisashige
+Marc Horowitz,
+Gunnar Horrigmo,
+Richard Hoskins,
+Brad Howes,
+Fran\e,Ag\e(Bois Felix Ingrand,
+Ishikawa Ichiro, @c Ishikawa
+Lee Iverson,
+Iwamuro Motonori, @c Iwamuro
+Rajappa Iyer,
+Andreas Jaeger,
+Randell Jesup,
+Fred Johansen,
+Gareth Jones,
+Simon Josefsson,
+Greg Klanderman,
+Karl Kleinpaste,
+Peter Skov Knudsen,
+Shuhei Kobayashi, @c Kobayashi
+Koseki Yoshinori, @c Koseki
+Thor Kristoffersen,
+Jens Lautenbacher,
+Martin Larose,
+Seokchan Lee, @c Lee
+Carsten Leonhardt,
+James LewisMoss,
+Christian Limpach,
+Markus Linnala,
+Dave Love,
+Mike McEwan,
+Tonny Madsen,
+Shlomo Mahlab,
+Nat Makarevitch,
+Istvan Marko,
+David Martin,
+Jason R. Mastaler,
+Gordon Matzigkeit,
+Timo Metzemakers,
+Richard Mlynarik,
+Lantz Moore,
+Morioka Tomohiko, @c Morioka
+Erik Toubro Nielsen,
+Hrvoje Niksic,
+Andy Norman,
+Fred Oberhauser,
+C. R. Oldham,
+Alexandre Oliva,
+Ken Olstad,
+Masaharu Onishi, @c Onishi
+Hideki Ono, @c Ono
+William Perry,
+Stephen Peters,
+Jens-Ulrik Holger Petersen,
+Ulrich Pfeifer,
+Matt Pharr,
+John McClary Prevost,
+Bill Pringlemeir,
+Mike Pullen,
+Jim Radford,
+Colin Rafferty,
+Lasse Rasinen,
+Lars Balker Rasmussen,
+Joe Reiss,
+Renaud Rioboo,
+Roland B. Roberts,
+Bart Robinson,
+Christian von Roques,
+Jason Rumney,
+Wolfgang Rupprecht,
+Jay Sachs,
+Dewey M. Sasser,
+Loren Schall,
+Dan Schmidt,
+Ralph Schleicher,
+Philippe Schnoebelen,
+Andreas Schwab,
+Randal L. Schwartz,
+Justin Sheehy,
+Danny Siu,
+Matt Simmons,
+Paul D. Smith,
+Jeff Sparkes,
+Toby Speight,
+Michael Sperber,
+Darren Stalder,
+Richard Stallman,
+Greg Stark,
+Sam Steingold,
+Paul Stodghill,
+Kurt Swanson,
+Samuel Tardieu,
+Teddy,
+Chuck Thompson,
+Philippe Troin,
+James Troup,
+Trung Tran-Duc,
+Aaron M. Ucko,
+Aki Vehtari,
+Didier Verna,
+Jan Vroonhof,
+Stefan Waldherr,
+Pete Ware,
+Barry A. Warsaw,
+Christoph Wedler,
+Joe Wells,
+Katsumi Yamaoka, @c Yamaoka
+and
+Shenghuo Zhu. @c Zhu
+
+\e$B$=$l$>$l$N?M!9$,9T$C$?;v$N40A4$J354Q$rF@$k$?$a$K!"\e(BChangeLog \e$B$,\e(B Gnus \e$B$N%"\e(B
+\e$B%k%U%!G[I[$K$O4^$^$l$F$$$F!"K-IY$JFI$_J*$rM?$($k$G$7$g$&!#\e(B(550KB \e$B$H$$$/\e(B
+\e$B$i$+\e(B)\e$B!#\e(B
+
+\e$B;d$,K:$l$?A4$F$N?M$K<U:a$7$^$9!#4V0c$$$J$/$?$/$5$s$N?M$rK:$l$F$$$k;v$G$7$g\e(B
+\e$B$&!#\e(B
+
+\e$B$o$!!"$3$l$O$J$s$H$bB?$$?M$N%j%9%H$@$J$!!#$*$=$i$/<B:]$K\e(B Gnus \e$BF~$k$H$$$&\e(B
+\e$B;v$K0c$$$J$$$G$7$g$&!#$=$l$KC/$,46<U$7$?$G$7$g$&!*\e(B
+
+
+@node New Features
+@subsection \e$B?7$7$$5!G=\e(B
+@cindex new features
+
+@menu
+* ding Gnus::          \e$B:G=i$N?7$7$$\e(B Gnus \e$B$G$"$k\e(B Gnus 5.0/5.1 \e$B$N?7$7$$;v!#\e(B
+* September Gnus::     \e$B8x<0$K\e(B GNus 5.2/5.3 \e$B$H$7$FCN$i$l$F$$$k$b$N!#\e(B
+* Red Gnus::           3\e$BHVL\$N:G>e$N$b$N\e(B---Gnus 5.4/5.5
+* Quassia Gnus::       2\e$B$+$1$k\e(B2\e$B$O\e(B4\e$B!"$b$7$/$O\e(B Gnus 5.6/5.7\e$B!#\e(B
+@end menu
+
+\e$B$3$N%j%9%H$O!"$b$A$m$s!"\e(B@emph{\e$B$?$$$F$$$N\e(B} \e$B=EMW$J?7$7$$5!G=$K4X$9$k\e(B 
+@emph{\e$BC;$$\e(B}\e$B354Q$G$7$+$"$j$^$;$s!#$$$$$(!"K\Ev$O$=$&$G$O$"$j$^$;$s!#$b$C\e(B
+\e$B$H$b$C$H$?$/$5$s$N$b$N$,$"$j$^$9!#$O$$!"2f!9$OAOB$@-$N40A4$J8z2L$r46$8$F\e(B
+\e$B$$$k$N$G$9!#\e(B
+
+
+@node ding Gnus
+@subsubsection (ding) Gnus
+
+Gnus 5.0/5.1 \e$B$N?7$7$$5!G=\e(B:
+
+@itemize @bullet
+
+@item
+\e$BA4$F$N%P%C%U%!$N304Q$O%U%)!<%^%C%H$N$h$&$JJQ?t\e(B (@pxref{Group Buffer
+Format} \e$B$H\e(B @pxref{Summary Buffer Format}) \e$B$K$h$C$F@_Dj$rJQ$($k;v$,$G$-$k\e(B
+\e$B$h$&$K$J$j$^$7$?!#\e(B
+
+@item
+\e$B%m!<%+%k%9%W!<%k$H!"$$$/$D$+$N\e(B @sc{nntp} \e$B%5!<%P!<$rF1;~$K;H$&;v$,$G$k$h\e(B
+\e$B$&$K$J$j$^$7$?\e(B (@pxref{Select Methods})\e$B!#\e(B
+
+@item
+\e$B%0%k!<%W$r;v<B>e$N%0%k!<%W$K7k9g$G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Virtual
+Groups})\e$B!#\e(B
+
+@item
+\e$BB?$/$N0c$C$?%a!<%kMM<0\e(B (@pxref{Getting Mail}) \e$B$rFI$a$k$h$&$K$J$j$^$7$?!#\e(B
+\e$BA4$F$N%a!<%k%P%C%/%(%s%I$OJXMx$J%a!<%k4|8B@Z$l>C5n5!9=$r<BAu$7$F$$$^$9\e(B 
+(@pxref{Expiring Mail})\e$B!#\e(B
+
+@item
+Gnus \e$B$O:,$C$3\e(B (root) \e$B$r<:$C$?%9%l%C%I$r=8$a$k$?$a$N$$$m$$$m$J@oN,\e(B (\e$B$=$l\e(B
+\e$B$K$h$C$F$^$P$i$JI{%9%l%C%I$r0l$D$N%9%l%C%I$K$9$k\e(B) \e$B$r;H$C$?$j!"0lC6La$C$F\e(B
+\e$B40A4$J%9%l%C%I$r$/$_>e$2$k$N$K==J,$J%X%C%@!<$r<hF@$7$9$k;v$,$G$-$^$9\e(B 
+(@pxref{Customizing Threading})\e$B!#\e(B
+
+@item
+\e$B@Z$i$l$?%0%k!<%W\e(B (killed group) \e$B$O$0%k!<%W%P%C%U%!$KI=<($9$k;v$,$G$-$F!"\e(B
+\e$B$=$l$bFI$`;v$,$G$-$^$9\e(B (@pxref{Listing Groups})\e$B!#\e(B
+
+@item
+Gnus \e$B$OItJ,E*%0%k!<%W99?7$r$9$k;v$,$G$-$^$9\e(B---2,3 \e$B$N%0%k!<%W$N?7$7$$5-;v\e(B
+\e$B$rD4$Y$k$?$a$K8=>u%U%!%$%kA4BN$r$r<hF@$9$kI,MW$O$"$j$^$;$s\e(B (@pxref{The
+Active File})\e$B!#\e(B
+
+@item
+Gnus \e$B$O%0%k!<%W$NCJ3,E*9XFIEY$r<BAu$7$^$7$?\e(B (@pxref{Group Levels})\e$B!#\e(B
+
+@item
+\e$BG$0U$N?t$N4p=`$K=>$C$F5-;v$K%9%3%"$rIU$1$k;v$,$G$-$^$9\e(B (@pxref{Scoring})\e$B!#\e(B
+\e$B$"$J$?$N$?$a$K5-;v$r$I$N$h$&$K%9%3%"$rIU$1$k$+$r\e(B Gnus \e$B$K8+$D$1$5$;$k;v$b\e(B
+\e$B$G$-$^$9\e(B (@pxref{Adaptive Scoring})\e$B!#\e(B
+
+@item
+Gnus \e$B$OIaDL$N\e(B Emacs \e$B$NJ}K!$G<+F0J]B8$5$l$k%I%j%V%k%P%C%U%!$rJ];}$7$F$$$^\e(B
+\e$B$9$N$G!"$"$J$?$N%^%7%s$,Mn$C$3$A$?$H$-$G$b$"$^$j%G!<%?$r<:$o$J$$$G$7$g$&\e(B 
+(@pxref{Auto Save})\e$B!#\e(B
+
+@item
+Gnus \e$B$O:#$d%U%!%$%k\e(B @file{.emacs} \e$B$r$0$A$c$0$A$c$K$9$k;v$rHr$1$k$?$a$K@l\e(B
+\e$BMQ$N5/F0%U%!%$%k\e(B (@file{.gnus}) \e$B$r;}$D$h$&$K$J$j$^$7$?!#\e(B
+
+@item
+\e$B%0%k!<%W$H5-;v$NN>J}$K%W%m%;%90u$rIU$1$k$3$H$,$G$-!"A4$F$N0u$NIU$$$?9`L\\e(B
+\e$B$K1i;;$r$9$k;v$,$G$-$^$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
+
+@item
+\e$B%0%k!<%W$N0lIt$r\e(B grep \e$B$7$F!"$=$N7k2L$+$i%0%k!<%W$r:n$k;v$,$G$-$^$9\e(B 
+(@pxref{Kibozed Groups})\e$B!#\e(B
+
+@item
+\e$B$(!<$H!"A4$F$K$7$?$,$C$F!"%0%k!<%W$N0lMw$r5s$2$k;v$,$G$-$^$9\e(B 
+(@pxref{Listing Groups})\e$B!#\e(B
+
+@item
+\e$B30It%5!<%P!<$r354Q$7$F!"$=$l$i$N%5!<%P!<$N%0%k!<%W$r9XFI$9$k;v$,$G$-$^$9\e(B 
+(@pxref{Browse Foreign Server})\e$B!#\e(B
+
+@item
+Gnus \e$B$O%5!<%P!<$H$N\e(B2\e$B$D@\B3$G!"5-;v$rHsF14|$K$H$C$F$/$k;v$,$G$-$^$9\e(B 
+(@pxref{Asynchronous Fetching})\e$B!#\e(B
+
+@item
+\e$B5-;v$r%m!<%+%k$K%-%c%C%7%e$9$k;v$,$G$-$^$9\e(B (@pxref{Article Caching})\e$B!#\e(B
+
+@item
+uudecode \e$B$N4X?t$,3HD%$5$l!"0lHL2=$5$l$^$7$?\e(B (@pxref{Decoding Articles})\e$B!#\e(B
+
+@item
+\e$B2a5n$N\e(B @sc{gnus} \e$B$N$"$^$jCN$i$l$F$$$J$$5!G=$N\e(B uuencode \e$B$5$l$?5-;v$r$^$@\e(B
+\e$BEj9F$9$k;v$,$G$-$^$9\e(B (@pxref{Uuencoding and Posting})\e$B!#\e(B
+
+@item
+\e$B?F5-;v\e(B (\e$B$HB>$N5-;v\e(B) \e$B$N<hF@$O:#$d!"<B:]$KFMA38N>c$9$k;vL5$/F0:n$9$k$h$&$K\e(B
+\e$B$J$j$^$7$?\e(B (@pxref{Finding the Parent})\e$B!#\e(B
+
+@item
+Gnus \e$B$O\e(B FAQ \e$B$H%0%k!<%W$N5-=R$r<hF@$9$k;v$,$G$-$^$9\e(B (@pxref{Group
+Information})\e$B!#\e(B
+
+@item
+\e$B5-;v$r%O%$%i%$%H$7!"%+%9%?%^%$%:$9$k;v$,$G$-$^$9\e(B (@pxref{Customizing
+Articles})\e$B!#\e(B
+
+@item
+URL \e$B$HB>$N30It;2>H$,%\%?%s$K$J$k$h$&$K$J$j$^$7$?\e(B (@pxref{Article
+Buttons})\e$B!#\e(B
+
+@item
+Gnus \e$B$N%&%#%s%I%&$H%U%l!<%`$N@_Dj$G$?$/$5$s$NJQ$J;v$r$G$-$k$h$&$K$J$j$^\e(B
+\e$B$7$?\e(B (@pxref{Windows Configuration})\e$B!#\e(B
+
+@item
+\e$B%-!<%\!<%I$r;H$&Be$o$j$K!"%\%?%s$r%/%j%C%/$G$-$k$h$&$K$J$j$^$7$?\e(B 
+(@pxref{Buttons})\e$B!#\e(B
+
+@end itemize
+
+
+@node September Gnus
+@subsubsection September Gnus
+
+@iftex
+@iflatex
+\gnusfig{-28cm}{0cm}{\epsfig{figure=tmp/september.ps,height=20cm}}
+@end iflatex
+@end iftex
+
+Gnus 5.2/5.3 \e$B$N?7$7$$5!G=\e(B:
+
+@itemize @bullet
+
+@item
+\e$B?7$7$$%a%C%;!<%8:n@.%b!<%I$,;H$o$l$^$9!#\e(B@code{mail-mode}\e$B!"\e(B
+@code{rnews-reply-mode} \e$B$H\e(B @code{gnus-msg} \e$B$NA4$F$N8E$$%+%9%?%^%$%:JQ?t\e(B
+\e$B$O:#$d5l<0$K$J$j$^$7$?!#\e(B
+
+@item
+Gnus \e$B$O\e(B @dfn{\e$B$^$P$i\e(B} \e$B%9%l%C%I$r:n@.$9$k;v$,$G$-$k$h$&$K$J$j$^$7$?\e(B---\e$B%9%l%C\e(B
+\e$B%I$N<:$o$l$?5-;v$,$"$k$H$3$m$O6u$N@a$GI=8=$5$l$k$h$&$K$J$C$F$$$^$9\e(B 
+(@pxref{Customizing Threading})\e$B!#\e(B
+
+@lisp
+(setq gnus-build-sparse-threads 'some)
+@end lisp
+
+@item
+\e$B30$K=P$F$$$/5-;v$OFCJL$JJ]4I%5!<%P!<$KJ]B8$5$l$k$h$&$K$J$j$^$7$?\e(B 
+(@pxref{Archived Messages})\e$B!#\e(B
+
+@item
+\e$B5-;v$,;2>H$5$l$?$H$-$K!"%9%l%C%I$NItJ,:n@.$,5/$3$k$h$&$K$J$j$^$7$?!#\e(B
+
+@item
+Gnus \e$B$O\e(B GroupLens \e$B$NM=8@$r;H$&;v$,$G$-$k$h$&$K$J$j$^$7$?\e(B 
+(@pxref{GroupLens})\e$B!#\e(B
+
+@item
+Picons (personal icons) (\e$B8D?M%"%$%3%s\e(B) \e$B$,\e(B XEmacs \e$B$GI=<($G$-$k$h$&$K$J$j\e(B
+\e$B$^$7$?\e(B (@pxref{Picons})\e$B!#\e(B
+
+@item
+@code{trn} \e$B$N$h$&$JLZ%P%C%U%!$,I=<($5$l$k$h$&$K$J$j$^$7$?\e(B (@pxref{Tree
+Display})\e$B!#\e(B
+
+@lisp
+(setq gnus-use-trees t)
+@end lisp
+
+@item
+@code{nn} \e$B$N$h$&$J<h$C$FFI$`%^%$%J!<%b!<%I$,35N,%P%C%U%!$G;H$&;v$,$G$-$k\e(B
+\e$B$h$&$K$J$j$^$7$?\e(B (@pxref{Pick and Read})\e$B!#\e(B
+
+@lisp
+(add-hook 'gnus-summary-mode-hook 'gnus-pick-mode)
+@end lisp
+
+@item
+\e$B%P%$%J%j!<%0%k!<%W$GFCJL$J%P%$%J%j!<%^%$%J!<%b!<%I$r;H$&;v$,$G$-$k$h$&$K\e(B
+\e$B$J$j$^$7$?\e(B (@pxref{Binary Groups})\e$B!#\e(B
+
+@item
+Group \e$B$,@^$j>v$_%H%T%C%/3,AX$K%0%k!<%WJ,$1$G$-$k$h$&$K$J$j$^$7$?\e(B 
+(@pxref{Group Topics})\e$B!#\e(B
+
+@lisp
+(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
+@end lisp
+
+@item
+Gnus \e$B$,<:GT%a!<%k$r:FAw$G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Summary Mail
+Commands})\e$B!#\e(B
+
+@item
+\e$B%0%k!<%W$,%9%3%"$r;}$D;v$,$G$-$k$h$&$K$J$j!"K,$l$k2s?t$K4p$E$$$FJB$SBX$($r\e(B
+\e$B$G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Group Score})\e$B!#\e(B
+
+@lisp
+(add-hook 'gnus-summary-exit-hook 'gnus-summary-bubble-group)
+@end lisp
+
+@item
+\e$B%0%k!<%W$K%W%m%;%90u$rIU$1$i$l$k$h$&$K$J$j!"%0%k!<%W$N$0%k!<%W$KL?Na$,<B9T\e(B
+\e$B$G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Marking Groups})\e$B!#\e(B
+
+@item
+\e$B;v<B>e$N%0%k!<%W$G%-%c%C%7%e$,$G$-$k$h$&$K$J$j$^$7$?!#\e(B
+
+@item
+@code{nndoc} \e$B$OA4$F$N=8G[G[Aw!"%a!<%k%\%C%/%9!"\e(Brnews \e$B%K%e!<%90l3g!"\e(B
+ClariNet \e$BC;<}=8!"$=$7$FA4$F$N$=$NB>$rM}2r$G$-$k$h$&$K$J$j$^$7$?\e(B 
+(@pxref{Document Groups})\e$B!#\e(B
+
+@item
+Gnus \e$B$O\e(B SOUP \e$B%Q%1%C%H$r:n@.\e(B/\e$BFI$_9~$_$r$9$k$?$a$N?7$7$$%P%C%/%(%s%I\e(B 
+(@code{nnsoup}) \e$B$r;}$C$F$$$^$9!#\e(B
+
+@item
+Gnus \e$B%-%c%C%7%e$,$:$C$HB.$/$J$j$^$7$?!#\e(B
+
+@item
+\e$B%0%k!<%W$rB?$/$N4p=`$K=>$C$FJB$SBX$($G$-$k$h$&$K$J$j$^$7$?\e(B 
+(@pxref{Sorting Groups})\e$B!#\e(B
+
+@item
+\e$B%"%I%l%9$N%j%9%H$H4|8B@Z$l>C5n$N;~4V$r@_Dj$9$k?7$7$$%0%k!<%W%Q%i%a!<%?$,\e(B
+\e$BF3F~$5$l$^$7$?\e(B (@pxref{Group Parameters})\e$B!#\e(B
+
+@item
+\e$BA4$F$N%U%)!<%^%C%H;XDj$,;H$o$l$k%U%'%$%9$r;XDj$G$-$k$h$&$K$J$j$^$7$?\e(B 
+(@pxref{Formatting Fonts})\e$B!#\e(B
+
+@item
+@kbd{M P} \e$BI{%^%C%W$K%W%m%;%90u$NIU$$$?5-;v$N@_Dj\e(B/\e$B:o=|\e(B/\e$B<B9T$N$?$a$N$$$/$D\e(B
+\e$B$+$NL?Na$,$"$j$^$9\e(B (@pxref{Setting Process Marks})\e$B!#\e(B
+
+@item
+\e$B9-$$HO0O$N4p=`$K4p$E$$$F!"35N,%P%C%U%!$,2DG=$J5-;v$NItJ,$NI=<($K@)8B$G$-\e(B
+\e$B$k$h$&$K$J$j$^$7$?!#$3$l$i$NL?Na$O\e(B @kbd{/} \e$BI{%^%C%W$N%-!<$K%P%$%s%I$5$l\e(B
+\e$B$F$$$^$9\e(B (@pxref{Limiting})\e$B!#\e(B
+
+@item
+@kbd{*} \e$BL?Na$K$h$C$F!"5-;v$r1JB3$K$9$k;v$,$G$-$k$h$&$K$J$j$^$7$?\e(B 
+(@pxref{Persistent Articles})\e$B!#\e(B
+
+@item
+\e$B5-;v$NMWAG$r1#$9A4$F$N4X?t$O@Z$jBX$(4X?t$K$J$j$^$7$?!#\e(B
+
+@item
+\e$B5-;v$N%X%C%@!<$,%\%?%s$K$9$k;v$,$G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Article
+Washing})\e$B!#\e(B
+
+@lisp
+(add-hook 'gnus-article-display-hook
+          'gnus-article-add-buttons-to-head)
+@end lisp
+
+@item
+\e$BA4$F$N%a!<%k%P%C%/%(%s%I$G\e(B @code{Message-ID} \e$B$K$h$k5-;v$N<hF@$r;HMQ$G$-\e(B
+\e$B$k$h$&$K$J$j$^$7$?!#\e(B
+
+@item
+\e$B=EJ#%a!<%k$rE,@Z$K07$&;v$,$G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Duplicates})\e$B!#\e(B
+
+@item
+\e$BA4$F$N35N,%b!<%IL?Na$,5-;v%P%C%U%!$+$iD>@\;HMQ$G$-$k$h$&$K$J$j$^$7$?\e(B 
+(@pxref{Article Keymap})\e$B!#\e(B
+
+@item
+\e$B%U%l!<%`$,\e(B @code{gnus-buffer-configuration} \e$B$NItJ,$K$J$k;v$,$G$-$^$9\e(B 
+(@pxref{Windows Configuration})\e$B!#\e(B
+
+@item
+\e$B%G!<%b%s$N%W%m%;%9$G%a!<%k$r:FAv::$9$k$3$H$,$G$-$k$h$&$K$J$j$^$7$?\e(B 
+(@pxref{Daemons})\e$B!#\e(B
+@iftex
+@iflatex
+\marginpar[\mbox{}\hfill\epsfig{figure=tmp/fseptember.ps,height=5cm}]{\epsfig{figure=tmp/fseptember.ps,height=5cm}}
+@end iflatex
+@end iftex
+
+@item
+Gnus \e$B$O%9%Q%`$r:,@d$d$7$K$9$k$?$a$K\e(B NoCeM \e$B%U%!%$%k$r;H$&;v$,$G$-$k$h$&$K\e(B
+\e$B$J$j$^$7$?\e(B (@pxref{NoCeM})\e$B!#\e(B
+
+@lisp
+(setq gnus-use-nocem t)
+@end lisp
+
+@item
+\e$B%0%k!<%W$r1J5W2D;k$K$9$k;v$,$G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Listing
+Groups})\e$B!#\e(B
+
+@lisp
+(setq gnus-permanently-visible-groups "^nnml:")
+@end lisp
+
+@item
+\e$B%+%9%?%^%$%:$r4JC1$K$9$k$?$a$KB?$/$N?7$7$$%U%C%/$,F3F~$5$l$^$7$?!#\e(B
+
+@item
+Gnus \e$B$O\e(B @code{Mail-Copies-To} \e$B%X%C%@!<$KCm0U$rJ'$&$h$&$K$J$j$^$7$?!#\e(B
+
+@item
+@code{References} \e$B%X%C%@!<$r=8$a$k;v$K$h$j%9%l%C%I$r=8$a$k;v$,$G$-$k$h$&\e(B
+\e$B$K$J$j$^$7$?\e(B (@pxref{Customizing Threading})\e$B!#\e(B
+
+@lisp
+(setq gnus-summary-thread-gathering-function
+      'gnus-gather-threads-by-references)
+@end lisp
+
+@item
+\e$B4{FI5-;v$O:F<hF@$rHr$1$k$?$a$KFCJL$J%P%C%/%m%0%P%C%U%!$KCy$a$i$l$k$h$&$K\e(B
+\e$B$J$j$^$7$?\e(B (@pxref{Article Backlog})\e$B!#\e(B
+
+@lisp
+(setq gnus-keep-backlog 50)
+@end lisp
+
+@item
+\e$B4JC1$J07$$$N$?$a$K!"8=:_$N5-;v$N$-$l$$$JJ#@=$,$$$D$bJL%P%C%U%!$KC_@Q$5$l\e(B
+\e$B$k$h$&$K$J$j$^$7$?!#\e(B
+
+@item
+Gnus \e$B$,$I$3$K5-;v$rJ]B8$9$k$+$rDs0F$G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Saving
+Articles})\e$B!#\e(B
+
+@item
+Gnus \e$B$OJ]B8$9$k$H$-$KF1$8$/$i$$$NB%?J$r$7$J$/$F$bNI$$$h$&$K$J$j$^$7$?\e(B 
+(@pxref{Saving Articles})\e$B!#\e(B
+
+@lisp
+(setq gnus-prompt-before-saving t)
+@end lisp
+
+@item
+@code{uu} \e$B$O5-;v$r<hF@$7$F$$$k4V$KHsF14|$GI|9f2=$5$l$?%U%!%$%k$r1\Mw$G$-\e(B
+\e$B$k$h$&$K$J$j$^$7$?\e(B (@pxref{Other Decode Variables})\e$B!#\e(B
+
+@lisp
+(setq gnus-uu-grabbed-file-functions 'gnus-uu-grab-view)
+@end lisp
+
+@item
+\e$B0zMQ$5$l$?J8>O$KBP$7$F!"5-;v%P%C%U%!$G$N@^$jJV$7$,E,@Z$KF0:n$9$k$h$&$K$J\e(B
+\e$B$j$^$7$?\e(B (@pxref{Article Washing})\e$B!#\e(B
+
+@item
+\e$B1#$5$l$?0zMQJ8$O1#$9;v$r@Z$jBX$($k%\%?%s$r2C$(!"$I$N$/$i$$$N0zMQJ8$r1#$9\e(B
+\e$B$+$r%+%9%?%^%$%:$G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Article Hiding})\e$B!#\e(B
+
+@lisp
+(setq gnus-cited-lines-visible 2)
+@end lisp
+
+@item
+\e$BB`6~$J%X%C%@!<$r1#$9;v$,$G$-$^$9\e(B (@pxref{Article Hiding})\e$B!#\e(B
+
+@lisp
+(add-hook 'gnus-article-display-hook
+          'gnus-article-hide-boring-headers t)
+@end lisp
+
+@item
+\e$B%9%3%"$N=i4|CM$,%a%K%e!<%P!<$+$i@_Dj$G$-$k$h$&$K$J$j$^$7$?!#\e(B
+
+@item
+\e$B=P$F9T$/5-;v$N99$J$k9=J8%A%'%C%/$,$G$-$k$h$&$K$J$j$^$7$?!#\e(B
+
+@end itemize
+
+
+@node Red Gnus
+@subsubsection Red Gnus
+
+Gnus 5.4/5.5 \e$B$N?7$7$$5!G=\e(B:
+
+@iftex
+@iflatex
+\gnusfig{-5.5cm}{-4cm}{\epsfig{figure=tmp/red.ps,height=20cm}}
+@end iflatex
+@end iftex
+
+@itemize @bullet
+
+@item
+@file{nntp.el} \e$B$OHsF14|$NN.57$G40A4$K2~D{$5$l$^$7$?!#\e(B
+
+@item
+\e$B%9%3%"IU$1$O\e(B @code{and}\e$B!"\e(B@code{or}\e$B!"\e(B@code{not} \e$B$N$h$&$JO@M}1i;;;R$H!"?F\e(B
+\e$B$N:FJ}8~$G<B9T$G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Advanced Scoring})\e$B!#\e(B
+
+@item
+\e$B5-;v$N@vBu>uBV$,5-;v%b!<%I9T$KI=<($5$l$k$h$&$K$J$j$^$7$?\e(B (@pxref{Misc
+Article})\e$B!#\e(B
+
+@item
+@file{gnus.el} \e$B$,B?$/$N>.$5$$%U%!%$%k$KJ,3d$5$l$^$7$?!#\e(B
+
+@item
+Message-ID \e$B$K4p$E$$$?!"=EJ#5-;v$NM^@)$,$J$5$l$k$h$&$K$J$j$^$7$?\e(B 
+(@pxref{Duplicate Suppression})\e$B!#\e(B
+
+@lisp
+(setq gnus-suppress-duplicates t)
+@end lisp
+
+@item
+\e$B$I$N%9%3%"$HE,1~%U%!%$%k$,%[!<%`$N%9%3%"$HE,1~%U%!%$%k$G$"$k$+$r;XDj$9$k\e(B 
+(@pxref{Home Score File}) \e$B?7$7$$JQ?t$,2C$($i$l$^$7$?!#\e(B
+
+@item
+@code{nndoc} \e$B$,4JC1$K3HD%2DG=$K$J$k$h$&$K2~D{$5$l$^$7$?\e(B (@pxref{Document
+Server Internals})\e$B!#\e(B
+
+@item
+\e$B%0%k!<%W$O?F$N%H%T%C%/$+$i%0%k!<%W%Q%i%a!<%?$r7Q>5$G$-$k$h$&$K$J$j$^$7$?\e(B 
+(@pxref{Topic Parameters})\e$B!#\e(B
+
+@item
+\e$B5-;vJT=8$,2~D{$5$l!"<B:]$K;HMQ2DG=$K$J$j$^$7$?!#\e(B
+
+@item
+\e$B=pL>$,$b$C$HCNE*$JJ}K!$GG'<1$5$l$k$h$&$K$J$j$^$7$?\e(B (@pxref{Article
+Signature})\e$B!#\e(B
+
+@item
+\e$B35N,%T%C%/%b!<%I$,$b$C$H\e(B @code{nn} \e$B$N$h$&$K$J$j$^$7$?!#9T?t$,I=<($5$l$F!"\e(B
+\e$BL?Na\e(B @kbd{.} \e$B$,5-;v$r<h$k$?$a$K;H$&;v$,$G$-$k$h$&$K$J$j$^$7$?\e(B 
+(@code{Pick and Read})\e$B!#\e(B
+
+@item
+\e$B$"$k%5!<%P!<$+$iJL$N%5!<%P!<$X\e(B @file{.newsrc.eld} \e$B$r0\F0$9$kL?Na$,2C$($i\e(B
+\e$B$l$^$7$?\e(B (@pxref{Changing Servers})\e$B!#\e(B
+
+@item
+\e$B:#$d!"%P%C%U%!$N9T$r:n@.$9$k$H$-$K!"M^@)$5$l$k\e(B ``\e$B$*$b$7$m$/$J$$\e(B'' \e$BItJ,$r\e(B
+\e$B;XDj$9$kJ}K!$,$"$j$^$9\e(B (@pxref{Advanced Formatting})\e$B!#\e(B
+
+@item
+\e$B%0%k!<%W%P%C%U%!$G$N$$$/$D$+$NL?Na$O\e(B @kbd{M-C-_} \e$B$G85$KLa$9;v$,$G$-$k$h\e(B
+\e$B$&$K$J$j$^$7$?\e(B (@pxref{Undo})\e$B!#\e(B
+
+@item
+\e$B?7$7$$%9%3%"$N7?\e(B @code{w} \e$B$r;H$&;v$G!"8l$K%9%3%"IU$1$r$9$k;v$,2DG=$K$J$j\e(B
+\e$B$^$7$?\e(B (@pxref{Score File Format})\e$B!#\e(B
+
+@item
+\e$BI=Bj$K\e(B1\e$B8l\e(B1\e$B8l$r4p$K$7$FE,1~%9%3%"$r$G$-$k$h$&$K$J$j$^$7$?\e(B 
+(@pxref{Adaptive Scoring})\e$B!#\e(B
+
+@lisp
+(setq gnus-use-adaptive-scoring '(word))
+@end lisp
+
+@item
+\e$B%9%3%"$,IeGT$G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Score Decays})\e$B!#\e(B
+
+@lisp
+(setq gnus-decay-scores t)
+@end lisp
+
+@item
+\e$BF|IU$N%X%C%@!<$K@55,I=8=$r;H$C$F%9%3%"IU$1$r<B9T$G$-$k$h$&$K$J$j$^$7$?!#\e(B
+\e$BF|IU$O$^$:C;=L\e(B ISO 8601 \e$BMM<0$G@55,2=$5$l$^$9\e(B (@pxref{Score File Format})\e$B!#\e(B
+
+@item
+\e$B4pK\%5!<%P!<$N5-;v$K4X$9$kA4$F$N%G!<%?$r<h$j=|$/L?Na$,2C$($i$l$^$7$?\e(B 
+(@pxref{Changing Servers})\e$B!#\e(B
+
+@item
+\e$BJ8=q$N=89g$rFI$`$?$a$N?7$7$$L?Na\e(B (@code{nndoc} \e$B$H\e(B @code{nnvirtual} \e$B$N>e\e(B
+\e$B$G\e(B) \e$B$,2C$($i$l$^$7$?\e(B---@kbd{M-C-d} (@pxref{Really Various Summary
+Commands})\e$B!#\e(B
+
+@item
+\e$B%W%m%;%90u$N@_Dj$,\e(B push \e$B$H\e(B pop \e$B$G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Setting
+Process Marks})\e$B!#\e(B
+
+@item
+\e$B?7$7$$%a!<%k$+$i%K%e!<%9$X$N%P%C%/%(%s%I$,\e(B NNTP \e$B%5!<%P!<$,Ej9F$r5v2D$7$F\e(B
+\e$B$$$J$$>l9g$G$b!"Ej9F$G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Mail-To-News
+Gateways})\e$B!#\e(B
+
+@item
+\e$B%&%'%V8!:w%(%s%8%s\e(B (@dfn{DejaNews}\e$B!"\e(B@dfn{Alta Vista}\e$B!"\e(B@dfn{InReference}) 
+\e$B$+$i$N8!:w7k2L$rFI$`?7$7$$%P%C%/%(%s%I$,2C$($i$l$^$7$?\e(B (@pxref{Web
+Searches})\e$B!#\e(B
+
+@item
+\e$BI8=`$NJB$SBX$(4X?t$r;H$C$F%0%k!<%W$NCf$N%H%T%C%/$rJB$SBe$($9$k;v$,$G$-!"\e(B
+\e$B$=$l$>$l$N%H%T%C%/$,FHN)$7$FJB$SBX$($G$-$k$h$&$K$J$j$^$7$?\e(B (@pxref{Topic
+Sorting})\e$B!#\e(B
+
+@item
+\e$B%0%k!<%W$N0lItJ,$,FHN)$7$FJB$SBX$($G$-$k$h$&$K$J$j$^$7$?\e(B 
+(@code{Sorting})\e$B!#\e(B
+
+@item
+\e$B%-%c%C%7%e$5$l$?5-;v$,%0%k!<%W$KF~$l$i$l$k$h$&$K$J$j$^$7$?\e(B 
+(@pxref{Summary Generation Commands})\e$B!#\e(B
+@iftex
+@iflatex
+\marginpar[\mbox{}\hfill\epsfig{figure=tmp/fred.ps,width=3cm}]{\epsfig{figure=tmp/fred.ps,width=3cm}}
+@end iflatex
+@end iftex
+
+@item
+\e$B%9%3%"%U%!%$%k$,$b$C$H?.Mj$G$-$k=gHV$GE,MQ$G$-$k$h$&$K$J$j$^$7$?\e(B 
+(@pxref{Score Variables})\e$B!#\e(B
+
+@item
+\e$B%a!<%k%a%C%;!<%8$,$I$3$K9T$/$+$NJs9p$r:n@.$9$k;v$,$G$-$k$h$&$K$J$j$^$7$?\e(B 
+(@pxref{Splitting Mail})\e$B!#\e(B
+
+@item
+\e$BF~$C$FMh$?%a!<%k$rJ]B8$9$kA0$K$,$i$/$?$r<h$j=|$/%U%C%/$H4X?t$,$b$C$HDI2C\e(B
+\e$B$5$l$^$7$?\e(B (@pxref{Washing Mail})\e$B!#\e(B
+
+@item
+\e$B6/D4J8$,E,@Z$K%U%)%s%H$,JQ99$5$l$k$h$&$K$J$j$^$7$?\e(B:
+
+@lisp
+(add-hook 'gnus-article-display-hook 
+          'gnus-article-emphasize)
+@end lisp
+
+@end itemize
+
+
+@node Quassia Gnus
+@subsubsection Quassia Gnus
+
+Gnus 5.6 \e$B$N?7$7$$5!G=\e(B:
+
+@itemize @bullet
+
+@item
+Gnus \e$B$r%*%U%i%$%s%K%e!<%9%j!<%@!<$H$7$F;H$&?75!G=$,2C$($i$l$^$7$?!#2a>j\e(B
+\e$B$J$[$I$N?7$7$$L?Na$H%b!<%I$,DI2C$5$l$^$7$?!#40A4$JOC$KIU$$$F$O\e(B 
+@pxref{Gnus Unplugged} \e$B$r8+$F2<$5$$!#\e(B
+
+@item
+@code{nndraft} \e$B%P%C%/%(%s%I$,La$C$F$-$^$7$?$,!"0MA3$H$O0c$&$h$&$KF0:n$9\e(B
+\e$B$k$h$&$K$J$j$^$7$?!#A4$F$N%a%C%;!<%8%P%C%U%!$O\e(B @code{nndraft} \e$B%0%k!<%W$N\e(B
+\e$B5-;v$G$b$"$j!"$=$l$O<+F0E*$K:n@.$5$l$^$9!#\e(B
+
+@item
+@code{gnus-alter-header-function} \e$B$,%X%C%@!<$NCM$rJQ$($k$?$a$K;H$o$l$k$h\e(B
+\e$B$&$K$J$j$^$7$?!#\e(B
+
+@item
+@code{gnus-summary-goto-article} \e$B$,\e(B Message-ID \e$B$r<u$1IU$1$k$h$&$K$J$j$^\e(B
+\e$B$7$?!#\e(B
+
+@item
+\e$B%j!<%8%g%s$N30$N%a%C%;!<%8$NK\J8$NJ8>O$r>C5n$9$k$?$a$N?7$7$$%a%C%;!<%8L?\e(B
+\e$BNa$,$"$j$^$9\e(B: @kbd{C-c C-v}\e$B!#\e(B
+
+@item
+@kbd{C-u C-c C-c} \e$B$K$h$C$F\e(B @code{nnvirtual} \e$B%0%k!<%W$r@8@.$7$F$$$k%0%k!<\e(B
+\e$B%W$KEj9F$G$-$k$h$&$K$J$j$^$7$?!#\e(B
+
+@item
+@code{nntp-rlogin-program}---\e$B%+%9%?%^%$%:$r4JC1$K$9$k$?$a$N?7$7$$JQ?t$G\e(B
+\e$B$9!#\e(B
+
+@item
+@code{gnus-article-edit-mode} \e$B$N\e(B @code{C-u C-c C-c} \e$B$O5-;v%P%C%U%!$N:F%O\e(B
+\e$B%$%i%$%H$r6X;_$9$k$h$&$K$J$j$^$7$?!#\e(B
+
+@item
+@code{gnus-boring-article-headers} \e$B$K?7$7$$MWAG$,$"$j$^$9\e(B---
+@code{long-to}\e$B!#\e(B
+
+@item
+@kbd{M-i} \e$B%7%s%\%k@\F,0z?tL?Na$,$"$j$^$9!#>\:Y$O\e(B "Symbolic Prefixes" \e$B$N\e(B
+\e$BItJ,$r8+$F2<$5$$!#\e(B
+
+@item
+\e$B35N,%P%C%U%!$N\e(B @kbd{L} \e$B$H\e(B @kbd{I} \e$B$O%U%!%$%k\e(B "all.SCORE" \e$B$K%9%3%"K!B'$r\e(B
+\e$B2C$($k$?$a$K%7%s%\%k@\F,0z?t\e(B @kbd{a} \e$B$r<u$1IU$1$k$h$&$K$J$j$^$7$?!#\e(B
+
+@item
+\e$BJQ?t\e(B @code{gnus-simplify-subject-functions} \e$B$K$h$jC1=c2=$r$b$C$H@)8f$G$-\e(B
+\e$B$k$h$&$K$J$j$^$7$?!#\e(B
+
+@item
+@kbd{A T}---\e$B8=:_$N%9%l%C%I$r<hF@$9$k$?$a$N?7$7$$L?Na$G$9!#\e(B
+
+@item
+@kbd{/ T}---\e$B8=:_$N%9%l%C%I$r@)8B$K4^$a$k$?$a$N?7$7$$L?Na$G$9!#\e(B
+
+@item
+@kbd{M-RET} \e$B$O0zMQJ8$r;_$a$k$?$a$N?7$7$$%a%C%;!<%8L?Na$G$9!#\e(B
+
+@item
+@samp{\\1} \e$BI=8=$,\e(B @code{nnmail-split-methods} \e$B$GM-8z$K$J$j$^$7$?!#\e(B
+
+@item
+\e$B4X?t\e(B @code{custom-face-lookup} \e$B$,<h$j=|$+$l$^$7$?!#$"$J$?$N=i4|2=%U%!%$\e(B
+\e$B%k$G$3$N4X?t$r;H$C$F$$$k$N$J$i!"Be$o$j$K\e(B @code{face-spec-set} \e$B$r;H$&$h$&\e(B
+\e$B$K=q$-D>$5$J$1$l$P$J$j$^$;$s!#\e(B
+
+@item
+\e$BEj9F<h$j>C$7$O8=:_$NA*BrJ}K!$r;H$&$h$&$K$J$j$^$7$?!#%7%s%\%k@\F,<-\e(B 
+@kbd{a} \e$B$OIaDL$NEj9FJ}K!$r6/@)$7$^$9!#\e(B
+
+@item
+M******** sm*rtq**t*s \e$B$rE,@Z$JJ8>O$KK]0F$9$k?7$7$$L?Na$,$"$j$^$9\e(B---
+@kbd{W d}\e$B!#\e(B
+
+@item
+@code{nntp} \e$B$N$h$j4JC1$J%G%P%C%0$N$?$a$K!"\e(B@code{nntp-record-commands} \e$B$r\e(B 
+@code{nil} \e$B$G$J$$CM$K@_Dj$9$k;v$,$G$-$^$9!#\e(B
+
+@item
+@code{nntp} \e$B$O\e(B @file{~/.authinfo} \e$B$r;H$&$h$&$K$J$j!"$3$l$O\e(B @file{.netrc} 
+\e$B$N$h$&$J%U%!%$%k$G!"$I$3$G$I$N$h$&$K\e(B @sc{authinfo} \e$B$r\e(B @sc{nntp} \e$B%5!<%P!<\e(B
+\e$B$KAw$k$+$r@)8f$9$k$?$a$N$b$N$G$9!#\e(B
+
+@item
+\e$B35N,%P%C%U%!$N%0%k!<%W%Q%i%a!<%?$rJT=8$9$k$?$a$NL?Na$,2C$($i$l$^$7$?!#\e(B
+
+@item
+\e$B%a!<%k$,$I$3$KJ,3d$5$l$?$+$NMzNr$r;HMQ2DG=$K$J$j$^$7$?!#\e(B
+
+@item
+\e$B?7$7$$5-;vF|IUL?Na$,2C$($i$l$^$7$?\e(B---@code{article-date-iso8601}\e$B!#\e(B
+
+@item
+@code{gnus-score-thread-simplify} \e$B$r@_Dj$9$k;v$K$h$j%9%l%C%I$r:n@.$7$F$$\e(B
+\e$B$k$H$-$OI=Bj$,C1=c2=$5$l$k$h$&$K$J$j$^$7$?!#\e(B
+
+@item
+\e$B%a%C%;!<%8$G0zMQ$r$9$k$?$a$N?7$7$$4X?t$,2C$($i$l$^$7$?\e(B---
+@code{message-cite-original-without-signature}\e$B!#\e(B
+
+@item
+@code{article-strip-all-blank-lines}---\e$B?7$7$$5-;vL?Na$G$9!#\e(B
+
+@item
+\e$B5-;v$N=*$o$j$^$G$r@Z$k?7$7$$%a%C%;!<%8L?Na$,2C$($i$l$^$7$?!#\e(B
+
+@item
+\e$BJQ?t\e(B @code{gnus-adaptive-word-minimum} \e$B$r;H$&;v$K$h$j:G>.8BE,1~%9%3%"$r\e(B
+\e$B;XDj$9$k;v$,$G$-$^$9!#\e(B
+
+@item
+\e$BL?Na\e(B @code{gnus-start-date-timer} \e$B$K$h$j\e(B ``\e$B2a<:F|IU\e(B'' \e$B5-;v%X%C%@!<$,7QB3\e(B
+\e$BE*$K99?7$5$l$k$h$&$K$J$j$^$7$?!#\e(B
+
+@item
+\e$B%&%'%V\e(B listserv \e$B%"!<%+%$%V$,\e(B @code{nnlistserv} \e$B%P%C%/%(%s%I$K$h$jFI$`;v\e(B
+\e$B$,$G$-$k$h$&$K$J$j$^$7$?!#\e(B
+
+@item
+\e$B8E$$\e(B dejanews \e$B%"!<%+%$%V$,\e(B @code{nnweb} \e$B$+$iFI$`;v$,$G$-$k$h$&$K$J$j$^$7\e(B
+\e$B$?!#\e(B
+
+@end itemize
+
+
+
+@node Newest Features
+@subsection \e$B:G?7$N5!G=\e(B
+@cindex todo
+
+@dfn{todo list} \e$B$H$7$F$bCN$i$l$F$$$^$9!#<!$N@iG/:W$^$G$K$O3N<B$K<BAu$5$l\e(B
+\e$B$k$G$7$g$&!#\e(B
+
+\e$B62$l$F2<$5$$!#Hs>o$K62$l$F2<$5$$!#\e(B
+
+(\e$B$3$N0lMw$K8=$o$l$F$$$k5!G=$OI,$:$7$b;d$,$=$l$r<B:]$K<BAu$7$h$&$H7h$a$?\e(B
+\e$B$H$$$&$o$1$G$O$"$j$^$;$s!#$=$l$O;d$,$*$b$7$m$=$&$@$J!"$H;W$C$?$H$$$&$@$1\e(B
+\e$B$G$9!#\e(B)
+
+(\e$B$O$$!"$3$l$O<B:]$N!":GM%@h$+$i$=$N<!$X$N\e(B todo list \e$B$G$9!#\e(B)
+
+@itemize @bullet
+
+@item
+Native @sc{mime} support is something that should be done.
+
+@item
+Really do unbinhexing.
+
+@item
+ I would like the zombie-page to contain an URL to the source of the
+latest version of gnus or some explanation on where to find it.
+
+@item
+ A way to continue editing the latest Message composition.
+
+@item
+ http://www.sonicnet.com/feature/ari3/
+
+@item
+ facep is not declared.
+
+@item
+ Include a section in the manual on why the number of articles
+isn't the same in the group buffer and on the SPC prompt.
+
+@item
+ Interacting with rmail fcc isn't easy.
+
+@item
+@example
+ Hypermail:
+<URL:http://www.falch.no/people/pepper/DSSSL-Lite/archives/>
+<URL:http://www.eit.com/software/hypermail/hypermail.html>
+<URL:http://homer.ncm.com/>
+<URL:http://www.yahoo.com/Computers_and_Internet/Internet/World_Wide_Web/HTML_Converters/>
+http://www.uwsg.indiana.edu/hypermail/linux/kernel/9610/index.html
+<URL:http://union.ncsa.uiuc.edu/HyperNews/get/www/html/converters.html>
+http://www.miranova.com/gnus-list/
+
+@end example
+
+@item
+@samp{^-- } is made into - in LaTeX.
+
+@item
+ gnus-kill is much slower than it was in GNUS 4.1.3.
+
+@item
+ when expunging articles on low score, the sparse nodes keep hanging on?
+@item
+ starting the first time seems to hang Gnus on some systems.  Does
+NEWGROUPS answer too fast?
+@item
+ nndir doesn't read gzipped files.
+@item
+ FAQ doesn't have an up node?
+@item
+ when moving mail from a procmail spool to the crash-box,
+the crash-box is only appropriate to one specific group.
+@item
+ `t' `t' makes X-Faces disappear.
+@item
+ nnmh-be-safe means that crossposted articles will
+be marked as unread.
+@item
+ Orphan score entries don't show on "V t" score trace
+@item
+ when clearing out data, the cache data should also be reset.
+@item
+ rewrite gnus-summary-limit-children to be non-recursive
+to avoid exceeding lisp nesting on huge groups.
+@item
+ expunged articles are counted when computing scores.
+@item
+ implement gnus-batch-brew-soup
+@item
+ ticked articles aren't easy to read in pick mode -- `n' and
+stuff just skips past them.  Read articles are the same.
+@item
+ topics that contain just groups with ticked
+articles aren't displayed.
+@item
+ nndoc should always allocate unique Message-IDs.
+@item
+ If there are mail groups the first time you use Gnus, Gnus'll
+make the mail groups killed.
+@item
+ no "no news is good news" when using topics.
+@item
+ when doing crosspost marking, the cache has to be consulted
+and articles have to be removed.
+@item
+ nnweb should fetch complete articles when they are split into several
+parts.
+@item
+ scoring on head immediate doesn't work.
+@item
+ finding short score file names takes forever.
+@item
+ canceling articles in foreign groups.
+@item
+ nntp-open-rlogin no longer works.
+@item
+ C-u C-x C-s (Summary) switches to the group buffer.
+@item
+ move nnmail-split-history out to the backends.
+@item
+ nnweb doesn't work properly.
+@item
+ using a virtual server name as `gnus-select-method' doesn't work?
+@item
+ when killing/yanking a group from one topic to another in a slave, the
+master will yank it first to one topic and then add it to another.
+Perhaps.
+
+@item
+ warn user about `=' redirection of a group in the active file?
+@item
+ really unbinhex binhex files.
+@item
+ take over the XEmacs menubar and offer a toggle between the XEmacs
+bar and the Gnus bar.
+@item
+@example
+ push active file and NOV file parsing down into C code.
+`(canonize-message-id id)'
+`(mail-parent-message-id references n)'
+`(parse-news-nov-line &optional dependency-hashtb)'
+`(parse-news-nov-region beg end &optional dependency-hashtb fullp)'
+`(parse-news-active-region beg end hashtb)'
+
+@end example
+
+@item
+ nnml .overview directory with splits.
+@item
+ asynchronous cache
+@item
+ postponed commands.
+@item
+ the selected article show have its Subject displayed in its summary line.
+@item
+ when entering groups, get the real number of unread articles from
+the server?
+@item
+ sort after gathering threads -- make false roots have the
+headers of the oldest orphan with a 0 article number?
+@item
+ nndoc groups should inherit the score files of their parents?  Also
+inherit copy prompts and save files.
+@item
+ command to start up Gnus (if not running) and enter a mail mode buffer.
+@item
+ allow editing the group description from the group buffer
+for backends that support that.
+@item
+gnus-hide,show-all-topics
+@item
+ groups and sub-topics should be allowed to mingle inside each topic,
+and not just list all subtopics at the end.
+@item
+ a command to remove all read articles that are not needed to connect
+threads -- `gnus-summary-limit-to-sparse-unread'?
+@item
+ a variable to turn off limiting/cutting of threads in the tree buffer.
+@item
+ a variable to limit how many files are uudecoded.
+@item
+ add zombie groups to a special "New Groups" topic.
+@item
+ server mode command: close/open all connections
+@item
+ put a file date in gnus-score-alist and check whether the file
+has been changed before using it.
+@item
+ on exit from a digest group, go to the next article in the parent group.
+@item
+ hide (sub)threads with low score.
+@item
+ when expiring, remove all marks from expired articles.
+@item
+ gnus-summary-limit-to-body
+@item
+ a regexp alist that says what level groups are to be subscribed
+on.  Eg. -- `(("nnml:" . 1))'.
+@item
+ easier interface to nnkiboze to create ephemeral groups that
+contain groups that match a regexp.
+@item
+ allow newlines in <URL:> urls, but remove them before using
+the URL.
+@item
+ If there is no From line, the mail backends should fudge one from the
+"From " line.
+@item
+ fuzzy simplifying should strip all non-alpha-numerical info
+from subject lines.
+@item
+ gnus-soup-brew-soup-with-high-scores.
+@item
+ nntp-ping-before-connect
+@item
+ command to check whether NOV is evil.  "list overview.fmt".
+@item
+ when entering a group, Gnus should look through the score
+files very early for `local' atoms and set those local variables.
+@item
+ message annotations.
+@item
+ topics are always yanked before groups, and that's not good.
+@item
+ (set-extent-property extent 'help-echo "String to display in minibuf")
+to display help in the minibuffer on buttons under XEmacs.
+@item
+ allow group line format spec to say how many articles there
+are in the cache.
+@item
+ AUTHINFO GENERIC
+@item
+ support qmail maildir spools
+@item
+ `run-with-idle-timer' in gnus-demon.
+@item
+ stop using invisible text properties and start using overlays instead
+@item
+ C-c C-f C-e to add an Expires header.
+@item
+ go from one group to the next; everything is expunged; go to the
+next group instead of going to the group buffer.
+@item
+ gnus-renumber-cache -- to renumber the cache using "low" numbers.
+@item
+ record topic changes in the dribble buffer.
+@item
+ `nnfolder-generate-active-file' should look at the folders it
+finds and generate proper active ranges.
+@item
+ nneething-look-in-files-for-article-heads variable to control
+whether nneething should sniff all files in the directories.
+@item
+ gnus-fetch-article -- start Gnus, enter group, display article
+@item
+ gnus-dont-move-articles-to-same-group variable when respooling.
+@item
+ when messages are crossposted between several auto-expirable groups,
+articles aren't properly marked as expirable.
+@item
+ nneething should allow deletion/moving.
+@item
+ TAB on the last button should go to the first button.
+@item
+ if the car of an element in `mail-split-methods' is a function,
+and the function returns non-nil, use that as the name of the group(s) to
+save mail in.
+@item
+ command for listing all score files that have been applied.
+@item
+ a command in the article buffer to return to `summary' config.
+@item
+ `gnus-always-post-using-current-server' -- variable to override
+`C-c C-c' when posting.
+@item
+ nnmail-group-spool-alist -- says where each group should use
+as a spool file.
+@item
+ when an article is crossposted to an auto-expirable group, the article
+should be marker as expirable.
+@item
+ article mode command/menu for "send region as URL to browser".
+@item
+ on errors, jump to info nodes that explain the error.  For instance,
+on invalid From headers, or on error messages from the nntp server.
+@item
+ when gathering threads, make the article that has no "Re: " the parent.
+Also consult Date headers.
+@item
+ a token in splits to call shrink-window-if-larger-than-buffer
+@item
+ `1 0 A M' to do matches on the active hashtb.
+@item
+ duplicates -- command to remove Gnus-Warning header, use the read
+Message-ID, delete the "original".
+@item
+ when replying to several messages at once, put the "other" message-ids
+into a See-Also header.
+@item
+ support setext: URL:http://www.bsdi.com/setext/
+@item
+ support ProleText: <URL:http://proletext.clari.net/prole/proletext.html>
+@item
+ when browsing a foreign server, the groups that are already subscribed
+should be listed as such and not as "K".
+@item
+ generate font names dynamically.
+@item
+ score file mode auto-alist.
+@item
+ allow nndoc to change/add/delete things from documents.  Implement
+methods for each format for adding an article to the document.
+@item
+ `gnus-fetch-old-headers' `all' value to incorporate
+absolutely all headers there is.
+@item
+ function like `|', but concatenate all marked articles
+and pipe them to the process.
+@item
+ cache the list of killed (or active) groups in a separate file.  Update
+the file whenever we read the active file or the list
+of killed groups in the .eld file reaches a certain length.
+@item
+ function for starting to edit a file to put into
+the current mail group.
+@item
+ score-find-trace should display the total score of the article.
+@item
+ "ghettozie" -- score on Xref header and nix it out after using it
+to avoid marking as read in other groups it has been crossposted to.
+@item
+ look at procmail splitting.  The backends should create
+the groups automatically if a spool file exists for that group.
+@item
+ function for backends to register themselves with Gnus.
+@item
+ when replying to several process-marked articles,
+have all the From end up in Cc headers?  Variable to toggle.
+@item
+ command to delete a crossposted mail article from all
+groups it has been mailed to.
+@item
+ `B c' and `B m' should be crosspost aware.
+@item
+ hide-pgp should also hide PGP public key blocks.
+@item
+ Command in the group buffer to respool process-marked groups.
+@item
+ `gnus-summary-find-matching' should accept
+pseudo-"headers" like "body", "head" and "all"
+@item
+ When buttifying <URL: > things, all white space (including
+newlines) should be ignored.
+@item
+ Process-marking all groups in a topic should process-mark
+groups in subtopics as well.
+@item
+ Add non-native groups to the list of killed groups when killing them.
+@item
+ nntp-suggest-kewl-config to probe the nntp server and suggest
+variable settings.
+@item
+ add edit and forward secondary marks.
+@item
+ nnml shouldn't visit its .overview files.
+@item
+ allow customizing sorting within gathered threads.
+@item
+ `B q' shouldn't select the current article.
+@item
+ nnmbox should support a newsgroups file for descriptions.
+@item
+ allow fetching mail from several pop servers.
+@item
+ Be able to specify whether the saving commands save the original
+or the formatted article.
+@item
+ a command to reparent with the child process-marked (cf. `T ^'.).
+@item
+ I think the possibility to send a password with nntp-open-rlogin
+should be a feature in Red Gnus.
+@item
+ The `Z n' command should be possible to execute from a mouse click.
+@item
+ more limiting functions -- date, etc.
+@item
+ be able to limit on a random header; on body; using reverse matches.
+@item
+ a group parameter (`absofucking-total-expiry') that will make Gnus expire
+even unread articles.
+@item
+ a command to print the article buffer as postscript.
+@item
+ variable to disable password fetching when opening by nntp-open-telnet.
+@item
+ manual: more example servers -- nntp with rlogin, telnet
+@item
+ checking for bogus groups should clean topic alists as well.
+@item
+ canceling articles in foreign groups.
+@item
+ article number in folded topics isn't properly updated by
+Xref handling.
+@item
+ Movement in the group buffer to the next unread group should go to the
+next closed topic with unread messages if no group can be found.
+@item
+ Extensive info pages generated on the fly with help everywhere --
+in the "*Gnus edit*" buffers, for instance.
+@item
+ Topic movement commands -- like thread movement.  Up, down, forward, next.
+@item
+ a way to tick/mark as read Gcc'd articles.
+@item
+ a way to say that all groups within a specific topic comes
+from a particular server?  Hm.
+@item
+ `gnus-article-fill-if-long-lines' -- a function to fill
+the article buffer if there are any looong lines there.
+@item
+ `T h' should jump to the parent topic and fold it.
+@item
+ a command to create an ephemeral nndoc group out of a file,
+and then splitting it/moving it to some other group/backend.
+@item
+ a group parameter for nnkiboze groups that says that
+all kibozed articles should be entered into the cache.
+@item
+ It should also probably be possible to delimit what
+`gnus-jog-cache' does -- for instance, work on just some groups, or on
+some levels, and entering just articles that have a score higher than
+a certain number.
+@item
+ nnfolder should append to the folder instead of re-writing
+the entire folder to disk when accepting new messages.
+@item
+ allow all backends to do the proper thing with .gz files.
+@item
+ a backend for reading collections of babyl files nnbabylfolder?
+@item
+ a command for making the native groups into foreign groups.
+@item
+ server mode command for clearing read marks from all groups
+from a server.
+@item
+ when following up multiple articles, include all To, Cc, etc headers
+from all articles.
+@item
+ a command for deciding what the total score of the current
+thread is.  Also a way to highlight based on this.
+@item
+ command to show and edit group scores
+@item
+ a gnus-tree-minimize-horizontal to minimize tree buffers
+horizontally.
+@item
+ command to generate nnml overview file for one group.
+@item
+ `C-u C-u a' -- prompt for many crossposted groups.
+@item
+ keep track of which mail groups have received new articles (in this session).
+Be able to generate a report and perhaps do some marking in the group
+buffer.
+@item
+ gnus-build-sparse-threads to a number -- build only sparse threads
+that are of that length.
+@item
+ have nnmh respect mh's unseen sequence in .mh_profile.
+@item
+ cache the newsgroups descriptions locally.
+@item
+ asynchronous posting under nntp.
+@item
+ be able to control word adaptive scoring from the score files.
+@item
+ a variable to make `C-c C-c' post using the "current" select method.
+@item
+ `limit-exclude-low-scored-articles'.
+@item
+ if `gnus-summary-show-thread' is a number, hide threads that have
+a score lower than this number.
+@item
+ split newsgroup subscription variable up into "order" and "method".
+@item
+ buttonize ange-ftp file names.
+@item
+ a command to make a duplicate copy of the current article
+so that each copy can be edited separately.
+@item
+ nnweb should allow fetching from the local nntp server.
+@item
+ record the sorting done in the summary buffer so that
+it can be repeated when limiting/regenerating the buffer.
+@item
+ nnml-generate-nov-databses should generate for
+all nnml servers.
+@item
+ when the user does commands in the group buffer, check
+the modification time of the .newsrc.eld file and use
+ask-user-about-supersession-threat.  Also warn when trying
+to save .newsrc.eld and it has changed.
+@item
+ M-g on a topic will display all groups with 0 articles in
+the topic.
+@item
+ command to remove all topic stuff.
+@item
+ allow exploding incoming digests when reading incoming mail
+and splitting the resulting digests.
+@item
+ nnsoup shouldn't set the `message-' variables.
+@item
+ command to nix out all nnoo state information.
+@item
+ nnmail-process-alist that calls functions if group names
+matches an alist -- before saving.
+@item
+ use buffer-invisibility-spec everywhere for hiding text.
+@item
+ variable to activate each group before entering them
+to get the (new) number of articles.  `gnus-activate-before-entering'.
+@item
+ command to fetch a Message-ID from any buffer, even
+starting Gnus first if necessary.
+@item
+ when posting and checking whether a group exists or not, just
+ask the nntp server instead of relying on the active hashtb.
+@item
+ buttonize the output of `C-c C-a' in an apropos-like way.
+@item
+ `G p' should understand process/prefix, and allow editing
+of several groups at once.
+@item
+ command to create an ephemeral nnvirtual group that
+matches some regexp(s).
+@item
+ nndoc should understand "Content-Type: message/rfc822" forwarded messages.
+@item
+ it should be possible to score "thread" on the From header.
+@item
+ hitting RET on a "gnus-uu-archive" pseudo article should unpack it.
+@item
+ `B i' should display the article at once in the summary buffer.
+@item
+ remove the "*" mark at once when unticking an article.
+@item
+ `M-s' should highlight the matching text.
+@item
+ when checking for duplicated mails, use Resent-Message-ID if present.
+@item
+ killing and yanking groups in topics should be better.  If killing one copy
+of a group that exists in multiple topics, only that copy should
+be removed.  Yanking should insert the copy, and yanking topics
+should be possible to be interspersed with the other yankings.
+@item
+ command for enter a group just to read the cached articles.  A way to say
+"ignore the nntp connection; just read from the cache."
+@item
+ `X u' should decode base64 articles.
+@item
+ a way to hide all "inner" cited text, leaving just the most
+recently cited text.
+@item
+ nnvirtual should be asynchronous.
+@item
+ after editing an article, gnus-original-article-buffer should
+be invalidated.
+@item
+ there should probably be a way to make Gnus not connect to the
+server and just read the articles in the server
+@item
+ allow a `set-default' (or something) to change the default
+value of nnoo variables.
+@item
+ a command to import group infos from a .newsrc.eld file.
+@item
+ groups from secondary servers have the entire select method
+listed in each group info.
+@item
+ a command for just switching from the summary buffer to the group
+buffer.
+@item
+ a way to specify that some incoming mail washing functions
+should only be applied to some groups.
+@item
+ Message `C-f C-t' should ask the user whether to heed
+mail-copies-to: never.
+@item
+ new group parameter -- `post-to-server' that says to post
+using the current server.  Also a variable to do the same.
+@item
+ the slave dribble files should autosave to the slave file names.
+@item
+ a group parameter that says what articles to display on group entry, based
+on article marks.
+@item
+ a way to visually distinguish slave Gnusae from masters.  (Whip instead
+of normal logo?)
+@item
+ Use DJ Bernstein "From " quoting/dequoting, where applicable.
+@item
+ Why is hide-citation-maybe and hide-citation different?  Also
+clear up info.
+@item
+ group user-defined meta-parameters.
+
+
+
+From: John Griffith <griffith@@sfs.nphil.uni-tuebingen.de>
+@item
+ I like the option for trying to retrieve the FAQ for a group and I was
+thinking it would be great if for those newsgroups that had archives
+you could also try to read the archive for that group.  Part of the
+problem is that archives are spread all over the net, unlike FAQs.
+What would be best I suppose is to find the one closest to your site.
+
+In any case, there is a list of general news group archives at @*
+ftp://ftp.neosoft.com/pub/users/claird/news.lists/newsgroup_archives.html
+
+
+
+
+@item
+@example
+From: Jason L Tibbitts III <tibbs@@hpc.uh.edu>
+(add-hook 'gnus-select-group-hook
+  (lambda ()
+    (gnus-group-add-parameter group
+       (cons 'gnus-group-date-last-entered (list (current-time-string))))))
+
+(defun gnus-user-format-function-d (headers)
+  "Return the date the group was last read."
+  (cond ((car (gnus-group-get-parameter gnus-tmp-group 'gnus-group-date-last-entered)))
+      (t "")))
+@end example
+
+@item
+ tanken var at n\e,Ae\e(Br du bruker `gnus-startup-file' som prefix (FOO) til \e,Ae\e(B lete
+opp en fil FOO-SERVER, FOO-SERVER.el, FOO-SERVER.eld, kan du la den v\e,Af\e(Bre en
+liste hvor du bruker hvert element i listen som FOO, istedet.  da kunne man
+hatt forskjellige serveres startup-filer forskjellige steder.
+
+
+@item
+LMI> Well, nnbabyl could alter the group info to heed labels like
+LMI> answered and read, I guess.
+
+It could also keep them updated (the same for the Status: header of
+unix mbox files).
+
+They could be used like this:
+
+
+@example
+`M l <name> RET' add label <name> to current message.
+`M u <name> RET' remove label <name> from current message.
+`/ l <expr> RET' limit summary buffer according to <expr>.
+
+<expr> would be a boolean expression on the labels, e.g.
+
+`/ l bug & !fixed RET'
+@end example
+
+would show all the messages which are labeled `bug' but not labeled
+`fixed'.
+
+One could also imagine the labels being used for highlighting, or
+affect the summary line format.
+
+
+@item
+Sender: abraham@@dina.kvl.dk
+
+I'd like a gnus-find-file which work like find file, except that it
+would recognize things that looks like messages or folders:
+
+- If it is a directory containing numbered files, create an nndir
+summary buffer.
+
+- For other directories, create a nneething summary buffer.
+
+- For files matching "\\`From ", create a nndoc/mbox summary.
+
+- For files matching "\\`BABYL OPTIONS:", create a nndoc/baby summary.
+
+- For files matching "\\`[^ \t\n]+:", create an *Article* buffer.
+
+- For other files, just find them normally.
+
+I'd like `nneething' to use this function, so it would work on a
+directory potentially containing mboxes or babyl files.
+
+@item
+Please send a mail to bwarsaw@@cnri.reston.va.us (Barry A. Warsaw) and
+tell him what you are doing.
+
+@item
+Currently, I get prompted:
+
+decend into sci?
+- type y
+decend into sci.something ?
+- type n
+decend into ucd?
+
+The problem above is that since there is really only one subsection of
+science, shouldn't it prompt you for only descending sci.something?  If
+there was a sci.somethingelse group or section, then it should prompt
+for sci? first the sci.something? then sci.somethingelse?...
+
+@item
+Ja, det burde v\e,Af\e(Bre en m\e,Ae\e(Bte \e,Ae\e(B si slikt.  Kanskje en ny variabel?
+`gnus-use-few-score-files'?  S\e,Ae\e(B kunne score-regler legges til den
+"mest" lokale score-fila.  F. eks. ville no-gruppene betjenes av
+"no.all.SCORE", osv.
+
+@item
+What i want is for Gnus to treat any sequence or combination of the following
+as a single spoiler warning and hide it all, replacing it with a "Next Page"
+button:
+
+
+^L's
+
+more than n blank lines
+
+more than m identical lines
+(which should be replaced with button to show them)
+
+any whitespace surrounding any of the above
+
+
+@item
+Well, we could allow a new value to `gnus-thread-ignore-subject' --
+`spaces', or something.  (We could even default to that.)  And then
+subjects that differ in white space only could be considered the
+"same" subject for threading purposes.
+
+@item
+Modes to preprocess the contents (e.g. jka-compr) use the second form
+"(REGEXP FUNCTION NON-NIL)" while ordinary modes (e.g. tex) use the first
+form "(REGEXP . FUNCTION)", so you could use it to distinguish between
+those two types of modes. (auto-modes-alist, insert-file-contents-literally.)
+
+@item
+ Under XEmacs -- do funny article marks:
+tick - thumb tack
+killed - skull
+soup - bowl of soup
+score below - dim light bulb
+score over - bright light bulb
+
+@item
+Yes. I think the algorithm is as follows:
+
+@example
+Group-mode
+
+   show-list-of-articles-in-group
+        if (key-pressed == SPACE)
+                if (no-more-articles-in-group-to-select)
+                        if (articles-selected)
+                                start-reading-selected-articles;
+                        junk-unread-articles;
+                        next-group;
+                 else
+                        show-next-page;
+
+         else if (key-pressed = '.')
+                if (consolidated-menus)         # same as hide-thread in Gnus
+                        select-thread-under-cursor;
+                else
+                        select-article-under-cursor;
+
+
+Article-mode
+        if (key-pressed == SPACE)
+                if (more-pages-in-article)
+                        next-page;
+                else if (more-selected-articles-to-read)
+                        next-article;
+                else
+                        next-group;
+@end example
+
+@item
+My precise need here would have been to limit files to Incoming*.
+One could think of some `nneething-only-files' variable, but I guess
+it would have been unacceptable if one was using many unrelated such
+nneething groups.
+
+A more useful approach would be to, in response to the `G D' prompt, be
+allowed to say something like: `~/.mail/Incoming*', somewhat limiting
+the top-level directory only (in case directories would be matched by
+the wildcard expression).
+
+@item
+It would be nice if it also handled
+
+        <URL:news://sunsite.auc.dk/>
+
+which should correspond to `B nntp RET sunsite.auc.dk' in *Group*.
+
+
+@item
+
+  Take a look at w3-menu.el in the Emacs-W3 distribution - this works out
+really well.  Each menu is 'named' by a symbol that would be on a
+gnus-*-menus (where * would be whatever, but at least group, summary, and
+article versions) variable.
+
+  So for gnus-summary-menus, I would set to '(sort mark dispose ...)
+
+  A value of '1' would just put _all_ the menus in a single 'GNUS' menu in
+the main menubar.  This approach works really well for Emacs-W3 and VM.
+
+
+@item
+ nndoc should take care to create unique Message-IDs for all its
+articles.
+@item
+ gnus-score-followup-article only works when you have a summary buffer
+active.  Make it work when posting from the group buffer as well.
+(message-sent-hook).
+@item
+ rewrite gnus-demon to use run-with-idle-timers.
+
+@item
+ * Enhancements to Gnus:
+
+  Add two commands:
+
+  * gnus-servers (gnus-start-server-buffer?)--enters Gnus and goes
+    straight to the server buffer, without opening any connections to
+    servers first.
+
+  * gnus-server-read-server-newsrc--produces a buffer very similar to
+    the group buffer, but with only groups from that server listed;
+    quitting this buffer returns to the server buffer.
+
+@item
+ add a command to check the integrity of an nnfolder folder --
+go through the article numbers and see that there are no duplicates,
+and stuff.
+
+@item
+ `unsmileyfy-buffer' to undo smileification.
+
+@item
+ a command to give all relevant info on an article, including all
+secondary marks.
+
+@item
+ when doing `-request-accept-article', the backends should do
+the nnmail duplicate checking.
+
+@item
+ allow `message-signature-file' to be a function to return the
+value of the signature file.
+
+@item
+ In addition, I would love it if I could configure message-tab so that it
+could call `bbdb-complete-name' in other headers.  So, some sort of
+interface like
+
+(setq message-tab-alist
+      '((message-header-regexp message-expand-group)
+        ("^\\(To\\|[cC]c\\|[bB]cc\\)"  bbdb-complete-name)))
+
+then you could run the relevant function to complete the information in
+the header
+
+@item
+ cache the newsgroups file locally to avoid reloading it all the time.
+
+@item
+ a command to import a buffer into a group.
+
+@item
+ nnweb should allow fetching by Message-ID from servers.
+
+@item
+ point in the article buffer doesn't always go to the
+beginning of the buffer when selecting new articles.
+
+@item
+ a command to process mark all unread articles.
+
+@item
+ `gnus-gather-threads-by-references-and-subject' -- first
+do gathering by references, and then go through the dummy roots and
+do more gathering by subject.
+
+@item
+ gnus-uu-mark-in-numerical-order -- process mark articles in
+article numerical order.
+
+@item
+ (gnus-thread-total-score
+ (gnus-id-to-thread (mail-header-id (gnus-summary-article-header))))
+bind to a key.
+
+@item
+ sorting by score is wrong when using sparse threads.
+
+@item
+ a command to fetch an arbitrary article -- without having to be
+in the summary buffer.
+
+@item
+ a new nncvs backend.  Each group would show an article, using
+version branches as threading, checkin date as the date, etc.
+
+@item
+ http://www.dejanews.com/forms/dnsetfilter_exp.html ?
+This filter allows one to construct advance queries on the Dejanews
+database such as specifying start and end dates, subject, author,
+and/or newsgroup name.
+
+@item
+ new Date header scoring type -- older, newer
+
+@item
+ use the summary toolbar in the article buffer.
+
+@item
+ a command to fetch all articles that are less than X days old.
+
+@item
+ in pick mode, `q' should save the list of selected articles in the
+group info.  The next time the group is selected, these articles
+will automatically get the process mark.
+
+@item
+ Isn't it possible to (also?) allow M-^ to automatically try the
+default server if it fails on the current server?  (controlled by a
+user variable, (nil, t, 'ask)).
+
+@item
+ make it possible to cancel articles using the select method for the
+current group.
+
+@item
+ `gnus-summary-select-article-on-entry' or something.  It'll default
+to t and will select whatever article decided by `gnus-auto-select-first'.
+
+@item
+ a new variable to control which selection commands should be unselecting.
+`first', `best', `next', `prev', `next-unread', `prev-unread' are
+candidates.
+
+@item
+ be able to select groups that have no articles in them
+to be able to post in them (using the current select method).
+
+@item
+ be able to post via DejaNews.
+
+@item
+ `x' should retain any sortings that have been performed.
+
+@item
+ allow the user to specify the precedence of the secondary marks.  Also
+allow them to be displayed separately.
+
+@item
+ gnus-summary-save-in-pipe should concatenate the results from
+the processes when doing a process marked pipe.
+
+@item
+ a new match type, like Followup, but which adds Thread matches on all
+articles that match a certain From header.
+
+@item
+ a function that can be read from kill-emacs-query-functions to offer
+saving living summary buffers.
+
+@item
+ a function for selecting a particular group which will contain
+the articles listed in a list of article numbers/id's.
+
+@item
+ a battery of character translation functions to translate common
+Mac, MS (etc) characters into ISO 8859-1.
+
+@example
+(defun article-fix-m$word ()
+  "Fix M$Word smartquotes in an article."
+  (interactive)
+  (save-excursion
+    (let ((buffer-read-only nil))
+      (goto-char (point-min))
+      (while (search-forward "\221" nil t)
+        (replace-match "`" t t))
+      (goto-char (point-min))
+      (while (search-forward "\222" nil t)
+        (replace-match "'" t t))
+      (goto-char (point-min))
+      (while (search-forward "\223" nil t)
+        (replace-match "\"" t t))
+      (goto-char (point-min))
+      (while (search-forward "\224" nil t)
+        (replace-match "\"" t t)))))
+@end example
+
+@item
+@example
+ (add-hook 'gnus-exit-query-functions
+'(lambda ()
+   (if (and (file-exists-p nnmail-spool-file)
+            (> (nnheader-file-size nnmail-spool-file) 0))
+       (yes-or-no-p "New mail has arrived.  Quit Gnus anyways? ")
+       (y-or-n-p "Are you sure you want to quit Gnus? "))))
+@end example
+
+@item
+ allow message-default-headers to be a function.
+
+@item
+ new Date score match types -- < > = (etc) that take floating point
+numbers and match on the age of the article.
+
+@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
+>  > > buffer in the frame that it was called from =:-O
+>
+>  > Hm.  How do you start up Gnus?  From the toolbar or with
+>  > `M-x gnus-other-frame'?
+>
+>    I normally start it up from the toolbar; at
+> least that's the way I've caught it doing the
+> deed before.
+@end example
+
+@item
+ all commands that react to the process mark should push
+the current process mark set onto the stack.
+
+@item
+ gnus-article-hide-pgp
+Selv ville jeg nok ha valgt \e,Ae\e(B slette den dersom teksten matcher
+@example
+"\\(This\s+\\)?[^ ]+ has been automatically signed by"
+@end example
+og det er maks hundre tegn mellom match-end og ----linja.  Men -det-
+er min type heuristikk og langt fra alles.
+
+@item
+ `gnus-subscribe-sorted' -- insert new groups where they would have been
+sorted to if `gnus-group-sort-function' were run.
+
+@item
+ gnus-(group,summary)-highlight should respect any `face' text props set
+on the lines.
+
+@item
+ use run-with-idle-timer for gnus-demon instead of the
+home-brewed stuff for better reliability.
+
+@item
+ add a way to select which NoCeM type to apply -- spam, troll, etc.
+
+@item
+ nndraft-request-group should tally autosave files.
+
+@item
+ implement nntp-retry-on-break and nntp-command-timeout.
+
+@item
+ gnus-article-highlight-limit that says when not to highlight (long)
+articles.
+
+@item
+ (nnoo-set SERVER VARIABLE VALUE)
+
+@item
+ nn*-spool-methods
+
+@item
+ interrupitng agent fetching of articles should save articles.
+
+@item
+ command to open a digest group, and copy all the articles there to the
+current group.
+
+@item
+ a variable to disable article body highlights if there's more than
+X characters in the body.
+
+@item
+ handle 480/381 authinfo requests separately.
+
+@item
+ include the texi/dir file in the distribution.
+
+@item
+ format spec to "tab" to a position.
+
+@item
+ Move all prompting to the new `M-n' default style.
+
+@item
+ command to display all dormant articles.
+
+@item
+ gnus-auto-select-next makeover -- list of things it should do.
+
+@item
+ a score match type that adds scores matching on From if From has replied
+to something someone else has said.
+
+@item
+ Read Netscape discussion groups:
+snews://secnews.netscape.com/netscape.communicator.unix
+
+@item
+One command to edit the original version if an article, and one to edit
+the displayed version.
+
+@item
+@kbd{T v} -- make all process-marked articles the children of the
+current article.
+
+@item
+Switch from initial text to the new default text mechanism.
+
+@item
+How about making it possible to expire local articles?  Will it be
+possible to make various constraints on when an article can be
+expired, e.g. (read), (age > 14 days), or the more interesting (read
+& age > 14 days)?
+
+@item
+New limit command---limit to articles that have a certain string
+in the head or body.
+
+@item
+Allow breaking lengthy NNTP commands.
+
+@item
+gnus-article-highlight-limit, to disable highlighting in big articles.
+
+@item
+Editing an article should put the article to be edited
+in a special, unique buffer.
+
+@item
+A command to send a mail to the admin-address group param.
+
+@item
+A Date scoring type that will match if the article
+is less than a certain number of days old.
+
+@item
+New spec: %~(tab 56) to put point on column 56
+
+@item
+Allow Gnus Agent scoring to use normal score files.
+
+@item
+Rething the Agent active file thing.  `M-g' doesn't update the active
+file, for instance.
+
+@item
+With dummy roots, `^' and then selecing the first article
+in any other dummy thread will make gnus highlight the
+dummy root instead of the first article.
+
+@item
+Propagate all group properties (marks, article numbers, etc) up to the
+topics for displaying.
+
+@item
+`n' in the group buffer with topics should go to the next group
+with unread articles, even if that group is hidden in a topic.
+
+@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
+@end itemize
+
+@iftex
+
+@page
+@node The Manual
+@section \e$B%^%K%e%"%k\e(B
+@cindex colophon
+@cindex manual
+
+\e$B$3$N%^%K%e%"%k$O\e(B TeXinfo \e$B%U%!%$%k$+$i:n@.$5$l!"$=$l$+$i\e(B @code{texi2dvi}
+@iflatex
+\e$B$b$7$/$O!"\e(BLars \e$B$5$s$N:n$i$l$?\e(B Texinfo to \LaTeX \e$BJQ49$rDL$j!"$=$l$+$i!"\e(B
+@code{latex} \e$B$H\e(B @code{dvips} 
+@end iflatex
+\e$B$r<B9T$7$F!"<j85$K$"$k$b$K$J$j$^$7$?!#\e(B
+
+\e$B0J2<$N=,47$,MQ$$$i$l$^$7$?\e(B:
+
+@enumerate
+\e$B$3$l$O\e(B @kbd{\e$B%-!<BG80\e(B} \e$B$G$9!#\e(B
+
+@item
+\e$B$3$l$O\e(B @file{\e$B%U%!%$%k\e(B} \e$B$G$9!#\e(B
+
+@item
+\e$B$3$l$O\e(B @code{\e$B%7%s%\%k\e(B} \e$B$G$9!#\e(B
+
+@end enumerate
+
+\e$B$G$9$+$i!";d$,\e(B ``@code{flargnoze} \e$B$r\e(B @samp{yes} \e$B$K@_Dj$9$k\e(B'' \e$B$H8@$C$?$H\e(B
+\e$B$-$O!"<!$N$h$&$J0UL#$G$9\e(B:
+
+@lisp
+(setq flargnoze "yes")
+@end lisp
+
+\e$B$b$7!";d$,\e(B ``@code{flargnoze} \e$B$r\e(B @code{yes} \e$B$K@_Dj$9$k\e(B'' \e$B$H8@$C$?$H$-$O!"\e(B
+\e$B<!$N$h$&$J0UL#$G$9\e(B:
+
+@lisp
+(setq flumphel 'yes)
+@end lisp
+
+@samp{yes} \e$B$H\e(B @code{yes} \e$B$O\e(B2\e$B$D$N\e(B @emph{\e$BA4$/\e(B} \e$B0c$C$?$b$N$G$9\e(B---\e$B@dBP$K:.F1\e(B
+\e$B$7$J$$$G$/$@$5$$!#\e(B
+
+@iflatex
+@c @head
+\e$B$b$A$m$s!"$3$N%^%K%e%"%k$NA4$F$O=EBg$J6=L#$N$"$k$3$H$G$9$N$G!"$"$J$?$OA4\e(B
+\e$B$FFI$`$Y$-$G$9!#2?EY$b!#$7$+$7!"%^%K%e%"%k$r<P$aFI$_$7$?$$$N$G$"$l$P!"$=\e(B
+\e$B$3$N%^!<%8%s$K$"$k%L!<$NF,$r8+$k$Y$-$G$7$g$&\e(B---\e$B$=$l$O$=$3$G5DO@$5$l$F$$\e(B
+\e$B$k$N$,;D$j$N$b$N$h$j=EMW$G$"$k$H$$$&$3$H$G$9!#\e(B (\e$B0lJ}!"A4$F$,L58B$K=EMW$N\e(B
+\e$B$G$"$l$P!"$I$&$9$l$P$=$l$h$j$b$C$H=EMW$J$b$N$,$G$-$k$N$G$7$g$&!)\e(B \e$B$3$N@$\e(B
+\e$B3&$N!"IT;W5D$N\e(B1\e$B$D$G$7$g$&!"$?$V$s!#\e(B)
+@end iflatex
+
+@end iftex
+
+
+@page
+@node Terminology
+@section \e$BMQ8l\e(B
+
+@cindex terminology
+@table @dfn
+
+@item \e$B%K%e!<%9\e(B (news)
+@cindex news
+\e$B$3$l$O$"$J$?$,$=$N$?$a$K$3$N$b$N$r;H$$$?$$$H;W$C$F$$$k$b$N$G$9\e(B---\e$B%K%e!<\e(B
+\e$B%9$rFI$`;v$G$9!#%K%e!<%9$O0lHLE*$K$O6a$/$N\e(B @sc{nntp} \e$B%5!<%P!<$+$i<hF@$5\e(B
+\e$B$l!"IaDL$OA4$F$N?M$K9-$/MxMQ2DG=$J$b$N$G$9!#$b$7%K%e!<%9$rEj9F$9$l$P!"A4\e(B
+\e$B@$3&$,$"$J$?$,$A$g$&$I=q$$$?$b$N$rFI$`2DG=@-$,$"$j!"$=$l$i$OA4$F$$$?$:$i$C\e(B
+\e$B$]$/%/%9%/%9>P$o$l$k$G$7$g$&!#$"$J$?$NCN$i$J$$$H$3$m$G!#\e(B
+
+@item \e$B%a!<%k\e(B (mail)
+@cindex mail
+\e$B$"$J$?$K8D?ME*$KG[Aw$5$l$k$b$NA4$F$,%a!<%k$G$9!#$$$/$D$+$N%K%e!<%9\e(B/\e$B%a!<\e(B
+\e$B%k%j!<%@!<\e(B (gnus \e$B$N$h$&$J\e(B) \e$B$O%a!<%k$H%K%e!<%9$N0c$$$r$\$d$1$5$;$^$9$,!"\e(B
+\e$B$=$3$K$O0c$$$OB8:_$7$^$9!#%a!<%k$O;dE*$G$9!#%K%e!<%9$O8xE*$G$9!#%a!<%k$r\e(B
+\e$BAw?.$9$k;v$OEj9F$G$O$J$/!"JV?.$O%U%)%m!<%"%C%W$G$O$"$j$^$;$s!#\e(B
+
+@item \e$BJV?.\e(B (reply)
+@cindex reply
+\e$B$"$J$?$,FI$s$G$$$k$b$N$r=q$$$??M$K%a!<%k$rAw$k;v$G$9!#\e(B
+
+@item \e$B%U%)%m!<%"%C%W\e(B (follow up)
+@cindex follow up
+\e$B$"$J$?$,FI$s$G$$$k5-;v$K1~Ez$7$F8=:_$N%K%e!<%9%0%k!<%W$K5-;v$rEj9F$9$k;v\e(B
+\e$B$G$9!#\e(B
+
+@item \e$B%P%C%/%(%s%I\e(B (backend)
+@cindex backend
+Gnus \e$B$O%K%e!<%9$H%a!<%k$NN>J}$N$$$m$$$m$J%P%C%/%(%s%I$,M?$($?5-;v$rF@$^\e(B
+\e$B$9!#\e(BGnus \e$B$O!"$$$o$f$k2<$K2#$?$o$C$F$$$k%a%G%#%"$r07$&;v$O$7$^$;$s\e(B---\e$B$3$l\e(B
+\e$B$O$9$Y$F%P%C%/%(%s%I$K$h$C$F$J$5$l$^$9!#\e(B
+
+@item \e$B4pK\\e(B (native)
+@cindex native
+Gnus \e$B$O$$$D$b0l$D$NJ}K!\e(B (\e$B$H%P%C%/%(%s%I\e(B) \e$B$r%K%e!<%9$rF@$k$?$a$N\e(B @dfn{\e$B4p\e(B
+\e$BK\\e(B}\e$B!"$b$7$/$O=i4|@_Dj\e(B \e$B$H$7$F;H$$$^$9!#\e(B
+
+@item \e$B30It\e(B (foreign)
+@cindex foreign
+\e$BF1;~$KG$0U$N?t$N30It%0%k!<%W$r3hF0>uBV$K$9$k$3$H$b$G$-$^$9!#$3$l$i$O%K%e!<\e(B
+\e$B%9$r<hF@$9$k$?$a$N!"4pK\$G$J$/!"\e(B2\e$BHVL\$G$b$J$$%P%C%/%(%s%I$r;H$&%0%k!<%W\e(B
+\e$B$G$9!#\e(B
+
+@item \e$BFsHVL\\e(B (secondary)
+@cindex secondary
+2\e$BHVL\$N%P%C%/%(%s%I$O!"4pK\$H30It$N4V$/$i$$$K$"$k%P%C%/%(%s%I$G!"$[$H$s\e(B
+\e$B$I4pK\$HF1$8$h$&$KF0:n$9$k$b$N$G$9!#\e(B
+
+@item \e$B5-;v\e(B (article)
+@cindex article
+\e$B%K%e!<%9$H$7$FEj9F$5$l$?%a%C%;!<%8$G$9!#\e(B
+
+@item \e$B%a!<%k%a%C%;!<%8\e(B (mail message)
+@cindex mail message
+\e$B%a!<%k$GAw$i$l$?%a%C%;!<%8$G$9!#\e(B
+
+@item \e$B%a%C%;!<%8\e(B
+@cindex message
+\e$B%a!<%k%a%C%;!<%8$b$7$/$O%K%e!<%95-;v$G$9!#\e(B
+
+@item \e$B%X%C%I\e(B (head)
+\e$B%a%C%;!<%8$N:G>eIt$G!"G'>Z>pJs\e(B (\e$BEy\e(B) \e$B$,F~$l$i$l$F$$$k$H$3$m$G$9!#\e(B
+
+@item \e$BK\BN\e(B (body)
+@cindex body
+\e$B5-;v$N;D$j$NItJ,$G$9!#%X%C%I$G$J$$$b$N$O$9$Y$FK\BN$G$9!#\e(B
+
+@item \e$B%X%C%@!<\e(B (header)
+@cindex header
+\e$B5-;v$N%X%C%I$+$i$N9T$G$9!#\e(B
+
+@item \e$B%X%C%@!<72\e(B (headers)
+@cindex headers
+\e$B$=$N$h$&$J9T$N=89g$b$7$/$O!"%X%C%I$N=89g$G$9!#$b$7$/$O!"\e(B@sc{nov} \e$B9T$N=8\e(B
+\e$B9g$G$9!#\e(B
+
+@item @sc{nov}
+@cindex nov
+Gnus \e$B$,%0%k!<%W$KF~$k$H!"%0%k!<%W$NA4$F$NL$FI5-;v$N%X%C%@!<$r%P%C%/%(%s\e(B
+\e$B%I$K5a$a$^$9!#$[$H$s$I$N%5!<%P!<$O\e(B News OverView \e$BMM<0$,;HMQ2DG=$G!"$=$l\e(B
+\e$B$OIaDL$N\e(B @sc{head} \e$BMM<0$h$j$b$C$H<jC;$G$b$C$HB.$/FI$s$G2r@O\e(B (parse) \e$B$9$k\e(B
+\e$B$3$H$,$G$-$^$9!#\e(B
+
+@item \e$B%l%Y%k\e(B (level)
+@cindex levels
+\e$B$=$l$>$l$N%0%k!<%W$O2?$i$+$N\e(B @dfn{\e$B%l%Y%k\e(B} \e$B$+B>$N$b$N\e(B (1-9) \e$B$G9XFI$5$l$F\e(B
+\e$B$$$^$9!#Dc$$%l%Y%k$N$b$N$O9b$$%l%Y%k$N$b$N$h$j\e(B ``\e$B$h$j\e(B'' \e$B9XFI$5$l$F$$$^$9!#\e(B
+\e$B<B:]$N$H$3$m!"%l%Y%k\e(B 1-5 \e$B$N%0%k!<%W$O\e(B @dfn{\e$B9XFI\e(B}; 6-7 \e$B$O\e(B @dfn{\e$BL$9XFI\e(B}; 8 
+\e$B$O\e(B @dfn{\e$B%>%s%S\e(B}; 9 \e$B$O\e(B @dfn{\e$B@Z$i$l$?\e(B} \e$B$H8+$J$5$l$^$9!#%0%k!<%W$r%j%9%H$7$?\e(B
+\e$B$j!"?7$7$$%0%k!<%W$rAv::$7$?$j$9$kL?Na$O$9$Y$F?tCM@\F,0z?t$r\e(B @dfn{\e$BF0:n%l\e(B
+\e$B%Y%k\e(B} \e$B$H$7$F;H$$$^$9!#\e(B
+
+@item \e$B@Z$i$l$?%0%k!<%W\e(B (killed groups)
+@cindex killed groups
+\e$B@Z$i$l$?%0%k!<%W$N>pJs$OC_@Q$5$l$?$j99?7$5$l$?$j$7$^$;$s$N$G!"@Z$i$l$?%0\e(B
+\e$B%k!<%W$r9XFI$5$l$?%0%k!<%W$h$j4JC1$K07$($k$h$&$K$J$j$^$9!#\e(B
+
+@item \e$B%>%s%S%0%k!<%W\e(B (zombie groups)
+@cindex zombie groups
+\e$B$[$H$s$I@Z$i$l$?%0%k!<%W$HF1$8$G!"$=$l$h$j>/$7;`$s$G$$$k$@$1$G$9!#\e(B
+
+@item \e$B8=>u%U%!%$%k\e(B (active file)
+@cindex active file
+\e$B%K%e!<%9%5!<%P!<$O$I$N5-;v$r1?$s$G$$$k$+!"$I$N%0%k!<%W$,B8:_$9$k$+$r5-O?\e(B
+\e$B$7$F$*$+$J$1$l$P$J$j$^$;$s!#A4$F$N$3$N>pJs$O8=>u%U%!%$%k$KC_@Q$5$l!"$=$l\e(B
+\e$B$O$"$J$?$,A[A|$9$k$h$&$KHf3SE*Bg$-$$$G$9!#\e(B
+
+@item \e$B56%0%k!<%W\e(B (bogus groups)
+@cindex bogus groups
+\e$B%U%!%$%k\e(B @file{.newsrc} \e$B$KB8:_$9$k%0%k!<%W$G$9$,!"%5!<%P!<$KCN$i$l$F$$$J\e(B
+\e$B$$%0%k!<%W\e(B (\e$B$9$J$o$A!"$=$l$O8=>u%U%!%$%k$K$"$j$^$;$s\e(B) \e$B$O\e(B @emph{\e$B56%0%k!<\e(B
+\e$B%W\e(B} \e$B$G$9!#$3$l$O!"$*$=$i$/\e(B (\e$B$9$G$K\e(B) \e$B$=$N%0%k!<%W$OB8:_$7$F$$$J$$$N$G$7$g\e(B
+\e$B$&!#\e(B
+
+@item \e$B3hF02=\e(B (activating)
+@cindex activating groups
+\e$B%5!<%P!<$K%0%k!<%W$N>pJs$r?R$M!"L$FI5-;v$N?t$r1i;;$9$k9T0Y$O\e(B @dfn{\e$B%0%k!<\e(B
+\e$B%W$r3hF02=$9$k\e(B} \e$B$H8F$P$l$F$$$^$9!#Hs3hF0%0%k!<%W$O%0%k!<%W%P%C%U%!$K\e(B 
+@samp{*} \e$B$H$H$b$K0lMwI=<($5$l$^$9!#\e(B
+
+@item \e$B%5!<%P!<\e(B (server)
+@cindex server
+\e$B@\B3$7$F!"%K%e!<%9\e(B (\e$B$b$7$/$O%a!<%k\e(B) \e$B$r<hF@$9$k;v$N$G$-$k%0%k!<%W$G$9!#\e(B
+
+@item \e$BA*BrJ}K!\e(B (select method)
+@cindex select method
+\e$B%P%C%/%(%s%I!"%5!<%P!<$H!";v<B>e$N%5!<%P!<@_Dj$r;XDj$9$k9=B$$G$9!#\e(B
+
+@item \e$B;v<B>e$N%5!<%P!<\e(B (virtual server)
+@cindex virtual server
+\e$BL?L>$5$l$?A*BrJ}K!$G$9!#A*BrJ}K!$O\e(B (\e$BJ*M}E*\e(B) \e$B%5!<%P!<$K@\B3$9$k$?$a$KI,MW\e(B
+\e$B$JJ}K!$rDj5A$9$k$?$a!"J*;v$rA4BN$H$7$F<u$1$k$N$O;v<B>e$N%5!<%P!<$K$J$j$^\e(B
+\e$B$9!#\e(B
+
+@item \e$B@vBu\e(B (washing)
+@cindex washing
+\e$B%P%C%U%!$r;}$C$F$-$F!"2?$i$+$N<oN`$NA*JL5!$K$+$1$k;v$G$9!#7k2L$O\e(B (\e$BB?$+$l\e(B
+\e$B>/$J$+$l\e(B) \e$B85$N$b$N$h$j$b$h$j$-$l$$$G4n$P$7$$$b$N$K$J$k$G$7$g$&!#\e(B
+
+@item \e$B0l;~%0%k!<%W\e(B (ephemeral groups)
+@cindex ephemeral groups
+\e$B$?$$$F$$$N%0%k!<%W$O$I$N5-;v$rFI$s$@$+$N%G!<%?$rC_@Q$7$^$9!#\e(B@dfn{\e$B0l;~\e(B} 
+\e$B%0%k!<%W$O%G!<%?$,N/$a$i$l$J$$%0%k!<%W$G$9\e(B---\e$B%0%k!<%W$r=P$k$H!"$=$l$OE7\e(B
+\e$B6u$K>C$(5n$j$^$9!#\e(B
+
+@item \e$B8GDj%0%k!<%W\e(B (solid groups)
+@cindex solid groups
+\e$B$3$l$O0l;~%0%k!<%W$NH?BP$G$9!#%0%k!<%W%P%C%U%!$K5s$2$i$l$F$$$kA4$F$N%0%k!<\e(B
+\e$B%W$O8GDj%0%k!<%W$G$9!#\e(B
+
+@item \e$B$^$P$i5-;v\e(B (sparse articles)
+@cindex sparse articles
+@code{gnus-build-sparse-threads} \e$B$N5!G=$r;HMQ$7$F$$$k$H$-$O!"35N,%P%C%U%!\e(B
+\e$B$K5-;v$NF~$l>l=j$,I=<($5$l$^$9!#\e(B
+
+@item \e$B%9%l%C%I:n$j\e(B (threading)
+@cindex threading
+\e$B$=$l$,1~Ez$7$?5-;v$ND>8e$K$=$N5-;v$X$N1~Ez$rCV$/$3$H$G$9\e(B---\e$B3,AXE*N.57$G!#\e(B
+
+@item \e$B:,\e(B (root)
+@cindex root
+@cindex thread root
+\e$B%9%l%C%I$N:G=i$N5-;v$,:,$G$9!#$=$l$O%9%l%C%I$NA4$F$N5-;v$NAD@h$G$9!#\e(B
+
+@item \e$B?F\e(B (parent)
+@cindex parent
+\e$B1~Ez$N$"$k5-;v$G$9!#\e(B
+
+@item \e$B;R\e(B (child)
+@cindex child
+\e$B0c$C$?5-;v\e(B---\e$B$=$N?F\e(B \e$B$K1~Ez$9$k5-;v$G$9!#\e(B
+
+@item \e$B=8G[\e(B (digest)
+@cindex digest
+\e$BJ#?t$N%a%C%;!<%8$r0l$D$N%U%!%$%k$K=8$a$?$b$N$G$9!#$b$C$H$bIaDL$N=8G[MM<0\e(B
+\e$B$O\e(B RFC1153 \e$B$G;XDj$5$l$F$$$^$9!#\e(B
+
+@end table
+
+
+@page
+@node Customization
+@section \e$B%+%9%?%^%$%:\e(B
+@cindex gerenal customization
+
+\e$BA4$F$NJQ?t$O$3$N%^%K%e%"%k$N$I$3$+JL$N$H$3$m$GE,@Z$K@bL@$5$l$F$$$^$9!#$3\e(B
+\e$B$NItJ,$OHs>o$KNI$/$"$k>u67$G$I$N$h$&$K\e(B gnus \e$B$r%+%9%?%^%$%:$9$l$PNI$$$+$N\e(B
+\e$BAm9gE,;X<(@h$rM?$($k$?$a$K9M0F$5$l$F$$$^$9!#\e(B
+
+@menu
+* Slow/Expensive Connection:: \e$B%m!<%+%k$N\e(B Emacs \e$B$rN)$A>e$2$F!"\e(B
+                              \e$BB>$N$H$3$m$+$i%K%e!<%9$rF@$k;v$,$G$-$k!#\e(B
+* Slow Terminal Connection::  \e$B1s3V\e(B Emacs \e$B$r<B9T$9$k!#\e(B
+* Little Disk Space::         \e$BBg$-$J5/F0%U%!%$%k$r;}$D;v$O$^$:$$!#\e(B
+* Slow Machine::              \e$BB.$$5!3#$rGc$*$&$H46$8$k$G$"$m$&!#\e(B
+@end menu
+
+
+@node Slow/Expensive Connection
+@subsection \e$BCY$$\e(B/\e$B9b$$\e(B @sc{nntp} \e$B@\B3\e(B
+
+\e$B$b$7\e(B Emacs \e$B$r%m!<%+%k$N%^%7%s$G<B9T$7$F$$$F!"Hs>o$K:Y$$@~$N8~$3$&$N%^%7\e(B
+\e$B%s$+$i%K%e!<%9$r<hF@$7$F$$$k$N$G$"$l$P!"\e(Bgnus \e$B$,\e(B @sc{nntp} \e$B%5!<%P!<$+$i<h\e(B
+\e$BF@$9$k%G!<%?$NAmNL$r8:$i$7$?$$$H;W$&$G$7$g$&!#\e(B
+
+@table @code
+
+@item gnus-read-activie-file
+\e$B$3$l$r\e(B @code{nil} \e$B$K$7$F2<$5$$!#$=$&$9$l$P!"\e(Bgnus \e$B$K%5!<%P!<$+$i8=>u%U%!\e(B
+\e$B%$%kA4BN$rMW5a$9$k;v$r6X;_$G$-$^$9!#$3$N%U%!%$%k$O$7$P$7$PHs>o$KBg$-$/$J$C\e(B
+\e$B$F$$$^$9!#$=$l$K2C$($F!"\e(Bgnus \e$B$,FMA3$H$K$+$/8=>u%U%!%$%k$r<hF@$7$h$&$H7h\e(B
+\e$BDj$7$J$$;v$r3N<B$K$9$k$?$a$K!"\e(B@code{gnus-check-new-newsgroups} \e$B$H\e(B 
+@code{gnus-check-bogus-newsgroups} \e$B$b\e(B @code{nil} \e$B$K@_Dj$7$J$1$l$P$J$j$^\e(B
+\e$B$;$s!#\e(B
+
+@item gnus-nov-is-evil
+\e$B$3$l$b\e(B @code{nil} \e$B$K$7$F$$$J$1$l$P$J$j$^$;$s!#$b$7$=$&$G$J$1$l$P!"\e(B
+@sc{nntp} \e$B%5!<%P!<$+$i5-;v$N%X%C%@!<$r$D$+$s$G$/$k$N$,$"$^$jB.$/$J$j$^$;\e(B
+\e$B$s!#A4$F$N\e(B @sc{nntp} \e$B%5!<%P!<$,\e(B @sc{xover} \e$B$N5!G=$rDs6!$7$F$$$k$o$1$G$O\e(B
+\e$B$"$j$^$;$s!#\e(BGnus \e$B$,<+J,<+?H$G$=$l$r8!::$7$^$9!#\e(B
+@end table
+
+
+@node Slow Terminal Connection
+@subsection \e$BCY$$%?!<%_%J%k@\B3!#\e(B
+
+\e$B$"$J$?$O!"%[!<%`%3%s%T%e!<%?!<$r\e(B Emacs \e$B$H\e(B gnus \e$B$r<B9T$7$F$$$k%7%9%F%`$K\e(B
+\e$B%@%$%"%k%"%C%W$9$k$?$a$K;H$C$F$$$k$H$7$^$7$g$&!#$b$7$"$J$?$N%b%G%`$,CY$1\e(B
+\e$B$l$P!"\e(B(\e$B2DG=$J8B$j\e(B) \e$B@~$rEA$C$FAw$i$l$F$$$k%G!<%?$NAmNL$r8:$i$7$?$$$H;W$&\e(B
+\e$B$G$7$g$&!#\e(B
+
+@table @code
+
+@item gnus-auto-center-summary
+Gnus \e$B$,>o$K35N,%P%C%U%!$rCf?4:F@_Dj$r$9$k$3$H$r6X;_$9$k$?$a$K$3$l$r\e(B 
+@code{nil} \e$B$K@_Dj$7$F2<$5$$!#$3$l$,\e(B @code{vertical} \e$B$G$"$k$H!"?bD>J}8~$N\e(B 
+(vertical) \e$BCf?4:F@_Dj$N$_$r$7$^$9!#\e(B@code{nil} \e$B$G$b\e(B @code{vertical} \e$B$G$b\e(B
+\e$BL5$1$l$P!"?eJ?J}8~$H?bD>J}8~$NN>J}$NCf?4:F@_Dj$r9T$$$^$9!#\e(B
+
+@item gnus-visible-headers
+\e$B5-;v$K4^$^$l$k%X%C%@!<$r:G>.8B$K8:$i$7$^$9!#<B:]$N$H$3$m!"A4It$J$/$7$F$7\e(B
+\e$B$^$C$F$b2?$H$+$J$j$^$9\e(B---\e$B$H$K$+$/!"$?$$$F$$$NLr$KN)$D%G!<%?$O35N,%P%C%U%!\e(B
+\e$B$K$"$j$^$9!#$3$NJQ?t$r\e(B @samp{^NEVVVVER} \e$B$d\e(B @samp{From:} \e$B$d!"2?$G$b9%$-$J\e(B
+\e$B$b$N$K@_Dj$7$F2<$5$$!#\e(B
+
+@item gnus-article-display-hook
+\e$B$3$N%U%C%/$KA4$F$N;HMQ2DG=$J1#F?L?Na$r@_Dj$7$^$9\e(B:
+@lisp
+(setq gnus-article-display-hook
+      '(gnus-article-hide-headers 
+        gnus-article-hide-signature
+        gnus-article-hide-citation))
+@end lisp
+
+@item gnus-use-full-window
+\e$B$3$l$r\e(B @code{nil} \e$B$K@_Dj$9$k;v$G!"A4$F$N%&%#%s%I%&$r>.$5$/$9$k;v$,$G$-$^\e(B
+\e$B$9!#$3$l$OAm$8$F$=$s$J$K8:$i$7$^$;$s!#$3$l$O!"5-;v$r$I$C$A$K$7$mFI$_$?$/\e(B
+\e$B$J$$$H$$$&;v$r7hDj$9$kA0$K!">/$7$NItJ,$7$+8+$kI,MW$,L5$$$H$$$&;v$G$9!#\e(B
+
+@item gnus-threada-hide-subtree
+\e$B$3$l$,\e(B @code{nil} \e$B$G$J$1$l$P!"A4$F$N35N,%P%C%U%!$N%9%l%C%I$O=i$a$K1#$5$l\e(B
+\e$B$^$9!#\e(B
+
+@item gnus-updated-mode-lines
+\e$B$3$l$,\e(B @code{nil} \e$B$G$"$k$H!"\e(Bgnus \e$B$O%P%C%U%!$N%b!<%I9T$K>pJs$rF~$l$^$;$s\e(B
+\e$B$N$G!";~4V$r@aLs$G$-$k$G$7$g$&!#\e(B
+@end table
+
+
+@node Little Disk Space
+@subsection \e$B>/$7$N%G%#%9%/MFNL\e(B
+@cindex disk space
+
+\e$B5/F0%U%!%$%k$OHf3SE*Bg$-$/$J$j$^$9$N$G!"6u$-MFNL$,>/$J$/$J$C$F$-$F$$$k$H\e(B
+\e$B$-$O$=$NBg$-$5$r>/$7>.$5$/$7$?$$$H;W$&$G$7$g$&!#\e(B
+
+@table @code
+
+@item gnus-save-newsrc-file
+\e$B$3$l$,\e(B @code{nil} \e$B$G$"$k$H!"\e(Bgnus \e$B$O7h$7$F\e(B @file{.newsrc} \e$B$rJ]B8$7$^$;$s\e(B---
+\e$B$=$l$O\e(B @file{.newsrc.eld} \e$B$N$_$rJ]B8$7$^$9!#$3$l$O!"\e(Bgnus \e$B$NB>$N%K%e!<%9\e(B
+\e$B%j!<%@!<$r;H$($J$$$H$$$&;v$G$9!#$3$NJQ?t$O=i4|@_Dj$G\e(B @code{t} \e$B$G$9!#\e(B
+
+@item gnus-save-killed-list
+\e$B$3$l$,\e(B @code{nil} \e$B$G$"$k$H!"\e(Bgnus \e$B$O;`$s$@%0%k!<%W$N%j%9%H$rJ]B8$7$^$;$s!#\e(B
+\e$B$3$NJQ?t$r\e(B @code{nil} \e$B$K@_Dj$7$?$H$-$O!"\e(B@code{gnus-check-new-newsgroups} 
+\e$B$r\e(B @code{ask-server} \e$B$K!"\e(B@code{gnus-check-bogus-newsgroups} \e$B$r\e(B 
+@code{nil} \e$B$K@_Dj$9$k$Y$-$G$7$g$&!#$3$NJQ?t$O=i4|@_Dj$G\e(B @code{t} \e$B$G$9!#\e(B
+
+@end table
+
+
+@node Slow Machine
+@subsection \e$BCY$$5!3#\e(B
+@cindex slow machine
+
+\e$B$b$7CY$$5!3#$r;}$C$F$$$k$+!"$b$7$/$OC1$KK\Ev$KG&BQNO$,$J$$;~$O!"\e(Bgnus \e$B$N\e(B
+\e$B<B9T$rGD0.$9$k$?$a$K$G$-$k;v$,>/$7$"$j$^$9!#\e(B
+
+\e$B5/F0$rB.$/$9$k$?$a$K\e(B @code{gnus-check-new-newsgroups} \e$B$H\e(B 
+@code{gnus-check-bogus-newsgroups} \e$B$r\e(B @code{nil} \e$B$K@_Dj$7$F2<$5$$!#\e(B
+
+\e$B35N,%P%C%U%!$KF~$k;v$HH4$1$k;v$rB.$/$9$k$?$a$K!"\e(B@code{gnus-show-threads} 
+\e$B$H\e(B @code{gnus-use-cross-reference} \e$B$H\e(B @code{gnus-nov-is-evil} \e$B$r\e(B 
+@code{nil} \e$B$K@_Dj$7$F2<$5$$!#\e(B
+
+\e$B5-;v$K4X$9$k<B9T$r>/$7B.$/$9$k$?$a$K!"\e(B@code{gnus-article-display-hook} 
+\e$B$r\e(B @code{nil} \e$B$K@_Dj$7$F2<$5$$!#\e(B
+
+
+@page
+@node Troubleshooting
+@section \e$BLdBj2r7h\e(B
+@cindex troubleshooting
+
+Gnus \e$B$OH"$+$i=P$7$F$9$0$K\e(B @emph{\e$BHs>o$K\e(B} \e$B$h$/F0:n$7$^$9\e(B---\e$B2?$bLdBj$N5/$3\e(B
+\e$B$k$3$H$OA[A|$G$-$^$;$s!"K\Ev$K!#\e(B
+
+\e$B%*%C%[%s!#\e(B
+
+@enumerate
+
+@item
+\e$B$"$J$?$N%3%s%T%e!<%?$N%9%$%C%A$,F~$C$F$$$k;v$r3N$+$a$F2<$5$$!#\e(B
+
+@item
+\e$BK\Ev$K8=9T$N\e(B gnus \e$BHG$rFI$_9~$s$G$$$k;v$r3NG'$7$F2<$5$$!#:#$^$G\e(B @sc{gnus} 
+\e$B$r<B9T$7$F$-$?$N$G$"$l$P!"\e(Bgnus \e$B$,F0:n$9$k$h$&$K0lEY\e(B Emacs \e$B$r=*N;$7$F:F5/\e(B
+\e$BF0$9$kI,MW$,$"$j$^$9!#\e(B
+
+@item
+@kbd{M-x gnus-version} \e$B$r;n$7$F2<$5$$!#$b$7!"\e(B
+@samp{Semi-gnus 6.9.2 (based on Gnus 5.6.45; for SEMI 1.11, FLIM 1.12)}
+\e$B$N$h$&$J$b$N$,=P$F$-$?$J$i!"@5$7$$%U%!%$%k$,FI$_9~$^$l$F$$$^$9!#\e(B
+\e$B$b$7!"\e(B@samp{NNTP 3.x} \e$B$d\e(B @samp{nntp flee} \e$B$N$h$&$J$b$N$,=P$F$-$?$H$-$O!"\e(B
+\e$B$=$3$K$"$k$$$/$D$+$N8E$$\e(B @file{.el} \e$B%U%!%$%k$,FI$_9~$^$l$F$$$^$9!#$=$l$i\e(B
+\e$B$r>C$7$F2<$5$$!#\e(B
+
+@item
+FAQ \e$B$H\e(B how-to \e$B$rFI$`$?$a$K%X%k%W%0%k!<%W\e(B (\e$B%0%k!<%W%P%C%U%!$G\e(B @kbd{G h}) 
+\e$B$rFI$s$G2<$5$$!#\e(B
+
+@item
+@vindex max-lisp-eval-depth
+Gnus \e$B$OB?$/$NB?$/$N:F5"9=B$$GF0:n$7!"2?$i$+$N6KC<$J\e(B (\e$B$=$7$FHs>o$K$^$l$J\e(B) 
+\e$B;vNc$G$O!"\e(Bgnus \e$B$O:F5"$r\e(B ``\e$B$"$^$j$K?<$/\e(B'' \e$B9_$j$9$.$F!"\e(BEmacs \e$B$,$"$J$?$K%S!<\e(B
+\e$B%W2;$rLD$i$9;v$,$"$j$^$9!#$b$7$3$l$,5/$3$C$?$J$i!"\e(B
+@code{max-lisp-eval-depth} \e$B$r\e(B 500 \e$B$+$=$l$/$i$$$NCM$K@_Dj$7$F2<$5$$!#\e(B
+@end enumerate
+
+\e$B$b$7B>$NA4$F$,<:GT$7$?$J$i!"%P%0$H$7$FLdBj$rJs9p$7$F2<$5$$!#\e(B
+
+@cindex bugs
+@cindex reporting bugs
+
+@kindex M-x gnus-bug
+@findex gnus-bug
+\e$B$b$7\e(B gnus \e$B$N%P%0$r8+$D$1$?$J$i!"L?Na\e(B @kbd{M-x gnus-bug} \e$B$K$h$C$F$=$l$rJs\e(B
+\e$B9p$9$k;v$,$G$-$^$9!#\e(B@kbd{M-x set-variable RET debug-on-error RET t RET} 
+\e$B$H$7$F!"$=$l$+$i;d$K%P%C%/%H%l!<%9$rAw$C$F2<$5$$!#;d$O%P%0$r=$@5$7$h$&$H\e(B
+\e$B$7$^$9$,!"$"$J$?$,%P%0$r:F8=$5$;$kJ}K!$r@53N$K=q$$$F$/$l$?$H$-$N$_!"$=$l\e(B
+\e$B$r=$@5$9$k;v$,$G$-$^$9!#\e(B
+
+\e$B%P%0Js9p$G$O!">\:Y$9$.$k$3$H$O7h$7$F$"$j$^$;$s!#%P%0Js9p$r$9$k$H$-$O!"$=\e(B
+\e$B$l$,;H$&$?$S$K\e(B 10Kb \e$B%a!<%k$r:n$j!"$b$7$"$J$?$N4D6-$r0JA0;d$K\e(B 500 \e$B2sAw$C\e(B
+\e$B$F$-$?$H$7$F$b!"L?Na\e(B @kbd{M-x gnus-bug} \e$B$r;H$C$F2<$5$$!#\e(B
+
+\e$B;d$O!"5-21$H$$$&<oN`$N$b$N$OA4$/;}$C$F$$$J$$;v$r3P$($F$*$/;v$b=EMW$G$9!#\e(B
+\e$B$b$7$"$J$?$,%P%0Js9p$rAw$k$H!";d$,JVEz$rAw$j$^$9!#$=$7$F!"$=$l$+$i$"$J$?\e(B
+\e$B$,\e(B ``\e$B$$$d!"$=$&$G$O$J$$!*\e(B \e$B$3$N$P$+<T!*\e(B'' \e$B$H$@$1Aw$jJV$7$F$/$k$H!";d$O$"\e(B
+\e$B$J$?$,2?$KBP$7$F;d$rIn?+$7$F$$$k$+$,$o$+$j$^$;$s!#>o$K!"A4$F$r@bL@$7$9$.\e(B
+\e$B$F2<$5$$!#$=$l$O2f!9A4$F$K$H$C$F$b$C$H4JC1$K$J$j$^$9\e(B---\e$B$b$7;d$,I,MW$JA4\e(B
+\e$B$F$N>pJs$rF@$i$l$J$+$C$?$i!";d$O$"$J$?$K%a!<%k$rAw$C$F$5$i$J$k>pJs$r5a$a!"\e(B
+\e$B$=$N7k2LA4$F$,$h$jB?$/$N;~4V$r<h$k;v$K$J$j$^$9!#\e(B
+
+\e$B$b$7$"$J$?$ND>LL$7$F$$$kLdBj$,Hs>o$K;k3PE*$G!"$=$l$r>e<j$/@bL@$G$-$J$$>l\e(B
+\e$B9g$O!"\e(BEmacs \e$B$N%&%#%s%I%&$r%U%!%$%k$K%3%T!<$7$F\e(B (\e$BNc$($P!"\e(B@kbd{xwd} \e$B$G\e(B)\e$B!"\e(B
+\e$B$=$l$r$I$3$+<j$NFO$/$I$3$+$K$*$$$F!"$=$N2hA|$N\e(B URL \e$B$r%P%0Js9p$K4^$a$F2<\e(B
+\e$B$5$$!#\e(B
+
+\e$B$b$71g=u$,M_$7$$$@$1$G$"$l$P!"\e(B@samp{gnu.emacs.gnus} \e$B$G?R$M$k$N$,NI$$$G$7$g\e(B
+\e$B$&!#;d$O$"$^$jLr$KN)$A$^$;$s!#\e(B
+
+@cindex gnu.emacs.gnus
+@cindex ding mailing list
+\e$B$^$?!"\e(Bding \e$B%a!<%j%s%0%j%9%H\e(B---@samp{ding@@gnus.org} \e$B$K?V$M$k;v$b$G$-\e(B
+\e$B$^$9!#9XFI$9$k$?$a$K$O\e(B @samp{ding-request@@gnus.org} \e$B$K=q$$$F2<$5$$!#\e(B
+
+
+@page
+@node A Programmers Guide to Gnus
+@section Gnus \e$B$N%W%m%0%i%^!<%:%,%$%I\e(B
+
+\e$B;d$N4j$$$O!"B>$NC/$+$,\e(B gnus \e$B$G$G$-$k2?$+8-$$$b$N$r9M$(=P$7!"$=$N\e(B
+\e$B>e$=$N8-$$$b$N$r=q$$$F$/$l$k$H$$$&$3$H$G$9!#$3$l$rMF0W$K$9$k$?$a\e(B
+\e$B$K$O!"\e(Bgnus \e$B$NFbItF0:n$r5-=R$9$k$N$,NI$$J}K!$@$m$&$H;d$O;W$$$^$7\e(B
+\e$B$?!#$"$H!"$=$s$J$KFbIt$8$c$J$$F0:n$r$$$/$D$+$H!";d$,:#$d$C$F$k$3\e(B
+\e$B$H$H!#\e(B
+
+\e$B%W%m%0%i%`$NFbIt9=B$$,JQ99$5$l$k$3$H$O$J$$!"$J$I$H;W$C$F$O$$$1$^\e(B
+\e$B$;$s$,!"\e(Bgnus \e$B$H$=$N%P%C%/%(%s%I4V$N%$%s%?!<%U%'!<%9\e(B(\e$B$3$l$O40A4$K\e(B
+\e$B5-=R$5$l$F$$$k\e(B)\e$B$d!"%9%3%"%U%!%$%k$N7A<0\e(B(\e$B$3$l$bF1MM\e(B)\e$B!"%G!<%?9=B$\e(B
+(\e$B$3$l$OB>$h$jJQ99$5$l$d$9$$$b$N$b$"$k\e(B)\e$B!"A`:nMQ$N0lHL%a%=%C%I!"$J\e(B
+\e$B$I$r\e(B(\e$B:YIt$K$o$?$C$F\e(B)\e$BDj5A$7$F$$$-$^$9!#\e(B
+
+@menu
+* Gnus Utility Functions::   \e$B;HMQ$G$-$k6&DL$N4X?t$HJQ?t!#\e(B
+* Backend Interface::        Gnus \e$B$O$I$&$d$C$F%5!<%P!<$HDL?.$9$k$N$+!#\e(B
+* Score File Syntax::        \e$B%9%3%"%U%!%$%k5,3J$N\e(B BNF \e$BDj5A!#\e(B
+* Headers::                  Gnus \e$B$O%X%C%@!<$rFbItE*$K$I$N$h$&$K3JG<$9$k$+!#\e(B
+* Ranges::                   \e$B$?$/$5$s$N?t$r3JG<$9$kJXMx$J7A<0!#\e(B
+* Group Info::               \e$B%0%k!<%W>pJs7A<0!#\e(B
+* Extended Interactive::     \e$B5-9f@\F,<-$J$I!#\e(B
+* Emacs/XEmacs Code::        Gnus \e$B$OA4$F$N6aBe\e(B Emacsen \e$B$GF0:n$9$k!#\e(B
+* Various File Formats::     Gnus \e$B$N;HMQ$9$k%U%!%$%k$N7A<0!#\e(B
+@end menu
+
+
+@node Gnus Utility Functions
+@subsection Gnus \e$B$NM-MQ$J4X?t\e(B
+@cindex Gnus utility functions
+@cindex utility functions
+@cindex functions
+@cindex internal variables
+
+\e$B%U%C%/$J$I$+$i<B9T$5$l$k>.$5$J4X?t$r=q$/$H$-$O!"\e(Bgnus \e$B$NFbIt4X?t\e(B
+\e$B$dJQ?t$K%"%/%;%9$9$k$3$H$O@dBPI,MW$G$9!#0J2<$,:G$b$h$/;H$o$l$k$b\e(B
+\e$B$N$N0lMw$G$9!#\e(B
+
+@table @code
+
+@item gnus-newsgroup-name
+@vindex gnus-newsgroup-name
+\e$B$3$NJQ?t$O8=:_$N%K%e!<%9%0%k!<%W$NL>A0$rJ];}$7$F$$$^$9!#\e(B
+
+@item gnus-find-method-for-group
+@findex gnus-find-method-for-group
+@var{group} \e$B$NA*BrJ}K!$rJV$94X?t$G$9!#\e(B
+
+@item gnus-group-real-name
+@findex gnus-group-real-name
+\e$B@55,$N\e(B (\e$B@\F,<-IU$-$N\e(B) gnus \e$B%0%k!<%WL>$r<u$1<h$j!"@\F,<-L5$7$NL>A0\e(B
+\e$B$rJV$7$^$9!#\e(B
+
+@item gnus-group-prefixed-name
+@findex gnus-group-prefixed-name
+\e$B@\F,<-L5$7$N%0%k!<%WL>$HA*BrJ}K!$r<u$1<h$j!"@55,$N\e(B (\e$B@\F,<-IU$-$N\e(B)
+gnus \e$B%0%k!<%WL>$rJV$7$^$9!#\e(B
+
+@item gnus-get-info
+@findex gnus-get-info
+@var{group} \e$B$N%0%k!<%W>pJs0lMw$rJV$7$^$9!#\e(B
+
+@item gnus-group-unread
+@findex gnus-group-unread
+@var{group} \e$B$NL$FI5-;v$N?t$+!"$b$7$/$O$=$l$,J,$+$i$J$$>l9g$O\e(B @code{t} \e$B$G\e(B
+\e$B$9!#\e(B
+
+@item gnus-active
+@findex gnus-active
+@var{group} \e$B$N3hF0EPO?$G$9!#\e(B
+
+@item gnus-set-active
+@findex gnus-set-active
+@var{group} \e$B$K3hF0EPO?$r@_Dj$7$^$9!#\e(B
+
+@item gnus-add-current-to-buffer-list
+@findex gnus-add-current-to-buffer-list
+Gnus \e$B=*N;;~$K>C5n$9$k%P%C%U%!$N0lMw$K8=:_$N%P%C%U%!$rDI2C$7$^$9!#\e(B
+
+@item gnus-continuum-version
+@findex gnus-continuum-version
+\e$B0z?t$H$7$F\e(B gnus \e$B$N%P!<%8%g%sJ8;zNs$r<u$1<h$j!"IbF0>.?tE@?t$rJV$7\e(B
+\e$B$^$9!#8E$$%P!<%8%g%s$OI,$:?7$7$$%P!<%8%g%s$h$j$b>.$5$$?t$K$J$j$^\e(B
+\e$B$9!#\e(B
+
+@item gnus-group-read-only-p
+@findex gnus-group-read-only-p
+@var{group} \e$B$,FI$_=P$7@lMQ$G$"$k$+$I$&$+$r<($7$^$9!#\e(B
+
+@item gnus-news-group-p
+@findex gnus-news-group-p
+@var{group} \e$B$,%K%e!<%9%P%C%/%(%s%I$G$"$k$+$I$&$+$r<($7$^$9!#\e(B
+
+@item gnus-ephemeral-group-p
+@findex gnus-ephemeral-group-p
+@var{group} \e$B$,C;4|%0%k!<%W$G$"$k$+$I$&$+$r<($7$^$9!#\e(B
+
+@item gnus-server-to-method
+@findex gnus-server-to-method
+@var{server} \e$B$KBP1~$7$F$$$kA*BrJ}K!$rJV$7$^$9!#\e(B
+
+@item gnus-server-equal
+@findex gnus-server-equal
+\e$BFs$D$N2>A[%5!<%P!<$,F10l$N$b$N$G$"$k$+$I$&$+$r<($7$^$9!#\e(B
+
+@item gnus-group-native-p
+@findex gnus-group-native-p
+@var{group} \e$B$,4pK\%0%k!<%W$G$"$k$+$I$&$+$r<($7$^$9!#\e(B
+
+@item gnus-group-secondary-p
+@findex gnus-group-secondary-p
+@var{group} \e$B$,Fs<!%0%k!<%W$G$"$k$+$I$&$+$r<($7$^$9!#\e(B
+
+@item gnus-group-foreign-p
+@findex gnus-group-foreign-p
+@var{group} \e$B$,30It%0%k!<%W$G$"$k$+$I$&$+$r<($7$^$9!#\e(B
+
+@item group-group-find-parameter
+@findex group-group-find-parameter
+@var{group} \e$B$N%Q%i%a!<%?0lMw$rJV$7$^$9!#Fs$DL\$N0z?t$rM?$($k$H!"\e(B
+@var{group} \e$BMQ$N$=$N%Q%i%a!<%?$NCM$rJV$7$^$9!#\e(B
+
+@item gnus-group-set-parameter
+@findex gnus-group-set-parameter
+\e$B;0$D$N0z?t\e(B @var{group}\e$B!"\e(B @var{parameter}\e$B!"\e(B@var{value} \e$B$r<h$j$^$9!#\e(B
+
+@item gnus-narrow-to-body
+@findex gnus-narrow-to-body
+\e$B8=:_$N%P%C%U%!$N5-;v$NK\J8$r@)8BI=<($7$^$9!#\e(B
+
+@item gnus-check-backend-function
+@findex gnus-check-backend-function
+\e$BFs$D$N0z?t\e(B @var{function}\e$B!"\e(B@var{group} \e$B$r<h$j$^$9!#\e(B@var{group}
+\e$B%P%C%/%(%s%I$,\e(B @var{function} \e$B$r%5%]!<%H$7$F$$$k$J$i!"\e(B
+@code{nil} \e$B0J30$rJV$7$^$9!#\e(B
+
+@lisp
+(gnus-check-backend-function "request-scan" "nnml:misc")
+=> t
+@end lisp
+
+@item gnus-read-method
+@findex gnus-read-method
+\e$BMxMQ<T$KA*BrJ}K!$r%W%m%s%W%HF~NO$7$F$b$i$$$^$9!#\e(B
+
+@end table
+
+
+@node Backend Interface
+@subsection \e$B%P%C%/%(%s%I%$%s%?!<%U%'!<%9\e(B
+
+Gnus \e$B$O\e(B @sc{nntp} \e$B$d%9%W!<%k!"%a!<%k!"2>A[%0%k!<%W$K$D$$$F$O2?$K\e(B
+\e$B$bCN$j$^$;$s!#$?$@2>A[%5!<%P!<\e(B @dfn{virtual servers} \e$B$HBPOC$9$k\e(B
+\e$BJ}K!$rCN$C$F$$$k$@$1$G$9!#2>A[%5!<%P!<$O%P%C%/%(%s%I\e(B
+@dfn{backend} \e$B$H$$$/$D$+$N%P%C%/%(%s%IJQ?t\e(B @dfn{backend
+variables} \e$B$+$i$J$j$^$9!#A0<T$NNc$H$7$F$O\e(B @code{nntp}\e$B!"\e(B
+@code{nnspool}\e$B!"\e(B @code{nnmbox} \e$B$J$I$,$"$j$^$9!#8e<T$NNc$H$7$F$O\e(B
+@code{nntp-port-number} \e$B$d\e(B @code{nnmbox-directory} \e$B$,$"$j$^$9!#\e(B
+
+Gnus \e$B$,%P%C%/%(%s%I\e(B --- \e$BNc$($P\e(B @code{nntp} --- \e$B$K2?$+$N>pJs$rMW\e(B
+\e$B5a$9$k$H$-$O!"DL>o4X?t$N0z?t$H$7$F2>A[%5!<%P!<L>$r4^$a$^$9!#\e(B (\e$B$b\e(B
+\e$B$7$J$1$l$P!"%P%C%/%(%s%I$O\e(B ``\e$B8=:_$N\e(B'' \e$B2>A[%5!<%P!<$r;HMQ$7$^$9!#\e(B)
+\e$BNc$($P!"\e(B@code{nntp-request-list} \e$B$O$=$NM#0l$N\e(B (\e$B>JN,2DG=$J\e(B) \e$B0z?t\e(B
+\e$B$H$7$F2>A[%5!<%P!<$r<h$j$^$9!#$b$7$3$N2>A[%5!<%P!<$,3+$+$l$F$$$J\e(B
+\e$B$1$l$P!"$3$N4X?t$O<:GT$7$^$9!#\e(B
+
+\e$B2>A[%5!<%P!<L>$O!"J*M}E*$J%5!<%P!<L>$H$O2?$N4X78$bL5$$$3$H$KCm0U\e(B
+\e$B$7$F$/$@$5$$!#$3$NNc$r8+$F$/$@$5$$!#\e(B
+
+@lisp
+(nntp "odd-one"
+      (nntp-address "ifi.uio.no")
+      (nntp-port-number 4324))
+@end lisp
+
+\e$B$3$3$G!"J*M}%5!<%P!<L>$O\e(B @samp{ifi.uio.no} \e$B$G$"$k$N$KBP$7!"2>A[\e(B
+\e$B%5!<%P!<L>$O\e(B @samp{odd-one} \e$B$G$9!#\e(B
+
+\e$B%P%C%/%(%s%I$OJ#?t$N2>A[%5!<%P!<$r@Z$jBX$(2DG=$G$J$1$l$P$J$j$^$;\e(B
+\e$B$s!#I8=`$N%P%C%/%(%s%I$O$3$l$r!"2>A[%5!<%P!<4D6-$rI,MW$J$H$-$K<h\e(B
+\e$B$j=P$7!&2!$79~$_$r9T$J$&O"A[%j%9%H$rJ];}$9$k$3$H$K$h$C$F<B8=$7$F\e(B
+\e$B$$$^$9!#\e(B
+
+\e$B%$%s%?!<%U%'!<%94X?t$OFs$D$N%0%k!<%W$,$"$j$^$9!#I,$:B8:_$7$J$1$l\e(B
+\e$B$P$J$i$J$$I,?\4X?t\e(B @dfn{required functions} \e$B$H!"\e(Bgnus \e$B$,8F$S=P$7\e(B
+\e$B$r9T$J$&A0$K$=$l$,B8:_$9$k$+$r>o$K3NG'$9$kG$0U4X?t\e(B @dfn{optional
+functions} \e$B$G$9!#\e(B
+
+\e$B$3$l$i$N4X?t$OA4$F!"JV5Q%G!<%?$r\e(B @code{nntp-server-buffer}
+(@samp{ *nntpd*}) \e$B%P%C%U%!!<$KJV$9$3$H$,5a$a$i$l$^$9!#$3$l$O$A$g$C\e(B
+\e$B$HIT1?$JL>A0IU$1$G$9$,!"$3$l$G2fK}$7$J$1$l$P$J$j$^$;$s!#;d$,7k2L\e(B
+\e$B$N%G!<%?\e(B @dfn{resulting data} \e$B$H8@$C$?$H$-$O!"$=$N%P%C%U%!!<$NCf\e(B
+\e$B$N%G!<%?$r;X$7$F$$$^$9!#JV5QCM\e(B @dfn{return value} \e$B$H8@$C$?$H$-$O!"\e(B
+\e$B4X?t8F$S=P$7$K$h$C$FJV$5$l$k4X?t$NCM$N$3$H$r8@$C$F$$$^$9!#4X?t$,\e(B
+\e$B<:GT$7$?$H$-$OJV5QCM$H$7$F\e(B @code{nil} \e$B$rJV$5$J$/$F$O$$$1$^$;$s!#\e(B
+
+\e$B%P%C%/%(%s%I$K$O%5!<%P!<7A<0\e(B @dfn{server-forming} \e$B$N%P%C%/%(%s%I\e(B
+\e$B$G$"$k$H8F$P$l$k$b$N$,$"$j!"$^$?$=$&8F$P$l$J$$$b$N$b$"$j$^$9!#8e\e(B
+\e$B<T$O0lHL$K$O!"F1;~$K$O0l$D$@$1$7$+A`:n$7$J$$%P%C%/%(%s%I$G!"\e(B``\e$B%5!<\e(B
+\e$B%P!<\e(B'' \e$B$N35G0$,$"$j$^$;$s!#$3$N%5!<%P!<$H$O!"%0%k!<%W$r;}$A!"$=\e(B
+\e$B$N%0%k!<%W$K>pJs$rG[Aw$9$k$b$N$G!"$=$l0J>e$N$b$N$G$O$"$j$^$;$s!#\e(B
+
+\e$B$3$3$G$NNc$HDj5A$G$O!"A[A|>e$N%P%C%/%(%s%I\e(B @code{nnchoke} \e$B$r0z$-\e(B
+\e$B9g$$$K=P$9$3$H$K$7$^$9!#\e(B
+
+@cindex @code{nnchoke}
+
+@menu
+* Required Backend Functions::        \e$B<BAu$7$J$1$l$P$J$i$J$$4X?t!#\e(B
+* Optional Backend Functions::        \e$B<BAu$7$J$/$F$b$h$$4X?t!#\e(B
+* Error Messaging::                   \e$B%a%C%;!<%8$d%(%i!<Js9p$rF@$kJ}K!!#\e(B
+* Writing New Backends::              \e$B8E$$%P%C%/%(%s%I$N3HD%!#\e(B
+* Hooking New Backends Into Gnus::    Gnus \e$BB&$G$7$J$1$l$P$J$i$J$$$3$H!#\e(B
+* Mail-like Backends::                \e$B%a!<%kIw%P%C%/%(%s%I$N$?$a$N=u8@\e(B
+@end menu
+
+
+@node Required Backend Functions
+@subsubsection \e$BI,?\%P%C%/%(%s%I4X?t\e(B
+
+@table @code
+
+@item (nnchoke-retrieve-headers ARTICLES &optional GROUP SERVER FETCH-OLD)
+
+@var{articles} \e$B$O5-;vHV9f$NHO0O$+$"$k$$$O\e(B @code{Message-ID} \e$B$N%j\e(B
+\e$B%9%H$G$9!#8=:_$N%P%C%/%(%s%I$G$O$I$A$i$b40A4$K$O%5%]!<%H$7$F$$$^\e(B
+\e$B$;$s\e(B --- \e$BO"B3$7$?5-;vHV9f\e(B (\e$B$N%j%9%H\e(B) \e$B$@$1$G!"B?$/$N%P%C%/%(%s%I\e(B
+\e$B$G$O\e(B @code{Message-ID} \e$B$K$h$k<hF@$O%5%]!<%H$7$F$$$^$;$s!#$G$b$I\e(B
+\e$B$A$i$b%5%]!<%H$7$F$$$/$Y$-$G$7$g$&!#\e(B
+
+\e$B7k2L$N%G!<%?$O\e(B HEAD \e$B$+\e(B NOV \e$B9T$N$$$:$l$+$G$"$j!"JV5QCM$O$3$l$rH?\e(B
+\e$B1G$7$?\e(B @code{headers} \e$B$+\e(B @code{nov} \e$B$N$$$:$l$+$G$J$/$F$O$J$j$^$;\e(B
+\e$B$s!#$3$l$O:#8e!"\e(BHEAD \e$B$H\e(B NOV \e$B9T$,:.:_$9$k\e(B @code{various} \e$B$K3HD%$5\e(B
+\e$B$l$k$+$b$7$l$^$;$s$,!"8=:_$N\e(B gnus \e$B$G$O%5%]!<%H$5$l$F$$$^$;$s!#\e(B
+
+@var{fetch-old} \e$B$,\e(B @code{nil} \e$B0J30$G$"$l$P!"$"$k0UL#$G$N!VM>J,$J\e(B
+\e$B%X%C%@!<!W$r<hF@$7$h$&$H$7$^$9!#$3$l$ODL>o!"\e(B@code{articles} \e$B$NCf\e(B
+\e$B$N:G>.HV9f$N5-;v$h$j$b>.$5$$5-;v$+$i\e(B (\e$B>/$J$/$H$b\e(B)
+@var{fetch-old} \e$B8D$NM>J,$J%X%C%@!<$r<hF@$7!"6u=j$rKd$a$k$3$H$r9T\e(B
+\e$B$J$$$^$9!#$b$7%P%C%/%(%s%I$,$3$NMW5a$K=>$&$3$H$rHQ$o$7$$$H;W$C$?\e(B
+\e$B>l9g$K$O!"$3$N%Q%i%a!<%?$NB8:_$OL5;k$5$l$k$3$H$b$"$j$^$9!#$3$NCM\e(B
+\e$B$,\e(B @code{nil} \e$B$G$b?t;z$G$b$J$1$l$P!":GBg8B$N<hF@$r9T$J$$$^$9!#\e(B
+
+\e$B$3$l$,\e(B HEAD \e$B$NNc$G$9!#\e(B
+
+@example
+221 1056 Article retrieved.
+Path: ifi.uio.no!sturles
+From: sturles@@ifi.uio.no (Sturle Sunde)
+Newsgroups: ifi.discussion
+Subject: Re: Something very droll
+Date: 27 Oct 1994 14:02:57 +0100
+Organization: Dept. of Informatics, University of Oslo, Norway
+Lines: 26
+Message-ID: <38o8e1$a0o@@holmenkollen.ifi.uio.no>
+References: <38jdmq$4qu@@visbur.ifi.uio.no>
+NNTP-Posting-Host: holmenkollen.ifi.uio.no
+.
+@end example
+
+\e$B$D$^$j!"JV5QCM$,\e(B @code{headers} \e$B$G$"$k$H$-$O!"%G!<%?%P%C%U%!$K$3\e(B
+\e$B$l$i%X%C%@!<$,$$$/$D$+$"$k$H$$$&$3$H$r0UL#$7$^$9!#\e(B
+
+\e$B$3$l$,$=$N%P%C%U%!!<$N\e(B BNF \e$BDj5A$G$9!#\e(B
+
+@example
+headers        = *head
+head           = error / valid-head
+error-message  = [ "4" / "5" ] 2number " " <error message> eol
+valid-head     = valid-message *header "." eol
+valid-message  = "221 " <number> " Article retrieved." eol
+header         = <text> eol
+@end example
+
+\e$B$b$7JV5QCM$,\e(B @code{nov} \e$B$G$"$l$P!"%G!<%?%P%C%U%!!<$K$O\e(B
+@dfn{network overview database} \e$B9T$,4^$^$l$F$J$/$F$O$J$j$^$;$s!#\e(B
+\e$B$3$l$O4pK\E*$K$OJ#?t$NMs$r%?%V$G6h@Z$C$?$b$N$G$9!#\e(B
+
+@example
+nov-buffer = *nov-line
+nov-line   = 8*9 [ field <TAB> ] eol
+field      = <text except TAB>
+@end example
+
+\e$B$3$l$i$NMs$K$I$N$h$&$J$b$N$,4^$^$l$k$+$r$h$j>\$7$/8+$?$1$l$P!"\e(B
+@pxref{Headers} \e$B$r;2>H$7$F$/$@$5$$!#\e(B
+
+
+@item (nnchoke-open-server SERVER &optional DEFINITIONS)
+
+\e$B$3$3$G$N\e(B @var{server} \e$B$O2>A[%5!<%P!<L>$G$9!#\e(B@var{definitions} \e$B$O\e(B
+\e$B$3$N2>A[%5!<%P!<$rDj5A$9$k\e(B @code{(VARIABLE VALUE)} \e$BAH$N%j%9%H$G\e(B
+\e$B$9!#\e(B
+
+\e$B$b$7%5!<%P!<$r3+$/$3$H$,$G$-$J$1$l$P!"%(%i!<$O%7%0%J%k$G$ODLCN$5\e(B
+\e$B$l$^$;$s!#$=$7$F%P%C%/%(%s%I$O!"$=$l0J8e$N$3$N%5!<%P!<$X$N@\B3MW\e(B
+\e$B5a$r5qH]$9$k$3$H$b$G$-$^$9!#<B:]!"$=$&$9$Y$-$G$9!#\e(B
+
+\e$B$b$7$=$N%5!<%P!<$,$9$G$K3+$$$F$$$l$P!"$3$N4X?t$O\e(B @code{nil} \e$B0J30\e(B
+\e$B$NCM$rJV5Q$7$J$1$l$P$J$j$^$;$s!#$3$N$H$-!"JV$5$l$k7k2L$N%G!<%?$O\e(B
+\e$B$"$j$^$;$s!#\e(B
+
+
+@item (nnchoke-close-server &optional SERVER)
+
+@var{server} \e$B$X$N@\B3$rJD$8!"$3$l$K4XO"$9$k$9$Y$F$N;q8;$r3+J|$7\e(B
+\e$B$^$9!#$b$72?$i$+$NM}M3$G%5!<%P!<$rJD$8$k$3$H$,$G$-$J$1$l$P!"\e(B
+@code{nil} \e$B$rJV5Q$7$^$9!#\e(B
+
+\e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
+
+
+@item (nnchoke-request-close)
+
+\e$BA4$F$N%5!<%P!<$N@\B3$rJD$8!"%P%C%/%(%s%I$,J]M-$7$F$$$kA4$F$N;q8;\e(B
+\e$B$r3+J|$7$^$9!#$3$N%P%C%/%(%s%I$K$h$C$F:n@.$5$l$?%P%C%U%!$OA4$F:o\e(B
+\e$B=|$5$l$^$9!#\e(B(@code{nntp-server-buffer} \e$B$O:o=|$5$l$^$;$s$,!#\e(B) \e$B$3\e(B
+\e$B$N4X?t$ODL>o!"\e(Bgnus \e$B$,=*N;$9$k$H$-$K$N$_8F$S=P$5$l$^$9!#\e(B
+
+\e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
+
+
+@item (nnchoke-server-opened &optional SERVER)
+
+\e$B$b$7\e(B @var{server} \e$B$,8=:_$N2>A[%5!<%P!<$G!"$=$NJ*M}%5!<%P!<$X$N@\\e(B
+\e$BB3$,@8$-$F$$$l$P!"$3$N4X?t$O\e(B @code{nil} \e$B0J30$NCM$rJV$7$^$9!#$3$N\e(B
+\e$B4X?t$O$I$s$J>l9g$G$b!"@\B3$,<:$o$l$?%5!<%P!<$X$N:F@\B3$r9T$J$&$3\e(B
+\e$B$H$O$"$j$^$;$s!#\e(B
+
+\e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
+
+
+@item (nnchoke-status-message &optional SERVER)
+
+\e$B$3$N4X?t$O\e(B @var{server} \e$B$+$i$N:G8e$N%(%i!<%a%C%;!<%8$rJV5Q$7$^$9!#\e(B
+
+\e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
+
+
+@item (nnchoke-request-article ARTICLE &optional GROUP SERVER TO-BUFFER)
+
+\e$B$3$N4X?t$N7k2L$N%G!<%?$O!"\e(B@var{article} \e$B$G;XDj$5$l$?5-;v$G$9!#$3\e(B
+\e$B$N;XDj$O\e(B @code{Message-ID} \e$B$+HV9f$N$$$:$l$+$G$9!#\e(B
+@code{Message-ID} \e$B$K$h$k5-;v$N<hF@$r<BAu$9$k$+$I$&$+$OG$0U$G$9$,!"\e(B
+\e$B2DG=$G$"$k$H4r$7$$$G$9$M!#\e(B
+
+@var{to-buffer} \e$B$,\e(B @code{nil} \e$B0J30$G$"$l$P!"7k2L$N%G!<%?$ODL>o$N\e(B
+\e$B%G!<%?%P%C%U%!$NBe$o$j$K!"$3$N%P%C%U%!$KJV$5$l$^$9!#$3$l$K$h$jB?\e(B
+\e$BNL$N%G!<%?$r$"$k%P%C%U%!$+$iJL$N%P%C%U%!$K%3%T!<$9$k$3$H$rHr$1$k\e(B
+\e$B$3$H$,$G$-!"$=$7$F\e(B gnus \e$B$ODL>o!"5-;v%P%C%U%!$KD>@\5-;v$rA^F~$9$k\e(B
+\e$B$h$&$KMW5a$7$F$$$^$9!#\e(B
+
+\e$B$b$72DG=$G$"$k$N$J$i!"$3$N4X?t$O!"\e(B@code{car}\e$B$,<hF@$7$?5-;v$N$"$k\e(B
+\e$B%0%k!<%WL>$G!"\e(B@code{cdr} \e$B$,5-;vHV9f$G$"$k\e(B cons \e$B%;%k$rJV$9$Y$-$G\e(B
+\e$B$9!#$3$l$K$h$j\e(B @code{Message-ID} \e$B$K$h$C$F5-;v$r<hF@$7$?$H$-!"\e(B
+gnus \e$B$,K\Ev$N%0%k!<%W$H5-;vHV9f$rCN$k$3$H$,$G$-$k$h$&$K$J$k$G$7$g\e(B
+\e$B$&!#$3$l$,IT2DG=$J>l9g$K$O!"5-;v$N<hF@$,@.8y$7$?$H$-$O\e(B @code{t} 
+\e$B$rJV$7$^$9!#\e(B
+
+
+@item (nnchoke-request-group GROUP &optional SERVER FAST)
+
+@var{group} \e$B$N%G!<%?$r<hF@$7$^$9!#$3$N4X?t$O!"\e(B@var{group} \e$B$r8=:_\e(B
+\e$B$N%0%k!<%W$K$9$k!"$H$$$&I{:nMQ$b$"$j$^$9!#\e(B
+
+@var{FAST} \e$B$,$"$l$P!"JXMx$J%G!<%?$rJV$9LLE]$r9T$J$o$:$K!"C1$K\e(B
+@var{group} \e$B$r8=:_$N%0%k!<%W$K$7$^$9!#\e(B
+
+\e$B$3$l$,7k2L$N%G!<%?$NNc$H!"$=$l$NDj5A$G$9!#\e(B
+
+@example
+211 56 1000 1059 ifi.discussion
+@end example
+
+\e$B:G=i$N?t;z$O>uBV$G!"$3$l$O\e(B 211 \e$B$G$J$/$F$O$J$j$^$;$s!#<!$O$=$N%0\e(B
+\e$B%k!<%W$K$"$k5-;v$NAm?t!":G>.$N5-;vHV9f!":GBg$N5-;vHV9f!"$=$7$F:G\e(B
+\e$B8e$,%0%k!<%WL>$G$9!#5-;v$NAm?t$O!":GBg!&:G>.5-;vHV9f$+$iC1=c$K9M\e(B
+\e$B$($i$l$k?t$h$j$b>.$5$$$3$H$,$"$k$3$H$KCm0U$7$F$/$@$5$$!#$$$/$D$+\e(B
+\e$B$N5-;v$O<h$j>C$5$l$F$$$k$+$b$7$l$^$;$s!#\e(BGnus \e$B$OAm?t$OC1$K<N$F$F\e(B
+\e$B$7$^$C$F$$$k$N$G!"\e(B(\e$B$b$7$=$l$,LdBj$H$J$k$H$-$K\e(B) \e$B@5$7$$CM$r@8@.$9\e(B
+\e$B$kLLE]$rIi$&$Y$-$+$I$&$+$O!"FI<T$X$N2]Bj$H$7$F;D$7$F$"$j$^$9!#\e(B
+
+@example
+group-status = [ error / info ] eol
+error        = [ "4" / "5" ] 2<number> " " <Error message>
+info         = "211 " 3* [ <number> " " ] <string>
+@end example
+
+
+@item (nnchoke-close-group GROUP &optional SERVER)
+
+@var{group} \e$B$rJD$8!"$=$l$K@\B3$5$l$F$$$kA4$F$N;q8;$r3+J|$7$^$9!#\e(B
+\e$B$3$l$O$[$H$s$I$N%P%C%/%(%s%I$G$O2?$b$9$k$3$H$,$J$$$G$7$g$&!#\e(B
+
+\e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
+
+
+@item (nnchoke-request-list &optional SERVER)
+
+@var{server} \e$B>e$GMxMQ2DG=$JA4$F$N%0%k!<%W$N0lMw$rJV$7$^$9!#$3$l\e(B
+\e$B$O\e(B @emph{\e$BA4It\e(B} \e$B$H$$$&0UL#$G$9!#\e(B
+
+\e$B$3$l$,!"$?$C$?Fs$D$7$+%0%k!<%W$r;}$C$F$$$J$$%5!<%P!<$+$i$NNc$G$9!#\e(B
+
+@example
+ifi.test 0000002200 0000002000 y
+ifi.discussion 3324 3300 n
+@end example
+
+\e$B3F9T$K$O%0%k!<%WL>$,$"$j!"$=$7$F$=$N%0%k!<%WFb$N:GBg$N5-;vHV9f!"\e(B
+\e$B:G>.$N5-;vHV9f!"$=$7$F:G8e$K%U%i%0$G$9!#\e(B
+
+@example
+active-file = *active-line
+active-line = name " " <number> " " <number> " " flags eol
+name        = <string>
+flags       = "n" / "y" / "m" / "x" / "j" / "=" name
+@end example
+
+\e$B%U%i%0$O!"$=$N%0%k!<%W$,FI$_=P$7@lMQ\e(B (@samp{n}) \e$B$G$"$k$+!";J2q<T\e(B
+\e$BIU$-\e(B (@samp{m}) \e$B$G$"$k$+!";`$s$G$$$k\e(B (@samp{x}) \e$B$+!"$I$3$+B>$N%0\e(B
+\e$B%k!<%W$NJLL>\e(B (@samp{=other-group}) \e$B$G$"$k$+!">e5-$N$I$l$G$b$J$$\e(B
+(@samp{y}) \e$B$+!"$H$$$&$3$H$r<($7$F$$$^$9!#\e(B
+
+
+@item (nnchoke-request-post &optional SERVER)
+
+\e$B$3$N4X?t$O!"8=:_$N%P%C%U%!$rEj9F$7$^$9!#$3$l$OEj9F$,@.8y$7$?$+$I\e(B
+\e$B$&$+$rJV5Q$7$F$b9=$$$^$;$s$,!"I,?\$G$O$"$j$^$;$s!#Nc$($P!"Ej9F$,\e(B
+\e$BHsF14|$K9T$o$l$k$N$G$"$l$P!"$3$N4X?t$,=*N;$7$?;~E@$G$OEj9F$OIaDL\e(B
+\e$B40N;$7$F$$$^$;$s!#$=$N>l9g$3$N4X?t$O!"Ej9F$r40N;$5$;$k$3$H$,$G$-\e(B
+\e$B$J$$$H$-!"$=$l$r$O$C$-$j$HMxMQ<T$KCN$i$;$k8+D%$j4X?t$N$h$&$J$b$N\e(B
+\e$B$r@_Dj$9$k$Y$-$G$7$g$&!#\e(B
+
+\e$B$3$N4X?t$+$iJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
+
+@end table
+
+
+@node Optional Backend Functions
+@subsubsection \e$BG$0U%P%C%/%(%s%I4X?t\e(B
+
+@table @code
+
+@item (nnchoke-retrieve-groups GROUPS &optional SERVER)
+
+@var{groups} \e$B$O%0%k!<%W$N%j%9%H$G$"$j!"$3$N4X?t$O$=$l$iA4It$N%0\e(B
+\e$B%k!<%W$N%G!<%?$rMW5a$7$^$9!#$I$&$d$C$F$=$l$r9T$J$&$+$O\e(B gnus \e$B$NCN$C\e(B
+\e$B$?$3$H$G$O$"$j$^$;$s$,!"$3$l$O$G$-$k$@$1?WB.$JJ}K!$G9T$J$o$J$1$l\e(B
+\e$B$P$J$j$^$;$s!#\e(B
+
+\e$B$3$N4X?t$NJV5QCM$O\e(B @code{active} \e$B$+\e(B @code{group} \e$B$N$$$:$l$+$G!"\e(B
+\e$B7k2L$N%G!<%?$N7A<0$,2?$G$"$k$+$r<($7$^$9!#A0<T$O\e(B
+@code{nnchoke-request-list} \e$B$K$h$k%G!<%?$HF1$87A<0$G$"$j!"0lJ}8e\e(B
+\e$B<T$O\e(B @code{nnchoke-request-group} \e$B$,M?$($k$b$N$HF1$87A<0$N9T$G%P%C\e(B
+\e$B%U%!$OKd$a$i$l$^$9!#\e(B
+
+@example
+group-buffer = *active-line / *group-status
+@end example
+
+
+@item (nnchoke-request-update-info GROUP INFO &optional SERVER)
+
+Gnus \e$B%0%k!<%W>pJs\e(B (@pxref{Group Info}) \e$B$,JQ992U=j$H$7$F%P%C%/%(\e(B
+\e$B%s%I$KEO$5$l$^$9!#$3$l$O%P%C%/%(%s%I$,\e(B (\e$B2>A[%0%k!<%W$d\e(B imap \e$B%0%k!<\e(B
+\e$B%W$N>l9g$N$h$&$K\e(B) \e$BK\Ev$KA4$F$N>pJs$r;}$C$F$$$k>l9g$KJXMx$K$J$j$^\e(B
+\e$B$9!#$3$N4X?t$O!"$=$NMW5a$KE,9g$5$;$k>pJs$rGK2uE*$KCV$-49$(!"$=$N\e(B
+(\e$BCV$-49$($i$l$?\e(B) \e$B%0%k!<%W>pJs$rJV$7$^$9!#\e(B
+
+\e$B$3$N4X?t$+$iJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
+
+
+@item (nnchoke-request-type GROUP &optional ARTICLE)
+
+\e$BMxMQ<T$,\e(B ``\e$B%K%e!<%9$rAw?.$9$k\e(B'' \e$BL?Na\e(B (\e$BNc$($P!"35N,%P%C%U%!$G\e(B
+@kbd{F}) \e$B$r<B9T$7$?$H$-!"\e(Bgnus \e$B$OMxMQ<T$,%U%)%m!<%"%C%W$7$h$&$H$7\e(B
+\e$B$F$$$k5-;v$,%K%e!<%9$G$"$k$+%a!<%k$G$"$k$+$rCN$i$J$/$F$O$J$j$^$;\e(B
+\e$B$s!#$3$N4X?t$O\e(B @var{group} \e$B$NCf$N\e(B @var{article} \e$B$,%K%e!<%9$G$"$l\e(B
+\e$B$P\e(B @code{news} \e$B$r!"%a!<%k$G$"$l$P\e(B @code{mail} \e$B$r!"$=$N<oJL$r7hDj\e(B
+\e$B$G$-$J$1$l$P\e(B @code{unknown} \e$B$rJV5Q$7$^$9!#\e(B(@var{article} \e$B0z?t$O!"\e(B
+\e$B%a!<%k%0%k!<%W$H%K%e!<%9%0%k!<%W$,$4$A$c$^$<$K$J$C$F$k$+$b$7$l$J\e(B
+\e$B$$\e(B @code{nnvirtual} \e$B$K$*$$$FI,MW$G$9!#\e(B) @var{group} \e$B$H\e(B
+@var{article} \e$B$ON>J}$H$b\e(B @code{nil} \e$B$G$"$k$+$b$7$l$^$;$s!#\e(B
+
+\e$B$3$N4X?t$+$iJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
+
+
+@item (nnchoke-request-update-mark GROUP ARTICLE MARK)
+
+\e$B$b$7MxMQ<T$,!"$3$N%P%C%/%(%s%I$N5$$KF~$i$J$$0u$r@_Dj$7$h$&$H$7$?\e(B
+\e$B$i!"$3$N4X?t$,0u$rJQ99$9$k$3$H$,$G$-$^$9!#\e(BGnus \e$B$O$b$H$N\e(B 
+@var{mark} \e$B$NBe$o$j$K!"$3$N4X?t$,JV$7$?$b$N$r\e(B @var{article} \e$B$X$N\e(B
+\e$B0u$H$7$F;H$$$^$9!#%P%C%/%(%s%I$,5$$K$9$k$3$H$,FC$K$J$1$l$P!"85$N\e(B 
+@var{mark} \e$B$rJV$5$J$1$l$P$J$j$^$;$s!#\e(B@code{nil} \e$B$d$=$NB>$N%4%_$r\e(B
+\e$BJV$7$F$O$$$1$^$;$s!#\e(B
+
+\e$B;d$,CN$C$F$$$k$3$l$N$3$l$NMxMQK!$O!"\e(B@code{nnvirtual} \e$B$,9T$J$C$F\e(B
+\e$B$$$k$3$H$@$1$G$9\e(B --- \e$B$b$79=@.%0%k!<%W$,<+F04|8B@Z$l>C5n2DG=$G$"\e(B
+\e$B$l$P!"$3$N2>A[%0%k!<%W$G4{FI$N0u$rIU$1$k$H!"7k2L$H$7$F$=$N5-;v$K\e(B
+\e$B4|8B@Z$l>C5n$N0u$,IU$1$i$l$^$9!#\e(B
+
+\e$B$3$N4X?t$+$iJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
+
+
+@item (nnchoke-request-scan &optional GROUP SERVER)
+
+\e$B$3$N4X?t$O!"%P%C%/%(%s%I$,E~Ce5-;v$r3NG'$9$kMW5a$r9T$J$&$H$-$K$$\e(B
+\e$B$D$G$b\e(B (gnus \e$B$+$=$l0J30$K$h$C$F\e(B) \e$B!"$"$l$d$3$l$d$H8F$S=P$5$l$k$3\e(B
+\e$B$H$,$"$j$^$9!#%a!<%k%P%C%/%(%s%I$O$3$N4X?t$,5/F0$5$l$?$H$-!"E57?\e(B
+\e$BE*$K$O%9%W!<%k%U%!%$%k$rFI$`$+\e(B POP \e$B%5!<%P!<$KLd$$9g$o$;$K$$$-$^\e(B
+\e$B$9!#\e(B@var{group} \e$B$OFC$K5$$KN1$a$kI,MW$O$"$j$^$;$s\e(B --- \e$B$b$7%P%C%/\e(B
+\e$B%(%s%I$,!"0l$D$@$1$N%0%k!<%W$rAv::$9$k$N$OBgJQ$9$.$k$HH=CG$7$?>l\e(B
+\e$B9g$K$O!"A4%0%k!<%W$NA4Av::$r9T$J$C$F$b9=$$$^$;$s!#$G$9$,!"<BMQE*\e(B
+\e$B$K$G$-$l$P$=$l$r6I=jE*$KJD$8$F$*$/J}$,NI$$$G$7$g$&!#\e(B
+
+\e$B$3$N4X?t$KJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
+
+
+@item (nnchoke-request-group-description GROUP &optional SERVER)
+
+\e$B$3$N4X?t$K$h$C$FJV$5$l$k7k2L$N%G!<%?$O!"\e(B@var{group} \e$B$N@bL@$G$9!#\e(B
+
+@example
+description-line = name <TAB> description eol
+name             = <string>
+description      = <text>
+@end example
+
+@item (nnchoke-request-list-newsgroups &optional SERVER)
+
+\e$B$3$N4X?t$K$h$C$FJV$5$l$k7k2L$N%G!<%?$O!"%5!<%P!<>e$GMxMQ$G$-$k%0\e(B
+\e$B%k!<%WA4$F$N@bL@$G$9!#\e(B
+
+@example
+description-buffer = *description-line
+@end example
+
+
+@item (nnchoke-request-newgroups DATE &optional SERVER)
+
+\e$B$3$N4X?t$+$iJV$5$l$k7k2L$N%G!<%?$O!"\e(B@samp{date} \e$B0J9_$K:n@.$5$l$?\e(B
+\e$BA4$F$N%0%k!<%W$G$9!#\e(B@samp{date} \e$B$ODL>o$N?M4V$,FI$a$kF|IU$N7A<0$G\e(B
+\e$B$9!#%G!<%?$O\e(B active \e$B%P%C%U%!$N7A<0$G$J$1$l$P$J$j$^$;$s!#\e(B
+
+
+@item (nnchoke-request-create-group GROUP &optional SERVER)
+
+\e$B$3$N4X?t$O!"\e(B@var{group} \e$B$H$$$&L>A0$N6u$N%0%k!<%W$r:n@.$7$^$9!#\e(B
+
+\e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
+
+
+@item (nnchoke-request-expire-articles ARTICLES &optional GROUP SERVER FORCE)
+
+\e$B$3$N4X?t$O!"\e(B@var{articles} \e$B$NHO0O$NA4$F$N5-;v$KBP$7$F4|8B@Z$l>C\e(B
+\e$B5n=hM}$r9T$J$$$^$9!#\e(B (@var{articles} \e$B$O8=:_$O5-;vHV9f$NC1=c$J%j\e(B
+\e$B%9%H$G$9!#\e(B) \e$B$3$N4X?t$G>C5n$5$l$kA0$N!"5-;v$,$I$l$@$18E$$5-;v$G$"\e(B
+\e$B$k$+$N7hDj$O%P%C%/%(%s%I$KG$$5$l$F$$$^$9!#\e(B@var{force} \e$B$,\e(B
+@code{nil} \e$B0J30$G$"$l$P!"$=$l$,$I$s$J$K?7$7$$$b$N$G$"$C$F$b!"A4\e(B
+\e$B$F$N\e(B @var{articles} \e$B$,>C5n$5$l$^$9!#\e(B
+
+\e$B$3$N4X?t$O:o=|$7$J$+$C$?!"$"$k$$$O:o=|$9$k$3$H$,$G$-$J$+$C$?5-;v\e(B
+\e$B$N%j%9%H$rJV$7$^$9!#\e(B
+
+\e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
+
+
+@item (nnchoke-request-move-article ARTICLE GROUP SERVER ACCEPT-FORM
+&optional LAST)
+
+\e$B$3$N4X?t$O\e(B @var{article} (\e$BHV9f\e(B) \e$B$r!"\e(B @var{group} \e$B$+$i\e(B
+@var{accept-form} \e$B$r8F$S=P$7$F0\F0$7$^$9!#\e(B
+
+\e$B$3$N4X?t$O!"LdBj$N5-;v$r0\F0$5$;$k$?$a$N=`Hw$H$7$F!"5-;v$KIU2C$5\e(B
+\e$B$l$?%X%C%@!<9T$rA4$F:o=|$7!"0lHL$K5-;v$r!V$-$l$$$5$C$Q$j!W$K$7$^\e(B
+\e$B$9!#$=$7$F\e(B ``\e$B$-$l$$$J\e(B'' \e$B5-;v$N$"$k%P%C%U%!!<$G\e(B @var{accept-form}
+\e$B$r\e(B @code{eval} \e$B$7$^$9!#$3$l$OK\Ev$KJ#@=$r9T$J$$$^$9!#$b$7\e(B
+@code{eval} \e$B$,\e(B @code{nil} \e$B0J30$NCM$rJV$7$?$i!"$=$N5-;v$O:o=|$5$l\e(B
+\e$B$^$;$s!#\e(B
+
+@var{last} \e$B$,\e(B @code{nil} \e$B$G$"$l$P!"$3$ND>8e$K$5$i$KMW5a$,H/9T$5\e(B
+\e$B$l$k8+9~$_$,9b$$!"$H$$$&0UL#$K$J$j!"$3$l$K$h$C$F:GE,2=$,$$$/$i$+\e(B
+\e$B$G$-$k$h$&$K$J$j$^$9!#\e(B
+
+\e$B$3$N4X?t$O!"%0%k!<%WL>$,\e(B @code{car} \e$B$G!"$=$N5-;v$N0\F0@h$N5-;vHV\e(B
+\e$B9f$,\e(B @code{cdr} \e$B$G$"$k\e(B cons \e$B%;%k$rJV$7$^$9!#\e(B
+
+\e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
+
+
+@item (nnchoke-request-accept-article GROUP &optional SERVER LAST)
+
+\e$B$3$N4X?t$O!"8=:_$N%P%C%U%!$r<h$j!"$=$l$r\e(B @var{group} \e$B$NCf$KA^F~\e(B
+\e$B$7$^$9!#\e(B@var{last} \e$B$,\e(B @code{nil} \e$B$G$"$l$P!"$3$N4X?t$X$N$5$i$J$k\e(B
+\e$B8F$S=P$7$,D>$A$K9T$o$l$k$H$$$&0UL#$G$9!#\e(B
+
+\e$B$3$N4X?t$O%0%k!<%WL>$,\e(B @code{car} \e$B$G!"$=$N5-;v$N0\F0@h$N5-;vHV9f\e(B
+\e$B$,\e(B @code{cdr} \e$B$G$"$k\e(B cons \e$B%;%k$rJV$7$^$9!#\e(B
+
+\e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
+
+
+@item (nnchoke-request-replace-article ARTICLE GROUP BUFFER)
+
+\e$B$3$N4X?t$O\e(B @var{article} (\e$BHV9f\e(B) \e$B$r\e(B @var{group} \e$B$+$i:o=|$7!"Be$o\e(B
+\e$B$j$K\e(B @var{buffer} \e$B$r$=$3$KA^F~$7$^$9!#\e(B
+
+\e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
+
+
+@item (nnchoke-request-delete-group GROUP FORCE &optional SERVER)
+
+\e$B$3$N4X?t$O\e(B @var{group} \e$B$r>C5n$7$^$9!#\e(B \e$B$b$7\e(B @var{force} \e$B$,$"$l$P!"\e(B
+\e$B$=$N%0%k!<%WFb$NA4$F$N5-;v$rK\Ev$K>C5n$7!"$=$7$F$=$N%0%k!<%W<+?H\e(B
+\e$B$r>C5n$7$^$9!#\e(B (\e$B$b$7\e(B ``\e$B%0%k!<%W<+?H\e(B'' \e$B$H$$$&$b$N$,$"$l$P!#\e(B)
+
+\e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
+
+
+@item (nnchoke-request-rename-group GROUP NEW-NAME &optional SERVER)
+
+\e$B$3$N4X?t$O\e(B @var{group} \e$B$+$i\e(B @var{new-name} \e$B$KL>A0$rJQ99$7$^$9!#\e(B
+@var{group} \e$BFb$K$"$k5-;v$OA4$F\e(B @var{new-name} \e$B$K0\F0$7$^$9!#\e(B
+
+\e$BJV$5$l$k7k2L$N%G!<%?$O$"$j$^$;$s!#\e(B
+
+@end table
+
+
+@node Error Messaging
+@subsubsection \e$B%(%i!<%a%C%;!<%8I=<(\e(B
+
+@findex nnheader-report
+@findex nnheader-get-report
+\e$B%P%C%/%(%s%I$O%(%i!<>u67$rJs9p$9$k$N$K\e(B @code{nnheader-report} \e$B$r\e(B
+\e$B;H$o$J$/$F$O$J$j$^$;$s\e(B --- \e$BMW5a$r<B9T$G$-$J$$$H$-$K%(%i!<$r@85/\e(B
+\e$B$5$;$F$O$$$1$^$;$s!#$3$N4X?t$N:G=i$N0z?t$O%P%C%/%(%s%IL>$N%7%s%\\e(B
+\e$B%k$G!";D$j$O!"J#?t$N0z?t$,$"$l$P\e(B @code{format} \e$B$X$N0z?t$H$7$F2r\e(B
+\e$B<a$5$l!"0l$D$G$"$l$P$?$@$NJ8;zNs$K$J$j$^$9!#$3$N4X?t$O>o$K\e(B
+@code{nil} \e$B$rJV$5$J$/$F$O$J$j$^$;$s!#\e(B
+
+@lisp
+(nnheader-report 'nnchoke "You did something totally bogus")
+
+(nnheader-report 'nnchoke "Could not request group %s" group)
+@end lisp
+
+\e$B0lJ}\e(B gnus \e$B$O!"%5!<%P!<$+$i\e(B @code{nil} \e$B$rJV$5$l$?$H$-$K\e(B
+@code{nnheader-get-report} \e$B$r8F$S=P$7!"$=$7$F$3$N4X?t$,LdBj$N%P%C\e(B
+\e$B%/%(%s%I$KBP$7$F:G8e$KJs9p$5$l$?%a%C%;!<%8$rJV$7$^$9!#$3$N4X?t$O\e(B
+\e$B0l$D$N0z?t\e(B --- \e$B%5!<%P!<$N%7%s%\%k$r<h$j$^$9!#\e(B
+
+\e$BFbItE*$K$O!"$3$l$i$N4X?t$O\e(B @var{backend}@code{-status-string} \e$B$K\e(B
+\e$B%"%/%;%9$^$9!"$D$^$j\e(B @code{nnchoke} \e$B%P%C%/%(%s%I$O$=$N%(%i!<%a%C\e(B
+\e$B%;!<%8$r\e(B @code{nnchoke-status-string} \e$B$K3JG<$7$^$9!#\e(B
+
+
+@node Writing New Backends
+@subsubsection \e$B?7$7$$%P%C%/%(%s%I$r=q$/\e(B
+
+\e$BB?$/$N%P%C%/%(%s%I$O$H$F$bN`;w$7$F$$$^$9!#\e(B@code{nnml} \e$B$O\e(B
+@code{nnspool} \e$B$K$H$F$b;w$F$$$^$9$,!"%5!<%P!<>e$N5-;v$rJT=8$9$k\e(B
+\e$B$3$H$,$G$-$^$9!#\e(B@code{nnmh} \e$B$O\e(B @code{nnml} \e$B$K$H$F$b;w$F$$$^$9$,!"\e(B
+\e$B$3$l$O%"%/%F%#%V%U%!%$%k$r;H$o$:!"35MW%G!<%?%Y!<%9$bJ];}$7$^$;$s!#\e(B
+@code{nndir} \e$B$O\e(B @code{nnml} \e$B$K$H$F$b;w$F$$$^$9$,!"$3$l$K$O\e(B ``\e$B%0\e(B
+\e$B%k!<%W\e(B'' \e$B$N35G0$O$J$/!"5-;v$N=$@5$O$G$-$^$;$s!#\e(B
+
+\e$B?7$7$$%P%C%/%(%s%I$r=q$/$H$-$KB>$N%P%C%/%(%s%I$+$i4X?t$r\e(B ``\e$B7Q>5\e(B'' 
+\e$B$9$k$3$H$,2DG=$G$"$C$F$[$7$$!"$H;W$&$N$OM}$KE,$C$F$$$^$9!#$=$7$F\e(B
+\e$B$^$5$K!"$"$J$?$,$=$&$7$?$1$l$P!"$=$l$,$G$-$k$N$G$9!#\e(B(\e$B$"$J$?$,$=\e(B
+\e$B$&$7$?$/$J$1$l$P$7$J$/$F$bNI$$$G$9$h!"$b$A$m$s!#\e(B)
+
+\e$BA4$F$N%P%C%/%(%s%I$O8x3+JQ?t$H8x3+4X?t$r!"\e(B @code{nnoo} \e$B$H8F$P$l\e(B
+\e$B$k%Q%C%1!<%8$r;H$C$F@k8@$7$^$9!#\e(B
+
+\e$BB>$N%P%C%/%(%s%I$+$i4X?t$r7Q>5$9$k$K$O\e(B (\e$B$=$7$F8=:_$N%P%C%/%(%s%I\e(B
+\e$B$+$iB>$N%P%C%/%(%s%I$K4X?t$r7Q>5$G$-$k$h$&$K$9$k$K$O\e(B) \e$B!"0J2<$N%^\e(B
+\e$B%/%m$r;HMQ$7$J$1$l$P$J$j$^$;$s!#\e(B
+
+@table @code
+
+@item nnoo-declare
+\e$B$3$N%^%/%m$O!":G=i$N0z?t$r!"$=$N8e$KB3$/0z?t$N;R6!$G$"$k$3$H$r@k\e(B
+\e$B8@$7$^$9!#Nc$($P!"\e(B
+
+@lisp
+(nnoo-declare nndir
+  nnml nnmh)
+@end lisp
+
+\e$B$3$l$G\e(B @code{nndir}\e$B$O!"\e(B@code{nnml} \e$B$H\e(B @code{nnmh} \e$B$NN>J}$+$i4X?t\e(B
+\e$B$r7Q>5$7$h$&$H$7$F$$$k$3$H$r@k8@$7$^$9!#\e(B
+
+@item defvoo
+\e$B$3$N%^%/%m$O\e(B @code{defvar} \e$B$HF15A$G$9$,!"$=$NJQ?t$r8x3+%5!<%P!<\e(B
+\e$BJQ?t$H$7$FEPO?$7$^$9!#$[$H$s$I$N>uBV;X8~7?$NJQ?t$O\e(B @code{defvar}
+\e$B$G$O$J$/\e(B @code{defvoo} \e$B$K$h$C$F@k8@$9$k$Y$-$G$9!#\e(B
+
+\e$BDL>o$N\e(B @code{defvar} \e$B0z?t$K2C$($F!"$3$N%^%/%m$O?F%P%C%/%(%s%I$N\e(B
+\e$BJQ?t$N%j%9%H$r<h$j!"$3$N4X?t$,$=$N%P%C%/%(%s%IFb$G<B9T$5$l$k$H$-\e(B
+\e$B$KJQ?t$rCV$-49$($^$9!#\e(B
+
+@lisp
+(defvoo nndir-directory nil
+  "Where nndir will look for groups."
+  nnml-current-directory nnmh-current-directory)
+@end lisp
+
+\e$B$3$l$O\e(B @code{nndir} \e$B$N$?$a$K\e(B @code{nnml} \e$B$N4X?t$,8F$S=P$5$l$?$H\e(B
+\e$B$-$K!"\e(B@code{nnml-current-directory} \e$B$O\e(B @code{nndir-directory} \e$B$K\e(B
+\e$B@_Dj$5$l$k$H$$$&0UL#$G$9!#\e(B(@code{nnmh} \e$B$bF1MM$G$9!#\e(B)
+
+@item nnoo-define-basics
+\e$B$3$N%^%/%m$O!"$[$H$s$IA4It$N%P%C%/%(%s%I$,;}$D$Y$-6&DL4X?t$r$$$/\e(B
+\e$B$D$+Dj5A$7$^$9!#\e(B
+
+@example
+(nnoo-define-basics nndir)
+@end example
+
+@item deffoo
+\e$B$3$N%^%/%m$O$^$5$K\e(B @code{defun} \e$B$N$h$&$J$b$N$G!"F10l$N0z?t$r<h$j\e(B
+\e$B$^$9!#DL>o$N\e(B @code{defun} \e$B=hM}$K2C$($F!"$3$N%^%/%m$O$=$N4X?t$r8x\e(B
+\e$B3+$7$F$$$k$b$N$H$7$FEPO?$7!"B>$N%P%C%/%(%s%I$,$=$l$r7Q>5$G$-$k$h\e(B
+\e$B$&$K$7$^$9!#\e(B
+
+@item nnoo-map-functions
+\e$B$3$N%^%/%m$O8=:_$N%P%C%/%(%s%I$N4X?t$+$i?F%P%C%/%(%s%I$N4X?t$X$N\e(B
+\e$BCV$-49$($r9T$J$($k$h$&$K$7$^$9!#\e(B
+
+@example
+(nnoo-map-functions nndir
+  (nnml-retrieve-headers 0 nndir-current-group 0 0)
+  (nnmh-request-article 0 nndir-current-group 0 0))
+@end example
+
+\e$B$3$l$O\e(B @code{nndir-retrieve-headers} \e$B$,8F$S=P$5$l$?$H$-!"0lHVL\!"\e(B
+\e$B;0HVL\!";MHVL\$N0z?t$,\e(B @code{nnml-retrieve-headers} \e$B$KEO$5$l!"0l\e(B
+\e$BJ}!"FsHVL\$N0z?t$O\e(B @code{nndir-current-group} \e$B$NCM$H$7$F@_Dj$5$l\e(B
+\e$B$k!"$H$$$&0UL#$G$9!#\e(B
+
+@item nnoo-import
+\e$B$3$N%^%/%m$OB>$N%P%C%/%(%s%I$+$i4X?t$r<h$j9~$_$^$9!#$3$l$OC1$K$^\e(B
+\e$B$@Dj5A$5$l$F$$$J$$4X?t$rDj5A$9$k$@$1$J$N$G!"%=!<%9%U%!%$%k$N:G8e\e(B
+\e$B$N=hM}$H$7$F=q$+$J$1$l$P$J$j$^$;$s!#\e(B
+
+@example
+(nnoo-import nndir
+  (nnmh
+   nnmh-request-list
+   nnmh-request-newgroups)
+  (nnml))
+@end example
+
+\e$B$3$l$O!"\e(B @code{nndir-request-list} \e$B$X$N8F$S=P$7$OC1$K\e(B
+@code{nnmh-request-list} \e$B$K0z$-EO$5$l!"0lJ}!"\e(B@code{nnml} \e$B$N8x3+\e(B
+\e$B4X?t$G$^$@\e(B @code{nndir} \e$B$GDj5A$5$l$F$$$J$$$b$N$r$3$3$GDj5A$7$^$9!#\e(B
+
+@end table
+
+\e$B0J2<$O\e(B @code{nndir} \e$B%P%C%/%(%s%I$N$A$g$C$HC;=L$7$?HG$G$9!#\e(B
+
+@lisp
+;;; nndir.el --- single directory newsgroup access for Gnus
+;; Copyright (C) 1995,96 Free Software Foundation, Inc.
+
+;;; Code:
+
+(require 'nnheader)
+(require 'nnmh)
+(require 'nnml)
+(require 'nnoo)
+(eval-when-compile (require 'cl))
+
+(nnoo-declare nndir
+  nnml nnmh)
+
+(defvoo nndir-directory nil
+  "Where nndir will look for groups."
+  nnml-current-directory nnmh-current-directory)
+
+(defvoo nndir-nov-is-evil nil
+  "*Non-nil means that nndir will never retrieve NOV headers."
+  nnml-nov-is-evil)
+
+(defvoo nndir-current-group "" nil nnml-current-group nnmh-current-group)
+(defvoo nndir-top-directory nil nil nnml-directory nnmh-directory)
+(defvoo nndir-get-new-mail nil nil nnml-get-new-mail nnmh-get-new-mail)
+
+(defvoo nndir-status-string "" nil nnmh-status-string)
+(defconst nndir-version "nndir 1.0")
+
+;;; Interface functions.
+
+(nnoo-define-basics nndir)
+
+(deffoo nndir-open-server (server &optional defs)
+  (setq nndir-directory
+        (or (cadr (assq 'nndir-directory defs))
+            server))
+  (unless (assq 'nndir-directory defs)
+    (push `(nndir-directory ,server) defs))
+  (push `(nndir-current-group
+          ,(file-name-nondirectory (directory-file-name nndir-directory)))
+        defs)
+  (push `(nndir-top-directory
+          ,(file-name-directory (directory-file-name nndir-directory)))
+        defs)
+  (nnoo-change-server 'nndir server defs))
+
+(nnoo-map-functions nndir
+  (nnml-retrieve-headers 0 nndir-current-group 0 0)
+  (nnmh-request-article 0 nndir-current-group 0 0)
+  (nnmh-request-group nndir-current-group 0 0)
+  (nnmh-close-group nndir-current-group 0))
+
+(nnoo-import nndir
+  (nnmh
+   nnmh-status-message
+   nnmh-request-list
+   nnmh-request-newgroups))
+
+(provide 'nndir)
+@end lisp
+
+
+@node Hooking New Backends Into Gnus
+@subsubsection \e$B?7$7$$%P%C%/%(%s%I$r\e(B gnus \e$B$K7R$2$k\e(B
+
+@vindex gnus-valid-select-methods
+\e$B$"$J$?$N?7$7$$%P%C%/%(%s%I$r\e(B gnus \e$B$G;H$$$O$8$a$k$N$O$H$F$b4JC1$G\e(B
+\e$B$9\e(B --- \e$BC1$K\e(B @code{gnus-declare-backend} \e$B4X?t$G@k8@$9$k$@$1$G$9!#\e(B
+\e$B$3$l$O%P%C%/%(%s%I$r\e(B @code{gnus-valid-select-methods} \e$BJQ?t$KDI2C\e(B
+\e$B$7$^$9!#\e(B
+
+@code{gnus-declare-backend} \e$B$OFs$D$N0z?t$r<h$j$^$9\e(B --- \e$B%P%C%/%(\e(B
+\e$B%s%I$NL>A0$HE,Ev$J?t$NG=NO\e(B @dfn{abilities} \e$B$G$9!#\e(B
+
+\e$B$3$l$,Nc$G$9!#\e(B
+
+@lisp
+(gnus-declare-backend "nnchoke" 'mail 'respool 'address)
+@end lisp
+
+\e$BG=NO$K$O0J2<$N$b$N$,$"$j$^$9!#\e(B
+
+@table @code
+@item mail
+\e$B$3$l$O%a!<%kIw%P%C%/%(%s%I$G$9\e(B --- \e$B%U%)%m!<%"%C%W$O\e(B (\e$B$?$$$F$$$O\e(B)
+\e$B%a!<%k$GAw$i$l$^$9!#\e(B
+@item post
+\e$B$3$l$O%K%e!<%9Iw%P%C%/%(%s%I$G$9\e(B --- \e$B%U%)%m!<%"%C%W$O\e(B (\e$B$?$$$F$$\e(B
+\e$B$O\e(B) \e$B%K%e!<%9$GAw$i$l$^$9!#\e(B
+@item post-mail
+\e$B$3$N%P%C%/%(%s%I$O%a!<%k$H%K%e!<%9$NN>J}$r%5%]!<%H$7$^$9!#\e(B
+@item none
+\e$B$3$l$O%K%e!<%9$G$b%a!<%k$G$b$J$$%P%C%/%(%s%I$G$9\e(B --- \e$BA4$/0c$C$?\e(B
+\e$B2?$+$G$9!#\e(B
+@item respool
+\e$B$3$l$O:F%9%W!<%k$r%5%]!<%H$7$^$9\e(B --- \e$B$H$$$&$h$j$O!"$=$N85$N5-;v\e(B
+\e$B$H%0%k!<%W$r=$@5$9$k$3$H$,$G$-$^$9!#\e(B
+@item address
+\e$B2>A[%5!<%P!<L>$NCf$K%5!<%P!<$NL>A0$,4^$^$k$H$$$&$3$H$G$9!#$3$l$O\e(B
+\e$B$[$H$s$IA4It$N%P%C%/%(%s%I$GI,MW$K$J$j$^$9!#\e(B
+@item prompt-address
+\e$B%0%k!<%W%P%C%U%!$G\e(B @kbd{B} \e$B$J$I$G$3$NL?Na$r<B9T$7$?$H$-!"%f!<%6\e(B
+\e$B$O%"%I%l%9$N%W%m%s%W%HF~NO$r5a$a$i$l$^$9!#$3$l$ONc$($P!"\e(B
+@code{nntp} \e$B$N$h$&$J%P%C%/%(%s%I$G$OI,MW$G!"\e(B@code{nnmbox} \e$B$G$OI,\e(B
+\e$BMW$G$O$"$j$^$;$s!#\e(B
+@end table
+
+
+@node Mail-like Backends
+@subsubsection \e$B%a!<%kIw%P%C%/%(%s%I\e(B
+
+\e$B%a!<%k%P%C%/%(%s%I$,$=$NB>$N%P%C%/%(%s%I$KBP$7$F0l@~$r2h$7$F$$$k\e(B
+\e$BE@$O!"%a!<%k%P%C%/%(%s%I$O\e(B @file{nnmail.el} \e$B$NCf$N6&DL4X?t$K6/$/\e(B
+\e$B0MB8$7$F$$$k$H$$$&E@$G$9!#Nc$($P!"\e(B@code{nnml-request-scan} \e$B$NDj\e(B
+\e$B5A$O$3$N$h$&$K$J$j$^$9!#\e(B
+
+@lisp
+(deffoo nnml-request-scan (&optional group server)
+  (setq nnml-article-file-alist nil)
+  (nnmail-get-new-mail 'nnml 'nnml-save-nov nnml-directory group))
+@end lisp
+
+\e$BC1$K\e(B @code{nnmail-get-new-mail} \e$B$K$$$/$D$+0z?t$rM?$($F8F$S=P$9$@\e(B
+\e$B$1$G!"\e(B@code{nnmail} \e$B$,%a!<%k$N0\F0$dJ,N%$rA4$F$NLLE]$r8+$F$/$l$^\e(B
+\e$B$9!#\e(B
+
+\e$B$3$N4X?t$O;M$D$N0z?t$r<h$j$^$9!#\e(B
+
+@table @var
+@item method
+\e$B$3$l$O!"$3$N8F$S=P$7$r$I$N%P%C%/%(%s%I$,@UG$$rIi$&$+$r;X<($9$k%7\e(B
+\e$B%s%\%k$G$9!#\e(B
+
+@item exit-function
+\e$B$3$N4X?t$OJ,N%$,<B9T$5$l$?8e$K8F$S=P$5$l$^$9!#\e(B
+
+@item temp-directory
+\e$B0l;~%U%!%$%k$r3JG<$9$k>l=j$G$9!#\e(B
+
+@item group
+\e$B$3$N>JN,2DG=$J0z?t$O!"J,N%$,0l$D$N%0%k!<%W$KBP$7$F$N$_<B9T$5$l$k\e(B
+\e$B$Y$-$G$"$k$H$-$N%0%k!<%WL>$G$9!#\e(B
+@end table
+
+@code{nnmail-get-new-mail} \e$B$O3F5-;v$rJ]B8$9$k$?$a$K\e(B
+@var{backend}@code{-save-mail} \e$B$r8F$S=P$7$^$9!#\e(B
+@var{backend}@code{-active-number} \e$B$O$3$N5-;v$K3d$jEv$F$i$l$?5-\e(B
+\e$B;vHV9f$rD4$Y$k$?$a$K8F$S=P$5$l$^$9!#\e(B
+
+\e$B$3$N4X?t$O<!$NJQ?t$b;HMQ$7$^$9!#\e(B
+@var{backend}@code{-get-new-mail} (\e$B$3$N%P%C%/%(%s%I$N?7Ce%a!<%k\e(B
+\e$B$rD4$Y$k$+$I$&$+\e(B) \e$B$H!"?7$7$$%"%/%F%#%V%U%!%$%k$r@8@.$9$k$?$a$N\e(B
+@var{backend}@code{-group-alist} \e$B$H\e(B
+@var{backend}@code{-active-file} \e$B$G$9!#\e(B
+@var{backend}@code{-group-alist} \e$B%0%k!<%W$N%"%/%F%#%VO"A[%j%9%H\e(B
+\e$B$G!"0J2<$N$h$&$J$b$N$G$9!#\e(B
+
+@example
+(("a-group" (1 . 10))
+ ("some-group" (34 . 39)))
+@end example
+
+
+@node Score File Syntax
+@subsection \e$B%9%3%"%U%!%$%k$N9=J8\e(B
+
+\e$B%9%3%"%U%!%$%k$O4JC1$KJ,@O2DG=$G!"$7$+$7Hs>o$K=@Fp$J$h$&$K0U?^$5$l$F$$$^\e(B
+\e$B$9!#$=$l$K$O\e(B Emacs Lisp \e$B$N%j%9%H$HF1$8FI$_9~$_9=J8$JMM$J$b$N$,$=$N;XDj$K\e(B
+\e$B9g$&$@$m$&$H$$$&;v$,7hDj$5$l$^$7$?!#\e(B
+
+\e$B$3$l$ONI$/$"$k%9%3%"%U%!%$%k$G$9\e(B:
+
+@lisp
+(("summary"
+  ("win95" -10000 nil s)
+  ("Gnus"))
+ ("from"
+  ("Lars" -1000))
+ (mark -100))
+@end lisp
+
+\e$B%9%3%"%U%!%$%k$N\e(B BNF \e$BDj5A$G$9!#\e(B
+
+@example
+score-file       = "" / "(" *element ")"
+element          = rule / atom
+rule             = string-rule / number-rule / date-rule
+string-rule      = "(" quote string-header quote space *string-match ")"
+number-rule      = "(" quote number-header quote space *number-match ")"
+date-rule        = "(" quote date-header quote space *date-match ")"
+quote            = <ascii 34>
+string-header    = "subject" / "from" / "references" / "message-id" /
+                   "xref" / "body" / "head" / "all" / "followup"
+number-header    = "lines" / "chars"
+date-header      = "date"
+string-match     = "(" quote <string> quote [ "" / [ space score [ "" /
+                   space date [ "" / [ space string-match-t ] ] ] ] ] ")"
+score            = "nil" / <integer>
+date             = "nil" / <natural number>
+string-match-t   = "nil" / "s" / "substring" / "S" / "Substring" /
+                   "r" / "regex" / "R" / "Regex" /
+                   "e" / "exact" / "E" / "Exact" /
+                   "f" / "fuzzy" / "F" / "Fuzzy"
+number-match     = "(" <integer> [ "" / [ space score [ "" /
+                   space date [ "" / [ space number-match-t ] ] ] ] ] ")"
+number-match-t   = "nil" / "=" / "<" / ">" / ">=" / "<="
+date-match       = "(" quote <string> quote [ "" / [ space score [ "" /
+                   space date [ "" / [ space date-match-t ] ] ] ] ")"
+date-match-t     = "nil" / "at" / "before" / "after"
+atom             = "(" [ required-atom / optional-atom ] ")"
+required-atom    = mark / expunge / mark-and-expunge / files /
+                   exclude-files / read-only / touched
+optional-atom    = adapt / local / eval
+mark             = "mark" space nil-or-number
+nil-or-number    = "nil" / <integer>
+expunge          = "expunge" space nil-or-number
+mark-and-expunge = "mark-and-expunge" space nil-or-number
+files            = "files" *[ space <string> ]
+exclude-files    = "exclude-files" *[ space <string> ]
+read-only        = "read-only" [ space "nil" / space "t" ]
+adapt            = "adapt" [ space "ignore" / space "t" / space adapt-rule ]
+adapt-rule       = "(" *[ <string> *[ "(" <string> <integer> ")" ] ")"
+local            = "local" *[ space "(" <string> space <form> ")" ]
+eval             = "eval" space <form>
+space            = *[ " " / <TAB> / <NEWLINE> ]
+@end example
+
+\e$B%9%3%"%U%!%$%k$NG'<1IT2DG=$JMWAG$OL5;k$5$l$k$Y$-$G$9$,!"<N$F$i$l$k$o$1$G\e(B
+\e$B$O$"$j$^$;$s!#\e(B
+
+\e$B$4Mw$NDL$j!"6uGr$,I,MW$G$9$,!"6uGr$NNL$H7?$OL54X78$G$9!#$3$l$O%9%3%"%U%!\e(B
+\e$B%$%k$NMM<0$O%W%m%0%i%^!<$KG$$5$l$F$$$k$H$$$&;v$G$9\e(B---\e$BA4$F$r0l$D$ND9!<!<\e(B
+\e$B$$9T$KEG$-=P$9$N$,4JC1$G$"$l$P!"$=$l$O9=$$$^$;$s!#\e(B
+
+\e$B$$$m$$$m$J%"%H%`$N0UL#$O$3$N%^%K%e%"%k$N$I$3$+$G@bL@$5$l$F$$$^$9\e(B 
+(@pxref{Score File Format})\e$B!#\e(B
+
+
+@node Headers
+@subsection \e$B%X%C%@!<\e(B
+
+\e$BFbItE*$K$O\e(B gnus \e$B$OIT;W5D$JN.57$G!"\e(B@sc{nov} \e$BMM<0$KBP1~$9$k5-;v$N%X%C%@!<\e(B
+\e$B$rN/$a$F$*$/MM<0$r;H$$$^$9!#$"$k?M$O!":n<T$,\e(B @sc{nov} \e$B$N;EMM$r8+$FCQ$8$k\e(B
+\e$B;vL5$/A4$F$r\e(B @emph{\e$BEp$s$@\e(B} \e$B$H;W$&$+$b$7$l$^$;$s$,!"$=$N?M$O@5$7$$$G$9!#\e(B
+
+@dfn{\e$B%X%C%@!<\e(B} \e$B$OHs>o$KIiC4$N$+$1$i$l$9$.$?8l$G$9!#\e(B ``\e$B%X%C%@!<\e(B'' \e$B$O\e(B 
+RFC1036 \e$B$G$O5-;v$NF,$N9T$N;v\e(B (\e$BNc$($P!"\e(B@code{From}) \e$B$rOC$9$N$KMQ$$$i$l$F\e(B
+\e$B$$$^$9!#$=$l$OB?$/$N?M$+$i\e(B ``\e$B%X%C%I\e(B''---``\e$B%X%C%@!<$HK\BN\e(B'' \e$B$NF15A8l$H$7\e(B
+\e$B$F;H$o$l$F$$$^$9!#\e(B (\e$B$3$l$O!";d$N0U8+$G$OHr$1$i$l$k$Y$-$G$9!#\e(B) \e$B$=$7$F!"\e(B
+gnus \e$B$OFbIt$G$O\e(B ``\e$B%X%C%@!<\e(B'' \e$B$H8F$VMM<0$r;H$C$F$*$j!";d$O$3$3$G$=$l$K$D\e(B
+\e$B$$$F@bL@$7$^$9!#$3$l$O\e(B9\e$B$D$NMWAG$+$i$J$k%Y%/%H%k$G!"4pK\E*$K!"$=$l$>$l$N\e(B
+\e$B%X%C%@!<\e(B (\e$B$"DK\e(B) \e$B$,0l$D$N6u$->l=j$r@j$a$F$$$^$9!#\e(B
+
+\e$B$3$l$i$N6u$->l=j$O!"=gHV$K\e(B: @code{number}\e$B!"\e(B@code{subject}\e$B!"\e(B@code{from}\e$B!"\e(B
+@code{date}\e$B!"\e(B@code{id}\e$B!"\e(B@code{chars}\e$B!"\e(B@code{lines}\e$B!"\e(B@code{xref} \e$B$G$9!#$3\e(B
+\e$B$l$i$N6u$->l=j$K?($C$F@_Dj$9$k%^%/%m$,$"$j$^$9\e(B---\e$B$=$l$i$OA4$F!"$=$l$>$l\e(B 
+@code{mail-header-} \e$B$H\e(B @code{mail-header-set-} \e$B$$$&M=A[$5$l$kL>A0$r;}$C\e(B
+\e$B$F$$$^$9!#\e(B
+
+\e$B>l=j\e(B @code{xref} \e$B$OK\Ev$O\e(B @code{misc} \e$B$N>l=j$G$9!#$$$m$s$JDI2C$N>pJs$O$=\e(B
+\e$B$3$KF~$l$i$l$^$9!#\e(B
+
+
+@node Ranges
+@subsection \e$BHO0O\e(B
+
+@sc{gnus} \e$B$O;d$K$OHs>o$KLr$KN)$D$H;W$o$l$k35G0$rF3F~$7$^$7$?$N$G!";d$O$=\e(B
+\e$B$l$r$?$/$5$s;H$$!"$+$J$jG0F~$j$K:n$j>e$2$F$-$^$7$?!#\e(B
+
+\e$B<ALd$OC1=c$G$9\e(B: \e$B$b$7$"$J$?$,BgNL$N?t;z$K$h$jF10l@-$rJ]>Z$5$l$k\e(B \e$B$b$N\e(B 
+(object) (@emph{\e$BMpK=$J\e(B} \e$BNc$r>e$2$k$H!"5-;v$,$=$&$G$9\e(B) \e$B$r\e(B ``\e$B4^$^$l$F$$$k\e(B'' 
+\e$B$H$7$F8+$J$7$?$$$H$-$O!"IaDL$NO"B3E*9T0Y$O$"$^$jLr$KN)$A$^$;$s!#\e(B (\e$BD9$5\e(B 
+200,000 \e$B$NO"B3J*$O>/$7B)$,D9$9$.$^$9!#\e(B)
+
+\e$B$3$l$N2r7h:v$O<ALd$HF1$8$/$i$$C1=c$G$9!#C1$K$=$NO"B3J*$r2u$;$PNI$$$@$1$G\e(B
+\e$B$9!#\e(B
+
+@example
+(1 2 3 4 5 6 10 11 12)
+@end example
+
+\e$B$O<!$N$b$N$KJQ7A$5$l$^$9!#\e(B
+
+@example
+((1 . 6) (10. 12))
+@end example
+
+\e$B$"$N7y$J\e(B @samp{(13. 13)} \e$B$N$h$&$JMWAG$rHr$1$k$?$a$K!"$=$l$N$_$N\e(B \e$B$b$N\e(B 
+(object) \e$B$r<($9$?$a$K\e(B @samp{13} \e$B$OM-8z$JMWAG$K$J$C$F$$$^$9!#\e(B
+
+@example
+((1 . 6) 7 (10 . 12))
+@end example
+
+\e$B$3$l$O\e(B2\e$B$D$NHO0O$rHf3S$7$F$=$l$,Ey2A\e(B (equal) \e$B$G$"$k$+$rD4$Y$k;v$O>/$7<j$N\e(B
+\e$B$3$s$@$3$H$K$J$j$^$9\e(B:
+
+@example
+((1 . 5) 7 8 (10 . 12))
+@end example
+
+\e$B$H\e(B
+
+@example
+((1 . 5) (7. 8) (10 . 12))
+@end example
+
+\e$B$OEy2A$G$9!#<B:]$N$H$3$m!"2<9_$7$J$$%j%9%H$OHO0O$G$9\e(B:
+
+@example
+(1 2 3 4 5)
+@end example
+
+\e$B$O40A4$KM-8z$JHO0O$G$9!#$H$F$bB)$ND9$$$b$N$G$9$,!#$3$l$bM-8z$G$9\e(B:
+
+@example
+(1 . 5)
+@end example
+
+\e$B$=$7$F!"$3$l$OA0$NHO0O$HEy2A$G$9!#\e(B
+
+\e$B$3$l$OHO0O$N\e(B BNF \e$BDj5A$G$9!#$b$A$m$s!"?t;z$N0UL#>e$NMW5a$O2<9_$7$F$$$J$$\e(B
+\e$B$H$$$&;v$O3P$($F$*$/I,MW$,$"$j$^$9!#\e(B (\e$BG$0U$N2s?t$NF1$8?t;z$N7+$jJV$7$O5v\e(B
+\e$B$5$l$F$$$^$9$,!"HO0O$N07$$$+$i$O>C$(5n$k798~$,$"$j$^$9!#\e(B)
+
+@example
+range           = simple-range / normal-range
+simple-range    = "(" number " . " number ")"
+normal-range    = "(" start-contents ")"
+contents        = "" / simple-range *[ " " contents ] /
+                  number *[ " " contents ]
+@end example
+
+Gnus \e$B$O8=:_$N$H$3$m4{FI5-;v$H5-;v$N0u$N>pJs$rIU$1$F$*$/$?$a$KHO0O$r;H$C\e(B
+\e$B$F$$$^$9!#;d$O\e(B \e$B<!$N8"NO<T\e(B \e$B$,;d$K$5$;$F$/$l$k$N$G$"$l$P!"\e(BC \e$B$G?t$NHO0O$N<B\e(B
+\e$BAu$r7W2h$7$F$$$^$9!#\e(B (\e$B;d$O$^$@$=$N?M$K?R$M$F$$$^$;$s!#$H8@$&$N$O!";d$O$=\e(B
+\e$B$l$rIaDL$NO"B3J*$KJQ49$7D>$5$J$$$G@$$NCf$r40A4$KHO0O$K4p$E$$$?$b$N$K$9$k\e(B
+\e$B$?$a$K$b$&>/$79M$($kI,MW$,$"$k$+$i$G$9!#\e(B)
+
+
+@node Group Info
+@subsection \e$B%0%k!<%W>pJs\e(B
+
+Gnus \e$B$O%0%k!<%W$NA4$F$N1JB3>pJs$r\e(B @dfn{group info} \e$B%j%9%H$KJ]B8$7$^$9!#\e(B
+\e$B$3$N%j%9%H$ND9$5$O\e(B3\e$B$+$i\e(B6 (\e$B$b$7$/$O$b$C$H\e(B) \e$B$NMWAG$GE0DlE*$K%0%k!<%W$r5-=R\e(B
+\e$B$7$^$9!#\e(B
+
+\e$B$3$3$K$"$k$N$O%0%k!<%W>pJs\e(B (group info) \e$B$N\e(B2\e$B$D$NNc$G$9!#\e(B1\e$B$D$OHs>o$KC1=c$J\e(B
+\e$B%0%k!<%W$G!"\e(B2\e$B$D$a$O$b$C$HJ#;($J$b$N$G$9\e(B:
+
+@example
+("no.group" 5 (1 . 54324))
+
+("nnml:my.mail" 3 ((1 . 5) 9 (20 . 55))
+                ((tick (15 . 19)) (replied 3 6 (19 . 3)))
+                (nnml "")
+                ((auto-expire . t) (to-address . "ding@@gnus.org")))
+@end example
+
+\e$B:G=i$NMWAG$O\e(B @dfn{\e$B%0%k!<%WL>\e(B} \e$B$G$9\e(B---\e$B$I$N$h$&$K$7$m!"\e(Bgnus \e$B$,$=$l$K$h$C$F\e(B
+\e$B%0%k!<%W$rCN$C$F$$$k$b$N$G$9!#\e(B2\e$BHVL\$NMWAG$O\e(B @dfn{\e$B9XFIEY\e(B} \e$B$G!"IaDL$O>.$5\e(B
+\e$B$J@0?t$G$9!#\e(B(\e$B$=$l$O\e(B @dfn{\e$B3,5i\e(B} \e$B$K$J$k;v$b$G$-$^$9!#$=$l$O!"%3%s%9%;%k$G!"\e(B
+@code{car} \e$B$,%l%Y%k$G!"\e(B@code{cdr} \e$B$,%9%3%"$G$9!#\e(B) 3\e$BHVL\$NMWAG$O4{FI5-;v\e(B
+\e$B$NHO0O$N%j%9%H$G$9!#\e(B4\e$BHVL\$NMWAG$O$$$m$$$m$J<oN`$N5-;v$N0u$N%j%9%H$N%j%9\e(B
+\e$B%H$G$9!#\e(B5\e$BHVL\$NMWAG$OA*BrJ}K!$G$9\e(B (\e$B$b$7$/$O!"$3$A$i$NJ}$,NI$$$N$G$"$l$P\e(B
+\e$B;v<B>e$N%5!<%P!<$G$9\e(B)\e$B!#\e(B6\e$BHVL\$NMWAG$O\e(B @dfn{\e$B%0%k!<%W%Q%i%a!<%?\e(B} \e$B$N%j%9%H$G!"\e(B
+\e$B$3$NItJ,$O$=$N$?$a$K$"$j$^$9!#\e(B
+
+\e$B:G8e$N\e(B3\e$B$D$NMWAG$O$I$l$G$b!"I,MW$,L5$1$l$PB8:_$7$J$$;v$b$"$j$^$9!#<B:]!"\e(B
+\e$B%0%k!<%W$NHs>o$KBgItJ,$O:G=i$N\e(B3\e$B$D$NMWAG$@$1$r;}$A!"$=$l$O$?$/$5$s$N%3%s\e(B
+\e$B%9%;%k$r@aLs$9$k;v$,$G$-$^$9!#\e(B
+
+\e$B$3$l$O%0%k!<%W>pJsMM<0$N\e(B BNF \e$BDj5A$G$9\e(B:
+
+@example
+info          = "(" group space ralevel space read
+                [ "" / [ space marks-list [ "" / [ space method [ "" /
+                space parameters ] ] ] ] ] ")"
+group         = quote <string> quote
+ralevel       = rank / level
+level         = <integer in the range of 1 to inf>
+rank          = "(" level "." score ")"
+score         = <integer in the range of 1 to inf>
+read          = range
+marks-lists   = nil / "(" *marks ")"
+marks         = "(" <string> range ")"
+method        = "(" <string> *elisp-forms ")"
+parameters    = "(" *elisp-forms ")"
+@end example
+
+\e$B<B$N$H$3$mK!B'\e(B @samp{marks} \e$B$O13$G$9!#\e(B@samp{marks} \e$B$O\e(B @samp{<string>} \e$B$,\e(B 
+@samp{range} \e$B$N>e$K9;@5$5$l$F$$$k$b$N$G$9$,!"5?;w\e(B BNF \e$B$G$=$l$r8=$9$N$OIT\e(B
+\e$BL{2w$J$b$N$G$9!#\e(B
+
+\e$B$b$7\e(B gnus \e$B>pJs$r;}$C$F$$$F!"MWAG$rD4$Y$?$$$N$H$-$O!"\e(Bgnus \e$B$O$=$l$i$NMWAG\e(B
+\e$B$r<hF@\e(B/\e$B@_Dj\e(B (get/set) \e$B$9$k$?$a$N0lO"$N%^%/%m$rDs6!$7$F$$$^$9!#\e(B
+
+@table @code
+@item gnus-info-group
+@itemx gnus-info-set-group
+@findex gnus-info-group
+@findex gnus-info-set-group
+\e$B%0%k!<%WL>$r<hF@\e(B/\e$B@_Dj\e(B (get/set) \e$B$7$^$9!#\e(B
+
+@item gnus-info-rank
+@itemx gnus-info-set-rank
+@findex gnus-info-rank
+@findex gnus-info-set-rank
+\e$B%0%k!<%W$N3,5i\e(B (rank) \e$B$r<hF@\e(B/\e$B@_Dj$7$^$9\e(B (@pxref{Group Score})\e$B!#\e(B
+
+@item gnus-info-level
+@itemx gnus-info-set-level
+@findex gnus-info-level
+@findex gnus-info-set-level
+\e$B%0%k!<%W$N%l%Y%k$r<hF@\e(B/\e$B@_Dj$7$^$9!#\e(B
+
+@item gnus-info-score
+@itemx gnus-info-set-score
+@findex gnus-info-score
+@findex gnus-info-set-score
+\e$B%0%k!<%W%9%3%"$r<hF@\e(B/\e$B@_Dj$7$^$9\e(B (@pxref{Group Score})\e$B!#\e(B
+
+@item gnus-info-read
+@itemx gnus-info-set-read
+@findex gnus-info-read
+@findex gnus-info-set-read
+\e$B4{FI5-;v$NHO0O$r<hF@\e(B/\e$B@_Dj$7$^$9!#\e(B
+
+@item gnus-info-marks
+@itemx gnus-info-set-marks
+@findex gnus-info-marks
+@findex gnus-info-set-marks
+\e$B0u$7$D$-5-;v$NHO0O$N%j%9%H$r<hF@\e(B/\e$B@_Dj$7$^$9!#\e(B
+
+@item gnus-info-method
+@itemx gnus-info-set-method
+@findex gnus-info-method
+@findex gnus-info-set-method
+\e$B%0%k!<%WA*BrJ}K!$r<hF@\e(B/\e$B@_Dj$7$^$9!#\e(B
+
+@item gnus-info-params
+@itemx gnus-info-set-params
+@findex gnus-info-params
+@findex gnus-info-set-params
+\e$B%0%k!<%W%Q%i%a!<%?$r<hF@\e(B/\e$B@_Dj$7$^$9!#\e(B
+@end table
+
+\e$BA4$F$N<hF@4X?t$O\e(B1\e$B$D$N0z?t$r<h$j$^$9\e(B---\e$B>pJs$N%j%9%H$G$9!#@_Dj4X?t$O\e(B2\e$B$D$N\e(B
+\e$B0z?t$r<h$j$^$9\e(B---\e$B>pJs%j%9%H$H?7$7$$CM$G$9!#\e(B
+
+\e$B%0%k!<%W>pJs$N:G8e$N\e(B3\e$B$D$NMWAG$O6/@)E*$J$b$N$G$O$"$j$^$;$s$N$G!"MWAG$r@_\e(B
+\e$BDj$9$kA0$K%0%k!<%W>pJs$r3HD%$9$kI,MW$,$"$k$+$bCN$l$^$;$s!#$b$7$3$l$,I,MW\e(B
+\e$B$J>l9g$O!"$3$l$,<+F0E*$K5/$3$k$?$a$K\e(B @code{nil} \e$B$G$J$$\e(B3\e$BHVL\$N0z?t$r\e(B3\e$B$D$N\e(B
+\e$B:G=*@_Dj4X?t$KM?$($k$@$1$G$9!#\e(B
+
+
+@node Extended Interactive
+@subsection \e$B3HD%BPOC\e(B
+@cindex interactive
+@findex gnus-interactive
+
+Gnus \e$B$O\e(B Emacs \e$B$NI8=`$N\e(B @code{interactive} \e$B;XDj$r%7%s%\%k@\F,<-$r4JC1$K;H\e(B
+\e$B$($k$?$a$K>/$73HD%$7$F$$$^$9\e(B (@pxref{Symbolic Prefixes})\e$B!#$3$l$O$=$N;H$$\e(B
+\e$BJ}$NNc$G$9\e(B:
+
+@lisp
+(defun gnus-summary-increase-score (&optional score symp)
+  (interactive (gnus-interactive "P\ny"))
+  ...
+  )
+@end lisp
+
+\e$B:G>e$NJ}K!$O\e(B @code{gnus-interactive} \e$B$r<0\e(B @code{interactive} \e$B$rJV$9%^%/\e(B
+\e$B%m$H$7$F<BAu$9$k;v$G$7$g$&$,!"$3$l$O\e(B Emacs \e$B$O4X?t$,BPOCE*$G$"$k$+$I$&$+\e(B
+\e$B$r%i%`%@<0$KBP$7$FC1=c$K\e(B @code{assq} \e$B$r9T$&;v$K$h$jD4$Y$k;v$+$iIT2DG=$G\e(B
+\e$B$9!#\e(B
+
+\e$B$3$N4X?t$O\e(B (\e$B$[$H$s$I\e(B) \e$BA4$F$N\e(B @code{interactive} \e$B;XDj$r<uIU$1$^$9$,!"$b$&\e(B
+\e$B>/$72C$($^$9!#\e(B
+
+@table @samp
+@item y
+@vindex gnus-current-prefix-symbol
+\e$B8=:_$N@\F,0z?t%7%s%\%k\e(B---\e$BJQ?t\e(B @code{gnus-current-prefix-symbol} \e$B$G$9!#\e(B
+
+@item Y
+@vindex gnus-current-prefix-symbols
+\e$B8=:_$N@\F,0z?t%7%s%\%k$N%j%9%H$G$9\e(B---\e$BJQ?t\e(B 
+@code{gnus-current-prefix-symbol} \e$B$G$9!#\e(B
+
+@item A
+\e$B8=:_$N5-;vHV9f$G$9\e(B---\e$B4X?t\e(B @code{gnus-summary-article-number} \e$B$G$9!#\e(B
+
+@item H
+\e$B8=:_$N5-;v%X%C%@!<$G$9\e(B---\e$B4X?t\e(B @code{gnus-summary-article-header} \e$B$G$9!#\e(B
+
+@item g
+\e$B8=:_$N%0%k!<%WL>$G$9\e(B---\e$B4X?t\e(B @code{gnus-group-group-name} \e$B$G$9!#\e(B
+@end table
+
+
+@node Emacs/XEmacs Code
+@subsection Emacs/XEmacs \e$B%3!<%I\e(B
+@cindex XEmacs
+@cindex Emacsen
+
+Gnus \e$B$O\e(B Emacs\e$B!"\e(BXEmacs \e$B$H\e(B Mule \e$B$GF0:n$7$^$9$N$G!"$=$N$&$A$N0l$D$r<g4D6-$H\e(B
+\e$B$9$k;v$K7h$a$^$7$?!#;d$O\e(B Emacs \e$B$rA*$S$^$7$?!#;d$,\e(B XEmacs \e$B$d\e(B Mule \e$B$r9%$-\e(B
+\e$B$G$O$J$$$H8@$&;v$G$O$J$/!"$=$l$,%"%k%U%!%Y%C%H$G:G=i$KMh$?$+$i$G$9!#\e(B
+
+\e$B$3$l$O\e(B gnus \e$B$O\e(B Emacs \e$B$GA4$/7Y9p$J$/%P%$%H%3%s%Q%$%k$G$-$k$N$KBP$7$F!"\e(B
+XEmacs \e$B$O%P%$%H%3%s%Q%$%k$r$7$F$$$k4V$K%.%,%P%$%H$/$i$$$N7Y9p$r=P$9$H8@\e(B
+\e$B$&;v$G$9!#;d$O:3:Y$J<:GT$r8+$D$1=P$9$3$H$r=u$1$k$?$a$K%P%$%H%3%s%Q%$%k$N\e(B
+\e$B7Y9p$r;H$C$F$$$^$9$N$G!"$=$l$OHs>o$KLr$KN)$A$^$9!#\e(B
+
+\e$B;d$O7QB3E*$K\e(B Emacs \e$B$N4X?t$N3&LL\e(B (interface) \e$B$r;H$C$F$-$^$7$?$,!"4X?t$K$O\e(B 
+gnus \e$B$NJLL>4X?t\e(B (alias) \e$B$r;H$C$F$-$^$7$?!#Nc$r=P$7$^$7$g$&\e(B: Emacs \e$B$O4X?t\e(B 
+@code{run-at-time} \e$B$rDj5A$7$F$$$^$9$,!"\e(BXEmacs \e$B$O4X?t\e(B @code{start-itimer} 
+\e$B$rDj5A$7$F$$$^$9!#$=$3$G;d$O\e(B @code{gnus-run-at-time} \e$B$H8F$P$l$k4X?t$rDj\e(B
+\e$B5A$7!"$=$l$O\e(B Emacs \e$B$N\e(B @code{run-at-time} \e$B$HF1$80z?t$r<h$j$^$9!#\e(BGnus \e$B$r\e(B 
+Emacs \e$B$G<B9T$7$F$$$k$H$-$O!"A0$N4X?t$OC1$K8e$N$b$N$NJLL>4X?t\e(B (alias) \e$B$K\e(B
+\e$B$J$C$F$$$^$9!#$7$+$7!"\e(BXEmacs \e$B$G<B9T$7$?$H$-$O!"A0<T$O<!$N4X?t$NJLL>4X?t\e(B 
+(alias) \e$B$H$J$C$F$$$^$9\e(B:
+
+@lisp
+(defun gnus-xmas-run-at-time (time repeat function &rest args)
+  (start-itimer
+   "gnus-run-at-time"
+   `(lambda ()
+      (,function ,@@args))
+   time repeat))
+@end lisp
+
+\e$B$3$N<oN`$N$b$N$,B?$/$N4X?t$KBP$7$F$J$5$l$F$$$^$9!#\e(BGnus \e$B$O\e(B XEmacs \e$B$G<B9T\e(B
+\e$B$7$F$$$k$H$-$K!"85$+$i$"$k\e(B Emacs \e$B$N4X?t$r:FDj5A$7$^$;$s\e(B---\e$B$=$l$O!"Be$o$j\e(B
+\e$B$K\e(B gnus \e$B$NEy2A$J$b$N$H\e(B @code{defalias} \e$B$r$9$k;v$K$h$C$F<B9T$7$^$9!#A4BN\e(B
+\e$BE*$K!"$h$j$-$l$$$K$J$j$^$9!#\e(B
+
+XEmacs \e$B$N4X?t3&LL$NJ}$,L@$i$+$K$-$l$$$J>l9g$O!";d$OBe$o$j$K$=$l$r;H$$$^\e(B
+\e$B$9!#Nc$($P!"\e(B@code{gnus-region-active-p} \e$B$O\e(B XEmacs \e$B$G$O\e(B 
+@code{region-active-p} \e$B$NJLL>$G$"$k$N$KBP$7$F!"\e(BEmacs \e$B$G$O4X?t$G$9!#\e(B
+
+\e$B$b$A$m$s!";d$O\e(B XEmacs \e$B$r;d$N4pK\%W%i%C%H%U%)!<%`$KA*$s$G!"4X?t$N3d$jEv$F\e(B
+\e$B$r5U$K$9$k;v$b$G$-$^$7$?!#$G$b!";d$O$=$&$7$^$;$s$G$7$?!#\e(BXEmacs \e$B$G\e(B gnus 
+\e$B$r<B9T$9$k$H$-$K!"$3$&$$$&5U8~$-$N$?$a$NB.EYDc2<$O>/$7$G$7$g$&!#\e(B
+
+
+@node Various File Formats
+@subsection \e$B$$$m$$$m$J%U%!%$%kMM<0\e(B
+
+@menu
+* Active File Format::      \e$B;HMQ2DG=$J5-;v%0%k!<%W$N>pJs!#\e(B
+* Newsgroups File Format::  \e$B%0%k!<%W$N5-=R!#\e(B
+@end menu
+
+
+@node Active File Format
+@subsubsection \e$B8=>u%U%!%$%kMM<0\e(B
+
+\e$B8=>u%U%!%$%k$OEv$N%5!<%P!<$NA4$F$N;HMQ2DG=$J%0%k!<%W$N0lMw$r5s$2$^$9!#$=\e(B
+\e$B$l$O$=$l$>$l$N%0%k!<%W$N:GDc$H:G9b$N5-;vHV9f$N0lMw$b$"$j$^$9!#\e(B
+
+\e$B$3$l$OIaDL$N8=>u%U%!%$%k$+$i$NH4?h$G$9\e(B:
+
+@example
+soc.motss 296030 293865 y
+alt.binaries.pictures.fractals 3922 3913 n
+comp.sources.unix 1605 1593 m
+comp.binaries.ibm.pc 5097 5089 y
+no.general 1000 900 y
+@end example
+
+\e$B$3$l$O$3$N%U%!%$%k$N5?;w\e(B BNF \e$BDj5A$G$9!#\e(B
+
+@example
+active      = *group-line
+group-line  = group space high-number space low-number space flag <NEWLINE>
+group       = <non-white-space string>
+space       = " "
+high-number = <non-negative integer>
+low-number  = <positive integer>
+flag        = "y" / "n" / "m" / "j" / "x" / "=" group
+@end example
+
+\e$B$3$N%U%!%$%k$N40A4$J5-=R$rF@$k$?$a$K$O!"\e(B@samp{innd} \e$B$N%^%K%e%"%kJG!"FC$K\e(B 
+@samp{active(5)} \e$B$r8+$F2<$5$$!#\e(B
+
+
+@node Newsgroups File Format
+@subsubsection \e$B%K%e!<%9%0%k!<%W%U%!%$%kMM<0\e(B
+
+\e$B%K%e!<%9%0%k!<%W%U%!%$%k$O%0%k!<%W$r$=$N5-=R$H6&$K0lMw$r5s$2$^$9!#%5!<%P!<\e(B
+\e$B$K$"$kA4$F$N%0%k!<%W$,0lMw$K$5$l$J$1$l$P$J$i$J$$$N$G$O$J$/!"$^$?!"%U%!%$\e(B
+\e$B%k$NA4$F$N%0%k!<%W$,%5!<%P!<$KB8:_$7$J$1$l$P$J$i$J$$$N$G$O$"$j$^$;$s!#$3\e(B
+\e$B$N%U%!%$%k$O=c?h$KMxMQ<T$N>pJs$N$?$a$K$"$j$^$9!#\e(B
+
+\e$BMM<0$OHs>o$K4JC1$G$9\e(B: \e$B%0%k!<%WL>!"%?%V!"$=$7$F5-=R$G$9!#$3$l$ODj5A$G$9\e(B:
+
+@example
+newsgroups    = *line
+line          = group tab description <NEWLINE>
+group         = <non-white-space string>
+tab           = <TAB>
+description   = <string>
+@end example
+
+
+@page
+@node Emacs for Heathens
+@section \e$B0[65EL$X$N\e(B Emacs
+
+\e$B?.$8$k$+$I$&$+$OCN$j$^$;$s$,!"\e(Bgnus \e$B$r;H$&?M$NCf$K$O\e(B Gnus Love Boat \e$B$G$N\e(B
+\e$BN9$KEk>h$9$kA0$K$"$^$j\e(B Emacs \e$B$r;H$C$?;v$,L5$$$H$$$&?M$,$$$^$9!#$b$7$"$J\e(B
+\e$B$?$,\e(B ``@kbd{M-C-a}'' \e$B$d\e(B ``\e$B%j!<%8%g%s$r@Z$k\e(B''\e$B!"$=$7$F\e(B 
+``@code{gnus-flargblossen} \e$B$rO"A[%j%9%H$K@_Dj$7$F$/$@$5$$!#$=$N%-!<$O%0\e(B
+\e$B%k!<%WL>$K9gCW$9$k$?$a$K;H$o$l$k@55,I=8=$G$9\e(B'' \e$B$,>/$7$N0UL#$+A4$/0UL#$N\e(B
+\e$BL5$$KbK!$N8@MU$G$"$kIT9,$J?M$G$"$l$P!"$3$NIUO?$O$"$J$?$N$?$a$K$"$j$^$9!#\e(B
+\e$B$b$7$"$J$?$,4{$K\e(B Emacs \e$B$K?F$7$s$G$$$k$N$G$"$l$P!"$3$l$rL5;k$7$F<V$r2D0&\e(B
+\e$B$,$j$K9T$C$F2<$5$$!#\e(B
+
+@menu
+* Keystrokes::      \e$BJ8>O$rF~NO$7$FL?Na$r<B9T$9$k!#\e(B
+* Emacs Lisp::      \e$BHw$(IU$1$N\e(B Emacs \e$B%W%m%0%i%_%s%08@8l!#\e(B
+@end menu
+
+
+@node Keystrokes
+@subsection \e$BBG80\e(B
+
+@itemize @bullet
+@item
+Q: \e$B7P83$N$"$k\e(B Emacs \e$B$NMxMQ<T$H$O2?$G$9$+\e(B?
+
+@item
+A: \e$BC<Kv$,%Z%@%k$r;}$C$F$$$?$i$J$!$H4j$&?M$N;v$G$9!#\e(B
+@end itemize
+
+\e$B$O$$!"$"$J$?$,\e(B Emacs \e$B$r;H$&$H!"$"$J$?$O%3%s%H%m!<%k%-!<!"%7%U%H%-!<!"%a\e(B
+\e$B%?%-!<$r$?$/$5$s;H$&$h$&$K$J$k$G$7$g$&!#$3$l$O0lIt$N?M\e(B (\e$B<g$K!"\e(B@code{vi} 
+\e$BMxMQ<T\e(B) \e$B$K$OHs>o$K$&$k$5$/46$8$i$l$k$G$7$g$&!#;D$j$N?M!9$O!"$=$l$K$h$j$b\e(B
+\e$B$?$i$5$l$kCO9v$r0&$7$^$9!#$"$-$i$a$FI~=>$7$F2<$5$$!#\e(BEmacs \e$B$OK\Ev$O\e(B 
+``Escape-Meta-Alt-Control-Shift'' \e$B$NN,$G!"B>$NI>H=$N0-$$=P=j\e(B (Emacs \e$B$N:n\e(B
+\e$B<T$N$h$&$J\e(B) \e$B$+$iJ9$$$?\e(B ``Editing Macros'' \e$B$G$O$"$j$^$;$s!#\e(B
+
+\e$B%7%U%H%-!<$OIaDL$O>.;X$N6a$/$K0LCV$7$F$*$j!"IaDL$OBgJ8;z$d$=$NB>$N$b$rF@\e(B
+\e$B$k$?$a$K;H$o$l$^$9!#$"$J$?$O$:$C$H$=$l$r;H$&;v$G$7$g$&!#%3%s%H%m!<%k%-!<\e(B
+\e$B$OIaDL$O\e(B ``CTRL'' \e$B$d$=$N$h$&$J$b$N$G0u$,IU$$$F$$$^$9!#%a%?%-!<$O!"$*$b$7\e(B
+\e$B$m$$;v$K!"$I$N%-!<%\!<%I$G$b$=$N$h$&$K0u$,IU$1$i$l$F$$$^$;$s!#$=$l$OIaDL\e(B
+\e$B$O%-!<%\!<%I$N:8<jB&$K0LCV$7$F$$$F!"IaDL$O:G2<CJ$K$"$j$^$9!#\e(B
+
+\e$B$3$l$+$i!"2f!9\e(B Emacs \e$B$N?M!9$O!"$=$l$,$"$^$j$KITJX$J$?$a!"\e(B
+``meta-control-m \e$B%-!<$r2!$9\e(B'' \e$B$H$O8@$$$^$;$s!#;d$?$A$O\e(B ``@kbd{M-C-m} \e$B$r\e(B
+\e$B2!$9\e(B'' \e$B$H8@$$$^$9!#\e(B@kbd{M-} \e$B$O\e(B ``\e$B%a%?\e(B'' \e$B$r8=$9@\F,<-$G!"\e(B``C-'' \e$B$O\e(B ``\e$B%3%s\e(B
+\e$B%H%m!<%k\e(B'' \e$B$r0UL#$9$k@\F,<-$G$9!#$G$9$+$i!"\e(B``@kbd{C-k} \e$B$r2!$9\e(B'' \e$B$O\e(B ``\e$B%3\e(B
+\e$B%s%H%m!<%k%-!<$r2<$K2!$7!"\e(B@kbd{k} \e$B$r2!$7$F$$$k4V!"$=$l$r2<$KJ]$A$J$5$$\e(B'' 
+\e$B$H8@$&;v$G$9!#\e(B``@kbd{M-C-k} \e$B$r2!$9\e(B'' \e$B$O\e(B ``\e$B%a%?%-!<$H%3%s%H%m!<%k%-!<$r2!\e(B
+\e$B$7$F2<$KJ]$C$?8e$G\e(B @kbd{k} \e$B$r2!$9\e(B'' \e$B$H8@$&;v$G$9!#4JC1$G$7$g!#$M!)\e(B
+
+\e$B$3$l$OA4$F$N%-!<%\!<%I$,%a%?%-!<$r;}$C$F$$$k$o$1$G$O$J$$$H8@$&;v<B$K$h$j\e(B
+\e$B>/$7J#;($K$J$C$F$$$^$9!#$=$N$h$&$J>l9g$O!"\e(B``\e$B%(%9%1!<%W\e(B'' \e$B%-!<$r;H$&;v$,\e(B
+\e$B$G$-$^$9!#$=$l$O%a%?%-!<$r;}$C$F$$$k$H$-$h$j$b$C$H:n6H$,BgJQ$K$J$j$^$9$N\e(B
+\e$B$G!"$=$&$$$&>l9g$O!";d$O%a%?%-!<$N$"$k%-!<%\!<%I$r<j$KF~$l$k;v$r63$7$/$*\e(B
+\e$B4+$aCW$7$^$9!#$=$lL5$7$G$O@8$-$F9T$1$J$$$G$7$g$&!#\e(B
+
+
+
+@node Emacs Lisp
+@subsection Emacs Lisp
+
+Emacs \e$B$O$=$l$,K\Ev$O\e(B Lisp \e$B%$%s%?!<%W%j%?!<$G$"$k;v$+$i!"%(%G%#%?!<$N2&MM\e(B
+\e$B$G$9!#$"$J$?$,C!$/!"$=$l$>$l$NA4$F$N%-!<$O2?$i$+$N\e(B Emacs Lisp \e$B$N%3!<%I$N\e(B
+\e$B>.JR$r<B9T$7!"\e(BEmacs Lisp \e$B$O%$%s%?!<%W%j%?!<$G<B9T$5$l$k8@8l$G$"$k;v$+$i!"\e(B
+\e$B$=$l$O$I$s$J%-!<$G$bG$0U$N$$$m$$$m$J%3!<%I$r<B9T$9$k$h$&$K@_Dj$G$-$k$H8@\e(B
+\e$B$&;v$G$9!#$"$J$?$O!"C1$K!"$=$&$9$l$PNI$$$@$1$G$9!#\e(B
+
+Gnus \e$B$O\e(B Emacs Lisp \e$B$K$h$C$F=q$+$l$F$$$F!"$=$l$O$?$/$5$s$NC`<!2r<a<B9T$5\e(B
+\e$B$l$k4X?t$K$h$j<B9T$5$l$^$9!#\e(B (\e$B$3$l$i$OB.EY$N$?$a$K%P%$%H%3%s%Q%$%k$5$l$F\e(B
+\e$B$$$^$9$,!"$=$l$G$b$^$@C`<!2r<a$5$l$^$9!#\e(B) \e$B$b$7\e(B gnus \e$B$,$9$k$"$k;v$r9%$-$G\e(B
+\e$B$O$J$$$H;W$C$?$J$i!"0c$C$?$h$&$K<B9T$5$;$k$N$O<h$k$KB-$i$J$$;v$G$9!#\e(B (\e$B$(!<\e(B
+\e$B$H!">/$J$/$H$b\e(B Lisp \e$B%3!<%I$N=q$-J}$rCN$C$F$$$l$P!#\e(B) \e$B$7$+$7!"$=$l$O$3$N%^\e(B
+\e$B%K%e%"%k$NHO0O30$J$N$G!"2f!9$OC1$K\e(B gnus \e$B$r%+%9%?%^%$%:$9$k$?$a$K%U%!%$%k\e(B 
+@file{.emacs} \e$B$GIaDL;H$o$l$k$$$/$D$+$NIaDL$N9=J8$K$D$$$F$@$1OC$r$7$^$9!#\e(B
+
+\e$B$b$7JQ?t\e(B@code{gnus-florgbnize} \e$B$r;M\e(B (4) \e$B$K@_Dj$7$?$$$N$G$"$l$P!"0J2<$N$b\e(B
+\e$B$N$r=q$-$^$9\e(B:
+
+@lisp
+(setq gnus-florgbnize 4)
+@end lisp
+
+\e$B$3$N4X?t\e(B @code{setq} (\e$BK\Ev$O\e(B ``\e$BFC<l7A<0\e(B'' (special form)) \e$B$r;H$C$F!"JQ?t\e(B
+\e$B$r2?$+$NCM$K@_Dj$9$k;v$,$G$-$^$9!#$3$l$OK\Ev$K$"$J$?$,CN$k$Y$-A4$F$N;v$G\e(B
+\e$B$9!#$3$l$+$i$O\e(B gnus \e$B$NF0:n$rJQ99$9$k$?$a$K!"$?$/$5$s$N$3$N$h$&$J$b$N$G%U%!\e(B
+\e$B%$%k\e(B @code{.emacs} \e$B$rKd$a?T$/$9;v$,$G$-$^$9!#\e(B
+
+\e$B$b$7$"$J$?$,$=$N$h$&$J$b$N$r%U%!%$%k\e(B @code{.emacs} \e$B$KF~$l$?$i!"$=$l$O<!\e(B
+\e$B2s$K\e(B Emacs \e$B$r5/F0$7$?$H$-$KFI$_9~$^$l\e(B @code{\e$BI>2A\e(B} (\e$B$=$l$O\e(B ``\e$B<B9T\e(B'' \e$B$N\e(B 
+lisp \e$B8l$G$9\e(B) \e$B$5$l$^$9!#$b$7JQ?t$r$9$0$KJQ99$7$?$$$N$G$"$l$P!"JD$83g8L$N\e(B
+\e$B8e$GC1$K\e(B @kbd{C-x C-e} \e$B$H$9$k$@$1$G$9!#$=$l$OA0$K$"$k\e(B ``\e$B<0\e(B'' \e$B$r\e(B @code{\e$BI>\e(B
+\e$B2A\e(B} \e$B$7!"$=$l$O$3$3$G$O4JC1$J\e(B @code{setq} \e$BJ8$G$9!#\e(B
+
+\e$B$,$s$P$C$F\e(B---\e$B$b$7$"$J$?$,\e(B Emacs \e$B$NA0$K$"$k$N$G$"$l$P$A$g$C$H;n$7$F2<$5$$!#\e(B
+@kbd{C-x C-e} \e$B$N8e$G!"H?6A6h0h\e(B (echo area) \e$B$K\e(B @samp{4} \e$B$,8=$o$l$k$N$,8+\e(B
+\e$B$($k$G$7$g$&!#$=$l$O$"$J$?$,\e(B @code{\e$BI>2A\e(B} \e$B$7$?<0$NJV$jCM$G$9!#\e(B
+
+\e$B$$$/$D$+$NMn$H$77j\e(B:
+
+\e$B$b$7%^%K%e%"%k$,\e(B ``@code{gnus-read-active-file} \e$B$r\e(B @code{some} \e$B$K@_Dj$7\e(B
+\e$B$J$5$$\e(B'' \e$B$H8@$C$?$J$i!"$=$l$O\e(B:
+
+@lisp
+(setq gnus-read-active-file 'some) 
+@end lisp
+
+\e$B$H8@$&;v$G$9!#\e(B
+
+\e$B0lJ}!"%^%K%e%"%k$,\e(B ``@code{gnus-nntp-server} \e$B$r\e(B @samp{nntp.ifi.uio.no} 
+\e$B$K@_Dj$7$J$5$$\e(B'' \e$B$H8@$C$?$J$i!"$=$l$O\e(B:
+
+@lisp
+(setq gnus-nntp-server "nntp.ifi.uio.no")
+@end lisp
+
+\e$B$H8@$&;v$G$9!#\e(B
+
+\e$B$G$9$+$i!"J8;zNs\e(B (\e$B8e<T\e(B) \e$B$r\e(B \e$B%7%s%\%k\e(B (\e$BA0<T\e(B) \e$B$H:.F1$7$J$$$h$&$KCm0U$7$F2<\e(B
+\e$B$5$$!#%^%K%e%"%k$OL@3N$K6hJL$7$F$$$^$9$,!":.Mp$7$d$9$$$+$b$7$l$^$;$s!#\e(B
+
+@page
+@include gnus-faq-ja.texi
+
+@node Index
+@chapter Index
+@printindex cp
+
+@node Key Index
+@chapter Key Index
+@printindex ky
+
+@summarycontents
+@contents
+@bye
+
+@iftex
+@iflatex
+\end{document}
+@end iflatex
+@end iftex
+
+@c End:
diff --git a/texi/gnus-terms.ja b/texi/gnus-terms.ja
new file mode 100644 (file)
index 0000000..d5438b5
--- /dev/null
@@ -0,0 +1,192 @@
+\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
+
+ability                                \e$BG=NO\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
+ephemeral group                        \e$BC;4|%0%k!<%W\e(B
+expire                         \e$B4|8B@Z$l>C5n!"4|8B@Z$l:o=|\e(B
+expunge                                \e$B>C5n\e(B
+field                          \e$BMs\e(B
+firewall                       \e$BKIJI\e(B
+flag                           \e$B%U%i%0\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;J2q<TIU$-\e(B
+narrow                         \e$B8BDjI=<(\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
+optional function              \e$BG$0U4X?t\e(B
+outgoing                       \e$B:9=PMQ\e(B
+overview                       \e$B354Q%U%!%$%k!"\e(B(\e$B35MW\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
+raise                          \e$B@85/\e(B
+range                          \e$BHO0O\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
+required function              \e$BI,?\4X?t\e(B
+response packet                        \e$BJV?.%Q%1%C%H\e(B
+resulting data                 \e$B7k2L$N%G!<%?\e(B
+return value                   \e$BJV5QCM\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
+sentinel                       \e$B8+D%$j4X?t\e(B
+server                         \e$B%5!<%P!<\e(B
+sesssion                       \e$B%;%C%7%g%s\e(B
+shortcut                       \e$BC;=LBG80\e(B
+signal                         \e$B%7%0%J%k\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
+status                         \e$B>uBV\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
+symbolic prefix                        \e$B5-9f@\F,<-\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
+utility function               \e$BM-MQ$J4X?t\e(B
+value (alist)                  \e$BCM\e(B
+web                            \e$B%&%'%V\e(B
+Web browser                    \e$B%&%'%V%V%i%&%6!<\e(B
+Web search                     \e$B%&%'%V8!:w\e(B
+yank                           \e$BE=$jIU$1\e(B
+zombie                         \e$B%>%s%S\e(B
+
+summary                                \e$B35N,\e(B
+body                           \e$B%\%G%#\e(B
+head                           \e$B%X%C%@!<\e(B
+subject                                \e$BI=Bj\e(B
+match                          \e$B%^%C%A\e(B
+encode                         \e$BId9f2=\e(B
+character set                  \e$BJ8;z=89g\e(B
+hook                           \e$B%U%C%/\e(B
+keystroke                      \e$B%-!<A`:n\e(B
+reply                          \e$BJV?.\e(B
+button                         \e$B%\%?%s\e(B
+buttonizing                    \e$B%\%?%s5!G=\e(B
+syntax table                   \e$B%7%s%?%C%/%9%F!<%V%k\e(B
+format                         \e$BMM<0\e(B
+wash                           \e$B@vBu\e(B
+page breaking                  \e$B2~JG\e(B
+page delimiter                 \e$BJG6h@Z$jJ8;z\e(B
+page                           \e$BJG\e(B
+
+directory                      \e$B%G%#%l%/%H%j!<\e(B
+SOUP packets                   SOUP \e$B%Q%1%C%H\e(B
+auto-save file                 \e$B<+F0J]B8%U%!%$%k\e(B
+predicate function             \e$B=R8l4X?t\e(B
+news reader                    \e$B%K%e!<%9%j!<%@\e(B
+native server                  \e$B4pK\%5!<%P!<\e(B
+
+secondary server               \e$BFs<!%5!<%P!<\e(B
+pack                           \e$B:-Jq$9$k\e(B
+active file                    \e$B%"%/%F%#%V%U%!%$%k\e(B
+incoming                       \e$BF~$C$F$/$k!&F~$C$F$-$?\e(B
+response packet                        \e$BJV?.%Q%1%C%H\e(B
+reply packet                   \e$BJV?.%Q%1%C%H\e(B
index 564d93c..cf3105c 100644 (file)
@@ -1,7 +1,7 @@
-@c \input texinfo                  @c -*-texinfo-*-
+\input texinfo                  @c -*-texinfo-*-
 
 @setfilename gnus
-@settitle Pterodactyl Gnus 0.93 Manual
+@settitle Semi-gnus 6.9.2 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -50,7 +50,6 @@
 \newcommand{\gnussc}[1]{\textsc{#1}}
 \newcommand{\gnustitle}[1]{{\huge\textbf{#1}}}
 \newcommand{\gnusauthor}[1]{{\large\textbf{#1}}}
-\newcommand{\gnusresult}[1]{\gnustt{=> #1}}
 
 \newcommand{\gnusbullet}{{${\bullet}$}}
 \newcommand{\gnusdollar}{\$}
 
 \thispagestyle{empty}
 
-Copyright \copyright{} 1995,96,97,98,99 Free Software Foundation, Inc.
+Copyright \copyright{} 1995,96,97 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -292,9 +291,9 @@ into another language, under the above conditions for modified versions.
 
 @ifinfo
 
-This file documents Gnus, the GNU Emacs newsreader.
+This file documents gnus, the GNU Emacs newsreader.
 
-Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc.
+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
@@ -319,13 +318,13 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Pterodactyl Gnus 0.93 Manual
+@title Semi-gnus 6.9.2 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
 
 @vskip 0pt plus 1filll
-Copyright @copyright{} 1995,96,97,98,99 Free Software Foundation, Inc.
+Copyright @copyright{} 1995,96,97 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -346,16 +345,23 @@ into another language, under the above conditions for modified versions.
 
 
 @node Top
-@top The Gnus Newsreader
+@top The gnus Newsreader
 
 @ifinfo
 
-You can read news (and mail) from within Emacs by using Gnus.  The news
+You can read news (and mail) from within Emacs by using gnus.  The news
 can be gotten by any nefarious means you can think of---@sc{nntp}, local
 spool or your mbox file.  All at the same time, if you want to push your
 luck.
 
-This manual corresponds to Pterodactyl Gnus 0.93.
+<<<<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.9.2.
 
 @end ifinfo
 
@@ -379,7 +385,7 @@ even read news with it!
 
 Gnus tries to empower people who read news the same way Emacs empowers
 people who edit text.  Gnus sets no limits to what the user should be
-allowed to do.  Users are encouraged to extend Gnus to make it behave
+allowed to do.  Users are encouraged to extend gnus to make it behave
 like they want it to behave.  A program should not control people;
 people should be empowered to do what they want by using (or abusing)
 the program.
@@ -403,18 +409,18 @@ the program.
 @end menu
 
 @node Starting Up
-@chapter Starting Gnus
+@chapter Starting gnus
 @cindex starting up
 
 @kindex M-x gnus
 @findex gnus
-If your system administrator has set things up properly, starting Gnus
+If your system administrator has set things up properly, starting gnus
 and reading news is extremely easy---you just type @kbd{M-x gnus} in
 your Emacs.
 
 @findex gnus-other-frame
 @kindex M-x gnus-other-frame
-If you want to start Gnus in a different frame, you can use the command
+If you want to start gnus in a different frame, you can use the command
 @kbd{M-x gnus-other-frame} instead.
 
 If things do not go smoothly at startup, you have to twiddle some
@@ -426,11 +432,11 @@ terminology section (@pxref{Terminology}).
 
 @menu
 * Finding the News::    Choosing a method for getting news.
-* The First Time::      What does Gnus do the first time you start it?
+* The First Time::      What does gnus do the first time you start it?
 * The Server is Down::  How can I read my mail then?
-* Slave Gnusae::        You can have more than one Gnus active at a time.
-* Fetching a Group::    Starting Gnus just to read a group.
-* New Groups::          What is Gnus supposed to do with new groups?
+* Slave Gnusae::        You can have more than one gnus active at a time.
+* Fetching a Group::    Starting gnus just to read a group.
+* New Groups::          What is gnus supposed to do with new groups?
 * Startup Files::       Those pesky startup files---@file{.newsrc}.
 * Auto Save::           Recovering from a crash.
 * The Active File::     Reading the active file over a slow line Takes Time.
@@ -445,11 +451,11 @@ terminology section (@pxref{Terminology}).
 
 @vindex gnus-select-method
 @c @head
-The @code{gnus-select-method} variable says where Gnus should look for
+The @code{gnus-select-method} variable says where gnus should look for
 news.  This variable should be a list where the first element says
 @dfn{how} and the second element says @dfn{where}.  This method is your
-native method.  All groups not fetched with this method are
-foreign groups.
+native method.  All groups not fetched with this method are foreign
+groups.
 
 For instance, if the @samp{news.somewhere.edu} @sc{nntp} server is where
 you want to get your daily dosage of news from, you'd say:
@@ -470,11 +476,12 @@ certainly be much faster.
 @vindex gnus-nntpserver-file
 @cindex NNTPSERVER
 @cindex @sc{nntp} server
-If this variable is not set, Gnus will take a look at the
+If this variable is not set, gnus will take a look at the
 @code{NNTPSERVER} environment variable.  If that variable isn't set,
-Gnus will see whether @code{gnus-nntpserver-file}
+gnus will see whether @code{gnus-nntpserver-file}
 (@file{/etc/nntpserver} by default) has any opinions on the matter.  If
-that fails as well, Gnus will try to use the machine running Emacs as an @sc{nntp} server.  That's a long shot, though.
+that fails as well, gnus will try to use the machine running Emacs as an
+@sc{nntp} server.  That's a long shot, though.
 
 @vindex gnus-nntp-server
 If @code{gnus-nntp-server} is set, this variable will override
@@ -482,15 +489,11 @@ 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
-@vindex gnus-nntp-server
-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.  (Note that this
-will set @code{gnus-nntp-server}, which means that if you then @kbd{M-x
-gnus} later in the same Emacs session, Gnus will contact the same
-server.)
+type in the name of any server you feel like visiting.
 
 @findex gnus-group-browse-foreign-server
 @kindex B (Group)
@@ -523,23 +526,23 @@ would typically set this variable to
 @section The First Time
 @cindex first time usage
 
-If no startup files exist, Gnus will try to determine what groups should
+If no startup files exist, gnus will try to determine what groups should
 be subscribed by default.
 
 @vindex gnus-default-subscribed-newsgroups
-If the variable @code{gnus-default-subscribed-newsgroups} is set, Gnus
+If the variable @code{gnus-default-subscribed-newsgroups} is set, gnus
 will subscribe you to just those groups in that list, leaving the rest
 killed.  Your system administrator should have set this variable to
 something useful.
 
-Since she hasn't, Gnus will just subscribe you to a few arbitrarily
+Since she hasn't, gnus will just subscribe you to a few arbitrarily
 picked groups (i.e., @samp{*.newusers}).  (@dfn{Arbitrary} is defined
 here as @dfn{whatever Lars thinks you should read}.)
 
-You'll also be subscribed to the Gnus documentation group, which should
+You'll also be subscribed to the gnus documentation group, which should
 help you with most common problems.
 
-If @code{gnus-default-subscribed-newsgroups} is @code{t}, Gnus will just
+If @code{gnus-default-subscribed-newsgroups} is @code{t}, gnus will just
 use the normal functions for handling new groups, and not do anything
 special.
 
@@ -548,9 +551,9 @@ special.
 @section The Server is Down
 @cindex server errors
 
-If the default server is down, Gnus will understandably have some
+If the default server is down, gnus will understandably have some
 problems starting.  However, if you have some mail groups in addition to
-the news groups, you may want to start Gnus anyway.
+the news groups, you may want to start gnus anyway.
 
 Gnus, being the trusting sort of program, will ask whether to proceed
 without a native select method if that server can't be contacted.  This
@@ -565,7 +568,7 @@ buffer.  But, hey, that's your problem.  Blllrph!
 @c @head
 If you know that the server is definitely down, or you just want to read
 your mail without bothering with the server at all, you can use the
-@code{gnus-no-server} command to start Gnus.  That might come in handy
+@code{gnus-no-server} command to start gnus.  That might come in handy
 if you're in a hurry as well.  This command will not attempt to contact
 your primary server---instead, it will just activate all groups on level
 1 and 2.  (You should preferably keep no native groups on those two
@@ -576,27 +579,27 @@ levels.)
 @section Slave Gnusae
 @cindex slave
 
-You might want to run more than one Emacs with more than one Gnus at the
-same time.  If you are using different @file{.newsrc} files (e.g., if you
-are using the two different Gnusae to read from two different servers),
-that is no problem whatsoever.  You just do it.
+You might want to run more than one Emacs with more than one gnus at the
+same time.  If you are using different @file{.newsrc} files (e.g., if
+you are using the two different gnusae to read from two different
+servers), that is no problem whatsoever.  You just do it.
 
 The problem appears when you want to run two Gnusae that use the same
 @code{.newsrc} file.
 
-To work around that problem some, we here at the Think-Tank at the Gnus
-Towers have come up with a new concept: @dfn{Masters} and
-@dfn{slaves}.  (We have applied for a patent on this concept, and have
-taken out a copyright on those words.  If you wish to use those words in
-conjunction with each other, you have to send $1 per usage instance to
-me.  Usage of the patent (@dfn{Master/Slave Relationships In Computer
-Applications}) will be much more expensive, of course.)
+To work around that problem some, we here at the Think-Tank at the gnus
+Towers have come up with a new concept: @dfn{Masters} and @dfn{slaves}.
+(We have applied for a patent on this concept, and have taken out a
+copyright on those words.  If you wish to use those words in conjunction
+with each other, you have to send $1 per usage instance to me.  Usage of
+the patent (@dfn{Master/Slave Relationships In Computer Applications})
+will be much more expensive, of course.)
 
-Anyways, you start one Gnus up the normal way with @kbd{M-x gnus} (or
-however you do it).  Each subsequent slave Gnusae should be started with
+Anyways, you start one gnus up the normal way with @kbd{M-x gnus} (or
+however you do it).  Each subsequent slave gnusae should be started with
 @kbd{M-x gnus-slave}.  These slaves won't save normal @file{.newsrc}
 files, but instead save @dfn{slave files} that contain information only
-on what groups have been read in the slave session.  When a master Gnus
+on what groups have been read in the slave session.  When a master gnus
 starts, it will read (and delete) these slave files, incorporating all
 information from them.  (The slave files will be read in the sequence
 they were created, so the latest changes will have precedence.)
@@ -611,7 +614,7 @@ information in the normal (i.e., master) @code{.newsrc} file.
 
 @findex gnus-fetch-group
 It is sometimes convenient to be able to just say ``I want to read this
-group and I don't care whether Gnus has been started or not''.  This is
+group and I don't care whether gnus has been started or not''.  This is
 perhaps more useful for people who write code than for users, but the
 command @code{gnus-fetch-group} provides this functionality in any case.
 It takes the group name as a parameter.
@@ -629,13 +632,13 @@ also save you some time at startup.  Even if this variable is
 @code{nil}, you can always subscribe to the new groups just by pressing
 @kbd{U} in the group buffer (@pxref{Group Maintenance}).  This variable
 is @code{ask-server} by default.  If you set this variable to
-@code{always}, then Gnus will query the backends for new groups even
+@code{always}, then gnus will query the backends for new groups even
 when you do the @kbd{g} command (@pxref{Scanning New Messages}).
 
 @menu
 * Checking New Groups::      Determining what groups are new.
-* Subscription Methods::     What Gnus should do with new groups.
-* Filtering New Groups::     Making Gnus ignore certain new groups.
+* Subscription Methods::     What gnus should do with new groups.
+* Filtering New Groups::     Making gnus ignore certain new groups.
 @end menu
 
 
@@ -645,7 +648,7 @@ when you do the @kbd{g} command (@pxref{Scanning New Messages}).
 Gnus normally determines whether a group is new or not by comparing the
 list of groups from the active file(s) with the lists of subscribed and
 dead groups.  This isn't a particularly fast method.  If
-@code{gnus-check-new-newsgroups} is @code{ask-server}, Gnus will ask the
+@code{gnus-check-new-newsgroups} is @code{ask-server}, gnus will ask the
 server for new groups since the last time.  This is both faster and
 cheaper.  This also means that you can get rid of the list of killed
 groups altogether, so you may set @code{gnus-save-killed-list} to
@@ -657,15 +660,15 @@ I bet I know what you're thinking now: How do I find out whether my
 server supports @code{ask-server}?  No?  Good, because I don't have a
 fail-safe answer.  I would suggest just setting this variable to
 @code{ask-server} and see whether any new groups appear within the next
-few days.  If any do, then it works.  If none do, then it doesn't
-work.  I could write a function to make Gnus guess whether the server
-supports @code{ask-server}, but it would just be a guess.  So I won't.
-You could @code{telnet} to the server and say @code{HELP} and see
-whether it lists @samp{NEWGROUPS} among the commands it understands.  If
-it does, then it might work.  (But there are servers that lists
-@samp{NEWGROUPS} without supporting the function properly.)
-
-This variable can also be a list of select methods.  If so, Gnus will
+few days.  If any do, then it works.  If none do, then it doesn't work.
+I could write a function to make gnus guess whether the server supports
+@code{ask-server}, but it would just be a guess.  So I won't.  You could
+@code{telnet} to the server and say @code{HELP} and see whether it lists
+@samp{NEWGROUPS} among the commands it understands.  If it does, then it
+might work.  (But there are servers that lists @samp{NEWGROUPS} without
+supporting the function properly.)
+
+This variable can also be a list of select methods.  If so, gnus will
 issue an @code{ask-server} command to each of the select methods, and
 subscribe them (or not) using the normal methods.  This might be handy
 if you are monitoring a few servers for new groups.  A side effect is
@@ -677,7 +680,7 @@ Use the mantra ``dingnusdingnusdingnus'' to achieve permanent bliss.
 @subsection Subscription Methods
 
 @vindex gnus-subscribe-newsgroup-method
-What Gnus does when it encounters a new group is determined by the
+What gnus does when it encounters a new group is determined by the
 @code{gnus-subscribe-newsgroup-method} variable.
 
 This variable should contain a function.  This function will be called
@@ -707,16 +710,16 @@ Subscribe all new groups in alphabetical order.
 Subscribe all new groups hierarchically.  The difference between this
 function and @code{gnus-subscribe-alphabetically} is slight.
 @code{gnus-subscribe-alphabetically} will subscribe new groups in a strictly
-alphabetical fashion, while this function will enter groups into its
+alphabetical fashion, while this function will enter groups into it's
 hierarchy.  So if you want to have the @samp{rec} hierarchy before the
 @samp{comp} hierarchy, this function will not mess that configuration
 up.  Or something like that.
 
 @item gnus-subscribe-interactively
 @vindex gnus-subscribe-interactively
-Subscribe new groups interactively.  This means that Gnus will ask
-you about @strong{all} new groups.  The groups you choose to subscribe
-to will be subscribed hierarchically.
+Subscribe new groups interactively.  This means that gnus will ask you
+about @strong{all} new groups.  The groups you choose to subscribe to
+will be subscribed hierarchically.
 
 @item gnus-subscribe-killed
 @vindex gnus-subscribe-killed
@@ -727,7 +730,7 @@ Kill all new groups.
 @vindex gnus-subscribe-hierarchical-interactive
 A closely related variable is
 @code{gnus-subscribe-hierarchical-interactive}.  (That's quite a
-mouthful.)  If this variable is non-@code{nil}, Gnus will ask you in a
+mouthful.)  If this variable is non-@code{nil}, gnus will ask you in a
 hierarchical fashion whether to subscribe to new groups or not.  Gnus
 will ask you for each sub-hierarchy whether you want to descend the
 hierarchy or not.
@@ -828,10 +831,6 @@ and read ranges have become worthless.  You can use the @kbd{M-x
 gnus-group-clear-data-on-native-groups} command to clear out all data
 that you have on your native groups.  Use with caution.
 
-After changing servers, you @strong{must} move the cache hierarchy away,
-since the cached articles will have wrong article numbers, which will
-affect which articles Gnus thinks are read.
-
 
 @node Startup Files
 @section Startup Files
@@ -843,11 +842,11 @@ affect which articles Gnus thinks are read.
 Now, you all know about the @file{.newsrc} file.  All subscription
 information is traditionally stored in this file.
 
-Things got a bit more complicated with @sc{gnus}.  In addition to
+Things got a bit more complicated with @sc{GNUS}.  In addition to
 keeping the @file{.newsrc} file updated, it also used a file called
 @file{.newsrc.el} for storing all the information that didn't fit into
 the @file{.newsrc} file.  (Actually, it also duplicated everything in
-the @file{.newsrc} file.)  @sc{gnus} would read whichever one of these
+the @file{.newsrc} file.)  @sc{GNUS} would read whichever one of these
 files was the most recently saved, which enabled people to swap between
 @sc{gnus} and other newsreaders.
 
@@ -858,16 +857,14 @@ recent, but it will never write a @file{.newsrc.el} file.  You should
 never delete the @file{.newsrc.eld} file---it contains much information
 not stored in the @file{.newsrc} file.
 
+In addition, gnus does not change anything.  Hail comrade Lars!
+
 @vindex gnus-save-newsrc-file
-@vindex gnus-read-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?  Similarly, setting
-@code{gnus-read-newsrc-file} to @code{nil} makes Gnus ignore the
-@file{.newsrc} file and any @file{.newsrc-SERVER} files, which is
-convenient if you have a tendency to use Netscape once in a while.
+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
@@ -907,11 +904,11 @@ startup files.  If you want to turn backup creation off, say something like:
 @end lisp
 
 @vindex gnus-init-file
-When Gnus starts, it will read the @code{gnus-site-init-file}
+When gnus starts, it will read the @code{gnus-site-init-file}
 (@file{.../site-lisp/gnus} by default) and @code{gnus-init-file}
 (@file{~/.gnus} by default) files.  These are normal Emacs Lisp files
 and can be used to avoid cluttering your @file{~/.emacs} and
-@file{site-init} files with Gnus stuff.  Gnus will also check for files
+@file{site-init} files with gnus stuff.  Gnus will also check for files
 with the same names as these, but with @file{.elc} and @file{.el}
 suffixes.  In other words, if you have set @code{gnus-init-file} to
 @file{~/.gnus}, it will look for @file{~/.gnus.elc}, @file{~/.gnus.el},
@@ -924,24 +921,24 @@ and finally @file{~/.gnus} (in this order).
 @cindex dribble file
 @cindex auto-save
 
-Whenever you do something that changes the Gnus data (reading articles,
+Whenever you do something that changes the gnus data (reading articles,
 catching up, killing/subscribing groups), the change is added to a
 special @dfn{dribble buffer}.  This buffer is auto-saved the normal
 Emacs way.  If your Emacs should crash before you have saved the
 @file{.newsrc} files, all changes you have made can be recovered from
 this file.
 
-If Gnus detects this file at startup, it will ask the user whether to
-read it.  The auto save file is deleted whenever the real startup file is
-saved.
+If gnus detects this file at startup, it will ask the user whether to
+read it.  The auto save file is deleted whenever the real startup file
+is saved.
 
 @vindex gnus-use-dribble-file
-If @code{gnus-use-dribble-file} is @code{nil}, Gnus won't create and
+If @code{gnus-use-dribble-file} is @code{nil}, gnus won't create and
 maintain a dribble buffer.  The default is @code{t}.
 
 @vindex gnus-dribble-directory
 Gnus will put the dribble file(s) in @code{gnus-dribble-directory}.  If
-this variable is @code{nil}, which it is by default, Gnus will dribble
+this variable is @code{nil}, which it is by default, gnus will dribble
 into the directory where the @file{.newsrc} file is located.  (This is
 normally the user's home directory.)  The dribble file will get the same
 file permissions as the @code{.newsrc} file.
@@ -956,14 +953,14 @@ read the dribble file on startup without querying the user.
 @cindex active file
 @cindex ignored groups
 
-When Gnus starts, or indeed whenever it tries to determine whether new
+When gnus starts, or indeed whenever it tries to determine whether new
 articles have arrived, it reads the active file.  This is a very large
 file that lists all the active groups and articles on the server.
 
 @vindex gnus-ignored-newsgroups
-Before examining the active file, Gnus deletes all lines that match the
+Before examining the active file, gnus deletes all lines that match the
 regexp @code{gnus-ignored-newsgroups}.  This is done primarily to reject
-any groups with bogus names, but you can use this variable to make Gnus
+any groups with bogus names, but you can use this variable to make gnus
 ignore hierarchies you aren't ever interested in.  However, this is not
 recommended.  In fact, it's highly discouraged.  Instead, @pxref{New
 Groups} for an overview of other variables that can be used instead.
@@ -975,15 +972,15 @@ Groups} for an overview of other variables that can be used instead.
 @vindex gnus-read-active-file
 @c @head
 The active file can be rather Huge, so if you have a slow network, you
-can set @code{gnus-read-active-file} to @code{nil} to prevent Gnus from
+can set @code{gnus-read-active-file} to @code{nil} to prevent gnus from
 reading the active file.  This variable is @code{some} by default.
 
 Gnus will try to make do by getting information just on the groups that
 you actually subscribe to.
 
 Note that if you subscribe to lots and lots of groups, setting this
-variable to @code{nil} will probably make Gnus slower, not faster.  At
-present, having this variable @code{nil} will slow Gnus down
+variable to @code{nil} will probably make gnus slower, not faster.  At
+present, having this variable @code{nil} will slow gnus down
 considerably, unless you read news over a 2400 baud modem.
 
 This variable can also have the value @code{some}.  Gnus will then
@@ -993,20 +990,13 @@ support the @code{LIST ACTIVE group} command), on others this isn't fast
 at all.  In any case, @code{some} should be faster than @code{nil}, and
 is certainly faster than @code{t} over slow lines.
 
-Some news servers (Leafnode and old versions of INN, for instance) do
-not support the @code{LIST ACTIVE group}.  For these servers, @code{nil}
-is probably the most effficient value for this variable.
-
-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.
 
-If you think that starting up Gnus takes too long, try all the three
-different values for this variable and see what works best for you. 
-
 In any case, if you use @code{some} or @code{nil}, you should definitely
 kill all groups that you aren't interested in to speed things up.
 
@@ -1021,31 +1011,31 @@ secondary select methods.
 
 @item gnus-load-hook
 @vindex gnus-load-hook
-A hook run while Gnus is being loaded.  Note that this hook will
+A hook run while gnus is being loaded.  Note that this hook will
 normally be run just once in each Emacs session, no matter how many
-times you start Gnus.
+times you start gnus.
 
 @item gnus-before-startup-hook
 @vindex gnus-before-startup-hook
-A hook run after starting up Gnus successfully.
+A hook run after starting up gnus successfully.
 
 @item gnus-startup-hook
 @vindex gnus-startup-hook
-A hook run as the very last thing after starting up Gnus
+A hook run as the very last thing after starting up gnus
 
 @item gnus-started-hook
 @vindex gnus-started-hook
-A hook that is run as the very last thing after starting up Gnus
+A hook that is run as the very last thing after starting up gnus
 successfully.
 
-@item gnus-setup-news-hook
-@vindex gnus-setup-news-hook
+@item gnus-started-hook
+@vindex gnus-started-hook
 A hook that is run after reading the @file{.newsrc} file(s), but before
 generating the group buffer.
 
 @item gnus-check-bogus-newsgroups
 @vindex gnus-check-bogus-newsgroups
-If non-@code{nil}, Gnus will check for and delete all bogus groups at
+If non-@code{nil}, gnus will check for and delete all bogus groups at
 startup.  A @dfn{bogus group} is a group that you have in your
 @file{.newsrc} file, but doesn't exist on the news server.  Checking for
 bogus groups can take quite a while, so to save time and resources it's
@@ -1061,11 +1051,11 @@ of doing your job.  Note that this variable is used before
 
 @item gnus-no-groups-message
 @vindex gnus-no-groups-message
-Message displayed by Gnus when no groups are available.
+Message displayed by gnus when no groups are available.
 
 @item gnus-play-startup-jingle
 @vindex gnus-play-startup-jingle
-If non-@code{nil}, play the Gnus jingle at startup.
+If non-@code{nil}, play the gnus jingle at startup.
 
 @item gnus-startup-jingle
 @vindex gnus-startup-jingle
@@ -1080,8 +1070,8 @@ default is @samp{Tuxedomoon.Jingle4.au}.
 @cindex group buffer
 
 The @dfn{group buffer} lists all (or parts) of the available groups.  It
-is the first buffer shown when Gnus starts, and will never be killed as
-long as Gnus is active.
+is the first buffer shown when gnus starts, and will never be killed as
+long as gnus is active.
 
 @iftex
 @iflatex
@@ -1161,7 +1151,7 @@ a @code{printf} specifications, for those of you who use (feh!) C.
 There should always be a colon on the line; the cursor always moves to
 the colon after performing an operation.  Nothing else is required---not
 even the group name.  All displayed text is just window dressing, and is
-never examined by Gnus.  Gnus stores all real information it needs using
+never examined by gnus.  Gnus stores all real information it needs using
 text properties.
 
 (Note that if you make a really strange, wonderful, spreadsheet-like
@@ -1344,7 +1334,7 @@ topic being inserted.
 @end table
 
 When the forms are @code{eval}ed, point is at the beginning of the line
-of the group in question, so you can use many of the normal Gnus
+of the group in question, so you can use many of the normal gnus
 functions for snarfing info on the group.
 
 @vindex gnus-group-update-hook
@@ -1443,11 +1433,11 @@ is @code{t}.
 Select the current group, switch to the summary buffer and display the
 first unread article (@code{gnus-group-read-group}).  If there are no
 unread articles in the group, or if you give a non-numerical prefix to
-this command, Gnus will offer to fetch all the old articles in this
+this command, gnus will offer to fetch all the old articles in this
 group from the server.  If you give a numerical prefix @var{N}, @var{N}
-determines the number of articles Gnus will fetch.  If @var{N} is
-positive, Gnus fetches the @var{N} newest articles, if @var{N} is
-negative, Gnus fetches the @var{abs(N)} oldest articles.
+determines the number of articles gnus will fetch.  If @var{N} is
+positive, gnus fetches the @var{N} newest articles, if @var{N} is
+negative, gnus fetches the @var{abs(N)} oldest articles.
 
 @item RET
 @kindex RET (Group)
@@ -1466,7 +1456,7 @@ minimum amount of fuzz (@code{gnus-group-quick-select-group}).  No
 scoring/killing will be performed, there will be no highlights and no
 expunging.  This might be useful if you're in a real hurry and have to
 enter some humongous group.  If you give a 0 prefix to this command
-(i.e., @kbd{0 M-RET}), Gnus won't even generate the summary buffer,
+(i.e., @kbd{0 M-RET}), gnus won't even generate the summary buffer,
 which is useful if you want to toggle threading before generating the
 summary buffer (@pxref{Summary Generation Commands}).
 
@@ -1489,9 +1479,9 @@ manner will have no permanent effects.
 @end table
 
 @vindex gnus-large-newsgroup
-The @code{gnus-large-newsgroup} variable says what Gnus should consider
+The @code{gnus-large-newsgroup} variable says what gnus should consider
 to be a big group.  This is 200 by default.  If the group has more
-(unread and/or ticked) articles than this, Gnus will query the user
+(unread and/or ticked) articles than this, gnus will query the user
 before entering the group.  The user can then specify how many articles
 should be fetched from the server.  If the user specifies a negative
 number (@code{-n}), the @code{n} oldest articles will be fetched.  If it
@@ -1515,26 +1505,8 @@ Select the first unread article when entering the group.
 @item best
 Select the highest scored article in the group when entering the
 group.
-
 @end table
 
-This variable can also be a function.  In that case, that function will
-be called to place point on a subject line, and/or select some article.
-Useful functions include:
-
-@table @code
-@item gnus-summary-first-unread-subject
-Place point on the subject line of the first unread article, but
-don't select the article.
-
-@item gnus-summary-first-unread-article
-Select the first unread article.
-
-@item gnus-summary-best-unread-article
-Select the highest-scored unread article.
-@end table
-
-
 If you want to prevent automatic selection in some group (say, in a
 binary group with Huge articles) you can set this variable to @code{nil}
 in @code{gnus-select-group-hook}, which is called when a group is
@@ -1627,8 +1599,8 @@ Also @pxref{Group Levels}.
 @c @icon{gnus-group-catchup-current}
 Mark all unticked articles in this group as read
 (@code{gnus-group-catchup-current}).
-@code{gnus-group-catchup-group-hook} is called when catching up a group from
-the group buffer.
+@code{gnus-group-catchup-group-hook} is called when catching up a group
+from the group buffer.
 
 @item C
 @kindex C (Group)
@@ -1660,7 +1632,7 @@ caution.
 
 All groups have a level of @dfn{subscribedness}.  For instance, if a
 group is on level 2, it is more subscribed than a group on level 5.  You
-can ask Gnus to just list groups on a given level or lower
+can ask gnus to just list groups on a given level or lower
 (@pxref{Listing Groups}), or to just check for new articles in groups on
 a given level or lower (@pxref{Scanning New Messages}).
 
@@ -1749,14 +1721,13 @@ is somewhat restrictive.  Don't you wish you could have Gnus sort the
 group buffer according to how often you read groups, perhaps?  Within
 reason?
 
-This is what @dfn{group score} is for.  You can have Gnus assign a score
-to each group through the mechanism described below.  You can then sort
-the group buffer based on this score.  Alternatively, you can sort on
-score and then level.  (Taken together, the level and the score is
-called the @dfn{rank} of the group.  A group that is on level 4 and has
-a score of 1 has a higher rank than a group on level 5 that has a score
-of 300.  (The level is the most significant part and the score is the
-least significant part.))
+This is what @dfn{group score} is for.  You can assign a score to each
+group.  You can then sort the group buffer based on this score.
+Alternatively, you can sort on score and then level.  (Taken together,
+the level and the score is called the @dfn{rank} of the group.  A group
+that is on level 4 and has a score of 1 has a higher rank than a group
+on level 5 that has a score of 300.  (The level is the most significant
+part and the score is the least significant part.))
 
 @findex gnus-summary-bubble-group
 If you want groups you read often to get higher scores than groups you
@@ -1895,7 +1866,7 @@ for a directory name (@code{gnus-group-make-directory-group}).
 @kindex G h (Group)
 @cindex help group
 @findex gnus-group-make-help-group
-Make the Gnus help group (@code{gnus-group-make-help-group}).
+Make the gnus help group (@code{gnus-group-make-help-group}).
 
 @item G a
 @kindex G a (Group)
@@ -1904,7 +1875,7 @@ Make the Gnus help group (@code{gnus-group-make-help-group}).
 @findex gnus-group-make-archive-group
 @vindex gnus-group-archive-directory
 @vindex gnus-group-recent-archive-directory
-Make a Gnus archive group (@code{gnus-group-make-archive-group}).  By
+Make a gnus archive group (@code{gnus-group-make-archive-group}).  By
 default a group pointing to the most recent articles will be created
 (@code{gnus-group-recent-archive-directory}), but given a prefix, a full
 group will be created from @code{gnus-group-archive-directory}.
@@ -1936,9 +1907,9 @@ Make a group based on some file or other
 command, you will be prompted for a file name and a file type.
 Currently supported types are @code{babyl}, @code{mbox}, @code{digest},
 @code{mmdf}, @code{news}, @code{rnews}, @code{clari-briefs},
-@code{rfc934}, @code{rfc822-forward}, @code{nsmail} and @code{forward}.
-If you run this command without a prefix, Gnus will guess at the file
-type.  @xref{Document Groups}.
+@code{rfc934}, @code{rfc822-forward}, and @code{forward}.  If you run
+this command without a prefix, gnus will guess at the file type.
+@xref{Document Groups}.
 
 @item G u
 @kindex G u (Group)
@@ -1988,16 +1959,16 @@ Add the current group to an @code{nnvirtual} group
 (@code{gnus-group-add-to-virtual}).  Uses the process/prefix convention.
 @end table
 
-@xref{Select Methods}, for more information on the various select
+@xref{Select Methods} for more information on the various select
 methods.
 
 @vindex gnus-activate-foreign-newsgroups
 If @code{gnus-activate-foreign-newsgroups} is a positive number,
-Gnus will check all foreign groups with this level or lower at startup.
+gnus will check all foreign groups with this level or lower at startup.
 This might take quite a while, especially if you subscribe to lots of
 groups from different @sc{nntp} servers.  Also @pxref{Group Levels};
 @code{gnus-activate-level} also affects activation of foreign
-newsgroups.
+newsgroups. 
 
 
 @node Group Parameters
@@ -2012,10 +1983,10 @@ Here's an example group parameter list:
  (auto-expire . t))
 @end example
 
-We see that each element consists of a "dotted pair"---the thing before
-the dot is the key, while the thing after the dot is the value.  All the
-parameters have this form @emph{except} local variable specs, which are
-not dotted pairs, but proper lists.
+We see that each element consists of a ``dotted pair''---the thing
+before the dot is the key, while the thing after the dot is the value.
+All the parameters have this form @emph{except} local variable specs,
+which are not dotted pairs, but proper lists.
 
 The following group parameters can be used:
 
@@ -2084,7 +2055,7 @@ posts in that group will be sent to @code{some.group.name}.
 
 @item newsgroup
 @cindex newsgroup
-If you have @code{(newsgroup . t)} in the group parameter list, Gnus
+If you have @code{(newsgroup . t)} in the group parameter list, gnus
 will treat all responses as if they were responses to news articles.
 This can be useful if you have a mail group that's really a mirror of a
 news group.
@@ -2154,15 +2125,9 @@ ticked articles.
 @end table
 
 @item comment
-Elements that look like @code{(comment . "This is a comment")}
-are arbitrary comments on the group.  They are currently ignored by
-Gnus, but provide a place for you to store information on particular
-groups.
-
-@item charset
-Elements that look like @code{(charset . iso-8859-1)} will make
-@code{iso-8859-1} the default charset; that is, the charset that will be
-used for all articles that do not specify a charset.
+Elements that look like @code{(comment . "This is a comment")} are
+arbitrary comments on the group.  They are currently ignored by gnus,
+but provide a place for you to store information on particular groups.
 
 @item @var{(variable form)}
 You can use the group parameters to set variables local to the group you
@@ -2178,23 +2143,6 @@ something like @code{(dummy-variable (ding))} in the parameters of that
 group.  @code{dummy-variable} will be set to the result of the
 @code{(ding)} form, but who cares?
 
-@item posting-style
-You can store additional posting style information for this group only
-here (@pxref{Posting Styles}). The format is that of an entry in the
-@code{gnus-posting-styles} alist, except that there's no regexp matching
-the group name (of course). Style elements in this group parameter will
-take precedence over the ones found in @code{gnus-posting-styles}.
-
-For instance, if you want a funky name and signature in this group only,
-instead of hacking @code{gnus-posting-styles}, you could put something
-like this in the group parameters:
-
-@example
-(posting-style
-  (name "Funky Name")
-  (signature "Funky Signature"))
-@end example
-
 @end table
 
 Use the @kbd{G p} command to edit group parameters of a group.  You
@@ -2396,11 +2344,7 @@ Sort the group buffer alphabetically by backend name
 
 @end table
 
-All the commands below obeys the process/prefix convention
-(@pxref{Process/Prefix}).
-
-When given a symbolic prefix (@pxref{Symbolic Prefixes}), all these
-commands will sort in reverse order.
+When given a prefix, all these commands will sort in reverse order.
 
 You can also sort a subset of the groups:
 
@@ -2408,38 +2352,38 @@ You can also sort a subset of the groups:
 @item G P a
 @kindex G P a (Group)
 @findex gnus-group-sort-selected-groups-by-alphabet
-Sort the groups alphabetically by group name
-(@code{gnus-group-sort-selected-groups-by-alphabet}).
+Sort the process/prefixed groups in the group buffer alphabetically by
+group name (@code{gnus-group-sort-selected-groups-by-alphabet}).
 
 @item G P u
 @kindex G P u (Group)
 @findex gnus-group-sort-selected-groups-by-unread
-Sort the groups by the number of unread articles
-(@code{gnus-group-sort-selected-groups-by-unread}).
+Sort the process/prefixed groups in the group buffer by the number of
+unread articles (@code{gnus-group-sort-selected-groups-by-unread}).
 
 @item G P l
 @kindex G P l (Group)
 @findex gnus-group-sort-selected-groups-by-level
-Sort the groups by group level
+Sort the process/prefixed groups in the group buffer by group level
 (@code{gnus-group-sort-selected-groups-by-level}).
 
 @item G P v
 @kindex G P v (Group)
 @findex gnus-group-sort-selected-groups-by-score
-Sort the groups by group score
+Sort the process/prefixed groups in the group buffer by group score
 (@code{gnus-group-sort-selected-groups-by-score}).  @xref{Group Score}.
 
 @item G P r
 @kindex G P r (Group)
 @findex gnus-group-sort-selected-groups-by-rank
-Sort the groups by group rank
+Sort the process/prefixed groups in the group buffer by group rank
 (@code{gnus-group-sort-selected-groups-by-rank}).  @xref{Group Score}.
 
 @item G P m
 @kindex G P m (Group)
 @findex gnus-group-sort-selected-groups-by-method
-Sort the groups alphabetically by backend name
-(@code{gnus-group-sort-selected-groups-by-method}).
+Sort the process/prefixed groups in the group buffer alphabetically by
+backend name (@code{gnus-group-sort-selected-groups-by-method}).
 
 @end table
 
@@ -2545,42 +2489,43 @@ there) (@code{gnus-browse-describe-briefly}).
 
 
 @node Exiting Gnus
-@section Exiting Gnus
-@cindex exiting Gnus
+@section Exiting gnus
+@cindex exiting gnus
 
-Yes, Gnus is ex(c)iting.
+Yes, gnus is ex(c)iting.
 
 @table @kbd
 @item z
 @kindex z (Group)
 @findex gnus-group-suspend
-Suspend Gnus (@code{gnus-group-suspend}).  This doesn't really exit Gnus,
-but it kills all buffers except the Group buffer.  I'm not sure why this
-is a gain, but then who am I to judge?
+Suspend gnus (@code{gnus-group-suspend}).  This doesn't really exit
+gnus, but it kills all buffers except the Group buffer.  I'm not sure
+why this is a gain, but then who am I to judge?
 
 @item q
 @kindex q (Group)
 @findex gnus-group-exit
 @c @icon{gnus-group-exit}
-Quit Gnus (@code{gnus-group-exit}).
+Quit gnus (@code{gnus-group-exit}).
 
 @item Q
 @kindex Q (Group)
 @findex gnus-group-quit
-Quit Gnus without saving the @file{.newsrc} files (@code{gnus-group-quit}).
-The dribble file will be saved, though (@pxref{Auto Save}).
+Quit gnus without saving the @file{.newsrc} files
+(@code{gnus-group-quit}).  The dribble file will be saved, though
+(@pxref{Auto Save}).
 @end table
 
 @vindex gnus-exit-gnus-hook
 @vindex gnus-suspend-gnus-hook
-@code{gnus-suspend-gnus-hook} is called when you suspend Gnus and
-@code{gnus-exit-gnus-hook} is called when you quit Gnus, while
+@code{gnus-suspend-gnus-hook} is called when you suspend gnus and
+@code{gnus-exit-gnus-hook} is called when you quit gnus, while
 @code{gnus-after-exiting-gnus-hook} is called as the final item when
-exiting Gnus.
+exiting gnus.
 
 @findex gnus-unload
 @cindex unloading
-If you wish to completely unload Gnus and all its adherents, you can use
+If you wish to completely unload gnus and all its adherents, you can use
 the @code{gnus-unload} command.  This command is also very handy when
 trying to customize meta-variables.
 
@@ -2737,7 +2682,7 @@ 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.
+topic. 
 
 This command uses the process/prefix convention
 (@pxref{Process/Prefix}).
@@ -2772,6 +2717,17 @@ Mark all groups in the current topic with the process mark
 Remove the process mark from all groups in the current topic
 (@code{gnus-topic-unmark-topic}).
 
+@item RET
+@kindex RET (Topic)
+@findex gnus-topic-select-group
+@itemx SPACE
+Either select a group or fold a topic (@code{gnus-topic-select-group}).
+When you perform this command on a group, you'll enter the group, as
+usual.  When done on a topic line, the topic will be folded (if it was
+visible) or unfolded (if it was folded already).  So it's basically a
+toggling command on topics.  In addition, if you give a numerical
+prefix, group on that level (and lower) will be displayed.
+
 @item T TAB
 @itemx TAB
 @kindex T TAB (Topic)
@@ -2785,24 +2741,7 @@ previous topic (@code{gnus-topic-indent}).  If given a prefix,
 @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 RET
-@kindex RET (Topic)
-@findex gnus-topic-select-group
-@itemx SPACE
-Either select a group or fold a topic (@code{gnus-topic-select-group}).
-When you perform this command on a group, you'll enter the group, as
-usual.  When done on a topic line, the topic will be folded (if it was
-visible) or unfolded (if it was folded already).  So it's basically a
-toggling command on topics.  In addition, if you give a numerical
-prefix, group on that level (and lower) will be displayed.
-
-@item C-c C-x
-@kindex C-c C-x (Topic)
-@findex gnus-topic-expire-articles
-Run all expirable articles in the current group or topic through the expiry
-process (if any) (@code{gnus-topic-expire-articles}).
+parent of its current parent (@code{gnus-topic-unindent}).  
 
 @item C-k
 @kindex C-k (Topic)
@@ -2830,7 +2769,7 @@ Delete an empty topic (@code{gnus-topic-delete}).
 @item A T
 @kindex A T (Topic)
 @findex gnus-topic-list-active
-List all groups that Gnus knows about in a topics-ified way
+List all groups that gnus knows about in a topics-ified way
 (@code{gnus-topic-list-active}).
 
 @item G p
@@ -2892,7 +2831,7 @@ Sort the current topic alphabetically by backend name
 
 @end table
 
-@xref{Sorting Groups}, for more information about group sorting.
+@xref{Sorting Groups} for more information about group sorting.
 
 
 @node Topic Topology
@@ -2994,10 +2933,10 @@ happens.  You just have to be careful if you do stuff like that.
 @section Misc Group Stuff
 
 @menu
-* Scanning New Messages:: Asking Gnus to see whether new messages have arrived.
-* Group Information::     Information and help on groups and Gnus.
-* Group Timestamp::       Making Gnus keep track of when you last read a group.
-* File Commands::         Reading and writing the Gnus files.
+* Scanning New Messages:: Asking gnus to see whether new messages have arrived.
+* Group Information::     Information and help on groups and gnus.
+* Group Timestamp::       Making gnus keep track of when you last read a group.
+* File Commands::         Reading and writing the gnus files.
 @end menu
 
 @table @kbd
@@ -3086,9 +3025,9 @@ Activate absolutely all groups (@code{gnus-activate-all-groups}).
 @kindex R (Group)
 @cindex restarting
 @findex gnus-group-restart
-Restart Gnus (@code{gnus-group-restart}).  This saves the @file{.newsrc}
+Restart gnus (@code{gnus-group-restart}).  This saves the @file{.newsrc}
 file(s), closes the connection to all servers, clears up all run-time
-Gnus variables, and then starts Gnus all over again.
+gnus variables, and then starts gnus all over again.
 
 @end table
 
@@ -3122,7 +3061,7 @@ that case, giving a prefix to this command will allow you to choose
 between the various sites.  @code{ange-ftp} (or @code{efs}) will be used
 for fetching the file.
 
-If fetching from the first site is unsuccessful, Gnus will attempt to go
+If fetching from the first site is unsuccessful, gnus will attempt to go
 through @code{gnus-group-faq-directory} and try to open them one by one.
 
 @item H d
@@ -3140,7 +3079,7 @@ a prefix, force Gnus to re-read the description from the server.
 @kindex M-d (Group)
 @findex gnus-group-describe-all-groups
 Describe all groups (@code{gnus-group-describe-all-groups}).  If given a
-prefix, force Gnus to re-read the description file from the server.
+prefix, force gnus to re-read the description file from the server.
 
 @item H v
 @itemx V
@@ -3148,7 +3087,7 @@ prefix, force Gnus to re-read the description file from the server.
 @kindex H v (Group)
 @cindex version
 @findex gnus-version
-Display current Gnus version numbers (@code{gnus-version}).
+Display current gnus version numbers (@code{gnus-version}).
 
 @item ?
 @kindex ? (Group)
@@ -3160,7 +3099,7 @@ Give a very short help message (@code{gnus-group-describe-briefly}).
 @cindex info
 @cindex manual
 @findex gnus-info-find-node
-Go to the Gnus info node (@code{gnus-info-find-node}).
+Go to the gnus info node (@code{gnus-info-find-node}).
 @end table
 
 
@@ -3169,7 +3108,7 @@ Go to the Gnus info node (@code{gnus-info-find-node}).
 @cindex timestamps
 @cindex group timestamps
 
-It can be convenient to let Gnus keep track of when you last read a
+It can be convenient to let gnus keep track of when you last read a
 group.  To set the ball rolling, you should add
 @code{gnus-group-set-timestamp} to @code{gnus-select-group-hook}:
 
@@ -3264,8 +3203,6 @@ You can have as many summary buffers open as you wish.
 * Saving Articles::             Ways of customizing article saving.
 * Decoding Articles::           Gnus can treat series of (uu)encoded articles.
 * Article Treatment::           The article buffer can be mangled at will.
-* MIME Commands::               Doing MIMEy things with the articles.
-* Charsets::                    Character set issues.
 * Article Commands::            Doing various things with the article buffer.
 * Summary Sorting::             Sorting the summary buffer in various ways.
 * Finding the Parent::          No child support? Get the parent.
@@ -3294,7 +3231,6 @@ You can have as many summary buffers open as you wish.
 
 @menu
 * Summary Buffer Lines::     You can specify how summary lines should look.
-* To From Newsgroups::       How to not display your own name.
 * Summary Buffer Mode Line:: You can say how the mode line should look.
 * Summary Highlighting::     Making the summary buffer all pretty and nice.
 @end menu
@@ -3304,17 +3240,14 @@ You can have as many summary buffers open as you wish.
 @vindex gnus-extract-address-components
 Gnus will use the value of the @code{gnus-extract-address-components}
 variable as a function for getting the name and address parts of a
-@code{From} header.  Two pre-defined functions exist:
+@code{From} header.  Three pre-defined functions exist:
 @code{gnus-extract-address-components}, which is the default, quite
-fast, and too simplistic solution; and
-@code{mail-extract-address-components}, which works very nicely, but is
-slower.  The default function will return the wrong answer in 5% of the
-cases.  If this is unacceptable to you, use the other function instead:
-
-@lisp
-(setq gnus-extract-address-components
-      'mail-extract-address-components)
-@end lisp
+fast, and too simplistic solution;
+@code{mail-extract-address-components}, which works nicely, but is
+slower; and @code{std11-extract-address-components}, which works very
+nicely, but is slower.  The default function will return the wrong
+answer in 5% of the cases.  If this is unacceptable to you, use the
+other function instead.
 
 @vindex gnus-summary-same-subject
 @code{gnus-summary-same-subject} is a string indicating that the current
@@ -3348,9 +3281,6 @@ had a different subject, @code{gnus-summary-same-subject} otherwise.
 Full @code{From} header.
 @item n
 The name (from the @code{From} header).
-@item f
-The name, code @code{To} header or the @code{Newsgroups} header
-(@pxref{To From Newsgroups}).
 @item a
 The name (from the @code{From} header).  This differs from the @code{n}
 spec in that it uses the function designated by the
@@ -3384,7 +3314,7 @@ Unread.
 @item R
 This misleadingly named specifier is the @dfn{secondary mark}.  This
 mark will say whether the article has been replied to, has been cached,
-or has been saved.
+or has been saved.  
 
 @item i
 Score as a number (@pxref{Scoring}).
@@ -3428,7 +3358,7 @@ into the summary just like information from any other summary specifier.
 @end table
 
 The @samp{%U} (status), @samp{%R} (replied) and @samp{%z} (zcore) specs
-have to be handled with care.  For reasons of efficiency, Gnus will
+have to be handled with care.  For reasons of efficiency, gnus will
 compute what column these characters will end up in, and ``hard-code''
 that.  This means that it is invalid to have these specs after a
 variable-length spec.  Well, you might not be arrested, but your summary
@@ -3437,88 +3367,7 @@ buffer will look strange, which is bad enough.
 The smart choice is to have these specs as far to the left as possible.
 (Isn't that the case with everything, though?  But I digress.)
 
-This restriction may disappear in later versions of Gnus.
-
-
-@node To From Newsgroups
-@subsection To From Newsgroups
-@cindex To
-@cindex Newsgroups
-
-In some groups (particularly in archive groups), the @code{From} header
-isn't very interesting, since all the articles there are written by
-you.  To display the information in the @code{To} or @code{Newsgroups}
-headers instead, you need to decide three things: What information to
-gather; where to display it; and when to display it.
-
-@enumerate
-@item
-@vindex gnus-extra-headers
-The reading of extra header information is controlled by the
-@code{gnus-extra-headers}.  This is a list of header symbols.  For
-instance:
-
-@lisp
-(setq gnus-extra-headers
-      '(To Newsgroups X-Newsreader))
-@end lisp
-
-This will result in Gnus trying to obtain these three headers, and
-storing it in header structures for later easy retrieval.
-
-@item
-@findex gnus-extra-header
-The value of these extra headers can be accessed via the
-@code{gnus-extra-header} function.  Here's a format line spec that will
-access the @code{X-Newsreader} header:
-
-@example
-"%~(form (gnus-extra-header 'X-Newsreader))@@"
-@end example
-
-@item
-@vindex gnus-ignored-from-addresses
-The @code{gnus-ignored-from-addresses} variable says when the @samp{%f}
-summary line spec returns the @code{To}, @code{Newsreader} or
-@code{From} header.  If this regexp matches the contents of the
-@code{From} header, the value of the @code{To} or @code{Newsreader}
-headers are used instead.
-
-@end enumerate
-
-@vindex nnmail-extra-headers
-A related variable is @code{nnmail-extra-headers}, which controls when
-to include extra headers when generating overview (@sc{nov}) files.  If
-you have old overview files, you should regenerate them after changing
-this variable.
-
-@vindex gnus-summary-line-format
-You also have to instruct Gnus to display the data by changing the
-@code{%n} spec to the @code{%f} spec in the
-@code{gnus-summary-line-format} variable.
-
-In summary, you'd typically do something like the following:
-
-@lisp
-(setq gnus-extra-headers
-      '(To Newsgroups))
-(setq nnmail-extra-headers gnus-extra-headers)
-(setq gnus-summary-line-format
-      "%U%R%z%I%(%[%4L: %-20,20f%]%) %s\n")
-(setq gnus-ignored-from-addresses
-      "Your Name Here")
-@end lisp
-
-Now, this is mostly useful for mail groups, where you have control over
-the @sc{nov} files that are created.  However, if you can persuade your
-nntp admin to add:
-
-@example
-Newsgroups:full
-@end example
-
-to the end of her @file{overview.fmt} file, then you can use that just
-as you would the extra headers from the mail groups.
+This restriction may disappear in later versions of gnus.
 
 
 @node Summary Buffer Mode Line
@@ -3649,7 +3498,7 @@ Ask for an article number and then go to the summary line of that article
 without displaying the article (@code{gnus-summary-goto-subject}).
 @end table
 
-If Gnus asks you to press a key to confirm going to the next group, you
+If gnus asks you to press a key to confirm going to the next group, you
 can use the @kbd{C-n} and @kbd{C-p} keys to move around the group
 buffer, searching for the next group to read without actually returning
 to the group buffer.
@@ -3661,12 +3510,12 @@ Variables related to summary movement:
 @vindex gnus-auto-select-next
 @item gnus-auto-select-next
 If you issue one of the movement commands (like @kbd{n}) and there are
-no more unread articles after the current one, Gnus will offer to go to
+no more unread articles after the current one, gnus will offer to go to
 the next group.  If this variable is @code{t} and the next group is
-empty, Gnus will exit summary mode and return to the group buffer.  If
-this variable is neither @code{t} nor @code{nil}, Gnus will select the
+empty, gnus will exit summary mode and return to the group buffer.  If
+this variable is neither @code{t} nor @code{nil}, gnus will select the
 next group, no matter whether it has any unread articles or not.  As a
-special case, if this variable is @code{quietly}, Gnus will select the
+special case, if this variable is @code{quietly}, gnus will select the
 next group without asking for confirmation.  If this variable is
 @code{almost-quietly}, the same will happen only if you are located on
 the last article in the group.  Finally, if this variable is
@@ -3691,7 +3540,7 @@ Instead, they will choose the current article.
 
 @item gnus-auto-center-summary
 @vindex gnus-auto-center-summary
-If non-@code{nil}, Gnus will keep the point in the summary buffer
+If non-@code{nil}, gnus will keep the point in the summary buffer
 centered at all times.  This makes things quite tidy, but if you have a
 slow network connection, or simply do not like this un-Emacsism, you can
 set this variable to @code{nil} to get the normal Emacs scrolling
@@ -3699,9 +3548,6 @@ action.  This will also inhibit horizontal re-centering of the summary
 buffer, which might make it more inconvenient to read extremely long
 threads.
 
-This variable can also be a number.  In that case, center the window at
-the given number of lines from the top.
-
 @end table
 
 
@@ -3963,7 +3809,7 @@ goes out to all people listed in the @code{To}, @code{From} (or
 @kindex S W (Summary)
 @findex gnus-summary-wide-reply-with-original
 Mail a wide reply to the current article and include the original
-message (@code{gnus-summary-wide-reply-with-original}).  This command uses
+message (@code{gnus-summary-reply-with-original}).  This command uses
 the process/prefix convention.
 
 @item S o m
@@ -3992,7 +3838,7 @@ reason (wrong address, transient failure), you can use this command to
 resend that bounced mail (@code{gnus-summary-resend-bounced-mail}).  You
 will be popped into a mail buffer where you can edit the headers before
 sending the mail off again.  If you give a prefix to this command, and
-the bounced mail is a reply to some other mail, Gnus will try to fetch
+the bounced mail is a reply to some other mail, gnus will try to fetch
 that mail and display it for easy perusal of its headers.  This might
 very well fail, though.
 
@@ -4012,7 +3858,7 @@ This command is mainly used if you have several accounts and want to
 ship a mail to a different account of yours.  (If you're both
 @code{root} and @code{postmaster} and get a mail for @code{postmaster}
 to the @code{root} account, you may want to resend it to
-@code{postmaster}.  Ordnung muß sein!
+@code{postmaster}.  Ordnung mu\e,A_\e(B sein!
 
 This command understands the process/prefix convention
 (@pxref{Process/Prefix}).
@@ -4173,7 +4019,7 @@ header by substituting one of those words for the word
 you would do normally.  The previous article will be
 canceled/superseded.
 
-Just remember, kids: There is no 'c' in 'supersede'.
+Just remember, kids: There is no `c' in `supersede'.
 
 
 @node Marking Articles
@@ -4201,9 +4047,8 @@ There's a plethora of commands for manipulating these marks:
 @end ifinfo
 
 @menu
-* Setting Marks::             How to set and remove marks.
-* Generic Marking Commands::  How to customize the marking.
-* Setting Process Marks::     How to mark articles for later processing.
+* Setting Marks::           How to set and remove marks.
+* Setting Process Marks::   How to mark articles for later processing.
 @end menu
 
 
@@ -4312,8 +4157,7 @@ Marked as expirable (@code{gnus-expirable-mark}).
 Marking articles as @dfn{expirable} (or have them marked as such
 automatically) doesn't make much sense in normal groups---a user doesn't
 control expiring of news articles, but in mail groups, for instance,
-articles marked as @dfn{expirable} can be deleted by Gnus at
-any time.
+articles marked as @dfn{expirable} can be deleted by gnus at any time.
 @end table
 
 
@@ -4331,8 +4175,8 @@ read or not.
 You can set a bookmark in the current article.  Say you are reading a
 long thesis on cats' urinary tracts, and have to go home for dinner
 before you've finished reading the thesis.  You can then set a bookmark
-in the article, and Gnus will jump to this bookmark the next time it
-encounters the article.  @xref{Setting Marks}.
+in the article, and gnus will jump to this bookmark the next time it
+encounters the article.  @xref{Setting Marks}
 
 @item
 @vindex gnus-replied-mark
@@ -4343,7 +4187,7 @@ answered) will be marked with an @samp{A} in the second column
 @item
 @vindex gnus-cached-mark
 Articles stored in the article cache will be marked with an @samp{*} in
-the second column (@code{gnus-cached-mark}).  @xref{Article Caching}.
+the second column (@code{gnus-cached-mark}).  @xref{Article Caching}
 
 @item
 @vindex gnus-saved-mark
@@ -4400,7 +4244,7 @@ article as unread.
 @kindex M t (Summary)
 @findex gnus-summary-tick-article-forward
 Tick the current article (@code{gnus-summary-tick-article-forward}).
-@xref{Article Caching}.
+@xref{Article Caching}
 
 @item M ?
 @itemx ?
@@ -4408,7 +4252,7 @@ Tick the current article (@code{gnus-summary-tick-article-forward}).
 @kindex M ? (Summary)
 @findex gnus-summary-mark-as-dormant
 Mark the current article as dormant
-(@code{gnus-summary-mark-as-dormant}).  @xref{Article Caching}.
+(@code{gnus-summary-mark-as-dormant}).  @xref{Article Caching}
 
 @item M d
 @itemx d
@@ -4521,44 +4365,6 @@ one line up or down.  As a special case, if this variable is
 The default is @code{t}.
 
 
-@node Generic Marking Commands
-@subsection Generic Marking Commands
-
-Some people would like the command that ticks an article (@kbd{!}) go to
-the next article.  Others would like it to go to the next unread
-article.  Yet others would like it to stay on the current article.  And
-even though I haven't heard of anybody wanting it to go the the
-previous (unread) article, I'm sure there are people that want that as
-well.
-
-Multiply these five behaviours with five different marking commands, and
-you get a potentially complex set of variable to control what each
-command should do.
-
-To sidestep that mess, Gnus provides commands that do all these
-different things.  They can be found on the @kbd{M M} map in the summary
-buffer.  Type @kbd{M M C-h} to see them all---there are too many of them
-to list in this manual.
-
-While you can use these commands directly, most users would prefer
-altering the summary mode keymap.  For instance, if you would like the
-@kbd{!} command to go the the next article instead of the next unread
-article, you could say something like:
-
-@lisp
-(add-hook 'gnus-summary-mode-hook 'my-alter-summary-map)
-(defun my-alter-summary-map ()
-  (local-set-key "!" 'gnus-summary-put-mark-as-ticked-next))
-@end lisp
-
-or
-
-@lisp
-(defun my-alter-summary-map ()
-  (local-set-key "!" "MM!n"))
-@end lisp
-
-
 @node Setting Process Marks
 @subsection Setting Process Marks
 @cindex setting process marks
@@ -4693,13 +4499,6 @@ Limit the summary buffer to articles that match some subject
 Limit the summary buffer to articles that match some author
 (@code{gnus-summary-limit-to-author}).
 
-@item / x
-@kindex / x (Summary)
-@findex gnus-summary-limit-to-extra
-Limit the summary buffer to articles that match one of the ``extra''
-headers (@pxref{To From Newsgroups})
-(@code{gnus-summary-limit-to-author}).
-
 @item / u
 @itemx x
 @kindex / u (Summary)
@@ -4769,11 +4568,6 @@ Include all cached articles in the limit
 Exclude all dormant articles from the limit
 (@code{gnus-summary-limit-exclude-dormant}).
 
-@item / M
-@kindex / M (Summary)
-@findex gnus-summary-limit-exclude-marks
-Exclude all marked articles (@code{gnus-summary-limit-exclude-marks}).
-
 @item / T
 @kindex / T (Summary)
 @findex gnus-summary-limit-include-thread
@@ -4852,7 +4646,7 @@ displayed as empty lines in the summary buffer.
 @cindex customizing threading
 
 @menu
-* Loose Threads::        How Gnus gathers loose threads into bigger threads.
+* Loose Threads::        How gnus gathers loose threads into bigger threads.
 * Filling In Threads::   Making the threads displayed look fuller.
 * More Threading::       Even more variables for fiddling with threads.
 * Low-Level Threading::  You thought it was over... but you were wrong!
@@ -4868,13 +4662,13 @@ displayed as empty lines in the summary buffer.
 @table @code
 @item gnus-summary-make-false-root
 @vindex gnus-summary-make-false-root
-If non-@code{nil}, Gnus will gather all loose subtrees into one big tree
+If non-@code{nil}, gnus will gather all loose subtrees into one big tree
 and create a dummy root at the top.  (Wait a minute.  Root at the top?
 Yup.)  Loose subtrees occur when the real root has expired, or you've
 read or killed the root in a previous session.
 
-When there is no real root of a thread, Gnus will have to fudge
-something.  This variable says what fudging method Gnus should use.
+When there is no real root of a thread, gnus will have to fudge
+something.  This variable says what fudging method gnus should use.
 There are four possible values:
 
 @iftex
@@ -4924,17 +4718,17 @@ Don't gather loose threads.
 @item gnus-summary-gather-subject-limit
 @vindex gnus-summary-gather-subject-limit
 Loose threads are gathered by comparing subjects of articles.  If this
-variable is @code{nil}, Gnus requires an exact match between the
+variable is @code{nil}, gnus requires an exact match between the
 subjects of the loose threads before gathering them into one big
 super-thread.  This might be too strict a requirement, what with the
 presence of stupid newsreaders that chop off long subject lines.  If
 you think so, set this variable to, say, 20 to require that only the
 first 20 characters of the subjects have to match.  If you set this
-variable to a really low number, you'll find that Gnus will gather
+variable to a really low number, you'll find that gnus will gather
 everything in sight into one thread, which isn't very helpful.
 
 @cindex fuzzy article gathering
-If you set this variable to the special value @code{fuzzy}, Gnus will
+If you set this variable to the special value @code{fuzzy}, gnus will
 use a fuzzy string comparison algorithm on the subjects (@pxref{Fuzzy
 Matching}).
 
@@ -5048,16 +4842,16 @@ something like:
 @table @code
 @item gnus-fetch-old-headers
 @vindex gnus-fetch-old-headers
-If non-@code{nil}, Gnus will attempt to build old threads by fetching
-more old headers---headers to articles marked as read.  If you
-would like to display as few summary lines as possible, but still
-connect as many loose threads as possible, you should set this variable
-to @code{some} or a number.  If you set it to a number, no more than
-that number of extra old headers will be fetched.  In either case,
-fetching old headers only works if the backend you are using carries
-overview files---this would normally be @code{nntp}, @code{nnspool} and
+If non-@code{nil}, gnus will attempt to build old threads by fetching
+more old headers---headers to articles marked as read.  If you would
+like to display as few summary lines as possible, but still connect as
+many loose threads as possible, you should set this variable to
+@code{some} or a number.  If you set it to a number, no more than that
+number of extra old headers will be fetched.  In either case, fetching
+old headers only works if the backend you are using carries overview
+files---this would normally be @code{nntp}, @code{nnspool} and
 @code{nnml}.  Also remember that if the root of the thread has been
-expired by the server, there's not much Gnus can do about that.
+expired by the server, there's not much gnus can do about that.
 
 This variable can also be set to @code{invisible}.  This won't have any
 visible effects, but is useful if you use the @kbd{A T} command a lot
@@ -5069,12 +4863,12 @@ Fetching old headers can be slow.  A low-rent similar effect can be
 gotten by setting this variable to @code{some}.  Gnus will then look at
 the complete @code{References} headers of all articles and try to string
 together articles that belong in the same thread.  This will leave
-@dfn{gaps} in the threading display where Gnus guesses that an article
+@dfn{gaps} in the threading display where gnus guesses that an article
 is missing from the thread.  (These gaps appear like normal summary
-lines.  If you select a gap, Gnus will try to fetch the article in
-question.)  If this variable is @code{t}, Gnus will display all these
+lines.  If you select a gap, gnus will try to fetch the article in
+question.)  If this variable is @code{t}, gnus will display all these
 ``gaps'' without regard for whether they are useful for completing the
-thread or not.  Finally, if this variable is @code{more}, Gnus won't cut
+thread or not.  Finally, if this variable is @code{more}, gnus won't cut
 off sparse leaf nodes that don't lead anywhere.  This variable is
 @code{nil} by default.
 
@@ -5131,7 +4925,10 @@ The default is 4.
 
 @item gnus-parse-headers-hook
 @vindex gnus-parse-headers-hook
-Hook run before parsing any headers.
+Hook run before parsing any headers.  The default value is
+@code{(gnus-set-summary-default-charset)}, which sets up local value of
+@code{default-mime-charset} in summary buffer based on variable
+@code{gnus-newsgroup-default-charset-alist}.
 
 @item gnus-alter-header-function
 @vindex gnus-alter-header-function
@@ -5298,10 +5095,7 @@ Matching}).
 @findex gnus-thread-sort-by-number
 @vindex gnus-thread-sort-functions
 If you are using a threaded summary display, you can sort the threads by
-setting @code{gnus-thread-sort-functions}, which can be either a single
-function, a list of functions, or a list containing functions and
-@code{(not some-function)} elements.
-
+setting @code{gnus-thread-sort-functions}, which is a list of functions.
 By default, sorting is done on article numbers.  Ready-made sorting
 predicate functions include @code{gnus-thread-sort-by-number},
 @code{gnus-thread-sort-by-author}, @code{gnus-thread-sort-by-subject},
@@ -5310,23 +5104,22 @@ predicate functions include @code{gnus-thread-sort-by-number},
 
 Each function takes two threads and returns non-@code{nil} if the first
 thread should be sorted before the other.  Note that sorting really is
-normally done by looking only at the roots of each thread.
-
-If you use more than one function, the primary sort key should be the
-last function in the list.  You should probably always include
+normally done by looking only at the roots of each thread.  If you use
+more than one function, the primary sort key should be the last function
+in the list.  You should probably always include
 @code{gnus-thread-sort-by-number} in the list of sorting
 functions---preferably first.  This will ensure that threads that are
 equal with respect to the other sort criteria will be displayed in
 ascending article order.
 
-If you would like to sort by reverse score, then by subject, and finally
-by number, you could do something like:
+If you would like to sort by score, then by subject, and finally by
+number, you could do something like:
 
 @lisp
 (setq gnus-thread-sort-functions
       '(gnus-thread-sort-by-number
         gnus-thread-sort-by-subject
-        (not gnus-thread-sort-by-total-score)))
+        gnus-thread-sort-by-total-score))
 @end lisp
 
 The threads that have highest score will be displayed first in the
@@ -5385,22 +5178,22 @@ say something like:
 If you read your news from an @sc{nntp} server that's far away, the
 network latencies may make reading articles a chore.  You have to wait
 for a while after pressing @kbd{n} to go to the next article before the
-article appears.  Why can't Gnus just go ahead and fetch the article
+article appears.  Why can't gnus just go ahead and fetch the article
 while you are reading the previous one?  Why not, indeed.
 
 First, some caveats.  There are some pitfalls to using asynchronous
-article fetching, especially the way Gnus does it.
+article fetching, especially the way gnus does it.
 
 Let's say you are reading article 1, which is short, and article 2 is
 quite long, and you are not interested in reading that.  Gnus does not
 know this, so it goes ahead and fetches article 2.  You decide to read
-article 3, but since Gnus is in the process of fetching article 2, the
+article 3, but since gnus is in the process of fetching article 2, the
 connection is blocked.
 
-To avoid these situations, Gnus will open two (count 'em two)
+To avoid these situations, gnus will open two (count 'em two)
 connections to the server.  Some people may think this isn't a very nice
 thing to do, but I don't see any real alternatives.  Setting up that
-extra connection takes some time, so Gnus startup will be slower.
+extra connection takes some time, so gnus startup will be slower.
 
 Gnus will fetch more articles than you will read.  This will mean that
 the link between your machine and the @sc{nntp} server will become more
@@ -5432,7 +5225,8 @@ pre-fetched.  The default is @code{gnus-async-read-p}, which returns
 @code{nil} on read articles.  The function is called with an article
 data structure as the only parameter.
 
-If, for instance, you wish to pre-fetch only unread articles shorter than 100 lines, you could say something like:
+If, for instance, you wish to pre-fetch only unread articles shorter
+than 100 lines, you could say something like:
 
 @lisp
 (defun my-async-short-unread-p (data)
@@ -5445,8 +5239,8 @@ If, for instance, you wish to pre-fetch only unread articles shorter than 100 li
 @end lisp
 
 These functions will be called many, many times, so they should
-preferably be short and sweet to avoid slowing down Gnus too much.
-It's probably a good idea to byte-compile things like this.
+preferably be short and sweet to avoid slowing down gnus too much.  It's
+probably a good idea to byte-compile things like this.
 
 @vindex gnus-prefetched-article-deletion-strategy
 Articles have to be removed from the asynch buffer sooner or later.  The
@@ -5525,7 +5319,7 @@ not then be downloaded by this command.
 It is likely that you do not want caching on all 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.
+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
@@ -5538,7 +5332,7 @@ variables, the group is not cached.
 @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
@@ -5597,17 +5391,17 @@ interested in persistent articles:
 
 If you have a slow connection, but the idea of using caching seems
 unappealing to you (and it is, really), you can help the situation some
-by switching on the @dfn{backlog}.  This is where Gnus will buffer
+by switching on the @dfn{backlog}.  This is where gnus will buffer
 already read articles so that it doesn't have to re-fetch articles
 you've already read.  This only helps if you are in the habit of
 re-selecting articles you've recently read, of course.  If you never do
-that, turning the backlog on will slow Gnus down a little bit, and
+that, turning the backlog on will slow gnus down a little bit, and
 increase memory usage some.
 
 @vindex gnus-keep-backlog
-If you set @code{gnus-keep-backlog} to a number @var{n}, Gnus will store
+If you set @code{gnus-keep-backlog} to a number @var{n}, gnus will store
 at most @var{n} old articles in a buffer for later re-fetching.  If this
-variable is non-@code{nil} and is not a number, Gnus will store
+variable is non-@code{nil} and is not a number, gnus will store
 @emph{all} read articles, which means that your Emacs will grow without
 bound before exploding and taking your machine down with you.  I put
 that in there just to keep y'all on your toes.
@@ -5626,7 +5420,7 @@ approach (uudecoding, unsharing) you should use @code{gnus-uu}
 (@pxref{Decoding Articles}).
 
 @vindex gnus-save-all-headers
-If @code{gnus-save-all-headers} is non-@code{nil}, Gnus will not delete
+If @code{gnus-save-all-headers} is non-@code{nil}, gnus will not delete
 unwanted headers before saving the article.
 
 @vindex gnus-saved-headers
@@ -5712,7 +5506,7 @@ files.
 
 @vindex gnus-default-article-saver
 You can customize the @code{gnus-default-article-saver} variable to make
-Gnus do what you want it to.  You can use any of the six ready-made
+gnus do what you want it to.  You can use any of the four ready-made
 functions below, or you can create your own.
 
 @table @code
@@ -5795,11 +5589,11 @@ File names like @file{~/News/alt.andrea-dworkin}.
 @end table
 
 @vindex gnus-split-methods
-You can have Gnus suggest where to save articles by plonking a regexp into
-the @code{gnus-split-methods} alist.  For instance, if you would like to
-save articles related to Gnus in the file @file{gnus-stuff}, and articles
-related to VM in @code{vm-stuff}, you could set this variable to something
-like:
+You can have gnus suggest where to save articles by plonking a regexp
+into the @code{gnus-split-methods} alist.  For instance, if you would
+like to save articles related to gnus in the file @file{gnus-stuff}, and
+articles related to VM in @code{vm-stuff}, you could set this variable
+to something like:
 
 @lisp
 (("^Subject:.*gnus\\|^Newsgroups:.*gnus" "gnus-stuff")
@@ -5824,9 +5618,8 @@ then be prompted for what you really want to use as a name, with file
 name completion over the results from applying this variable.
 
 This variable is @code{((gnus-article-archive-name))} by default, which
-means that Gnus will look at the articles it saves for an
-@code{Archive-name} line and use that as a suggestion for the file
-name.
+means that gnus will look at the articles it saves for an
+@code{Archive-name} line and use that as a suggestion for the file name.
 
 Here's an example function to clean up file names somewhat.  If you have
 lots of mail groups called things like
@@ -5905,7 +5698,7 @@ Gnus guesses what articles are in the series according to the following
 simplish rule: The subjects must be (nearly) identical, except for the
 last two numbers of the line.  (Spaces are largely ignored, however.)
 
-For example: If you choose a subject called @samp{cat.gif (2/3)}, Gnus
+For example: If you choose a subject called @samp{cat.gif (2/3)}, gnus
 will find all the articles that match the regexp @samp{^cat.gif
 ([0-9]+/[0-9]+).*$}.
 
@@ -5953,7 +5746,7 @@ entire newsgroup, you'd typically do @kbd{M P a}
 (@code{gnus-uu-decode-uu-and-save}).
 
 All this is very much different from how @code{gnus-uu} worked with
-@sc{gnus 4.1}, where you had explicit keystrokes for everything under
+@sc{GNUS 4.1}, where you had explicit keystrokes for everything under
 the sun.  This version of @code{gnus-uu} generally assumes that you mark
 articles in some way (@pxref{Setting Process Marks}) and then press
 @kbd{X u}.
@@ -6086,12 +5879,12 @@ for instance, @code{sox} to convert an @samp{.au} sound file, you could
 say something like:
 @lisp
 (setq gnus-uu-user-view-rules
-      (list '("\\\\.au$" "sox %s -t .aiff > /dev/audio")))
+      (list '(\"\\\\.au$\" \"sox %s -t .aiff > /dev/audio\")))
 @end lisp
 
 @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
@@ -6246,15 +6039,15 @@ Default is @code{t}.
 @cindex viewing files
 @cindex pseudo-articles
 
-After decoding, if the file is some sort of archive, Gnus will attempt
+After decoding, if the file is some sort of archive, gnus will attempt
 to unpack the archive and see if any of the files in the archive can be
 viewed.  For instance, if you have a gzipped tar file @file{pics.tar.gz}
-containing the files @file{pic1.jpg} and @file{pic2.gif}, Gnus will
+containing the files @file{pic1.jpg} and @file{pic2.gif}, gnus will
 uncompress and de-tar the main file, and then view the two pictures.
 This unpacking process is recursive, so if the archive contains archives
 of archives, it'll all be unpacked.
 
-Finally, Gnus will normally insert a @dfn{pseudo-article} for each
+Finally, gnus will normally insert a @dfn{pseudo-article} for each
 extracted file into the summary buffer.  If you go to these
 ``articles'', you will be prompted for a command to run (usually Gnus
 will make a suggestion), and then the command will be run.
@@ -6301,7 +6094,6 @@ these articles easier.
 * Article Buttons::         Click on URLs, Message-IDs, addresses and the like.
 * Article Date::            Grumble, UT!
 * Article Signature::       What is a signature?
-* Article Miscellania::     Various other stuff.
 @end menu
 
 
@@ -6310,7 +6102,7 @@ these articles easier.
 @cindex highlighting
 
 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
 
@@ -6322,6 +6114,11 @@ 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.
+
 @item W H h
 @kindex W H h (Summary)
 @findex gnus-article-highlight-headers
@@ -6361,7 +6158,7 @@ Maximum possible length for a citation prefix (default 20).
 @vindex gnus-cite-face-list
 List of faces used for highlighting citations (@pxref{Faces and Fonts}).
 When there are citations from multiple articles in the same message,
-Gnus will try to give each citation from each article its own face.
+gnus will try to give each citation from each article its own face.
 This should make it easier to see who wrote what.
 
 @item gnus-supercite-regexp
@@ -6406,7 +6203,7 @@ default.
 
 @end table
 
-@xref{Customizing Articles}, for how to highlight articles automatically.
+@xref{Customizing Articles} for how to highlight articles automatically.
 
 
 @node Article Fontisizing
@@ -6460,14 +6257,7 @@ say something like:
 (copy-face 'red 'gnus-emphasis-italic)
 @end lisp
 
-@vindex gnus-group-highlight-words-alist
-
-If you want to highlight arbitrary words, you can use the
-@code{gnus-group-highlight-words-alist} variable, which uses the same
-syntax as @code{gnus-emphasis-alist}.  The @code{highlight-words} group
-parameter (@pxref{Group Parameters}) can also be used.
-
-@xref{Customizing Articles}, for how to fontize articles automatically.
+@xref{Customizing Articles} for how to fontize articles automatically.
 
 
 @node Article Hiding
@@ -6484,7 +6274,7 @@ too much cruft in most articles.
 @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.
+headers, PGP, cited text and the signature.  
 
 @item W W h
 @kindex W W h (Summary)
@@ -6510,22 +6300,7 @@ Signature}.
 @vindex gnus-article-hide-pgp-hook
 Hide @sc{pgp} signatures (@code{gnus-article-hide-pgp}).  The
 @code{gnus-article-hide-pgp-hook} hook will be run after a @sc{pgp}
-signature has been hidden.  For example, to automatically verify
-articles that have signatures in them do:
-@lisp
-;;; Hide pgp cruft if any.
-
-(setq gnus-treat-strip-pgp t)
-
-;;; 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)
@@ -6533,19 +6308,6 @@ articles that have signatures in them do:
 Hide @sc{pem} (privacy enhanced messages) cruft
 (@code{gnus-article-hide-pem}).
 
-@item W W B
-@kindex W W B (Summary)
-@findex gnus-article-strip-banner
-Strip the banner specified by the @code{banner} group parameter
-(@code{gnus-article-strip-banner}).  This is mainly used to hide those
-annoying banners and/or signatures that some mailing lists and moderated
-groups adds to all the messages.  The way to use this function is to add
-the @code{banner} group parameter (@pxref{Group Parameters}) to the
-group you want banners stripped from.  The parameter either be a string,
-which will be interpreted as a regular expression matching text to be
-removed, or the symbol @code{signature}, meaning that the (last)
-signature should be removed.
-
 @item W W c
 @kindex W W c (Summary)
 @findex gnus-article-hide-citation
@@ -6605,7 +6367,7 @@ is hidden.
 Hide cited text in articles that aren't roots
 (@code{gnus-article-hide-citation-in-followups}).  This isn't very
 useful as an interactive command, but might be a handy function to stick
-have happen automatically (@pxref{Customizing Articles}).
+in @code{gnus-article-display-hook} (@pxref{Customizing Articles}).
 
 @end table
 
@@ -6616,7 +6378,7 @@ hidden.  If you give a positive prefix, they will always hide.
 Also @pxref{Article Highlighting} for further variables for
 citation customization.
 
-@xref{Customizing Articles}, for how to hide article elements
+@xref{Customizing Articles} for how to hide article elements
 automatically.
 
 
@@ -6638,8 +6400,8 @@ Cleaner, perhaps.
 @kindex W l (Summary)
 @findex gnus-summary-stop-page-breaking
 Remove page breaks from the current article
-(@code{gnus-summary-stop-page-breaking}).  @xref{Misc Article}, for page
-delimiters.
+(@code{gnus-summary-stop-page-breaking}).  @xref{Misc Article} for page
+delimiters. 
 
 @item W r
 @kindex W r (Summary)
@@ -6667,6 +6429,12 @@ Toggle whether to display all headers in the article buffer
 Toggle whether to display all headers in the article buffer permanently
 (@code{gnus-summary-verbose-header}).
 
+@item W m
+@kindex W m (Summary)
+@findex gnus-summary-toggle-mime
+Toggle whether to display the article as @sc{mime} message
+(@code{gnus-summary-toggle-mime}).
+
 @item W o
 @kindex W o (Summary)
 @findex gnus-article-treat-overstrike
@@ -6675,54 +6443,24 @@ Treat overstrike (@code{gnus-article-treat-overstrike}).
 @item W d
 @kindex W d (Summary)
 @findex gnus-article-treat-dumbquotes
-@vindex gnus-article-dumbquotes-map
-@cindex Smartquotes
-@cindex M******** sm*rtq**t*s
-@cindex Latin 1
-Treat M******** sm*rtq**t*s according to
-@code{gnus-article-dumbquotes-map}
-(@code{gnus-article-treat-dumbquotes}).  Note that this function guesses
-whether a character is a sm*rtq**t* or not, so it should only be used
-interactively.
+Treat M******** sm*rtq**t*s (@code{gnus-article-treat-dumbquotes}).
 
 @item W w
 @kindex W w (Summary)
 @findex gnus-article-fill-cited-article
-Do word wrap (@code{gnus-article-fill-cited-article}).
+Do word wrap (@code{gnus-article-fill-cited-article}).  If you use this
+function in @code{gnus-article-display-hook}, it should be run fairly
+late and certainly after any highlighting.
 
 You can give the command a numerical prefix to specify the width to use
 when filling.
 
-@item W q
-@kindex W q (Summary)
-@findex gnus-article-fill-long-lines
-Fill long lines (@code{gnus-article-fill-long-lines}).
-
-@item W C
-@kindex W C (Summary)
-@findex gnus-article-capitalize-sentencse
-Capitalize the first word in each sentence
-(@code{gnus-article-capitalize-sentences}).
-
 @item W c
 @kindex W c (Summary)
 @findex gnus-article-remove-cr
-Translate CRLF pairs (i. e., @samp{^M}s on the end of the lines) into LF
-(this takes care of DOS line endings), and then translate any remaining
-CRs into LF (this takes care of Mac line endings)
+Remove CR (i. e., @samp{^M}s on the end of the lines)
 (@code{gnus-article-remove-cr}).
 
-@item W q
-@kindex W q (Summary)
-@findex gnus-article-de-quoted-unreadable
-Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}).
-Quoted-Printable is one common @sc{mime} encoding employed when sending
-non-ASCII (i. e., 8-bit) articles.  It typically makes strings like
-@samp{déjà vu} look like @samp{d=E9j=E0 vu}, which doesn't look very
-readable to me.  Note that the this is usually done automatically by
-Gnus if the message in question has a @code{Content-Transfer-Encoding}
-header that says that this encoding has been done.
-
 @item W f
 @kindex W f (Summary)
 @cindex x-face
@@ -6755,7 +6493,7 @@ last.
 @kindex W b (Summary)
 @findex gnus-article-add-buttons
 Add clickable buttons to the article (@code{gnus-article-add-buttons}).
-@xref{Article Buttons}.
+@xref{Article Buttons}
 
 @item W B
 @kindex W B (Summary)
@@ -6763,12 +6501,6 @@ Add clickable buttons to the article (@code{gnus-article-add-buttons}).
 Add clickable buttons to the article headers
 (@code{gnus-article-add-buttons-to-head}).
 
-@item W W H
-@kindex W W H (Summary)
-@findex gnus-article-strip-headers-from-body
-Strip headers like the @code{X-No-Archive} header from the beginning of
-article bodies (@code{gnus-article-strip-headers-from-body}).
-
 @item W E l
 @kindex W E l (Summary)
 @findex gnus-article-strip-leading-blank-lines
@@ -6806,15 +6538,9 @@ Remove all blank lines
 Remove all white space from the beginning of all lines of the article
 body (@code{gnus-article-strip-leading-space}).
 
-@item W E e
-@kindex W E e (Summary)
-@findex gnus-article-strip-trailing-space
-Remove all white space from the end of all lines of the article
-body (@code{gnus-article-strip-trailing-space}).
-
 @end table
 
-@xref{Customizing Articles}, for how to wash articles automatically.
+@xref{Customizing Articles} for how to wash articles automatically.
 
 
 @node Article Buttons
@@ -6900,7 +6626,7 @@ Face used when the mouse cursor is over a button.
 
 @end table
 
-@xref{Customizing Articles}, for how to buttonize articles automatically.
+@xref{Customizing Articles} for how to buttonize articles automatically.
 
 
 @node Article Date
@@ -6947,20 +6673,8 @@ for a list of possible format specs.
 @findex gnus-start-date-timer
 @findex gnus-stop-date-timer
 Say how much time has elapsed between the article was posted and now
-(@code{gnus-article-date-lapsed}).  It looks something like:
-
-@example
-X-Sent: 9 years, 6 weeks, 4 days, 9 hours, 3 minutes, 28 seconds ago
-@end example
-
-The value of @code{gnus-article-date-lapsed-new-header} determines
-whether this header will just be added below the old Date one, or will
-replace it.
-
-An advantage of using Gnus to read mail is that it converts simple bugs
-into wonderful absurdities.
-
-If you want to have this line updated continually, you can put
+(@code{gnus-article-date-lapsed}).  If you want to have this line
+updated continually, you can put
 
 @lisp
 (gnus-start-date-timer)
@@ -6981,7 +6695,7 @@ that the article was posted in 1854.  Although something like that is
 
 @end table
 
-@xref{Customizing Articles}, for how to display the date in your
+@xref{Customizing Articles} for how to display the date in your
 preferred format automatically.
 
 
@@ -7016,7 +6730,7 @@ positives.
 
 @vindex gnus-signature-limit
 @code{gnus-signature-limit} provides a limit to what is considered a
-signature when displaying articles.
+signature.
 
 @enumerate
 @item
@@ -7047,138 +6761,6 @@ the regular expression @samp{^---*Forwarded article}, then it isn't a
 signature after all.
 
 
-@node Article Miscellania
-@subsection Article Miscellania
-
-@table @kbd
-@item A t
-@kindex A t (Summary)
-@findex gnus-article-babel
-Translate the article from one language to another
-(@code{gnus-article-babel}). 
-
-@end table
-
-
-@node MIME Commands
-@section @sc{mime} Commands
-@cindex MIME decoding
-
-@table @kbd
-@item X m
-@kindex X m (Summary)
-@findex gnus-summary-save-parts
-Save all parts matching a @sc{mime} type to a directory
-(@code{gnus-summary-save-parts}).  Understands the process/prefix
-convention (@pxref{Process/Prefix}).
-
-@item M-t
-@kindex M-t (Summary)
-@findex gnus-summary-display-buttonized
-Toggle the buttonized display of the article buffer
-(@code{gnus-summary-toggle-display-buttonized}).
-
-@item W M w
-@kindex W M w (Summary)
-Decode RFC2047-encoded words in the article headers
-(@code{gnus-article-decode-mime-words}).
-
-@item W M c
-@kindex W M c (Summary)
-Decode encoded article bodies as well as charsets
-(@code{gnus-article-decode-charset}).
-
-This command looks in the @code{Content-Type} header to determine the
-charset.  If there is no such header in the article, you can give it a
-prefix, which will prompt for the charset to decode as.  In regional
-groups where people post using some common encoding (but do not include
-MIME headers), you can set the @code{charset} group/topic parameter to
-the required charset (@pxref{Group Parameters}).
-
-@item W M v
-@kindex W M v (Summary)
-View all the @sc{mime} parts in the current article
-(@code{gnus-mime-view-all-parts}).
-
-@end table
-
-Relevant variables:
-
-@table @code
-@item gnus-ignored-mime-types
-@vindex gnus-ignored-mime-types
-This is a list of regexps.  @sc{mime} types that match a regexp from
-this list will be completely ignored by Gnus.  The default value is
-@code{nil}.
-
-To have all Vcards be ignored, you'd say something like this:
-
-@lisp
-(setq gnus-ignored-mime-types
-      '("text/x-vcard"))
-@end lisp
-
-@item gnus-unbuttonized-mime-types
-@vindex gnus-unbuttonized-mime-types
-This is a list of regexps.  @sc{mime} types that match a regexp from
-this list won't have @sc{mime} buttons inserted unless they aren't
-displayed.  The default value is @code{(".*/.*")}.
-
-@item gnus-article-mime-part-function
-@vindex gnus-article-mime-part-function
-For each @sc{mime} part, this function will be called with the @sc{mime}
-handle as the parameter.  The function is meant to be used to allow
-users to gather information from the article (e. g., add Vcard info to
-the bbdb database) or to do actions based on parts (e. g., automatically
-save all jpegs into some directory).
-
-Here's an example function the does the latter:
-
-@lisp
-(defun my-save-all-jpeg-parts (handle)
-  (when (equal (car (mm-handle-type handle)) "image/jpeg")
-    (with-temp-buffer
-      (insert (mm-get-part handle))
-      (write-region (point-min) (point-max)
-                    (read-file-name "Save jpeg to: ")))))
-(setq gnus-article-mime-part-function
-      'my-save-all-jpeg-parts)
-@end lisp
-
-@vindex gnus-mime-multipart-functions
-@item gnus-mime-multipart-functions
-Alist of @sc{mime} multipart types and functions to handle them.
-
-@end table
-
-
-@node Charsets
-@section Charsets
-@cindex charsets
-
-People use different charsets, and we have @sc{mime} to let us know what
-charsets they use.  Or rather, we wish we had.  Many people use
-newsreaders and mailers that do not understand or use @sc{mime}, and
-just send out messages without saying what character sets they use.  To
-help a bit with this, some local news hierarchies have policies that say
-what character set is the default.  For instance, the @samp{fj}
-hierarchy uses @code{iso-2022-jp-2}.
-
-@vindex gnus-group-charset-alist
-This knowledge is encoded in the @code{gnus-group-charset-alist}
-variable, which is an alist of regexps (to match group names) and
-default charsets to be used when reading these groups.
-
-In addition, some people do use soi-disant @sc{mime}-aware agents that
-aren't.  These blitely mark messages as being in @code{iso-8859-1} even
-if they really are in @code{koi-8}.  To help here, the
-@code{gnus-newsgroup-ignored-charsets} variable can be used.  The
-charsets that are listed here will be ignored.  The variable can be set
-on a group-by-group basis using the group parameters (@pxref{Group
-Parameters}).  The default value is @code{(unknown-8bit)}, which is
-something some agents insist on having in there.
-
-
 @node Article Commands
 @section Article Commands
 
@@ -7231,11 +6813,6 @@ Sort by date (@code{gnus-summary-sort-by-date}).
 @findex gnus-summary-sort-by-lines
 Sort by lines (@code{gnus-summary-sort-by-lines}).
 
-@item C-c C-s C-c
-@kindex C-c C-s C-c (Summary)
-@findex gnus-summary-sort-by-chars
-Sort by article length (@code{gnus-summary-sort-by-chars}).
-
 @item C-c C-s C-i
 @kindex C-c C-s C-i (Summary)
 @findex gnus-summary-sort-by-score
@@ -7270,9 +6847,9 @@ summary buffer, point will just move to this article.
 
 If given a positive numerical prefix, fetch that many articles back into
 the ancestry.  If given a negative numerical prefix, fetch just that
-ancestor.  So if you say @kbd{3 ^}, Gnus will fetch the parent, the
+ancestor.  So if you say @kbd{3 ^}, gnus will fetch the parent, the
 grandparent and the grandgrandparent of the current article.  If you say
-@kbd{-3 ^}, Gnus will only fetch the grandgrandparent of the current
+@kbd{-3 ^}, gnus will only fetch the grandgrandparent of the current
 article.
 
 @item A R (Summary)
@@ -7336,7 +6913,7 @@ consuming.)  @code{nnmh} does not support this at all.
 @section Alternative Approaches
 
 Different people like to read news using different methods.  This being
-Gnus, we offer a small selection of minor modes for the summary buffers.
+gnus, we offer a small selection of minor modes for the summary buffers.
 
 @menu
 * Pick and Read::               First mark articles and then read them.
@@ -7386,7 +6963,7 @@ at the end of the buffer, start reading the picked articles.
 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
+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.
 
@@ -7455,7 +7032,7 @@ command, when you have turned on this mode
 @cindex trees
 
 @vindex gnus-use-trees
-If you don't like the normal Gnus summary display, you might try setting
+If you don't like the normal gnus summary display, you might try setting
 @code{gnus-use-trees} to @code{t}.  This will create (by default) an
 additional @dfn{tree buffer}.  You can execute all summary mode commands
 in the tree buffer.
@@ -7524,8 +7101,8 @@ nodes to their children.  The default is @code{(?- ?\\ ?|)}.
 
 @item gnus-tree-minimize-window
 @vindex gnus-tree-minimize-window
-If this variable is non-@code{nil}, Gnus will try to keep the tree
-buffer as small as possible to allow more room for the other Gnus
+If this variable is non-@code{nil}, gnus will try to keep the tree
+buffer as small as possible to allow more room for the other gnus
 windows.  If this variable is a number, the tree buffer will never be
 higher than that number.  The default is @code{t}.  Note that if you
 have several windows displayed side-by-side in a frame and the tree
@@ -7671,7 +7248,7 @@ which means that the current group select method will be used instead.
 Edit the current article (@code{gnus-summary-edit-article}).  To finish
 editing and make the changes permanent, type @kbd{C-c C-c}
 (@kbd{gnus-summary-edit-article-done}).  If you give a prefix to the
-@kbd{C-c C-c} command, Gnus won't re-highlight the article.
+@kbd{C-c C-c} command, gnus won't re-highlight the article.
 
 @item B q
 @kindex B q (Summary)
@@ -7704,7 +7281,7 @@ just not have arrived yet.
 
 @vindex gnus-move-split-methods
 @cindex moving articles
-If you move (or copy) articles regularly, you might wish to have Gnus
+If you move (or copy) articles regularly, you might wish to have gnus
 suggest where to put the articles.  @code{gnus-move-split-methods} is a
 variable that uses the same syntax as @code{gnus-split-methods}
 (@pxref{Saving Articles}).  You may customize that variable to create
@@ -7747,18 +7324,13 @@ It is called after the summary buffer has been generated.  You might use
 it to, for instance, highlight lines or modify the look of the buffer in
 some other ungodly manner.  I don't care.
 
-@vindex gnus-summary-prepared-hook
-@item gnus-summary-prepared-hook
-A hook called as the very last thing after the summary buffer has been
-generated.
-
 @vindex gnus-summary-ignore-duplicates
 @item gnus-summary-ignore-duplicates
-When Gnus discovers two articles that have the same @code{Message-ID},
+When gnus discovers two articles that have the same @code{Message-ID},
 it has to do something drastic.  No articles are allowed to have the
 same @code{Message-ID}, but this may happen when reading mail from some
 sources.  Gnus allows you to customize what happens with this variable.
-If it is @code{nil} (which is the default), Gnus will rename the
+If it is @code{nil} (which is the default), gnus will rename the
 @code{Message-ID} (for display purposes only) and display the article as
 any other article.  If this variable is @code{t}, it won't display the
 article---it'll be as if it never existed.
@@ -7799,7 +7371,7 @@ keystrokes (@code{gnus-summary-describe-briefly}).
 @item H i
 @kindex H i (Summary)
 @findex gnus-info-find-node
-Go to the Gnus info node (@code{gnus-info-find-node}).
+Go to the gnus info node (@code{gnus-info-find-node}).
 @end table
 
 
@@ -7859,10 +7431,8 @@ Pull all cached articles (for the current group) into the summary buffer
 
 @table @kbd
 
-@item A D
-@itemx C-d
+@item C-d
 @kindex C-d (Summary)
-@kindex A D (Summary)
 @findex gnus-summary-enter-digest-group
 If the current article is a collection of other articles (for instance,
 a digest), you might use this command to enter a group based on the that
@@ -7904,12 +7474,6 @@ If given a prefix, force an @code{article} window configuration.
 Edit the group parameters (@pxref{Group Parameters}) of the current
 group (@code{gnus-summary-edit-parameters}).
 
-@item M-C-g
-@kindex M-C-g (Summary)
-@findex gnus-summary-customize-parameters
-Customize the group parameters (@pxref{Group Parameters}) of the current
-group (@code{gnus-summary-customize-parameters}).
-
 @end table
 
 
@@ -8015,7 +7579,7 @@ group.
 @vindex gnus-kill-summary-on-exit
 If you're in the habit of exiting groups, and then changing your mind
 about it, you might set @code{gnus-kill-summary-on-exit} to @code{nil}.
-If you do that, Gnus won't kill the summary buffer when you exit it.
+If you do that, gnus won't kill the summary buffer when you exit it.
 (Quelle surprise!)  Instead it will change the name of the buffer to
 something like @samp{*Dead Summary ... *} and install a minor mode
 called @code{gnus-dead-summary-mode}.  Now, if you switch back to this
@@ -8092,11 +7656,10 @@ For an alternative approach, @pxref{Duplicate Suppression}.
 @node Duplicate Suppression
 @section Duplicate Suppression
 
-By default, Gnus tries to make sure that you don't have to read the same
+By default, gnus tries to make sure that you don't have to read the same
 article more than once by utilizing the crossposting mechanism
 (@pxref{Crosspost Handling}).  However, that simple and efficient
-approach may not work satisfactory for some users for various
-reasons.
+approach may not work satisfactory for some users for various reasons.
 
 @enumerate
 @item
@@ -8143,7 +7706,7 @@ If non-@code{nil}, suppress duplicates.
 @vindex gnus-save-duplicate-list
 If non-@code{nil}, save the list of duplicates to a file.  This will
 make startup and shutdown take longer, so the default is @code{nil}.
-However, this means that only duplicate articles read in a single Gnus
+However, this means that only duplicate articles read in a single gnus
 session are suppressed.
 
 @item gnus-duplicate-list-length
@@ -8157,11 +7720,11 @@ The name of the file to store the duplicate suppression list in.  The
 default is @file{~/News/suppression}.
 @end table
 
-If you have a tendency to stop and start Gnus often, setting
+If you have a tendency to stop and start gnus often, setting
 @code{gnus-save-duplicate-list} to @code{t} is probably a good idea.  If
-you leave Gnus running for weeks on end, you may have it @code{nil}.  On
+you leave gnus running for weeks on end, you may have it @code{nil}.  On
 the other hand, saving the list makes startup and shutdown much slower,
-so that means that if you stop and start Gnus often, you should set
+so that means that if you stop and start gnus often, you should set
 @code{gnus-save-duplicate-list} to @code{nil}.  Uhm.  I'll leave this up
 to you to figure out, I think.
 
@@ -8172,11 +7735,11 @@ to you to figure out, I think.
 
 The articles are displayed in the article buffer, of which there is only
 one.  All the summary buffers share the same article buffer unless you
-tell Gnus otherwise.
+tell gnus otherwise.
 
 @menu
 * Hiding Headers::        Deciding what headers should be displayed.
-* Using MIME::            Pushing articles through @sc{mime} before reading them.
+* Using MIME::            Pushing to mime articles as @sc{mime} messages.
 * Customizing Articles::  Tailoring the look of the articles.
 * Article Keymap::        Keystrokes available in the article buffer.
 * Misc Article::          Other stuff.
@@ -8228,8 +7791,8 @@ variable is set (and @code{gnus-visible-headers} is @code{nil}), it
 should be a regular expression that matches all lines that you want to
 hide.  All lines that do not match this variable will remain visible.
 
-For instance, if you just want to get rid of the @code{References} line
-and the @code{Xref} line, you might say:
+For instance, if you just want to get rid of the @code{References} field
+and the @code{Xref} field, you might say:
 
 @lisp
 (setq gnus-ignored-headers "^References:\\|^Xref:")
@@ -8257,16 +7820,18 @@ and then the subject, you might say something like:
 @end lisp
 
 Any headers that are to remain visible, but are not listed in this
-variable, will be displayed in random order after all the headers listed in this variable.
+variable, will be displayed in random order after all the headers listed
+in this variable.
 
 @findex gnus-article-hide-boring-headers
+@vindex gnus-article-display-hook
 @vindex gnus-boring-article-headers
-You can hide further boring headers by setting
-@code{gnus-treat-hide-boring-header} to @code{head}.  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.
+You can hide further boring headers by entering
+@code{gnus-article-hide-boring-headers} into
+@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.
 
 These conditions are:
 @table @code
@@ -8314,170 +7879,70 @@ while all newsreaders die of fear.
 of the characters, and it also makes it possible to embed pictures and
 other naughty stuff in innocent-looking articles.
 
-@vindex gnus-display-mime-function
-@findex gnus-display-mime
-Gnus pushes @sc{mime} articles through @code{gnus-display-mime-function}
-to display the @sc{mime} parts.  This is @code{gnus-display-mime} by
-default, which creates a bundle of clickable buttons that can be used to
-display, save and manipulate the @sc{mime} objects.
-
-The following commands are available when you have placed point over a
-@sc{mime} button:
-
-@table @kbd
-@findex gnus-article-press-button
-@item RET (Article)
-@itemx BUTTON-2 (Article)
-Toggle displaying of the @sc{mime} object
-(@code{gnus-article-press-button}).
-
-@findex gnus-mime-view-part
-@item M-RET (Article)
-@itemx v (Article)
-Prompt for a method, and then view the @sc{mime} object using this
-method (@code{gnus-mime-view-part}).
-
-@findex gnus-mime-save-part
-@item o (Article)
-Prompt for a file name, and then save the @sc{mime} object
-(@code{gnus-mime-save-part}).
-
-@findex gnus-mime-copy-part
-@item c (Article)
-Copy the @sc{mime} object to a fresh buffer and display this buffer
-(@code{gnus-mime-copy-part}).
-
-@findex gnus-mime-pipe-part
-@item | (Article)
-Output the @sc{mime} object to a process (@code{gnus-mime-pipe-part}).
-@end table
-
-Gnus will display some @sc{mime} objects automatically.  The way Gnus
-determines which parts to do this with is described in the Emacs MIME
-manual.
-
-It might be best to just use the toggling functions from the article
-buffer to avoid getting nasty surprises.  (For instance, you enter the
-group @samp{alt.sing-a-long} and, before you know it, @sc{mime} has
-decoded the sound file in the article and some horrible sing-a-long song
-comes screaming out your speakers, and you can't find the volume button,
-because there isn't one, and people are starting to look at you, and you
-try to stop the program, but you can't, and you can't find the program
-to control the volume, and everybody else in the room suddenly decides
-to look at you disdainfully, and you'll feel rather stupid.)
+@vindex gnus-show-mime
+@vindex gnus-article-display-method-for-mime
+@vindex gnus-strict-mime
+@findex gnus-article-display-mime-message
+Gnus handles @sc{mime} by pushing the articles through
+@code{gnus-article-display-method-for-mime}, which is
+@code{gnus-article-display-mime-message} by default.  This function
+calls the SEMI MIME-View program to actually do the work.  For more
+information on SEMI MIME-View, see its manual page (however it is not
+existed yet, sorry).
+
+Set @code{gnus-show-mime} to @code{t} if you want to use
+@sc{mime} all the time.  However, if @code{gnus-strict-mime} is
+non-@code{nil}, the @sc{mime} method will only be used if there are
+@sc{mime} headers in the article.  If you have @code{gnus-show-mime}
+set, then you'll see some unfortunate display glitches in the article
+buffer.  These can't be avoided.
+
+In GNUS or Gnus, it might be best to just use the toggling functions
+from the summary buffer to avoid getting nasty surprises. (For instance,
+you enter the group @samp{alt.sing-a-long} and, before you know it,
+@sc{mime} has decoded the sound file in the article and some horrible
+sing-a-long song comes screaming out your speakers, and you can't find
+the volume button, because there isn't one, and people are starting to
+look at you, and you try to stop the program, but you can't, and you
+can't find the program to control the volume, and everybody else in the
+room suddenly decides to look at you disdainfully, and you'll feel
+rather stupid.)
 
 Any similarity to real events and people is purely coincidental.  Ahem.
 
-Also see @pxref{MIME Commands}.
+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
 @cindex article customization
 
-A slew of functions for customizing how the articles are to look like
-exist.  You can call these functions interactively, or you can have them
-called automatically when you select the articles.
-
-To have them called automatically, you should set the corresponding
-``treatment'' variable.  For instance, to have headers hidden, you'd set
-@code{gnus-treat-hide-headers}.  Below is a list of variables that can
-be set, but first we discuss the values these variables can have.
-
-@enumerate
-@item
-@code{nil}: Don't do this treatment.
-
-@item
-@code{t}: Do this treatment on all body parts.
-
-@item
-@code{head}: Do the treatment on the headers.
-
-@item
-@code{last}: Do this treatment on the last part.
-
-@item
-An integer: Do this treatment on all body parts that have a length less
-than this number.
-
-@item
-A list of strings: Do this treatment on all body parts that are in
-articles that are read in groups that have names that match one of the
-regexps in the list.
-
-@item
-A list where the first element is not a string:
-
-The list is evaluated recursively.  The first element of the list is a
-predicate.  The following predicates are recognized: @code{or},
-@code{and}, @code{not} and @code{typep}.  Here's an example:
+@vindex gnus-article-display-hook
+The @code{gnus-article-display-hook} is called after the article has
+been inserted into the article buffer.  It is meant to handle all
+treatment of the article before it is displayed.
 
-@lisp
-(or last
-    (typep "text/x-vcard"))
-@end lisp
-
-@end enumerate
-
-You may have noticed that the word @dfn{part} is used here.  This refers
-to the fact that some messages are @sc{mime} multipart articles that may
-be divided into several parts.  Articles that are not multiparts are
-considered to contain just a single part.
-
-@vindex gnus-article-treat-types
-Are the treatments applied to all sorts of multipart parts?  Yes, if you
-want to, but by default, only @samp{text/plain} parts are given the
-treatment.  This is controlled by the @code{gnus-article-treat-types}
-variable, which is a list of regular expressions that are matched to the
-type of the part.  This variable is ignored if the value of the
-controlling variable is a predicate list, as described above.
-
-The following treatment options are available.  The easiest way to
-customize this is to examine the @code{gnus-article-treat} customization
-group.
-
-@table @code
-@item gnus-treat-highlight-signature
-@item gnus-treat-buttonize
-@item gnus-treat-buttonize-head
-@item gnus-treat-emphasize
-@item gnus-treat-fill-article
-@item gnus-treat-strip-cr
-@item gnus-treat-hide-headers
-@item gnus-treat-hide-boring-headers
-@item gnus-treat-hide-signature
-@item gnus-treat-hide-citation
-@item gnus-treat-strip-pgp
-@item gnus-treat-strip-pem
-@item gnus-treat-highlight-headers
-@item gnus-treat-highlight-citation
-@item gnus-treat-highlight-signature
-@item gnus-treat-date-ut
-@item gnus-treat-date-local
-@item gnus-treat-date-lapsed
-@item gnus-treat-date-original
-@item gnus-treat-strip-headers-in-body
-@item gnus-treat-strip-trailing-blank-lines
-@item gnus-treat-strip-leading-blank-lines
-@item gnus-treat-strip-multiple-blank-lines
-@item gnus-treat-overstrike
-@item gnus-treat-display-xface
-@item gnus-treat-display-smileys
-@item gnus-treat-display-picons
-@item gnus-treat-capitalize-sentences
-@item gnus-treat-fill-long-lines
-@item gnus-treat-play-sounds
-@item gnus-treat-translate
-@end table
-
-@vindex gnus-part-display-hook
-You can, of course, write your own functions to be called from
-@code{gnus-part-display-hook}.  The functions are called narrowed to the
-part, and you can do anything you like, pretty much.  There is no
-information that you have to keep in the buffer---you can change
-everything.  However, you shouldn't delete any headers.  Instead make
-them invisible if you want to make them go away.
+@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
+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
+Date}.  Note that the order of functions in this hook might affect
+things, so you may have to fiddle a bit to get the desired results.
+
+You can, of course, write your own functions.  The functions are called
+from the article buffer, and you can do anything you like, pretty much.
+There is no information that you have to keep in the buffer---you can
+change everything.  However, you shouldn't delete any headers.  Instead
+make them invisible if you want to make them go away.
 
 
 @node Article Keymap
@@ -8553,12 +8018,6 @@ If non-@code{nil}, use the same article buffer for all the groups.
 (This is the default.)  If @code{nil}, each group will have its own
 article buffer.
 
-@vindex gnus-article-decode-hook
-@item gnus-article-decode-hook
-@cindex MIME
-Hook used to decode @sc{mime} articles.  The default value is
-@code{(article-decode-charset article-decode-encoded-words)}
-
 @vindex gnus-article-prepare-hook
 @item gnus-article-prepare-hook
 This hook is called right after the article has been inserted into the
@@ -8566,6 +8025,12 @@ article buffer.  It is mainly intended for functions that do something
 depending on the contents; it should probably not be used for changing
 the contents of the article buffer.
 
+@vindex gnus-article-display-hook
+@item gnus-article-display-hook
+This hook is called as the last thing when displaying an article, and is
+intended for modifying the contents of the buffer, doing highlights,
+hiding headers, and the like.
+
 @item gnus-article-mode-hook
 @vindex gnus-article-mode-hook
 Hook called in article mode buffers.
@@ -8587,8 +8052,6 @@ extension:
 The @dfn{wash status} of the article.  This is a short string with one
 character for each possible article wash operation that may have been
 performed.
-@item m
-The number of @sc{mime} parts in the article.
 @end table
 
 @vindex gnus-break-pages
@@ -8622,14 +8085,14 @@ where you can edit the article all you like, before you send the article
 by pressing @kbd{C-c C-c}.  @xref{Top, , Top, message, The Message
 Manual}.  If you are in a foreign news group, and you wish to post the
 article using the foreign server, you can give a prefix to @kbd{C-c C-c}
-to make Gnus try to post using the foreign server.
+to make gnus try to post using the foreign server.
 
 @menu
 * Mail::                 Mailing and replying.
 * Post::                 Posting and following up.
 * Posting Server::       What server should you post via?
 * Mail and Post::        Mailing and posting at the same time.
-* Archived Messages::    Where Gnus stores the messages you've sent.
+* Archived Messages::    Where gnus stores the messages you've sent.
 * Posting Styles::       An easier way to specify who you are.
 * Drafts::               Postponing messages and rejected messages.
 * Rejected Articles::    What happens if the server doesn't like your article?
@@ -8672,7 +8135,7 @@ user whether to re-send the mail.  (This is primarily useful when
 dealing with @sc{soup} packets and the like where one is apt to send the
 same packet multiple times.)  This variable says what the name of this
 history file is.  It is @file{~/News/Sent-Message-IDs} by default.  Set
-this variable to @code{nil} if you don't want Gnus to keep a history
+this variable to @code{nil} if you don't want gnus to keep a history
 file.
 
 @item gnus-sent-message-ids-length
@@ -8693,7 +8156,7 @@ Thank you for asking.  I hate you.
 
 @vindex gnus-post-method
 
-It can be quite complicated.  Normally, Gnus will use the same native
+It can be quite complicated.  Normally, gnus will use the same native
 server.  However.  If your native server doesn't allow posting, just
 reading, you probably want to use some other server to post your
 (extremely intelligent and fabulously interesting) articles.  You can
@@ -8709,16 +8172,16 @@ can use a non-zero prefix to the @kbd{C-c C-c} command to force using
 the ``current'' server for posting.
 
 If you give a zero prefix (i.e., @kbd{C-u 0 C-c C-c}) to that command,
-Gnus will prompt you for what method to use for posting.
+gnus will prompt you for what method to use for posting.
 
 You can also set @code{gnus-post-method} to a list of select methods.
-If that's the case, Gnus will always prompt you for what method to use
+If that's the case, gnus will always prompt you for what method to use
 for posting.
 
 Finally, if you want to always post using the same select method as
 you're reading from (which might be convenient if you're reading lots of
 groups from different private servers), you can set this variable to
-@code{current}.
+@code{current}. 
 
 
 @node Mail and Post
@@ -8767,7 +8230,7 @@ store the messages.  If you want to disable this completely, the
 is the default.
 
 @vindex gnus-message-archive-method
-@code{gnus-message-archive-method} says what virtual server Gnus is to
+@code{gnus-message-archive-method} says what virtual server gnus is to
 use to store sent messages.  The default is:
 
 @lisp
@@ -8856,7 +8319,7 @@ Now, when you send a message off, it will be stored in the appropriate
 group.  (If you want to disable storing for just one particular message,
 you can just remove the @code{Gcc} header that has been inserted.)  The
 archive group will appear in the group buffer the next time you start
-Gnus, or the next time you press @kbd{F} in the group buffer.  You can
+gnus, or the next time you press @kbd{F} in the group buffer.  You can
 enter it and read the articles in it just like you'd read any other
 group.  If the group gets really big and annoying, you can simply rename
 if (using @kbd{G r} in the group buffer) to something
@@ -8933,26 +8396,24 @@ 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
+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 with
-zero arguments (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).  The functions and sexps are called/@code{eval}ed in the
-message buffer that is being set up.  The headers of the current article
-are available through the @code{message-reply-headers} variable.
+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 @code{message-news-p} and @code{message-mail-p} functions.
+of the two dynamically bound variables @code{message-this-is-news} and
+@code{message-this-is-mail}.
 
-@findex message-mail-p
-@findex message-news-p
+@vindex message-this-is-mail
+@vindex message-this-is-news
 
 So here's a new example:
 
@@ -8967,9 +8428,9 @@ So here's a new example:
          (signature my-funny-signature-randomizer))
         ((equal (system-name) "gnarly")
          (signature my-quote-randomizer))
-        ((message-news-p)
+        (message-this-is-news
          (signature my-news-signature))
-        ((posting-from-work-p)
+        (posting-from-work-p
          (signature-file "~/.work-signature")
          (address "user@@bar.foo")
          (body "You are fired.\n\nSincerely, your boss.")
@@ -8990,7 +8451,7 @@ the message you are writing so that you can continue editing it some
 other day, and send it when you feel its finished.
 
 Well, don't worry about it.  Whenever you start composing a message of
-some sort using the Gnus mail and post commands, the buffer you get will
+some sort using the gnus mail and post commands, the buffer you get will
 automatically associate to an article in a special @dfn{draft} group.
 If you save the buffer the normal way (@kbd{C-x C-s}, for instance), the
 article will be saved there.  (Auto-save files also go to the draft
@@ -9060,10 +8521,10 @@ doesn't like your face.  Perhaps it just feels miserable.  Perhaps
 @emph{there be demons}.  Perhaps you have included too much cited text.
 Perhaps the disk is full.  Perhaps the server is down.
 
-These situations are, of course, totally beyond the control of Gnus.
+These situations are, of course, totally beyond the control of gnus.
 (Gnus, of course, loves the way you look, always feels great, has angels
 fluttering around inside of it, doesn't care about how much cited text
-you include, never runs full and never goes down.)  So Gnus saves these
+you include, never runs full and never goes down.)  So gnus saves these
 articles until some later time when the server feels better.
 
 The rejected articles will automatically be put in a special draft group
@@ -9907,12 +9368,11 @@ Reading mail with a newsreader---isn't that just plain WeIrD? But of
 course.
 
 @menu
-* Mail in a Newsreader::         Important introductory notes.  
 * Getting Started Reading Mail:: A simple cookbook example.
 * Splitting Mail::               How to create mail groups.
-* Mail Sources::                 How to tell Gnus where to get mail from.
 * Mail Backend Variables::       Variables for customizing mail handling.
 * Fancy Mail Splitting::         Gnus can do hairy splitting of incoming mail.
+* Mail and Procmail::            Reading mail groups that procmail create.
 * Incorporating Old Mail::       What about the old mail you have?
 * Expiring Mail::                Getting rid of unwanted mail.
 * Washing Mail::                 Removing gruft from the mail you get.
@@ -9922,71 +9382,6 @@ course.
 @end menu
 
 
-@node Mail in a Newsreader
-@subsection Mail in a Newsreader
-
-If you are used to traditional mail readers, but have decided to switch 
-to reading mail with Gnus, you may find yourself experiencing something
-of a culture shock.
-
-Gnus does not behave like traditional mail readers.  If you want to make 
-it behave that way, you can, but it's an uphill battle.
-
-Gnus, by default, handles all its groups using the same approach.  This
-approach is very newsreaderly---you enter a group, see the new/unread
-messages, and when you read the messages, they get marked as read, and
-you don't see them any more.  (Unless you explicitly ask for them.)
-
-In particular, you do not do anything explicitly to delete messages.
-
-Does this mean that all the messages that have been marked as read are
-deleted?  How awful!
-
-But, no, it means that old messages are @dfn{expired} according to some
-scheme or other.  For news messages, the expire process is controlled by 
-the news administrator; for mail, the expire process is controlled by
-you.  The expire process for mail is covered in depth in @pxref{Expiring
-Mail}.
-
-What many Gnus users find, after using it a while for both news and
-mail, is that the transport mechanism has very little to do with how
-they want to treat a message.
-
-Many people subscribe to several mailing lists.  These are transported
-via SMTP, and are therefore mail.  But we might go for weeks without
-answering, or even reading these messages very carefully. We may not
-need to save them because if we should need to read one again, they are
-archived somewhere else.
-
-Some people have local news groups which have only a handful of readers.
-These are transported via NNTP, and are therefore news.  But we may need
-to read and answer a large fraction of the messages very carefully in
-order to do our work.  And there may not be an archive, so we may need
-to save the interesting messages the same way we would personal mail.
-
-The important distinction turns out to be not the transport mechanism,
-but other factors such as how interested we are in the subject matter,
-or how easy it is to retrieve the message if we need to read it again.
-
-Gnus provides many options for sorting mail into ``groups'' which behave
-like newsgroups, and for treating each group (whether mail or news)
-differently.
-
-Some users never get comfortable using the Gnus (ahem) paradigm and wish
-that Gnus should grow up and be a male, er, mail reader.  It is possible
-to whip Gnus into a more mailreaderly being, but, as said before, it's
-not easy.  People who prefer proper mail readers should try @sc{vm}
-instead, which is an excellent, and proper, mail reader.
-
-I don't mean to scare anybody off, but I want to make it clear that you
-may be required to learn a new way of thinking about messages.  After
-you've been subjected to The Gnus Way, you will come to love it.  I can
-guarantee it.  (At least the guy who sold me the Emacs Subliminal
-Brain-Washing Functions that I've put into Gnus did guarantee it.  You
-Will Be Assimilated.  You Love Gnus.  You Love The Gnus Mail Way.
-You Do.)
-
-
 @node Getting Started Reading Mail
 @subsection Getting Started Reading Mail
 
@@ -10052,7 +9447,7 @@ contain @samp{\\1} forms, like the ones used by @code{replace-match} to
 insert sub-expressions from the matched text.  For instance:
 
 @lisp
-("list.\\1" "From:.* \\(.*\\)-list@@majordomo.com")
+("list.\\1" "From:.*\\(.*\\)-list@@majordomo.com")
 @end lisp
 
 The second element can also be a function.  In that case, it will be
@@ -10109,288 +9504,44 @@ you really should be out collecting empty bottles to save up for next
 month's rent money.
 
 
-@node Mail Sources
-@subsection Mail Sources
-
-Mail can be gotten from many different sources---the mail spool, from a
-POP mail server, or from a procmail directory, for instance.
-
-@menu
-* Mail Source Specifiers::       How to specify what a mail source is.
-* Mail Source Customization::    Some variables that influence things.
-* Fetching Mail::                Using the mail source specifiers.
-@end menu
-
-
-@node Mail Source Specifiers
-@subsubsection Mail Source Specifiers
-@cindex POP
-@cindex mail server
-@cindex procmail
-@cindex mail spool
-@cindex mail source
-
-You tell Gnus how to fetch mail by setting @code{mail-sources}
-(@pxref{Fetching Mail}) to a @dfn{mail source specifier}.
-
-Here's an example:
-
-@lisp
-(pop :server "pop3.mailserver.com" :user "myname")
-@end lisp
-
-As can be observed, a mail source specifier is a list where the first
-element is a @dfn{mail source type}, followed by an arbitrary number of
-@dfn{keywords}.  Keywords that are not explicitly specified are given
-default values.
-
-The following mail source types are available:
-
-@table @code
-@item file
-Get mail from a single file; typically from the mail spool.
-
-Keywords:
-
-@table @code
-@item :path
-The path of the file.  Defaults to the value of the @code{MAIL}
-environment variable or @file{/usr/mail/spool/user-name}.
-@end table
-
-An example file mail source:
-
-@lisp
-(file :path "/usr/spool/mail/user-name")
-@end lisp
-
-Or using the default path:
-
-@lisp
-(file)
-@end lisp
-
-@item directory
-Get mail from several files in a directory.  This is typically used when
-you have procmail split the incoming mail into several files.
-
-Keywords:
-
-@table @code
-@item :path
-The path of the directory where the files are.  There is no default
-value.
-
-@item :suffix
-Only files ending with this suffix are used.  The default is
-@samp{.spool}.
-
-@item :predicate
-Only files that have this predicate return non-@code{nil} are returned.
-The default is @code{identity}.  This is used as an additional
-filter---only files that have the right suffix @emph{and} satisfy this
-predicate are considered.
-
-@item :prescript
-@itemx :postscript
-Script run before/after fetching mail.
-
-@end table
-
-An example directory mail source:
-
-@lisp
-(directory :path "/home/user-name/procmail-dir/"
-           :suffix ".prcml")
-@end lisp
-
-@item pop
-Get mail from a POP server.
-
-Keywords:
-
-@table @code
-@item :server
-The name of the POP server.  The default is taken from the
-@code{MAILHOST} environment variable.
-
-@item :port
-The port number of the POP server.  The default is @samp{pop3}.
-
-@item :user
-The user name to give to the POP server.  The default is the login
-name.
-
-@item :password
-The password to give to the POP server.  If not specified, the user is
-prompted.
-
-@item :program
-The program to use to fetch mail from the POP server.  This is should be
-a @code{format}-like string.  Here's an example:
-
-@example
-fetchmail %u@@%s -P %p %t
-@end example
-
-The valid format specifier characters are:
-
-@table @samp
-@item t
-The name of the file the mail is to be moved to.  This must always be
-included in this string.
-
-@item s
-The name of the server.
-
-@item P
-The port number of the server.
-
-@item u
-The user name to use.
-
-@item p
-The password to use.
-@end table
-
-The values used for these specs are taken from the values you give the
-corresponding keywords.
-
-@item :prescript
-A script to be run before fetching the mail.  The syntax is the same as
-the @code{:program} keyword.  This can also be a function to be run.
-
-@item :postscript
-A script to be run after fetching the mail.  The syntax is the same as
-the @code{:program} keyword.  This can also be a function to be run.
-
-@item :function
-The function to use to fetch mail from the POP server.  The function is
-called with one parameter---the name of the file where the mail should
-be moved to.
-
-@item :authentication
-This can be either the symbol @code{password} or the symbol @code{apop}
-and says what authentication scheme to use.  The default is
-@code{password}.
-
-@end table
-
-If the @code{:program} and @code{:function} keywords aren't specified,
-@code{pop3-movemail} will be used.
-
-Here are some examples.  Fetch from the default POP server, using the
-default user name, and default fetcher:
-
-@lisp
-(pop)
-@end lisp
-
-Fetch from a named server with a named user and password:
-
-@lisp
-(pop :server "my.pop.server"
-     :user "user-name" :password "secret")
-@end lisp
-
-Use @samp{movemail} to move the mail:
-
-@lisp
-(pop :program "movemail po:%u %t %p")
-@end lisp
-
-@item maildir
-Get mail from a maildir. This is a type of mailbox currently only
-supported by qmail, where each file in a special directory contains
-exactly one mail.
-
-Keywords:
-
-@table @code
-@item :path
-The path of the directory where the mails are stored.  The default is
-@samp{~/Maildir/new}.
-
-If you sometimes look at your mail through a pop3 daemon before fetching
-them with Gnus, you may also have to fetch your mails from the
-@code{cur} directory inside the maildir, like in the following example.
-
-@end table
-
-An example maildir mail source:
-
-@lisp
-(maildir :path "/home/user-name/Maildir/cur")
-@end lisp
-
-@end table
-
-
-@node Mail Source Customization
-@subsubsection Mail Source Customization
+@node Mail Backend Variables
+@subsection Mail Backend Variables
 
-The following is a list of variables that influence how the mail is
-fetched.  You would normally not need to set or change any of these
-variables.
+These variables are (for the most part) pertinent to all the various
+mail backends.
 
 @table @code
-@item mail-source-crash-box
-@vindex mail-source-crash-box
-File where mail will be stored while processing it.  The default is
-@file{~/.emacs-mail-crash-box}.
-
-@item mail-source-delete-incoming
-@vindex mail-source-delete-incoming
-If non-@code{nil}, delete incoming files after handling them.
-
-@item mail-source-directory
-@vindex mail-source-directory
-Directory where files (if any) will be stored.  The default is
-@file{~/Mail/}.  At present, the only thing this is used for is to say
-where the incoming files will be stored if the previous variable is
-@code{nil}.
-
-@item mail-source-default-file-modes
-@vindex mail-source-default-file-modes
-All new mail files will get this file mode.  The default is 384.
-
-@end table
-
-
-@node Fetching Mail
-@subsubsection Fetching Mail
+@vindex nnmail-read-incoming-hook
+@item nnmail-read-incoming-hook
+The mail backends all call this hook after reading new mail.  You can
+use this hook to notify any mail watch programs, if you want to.
 
-@vindex mail-sources
 @vindex nnmail-spool-file
-The way to actually tell Gnus where to get new mail from is to set
-@code{mail-sources} to a list of mail source specifiers
-(@pxref{Mail Source Specifiers}).
-
-If this variable (and the obsolescent @code{nnmail-spool-file}) is
+@item nnmail-spool-file
+@cindex POP mail
+@cindex MAILHOST
+@cindex movemail
+@vindex nnmail-pop-password
+@vindex nnmail-pop-password-required
+The backends will look for new mail in this file.  If this variable is
 @code{nil}, the mail backends will never attempt to fetch mail by
-themselves.
-
-If you want to fetch mail both from your local spool as well as a POP
-mail server, you'd say something like:
-
-@lisp
-(setq mail-sources
-      '((file)
-        (pop :server "pop3.mail.server"
-             :password "secret")))
-@end lisp
-
-Or, if you don't want to use any of the keyword defaults:
-
-@lisp
-(setq mail-sources
-      '((file :path "/var/spool/mail/user-name")
-        (pop :server "pop3.mail.server"
-             :user "user-name"
-             :port "pop3"
-             :password "secret")))
-@end lisp
-
+themselves.  If you are using a POP mail server and your name is
+@samp{larsi}, you should set this variable to @samp{po:larsi}.  If
+your name is not @samp{larsi}, you should probably modify that
+slightly, but you may have guessed that already, you smart & handsome
+devil!  You can also set this variable to @code{pop}, and Gnus will try
+to figure out the POP mail string by itself.  In any case, Gnus will
+call @code{movemail} which will contact the POP server named in the
+@code{MAILHOST} environment variable.  If the POP server needs a
+password, you can either set @code{nnmail-pop-password-required} to
+@code{t} and be prompted for the password, or set
+@code{nnmail-pop-password} to the password itself.
+
+@code{nnmail-spool-file} can also be a list of mailboxes.
+
+Your Emacs has to have been configured with @samp{--with-pop} before
+compilation.  This is the default, but some installations have it
+switched off.
 
 When you use a mail backend, Gnus will slurp all your mail from your
 inbox and plonk it down in your home directory.  Gnus doesn't move any
@@ -10399,32 +9550,37 @@ invocations first.  At the time when you have finished drawing the
 pentagram, lightened the candles, and sacrificed the goat, you really
 shouldn't be too surprised when Gnus moves your mail.
 
+@vindex nnmail-use-procmail
+@vindex nnmail-procmail-suffix
+@item nnmail-use-procmail
+If non-@code{nil}, the mail backends will look in
+@code{nnmail-procmail-directory} for incoming mail.  All the files in
+that directory that have names ending in @code{nnmail-procmail-suffix}
+will be considered incoming mailboxes, and will be searched for new
+mail.
 
+@vindex nnmail-crash-box
+@item nnmail-crash-box
+When a mail backend reads a spool file, mail is first moved to this
+file, which is @file{~/.gnus-crash-box} by default.  If this file
+already exists, it will always be read (and incorporated) before any
+other spool files.
 
-@node Mail Backend Variables
-@subsection Mail Backend Variables
-
-These variables are (for the most part) pertinent to all the various
-mail backends.
-
-@table @code
-@vindex nnmail-read-incoming-hook
-@item nnmail-read-incoming-hook
-The mail backends all call this hook after reading new mail.  You can
-use this hook to notify any mail watch programs, if you want to.
+@vindex nnmail-prepare-incoming-hook
+@item nnmail-prepare-incoming-hook
+This is run in a buffer that holds all the new incoming mail, and can be
+used for, well, anything, really.
 
 @vindex nnmail-split-hook
 @item nnmail-split-hook
-@findex article-decode-encoded-words
+@findex article-decode-rfc1522
 @findex RFC1522 decoding
-@findex RFC2047 decoding
 Hook run in the buffer where the mail headers of each message is kept
 just before the splitting based on these headers is done.  The hook is
 free to modify the buffer contents in any way it sees fit---the buffer
 is discarded after the splitting has been done, and no changes performed
-in the buffer will show up in any files.
-@code{gnus-article-decode-encoded-words} is one likely function to add
-to this hook.
+in the buffer will show up in any files.  @code{gnus-article-decode-rfc1522}
+is one likely function to add to this hook.
 
 @vindex nnmail-pre-get-new-mail-hook
 @vindex nnmail-post-get-new-mail-hook
@@ -10445,6 +9601,42 @@ default file modes the new mail files get:
           (lambda () (set-default-file-modes 551)))
 @end lisp
 
+@item nnmail-tmp-directory
+@vindex nnmail-tmp-directory
+This variable says where to move incoming mail to -- while processing
+it.  This is usually done in the same directory that the mail backend
+inhabits (e.g., @file{~/Mail/}), but if this variable is non-@code{nil},
+it will be used instead.
+
+@item nnmail-movemail-program
+@vindex nnmail-movemail-program
+This program is executed to move mail from the user's inbox to her home
+directory.  The default is @samp{movemail}.
+
+This can also be a function.  In that case, the function will be called
+with two parameters -- the name of the inbox, and the file to be moved
+to.
+
+@item nnmail-delete-incoming
+@vindex nnmail-delete-incoming
+@cindex incoming mail files
+@cindex deleting incoming files
+If non-@code{nil}, the mail backends will delete the temporary incoming
+file after splitting mail into the proper groups.  This is @code{t} by
+default.
+
+@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.
+(No Gnus release since (ding) Gnus 0.10 (or something like that) have
+lost mail, I think, but that's not the point.  (Except certain versions
+of Red Gnus.))  By not deleting the Incoming* files, one can be sure not
+to lose mail -- if Gnus totally whacks out, one can always recover what
+was lost.
+
+You may delete the @file{Incoming*} files at will.
+
 @item nnmail-use-long-file-names
 @vindex nnmail-use-long-file-names
 If non-@code{nil}, the mail backends will use long file and directory
@@ -10495,12 +9687,6 @@ Let's look at an example value of this variable first:
       ;; Other mailing lists...
       (any "procmail@@informatik\\.rwth-aachen\\.de" "procmail.list")
       (any "SmartList@@informatik\\.rwth-aachen\\.de" "SmartList.list")
-      ;; Both lists below have the same suffix, so prevent
-      ;; cross-posting to mkpkg.list of messages posted only to 
-      ;; the bugs- list, but allow cross-posting when the
-      ;; message was really cross-posted.
-      (any "bugs-mypackage@@somewhere" "mypkg.bugs")
-      (any "mypackage@@somewhere\" - "bugs-mypackage" "mypkg.list")
       ;; People...
       (any "larsi@@ifi\\.uio\\.no" "people.Lars_Magne_Ingebrigtsen"))
    ;; Unmatched mail goes to the catch all group.
@@ -10516,15 +9702,12 @@ the five possible split syntaxes:
 @item
 @samp{group}: If the split is a string, that will be taken as a group
 name.  Normal regexp match expansion will be done.  See below for
-examples.
+examples. 
 
 @item
-@var{(FIELD VALUE [- RESTRICT [- RESTRICT [...]]] SPLIT)}: If the split
-is a list, the first element of which is a string, then store the
-message as specified by SPLIT, if header FIELD (a regexp) contains VALUE
-(also a regexp).  If RESTRICT (yet another regexp) matches some string
-after FIELD and before the end of the matched VALUE, the SPLIT is
-ignored.  If none of the RESTRICT clauses match, SPLIT is processed.
+@var{(FIELD VALUE SPLIT)}: If the split is a list, the first element of
+which is a string, then store the message as specified by SPLIT, if
+header FIELD (a regexp) contains VALUE (also a regexp).
 
 @item
 @var{(| SPLIT...)}: If the split is a list, and the first element is
@@ -10547,11 +9730,6 @@ function with @var{args} given as arguments.  The function should return
 a SPLIT.
 
 @item
-@var{(! FUNC SPLIT)}: If the split is a list, and the first element
-is @code{!}, then SPLIT will be processed, and FUNC will be called as a
-function with the result of SPLIT as argument. FUNC should return a split.
-
-@item
 @code{nil}: If the split is @code{nil}, it is ignored.
 
 @end enumerate
@@ -10581,15 +9759,98 @@ substitutions in the group names), you can say things like:
 (any "debian-\\b\\(\\w+\\)@@lists.debian.org" "mail.debian.\\1")
 @end example
 
-In this example, messages sent to @samp{debian-foo@@lists.debian.org}
-will be filed in @samp{mail.debian.foo}.
-
 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
 groupings 1 through 9.
 
 
+@node Mail and Procmail
+@subsection Mail and Procmail
+@cindex procmail
+
+@cindex slocal
+@cindex elm
+Many people use @code{procmail} (or some other mail filter program or
+external delivery agent---@code{slocal}, @code{elm}, etc) to split
+incoming mail into groups.  If you do that, you should set
+@code{nnmail-spool-file} to @code{procmail} to ensure that the mail
+backends never ever try to fetch mail by themselves.
+
+If you have a combined @code{procmail}/POP/mailbox setup, you can do
+something like the following:
+
+@vindex nnmail-use-procmail
+@lisp
+(setq nnmail-use-procmail t)
+(setq nnmail-spool-file
+      '("/usr/spool/mail/my-name" "po:my-name"))
+@end lisp
+
+This also means that you probably don't want to set
+@code{nnmail-split-methods} either, which has some, perhaps, unexpected
+side effects.
+
+When a mail backend is queried for what groups it carries, it replies
+with the contents of that variable, along with any groups it has figured
+out that it carries by other means.  None of the backends, except
+@code{nnmh}, actually go out to the disk and check what groups actually
+exist.  (It's not trivial to distinguish between what the user thinks is
+a basis for a newsgroup and what is just a plain old file or directory.)
+
+This means that you have to tell Gnus (and the backends) by hand what
+groups exist.
+
+Let's take the @code{nnmh} backend as an example:
+
+The folders are located in @code{nnmh-directory}, say, @file{~/Mail/}.
+There are three folders, @file{foo}, @file{bar} and @file{mail.baz}.
+
+Go to the group buffer and type @kbd{G m}.  When prompted, answer
+@samp{foo} for the name and @samp{nnmh} for the method.  Repeat
+twice for the two other groups, @samp{bar} and @samp{mail.baz}.  Be sure
+to include all your mail groups.
+
+That's it.  You are now set to read your mail.  An active file for this
+method will be created automatically.
+
+@vindex nnmail-procmail-suffix
+@vindex nnmail-procmail-directory
+If you use @code{nnfolder} or any other backend that store more than a
+single article in each file, you should never have procmail add mails to
+the file that Gnus sees.  Instead, procmail should put all incoming mail
+in @code{nnmail-procmail-directory}.  To arrive at the file name to put
+the incoming mail in, append @code{nnmail-procmail-suffix} to the group
+name.  The mail backends will read the mail from these files.
+
+@vindex nnmail-resplit-incoming
+When Gnus reads a file called @file{mail.misc.spool}, this mail will be
+put in the @code{mail.misc}, as one would expect.  However, if you want
+Gnus to split the mail the normal way, you could set
+@code{nnmail-resplit-incoming} to @code{t}.
+
+@vindex nnmail-keep-last-article
+If you use @code{procmail} to split things directly into an @code{nnmh}
+directory (which you shouldn't do), you should set
+@code{nnmail-keep-last-article} to non-@code{nil} to prevent Gnus from
+ever expiring the final article (i.e., the article with the highest
+article number) in a mail newsgroup.  This is quite, quite important.
+
+Here's an example setup:  The incoming spools are located in
+@file{~/incoming/} and have @samp{""} as suffixes (i.e., the incoming
+spool files have the same names as the equivalent groups).  The
+@code{nnfolder} backend is to be used as the mail interface, and the
+@code{nnfolder} directory is @file{~/fMail/}.
+
+@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 Incorporating Old Mail
 
@@ -10764,11 +10025,6 @@ with!  So there!
 
 Most people make most of their mail groups total-expirable, though.
 
-@vindex gnus-inhibit-user-auto-expire
-If @code{gnus-inhibit-user-auto-expire} is non-@code{nil}, user marking
-commands will not mark an article as expirable, even if the group has
-auto-expire turned on.
-
 
 @node Washing Mail
 @subsection Washing Mail
@@ -10797,8 +10053,7 @@ various functions that can be put in these hooks.
 @item nnmail-prepare-incoming-hook
 @vindex nnmail-prepare-incoming-hook
 This hook is called before doing anything with the mail and is meant for
-grand, sweeping gestures.  It is called in a buffer that contains all
-the new, incoming mail.  Functions to be used include:
+grand, sweeping gestures.  Functions to be used include:
 
 @table @code
 @item nnheader-ms-strip-cr
@@ -10839,13 +10094,6 @@ For instance, if you want to remove the @samp{(idm)} and the
 @findex nnmail-remove-tabs
 Translate all @samp{TAB} characters into @samp{SPACE} characters.
 
-@item nnmail-fix-eudora-headers
-@findex nnmail-fix-eudora-headers
-@cindex Eudora
-Eudora produces broken @code{References} headers, but OK
-@code{In-Reply-To} headers.  This function will get rid of the
-@code{References} headers.
-
 @end table
 
 @item nnmail-prepare-incoming-message-hook
@@ -10927,9 +10175,8 @@ If you start using any of the mail backends, they have the annoying
 habit of assuming that you want to read mail with them.  This might not
 be unreasonable, but it might not be what you want.
 
-If you set @code{mail-sources} and @code{nnmail-spool-file} to
-@code{nil}, none of the backends will ever attempt to read incoming
-mail, which should help.
+If you set @code{nnmail-spool-file} to @code{nil}, none of the backends
+will ever attempt to read incoming mail, which should help.
 
 @vindex nnbabyl-get-new-mail
 @vindex nnmbox-get-new-mail
@@ -10955,18 +10202,12 @@ Gnus will read the mail spool when you activate a mail group.  The mail
 file is first copied to your home directory.  What happens after that
 depends on what format you want to store your mail in.
 
-There are five different mail backends in the standard Gnus, and more
-backends are available separately.  The mail backend most people use
-(because it is the fastest and most flexible) is @code{nnml}
-(@pxref{Mail Spool}).
-
 @menu
 * Unix Mail Box::               Using the (quite) standard Un*x mbox.
 * Rmail Babyl::                 Emacs programs use the rmail babyl format.
 * Mail Spool::                  Store your mail in a private spool?
 * MH Spool::                    An mhspool-like backend.
 * Mail Folders::                Having one file for each group.
-* Comparing Mail Backends::     An in-depth looks at pros and cons.
 @end menu
 
 
@@ -11179,143 +10420,14 @@ your @file{.emacs} file:
 (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
 @code{nnfolder}, you can use the @kbd{M-x nnfolder-generate-active-file}
 command to make @code{nnfolder} aware of all likely files in
-@code{nnfolder-directory}.  This only works if you use long file names,
-though.
-
-@node Comparing Mail Backends
-@subsubsection Comparing Mail Backends
-
-First, just for terminology, the @dfn{backend} is the common word for a
-low-level access method---a transport, if you will, by which something
-is acquired.  The sense is that one's mail has to come from somewhere,
-and so selection of a suitable backend is required in order to get that
-mail within spitting distance of Gnus.
-
-The same concept exists for Usenet itself: Though access to articles is
-typically done by NNTP these days, once upon a midnight dreary, everyone
-in the world got at Usenet by running a reader on the machine where the
-articles lay (the machine which today we call an NNTP server), and
-access was by the reader stepping into the articles' directory spool
-area directly.  One can still select between either the @code{nntp} or
-@code{nnspool} backends, to select between these methods, if one happens
-actually to live on the server (or can see its spool directly, anyway,
-via NFS).
-
-The goal in selecting a mail backend is to pick one which
-simultaneously represents a suitable way of dealing with the original
-format plus leaving mail in a form that is convenient to use in the
-future.  Here are some high and low points on each:
-
-@table @code
-@item nnmbox
-
-UNIX systems have historically had a single, very common, and well-
-defined format.  All messages arrive in a single @dfn{spool file}, and
-they are delineated by a line whose regular expression matches
-@samp{^From_}.  (My notational use of @samp{_} is to indicate a space,
-to make it clear in this instance that this is not the RFC-specified
-@samp{From:} header.)  Because Emacs and therefore Gnus emanate
-historically from the Unix environment, it is simplest if one does not
-mess a great deal with the original mailbox format, so if one chooses
-this backend, Gnus' primary activity in getting mail from the real spool
-area to Gnus' preferred directory is simply to copy it, with no
-(appreciable) format change in the process.  It is the ``dumbest'' way
-to move mail into availability in the Gnus environment.  This makes it
-fast to move into place, but slow to parse, when Gnus has to look at
-what's where.
-
-@item nnbabyl
-
-Once upon a time, there was the DEC-10 and DEC-20, running operating
-systems called TOPS and related things, and the usual (only?) mail
-reading environment was a thing called Babyl.  I don't know what format
-was used for mail landing on the system, but Babyl had its own internal
-format to which mail was converted, primarily involving creating a
-spool-file-like entity with a scheme for inserting Babyl-specific
-headers and status bits above the top of each message in the file.
-RMAIL was Emacs' first mail reader, it was written by Richard Stallman,
-and Stallman came out of that TOPS/Babyl environment, so he wrote RMAIL
-to understand the mail files folks already had in existence.  Gnus (and
-VM, for that matter) continue to support this format because it's
-perceived as having some good qualities in those mailer-specific
-headers/status bits stuff.  RMAIL itself still exists as well, of
-course, and is still maintained by Stallman.
-
-Both of the above forms leave your mail in a single file on your
-filesystem, and they must parse that entire file each time you take a
-look at your mail.
-
-@item nnml
-
-@code{nnml} is the backend which smells the most as though you were
-actually operating with an @code{nnspool}-accessed Usenet system.  (In
-fact, I believe @code{nnml} actually derived from @code{nnspool} code,
-lo these years ago.)  One's mail is taken from the original spool file,
-and is then cut up into individual message files, 1:1.  It maintains a
-Usenet-style active file (analogous to what one finds in an INN- or
-CNews-based news system in (for instance) @file{/var/lib/news/active},
-or what is returned via the @samp{NNTP LIST} verb) and also creates
-@dfn{overview} files for efficient group entry, as has been defined for
-@sc{nntp} servers for some years now.  It is slower in mail-splitting,
-due to the creation of lots of files, updates to the @code{nnml} active
-file, and additions to overview files on a per-message basis, but it is
-extremely fast on access because of what amounts to the indexing support
-provided by the active file and overviews.
-
-@code{nnml} costs @dfn{inodes} in a big way; that is, it soaks up the
-resource which defines available places in the filesystem to put new
-files.  Sysadmins take a dim view of heavy inode occupation within
-tight, shared filesystems.  But if you live on a personal machine where
-the filesystem is your own and space is not at a premium, @code{nnml}
-wins big.
-
-It is also problematic using this backend if you are living in a
-FAT16-based Windows world, since much space will be wasted on all these
-tiny files.
-
-@item nnmh
-
-The Rand MH mail-reading system has been around UNIX systems for a very
-long time; it operates by splitting one's spool file of messages into
-individual files, but with little or no indexing support -- @code{nnmh}
-is considered to be semantically equivalent to ``@code{nnml} without
-active file or overviews''.  This is arguably the worst choice, because
-one gets the slowness of individual file creation married to the
-slowness of access parsing when learning what's new in one's groups.
-
-@item nnfolder
-
-Basically the effetc of @code{nnfolder} is @code{nnmbox} (the first
-method described above) on a per-group basis.  That is, @code{nnmbox}
-itself puts *all* one's mail in one file; @code{nnfolder} provides a
-little bit of optimization to this so that each of one's mail groups has
-a Unix mail box file.  It's faster than @code{nnmbox} because each group
-can be parsed separately, and still provides the simple Unix mail box
-format requiring minimal effort in moving the mail around.  In addition, 
-it maintains an ``active'' file making it much faster for Gnus to figure 
-out how many messages there are in each separate group.
-
-If you have groups that are expected to have a massive amount of
-messages, @code{nnfolder} is not the best choice, but if you receive
-only a moderate amount of mail, @code{nnfolder} is probably the most
-friendly mail backend all over.
-
-@end table
-
+@code{nnfolder-directory}.
 
 
 @node Other Sources
@@ -11416,11 +10528,6 @@ in this directory, which defaults to @file{~/.nneething/}.
 All files that match this regexp will be ignored.  Nice to use to exclude
 auto-save files and the like, which is what it does by default.
 
-@item nneething-include-files
-@vindex nneething-include-files
-Regexp saying what files to include in the group.  If this variable is
-non-@code{nil}, only files matching this regexp will be included.
-
 @item nneething-map-file
 @vindex nneething-map-file
 Name of the map files.
@@ -11463,11 +10570,16 @@ The rnews batch transport format.
 @item forward
 Forwarded articles.
 
-@item nsmail
-Netscape mail boxes.
-
 @item mime-parts
-MIME multipart messages.
+MIME multipart messages, besides digests.
+
+@item mime-digest
+@cindex digest
+@cindex MIME digest
+@cindex 1153 digest
+@cindex RFC 1153 digest
+@cindex RFC 341 digest
+MIME (RFC 1341) digest format.
 
 @item standard-digest
 The standard (RFC 1153) digest format.
@@ -11503,8 +10615,9 @@ Virtual server variables:
 @vindex nndoc-article-type
 This should be one of @code{mbox}, @code{babyl}, @code{digest},
 @code{news}, @code{rnews}, @code{mmdf}, @code{forward}, @code{rfc934},
-@code{rfc822-forward}, @code{mime-parts}, @code{standard-digest},
-@code{slack-digest}, @code{clari-briefs}, @code{nsmail} or @code{guess}.
+@code{rfc822-forward}, @code{mime-parts}, @code{mime-digest},
+@code{standard-digest}, @code{slack-digest}, @code{clari-briefs} or
+@code{guess}.
 
 @item nndoc-post-type
 @vindex nndoc-post-type
@@ -11958,7 +11071,7 @@ group as read.
 
 If the search engine changes its output substantially, @code{nnweb}
 won't be able to parse it and will fail.  One could hardly fault the Web
-providers if they were to do this---their @emph{raison d'être} is to
+providers if they were to do this---their @emph{raison d'\e,Aj\e(Btre} 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.
@@ -12289,7 +11402,6 @@ Of course, to use it as such, you have to learn a few new commands.
 * Agent Variables::        Customizing is fun.
 * Example Setup::          An example @file{.gnus.el} file for offline people.
 * Batching Agents::        How to fetch news from a @code{cron} job.
-* Agent Caveats::          What you think it'll do and what it does.
 @end menu
 
 
@@ -12352,7 +11464,7 @@ Agent (@pxref{Server Agent Commands}).  This will typically be only the
 primary select method, which is listed on the bottom in the buffer.
 
 @item
-Decide on download policy.  @xref{Agent Categories}.
+Decide on download policy.  @xref{Agent Categories}
 
 @item
 Uhm... that's it.
@@ -12372,9 +11484,7 @@ you're interested in the articles anyway.
 
 The main way to control what is to be downloaded is to create a
 @dfn{category} and then assign some (or all) groups to this category.
-Groups that do not belong in any other category belong to the
-@code{default} category. Gnus has its own buffer for creating and
-managing categories.
+Gnus has its own buffer for creating and managing categories.
 
 @menu
 * Category Syntax::       What a category looks like.
@@ -12396,21 +11506,11 @@ are eligible for downloading; and
 @item
 a score rule which (generally) gives you a finer granularity when
 deciding what articles to download.  (Note that this @dfn{download
-score} is not necessarily related to normal scores.)
+score} is wholly unrelated to normal scores.)
 @end enumerate
 
-A predicate in its simplest form can be a single predicate such as
-@code{true} or @code{false}. These two will download every available
-article or nothing respectively. In the case of these two special
-predicates an additional score rule is superfluous.
-
-Predicates of @code{high} or @code{low} download articles in respect of
-their scores in relationship to @code{gnus-agent-high-score} and
-@code{gnus-agent-low-score} as descibed below.
-
-To gain even finer control of what is to be regarded eligible for
-download a predicate can consist of a number of predicates with logical
-operators sprinkled in between.
+A predicate consists of predicates with logical operators sprinkled in
+between.
 
 Perhaps some examples are in order.
 
@@ -12478,183 +11578,13 @@ to know:  The functions are called with no parameters, but the
 @code{gnus-headers} and @code{gnus-score} dynamic variables are bound to
 useful values.
 
-For example, you could decide that you don't want to download articles
-that were posted more than a certain number of days ago (e.g. posted
-more than @code{gnus-agent-expire-days} ago) you might write a function
-something along the lines of the following:
-
-@lisp
-(defun my-article-old-p ()
-  "Say whether an article is old."
-  (< (time-to-days (date-to-time (mail-header-date gnus-headers)))
-     (- (time-to-days (current-time)) gnus-agent-expire-days)))
-@end lisp
-
-with the predicate then defined as:
-
-@lisp
-(not my-article-old-p)
-@end lisp
-
-or you could append your predicate to the predefined
-@code{gnus-category-predicate-alist} in your @file{~/.gnus.el} or
-wherever.  (Note: this would have to be at a point *after*
-@code{gnus-agent} has been loaded via @code{(gnus-agentize)})
-
-@lisp
-(defvar  gnus-category-predicate-alist
-  (append gnus-category-predicate-alist
-        '((old . my-article-old-p))))
-@end lisp
-
-and simply specify your predicate as:
-
-@lisp
-(not old)
-@end lisp
-
-If/when using something like the above, be aware that there are many
-misconfigured systems/mailers out there and so an article's date is not
-always a reliable indication of when it was posted. Hell, some people
-just don't give a damm.
-
-
-The above predicates apply to *all* the groups which belong to the
-category. However, if you wish to have a specific predicate for an
-individual group within a category, or you're just too lazy to set up a
-new category, you can enter a group's individual predicate in it's group
-parameters like so:
-
-@lisp
-(agent-predicate . short)
-@end lisp
-
-This is the group parameter equivalent of the agent category
-default. Note that when specifying a single word predicate like this,
-the @code{agent-predicate} specification must be in dotted pair
-notation.
-
-The equivalent of the longer example from above would be:
-
-@lisp
-(agent-predicate or high (and (not low) (not long)))
-@end lisp
-
-The outer parenthesis required in the category specification are not
-entered here as, not being in dotted pair notation, the value of the
-predicate is assumed to be a list.
-
-
 Now, the syntax of the download score is the same as the syntax of
 normal score files, except that all elements that require actually
 seeing the article itself are verboten.  This means that only the
-following headers can be scored on: @code{Subject}, @code{From},
-@code{Date}, @code{Message-ID}, @code{References}, @code{Chars},
-@code{Lines}, and @code{Xref}.
-
-As with predicates, the specification of the @code{download score rule}
-to use in respect of a group can be in either the category definition if
-it's to be applicable to all groups in therein, or a group's parameters
-if it's to be specific to that group.
-
-In both of these places the @code{download score rule} can take one of
-three forms:
-
-@enumerate
-@item
-Score rule
-
-This has the same syntax as a normal gnus score file except only a
-subset of scoring keywords are available as mentioned above.
-
-example:
-
-@itemize @bullet
-@item
-Category specification
-
-@lisp
-(("from"
-       ("Lars Ingebrigtsen" 1000000 nil s))
-("lines"
-       (500 -100 nil <)))
-@end lisp
-
-@item
-Group Parameter specification
-
-@lisp
-(agent-score ("from"
-                   ("Lars Ingebrigtsen" 1000000 nil s))
-             ("lines"
-                   (500 -100 nil <)))
-@end lisp
-
-Again, note the omission of the outermost parenthesis here.
-@end itemize
-
-@item
-Agent score file
-
-These score files must *only* contain the permitted scoring keywords
-stated above.
-
-example:
-
-@itemize @bullet
-@item
-Category specification
-
-@lisp
-("~/News/agent.SCORE")
-@end lisp
-
-or perhaps
-
-@lisp
-("~/News/agent.SCORE" "~/News/agent.group.SCORE")
-@end lisp
-
-@item
-Group Parameter specification
-
-@lisp
-(agent-score "~/News/agent.SCORE")
-@end lisp
-
-Additional score files can be specified as above. Need I say anything
-about parenthesis.
-@end itemize
-
-@item
-Use @code{normal} score files
-
-If you dont want to maintain two sets of scoring rules for a group, and
-your desired @code{downloading} criteria for a group are the same as your
-@code{reading} criteria then you can tell the agent to refer to your
-@code{normal} score files when deciding what to download.
-
-These directives in either the category definition or a group's
-parameters will cause the agent to read in all the applicable score
-files for a group, *filtering out* those those sections that do not
-relate to one of the permitted subset of scoring keywords.
+following headers can be scored on: @code{From}, @code{Subject},
+@code{Date}, @code{Xref}, @code{Lines}, @code{Chars}, @code{Message-ID},
+and @code{References}.
 
-@itemize @bullet
-@item
-Category Specification
-
-@lisp
-file
-@end lisp
-
-@item
-Group Parameter specification
-
-@lisp
-(agent-score . file)
-@end lisp
-@end itemize
-@end enumerate
 
 @node The Category Buffer
 @subsubsection The Category Buffer
@@ -12806,21 +11736,13 @@ Fetch all eligible articles in all groups
 @kindex J S (Agent Group)
 @findex gnus-group-send-drafts
 Send all sendable messages in the draft group
-(@code{gnus-agent-fetch-session}).  @xref{Drafts}.
+(@code{gnus-agent-send-draft}).  @xref{Drafts}
 
 @item J a
 @kindex J a (Agent Group)
 @findex gnus-agent-add-group
 Add the current group to an Agent category
-(@code{gnus-agent-add-group}).  This command understands the
-process/prefix convention (@pxref{Process/Prefix}).
-
-@item J r
-@kindex J r (Agent Group)
-@findex gnus-agent-remove-group
-Remove the current group from its category, if any
-(@code{gnus-agent-remove-group}).  This command understands the
-process/prefix convention (@pxref{Process/Prefix}).
+(@code{gnus-agent-add-group}).
 
 @end table
 
@@ -12840,7 +11762,7 @@ Mark the article for downloading (@code{gnus-agent-mark-article}).
 Remove the downloading mark from the article
 (@code{gnus-agent-unmark-article}).
 
-@item @@
+@item @@ 
 @kindex @@ (Agent Summary)
 @findex gnus-agent-toggle-mark
 Toggle whether to download the article (@code{gnus-agent-toggle-mark}).
@@ -12878,8 +11800,8 @@ Agent (@code{gnus-agent-remove-server}).
 @vindex gnus-agent-expire-days
 @findex gnus-agent-expire
 @kindex M-x gnus-agent-expire
-@cindex Agent expiry
-@cindex Gnus Agent expiry
+@cindex Agent expire
+@cindex Gnus Agent expire
 @cindex expiry
 
 @code{nnagent} doesn't handle expiry.  Instead, there's a special
@@ -12947,11 +11869,12 @@ setup, you may be able to use something like the following as your
 @lisp
 ;;; Define how Gnus is to fetch news.  We do this over NNTP
 ;;; from your ISP's server.
-(setq gnus-select-method '(nntp "news.your-isp.com"))
+(setq gnus-select-method '(nntp "nntp.your-isp.com"))
 
 ;;; Define how Gnus is to read your mail.  We read mail from
 ;;; your ISP's POP server.
-(setq mail-sources '((pop :server "pop.your-isp.com")))
+(setenv "MAILHOST" "pop.your-isp.com")
+(setq nnmail-spool-file "po:username")
 
 ;;; Say how Gnus is to store the mail.  We use nnml groups.
 (setq gnus-secondary-select-methods '((nnml "")))
@@ -12995,29 +11918,6 @@ emacs -batch -l ~/.emacs -f gnus-agent-batch >/dev/null
 @end example
 
 
-@node Agent Caveats
-@subsection Agent Caveats
-
-The Gnus Agent doesn't seem to work like most other offline
-newsreaders.  Here are some common questions that some imaginary people
-may ask:
-
-@table @dfn
-@item If I read an article while plugged, do they get entered into the
-Agent?
-
-@strong{No.}
-
-@item If I read an article while plugged, and the article already exists
-in the Agent, will it get downloaded once more?
-
-@strong{Yes.}
-
-@end table
-
-In short, when Gnus is unplugged, it only looks into the locally stored
-articles; when it's plugged, it only talks to your ISP.
-
 
 @node Scoring
 @chapter Scoring
@@ -13184,10 +12084,10 @@ Score on the author name.
 Score on the subject line.
 
 @item x
-Score on the @code{Xref} line---i.e., the cross-posting line.
+Score on the Xref line---i.e., the cross-posting line.
 
 @item r
-Score on the @code{References} line.
+Score on the References line.
 
 @item d
 Score on the date.
@@ -13196,11 +12096,10 @@ Score on the date.
 Score on the number of lines.
 
 @item i
-Score on the @code{Message-ID} header.
+Score on the Message-ID.
 
 @item f
-Score on followups---this matches the author name, and adds scores to
-the followups to this author.
+Score on followups.
 
 @item b
 Score on the body.
@@ -13325,7 +12224,7 @@ You can do scoring from the command line by saying something like:
 @findex gnus-batch-score
 @cindex batch scoring
 @example
-$ emacs -batch -l ~/.emacs -l ~/.gnus.el -f gnus-batch-score
+$ emacs -batch -l ~/.emacs -l gnus -f gnus-batch-score
 @end example
 
 
@@ -13377,10 +12276,6 @@ If you have really complicated score files, and do lots of batch
 scoring, then you might set this variable to @code{t}.  This will make
 Gnus save the scores into the @file{.newsrc.eld} file.
 
-If you do not set this to @code{t}, then manual scores (like those set
-with @kbd{V s} (@code{gnus-summary-set-score})) will not be preserved
-across group visits.
-
 @item gnus-score-interactive-default-score
 @vindex gnus-score-interactive-default-score
 Score used by all the interactive raise/lower commands to raise/lower
@@ -13940,12 +12835,6 @@ If @code{gnus-adaptive-word-minimum} is set to a number, the adaptive
 word scoring process will never bring down the score of an article to
 below this number.  The default is @code{nil}.
 
-@vindex gnus-adaptive-word-no-group-words
-If @code{gnus-adaptive-word-no-group-words} is set to @code{t}, gnus
-won't adaptively word score any of the words in the group name.  Useful
-for groups like @samp{comp.editors.emacs}, where most of the subject
-lines contain the word @samp{emacs}.
-
 After using this scheme for a while, it might be nice to write a
 @code{gnus-psychoanalyze-user} command to go through the rules and see
 what words you like and what words you don't like.  Or perhaps not.
@@ -14138,7 +13027,7 @@ will be fetched @emph{twice}.  If you want to match a bit on the
 the matches.
 
 @item Marking as read
-You will probably want to mark articles that have scores below a certain
+You will probably want to mark articles that has a score below a certain
 number as read.  This is most easily achieved by putting the following
 in your @file{all.SCORE} file:
 @lisp
@@ -14606,7 +13495,7 @@ then this operator will return @code{false}.
 
 @item !
 @itemx not
-@itemx Â¬
+@itemx \e,A,\e(B
 This logical operator only takes a single argument.  It returns the
 logical negation of the value of its argument.
 
@@ -15107,15 +13996,6 @@ and so on.  Create as many faces as you wish.  The same goes for the
 @code{mouse-face} specs---you can say @samp{%3(hello%)} to have
 @samp{hello} mouse-highlighted with @code{gnus-mouse-face-3}.
 
-Text inside the @samp{%<} and @samp{%>} specifiers will get the special
-@code{balloon-help} property set to @code{gnus-balloon-face-0}. If you say
-@samp{%1<}, you'll get @code{gnus-balloon-face-1} and so on. The
-@code{gnus-balloon-face-*} variables should be either strings or
-symbols naming functions that return a string. Under @code{balloon-help-mode},
-when the mouse passes over text with this property set, a balloon window
-will appear and display the string. Please refer to the doc string of
-@code{balloon-help-mode} for more information on this.
-
 Here's an alternative recipe for the group buffer:
 
 @lisp
@@ -15154,9 +14034,6 @@ If @code{gnus-use-full-window} non-@code{nil}, Gnus will delete all
 other windows and occupy the entire Emacs screen by itself.  It is
 @code{t} by default.
 
-Setting this variable to @code{nil} kinda works, but there are
-glitches.  Use at your own peril.
-
 @vindex gnus-buffer-configuration
 @code{gnus-buffer-configuration} describes how much space each Gnus
 buffer should be given.  Here's an excerpt of this variable:
@@ -15326,8 +14203,16 @@ should have a frame parameter alist as the size spec.
 Reference Manual}.  Under XEmacs, a frame property list will be
 accepted, too---for instance, @code{(height 5 width 15 left -1 top 1)}
 is such a plist.
-The list of all possible keys for @code{gnus-buffer-configuration} can
-be found in its default value.
+
+Here's a list of all possible keys for
+@code{gnus-buffer-configuration}:
+
+@code{group}, @code{summary}, @code{article}, @code{server},
+@code{browse}, @code{message}, @code{pick}, @code{info},
+@code{summary-faq}, @code{edit-group}, @code{edit-server},
+@code{edit-score}, @code{post}, @code{reply}, @code{forward},
+@code{reply-yank}, @code{mail-bounce}, @code{draft}, @code{pipe},
+@code{bug}, @code{compose-bounce}, and @code{score-trace}.
 
 Note that the @code{message} key is used for both
 @code{gnus-group-mail} and @code{gnus-summary-mail-other-window}.  If
@@ -15343,20 +14228,6 @@ might be used:
                                (group 1.0)))))
 @end lisp
 
-One common desire for a multiple frame split is to have a separate frame
-for composing mail and news while leaving the original frame intact.  To
-accomplish that, something like the following can be done:
-
-@lisp
-(message (frame 1.0
-                (if (not (buffer-live-p gnus-summary-buffer))
-                    (car (cdr (assoc 'group gnus-buffer-configuration)))
-                  (car (cdr (assoc 'summary gnus-buffer-configuration))))
-                (vertical ((user-position . t) (top . 1) (left . 1)
-                           (name . "Message"))
-                          (message 1.0 point))))
-@end lisp
-
 @findex gnus-add-configuration
 Since the @code{gnus-buffer-configuration} variable is so long and
 complicated, there's a function you can use to ease changing the config
@@ -15381,11 +14252,6 @@ won't change the window configuration.  If you always want to force the
 ``right'' window configuration, you can set
 @code{gnus-always-force-window-configuration} to non-@code{nil}.
 
-If you're using tree displays (@pxref{Tree Display}), and the tree
-window is displayed vertically next to another window, you may also want
-to fiddle with @code{gnus-tree-minimize-window} to avoid having the
-windows resized.
-
 
 @node Faces and Fonts
 @section Faces and Fonts
@@ -15673,6 +14539,10 @@ time.  Modified by the @var{idle} parameter, of course.
 seconds.  This is 60 by default.  If you change that variable,
 all the timings in the handlers will be affected.)
 
+@vindex gnus-use-demon
+To set the whole thing in motion, though, you have to set
+@code{gnus-use-demon} to @code{t}.
+
 So, if you want to add a handler, you could put something like this in
 your @file{.gnus} file:
 
@@ -16024,7 +14894,10 @@ To enable displaying picons, simply put the following line in your
 
 @lisp
 (setq gnus-use-picons t)
-(setq gnus-treat-display-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)
 @end lisp
 
 and make sure @code{gnus-picons-database} points to the directory
@@ -16095,19 +14968,28 @@ Now that you've made those decision, you need to add the following
 functions to the appropriate hooks so these pictures will get displayed
 at the right time.
 
+@vindex gnus-article-display-hook
 @vindex gnus-picons-display-where
 @table @code
 @item gnus-article-display-picons
 @findex gnus-article-display-picons
 Looks up and displays the picons for the author and the author's domain
-in the @code{gnus-picons-display-where} buffer.
+in the @code{gnus-picons-display-where} buffer.  Should be added to the
+@code{gnus-article-display-hook}.
 
 @item gnus-picons-article-display-x-face
 @findex gnus-article-display-picons
-Decodes and displays the X-Face header if present.
+Decodes and displays the X-Face header if present.  This function
+should be added to @code{gnus-article-display-hook}.
 
 @end table
 
+Note:  You must append them to the hook, so make sure to specify 't'
+for the append flag of @code{add-hook}:
+
+@lisp
+(add-hook 'gnus-article-display-hook 'gnus-article-display-picons t)
+@end lisp
 
 
 @node Picon Useless Configuration
@@ -16177,18 +15059,11 @@ Defaults to @code{t}.
 Ordered list of suffixes on picon file names to try.  Defaults to
 @code{("xpm" "gif" "xbm")} minus those not builtin your XEmacs.
 
-@item gnus-picons-setup-hook
-@vindex gnus-picons-setup-hook
-Hook run in the picon buffer, if that is displayed.
-
 @item gnus-picons-display-article-move-p
 @vindex gnus-picons-display-article-move-p
 Whether to move point to first empty line when displaying picons.  This
 has only an effect if `gnus-picons-display-where' has value `article'.
 
-If @code{nil}, display the picons in the @code{From} and
-@code{Newsgroups} lines.  This is the defailt.
-
 @item gnus-picons-clear-cache-on-shutdown
 @vindex gnus-picons-clear-cache-on-shutdown
 Whether to clear the picons cache when exiting gnus.  Gnus caches every
@@ -16224,7 +15099,7 @@ In short---to use Smiley in Gnus, put the following in your
 @file{.gnus.el} file:
 
 @lisp
-(setq gnus-treat-display-smiley t)
+(add-hook 'gnus-article-display-hook 'gnus-smiley-display t)
 @end lisp
 
 Smiley maps text smiley faces---@samp{:-)}, @samp{:-=}, @samp{:-(} and
@@ -16475,7 +15350,7 @@ Most Gnus storage path variables will be initialized from this variable,
 which defaults to the @samp{SAVEDIR} environment variable, or
 @file{~/News/} if that variable isn't set.
 
-Note that Gnus is mostly loaded when the @file{.gnus.el} file is read.
+Note that gnus is mostly loaded when the @file{.gnus.el} file is read.
 This means that other directory variables that are initialized from this
 variable won't be set properly if you set this variable in
 @file{.gnus.el}.  Set this variable in @file{.emacs} instead.
@@ -16593,7 +15468,7 @@ but at the common table.@*
 * Terminology::                    We use really difficult, like, words here.
 * Customization::                  Tailoring Gnus to your needs.
 * Troubleshooting::                What you might try if things do not work.
-* Gnus Reference Guide::           Rilly, rilly technical stuff.
+* A Programmers Guide to Gnus::    Rilly, rilly technical stuff.
 * Emacs for Heathens::             A short introduction to Emacsian terms.
 * Frequently Asked Questions::     A question-and-answer session.
 @end menu
@@ -16649,7 +15524,6 @@ to that instead.
 * Compatibility::       Just how compatible is Gnus with @sc{gnus}?
 * Conformity::          Gnus tries to conform to all standards.
 * Emacsen::             Gnus can be run on a few modern Emacsen.
-* Gnus Development::    How Gnus is developed.
 * Contributors::        Oodles of people.
 * New Features::        Pointers to some of the new stuff in Gnus.
 * Newest Features::     Features so new that they haven't been written yet.
@@ -16779,22 +15653,18 @@ We do have some breaches to this one.
 
 @table @emph
 
+@item MIME
+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
-@itemx User-Agent
-These are considered to be ``vanity headers'', while I consider them
-to be consumer information.  After seeing so many badly formatted
-articles coming from @code{tin} and @code{Netscape} I know not to use
-either of those for posting articles.  I would not have known that if
-it wasn't for the @code{X-Newsreader} header.
+This is considered to be a ``vanity header'', while I consider it to be
+consumer information.  After seeing so many badly formatted articles
+coming from @code{tin} and @code{Netscape} I know not to use either of
+those for posting articles.  I would not have known that if it wasn't
+for the @code{X-Newsreader} header.
 @end table
 
-@item USEFOR
-@cindex USEFOR
-USEFOR is an IETF working group writing a successor to RFC 1036, based
-on Son-of-RFC 1036.  They have produced a number of drafts proposing
-various changes to the format of news articles.  The Gnus towers will
-look into implementing the changes when the draft is accepted as an RFC.
-
 @end table
 
 If you ever notice Gnus acting non-compliant with regards to the texts
@@ -16814,16 +15684,18 @@ Gnus should work on :
 @itemize @bullet
 
 @item
-Emacs 20.3 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
 
-This Gnus version will absolutely not work on any Emacsen older than
-that.  Not reliably, at least.  Older versions of Gnus may work on older
-Emacs versions.
+Gnus will absolutely not work on any Emacsen older than that.  Not
+reliably, at least.
 
 There are some vague differences between Gnus on the various
 platforms---XEmacs features more graphics (a logo and a toolbar)---but
@@ -16831,44 +15703,6 @@ other than that, things should look pretty much the same under all
 Emacsen.
 
 
-@node Gnus Development
-@subsection Gnus Development
-
-Gnus is developed in a two-phased cycle.  The first phase involves much
-discussion on the @samp{ding@@gnus.org} mailing list, where people
-propose changes and new features, post patches and new backends.  This
-phase is called the @dfn{alpha} phase, since the Gnusae released in this
-phase are @dfn{alpha releases}, or (perhaps more commonly in other
-circles) @dfn{snapshots}.  During this phase, Gnus is assumed to be
-unstable and should not be used by casual users.  Gnus alpha releases
-have names like ``Red Gnus'' and ``Quassia Gnus''.
-
-After futzing around for 50-100 alpha releases, Gnus is declared
-@dfn{frozen}, and only bug fixes are applied.  Gnus loses the prefix,
-and is called things like ``Gnus 5.6.32'' instead.  Normal people are
-supposed to be able to use these, and these are mostly discussed on the
-@samp{gnu.emacs.gnus} newsgroup.
-
-@cindex Incoming*
-@vindex nnmail-delete-incoming
-Some variable defaults differ between alpha Gnusae and released Gnusae.
-In particular, @code{nnmail-delete-incoming} defaults to @code{nil} in
-alpha Gnusae and @code{t} in released Gnusae.  This is to prevent
-lossage of mail if an alpha release hiccups while handling the mail.
-
-The division of discussion between the ding mailing list and the Gnus
-newsgroup is not purely based on publicity concerns.  It's true that
-having people write about the horrible things that an alpha Gnus release
-can do (sometimes) in a public forum may scare people off, but more
-importantly, talking about new experimental features that have been
-introduced may confuse casual users.  New features are frequently
-introduced, fiddled with, and judged to be found wanting, and then
-either discarded or totally rewritten.  People reading the mailing list
-usually keep up with these rapid changes, whille people on the newsgroup
-can't be assumed to do so.
-
-
-
 @node Contributors
 @subsection Contributors
 @cindex contributors
@@ -16903,10 +15737,6 @@ Luis Fernandes---design and graphics.
 Erik Naggum---help, ideas, support, code and stuff.
 
 @item
-Shenghuo Zhu---uudecode.el, mm-uu.el, rfc1843.el and many other things
-connected with @sc{mime} and other types of en/decoding.
-
-@item
 Wes Hardaker---@file{gnus-picon.el} and the manual section on
 @dfn{picons} (@pxref{Picons}).
 
@@ -16956,7 +15786,7 @@ David Moore---rewrite of @file{nnvirtual.el} and many other things.
 Kevin Davidson---came up with the name @dfn{ding}, so blame him.
 
 @item
-François Pinard---many, many interesting and thorough bug reports, as
+Fran\e,Ag\e(Bois Pinard---many, many interesting and thorough bug reports, as
 well as autoconf support.
 
 @end itemize
@@ -16969,7 +15799,7 @@ The following people have contributed many patches and suggestions:
 Christopher Davis,
 Andrew Eskilsson,
 Kai Grossjohann,
-David KÃ¥gedal,
+David K\e,Ae\e(Bgedal,
 Richard Pieri,
 Fabrice Popineau,
 Daniel Quinlan,
@@ -16986,15 +15816,12 @@ Russ Allbery,
 Peter Arius,
 Matt Armstrong,
 Marc Auslander,
-Miles Bader,
-Alexei V. Barantsev,
 Frank Bennett,
 Robert Bihlmeyer,
 Chris Bone,
 Mark Borges,
 Mark Boyns,
 Lance A. Brown,
-Rob Browning,
 Kees de Bruin,
 Martin Buchholz,
 Joe Buehler,
@@ -17007,13 +15834,8 @@ Castor,
 David Charlap,
 Dan Christensen,
 Kevin Christian,
-Jae-you Chung, @c ?
-James H. Cloos, Jr.,
-Laura Conrad,
 Michael R. Cook,
 Glenn Coombs,
-Andrew J. Cosgriff,
-Neil Crellin,
 Frank D. Cringle,
 Geoffrey T. Dairiki,
 Andre Deparade,
@@ -17024,16 +15846,12 @@ Joev Dubach,
 Michael Welsh Duggan,
 Dave Edmondson,
 Paul Eggert,
-Mark W. Eichin,
-Karl Eichwalder,
 Enami Tsugutomo, @c Enami
 Michael Ernst,
 Luc Van Eycken,
 Sam Falkner,
 Nelson Jose dos Santos Ferreira,
 Sigbjorn Finne,
-Sven Fischer,
-Paul Fisher,
 Decklin Foster,
 Gary D. Foster,
 Paul Franklin,
@@ -17041,7 +15859,6 @@ Guy Geens,
 Arne Georg Gleditsch,
 David S. Goldberg,
 Michelangelo Grigni,
-Dale Hagglund,
 D. Hall,
 Magnus Hammerin,
 Kenichi Handa, @c Handa
@@ -17049,36 +15866,29 @@ Raja R. Harinath,
 Yoshiki Hayashi, @c ?
 P. E. Jareth Hein,
 Hisashige Kenji, @c Hisashige
-Scott Hofmann,
 Marc Horowitz,
 Gunnar Horrigmo,
 Richard Hoskins,
 Brad Howes,
-Miguel de Icaza,
-François Felix Ingrand,
-Tatsuya Ichikawa, @c ?
+Fran\e,Ag\e(Bois Felix Ingrand,
 Ishikawa Ichiro, @c Ishikawa
 Lee Iverson,
 Iwamuro Motonori, @c Iwamuro
 Rajappa Iyer,
 Andreas Jaeger,
-Adam P. Jenkins,
 Randell Jesup,
 Fred Johansen,
 Gareth Jones,
 Simon Josefsson,
 Greg Klanderman,
 Karl Kleinpaste,
-Michael Klingbeil,
 Peter Skov Knudsen,
 Shuhei Kobayashi, @c Kobayashi
-Petr Konecny,
 Koseki Yoshinori, @c Koseki
 Thor Kristoffersen,
 Jens Lautenbacher,
 Martin Larose,
 Seokchan Lee, @c Lee
-Joerg Lenneis,
 Carsten Leonhardt,
 James LewisMoss,
 Christian Limpach,
@@ -17105,13 +15915,11 @@ Alexandre Oliva,
 Ken Olstad,
 Masaharu Onishi, @c Onishi
 Hideki Ono, @c Ono
-Ettore Perazzoli,
 William Perry,
 Stephen Peters,
 Jens-Ulrik Holger Petersen,
 Ulrich Pfeifer,
 Matt Pharr,
-Andy Piper,
 John McClary Prevost,
 Bill Pringlemeir,
 Mike Pullen,
@@ -17124,12 +15932,10 @@ Renaud Rioboo,
 Roland B. Roberts,
 Bart Robinson,
 Christian von Roques,
-Markus Rost,
 Jason Rumney,
 Wolfgang Rupprecht,
 Jay Sachs,
 Dewey M. Sasser,
-Conrad Sauerwald,
 Loren Schall,
 Dan Schmidt,
 Ralph Schleicher,
@@ -17147,34 +15953,26 @@ Darren Stalder,
 Richard Stallman,
 Greg Stark,
 Sam Steingold,
-Paul Stevenson,
-Jonas Steverud,
 Paul Stodghill,
-Kiyokazu Suto, @c Suto
 Kurt Swanson,
 Samuel Tardieu,
 Teddy,
 Chuck Thompson,
-Tozawa Akihiko, @c Tozawa
 Philippe Troin,
 James Troup,
 Trung Tran-Duc,
-Jack Twilley,
 Aaron M. Ucko,
 Aki Vehtari,
 Didier Verna,
-Vladimir Volovich,
 Jan Vroonhof,
 Stefan Waldherr,
 Pete Ware,
 Barry A. Warsaw,
 Christoph Wedler,
 Joe Wells,
-Lee Willis,
-Katsumi Yamaoka @c Yamaoka
+Katsumi Yamaoka, @c Yamaoka
 and
-Lloyd Zusman.
-
+Shenghuo Zhu. @c Zhu
 
 For a full overview of what each person has done, the ChangeLogs
 included in the Gnus alpha distributions should give ample reading
@@ -17449,6 +16247,11 @@ All functions for hiding article elements are now toggles.
 @item
 Article headers can be buttonized (@pxref{Article Washing}).
 
+@lisp
+(add-hook 'gnus-article-display-hook
+          'gnus-article-add-buttons-to-head)
+@end lisp
+
 @item
 All mail backends support fetching articles by @code{Message-ID}.
 
@@ -17546,6 +16349,11 @@ cited text to hide is now customizable (@pxref{Article Hiding}).
 @item
 Boring headers can be hidden (@pxref{Article Hiding}).
 
+@lisp
+(add-hook 'gnus-article-display-hook
+          'gnus-article-hide-boring-headers t)
+@end lisp
+
 @item
 Default scoring values can now be set from the menu bar.
 
@@ -17710,6 +16518,11 @@ mail before saving the mail (@pxref{Washing Mail}).
 @item
 Emphasized text can be properly fontisized:
 
+@lisp
+(add-hook 'gnus-article-display-hook
+          'gnus-article-emphasize)
+@end lisp
+
 @end itemize
 
 
@@ -17861,6 +16674,12 @@ interesting.)
 @itemize @bullet
 
 @item
+Native @sc{mime} support is something that should be done.
+
+@item
+Really do unbinhexing.
+
+@item
  I would like the zombie-page to contain an URL to the source of the
 latest version of gnus or some explanation on where to find it.
 
@@ -17970,6 +16789,8 @@ Perhaps.
 @item
  warn user about `=' redirection of a group in the active file?
 @item
+ really unbinhex binhex files.
+@item
  take over the XEmacs menubar and offer a toggle between the XEmacs
 bar and the Gnus bar.
 @item
@@ -18069,6 +16890,8 @@ are in the cache.
 @item
  AUTHINFO GENERIC
 @item
+ support qmail maildir spools
+@item
  `run-with-idle-timer' in gnus-demon.
 @item
  stop using invisible text properties and start using overlays instead
@@ -18426,7 +17249,7 @@ mail-copies-to: never.
  new group parameter -- `post-to-server' that says to post
 using the current server.  Also a variable to do the same.
 @item
- the slave dribble files should auto-save to the slave file names.
+ the slave dribble files should autosave to the slave file names.
 @item
  a group parameter that says what articles to display on group entry, based
 on article marks.
@@ -18472,8 +17295,8 @@ From: Jason L Tibbitts III <tibbs@@hpc.uh.edu>
 @end example
 
 @item
- tanken var at nÃ¥r du bruker `gnus-startup-file' som prefix (FOO) til Ã¥ lete
-opp en fil FOO-SERVER, FOO-SERVER.el, FOO-SERVER.eld, kan du la den være en
+ tanken var at n\e,Ae\e(Br du bruker `gnus-startup-file' som prefix (FOO) til ilete
+opp en fil FOO-SERVER, FOO-SERVER.el, FOO-SERVER.eld, kan du la den v\e,Af\e(Bre en
 liste hvor du bruker hvert element i listen som FOO, istedet.  da kunne man
 hatt forskjellige serveres startup-filer forskjellige steder.
 
@@ -18546,8 +17369,8 @@ there was a sci.somethingelse group or section, then it should prompt
 for sci? first the sci.something? then sci.somethingelse?...
 
 @item
-Ja, det burde være en mÃ¥te Ã¥ si slikt.  Kanskje en ny variabel?
-`gnus-use-few-score-files'?  SÃ¥ kunne score-regler legges til den
+Ja, det burde v\e,Af\e(Bre en m\e,Ae\e(Bte \e,Ae\e(B si slikt.  Kanskje en ny variabel?
+`gnus-use-few-score-files'?  S\e,Ae\e(B kunne score-regler legges til den
 "mest" lokale score-fila.  F. eks. ville no-gruppene betjenes av
 "no.all.SCORE", osv.
 
@@ -18877,7 +17700,7 @@ the current process mark set onto the stack.
 
 @item
  gnus-article-hide-pgp
-Selv ville jeg nok ha valgt Ã¥ slette den dersom teksten matcher
+Selv ville jeg nok ha valgt islette den dersom teksten matcher
 @example
 "\\(This\s+\\)?[^ ]+ has been automatically signed by"
 @end example
@@ -18900,7 +17723,7 @@ home-brewed stuff for better reliability.
  add a way to select which NoCeM type to apply -- spam, troll, etc.
 
 @item
- nndraft-request-group should tally auto-save files.
+ nndraft-request-group should tally autosave files.
 
 @item
  implement nntp-retry-on-break and nntp-command-timeout.
@@ -19002,7 +17825,7 @@ file, for instance.
 
 @item
 With dummy roots, `^' and then selecing the first article
-in any other dummy thread will make Gnus highlight the
+in any other dummy thread will make gnus highlight the
 dummy root instead of the first article.
 
 @item
@@ -19026,7 +17849,7 @@ Implement gnus-batch-brew-soup.
 
 @item
 Group parameters and summary commands for un/subscribing to mailing
-lists.
+lists. 
 
 @item
 Introduce nnmail-home-directory.
@@ -19036,79 +17859,6 @@ gnus-fetch-group and friends should exit Gnus when the user
 exits the group.
 
 @item
-The jingle is only played on the second invocation of Gnus.
-
-@item
-Bouncing articles should do MIME.
-
-@item
-Crossposted articles should "inherit" the % or @ mark from the other
-groups it has been crossposted to, or something.  (Agent.)
-
-@item
-`S D r' should allow expansion of aliases.
-
-@item
-If point is on a group that appears multiple times in topics, and
-you press `l', point will move to the first instance of the group.
-
-@item
-Fetch by Message-ID from dejanews.
-
-<URL:http://search.dejanews.com/msgid.xp?MID=%3C62h9l9$hm4@@basement.replay.com%3E&fmt=raw>
-
-@item
-A spec for the group line format to display the number of
-agent-downloaded articles in the group.
-
-@item
-Some nntp servers never respond when posting, so there should be a
-timeout for all commands.
-
-@item
-When stading on a topic line and `t'-ing, point goes to the last line.
-It should go somewhere else.
-
-@item
-I'm having trouble accessing a newsgroup with a "+" in its name with
-Gnus.  There is a new newsgroup on msnews.microsoft.com named
-"microsoft.public.multimedia.directx.html+time" that I'm trying to
-access as
-"nntp+msnews.microsoft.com:microsoft.public.multimedia.directx.html+time"
-but it gives an error that it cant access the group.
-
-Is the "+" character illegal in newsgroup names?  Is there any way in
-Gnus to work around this?  (gnus 5.6.45 - XEmacs 20.4)
-
-@item
-
-When `#F', do:
-
-@example
-Subject: Answer to your mails 01.01.1999-01.05.1999
- --text follows this line--
-Sorry I killfiled you...
-
-Under the subject "foo", you wrote on 01.01.1999:
-> bar
-Under the subject "foo1", you wrote on 01.01.1999:
-> bar 1
-@end example
-
-@item
-Allow "orphan" scores in the Agent scoring.
-
-@item
-@example
-    - Edit article's summary line. 
-    - End edit
-    - Sort lines in buffer by subject
-
-    --> the old subject line appears in Summary buffer, not the one that was
-    just changed to.
-@end example
-
-@item
 Solve the halting problem.
 
 @c TODO
@@ -19430,11 +18180,13 @@ minimum.  You can, in fact, make do without them altogether---most of the
 useful data is in the summary buffer, anyway.  Set this variable to
 @samp{^NEVVVVER} or @samp{From:}, or whatever you feel you need.
 
+@item gnus-article-display-hook
 Set this hook to all the available hiding commands:
 @lisp
-(setq gnus-treat-hide-headers 'head
-      gnus-treat-hide-signature t
-      gnus-treat-hide-citation t)
+(setq gnus-article-display-hook
+      '(gnus-article-hide-headers
+        gnus-article-hide-signature
+        gnus-article-hide-citation))
 @end lisp
 
 @item gnus-use-full-window
@@ -19468,12 +18220,6 @@ only save @file{.newsrc.eld}.  This means that you will not be able to
 use any other newsreaders than Gnus.  This variable is @code{t} by
 default.
 
-@item gnus-read-newsrc-file
-If this is @code{nil}, Gnus will never read @file{.newsrc}---it will
-only read @file{.newsrc.eld}.  This means that you will not be able to
-use any other newsreaders than Gnus.  This variable is @code{t} by
-default.
-
 @item gnus-save-killed-list
 If this is @code{nil}, Gnus will not save the list of dead groups.  You
 should also set @code{gnus-check-new-newsgroups} to @code{ask-server}
@@ -19497,6 +18243,9 @@ Set @code{gnus-show-threads}, @code{gnus-use-cross-reference} and
 @code{gnus-nov-is-evil} to @code{nil} to make entering and exiting the
 summary buffer faster.
 
+Set @code{gnus-article-display-hook} to @code{nil} to make article
+processing a bit faster.
+
 
 @page
 @node Troubleshooting
@@ -19576,8 +18325,8 @@ Write to @samp{ding-request@@gnus.org} to subscribe.
 
 
 @page
-@node Gnus Reference Guide
-@section Gnus Reference Guide
+@node A Programmers Guide to Gnus
+@section A Programmer@'s Guide to Gnus
 
 It is my hope that other people will figure out smart stuff that Gnus
 can do, and that other people will write those smart things as well.  To
@@ -19715,7 +18464,7 @@ Takes two parameters, @var{function} and @var{group}.  If the backend
 
 @lisp
 (gnus-check-backend-function "request-scan" "nnml:misc")
-@result{} t
+=> t
 @end lisp
 
 @item gnus-read-method
@@ -20057,48 +18806,6 @@ and @var{article} may be @code{nil}.
 There should be no result data from this function.
 
 
-@item (nnchoke-request-set-mark GROUP ACTION &optional SERVER)
-
-Set/remove/add marks on articles. Normally Gnus handles the article
-marks (such as read, ticked, expired etc) internally, and store them in
-@code{~/.newsrc.eld}. Some backends (such as IMAP) however carry all
-information about the articles on the server, so Gnus need to propagate
-the mark information to the server.
-
-ACTION is a list of mark setting requests, having this format:
-
-@example
-(RANGE ACTION MARK)
-@end example
-
-Range is a range of articles you wish to update marks on. Action is
-@code{set}, @code{add} or @code{del}, respectively used for removing all
-existing marks and setting them as specified, adding (preserving the
-marks not mentioned) mark and removing (preserving the marks not
-mentioned) marks. Mark is a list of marks; where each mark is a
-symbol. Currently used marks are @code{read}, @code{tick}, @code{reply},
-@code{expire}, @code{killed}, @code{dormant}, @code{save},
-@code{download} and @code{unsend}, but your backend should, if possible,
-not limit itself to theese.
-
-Given contradictory actions, the last action in the list should be the
-effective one. That is, if your action contains a request to add the
-@code{tick} mark on article 1 and, later in the list, a request to
-remove the mark on the same article, the mark should in fact be removed.
-
-An example action list:
-
-@example
-(((5 12 30) 'del '(tick))
- ((10 . 90) 'add '(read expire))
- ((92 94) 'del '(read)))
-@end example
-
-The function should return a range of articles it wasn't able to set the
-mark on (currently not used for anything).
-
-There should be no result data from this function.
-
 @item (nnchoke-request-update-mark GROUP ARTICLE MARK)
 
 If the user tries to set a mark that the backend doesn't like, this
@@ -20625,12 +19332,12 @@ basically, with each header (ouch) having one slot.
 
 These slots are, in order: @code{number}, @code{subject}, @code{from},
 @code{date}, @code{id}, @code{references}, @code{chars}, @code{lines},
-@code{xref}, and @code{extra}.  There are macros for accessing and
-setting these slots---they all have predictable names beginning with
+@code{xref}.  There are macros for accessing and setting these
+slots---they all have predictable names beginning with
 @code{mail-header-} and @code{mail-header-set-}, respectively.
 
-All these slots contain strings, except the @code{extra} slot, which
-contains an alist of header/value pairs (@pxref{To From Newsgroups}).
+The @code{xref} slot is really a @code{misc} slot.  Any extra info will
+be put in there.
 
 
 @node Ranges
@@ -20724,7 +19431,7 @@ Here are two example group infos; one is a very simple group while the
 second is a more complex one:
 
 @example
-("no.group" 5 ((1 . 54324)))
+("no.group" 5 (1 . 54324))
 
 ("nnml:my.mail" 3 ((1 . 5) 9 (20 . 55))
                 ((tick (15 . 19)) (replied 3 6 (19 . 3)))
@@ -21133,3 +19840,4 @@ former).  The manual is unambiguous, but it can be confusing.
 @end iftex
 
 @c End:
+
diff --git a/texi/gnusref-ja.tex b/texi/gnusref-ja.tex
new file mode 100644 (file)
index 0000000..3a8a502
--- /dev/null
@@ -0,0 +1,735 @@
+% include file for the Gnus refcard and booklet
+\def\progver{5.0}\def\refver{5.0} % program and refcard versions
+\def\date{16 September 1995}
+\def\author{Vladimir Alexiev $<$vladimir@cs.ualberta.ca$>$}
+\raggedbottom\raggedright
+\newlength{\logowidth}\setlength{\logowidth}{6.861in}
+\newlength{\logoheight}\setlength{\logoheight}{7.013in}
+\newlength{\keycolwidth}
+\newenvironment{keys}[1]% #1 is the widest key
+  {\nopagebreak%\noindent%
+   \settowidth{\keycolwidth}{#1}%
+   \addtolength{\keycolwidth}{\tabcolsep}%
+   \addtolength{\keycolwidth}{-\columnwidth}%
+   \begin{tabular}{@{}l@{\hspace{\tabcolsep}}p{-\keycolwidth}@{}}}%
+  {\end{tabular}\\}
+\catcode`\^=12 % allow ^ to be typed literally
+\newcommand{\B}[1]{{\bf#1})}    % bold l)etter
+
+\def\Title{
+\begin{center}
+{\bf\LARGE Gnus \progver\ Reference \Guide\\}
+%{\normalsize \Guide\ version \refver}
+\end{center}
+}
+
+\newcommand\Logo[1]{\centerline{
+\makebox[\logoscale\logowidth][l]{\vbox to \logoscale\logoheight
+{\vfill\special{psfile=gnuslogo.#1}}\vspace{-\baselineskip}}}}
+
+\def\CopyRight{
+\begin{center}
+Copyright \copyright\ 1995 Free Software Foundation, Inc.\\*
+Copyright \copyright\ 1995 \author.\\*
+Created from the Gnus manual Copyright \copyright\ 1994 Lars Magne
+Ingebrigtsen.\\*
+and the Emacs Help Bindings feature (C-h b).\\*
+Gnus logo copyright \copyright\ 1995 Luis Fernandes.\\*
+\end{center}
+
+Permission is granted to make and distribute copies of this reference
+\guide{} provided the copyright notice and this permission are preserved on
+all copies.  Please send corrections, additions and suggestions to the
+above email address. \Guide{} last edited on \date.
+}
+
+\def\Notes{
+\subsec{Notes}
+{\samepage
+Gnus \e$B$OJ#;($G$9\e(B. \e$B8=:_$O\e(B 346 \e$B$b$NBPOCE*\e(B (\e$BMxMQ<T$N;HMQ$G$-$k\e(B) \e$B4X?t$,$"$j\e(B
+\e$B$^$9\e(B. \e$B$3$l$i$N\e(B 279 \e$B$O\e(B 2 \e$B$D$N<g%b!<%I\e(B (\e$B%0%k!<%W$H35N,\e(B/\e$B5-;v\e(B) \e$B$N$b$N$G$9\e(B. 
+\e$B$3$l$i$N4X?t$NB?$/$O0l$D$rD6$($k%-!<B+G{$,$"$j\e(B, \e$BCf$K$O\e(B 3, \e$B$5$i$K$O\e(B 4
+\e$BB+G{$N$b$N$5$($"$j$^$9\e(B. \e$B%-!<B+G{$NAm?t$O\e(B 389 \e$B$G$9\e(B. \e$B$G$9$+$i\e(B,  40 \% \e$B$N\e(B
+\e$B>l=j$N@aLs$N$?$a$K\e(B, \e$B$3$N\e(B \guide \e$B$G$OA4$F$N4X?t$O\e(B ``\e$B$h$jO@M}E*\e(B'' \e$B$JB+G{\e(B
+\e$B$G0lEY$@$1I=<($5$l$F$$$^$9\e(B. \e$BB>$NB+G{$O5-=R$N:G=i$K3g8L$NCf$GM?$($i$l$F\e(B
+\e$B$$$^$9\e(B. 
+
+\e$BB?$/$N\e(B gnus \e$B$NL?Na$O?tCM0z?t$K1F6A$5$l$^$9\e(B. \e$BIaDL$O%a%?%-!<$r2!$7$F$$$k\e(B
+\e$B4V$K@\F,0z?t$rF~NO$7$^$9$,\e(B, \e$B$?$$$F$$$N\e(B gnus \e$B$N%b!<%I$G$O\e(B, \e$B?t;z$,<+J,<+\e(B
+\e$B?H$rA^F~$7$J$$$?$a\e(B, \e$B%a%?$r;H$&I,MW$O$"$j$^$;$s\e(B. \e$B@\F,0z?t$NIU$$$?$H$-$N\e(B
+\e$B?6$kIq$$$O\e(B [\e$B3Q3g8L\e(B] \e$B$G=q$+$l$F$$$^$9\e(B. \e$B@\F,0z?t$O$7$P$7$P\e(B
+
+\quad [\e$B5wN%\e(B] \e$B%]%$%s%H$,$I$N$/$i$$$N%*%V%8%'%/%H$rHt$P$9$+\e(B. 
+
+\quad [\e$BHO0O\e(B] \e$B$I$N$/$i$$$N%*%V%8%'%/%H$,:nMQ$5$l$k$+\e(B (\e$B8=:_$NJ*$r4^$`\e(B). 
+
+\quad [p/p] ``\e$B%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47\e(B'': \e$B@\F,0z?t$,M?$($i$l$k$H\e(B, \e$B:nMQ\e(B
+\e$B$9$kBP>]$N?t$r7hDj$7$^$9\e(B. \e$B%W%m%;%90u\e(B \# \e$B$G0u$NIU$$$?BP>]$,$"$l$P\e(B, \e$B$=$l\e(B
+\e$B$i$,:nMQ$5$l$^$9\e(B. \e$B$=$&$G$J$1$l$P\e(B, \e$B8=:_$NBP>]$@$1$,1F6A$r<u$1$^$9\e(B. 
+
+\quad [\e$B%l%Y%k\e(B] \e$B%0%k!<%W9VFIEY%l%Y%k$G$9\e(B. \e$BF1Ey$+$=$l$h$jDc$$%0%k!<%W$N\e(B
+\e$B$_$,:nMQ$N1F6A$r<u$1$^$9\e(B. \e$B@\F,0z?t$,M?$($i$l$J$$$H\e(B, 
+`gnus-group-default-list-level' \e$B$,;H$o$l$^$9\e(B. 
+`gnus-group-use-permanent-levels' \e$B$,??$G$"$k$H\e(B, `g' \e$B$H\e(B `l' \e$BL?Na$X$N@\\e(B
+\e$BF,0z?t$O=i4|%l%Y%k$b@_Dj$7$^$9\e(B. 
+
+\quad [score] \e$B5-;v$N%9%3%"$G$9\e(B. \e$B@\F,0z?t$,M?$($i$l$J$$$H\e(B, 
+`gnus-summary-default-score' \e$B$,;H$o$l$^$9\e(B. 
+%Some functions were not yet documented at the time of creating this
+%\guide and are clearly indicated as such.
+\\*[\baselineskip]
+\begin{keys}{C-c C-i}
+C-c C-i & Gnus \e$B$N%*%s%i%$%s\e(B {\bf info} \e$B$K0\F0$7$^$9\e(B.\\
+C-c C-b & Gnus \e$B$N\e(B {\bf bug} \e$BJs9p$rAw$j$^$9\e(B.\\
+\end{keys}
+}}
+
+\def\GroupLevels{
+\subsec{\e$B%0%k!<%W9VFIEY%l%Y%k\e(B}
+\e$B2<$NI=$O=i4|\e(B gnus \e$B%l%Y%k$r;H$C$F$$$k$3$H$r2>Dj$7$F$$$^$9\e(B. \e$BMxMQ<TMQ%l%Y\e(B
+\e$B%k$r6u$NMs$K=q$$$F$/$@$5$$\e(B. \\[1\baselineskip]
+
+\begin{tabular}{|c|l|l|}
+\hline
+\e$B%l%Y%k\e(B & \e$B%0%k!<%W\e(B & \e$B>uBV\e(B \\
+\hline
+1 & \e$B%a!<%k%0%k!<%W\e(B &             \\
+2 & \e$B%a!<%k%0%k!<%W\e(B &             \\
+3 &               & \e$B9VFI\e(B         \\
+4 &               &              \\
+5 & \e$B=i4|0lMw%l%Y%k\e(B &             \\
+\hline
+6 &               & \e$BHs9VFI\e(B       \\
+7 &               &              \\
+\hline
+8 &               & \e$B%>%s%S\e(B       \\
+\hline
+9 &               & \e$B:o=|\e(B         \\
+\hline
+\end{tabular}
+}
+
+\def\Marks{
+\subsec{\e$B0u;X<(J8;z\e(B}
+{\samepage \e$BL?Na$,D>@\0u$rIU$1$k>l9g$O\e(B, \e$B3g8L$GI=<($5$l$F$$$^$9\e(B. \\*
+\newlength{\markcolwidth}
+\settowidth{\markcolwidth}{` '}% widest character
+\addtolength{\markcolwidth}{4\tabcolsep}
+\addtolength{\markcolwidth}{-\columnwidth}
+\newlength{\markdblcolwidth}
+\setlength{\markdblcolwidth}{\columnwidth}
+\addtolength{\markdblcolwidth}{-2\tabcolsep}
+\begin{tabular}{|c|p{-\markcolwidth}|}
+\hline
+\multicolumn{2}{|p{\markdblcolwidth}|}{{\bf ``\e$B4{FI\e(B'' \e$B0u\e(B.}
+  \e$B$3$l$i$N0u$NA4$F$O35N,9T$N:G=i$N7e$K8=$l$^$9$N$G\e(B, \e$B6&B8$9$k$3$H$O$G$-\e(B
+  \e$B$^$;$s\e(B.}\\
+\hline
+` ' & (M-u, M SPC, M c) \e$BL$FI\e(B.\\
+!   & (!, M !, M t) \e$B2D;k\e(B (\e$B6=L#?<$$\e(B).\\
+?   & (?, M ?) \e$BJ]N1\e(B (\e$B%U%)%m!<%"%C%W$N$_$K6=L#$,$"$k\e(B).\\
+C   & (C, S c) {\bf \e$B%-%c%s%;%k:Q$_\e(B} (\e$B<+J,<+?H$N5-;v$N$_\e(B.\\
+\hline\hline
+\multicolumn{2}{|p{\markdblcolwidth}|}{\e$B2<$N0u$O5-;v$,4{FI\e(B (\e$B@Z$i$l$?\e(B, 
+  \e$B6=L#$N$J$$\e(B) \e$B$H$$$&$3$H$r0UL#$7\e(B, \e$BBgBNF1MM$J8z2L$r;}$A$^$9\e(B. \e$B$7$+$7L?Na\e(B
+  \e$B$K$O$=$l$i$GL@$i$+$J0c$$$,$"$k$b$N$b$"$j$^$9\e(B (\e$BNc\e(B. \ M M-C-r, \e$BE,1~%9\e(B
+  \e$B%3%"\e(B).}\\
+\hline
+r   & (d, M d, M r) \e$B>C5n\e(B (\e$B4{FI\e(B ({\bf read}) \e$B$H$7$F0uIU$1$i$l$?\e(B).\\
+C   & (M C; M C-c; M H; c, Z c; Z n; Z C) {\bf catch-up} \e$B$G@Z$i$l$?\e(B.\\
+O   & \e$B8E$$\e(B ({\bf old}) (\e$BA02s$N%;%C%7%g%s$G4{FI$N0u$,IU$$$?\e(B).\\
+K   & (k, M k; C-k, M K) \e$B@Z$i$l$?\e(B ({\bf Killed}).\\
+R   & \e$B4{FI\e(B ({\bf read}) (\e$B<B:]$K1\Mw$5$l$?\e(B).\\
+X   & \e$B%-%k%U%!%$%k$G@Z$i$l$?\e(B.\\
+Y   & \e$BDc%9%3%"$K$h$C$F@Z$i$l$?\e(B.\\
+\hline\multicolumn{2}{c}{\vspace{1ex}}\\\hline
+\multicolumn{2}{|p{\markdblcolwidth}|}{\e$BB>$N0u\e(B ({\bf Other marks})}\\
+\hline
+\#  & (\#, M \#, M P p) \e$B<B9T2DG=\e(B (\e$B<!$N:nMQ$G1F6A$r<u$1$k\e(B).\\
+A   & \e$B1~Ez:Q$_\e(B ({\bf answered}) (\e$B%U%)%m!<%"%C%W$b$7$/$OJVEz$r$7$?\e(B).\\
++   & \e$B=i4|%9%3%"$h$j>e\e(B.\\
+$-$ & \e$B=i4|%9%3%"$h$j2<\e(B.\\
+=   & \e$B;R$r;}$D\e(B (\e$B$=$N2<$K%9%l%C%I$r\e(B). `\%e' `gnus-summary-line-format'
+\e$B$r2C$($^$9\e(B.\\
+
+\hline
+\end{tabular}
+}}
+
+\def\GroupMode{
+\sec{\e$B%0%k!<%W%b!<%I\e(B}
+\begin{keys}{C-c M-C-x}
+RET     & (=) \e$B$3$N%0%k!<%W$rA*Br$7$^$9\e(B. [\e$B@\F,0z?t\e(B: \e$B$I$l$/$i$$$N\e(B (\e$B4{FI\e(B)
+\e$B5-;v$r<hF@$9$k$+\e(B. \e$B@5\e(B: \e$B:G?7$N5-;v\e(B, \e$BIi\e(B: \e$B:G8E$N$b$N\e(B.]\\
+SPC     & \e$B$3$N%0%k!<%W$rA*Br$7$F\e(B, \e$B:G=i$NL$FI5-;v$rI=<($7$^$9\e(B. [\e$B@\F,0z\e(B
+\e$B?t$O>e$HF1$8$G$9\e(B.]\\ 
+?       & \e$BHs>o$KC;$$%X%k%W%a%C%;!<%8$rM?$($^$9\e(B.\\
+$<$     & \e$B%0%k!<%W%P%C%U%!$N:G=i$K0\F0$7$^$9\e(B.\\
+$>$     & \e$B%0%k!<%W%P%C%U%!$N:G8e$K0\F0$7$^$9\e(B.\\
+,       & \e$B:GDc%l%Y%k$NL$FI5-;v$KHt$S$^$9\e(B.\\
+.       & \e$B:G=i$NL$FI5-;v$N$"$k%0%k!<%W$KHt$S$^$9\e(B.\\
+^       & \e$B%5!<%P!<%P%C%U%!%b!<%I$KF~$j$^$9\e(B.\\
+a       & \e$B5-;v\e(B ({\bf article}) \e$B$r%0%k!<%W$KEj9F$7$^$9\e(B.\\
+b       & \e$B56\e(B ({\bf bogus}) \e$B%0%k!<%W$r8+$D$1$F>C5n$7$^$9\e(B.\\
+c       & \e$BA4$F$NL$0u5-;v$K4{FI$N0u$rIU$1$^$9\e(B ({\bf catch-up}). [p/p]\\
+g       & \e$B?7$7$$5-;v$,$"$k$+\e(B, \e$B%5!<%P!<$rD4$Y$^$9\e(B ({\bf get}). [\e$B%l%Y%k\e(B]\\
+j       & \e$B%0%k!<%W$KHt$S$^$9\e(B ({\bf jump}).\\
+m       & \e$BC/$+$K%a!<%k\e(B ({\bf mail}) \e$B$rAw$j$^$9\e(B.\\
+n       & \e$BL$FI5-;v$N$"$k<!\e(B ({\bf next}) \e$B$N%0%k!<%W$K0\F0$7$^$9\e(B.
+[\e$B5wN%\e(B]\\
+p       & (DEL) \e$BL$FI5-;v$N$"$kA0\e(B ({\bf previous}) \e$B$N%0%k!<%W$K0\F0$7$^\e(B
+\e$B$9\e(B.
+[\e$B5wN%\e(B]\\ 
+q       & Gnus \e$B$r=*N;\e(B ({\bf Quit}) \e$B$7$^$9\e(B.\\
+r       & \e$B=i4|2=%U%!%$%k$rFI$_9~$_$^$9\e(B (\e$B:F@_Dj\e(B ({\bf reset})).\\
+s       & `.newsrc.eld' \e$B%U%!%$%k$rJ]B8\e(B ({\bf save}) \e$B$7$^$9\e(B (\e$B$=$l$H\e(B, 
+`gnus-save-newsrc-file' \e$B$,??$G$"$l$P\e(B `.newsrc' \e$B$bJ]B8$7$^$9\e(B.)\\ 
+z       & Gnus \e$B$r0l;~Dd;_$7$^$9\e(B (\e$B%P%C%U%!$r@Z$j$^$9\e(B).\\
+B       & \e$B30It%5!<%P!<$r354Q\e(B ({\bf browse}) \e$B$7$^$9\e(B.\\
+C       & \e$B$3$N%0%k!<%W$NA4$F$N5-;v$r4{FI$H$7$F0uIU$1$^$9\e(B ({\bf
+Catch-up}). [p/p]\\
+F       & \e$B?7$7$$%0%k!<%W$r8+$D$1\e(B ({\bf find}) \e$B$=$l$i$K:n6H$r<B9T$7$^$9\e(B.\\ 
+N       & \e$B<!\e(B ({\bf next}) \e$B$N%0%k!<%W$K0\F0$7$^$9\e(B. [\e$B5wN%\e(B]\\
+P       & Go to the {\bf previous} group. [\e$B5wN%\e(B]\\
+Q       & \e$B5/F0\e(B (.newsrc) \e$B%U%!%$%k$rJ]B8$;$:$K\e(B Gnus \e$B$r=*N;\e(B ({\bf Quit})
+\e$B$7$^$9\e(B.\\
+R       & Gnus \e$B$r:F5/F0\e(B ({\bf Restart}) \e$B$7$^$9\e(B.\\
+V       & Gnus \e$B%P!<%8%g%s\e(B ({\bf version}) \e$BHV9f$rI=<($7$^$9\e(B.\\
+Z       & \e$B%I%j%V%k%P%C%U%!$r>C5n$7$^$9\e(B.\\
+C-c C-d & \e$B$3$N%0%k!<%W$N@bL@\e(B ({\bf description}) \e$B$rI=<($7$^$9\e(B. [\e$B@\F,0z\e(B
+\e$B?t\e(B: \e$B%5!<%P!<$+$i:FFI$_9~$_$r$7$^$9\e(B.]\\ 
+C-c C-s & \e$B%0%k!<%W$rL>A0\e(B, \e$B%0%k!<%WL>\e(B, \e$B%l%Y%k\e(B
+(`gnus-group-sort-function' \e$B$K0MB8$7$^$9\e(B) \e$B$GL$FI5-;v$N?t$GJB$S49$(\e(B
+({\bf Sort}) \e$B$^$9\e(B.   .\\
+C-c C-x & \e$B$3$N%0%k!<%W$NA4$F$N;~8B>C5n2DG=5-;v$r;~8B>C5n\e(B ({\bf
+expiry}) \e$B$N2aDx$K$+$1$^$9\e(B.\\
+C-c M-C-x & \e$B$3$N%0%k!<%W$NA4$F$N5-;v$r;~8B>C5n\e(B ({\bf expiry}) \e$B$N2aDx$K\e(B
+\e$B$+$1$^$9\e(B.\\
+C-x C-t & 2\e$B$D$N%0%k!<%W$N0LCV$rJQ99$7$^$9\e(B ({\bf transpose}).\\
+M-d     & \e$BA4$F$N%0%k!<%W$N@bL@\e(B ({\bf describe}) \e$B$r$7$^$9\e(B. [\e$B@\F,0z?t\e(B:
+\e$B%5!<%P!<$+$i@bL@$r:FFI$_9~$_$7$^$9\e(B.]\\
+M-f     & \e$B$3$N%0%k!<%W$N\e(B {\bf FAQ} \e$B$r\e(B (ange-ftp \e$B$r;H$C$F\e(B) \e$B<hF@$7$^$9\e(B.\\
+M-g     & \e$B$3$N%0%k!<%W$K?7$7$$5-;v$,$"$k$+$I$&$+\e(B, \e$B%5!<%P!<$rD4$Y$^$9\e(B.
+({\bf get}). [p/p]\\
+M-n     & \e$BA0\e(B ({\bf previous}) \e$B$NF1$8$+Dc$$%l%Y%k$NL$FI%0%k!<%W$X0\F0$7\e(B
+\e$B$^$9\e(B. [\e$B5wN%\e(B]\\ 
+M-p     & \e$B<!\e(B ({\bf next}) \e$B$NF1$8$+Dc$$%l%Y%k$NL$FI%0%k!<%W$X0\F0$7$^$9\e(B.
+[\e$B5wN%\e(B]\\ 
+\end{keys}
+}
+
+\def\GroupCommands{
+\subsec{\e$B%0%k!<%W$N0lMwI=<(\e(B}
+{\samepage
+\begin{keys}{A m}
+A a     & (C-c C-a) \e$B@55,I=8=$K9g$&A4$F$N%0%k!<%W$r0lMwI=<($7$^$9\e(B ({\bf
+apropos}).\\ 
+A d     & \e$BL>A0$+@bL@\e(B ({\bf descriptions}) \e$B$,@55,I=8=$K9g$&A4$F$N%0%k!<\e(B
+\e$B%W$r0lMwI=<($7$^$9\e(B.\\ 
+A k     & (C-c C-l) \e$BA4$F$N:o=|$5$l$?\e(B ({\bf killed}) \e$B%0%k!<%W$r0lMwI=<(\e(B
+\e$B$7$^$9\e(B.\\
+A m     & \e$B@55,I=8=$K9g$$\e(B ({\bf match}), \e$BL$FI5-;v$r;}$D%0%k!<%W$r0lMwI=\e(B
+\e$B<($7$^$9\e(B. [\e$B%l%Y%k\e(B]\\ 
+A s     & (l) \e$BL$FI5-;v$N$"$k9VFI%0%k!<%W\e(B {\bf subscribed} \e$B$r0lMwI=<($7\e(B
+\e$B$^$9\e(B. [\e$B%l%Y%k\e(B]\\
+A u     & (L) \e$BA4$F$N%0%k!<%W\e(B (\e$BHs9VFI\e(B ({\bf unsubscribed}) \e$B$r4^$`\e(B) \e$B$r0l\e(B
+\e$BMwI=<($7$^$9\e(B. [\e$B@\F,<-$,M?$($i$l$J$$$H\e(B, \e$B=i4|CM$O%l%Y%k\e(B7\e$B$G$9\e(B]\\ 
+A z     & \e$B%>%s%S\e(B ({\bf zombie}) \e$B%0%k!<%W$r0lMwI=<($7$^$9\e(B.\\
+A M     & \e$B@55,I=8=$K9g$&\e(B ({\bf match}) \e$BA4$F$N%0%k!<%W$r0lMwI=<($7$^$9\e(B.\\
+\end{keys}
+}
+
+\subsec{\e$B30It%0%k!<%W$N:n@.\e(B/\e$BJT=8\e(B}
+{\samepage
+\e$BA*BrJ}K!$O3g8L$NCf$K<($5$l$F$$$^$9\e(B.\\*
+\begin{keys}{G m}
+G a     & Gnus \e$B%j%9%H\e(B {\bf archive} \e$B%0%k!<%W$r:n$j$^$9\e(B. (ange-ftp \e$B$rDL\e(B
+\e$B$8$F$N\e(B nndir)\\
+G d     & \e$B%G%#%l%/%H%j!<\e(B ({\bf directory}) \e$B%0%k!<%W\e(B \e$B$r:n$j$^$9\e(B (\e$BA4$F$N\e(B
+\e$B%U%!%$%k$OEj9F5-;v$G\e(B, \e$B%U%!%$%k$O?t;z$NL>A0$G$J$/$F$O$J$^$;$s\e(B).
+(nndir)\\
+G e     & (M-e) \e$B$3$N%0%k!<%W$NA*BrJ}K!$rJT=8\e(B ({\bf edit}) \e$B$7$^$9\e(B.\\
+G f     & \e$B%U%!%$%k\e(B ({\bf file}) \e$B$K4p$E$$$?%0%k!<%W$r:n$j$^$9\e(B.
+(nndoc)\\
+G h     & Gnus \e$B$N%X%k%W\e(B ({\bf help}) (\e$B@bL@\e(B) \e$B%0%k!<%W$r:n@.$7$^$9\e(B.
+(nndoc)\\
+G k     & {\bf kiboze} \e$B%0%k!<%W$r:n@.$7$^$9\e(B. (nnkiboze)\\
+G m     & \e$B?7$7$$%0%k!<%W$r:n@.\e(B ({\bf make}) \e$B$7$^$9\e(B.\\
+G p     & \e$B$3$N%0%k!<%W$N%Q%i%a!<%?\e(B ({\bf parameters}) \e$B$rJT=8$7$^$9\e(B.\\
+G v     & \e$B$3$N%0%k!<%W$r2>A[\e(B ({\bf virtual}) \e$B%0%k!<%W$KDI2C$7$^$9\e(B.
+[p/p]\\
+G D     & \e$B%G%#%l%/%H%j!<\e(B ({\bf directory}) \e$B$K\e(B (\e$B0l;~\e(B) \e$B%0%k!<%W$H$7$FF~\e(B
+\e$B$j$^$9\e(B. (\e$B5-;v$N4{FI$r5-O?$7$J$$\e(B nneething.)\\
+G E     & \e$B$3$N%0%k!<%W$N>pJs\e(B (\e$BA*BrJ}K!\e(B, \e$B5-;v$N4{FI\e(B, \e$B$J$I$J$I\e(B) \e$B$rJT=8\e(B
+({\bf edit}) \e$B$7$^$9\e(B.\\
+G V     & \e$B?7$7$$6u$N2>A[\e(B ({\bf virtual}) \e$B%0%k!<%W$r:n@.$7$^$9\e(B.
+(nnvirtual)\\
+\end{keys}
+\e$B%a!<%k%0%k!<%W$r:n@.$7$F%a!<%k$r\e(B nnmbox, nnbabyl, nnml, nnmh, nnfolder
+\e$B$N\e(B1\e$B$D$NJ}K!$r;H$C$F\e(BGnus \e$B$GFI$`$3$H$b$G$-$^$9\e(B (\e$B%a!<%j%0%j%9%H$r9VFI$7$F\e(B
+\e$B$$$k$HHs>o$KLr$KN)$A$^$9\e(B). \e$B%*%s%i%$%s\e(B info \e$B$GFI$s$G$/$@$5$$\e(B (C-c C-i g
+Reading Mail RET).
+}
+
+%\subsubsec{Soup Commands}
+%\begin{keys}{G s w}
+%G s b   & gnus-group-brew-soup: not documented.\\
+%G s p   & gnus-soup-pack-packet: not documented.\\
+%G s r   & nnsoup-pack-replies: not documented.\\
+%G s s   & gnus-soup-send-replies: not documented.\\
+%G s w   & gnus-soup-save-areas: not documented.\\
+%\end{keys}
+
+\subsec{\e$B%0%k!<%W$N0uIU$1\e(B}
+\begin{keys}{M m}
+M m     & (\#) \e$B$3$N%0%k!<%W$K%W%m%;%90u\e(B {\bf mark} \e$B$rIU$1$^$9\e(B. [\e$BHO0O\e(B]\\
+M u     & (M-\#) \e$B$3$N%0%k!<%W$+$i%W%m%;%90u$r<h$j=|$-$^$9\e(B (\e$B0u>C5n\e(B {\bf
+unmark}).
+[\e$BHO0O\e(B]\\ 
+M w     & \e$B8=:_$N%j!<%8%g%s$NA4$F$N%0%k!<%W$K0u$rIU$1$^$9\e(B.\\
+\end{keys}
+
+\subsec{\e$BHs9VFI\e(B, \e$B%0%k!<%W$r@Z$jE=$j$9$k\e(B}
+\begin{keys}{S w}
+S k     & (C-k) \e$B$3$N%0%k!<%W$r@Z$j$^$9\e(B ({\bf kill}).\\
+S l     & \e$B$3$N%0%k!<%W$N%l%Y%k\e(B ({\bf level}) \e$B$r@_Dj$7$^$9\e(B. [p/p]\\
+S s     & (U) \e$B%0%k!<%W$NF~NO$rB%?J$7$F$=$N9VFI\e(B ({\bf subscription}) \e$B$r\e(B
+\e$B@Z$jBX$($^$9\e(B.\\
+S t     & (u) \e$B$3$N%0%k!<%W$N9VFI$r@Z$jBX$(\e(B ({\bf toggle}) \e$B$^$9\e(B.
+[p/p]\\
+S w     & (C-w) \e$B%j!<%8%g%s$NA4$F$N%0%k!<%W$r@Z$j$^$9\e(B.\\
+S y     & (C-y) \e$B:G8e$K\e(B kill \e$B$5$l$?%0%k!<%W$rE=$j$^$9\e(B ({\bf yank}) .\\
+S z     & \e$BA4$F$N%>%s%S\e(B ({\bf zombie}) \e$B%0%k!<%W$r@Z$j$^$9\e(B.\\
+\end{keys}
+}
+
+\def\SummaryMode{
+\sec{\e$B35N,%b!<%I\e(B}  %{Summary and Article Modes}
+\begin{keys}{SPC}
+SPC     & (A SPC, A n) \e$B5-;v$NA*Br\e(B, 1\e$B%Z!<%8%9%/%m!<%k\e(B, \e$B<!$N5-;v$X$N0\F0\e(B, 
+\e$B$G$9\e(B.\\ 
+DEL     & (A DEL, A p, b) \e$B$3$N5-;v$r\e(B1\e$B%Z!<%8%9%/%m!<%k$7$FLa$7$^$9\e(B. [\e$B5w\e(B
+\e$BN%\e(B]\\
+RET     & \e$B$3$N5-;v$r0l9T@h$K%9%/%m!<%k$7$^$9\e(B. [\e$B5wN%\e(B]\\
+=       & \e$B35N,$N%&%#%s%I%&$r3HD%$7$^$9\e(B. [\e$B@\F,<-\e(B: \e$B5-;v%&%#%s%I%&$rI=<(\e(B
+\e$B$9$k$h$&$K=L$a$^$9\e(B]\\
+$<$     & (A $<$, A b) \e$B$3$N5-;v$N:G=i$K%9%/%m!<%k$7$^$9\e(B.\\
+$>$     & (A $>$, A e) \e$B$3$N5-;v$N:G8e$K%9%/%m!<%k$7$^$9\e(B.\\
+\&      & \e$B@55,I=8=$K9g$&A4$F$N5-;v$KL?Na$r<B9T$7$^$9\e(B. [\e$B@\F,<-\e(B: \e$B8e$m$K\e(B
+\e$B0\F0$7$^$9\e(B.]\\
+j       & (G g) \e$B5-;vHV9f$r?R$M$F\e(B, \e$B$=$N35N,9T$KHt$S\e(B ({\bf jump}) \e$B$^$9\e(B.\\
+C-t     & \e$B35N,9T$N@Z$j<h$j\e(B ({\bf truncation}) \e$B$r@Z$j49$($^$9\e(B.\\
+M-\&    & \e$B%W%m%;%90u$NIU$$$F$$$kA4$F$N5-;v$KL?Na$r<B9T$7$^$9\e(B.\\
+M-k     & \e$B$3$N%0%k!<%W$N\e(B {\bf kill} \e$B%U%!%$%k$rJT=8$7$^$9\e(B.\\
+M-n     & (G M-n) \e$B<!$N\e(B ({\bf next}) \e$BL$FI5-;v$N35N,9T$K0\F0$7$^$9\e(B. [\e$B5w\e(B
+\e$BN%\e(B]\\ 
+M-p     & (G M-p) \e$BA0$N\e(B ({\bf previous}) \e$BL$FI5-;v$N35N,9T$K0\F0$7$^$9\e(B.
+[\e$B5wN%\e(B]\\ 
+M-r     & \e$B@55,I=8=$GA0$NA4$F$N5-;v$r8!:w$7$^$9\e(B.\\
+M-s     & \e$B@55,I=8=$GB3$/A4$F$N5-;v$r8!:w\e(B ({\bf earch}) \e$B$7$^$9\e(B.\\
+M-K     & \e$BAm9g\e(B {\bf kill} \e$B%U%!%$%k$rJT=8$7$^$9\e(B.\\
+\end{keys}
+}
+
+\def\SortSummary{
+\subsec{\e$B35N,%P%C%U%!$NJB$S49$(\e(B}
+\begin{keys}{C-c C-s C-a}
+C-c C-s C-a & \e$BCx<T\e(B ({\bf author}) \e$B$G35N,$rJB$S49$($^$9\e(B.\\
+C-c C-s C-d & \e$BF|IU$1\e(B ({\bf date}) \e$B$G35N,$rJB$S49$($^$9\e(B.\\
+C-c C-s C-i & \e$B5-;v$N%9%3%"$G35N,$rJB$S49$($^$9\e(B.\\
+C-c C-s C-n & \e$B5-;v$NHV9f\e(B ({\bf number}) \e$B$G35N,$rJB$S49$($^$9\e(B.\\
+C-c C-s C-s & \e$BI=Bj\e(B ({\bf subject}) \e$B$G35N,$rJB$S49$($^$9\e(B.\\
+\end{keys}
+}
+
+\def\Asubmap{
+\subsec{\e$B5-;v%P%C%U%!L?Na\e(B}
+\begin{keys}{A m}
+A g     & (g) \e$B$3$N5-;v$r\e(B(\e$B:F\e(B)\e$B<hF@$7$^$9\e(B ({\bf get}). [\e$B@\F,<-\e(B: \e$B5-;v$rI=\e(B
+\e$B<($9$k$@$1$G$9\e(B.]\\ 
+A r     & (^, A ^) \e$B$3$N5-;v$N?F$K0\F0$7$^$9\e(B ({\bf References} \e$B%X%C%@!<\e(B
+\e$B$G$9\e(B).\\ 
+M-^     & \e$BM?$($i$l$?\e(B Message-ID \e$B$N5-;v$r<hF@$7$^$9\e(B.\\
+A s     & (s) \e$B5-;v%P%C%U%!$G\e(B i{\bf search} \e$B$r<B9T$7$^$9\e(B.\\
+A D     & (C-d) \e$BJL$N%0%k!<%W$K=8G[G[Aw%a%C%;!<%8$r:FG[Aw\e(B ({\bf
+digestify}) \e$B$7$^$9\e(B.\\
+\end{keys}
+}
+
+\def\Bsubmap{
+\subsec{\e$B%a!<%k%0%k!<%WL?Na\e(B}
+{\samepage
+\e$B$3$l$i$NL?Na\e(B (`B c' \e$B$r=|$/\e(B) \e$B$O%a!<%k%0%k!<%W$G$N$_M-8z$G$9\e(B.\\*
+\begin{keys}{B M-C-e}
+B DEL   & {\e$B%a!<%k5-;v$r%G%#%9%/$+$i>C5n\e(B (\bf delete}) \e$B$7$^$9\e(B (!). [p/p]\\
+B c     & \e$B$3$N5-;v$r$I$3$+$N%0%k!<%W$+$i%a!<%k%0%k!<%W$KJ#@=\e(B ({\bf
+copy}) \e$B$7$^$9\e(B. [p/p]\\
+B e     & \e$B$3$N%0%k!<%W$NA4$F$N;~8B>C5n2DG=5-;v$r;~8B>C5n\e(B ({\bf
+expire}) \e$B$7$^$9\e(B. [p/p]\\
+B i     & \e$B%i%s%@%`$J%U%!%$%k$r$3$N%0%k!<%W$N<h$j9~$_\e(B ({\bf import}) \e$B$^\e(B
+\e$B$9\e(B.\\
+B m     & \e$B$"$k%a!<%k%0%k!<%W$+$iJL$N%0%k!<%W$X5-;v$r0\F0\e(B ({\bf move})
+\e$B$7$^$9\e(B. [p/p]\\
+B q     & \e$BFC5iJ,3d$G5-;v$,$I$3$K9T$/$+$r?R$M$^$9\e(B ({\bf query}).\\
+B r     & \e$B$3$N%a!<%k5-;v$r:F%9%W!<%k\e(B ({\bf respool}) \e$B$7$^$9\e(B. [p/p]\\
+B w     & (e) \e$B$3$N5-;v$rJT=8$7$^$9\e(B.\\
+B M-C-e & \e$B$3$N%0%k!<%W$NA4$F$N;~8B>C5n2DG=5-;v$r:o=|\e(B ({\bf expunge})
+(\e$B%G%#%9%/$+$i>C$7$^$9\e(B) (!). [p/p]\\ 
+\end{keys}
+}}
+
+\def\Gsubmap{
+\subsec{\e$B5-;vA*Br\e(B}
+{\samepage
+\e$B$3$l$i$NL?Na$OBP>]5-;v$rA*Br$7$^$9\e(B. \e$B@\F,0z?t$OM}2r$7$^$;$s\e(B. \\*
+\begin{keys}{G C-n}
+G b     & (,) \e$B:G9b\e(B ({\bf best}) \e$B$N5-;v$K0\F0$7$^$9\e(B (\e$B:G9b%9%3%"$N$b$N$G\e(B
+\e$B$9\e(B).\\
+G f     & (.) \e$B:G=i\e(B ({\bf first}) \e$B$NL$FI5-;v$K0\F0$7$^$9\e(B.\\
+G l     & (l) \e$B:G8e\e(B ({\bf last}) \e$B$N4{FI5-;v$K0\F0$7$^$9\e(B.\\
+G n     & (n) \e$B<!\e(B ({\bf next}) \e$B$NL$FI5-;v$K0\F0$7$^$9\e(B.\\
+p       & \e$BA0\e(B ({\bf previous}) \e$B$NL$FI5-;v$K0\F0$7$^$9\e(B.\\
+G p     & \e$B35N,$NMzNr$+$i5-;v$r<h$j=P$7\e(B ({\bf pop}) \e$B$=$l$K0\F0$7$^$9\e(B.\\
+G N     & (N) \e$B<!\e(B ({\bf next}) \e$B$N5-;v$K0\F0$7$^$9\e(B\\
+G P     & (P) \e$BA0\e(B ({\bf previous}) \e$B$N5-;v$K0\F0$7$^$9\e(B.\\
+G C-n   & (M-C-n) \e$BF1$8I=Bj$N<!\e(B ({\bf next}) \e$B$N5-;v$K0\F0$7$^$9\e(B.\\
+G C-p   & (M-C-p) \e$BF1$8I=Bj$NA0\e(B ({\bf previous}) \e$B$N5-;v$K0\F0$7$^$9\e(B.\\
+\end{keys}
+}}
+
+\def\Hsubmap{
+\subsec{\e$B%X%k%WL?Na\e(B}
+\begin{keys}{H d}
+H d     & (C-c C-d) \e$B$3$N%0%k!<%W$N5-=R\e(B ({\bf describe}) \e$B$r$7$^$9\e(B. [\e$B@\\e(B
+\e$BF,<-\e(B: \e$B%5!<%P!<$+$i@bL@$r:FFI$_9~$_$7$^$9\e(B.]\\
+H f     & ange-ftp \e$B$r;H$C$F$3$N%0%k!<%W$N\e(B {\bf FAQ} \e$B$r<hF@$7$h$&$H$7$^\e(B
+\e$B$9\e(B.\\
+H h     & \e$BHs>o$KC;$$%X%k%W\e(B ({\bf help}) \e$B%a%C%;!<%8$rI=<($7$^$9\e(B.\\
+H i     & (C-c C-i) Gnus \e$B$N%*%s%i%$%s\e(B {\bf info} \e$B$K0\F0$7$^$9\e(B.\\
+H v     & Gnus \e$B$N%P!<%8%g%s\e(B ({\bf version}) \e$BHV9f$rI=<($7$^$9\e(B.\\
+\end{keys}
+}
+
+\def\Msubmap{
+\subsec{\e$B5-;v$K0u$rIU$1$k\e(B}
+\begin{keys}{M M-C-r}
+d       & (M d, M r) \e$B$3$N5-;v$K4{FI$N0u$rIU$1$F\e(B, \e$B<!$N$b$N$K0\F0$7$^$9\e(B.
+[\e$BHO0O\e(B]\\ 
+D       & \e$B$3$N5-;v$K4{FI$N0u$rIU$1$F\e(B, \e$BA0$N$b$N$K0\F0$7$^$9\e(B. [\e$BHO0O\e(B]\\
+u       & (!, M !, M t) \e$B$3$N5-;v$K2D;k0u\e(B (\e$B6=L#?<$$$H$7$F0u$rIU$1\e(B) \e$B<!$N\e(B
+\e$B$b$N$K0\F0$7$^$9\e(B. [\e$BHO0O\e(B]\\
+U       & \e$B$3$N5-;v$K2D;k0u$rIU$1\e(B, \e$BA0$N$b$N$K0\F0$7$^$9\e(B. [\e$BHO0O\e(B]\\ 
+M-u     & (M SPC, M c) \e$B$3$N5-;v$NA4$F$N0u$r>C5n$7\e(B, \e$B<!$N5-;v$K0\F0$7$^\e(B
+\e$B$9\e(B. [\e$BHO0O\e(B]\\ 
+M-U     & \e$B$3$N5-;v$NA4$F$N0u$r>C5n$7\e(B, \e$BA0$N5-;v$K0\F0$7$^$9\e(B. [\e$BHO0O\e(B]\\ 
+M ?     & (?) \e$B$3$N5-;v$KJ]N1$N0u$rIU$1$^$9\e(B (\e$B%U%)%m!<%"%C%W$K$@$16=L#$,\e(B
+\e$B$"$k\e(B). [\e$BHO0O\e(B]\\ 
+M b     & \e$B$3$N5-;v$K$7$*$j\e(B ({\bf bookmark}) \e$B$r@_Dj$7$^$9\e(B.\\
+M e     & (E, M x) \e$B$3$N5-;v$r;~8B>C5n2DG=\e(B ({\bf expirable}) \e$B$H$7$F0u$r\e(B
+\e$BIU$1$^$9\e(B. [\e$BHO0O\e(B]\\
+M k     & (k) \e$BF1$8I=Bj$NA4$F$N5-;v$r@Z$j\e(B ({\bf kill}), \e$B<!$N5-;v$rA*Br\e(B
+\e$B$7$^$9\e(B.\\
+M B     & \e$B$3$N5-;v$+$i$7$*$j\e(B ({\bf bookmark}) \e$B$r<h$j=|$-$^$9\e(B.\\
+M C     & \e$B2D;k0u$G$J$$5-;v$r%-%c%C%A%"%C%W\e(B ({\bf catch-up}) \e$B$7$^$9\e(B.\\
+M D     & \e$BA4$F$NJ]N1\e(B ({\bf dormant}) \e$B5-;v$rI=<($7$^$9\e(B (\e$BIaDL$O%U%)%m!<\e(B
+\e$B%"%C%W$,$J$$8B$j1#$5$l$F$$$^$9\e(B).\\
+M H     & \e$B$3$N%0%k!<%W$G$3$3\e(B ({\bf here}) \e$B$^$G%-%c%C%A%"%C%W\e(B (\e$B4{FI$N0u\e(B
+\e$B$rIU$1$k\e(B) \e$B$7$^$9\e(B.\\
+M K     & (C-k) \e$B$3$N5-;v$HF1$8I=Bj$NA4$F$N5-;v$r\e(B {\bf kill} \e$B$7$^$9\e(B.\\
+C-w     & \e$B%]%$%s%H$H%^!<%/$N4V$NA4$F$N5-;v$K4{FI$N0u$rIU$1$^$9\e(B.\\
+M S     & (C-c M-C-s) \e$BA4$F$N:o=|5-;v$rI=<(\e(B ({\bf show}) \e$B$7$^$9\e(B.\\
+M C-c   & \e$B$3$N%0%k!<%W$NA4$F$N5-;v$r%-%c%C%A%"%C%W\e(B ({\bf catch-up}) \e$B$7\e(B
+\e$B$^$9\e(B.\\
+M M-r   & (x) \e$B$3$N%0%k!<%W$NA4$F$N4{FI\e(B ({\bf read}) \e$B5-;v$r>C5n$7$^$9\e(B.\\
+M M-D   & \e$BA4$F$NJ]N1\e(B ({\bf dormant}) \e$B5-;v$r1#$7$^$9\e(B.\\
+M M-C-r & \e$BM?$($i$l$?0u$NA4$F$N5-;v$r>C5n$7$^$9\e(B.\\
+\end{keys}
+
+\subsubsec{\e$B%9%3%"$K4p$E$$$?0u\e(B}
+\begin{keys}{M s m}
+M V c   & \e$BA4$F$N9b%9%3%"$N5-;v$+$iA4$F$N0u$r>C5n\e(B ({\bf clear}) \e$B$7$^$9\e(B.
+[score]\\
+M V k   & \e$BA4$F$NDc%9%3%"$N5-;v$r@Z$j$^$9\e(B ({\bf kill}). [score]\\
+M V m   & \e$BA4$F$N9b%9%3%"$N5-;v$KM?$($i$($l$?0u\e(B ({\bf mark}) \e$B$rIU$1$^$9\e(B.
+[score]\\
+M V u   & \e$BA4$F$N9b%9%3%"$N5-;v$r$*$b$7$m$$$H$7$F0u$rIU$1$^$9\e(B (\e$B2D;k0u$r\e(B
+\e$BIU$1$^$9\e(B). [score]\\
+\end{keys}
+
+\subsubsec{\e$B%W%m%;%90u\e(B}
+{\samepage 
+\e$B$3$l$i$NL?Na$O%W%m%;%90u\e(B \# \e$B$rIU$1$?$j>C5n$7$?$j$7$^$9\e(B. \e$BA`:n$7$?$$5-;v\e(B
+\e$B$,O"B3$7$F$$$J$$$H$-$@$1$=$l$r;H$&I,MW$,$"$k$G$7$g$&\e(B. \e$B$=$&$G$J$1$l$P?t\e(B
+\e$BCM0z?t$r;H$$$^$9\e(B.\\*
+\begin{keys}{M P R}
+M P a   & \e$BA4$F\e(B ({\bf all}) \e$B$N5-;v$K0u$rIU$1$^$9\e(B (\e$B=gHV$K\e(B).\\
+M P p   & (\#, M \#) \e$B$3$N5-;v$K0u$rIU$1$^$9\e(B.\\
+M P r   & \e$B6h0h\e(B ({\bf region}) \e$B$NA4$F$N5-;v$K0u$rIU$1$^$9\e(B.\\
+M P s   & \e$B8=:_$NO"B3J*\e(B ({\bf series}) \e$B$NA4$F$K0u$rIU$1$^$9\e(B.\\
+M P t   & \e$B$3$N\e(B (\e$BI{\e(B)\e$B%9%l%C%I\e(B ({\bf thread}) \e$B$NA4$F$N5-;v$K0u$rIU$1$^$9\e(B.\\
+M P u   & (M-\#, M M-\#) \e$B$3$N5-;v$+$i0u$r>C$7$^$9\e(B ({\bf unmark}).\\
+M P R   & \e$B@55,I=8=\e(B ({\bf regexp}) \e$B$K9g$&A4$F$N5-;v$K0u$rIU$1$^$9\e(B.\\
+M P S   & \e$B0uIU$-$N5-;v$r4^$`A4$F$NO"B3$7$?5-;v\e(B ({\bf series}) \e$B$K0u$rIU\e(B
+\e$B$1$^$9\e(B.\\
+M P U   & \e$BA4$F$N5-;v$+$i0u$r>C$7$^$9\e(B ({\bf unmark}).\\
+\end{keys}
+}}
+
+\def\Osubmap{
+\subsec{\e$B5-;v$N=PNO\e(B}
+\begin{keys}{O m}
+O f     & \e$B$3$N5-;v$r%W%l%$%s%U%!%$%k\e(B ({\bf file}) \e$B7A<0$GJ]B8$7$^$9\e(B.
+[p/p]\\
+O h     & \e$B$3$N5-;v$r\e(B {\bf mh} \e$B%U%)%k%@!<$N7A<0$GJ]B8$7$^$9\e(B. [p/p]\\
+O m     & \e$B$3$N5-;v$r%a!<%k\e(B ({\bf mail}) \e$B7A<0$GJ]B8$7$^$9\e(B. [p/p]\\
+O o     & (o, C-o) \e$B$3$N5-;v$r=i4|5-;vJ]B84o$r;H$C$FJ]B8$7$^$9\e(B. [p/p]\\
+O p     & ($\mid$) \e$B$3$N5-;v$r%7%'%k%3%^%s%I$K%Q%$%W$GAw$j$^$9\e(B. [p/p]\\
+O r     & \e$B$3$N5-;v$r\e(B {\bf rmail} \e$B7A<0$GJ]B8$7$^$9\e(B. [p/p]\\
+O v     & \e$B$3$N5-;v$r\e(B {\bf vm} \e$B$N7A<0$GJ]B8$7$^$9\e(B. [p/p]\\
+\end{keys}
+}
+
+\def\Ssubmap{
+\subsec{\e$BEj9F\e(B, \e$B%U%)%m!<%"%C%W\e(B, \e$BJVEz\e(B, \e$BE>Aw\e(B, \e$B<h$j>C$7\e(B}
+{\samepage
+\e$B$3$l$i$NL?Na$OJL$NEj9F$+%a!<%k%P%C%U%!$K9T$-$^$9\e(B. \e$B5-;v$rJT=8$7$?8e\e(B,
+C-c C-c \e$B$r2!$7$FAw?.$7$^$9\e(B. \e$B30It%0%k!<%W$K$$$F\e(B, \e$B30It%5!<%P!<$r;H$C$F5-\e(B
+\e$B;v$rEj9F$7$?$$$J$i\e(B, C-c C-c \e$B$K@\F,<-$rM?$($F$/$@$5$$\e(B.\\*
+\begin{keys}{S O m}
+S b     & \e$B$3$N5-;v$X$N%U%)%m!<%"%C%W$NEj9F$H\e(B, \e$BJVEz$NAw?.$NN>J}\e(B ({\bf
+both}) \e$B$r$7$^$9\e(B.\\
+S c     & (C) \e$B$3$N5-;v$r<h$j>C$7$^$9\e(B ({\bf cancel}) (\e$B<+J,<+?H$N$b$N$K\e(B
+\e$B$N$_F0:n$7$^$9\e(B).\\
+S f     & (f) \e$B$3$N5-;v$X$N%U%)%m!<%"%C%W\e(B ({\bf followup}) \e$B$rEj9F$7$^$9\e(B.\\
+S m     & (m) \e$BC/$+JL$N?M$K%a!<%k\e(B {\bf mail} \e$B$rAw$j$^$9\e(B.\\
+S o m   & (C-c C-f) \e$B$3$N5-;v$r0l$K%a!<%k$rAw$k\e(B ({\bf mail}) \e$B$3$H$GE>Aw\e(B
+\e$B$7$^$9\e(B.\\
+S o p   & \e$B$3$N5-;v$r%K%e!<%9%0%k!<%W$X$NEj9F\e(B ({\bf post}) \e$B$H$7$FE>Aw$7\e(B
+\e$B$^$9\e(B.\\
+S p     & (a) \e$B$3$N%0%k!<%W$K5-;v$rEj9F\e(B ({\bf post}) \e$B$7$^$9\e(B.\\
+S r     & (r) \e$B$3$N5-;v$NCx<T$K%a!<%k$GJVEz\e(B ({\bf reply}) \e$B$7$^$9\e(B.\\
+S s     & \e$B$3$N5-;v$r?7$7$$5-;v$GBeBX$7$^$9\e(B ({\bf supersede}) (\e$B<+J,$N5-\e(B
+\e$B;v$N$_\e(B).\\ 
+S u     & \e$B%U%!%$%k$r\e(B {\bf uuencode} \e$B$7$FO"B3$H$7$FEj9F$7$^$9\e(B.\\
+S B     & \e$B855-;v$r0zMQ$7$F%U%)%m!<%"%C%W$NEj9F\e(B, \e$BJVEz$NAw?.$NN>J}\e(B ({\bf
+both}) \e$B$r$7$^$9\e(B. [p/p]\\ 
+S F     & (F) \e$B855-;v$r0zMQ$7$F%U%)%m!<%"%C%W\e(B ({\bf followup}) \e$B$rEj9F$7\e(B
+\e$B$^$9\e(B. [p/p]\\
+S O m   & \e$B$3$l$i$NO"B3$r=8G[7A<0$K$7$F%a!<%k\e(B ({\bf mail}) \e$B$GE>Aw$7$^$9\e(B.
+[p/p]\\
+S O p   & \e$B$3$l$i$NO"B3$r=8G[7A<0$K$7$F%K%e!<%9%0%k!<%W$KEj9F\e(B ({\bf
+post}) \e$B$7$^$9\e(B. [p/p]\\ 
+S R     & (R) \e$B855-;v$r0zMQ$7$F%a!<%k$GJVEz\e(B ({\bf reply}) \e$B$7$^$9\e(B.
+[p/p]\\
+\end{keys}
+\e$B$?$C$?:#Ej9F$7$?5-;v$r<h$j>C$7$?$jBeBX$7$?$1$l$P\e(B (\e$B%5!<%P!<$K8=$l$kA0$K\e(B), 
+*post-news* \e$B%P%C%U%!$K0\F0$7$F\e(B, `Message-ID' \e$B$r\e(B `Cancel' \e$B$+\e(B
+`Supersedes' \e$B$K49$($F\e(B C-c C-c \e$B$G$b$&0lEYAw?.$7$F$/$@$5$$\e(B. 
+}}
+
+\def\Tsubmap{
+\subsec{\e$B%9%l%C%IL?Na\e(B}
+\begin{keys}{T \#}
+T \#    & \e$B$3$N%9%l%C%I$K%W%m%;%90u$rIU$1$^$9\e(B.\\
+T d     & \e$B$3$N%9%l%C%I$N<!$N5-;v$K0\F0$7$^$9\e(B ({\bf down}). [\e$B5wN%\e(B]\\
+T h     & \e$B$3$N\e(B (\e$BI{\e(B)\e$B%9%l%C%I$r1#$7$^$9\e(B ({\bf hide}).\\
+T i     & \e$B$3$N%9%l%C%I$N%9%3%"$r>e$2$^$9\e(B ({\bf increase}).\\
+T k     & (M-C-k) \e$B8=:_$N\e(B (\e$BI{\e(B)\e$B%9%l%C%I$r@Z$j$^$9\e(B ({\bf kill}). [\e$BIi$N0z\e(B
+\e$B?t\e(B: \e$B2D;k0u\e(B, \e$B@5$N0z?t\e(B: \e$B0u$r>C$9\e(B.]\\
+T l     & (M-C-l) \e$B$3$N%9%l%C%I$N%9%3%"$r2<$2$^$9\e(B ({\bf lower}).\\
+T n     & (M-C-f) \e$B<!\e(B ({\bf next}) \e$B$N%9%l%C%I$K0\F0$7$^$9\e(B. [\e$B5wN%\e(B]\\
+T p     & (M-C-b) \e$BA0\e(B ({\bf previous}) \e$B$N%9%l%C%I$K0\F0$7$^$9\e(B. [\e$B5wN%\e(B]\\
+T s     & \e$B$3$N5-;v$G1#$l$F$$$k%9%l%C%I$rI=<(\e(B ({\bf show}) \e$B$7$^$9\e(B.\\
+T u     & \e$B$3$N%9%l%C%I$NA0$N5-;v$K0\F0$7$^$9\e(B ({\bf up}). [\e$B5wN%\e(B]\\
+T H     & \e$BA4$F$N%9%l%C%I$r1#$7$^$9\e(B ({\bf hide}).\\
+T S     & \e$BA4$F$N1#$5$l$?%9%l%C%I$rI=<(\e(B ({\bf show}) \e$B$7$^$9\e(B.\\
+T T     & (M-C-t) \e$B%9%l%C%II=<($r@Z$jBX$($^$9\e(B ({\bf toggle}).\\
+\end{keys}
+}
+
+\def\Vsubmap{
+\subsec{\e$B%9%3%"\e(B (\e$BCM\e(B) \e$BL?Na\e(B}
+{\samepage
+\e$B%*%s%i%$%s\e(B info \e$B$GE,1~%9%3%"$rFI$s$G$/$@$5$$\e(B.\\*
+\begin{keys}{\bf A p m l}
+V a     & \e$BA4$F$NMWAG$r;XDj$7$F?7$7$$%9%3%"EPO?$r2C$(\e(B ({\bf add}) \e$B$^$9\e(B.\\
+V c     & \e$B?7$7$$%9%3%"%U%!%$%k$r8=:_$N$b$N\e(B ({\bf current}) \e$B$H$7$F;XDj\e(B
+\e$B$7$^$9\e(B.\\
+V e     & \e$B8=:_$N%9%3%"$NO"A[%j%9%H$rJT=8\e(B ({\bf edit}) \e$B$7$^$9\e(B.\\
+V f     & \e$B%9%3%"%U%!%$%k\e(B ({\bf file}) \e$B$rJT=8$7$F8=:_$N$b$N$H$7$^$9\e(B.\\
+V m     & \e$BM?$($i$l$?%9%3%"$h$j2<$N5-;v$K4{FI$K0u\e(B ({\bf mark}) \e$B$rIU$1$^\e(B
+\e$B$9\e(B.\\
+V s     & \e$B$3$N5-;v$N%9%3%"\e(B ({\bf score}) \e$B$r@_Dj$7$^$9\e(B.\\
+V t     & \e$B$3$N5-;v$KE,MQ$5$l$?A4$F$N%9%3%"5,B'$rI=<($7$^$9\e(B ({\bf track}).\\
+V x     & \e$BA4$F$NDc%9%3%"$N5-;v$r>C5n\e(B ({\bf expunge}) \e$B$7$^$9\e(B. [score]\\
+V C     & \e$B8=:_$N%9%3%"%U%!%$%k$rMxMQ<T$KJ,$+$j$d$9$$%$%s%?!<%U%'!<%9$G\e(B
+\e$B%+%9%?%^%$%:\e(B ({\bf customize}) \e$B$7$^$9\e(B.\\ 
+V S     & \e$B$3$N5-;v$N%9%3%"\e(B ({\bf score}) \e$B$rI=<($7$^$9\e(B.\\
+\bf A p m l& \e$B$3$N5-;v$K4p$E$$$?%9%3%"EPO?$r:n$j$^$9\e(B.\\
+\end{keys}
+
+4\e$B$D$NJ8;z$O0J2<$N0UL#$G$9\e(B:\\*
+\quad \B{A}ction: I)ncrease, L)ower;\\*
+\quad \B{p}art: a)utor (from), s)ubject, x)refs (cross-posting), d)ate, l)ines,
+message-i)d, t)references (parent), f)ollowup, b)ody, h)ead (\e$BA4$F$N%X%C\e(B
+\e$B%@!<\e(B);\\*
+\quad \B{m}atch type:\\*
+\qquad string: s)ubstring, e)xact, r)egexp, f)uzzy,\\*
+\qquad date: b)efore, a)t, n)this,\\*
+\qquad number: $<$, =, $>$;\\*
+\quad \B{l}ifetime: t)emporary, p)ermanent, i)mmediate.
+
+2\e$BHVL\$NJ8;z$rBgJ8;z$GF~NO$9$k$H\e(B, \e$B;D$j$N\e(B2\e$B$D$O\e(B s)ubstring \e$B$H\e(B t)emporary
+\e$B$G$"$k$H$_$J$5$l$^$9\e(B. 3\e$BHVL\$NJ8;z$rBgJ8;z$GF~NO$9$k$H\e(B, \e$B:G8e$N$b$N$O\e(B
+t)emporary \e$B$G$"$k$H$_$J$5$l$^$9\e(B. 
+
+\quad \e$B%9%3%"%U%!%$%k$N<j$G$NJT=8$N$?$a$NDI2C$N%-!<\e(B:\\*
+\begin{keys}{C-c C-c}
+C-c C-c & \e$B%9%3%"%U%!%$%k$NJT=8$r=*$($^$9\e(B.\\
+C-c C-d & \e$B8=:_$NF|IU$1\e(B ({\bf date}) \e$B$rF|?t$H$7$FA^F~$7$^$9\e(B.\\
+\end{keys}
+}}
+
+\def\Wsubmap{
+\subsec{\e$B5-;v%P%C%U%!$N@vBu\e(B}
+\begin{keys}{W C-c}
+W b     & \e$B5-;v$NCf$N\e(B Message-ID \e$B$H\e(B URL \e$B$r%^%&%9$G%/%j%C%/2DG=$K$7$^$9\e(B {\bf
+  buttons}.\\  
+W c     & \e$B5-;v$+$iM>J,$J\e(B {\bf CRs} (^M) \e$B$r<h$j=|$-$^$9\e(B.\\
+W f     & X-{\bf Face} \e$B%X%C%@!<$rC5$7$FI=<($7$^$9\e(B.\\
+W l     & (w) \e$B5-;v$+$i%Z!<%8$N6h@Z$j\e(B ({\bf^L}) \e$B$r<h$j=|$-$^$9\e(B.\\
+W m     & {\bf MIME} \e$B$N<B9T$r@Z$j49$($^$9\e(B.\\
+W o     & \e$B5-;v$N\e(B {\bf overstrike} \e$B$+\e(B \e$B2<@~\e(B(^H\_) \e$B$r07$$$^$9\e(B.\\
+W q     & \e$B5-;v$N\e(B {\bf quoted}-printable \e$B$r07$$$^$9\e(B.\\
+W r     & (C-c C-r) \e$B5-;v$K%+%(%5%k2sE>\e(B ({\bf rotate}) (rot13) \e$B$r9T$$$^$9\e(B.\\
+W t     & (t) \e$BA4$F$N%X%C%@!<I=<($r@Z$jBX$($^$9\e(B ({\bf toggle}).\\
+v       & \e$BA4$F$N%X%C%@!<$N>iD9$J\e(B ({\bf verbose}) \e$BI=<($r@Z$jBX$($^$9\e(B.\\
+W w     & \e$B5-;v$N8l$N@^$jJV$7\e(B ({\bf wrap}) \e$B$r9T$$$^$9\e(B.\\
+W T e   & \e$B5-;v$N;~9o$rAw$i$l$?;~$+$i7P2a$7$?\e(B ({\bf elapsed}) \e$B;~4V$KJQ\e(B
+  \e$B49$7$^$9\e(B.\\
+W T l   & \e$B5-;v$N;~9o$r%m!<%+%k\e(B ({\bf local}) \e$BI8=`;~9oBS$KJQ49$7$^$9\e(B.\\
+W T u   & (W T z) \e$B5-;v$N;~9o$r\e(B {\bf UTC} ({\bf Zulu}, GMT) \e$B$KJQ49$7$^\e(B
+  \e$B$9\e(B.\\ 
+\end{keys}
+
+\subsubsec{\e$B5-;v$NItJ,$r1#$9\e(B/\e$B%O%$%i%$%H$9$k\e(B}
+\begin{keys}{W W C-c}
+W W a   & \e$BA4$F$N\e(B ({\bf all}) \e$BK>$^$7$/$J$$ItJ,$r1#$7$^$9\e(B. W W h, W W s,
+W W C-c \e$B$r<B9T$7$^$9\e(B.\\
+W W c   & \e$B5-;v$N0zMQ\e(B ({\bf citation}) \e$B$r1#$7$^$9\e(B.\\
+W W h   & \e$B5-;v$N%X%C%@!<\e(B ({\bf headers}) \e$B$r1#$7$^$9\e(B.\\
+W W s   & \e$B5-;v$N=pL>\e(B ({\bf signature}) \e$B$r1#$7$^$9\e(B.\\
+W W C-c & \e$B5-;v$N0zMQ\e(B ({\bf citation}) \e$B$r$h$j@vN}$5$l$?%"%k%4%j%:%`$r;H$C\e(B
+\e$B$F1#$7$^$9\e(B.\\
+%\end{keys}
+%
+%\subsubsec{Highlight Parts of the Article}
+%\begin{keys}{W H A}
+W H a   & \e$BA4$F\e(B ({\bf all}) \e$B$NItJ,$r1#$7$^$9\e(B. W b, W H c, W H h, W H
+s. \e$B$r<B9T$7$^$9\e(B\\
+W H c   & \e$B5-;v$N0zMQ\e(B ({\bf citation}) \e$B$r%O%$%i%$%H$7$^$9\e(B.\\
+W H h   & \e$B5-;v$N%X%C%@!<\e(B ({\bf headers}) \e$B$r%O%$%i%$%H$7$^$9\e(B.\\
+W H s   & \e$B5-;v$N=pL>\e(B ({\bf signature}) \e$B$r%O%$%i%$%H$7$^$9\e(B.\\
+\end{keys}
+}
+
+\def\Xsubmap{
+\subsec{\e$BO"B3$NE83+\e(B (Uudecode \e$B$J$I\e(B)}
+{\samepage
+Gnus \e$B$O8=:_$N5-;v$,O"B3J*\e(B (\e$B$=$l$>$l$NItJ,$,I=Bj$K$*$$$F\e(B, \e$BNc$($P\e(B
+{}1/10\dots10/10 \e$B$N$h$&$K\e(B, \e$B?t;z$GF1Dj$5$l$kJ#?t$NEj9F\e(B) \e$B$N0lIt$G$"$k$H\e(B, 
+\e$B$=$l$rG'<1$7$F$=$NO"B3J*$r$=$l$>$l<B9T2aDx$K$+$1$^$9\e(B. 1\e$B$D0J>e$NO"B3J*\e(B
+\e$B$K0u$rIU$1$F<B9T$9$k$3$H$,$G$-$^$9\e(B. \e$BEj9F$,%"!<%+%$%V$r4^$s$G$$$l$P\e(B, \e$B?7\e(B
+\e$B$7$$%0%k!<%W$GE83+$5$l\e(B, \e$B=8$a$i$l$^$9\e(B.\\*
+\begin{keys}{X p}
+X b     & \e$BO"B3J*$r\e(B {\bf binhex} \e$B$GE83+$7$^$9\e(B. [p/p]\\
+X o     & \e$BC1$KO"B3J*$r=PNO\e(B ({\bf output}) \e$B$7$^$9\e(B (\e$BI|9f2=$O$7$^$;$s\e(B).
+[p/p]\\ 
+X p     & \e$B%]%9%H%9%/%j%W%H\e(B ({\bf postscript}) \e$B$NO"B3J*$rE83+$7$^$9\e(B.
+[p/p]\\
+X s     & \e$BO"B3J*$r\e(B {\bf shar} \e$B$GE83+$7$^$9\e(B. [p/p]\\
+X u     & \e$BO"B3J*$r\e(B {\bf uudecode} \e$B$7$^$9\e(B. [p/p]\\
+\end{keys}
+
+\e$B$3$l$i$N$=$l$>$l$K$O\e(B4\e$B$D$N0[7A$,$"$j$^$9\e(B:\\*
+\begin{keys}{X v \bf Z}
+X   \bf z & \e$BO"B3J*$rI|9f2=$7$^$9\e(B. [p/p]\\
+X   \bf Z & \e$BO"B3J*$rI|9f2=$7$FJ]B8$7$^$9\e(B. [p/p]\\
+X v \bf z & \e$BO"B3J*$rI|9f2=$7$F1\Mw$7$^$9\e(B. [p/p]\\
+X v \bf Z & \e$BO"B3J*$rI|9f2=$7\e(B, \e$BJ]B8$7\e(B, \e$B1\Mw$7$^$9\e(B. [p/p]\\
+\end{keys}
+{\bf z} \e$B$d\e(B {\bf Z} \e$B$OI|9f2=$NJ}K!$r<($7$^$9\e(B (b, o, p, s, u).
+
+\e$B$3$l$i$NL?Na$G:G$bNI$/;H$o$l$kJL$NB+G{$O\e(B\\*
+\begin{keys}{C-c C-v C-v}
+C-c C-v C-v & (X v u) \e$BO"B3J*$r\e(B uudecode \e$B$71\Mw$7$^$9\e(B. [p/p]\\
+\end{keys}
+}}
+
+\def\Zsubmap{
+\subsec{\e$B8=:_$N%0%k!<%W$r=P$k\e(B}
+\begin{keys}{Z G}
+Z c     & (c) \e$BA4$F$N2D;k0uIU$-$G$J$$5-;v$K4{FI$N0u$rIU$1\e(B ({\bf
+catch-up}, \e$B%-%c%C%A%"%C%W\e(B) \e$B=*N;$7$^$9\e(B.\\
+Z n     & \e$BA4$F$N5-;v$K4{FI$N0u$rIU$1\e(B, \e$B<!\e(B ({\bf next}) \e$B$N%0%k!<%W$K0\F0\e(B
+\e$B$7$^$9\e(B.\\
+Z C     & \e$BA4$F$N5-;v$K4{FI$N0u$rIU$1\e(B ({\bf catch-up}, \e$B%-%c%C%A%"%C%W\e(B)
+\e$B=*N;$7$^$9\e(B.\\
+Z E     & (Q) \e$B%0%k!<%W>pJs$r99?7$;$:$K=*N;\e(B ({\bf Exit}) \e$B$7$^$9\e(B.\\
+Z G     & (M-g) \e$B%0%k!<%W$N?7$7$$5-;v$rD4$Y$^$9\e(B ({\bf get}, \e$B<hF@\e(B).\\
+Z N     & \e$B=*N;$7$F<!$N\e(B ({\bf next}) \e$B%0%k!<%W$X0\F0$7$^$9\e(B.\\
+Z P     & \e$B=*N;$7$FA0$N\e(B ( {\bf previous}) \e$B%0%k!<%W$K0\F0$7$^$9\e(B.\\
+Z R     & \e$B%0%k!<%W$r=*N;$7$F\e(B, \e$B:F$SF~$j$^$9\e(B ({\bf reenter}, \e$B:F<B9T\e(B).
+[\e$B@\F,0z?t\e(B: \e$BL$FI$b4{FI$bA4$F$N5-;v$rA*Br$7$^$9\e(B.]\\
+Z Z     & (q, Z Q) \e$B%0%k!<%W$r=*N;$7$^$9\e(B.\\
+\end{keys}
+}
+
+\def\ArticleMode{
+\sec{\e$B5-;v%b!<%I\e(B}
+{\samepage
+% \e$B35N,%b!<%I$NA4$F$N%-!<$O5-;v%b!<%I$G$bF0:n$7$^$9\e(B.
+\e$BIaDL$NA`:n%-!<$O5-;v%b!<%I$GF0:n$7$^$9\e(B.
+\e$BDI2C$N%-!<$O\e(B:\\*
+\begin{keys}{C-c C-m}
+RET     & (\e$B??Cf$N%^%&%9%\%?%s\e(B) \e$B%]%$%s%H$N$"$k%\%?%s$r3hF02=$7$F\e(B, URL
+\e$B$d\e(B Message-ID \e$B$K0\F0$7$^$9\e(B.\\
+TAB     & \e$B%]%$%s%H$r<!$N%\%?%s$K0\F0$7$^$9\e(B.\\
+h       & (s) {\bf \e$B35N,\e(B} \e$B%P%C%U%!$N5-;v$N%X%C%@!<\e(B ({\bf header}) \e$B9T$K\e(B
+\e$B0\F0$7$^$9\e(B.\\ 
+C-c ^   & \e$B%]%$%s%H$N6a$/$N\e(B Message-ID \e$B$N5-;v$r<hF@$7$^$9\e(B.\\
+C-c C-m & \e$B%]%$%s%H$N6a$/$N%"%I%l%9$K%a!<%k\e(B ({\bf mail}) \e$B$GJVEz$7$^$9\e(B
+(\e$B@\F,0z?t\e(B: \e$B85$N5-;v$r4^$a$k\e(B).\\ 
+\end{keys}
+}}
+
+\def\ServerMode{
+\sec{\e$B%5!<%P!<%b!<%I\e(B}
+{\samepage
+\e$B$3$N%b!<%I$KF~$k$?$a$K$O\e(B, \e$B%0%k!<%W%b!<%I$G\e(B `^' \e$B$r2!$7$F$/$@$5$$\e(B.\\*
+\begin{keys}{SPC}
+SPC     & (RET) \e$B$3$N%5!<%P!<$r354Q$7$^$9\e(B.\\
+a       & \e$B?7$7$$%5!<%P!<$rDI2C\e(B {\bf add} \e$B$7$^$9\e(B.\\
+c       & \e$B$3$N%5!<%P!<$rJ#<L\e(B {\bf copy} \e$B$7$^$9\e(B.\\
+e       & \e$B%5!<%P!<$rJT=8\e(B {\bf edit} \e$B$7$^$9\e(B.\\
+k       & \e$B$3$N%5!<%P!<$r@Z$j$^$9\e(B {\bf kill}. [\e$BHO0O\e(B]\\
+l       & \e$BA4$F$N%5!<%P!<$r0lMwI=<(\e(B {\bf list} \e$B$7$^$9\e(B.\\
+q       & \e$B%0%k!<%W%P%C%U%!$KLa$j$^$9\e(B (\e$B=*N;\e(B {\bf quit}).\\
+y       & \e$B0JA0$K@Z$C$?%5!<%P!<$rE=$jIU$1\e(B {\bf yank} \e$B$^$9\e(B.\\
+\end{keys}
+}}
+
+\def\BrowseServer{
+\sec{\e$B%5!<%P!<354Q%b!<%I\e(B}
+{\samepage
+\e$B$3$N%b!<%I$KF~$k$?$a$K$O\e(B, \e$B%0%k!<%W%b!<%I$G\e(B `B' \e$B$r2!$7$F$/$@$5$$\e(B.\\*
+\begin{keys}{RET}
+RET     & \e$B8=:_$N%0%k!<%W$KF~$j$^$9\e(B.\\
+SPC     & \e$B8=:_$N%0%k!<%W$KF~$C$F:G=i$N5-;v$rI=<($7$^$9\e(B.\\
+?       & \e$B$H$F$bC;$$%X%k%W%a%C%;!<%8$rI=<($7$^$9\e(B.\\
+n       & {\bf \e$B<!\e(B} \e$B$N%0%k!<%W$K0\F0$7$^$9\e(B. [\e$B5wN%\e(B]\\
+p       & {\bf \e$BA0\e(B} \e$B$N%0%k!<%W$K0\F0$7$^$9\e(B. [\e$B5wN%\e(B]\\
+q       & (l) \e$B354Q%b!<%I$r\e(B {\bf \e$B=*N;\e(B} \e$B$7$^$9\e(B.\\
+u       & \e$B8=:_$N%0%k!<%W$r9VFI$7$^$9\e(B. [\e$BHO0O\e(B]\\
+\end{keys}
+}}
diff --git a/texi/message-ja.texi b/texi/message-ja.texi
new file mode 100644 (file)
index 0000000..7cf6523
--- /dev/null
@@ -0,0 +1,1314 @@
+\input texinfo                  @c -*-texinfo-*-
+
+@setfilename message-ja
+@settitle Message 5.6.45 Manual
+@synindex fn cp
+@synindex vr cp
+@synindex pg cp
+@c @direntry
+@c * Message: (message).   Mail and news composition mode that goes with Gnus.
+@c @end direntry
+@iftex
+@finalout
+@end iftex
+@setchapternewpage odd
+
+@ifinfo
+
+This file documents Message, the Emacs message composition mode.  
+
+\e$B$3$N%U%!%$%k$O\e(B Emacs \e$B$N%a%C%;!<%8:n@.%b!<%I$G$"$k\e(B Message \e$B$K4X$9$k@bL@J8\e(B
+\e$B=q$G$9!#\e(B
+
+Copyright (C) 1996 Free Software Foundation, Inc.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+\e$BCx:n8"I=<($H$3$N5v2DJ8$,$9$Y$F$NJ#@=$KB8:_$9$k8B$j!"$3$N@bL@=q$N$^$C$?$/\e(B
+\e$BF10l$NJ#@=$r:n$j!"G[I[$9$k$3$H$r5v2D$9$k!#\e(B
+
+@ignore
+Permission is granted to process this file through Tex and print the
+results, provided the printed document carries copying permission
+notice identical to this one except for the removal of this paragraph
+(this paragraph not being relevant to the printed manual).
+
+\e$B$3$NCJMn$,<h$j=|$+$l$F$$$k$N$r=|$-!"$3$l$HF1$8J#@=$K4X$9$k5v2DJ8$,I=<($5\e(B
+\e$B$l$F$$$k8B$j!"$3$N%U%!%$%k$r\e(B Tex \e$B$K$+$1$F!"$=$N7k2L$r0u:~$9$k$3$H$r5v2D\e(B
+\e$B$9$k\e(B (\e$B$3$NCJMn$O0u:~$5$l$?%^%K%e%"%k$G$O;2>H$5$l$^$;$s\e(B)\e$B!#\e(B
+
+@end ignore
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided also that the
+entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+\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 Message 5.6.45 Manual
+
+@author by Lars Magne Ingebrigtsen
+@translated by members of Semi-gnus mailing-list
+@page
+
+@vskip 0pt plus 1filll
+Copyright @copyright{} 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.
+
+\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 Message
+
+Gnus \e$B$NA4$F$N%a%C%;!<%8$N:n@.\e(B (\e$B%a!<%k$H%K%e!<%9$NN>J}\e(B) \e$B$O%a%C%;!<%8%b!<\e(B
+\e$B%I%P%C%U%!$G9T$o$l$^$9!#\e(B
+
+@menu
+* Interface::         \e$B%a%C%;!<%8%P%C%U%!$r@_Dj$9$k!#\e(B
+* Commands::          \e$B%a%C%;!<%8%b!<%I%P%C%U%!$G<B9T$G$-$kL?Na!#\e(B
+* Variables::         \e$B%a%C%;!<%8%P%C%U%!$r%+%9%?%^%$%:$9$k!#\e(B
+* Compatibility::     \e$B%a%C%;!<%8$r2<0L8_49$K$9$k!#\e(B
+* Appendices::        \e$B$b$C$H5;=QE*$J;v!#\e(B
+* Index::             \e$BJQ?t!"4X?t!"35G0$N:w0z!#\e(B
+* Key Index::         \e$B%a%C%;!<%8%b!<%I%-!<$N0lMw!#\e(B
+@end menu
+
+\e$B$3$N%^%K%e%"%k$O\e(B Message 5.6.45 \e$B$KBP1~$7$^$9!#\e(BMessage \e$B$O$3$N%^%K%e%"%k$H\e(B
+\e$BF1$8HGHV9f$N\e(B Gnus \e$B$NG[I[$H6&$KG[I[$5$l$^$9!#\e(B
+
+
+@node Interface
+@chapter \e$B3&LL\e(B
+
+\e$B%W%m%0%i%`\e(B (\e$B$b$7$/$O?M\e(B) \e$B$,%a%C%;!<%8$KH?1~$7$?$$$H$-\e(B -- \e$BJVEz!"%U%)%m!<%"%C\e(B
+\e$B%W!"E>Aw!"<h$j>C$7\e(B -- \e$B$=$N%W%m%0%i%`\e(B (\e$B$b$7$/$O?M\e(B) \e$B$O%a%C%;!<%8$,$"$k%P%C\e(B
+\e$B%U%!$K%]%$%s%H$rF~$l$FI,MW$JL?Na$r8F$S=P$9$@$1$GNI$$$Y$-$G$9!#$=$&$9$k$H\e(B 
+@code{Message} \e$B$O?7$7$$\e(B @code{message} \e$B%b!<%I%P%C%U%!$rE,@Z$J%X%C%@!<$r\e(B
+\e$BF~$l$F:n$j=P$7!"MxMQ<T$O%a%C%;!<%8$rAw$kA0$K$=$l$rJT=8$G$-$^$9!#\e(B
+
+@menu
+* New News Message::     \e$BA4$/?7$7$$%K%e!<%9%a%C%;!<%8$rJT=8$9$k!#\e(B
+* Reply::                \e$B%a!<%k$GJVEz$9$k!#\e(B
+* Wide Reply::           \e$BA4$F$N?M$K%a!<%k$G1~Ez$9$k!#\e(B
+* Followup::             \e$B%K%e!<%9$G%U%)%m!<%"%C%W$9$k!#\e(B
+* Canceling News::       \e$B?7$7$$5-;v$r<h$j>C$9!#\e(B
+* Superseding::          \e$B%a%C%;!<%8$NBeBX!#\e(B
+* Forwarding::           \e$B%a%C%;!<%8$r%K%e!<%9$b$7$/$O%a!<%k$GE>Aw$9$k!#\e(B
+* Resending::            \e$B%a!<%k%a%C%;!<%8$r:FAw$9$k!#\e(B
+* Bouncing::             \e$B%a!<%k%a%C%;!<%8$N<:GT$r:FAw$9$k!#\e(B
+@end menu
+
+
+@node New Mail Message
+@section \e$B?7$7$$%a!<%k%a%C%;!<%8\e(B
+
+@findex message-mail
+@code{message-mail} \e$BL?Na$O?7$7$$%P%C%U%!$r:n$jI=<($7$^$9!#\e(B
+
+2\e$B$D$NA*Br<+M3$J0z?t$,<u$1IU$1$i$l$^$9\e(B: \e$B:G=i$N$b$N$O\e(B @code{To} \e$B%X%C%@!<$H\e(B
+\e$B$7$F!"\e(B2\e$BHVL\$O\e(B @code{Subject} \e$B%X%C%@!<$H$7$F;H$o$l$k!#$b$7$3$l$i$,\e(B 
+@code{nil} \e$B$G$"$k$J$i!"$=$l$i$N\e(B2\e$B$D$N%X%C%@!<$O6u$K$J$j$^$9!#\e(B
+
+
+@node New News Message
+@section \e$B?7$7$$%K%e!<%9%a%C%;!<%8\e(B
+
+@findex message-news
+\e$BL?Na\e(B @code{message-news} \e$B$O?7$7$$%a%C%;!<%8%P%C%U%!$r:n$j!"I=<($7$^$9!#\e(B
+
+\e$B$3$N4X?t$O\e(B2\e$B$D$NA*Br<+M3$J0z?t$r<u$1IU$1$^$9!#:G=i$N$b$N$O\e(B 
+@code{Newsgroups} \e$B%X%C%@!<$H$7$F!"\e(B2\e$B$D$a$N$b$N$O\e(B @code{Subject} \e$B%X%C%@!<\e(B
+\e$B$H$7$F;H$o$l$^$9!#$b$7$3$l$i$,\e(B @code{nil} \e$B$G$"$k$J$i!"$=$l$i$N\e(B2\e$B$D$N%X%C\e(B
+\e$B%@!<$O6u$K$J$j$^$9!#\e(B
+
+
+@node Reply
+@section \e$BJVEz\e(B
+
+@findex message-reply
+\e$B4X?t\e(B @code{message-reply} \e$B$O8=:_$N%P%C%U%!$N%a%C%;!<%8$X$NJVEz$N%a%C%;!<\e(B
+\e$B%8%P%C%U%!$r:n$j!"I=<($7$^$9!#\e(B
+
+@vindex message-reply-to-function
+Message \e$B$O2?=h$KJVEz$,9T$/$+$rIaDL$NJ}K!\e(B (@pxref{Responses}) \e$B$G7hDj$7$^\e(B
+\e$B$9$,!"JQ?t\e(B @code{message-reply-to-function} \e$B$rO.$k$3$H$G$"$J$?$NMW5a$K9g\e(B
+\e$B$&$h$&$K$=$N?6$kIq$$$rJQ$($k;v$,$G$-$^$9!#\e(B
+
+@code{From} \e$B$NBe$o$j$K\e(B @code{Sender} \e$B$KJVEz$rAw$j$?$$$N$G$"$l$P!"$3$N$h\e(B
+\e$B$&$J;v$,$G$-$^$9\e(B:
+
+@lisp
+(setq message-reply-to-function
+      (lambda ()
+       (cond ((equal (mail-fecth-field "from") "somebody")
+               (mail-fetch-field "sender"))
+             (t
+              nil))))
+@end lisp
+
+\e$B$3$N4X?t$O$=$l$,JVEz$7$h$&$H$9$k5-;v$N%X%C%@!<ItJ,$K8BDj$5$l$?HO0O$G8F$P\e(B
+\e$B$l$^$9!#\e(B
+
+\e$B$4Mw$NDL$j!"$3$N4X?t$O$=$l$,\e(B To \e$B%X%C%@!<$,$I$N$h$&$G$"$k$Y$-$+$K4V$9$k<g\e(B
+\e$BD%$,$"$l$P!"J8;zNs$rJV$9$Y$-$G$9!#$b$7$=$&$G$J$1$l$P!"$=$l$O\e(B @code{nil} 
+\e$B$rJV$9$@$1$G!"$=$&$9$l$P\e(B To \e$B%X%C%@!<$r7hDj$9$kIaDL$NJ}K!$,;H$o$l$k$G$7$g\e(B
+\e$B$&!#\e(B
+
+\e$B$3$N4X?t$O%j%9%H$rJV$9;v$b$G$-$^$9!#$=$N$h$&$J>l9g$O!"$=$l$>$l$NMWAG$O\e(B 
+cons \e$B%;%k$G$"$k$Y$-$G!"$=$l$N\e(B car \e$B$O%X%C%@!<$NL>A0\e(B (\e$BNc\e(B @code{Cc}) \e$B$G!"\e(B
+cdr \e$B$,%X%C%@!<$NCM\e(B (\e$BNc\e(B @samp{larsi@@ifi.uio.no}) \e$B$G$"$k$Y$-$G$9!#A4$F$N\e(B
+\e$B$3$l$i$N%X%C%@!<$O=P$F9T$/%a!<%k$N%X%C%@!<$KA^F~$5$l$^$9!#\e(B
+
+
+@node Wide Reply
+@section \e$B9-$/JVEz\e(B
+
+@findex message-wide-reply
+@code{message-wide-reply} \e$B$O8=:_$N%P%C%U%!$N%a%C%;!<%8$X$N9-$$JVEz$N%a%C\e(B
+\e$B%;!<%8%P%C%U%!$r:n$C$FI=<($7$^$9!#\e(B@dfn{\e$B9-$$JVEz\e(B} \e$B$O\e(B @code{To}\e$B!"\e(B
+@code{From}\e$B!"\e(B(\e$B$b$7$/$O\e(B @code{Reply-to}) \e$B$H\e(B @code{Cc} \e$B%X%C%@!<$K5s$2$i$l\e(B
+\e$B$F$$$kA4$F$N?M!9$KFO$/JVEz$G$9!#\e(B
+
+@vindex message-wide-reply-to-function
+Message \e$B$OJVEz$,2?=h$K9T$/$+$r7hDj$9$k$?$a$KIaDL$NJ}K!$r;H$$$^$9$,!"\e(B
+@code{message-wide-reply} \e$B$rO.$k;v$G!"?6$kIq$$$r$"$J$?$NMW5a$K9g$&$h$&$K\e(B
+\e$BJQ99$9$k;v$,$G$-$^$9!#$=$l$O\e(B @code{message-reply-to-function} \e$B$HF1$8$h$&\e(B
+\e$B$K;H$o$l$^$9\e(B (@pxref{Reply})\e$B!#\e(B
+
+
+@findex rmail-dont-reply-to-names
+\e$B@55,I=8=\e(B @code{rmail-dont-reply-to-names} \e$B$K9gCW$9$k%"%I%l%9$O\e(B @code{Cc} 
+\e$B%X%C%@!<$+$i<h$j=|$+$l$^$9!#\e(B
+
+
+@node Followup
+@section \e$B%U%)%m!<%"%C%W\e(B
+
+@findex message-followup
+\e$BL?Na\e(B @code{message-followup} \e$B$O8=:_$N%P%C%U%!$N%a%C%;!<%8$X$N%U%)%m!<%"%C\e(B
+\e$B%W$G$"$k%a%C%;!<%8%P%C%U%!$r:n$jI=<($7$^$9!#\e(B
+
+@vindex message-followup-to-function
+Message \e$B$O%U%)%m!<%"%C%W$,$I$3$K9T$/$+$rIaDL$NJ}K!$r;H$C$F7hDj$7$^$9$,!"\e(B
+@code{message-followup-to-function} \e$B$rO.$k;v$G!"$"$J$?$NMW5a$K9g$&$h$&$K\e(B
+\e$B?6$kIq$$$rJQ99$9$k;v$,$G$-$^$9!#$=$l$O\e(B @code{message-reply-to-function} 
+\e$B$HF1$8$h$&$K;H$o$l$^$9\e(B (@pxref{Reply})\e$B!#\e(B
+
+@vindex message-use-followup-to
+\e$BJQ?t\e(B @code{message-use-followup-to} \e$B$O\e(B @code{Followup-To} \e$B%X%C%@!<$K4X$7\e(B
+\e$B$F$I$&$9$k$+$r;XDj$7$^$9!#$=$l$,\e(B @code{use} \e$B$G$"$l$P!"$$$D$bCM$r;H$$$^$9!#\e(B
+\e$B$b$7$=$l$,\e(B @code{ask} \e$B$G$"$l$P\e(B (\e$B$3$l$,=i4|@_Dj$G$9\e(B)\e$B!"CM$r;H$&$+$I$&$+$r\e(B
+\e$B?R$M$^$9!#$b$7\e(B @code{t} \e$B$G$"$k$H!"$=$l$,\e(B @samp{\e$BEj9F<T\e(B} \e$B$G$J$$8B$j!"CM$r\e(B
+\e$B;H$$$^$9!#\e(B@code{nil} \e$B$G$"$l$P!"CM$r;H$$$^$;$s!#\e(B
+
+
+@node Canceling News
+@section \e$B%K%e!<%9$r<h$j>C$9\e(B
+
+@findex message-cancel-news
+\e$BL?Na\e(B @code{message-cancel-news} \e$B$O8=:_$N%P%C%U%!$N5-;v$r<h$j>C$7$^$9!#\e(B
+
+
+@node Superseding
+@section \e$BBeBX\e(B
+
+@findex message-supersede
+\e$BL?Na\e(B @code{message-supersede} \e$B$O8=:_$N%P%C%U%!$N%a%C%;!<%8$rBeBX$9$k%a%C\e(B
+\e$B%;!<%8%P%C%U%!$r:n$jI=<($7$^$9!#\e(B
+
+@vindex message-ignored-supersede-headers
+@code{message-ignored-supersedes-headers} \e$B$K9gCW$9$k%X%C%@!<$O?7$7$$%a%C\e(B
+\e$B%;!<%8%P%C%U%!$r:n$j>e$2$kA0$K<h$j=|$+$l$^$9!#=i4|CM$O\e(B 
+@*@samp{^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|@*
+^Received:\\|^X-From-Line:\\|Return-Path:\\|^Supersedes:} \e$B$G$9!#\e(B
+
+
+@node Forwarding
+@section \e$BE>Aw\e(B
+
+@findex message-forward
+\e$BL?Na\e(B @code{message-forward} \e$B$O8=:_$N%P%C%U%!$N%a%C%;!<%8$rE>Aw$9$k$?$a$N\e(B
+\e$B%a%C%;!<%8%P%C%U%!$r:n$jI=<($7$^$9!#$b$7@\F,0z?t$rM?$($i$l$k$H!"E>Aw$O\e(B
+\e$B%K%e!<%9$r;H$$$^$9!#\e(B
+
+@table @code
+@item message-forward-state-separator
+@vindex message-forward-start-separator
+\e$BE>Aw$5$l$k%a%C%;!<%8$NA0$KA^F~$5$l$k6h@Z$j$G$9!#=i4|CM$O\e(B @*
+@samp{------- Start of forwarded message -------\n} \e$B$G$9!#\e(B
+
+@vindex message-forward-end-separator
+@item message-forward-end-separator
+\e$BE>Aw$5$l$k%a%C%;!<%8$N8e$KA^F~$5$l$k6h@Z$j$G$9!#=i4|CM$O\e(B @*
+@samp{------- End of forwarded message -------\n} \e$B$G$9!#\e(B
+
+@item message-signature-before-forwarded-message
+@vindex message-signature-before-forwarded-message
+\e$B$b$7$3$NJQ?t$,\e(B @code{t} \e$B$G$"$k$H!"$=$l$,=i4|CM$G$9$,!"$"$J$?$N8D?ME*$J=p\e(B
+\e$BL>$,E>Aw$5$l$k%a%C%;!<%8$NA0$KA^F~$5$l$^$9!#$b$7$=$&$G$J$1$l$P!"E>Aw$5$l\e(B
+\e$B$k%a%C%;!<%8$O?7$7$$%a!<%k$N:G=i$KA^F~$5$l$^$9!#\e(B
+
+@item message-included-forward-headers
+@vindex message-included-forward-headers
+\e$B$3$l$O@55,I=8=$G!"$=$l$OE>Aw$5$l$k%a%C%;!<%8$K4^$^$l$k%X%C%@!<9T$K9gCW$9\e(B
+\e$B$k$b$N$G$9!#\e(B
+
+@end table
+
+
+@node Resending
+@section \e$B:FAw\e(B
+
+@findex message-resend
+\e$BL?Na\e(B @code{message-resend} \e$B$OMxMQ<T$K%"%I%l%9$NF~NO$rB%?J$7!"8=:_$N%P%C\e(B
+\e$B%U%!$N%a%C%;!<%8$r$=$N%"%I%l%9$K:FAw$7$^$9!#\e(B
+
+@vindex message-ignored-resent-headers
+\e$B@55,I=8=\e(B @code{message-ignored-resent-headers} \e$B$K9gCW$9$k%X%C%@!<$O%a%C\e(B
+\e$B%;!<%8$rAw$kA0$K<h$j=|$+$l$^$9!#=i4|CM$O\e(B @code{^Return-receipt} \e$B$G$9!#\e(B
+
+
+@node Bouncing
+@section \e$B<:GT\e(B
+
+@findex message-bounce
+\e$BL?Na\e(B @code{message-bounce} \e$B$O!"$b$78=:_$N%P%C%U%!$,<:GT$7$?%a!<%k%a%C%;!<\e(B
+\e$B%8$G$"$l$P!"<:GT>pJs$r<h$j=|$$$?%a%C%;!<%8%P%C%U%!$r:n$jI=<($7$^$9!#\e(B
+@dfn{\e$B<:GT%a%C%;!<%8\e(B} \e$B$OIaDL$O\e(B @code{mailer-daemon} \e$B$+$iG[AwIT2D$H$7$FJV\e(B
+\e$BAw$5$l$?%a!<%k$G$9!#\e(B
+
+@vindex message-ignored-bounced-headers
+\e$B@55,I=8=\e(B @code{message-ignored-bounced-headers} \e$B$K9gCW$9$k%X%C%@!<$O%P%C\e(B
+\e$B%U%!$r:n$j>e$2$kA0$K<h$j=|$+$l$^$9!#=i4|CM$O\e(B 
+@samp{^\\(Received\\|Return-Path\\):} \e$B$G$9!#\e(B
+
+
+@node Commands
+@chapter \e$BL?Na\e(B
+
+@menu
+* Header Commands::     \e$B%X%C%@!<$K0\F0$9$k$?$a$NL?Na!#\e(B
+* Movement::            \e$B%a%C%;!<%8%P%C%U%!$rF0$-2s$k!#\e(B
+* Insertion::           \e$B%a%C%;!<%8%P%C%U%!$KJ*;v$rA^F~$9$k!#\e(B
+* Various Commands::    \e$B$$$m$$$m$J;v!#\e(B
+* Sending::             \e$B<B:]$K%a%C%;!<%8$rAw$k!#\e(B
+* Mail Aliases::        \e$B$I$N$h$&$K$7$F%a!<%k$NJLL>$r;H$&$+!#\e(B
+@end menu
+
+
+@node Header Commands
+@section \e$B%X%C%@!<L?Na\e(B
+
+\e$B$3$l$i$NA4$F$NL?Na$OEv$N%X%C%@!<$K0\F0$7$^$9!#$b$7$=$l$,B8:_$7$J$$$H!"$=\e(B
+\e$B$l$OA^F~$5$l$^$9!#\e(B
+
+@table @kbd
+
+@item C-c ?
+@kindex C-c ?
+@findex message-goto-to
+\e$B%a%C%;!<%8%b!<%I$N5-=R$G$9!#\e(B
+
+@item C-c C-r C-t
+@kindex C-c C-f C-t
+@findex message-goto-to
+@code{To} \e$B%X%C%@!<$K9T$-$^$9\e(B (@code{message-goto-to})\e$B!#\e(B
+
+@item C-c C-f C-b
+@kindex C-c C-f C-b
+@findex message-goto-bcc
+@code{Bcc} \e$B%X%C%@!<$K9T$-$^$9\e(B (@code{message-goto-bcc})\e$B!#\e(B
+
+@item C-c C-f C-f
+@kindex C-c C-f C-f
+@findex message-goto-fcc
+@code{Fcc} \e$B%X%C%@!<$K9T$-$^$9\e(B (@code{message-goto-fcc})\e$B!#\e(B
+
+@item C-c C-f C-c
+@kindex C-c C-f C-c
+@findex message-goto-cc
+@code{Cc} \e$B%X%C%@!<$K9T$-$^$9\e(B (@code{message-goto-cc})\e$B!#\e(B
+
+@item C-c C-f C-s
+@kindex C-c C-f C-s
+@findex message-goto-subject
+@code{Subject} \e$B%X%C%@!<$K9T$-$^$9\e(B (@code{message-goto-subject})\e$B!#\e(B
+
+@item C-c C-f C-r
+@kindex C-c C-f C-r
+@findex message-goto-reply-to
+@code{Reply-To} \e$B%X%C%@!<$K9T$-$^$9\e(B (@code{message-goto-reply-to})\e$B!#\e(B
+
+@item C-c C-f C-n
+@kindex C-c C-f C-n
+@code{Neswsgroups} \e$B%X%C%@!<$K9T$-$^$9\e(B (@code{message-goto-newsgroups})\e$B!#\e(B
+
+@item C-c C-f C-d
+@kindex C-c C-f C-d
+@findex message-goto-distribution
+@code{Distribution} \e$B%X%C%@!<$K9T$-$^$9\e(B 
+(@code{message-goto-distribution})\e$B!#\e(B
+
+@item C-c C-f C-o
+@kindex C-c C-f C-o
+@findex message-goto-followup-to
+@code{Followup-To} \e$B%X%C%@!<$K9T$-$^$9\e(B (@code{message-goto-followup-to})\e$B!#\e(B
+
+@item C-c C-f C-k
+@kindex C-c C-f C-k
+@findex message-goto-keywords
+@code{Keywords} \e$B%X%C%@!<$K9T$-$^$9\e(B (@code{message-goto-keywords})\e$B!#\e(B
+
+@item C-c C-f C-u
+@kindex C-c C-f C-u
+@findex message-goto-summary
+@code{Summary} \e$B%X%C%@!<$K9T$-$^$9\e(B (@code{message-goto-summary})\e$B!#\e(B
+
+@end table
+
+
+@node Movement
+@section \e$B0\F0\e(B
+
+@table @kbd
+@item C-c C-b
+@kindex C-c C-b
+@findex message-goto-body
+\e$B%a%C%;!<%8$NK\BN$N@hF,$K0\F0$7$^$9\e(B (@code{message-goto-body})\e$B!#\e(B
+
+@item C-c C-i
+@kindex C-c C-i
+@findex message-goto-signature
+\e$B%a%C%;!<%8$N=pL>$K0\F0$7$^$9\e(B (@code{message-goto-signature})\e$B!#\e(B
+
+@end table
+
+
+@node Insertion
+@section \e$BA^F~\e(B
+
+@table @kbd
+
+@item C-c C-y
+@kindex C-c C-y
+@findex message-yank-original
+\e$B%P%C%U%!\e(B @code{gnus-article-copy} \e$B$K$"$k%a%C%;!<%8$r%a%C%;!<%8%P%C%U%!$K\e(B
+\e$BE=$jIU$1$^$9!#IaDL$O\e(B @code{gnus-article-copy} \e$B$O$"$J$?$,JVEz$7$h$&$H$7$F\e(B
+\e$B$$$k%a%C%;!<%8$G$9\e(B (@code{messsage-yank-original})\e$B!#\e(B
+
+@item C-c C-q
+@kindex C-c C-q
+@findex message-fill-yanked-message
+\e$BE=$jIU$1$i$l$?%a%C%;!<%8$r@^$jJV$7$^$9\e(B 
+(@code{message-fill-yanked-message})\e$B!#7Y9p\e(B: \e$B$b$7!"0zMQ$N=,47$,JQ$G$"$k$J\e(B
+\e$B$i!"E=$jIU$1$i$l$?J8>O$r$R$I$/$0$A$c$0$A$c$K$7$F$7$^$&$+$b$7$l$^$;$s!#$=\e(B
+\e$B$l$,0BA4$G$"$k$HCN$k$H!"$9$0$K?M?4CO$D$/$G$7$g$&$,!#$H$K$+$/!"\e(B@kbd{C-x
+u} (@code{undo}) \e$B$,;HMQ2DG=$G!"Bg>fIW$G$"$k$H8@$&;v$r3P$($F$*$$$F2<$5$$!#\e(B
+
+
+@item C-c C-w
+@kindex C-c C-w
+@findex message-insert-signature
+\e$B%P%C%U%!$N:G8e$K=pL>$rA^F~$7$^$9\e(B (@code{message-insert-signature})\e$B!#\e(B
+
+@end table
+
+@table @code
+@item message-ignored-cited-headers
+\e$B$3$N@55,I=8=$K9gCW$9$kA4$F$N%X%C%@!<$OE=$jIU$1$i$l$?%a%C%;!<%8$+$i<h$j=|\e(B
+\e$B$+$l$^$9!#=i4|CM$O\e(B @samp{.} \e$B$G!"$3$l$OA4$F$N%X%C%@!<$,<h$j=|$+$l$k$H8@$&\e(B
+\e$B;v$G$9!#\e(B
+
+@item message-citation-line-function
+@vindex message-citation-line-function
+\e$B0zMQ9T$rA^F~$9$k$?$a$K8F$P$l$k4X?t$G$9!#=i4|CM$O\e(B 
+@code{message-insert-citation-line} \e$B$G!"$3$l$O0zMQ9T$r<!$N$h$&$K$7$^$9\e(B:
+
+@example
+Hallvard B Furuseth <h.b.furuseth@@usit.uio.no> writes:
+@end example
+
+\e$B$3$N4X?t$,8F$P$l$?$H$-!"%]%$%s%H$O%a%C%;!<%8$NK\BN$N@hF,$K$"$k$G$7$g$&!#\e(B
+
+@item message-yank-prefix
+@vindex message-yank-prefix
+@cindex yanking
+@cindex quoting
+\e$B$"$J$?$,5-;v$KJVEz$+%U%)%m!<%"%C%W$r$7$F$$$k$H$-$O!"IaDL$O$"$J$?$,1~Ez$7\e(B
+\e$B$F$$$k?M$N$b$N$K0zMQId$rIU$1$?$$$G$7$g$&!#0zMQJ8$NA^F~$O\e(B @dfn{\e$BE=$jIU$1\e(B} 
+\e$B$K$h$C$F$J$5$l!"$=$l$>$l$NE=$jIU$1$i$l$?0zMQ9T$O$=$NA0$K\e(B 
+@code{message-yank-prefix} \e$B$rIU$1$i$l$^$9!#=i4|CM$O\e(B @samp{> } \e$B$G$9!#$b$7\e(B
+\e$B$=$l$,\e(B @code{nil} \e$B$G$"$l$P!"%a%C%;!<%8$N;z2<$2$@$1$r$7$^$9!#\e(B
+
+@item message-indentation-spaces
+@vindex message-indentation-spaces
+\e$BE=$jIU$1$i$l$?%a%C%;!<%8$r;z2<$2$9$k$?$a$N6uGr$N?t$G$9!#\e(B
+
+@item message-cite-function
+@vindex message-cite-function
+@findex message-cite-original
+@findex sc-cite-original
+@findex message-cite-original-without-signature
+@cindex Supercite
+\e$BK\5-;v$r0zMQ$9$k$?$a$N4X?t$G$9!#=i4|CM$O\e(B @code{message-cite-original} \e$B$G!"\e(B
+\e$B$3$l$OC1=c$K$b$H$N%a%C%;!<%8$rA^F~$7!"$=$l$>$l$N9T$NF,$K\e(B @samp{> } \e$B$r$/$C\e(B
+\e$B$D$1$^$9!#\e(B@code{message-cite-original-without-signature} \e$B$OF1MM$N;v$r$7\e(B
+\e$B$^$9$,!"=pL>$O>J$-$^$9!#\e(BSupercite \e$B$r;H$&$?$a$K!"$=$l$r\e(B 
+@code{sc-cite-original} \e$B$K@_Dj$9$k;v$b$G$-$^$9!#\e(B
+
+@item message-indent-citation-function
+@vindex message-indent-citation-function
+\e$B$A$g$&$I%a!<%k%P%C%U%!$KA^F~$5$l$?0zMQJ8$r=$@5$9$k$?$a$N4X?t$G$9!#$3$l$O\e(B
+\e$B4X?t$N%j%9%H$G$"$k;v$b$G$-$^$9!#$=$l$>$l$N4X?t$O\e(B @code{(point)} \e$B$H\e(B 
+@code{(mark t)} \e$B$N4V$G0zMQ$rH/8+$9$k;v$,$G$-$^$9!#$=$7$F!"$=$l$>$l$N4X?t\e(B
+\e$B$O0zMQJ8$,=$@5$5$l$k$H!"$=$N<~$j$K%]%$%s%H$H%^!<%/$r;D$5$J$1$l$P$J$j$^$;\e(B
+\e$B$s!#\e(B
+
+@item message-signature
+@vindex message-signature
+\e$B%a%C%;!<%8%P%C%U%!$N:G8e$KA^F~$5$l$kJ8;zNs$G$9!#$b$7\e(B @code{t} (\e$B$3$l$,=i\e(B
+\e$B4|@_Dj$G$9\e(B) \e$B$G$"$l$P!"%U%!%$%k\e(B @code{message-signature-file} \e$B$,Be$o$j$K\e(B
+\e$BA^F~$5$l$^$9!#$b$74X?t$G$"$l$P!"4X?t$N7k2L$,Be$o$j$K;H$o$l$^$9!#$b$7<0$G\e(B
+\e$B$"$l$P!"<0$N7k2L$,JQ$o$j$K;H$o$l$^$9!#$3$NJQ?t$,\e(B @code{nil} \e$B$G$"$l$P!"=p\e(B
+\e$BL>$OA4$/A^F~$5$l$^$;$s!#\e(B
+
+@item messsage-signature-file
+@vindex message-signature-file
+\e$B%P%C%U%!$N:G8e$KA^F~$5$l$k=pL>$NF~$C$F$$$k%U%!%$%k$G$9!#=i4|CM$O\e(B 
+@samp{~/.signature} \e$B$G$9!#\e(B
+
+@end table
+
+RFC1036bis \e$B$O!"=pL>$O$=$NA0$K\e(B @samp{-- } \e$B$N\e(B3\e$BJ8;z$@$1$N9T$,$"$k$Y$-$G$"$k\e(B
+\e$B$H8@$C$F$$$k;v$KCm0U$7$F2<$5$$!#$3$l$O<u$1<j$,<+F0E*$K=pL>$rG'<1$7$F!"=h\e(B
+\e$BM}$r$9$k;v$r4JC1$K$9$k$?$a$G$9!#$G$9$+$i!"$"$J$?$NH~$7$$%G%6%$%s$r$=$l$,!"\e(B
+\e$B$"$N!"40A4$KGK2u$7$F$$$k$H46$8$F$b$=$l$i$NJ8;z$r<h$j=|$+$J$$$G$/$@$5$$!#\e(B
+
+\e$B=pL>$O\e(B4\e$B9T$h$jB?$/$J$k$Y$-$G$OL5$$$H8@$&;v$bCm0U$7$F2<$5$$!#\e(BASCII \e$B$N3($r\e(B
+\e$BF~$l$k;v$O!"3'$K$"$J$?$,GO</$G2?$b=EMW$J;v$O8@$o$J$$$H8@$&;v$r?.$8$5$;$k\e(B
+\e$B$?$a$N8z2LE*$JJ}K!$G$9!#\e(B
+
+
+
+@node Various Commands
+@section \e$B$$$m$$$m$JL?Na\e(B
+
+@table @kbd
+
+@item C-c C-r
+@kindex C-c C-r
+@findex message-caesar-buffer-body
+\e$B8=:_$N%a%C%;!<%8$r%7!<%6!<JQ49\e(B (\e$BJLL>\e(B rot13) \e$B$7$^$9\e(B 
+(@code{message-caesar-buffer-body})\e$B!#$b$7HO0O8BDj$,<B9T$5$l$F$$$?$i!"%P%C\e(B
+\e$B%U%!$N8+$($kItJ,$@$1$rJQ49$7$^$9!#?tCM@\F,0z?t$OJ8$r$I$N$/$i$$2sE>$5$;$k\e(B
+\e$B$+$r;XDj$7$^$9!#=i4|CM$O\e(B 13 \e$B$G$9!#\e(B
+
+@item C-c C-e
+@kindex C-c C-e
+@findex message-elide-region
+\e$B%]%$%s%H$H%^!<%/$N4V$NJ8$r>J$-$^$9\e(B (@code{message-elide-region})\e$B!#J8>O$O\e(B
+\e$B@Z$i$l$F\e(B (killed) \e$B>JN,Id9f\e(B (@samp{[...]} \e$B$,$=$N>l=j$KA^F~$5$l$^$9!#\e(B
+
+@item C-c C-z
+@kindex C-c C-x
+@findex message-kill-to-signature
+\e$B=pL>$^$G$+!"$=$l$,L5$1$l$P5-;v$N:G8e$^$G$NA4$F$NJ8$r@Z$j$^$9\e(B 
+(@code{message-kill-to-signature})\e$B!#\e(B
+
+@item C-c C-v
+@kindex C-c C-v
+@findex message-delete-not-region
+\e$B%a%C%;!<%8$NK\BN$N%j!<%8%g%s$N30$NA4$F$NJ8$r>C5n$7$^$9\e(B 
+(@code{message-delete-not-region})\e$B!#\e(B
+
+@item M-RET
+@kindex M-RET
+@kindex message-newline-and-format
+4\e$B$D$N?7$7$$9T$rA^F~$7!"$b$7%]%$%s%H$,0zMQJ8$N4V$K$"$k$J$i$P!":F@07A$7$^\e(B
+\e$B$9!#\e(B
+
+\e$B$3$l$ONc$G$9\e(B:
+
+@example
+> \e$B$3$l$O2?$+$N0zMQJ8$G$9!#\e(B \e$B$=$7$F!"$3$3$K$O$b$C$H0zMQJ8$,$"$j$^$9!#\e(B
+@end example
+
+\e$B$b$7!"%]%$%s%H$,\e(B @samp{\e$B$=$7$F\e(B} \e$B$NA0$K$"$j!"\e(B@kbd{M-RET} \e$B$r2!$7$?$J$i!"0J\e(B
+\e$B2<$N$h$&$J$b$N$rF@$^$9\e(B:
+
+@example
+> \e$B$3$l$O2?$+$N0zMQJ8$G$9!#\e(B
+
+*
+
+> \e$B$=$7$F!"$3$3$K$O$b$C$H0zMQJ8$,$"$j$^$9!#\e(B
+@end example
+
+@samp{*} \e$B$O%]%$%s%H$,CV$+$l$F$$$k>l=j$G$9!#\e(B
+
+@item C-c C-t
+@kindex C-c C-t
+@findex message-insert-to
+\e$B%U%)%m!<%"%C%W$7$h$&$H$9$k%a%C%;!<%8$N\e(B @code{Reply-To} \e$B$b$7$/$O\e(B 
+@code{From} \e$B%X%C%@!<$r4^$`\e(B @code{To} \e$B%X%C%@!<$rA^F~$7$^$9\e(B 
+(@code{message-insert-to})\e$B!#\e(B
+
+@item C-c C-n
+@kindex C-c C-n
+@findex message-insert-newsgroups
+\e$BJVEz$7$F$$$k5-;v$N\e(B @code{Followup-To} \e$B$b$7$/$O!"\e(B@code{Nesgroups} \e$B%X%C%@!<\e(B
+\e$B$rH?1G$7$?\e(B @code{Newsgroups} \e$B%X%C%@!<$rA^F~$7$^$9\e(B 
+(@code{message-insert-newsgroups})\e$B!#\e(B
+
+@item C-c M-r
+@kindex C-c M-r
+@findex message-rename-buffer
+\e$B%P%C%U%!$NL>A0$rJQ99$7$^$9\e(B (@code{message-rename-buffer})\e$B!#@\F,0z?t$rM?\e(B
+\e$B$($i$l$l$P!"?7$7$$%P%C%U%!L>$NF~NO$rB%?J$7$^$9!#\e(B
+
+@end table
+
+
+@node Sending
+@section \e$BAw?.\e(B
+
+@table @kbd
+@item C-c C-c
+@kindex C-c C-c
+@findex message-send-and-exit
+\e$B%a%C%;!<%8$rAw?.$7!"8=:_$N%P%C%U%!$rKd$a$^$9\e(B 
+(@code{message-send-and-exit})\e$B!#\e(B
+
+@item C-c C-s
+@kindex C-c C-s
+@findex message-send
+\e$B%a%C%;!<%8$rAw?.$7$^$9\e(B (@code{message-send})\e$B!#\e(B
+
+@item C-c C-d
+@kindex C-c C-d
+@findex message-dong-send
+\e$B%a%C%;!<%8%P%C%U%!$rKd$a$F=*N;$7$^$9\e(B (@code{message-dont-send})\e$B!#\e(B
+
+@item C-c C-k
+@kindex C-c C-k
+@findex message-kill-buffer
+\e$B%a%C%;!<%8%P%C%U%!$r@Z$C$F=*N;$7$^$9\e(B (@code{message-kill-buffer})\e$B!#\e(B
+
+@end table
+
+
+
+@node Mail Aliases
+@section \e$B%a!<%kJLL>\e(B
+@cindex mail aliases
+@cindex aliases
+
+@vindex message-mail-alias-type
+\e$BJQ?t\e(B @code{message-mail-alias-type} \e$B$O$I$N$h$&$J7?$N%a!<%kJLL>\e(B (mail
+alias) \e$B?-D%$r;H$&$+$r@)8f$7$^$9!#8=:_$G$O!"0l$D$NMM<0$@$1$,;HMQ2DG=$G$9\e(B---
+Message \e$B$O%a!<%kJLL>$r07$&$?$a$K\e(B @code{mailabbrev} \e$B$r;H$$$^$9!#$b$7$3$N\e(B
+\e$BJQ?t$,\e(B @code{nil} \e$B$G$"$k$J$i!"%a!<%kJLL>?-D%$O<B9T$5$l$^$;$s!#\e(B
+
+@code{Mailabbrev} \e$B$O\e(B @file{/etc/mailrc} \e$B$H\e(B @file{~/.mailrc} \e$B%U%!%$%k$r2r\e(B
+\e$B@O$9$k;v$K$h$jF0:n$7$^$9!#%U%!%$%k$O<!$N$h$&$K$J$C$F$$$^$9\e(B:
+
+@example
+alias lmi "Lars Magne Ingebrigtsen <larsi@@ifi.uio.no>"
+alias ding "ding@@ifi.uio.no (ding mailing list)"
+@end example
+
+\e$B$3$N$h$&$J9T$r$"$J$?$N\e(B @file{~/.mailrc} \e$B%U%!%$%k$KDI2C$7$?8e$G!"\e(B
+@code{To} \e$B$d\e(B @code{Cc} (\e$BEy$J$I\e(B) \e$B$N%X%C%@!<$G\e(B @samp{lmi} \e$B$H=q$$$F!"\e(B
+@kbd{SPC} \e$B$r2!$9$@$1$GJLL>$r?-D%$7$^$9!#\e(B
+
+\e$B%a%C%;!<%8$rAw$k$H$-$K$O?-D%$O9T$o$l$^$;$s\e(B---\e$BA4$F$N?-D%$OL@<(E*$K9T$o$l\e(B
+\e$B$J$/$F$O$J$j$^$;$s!#\e(B
+
+
+
+@node Variables
+@chapter \e$BJQ?t\e(B
+
+@menu
+* Message Headers::             \e$B0lHLE*$J%a%C%;!<%8%X%C%@!<$N$h$&$J$b$N!#\e(B
+* Mail Headers::                \e$B%a!<%k%X%C%@!<$r%+%9%?%^%$%:$9$k!#\e(B
+* Mail Variables::              \e$BB>$N%a!<%kJQ?t!#\e(B
+* News Headers::                \e$B%K%e!<%9%X%C%@!<$r%+%9%?%^%$%:$9$k!#\e(B
+* News Variables::              \e$BB>$N%K%e!<%9JQ?t!#\e(B
+* Various Message Variables::   \e$BB>$N%a%C%;!<%8JQ?t!#\e(B
+* Sending Variables::           \e$BAw?.$9$k$?$a$NJQ?t!#\e(B
+* Message Buffers::             Message \e$B$,$=$N%P%C%U%!$NL>A0$rIU$1$kJ}K!!#\e(B
+* Message Actions::             \e$B=*N;$9$k$H$-$K<B9T$5$l$kF0:n!#\e(B
+@end menu
+
+
+@node Message Headers
+@section \e$B%a%C%;!<%8%X%C%@!<\e(B
+
+Message \e$B$O%a%C%;!<%8:n@.ItJ,$K4X$7$F$OHs>o$K@Q6KE*$G$9!#$=$l$O<!$N$h$&$G\e(B
+\e$B$J$1$l$P$J$j$^$;$s\e(B -- \e$B$=$l$O%K%e!<%9$H%a!<%k$NJ#9gBeM}$G$9!#J#9g%a%C%;!<\e(B
+\e$B%8$rAw$k;v$,$G$-$k$h$&$K!"$^$?!"$=$l$O%a%C%;!<%8$N%a!<%k$H%K%e!<%9$NJ#@=\e(B
+\e$B$,==J,$KF1$8$h$&$K8+$($k$h$&$K!"A4$F$N%X%C%@!<$r$=$l<+?H$G:n@.$7$^$9!#\e(B
+
+@table @code
+
+@item message-generate-headers-first
+@vindex message-generate-headers-first
+@code{nil} \e$B$G$J$1$l$P!"%a%C%;!<%8$N:n@.$r;O$a$kA0$KA4$F$N%X%C%@!<$r:n@.\e(B
+\e$B$7$^$9!#\e(B
+
+@item message-from-style
+@vindex message-from-style
+@code{From} \e$B%X%C%@!<$,$I$N$h$&$K8+$($k$+$r;XDj$7$^$9!#\e(B4\e$B$D$N9gK!E*CM$,$"\e(B
+\e$B$j$^$9\e(B:
+
+@table @code
+@item nil
+\e$B%"%I%l%9$@$1$G$9\e(B -- @samp{king@@grassland.com}.
+
+@item parens
+@samp{king@@granssland.com (Elvis Parsley)}.
+
+@item angles
+@samp{Elvis Parsley <king@@grassland.com>}.
+
+@item default
+\e$B$=$l$,0zMQId9f$rMW5a$7$J$1$l$P\e(B @code{angles} \e$B$N$h$&$K8+$(!"$b$70zMQId9f\e(B
+\e$B$,MW5a$5$l$k>l9g$O\e(B @code{parens} \e$B$N$h$&$K8+$($^$9!#\e(B@code{parens} \e$B$,0zMQ\e(B
+\e$BId9f$rMW5a$7$?$H$7$F$b!"$H$K$+$/\e(B @code{angles} \e$B$r;H$$$^$9!#\e(B
+
+@end table
+
+@item message-deletable-headers
+@vindex message-deletable-headers
+\e$B$3$N%j%9%H$K$"$k!"0JA0$K\e(B Message \e$B$K$h$j:n@.$5$l$?%X%C%@!<$OEj9F$9$kA0$K\e(B
+\e$B:o=|$5$l$^$9!#5-;v$rEj9F$9$k$H$7$^$7$g$&!#$=$l$+$i!"$o$s$Q$/K7<g$J$"$J$?\e(B
+\e$B$O$=$l$r2?$+B>$N%0%k!<%W$K:F$SEj9F$9$k;v$K7hDj$7$?$N$G!"\e(B
+@code{*post-buf*} \e$B%P%C%U%!$KLa$j!"\e(B@code{Newsgroups} \e$B9T$rJT=8$7!":F$SAw$j\e(B
+\e$B=P$7$?$H$7$^$9!#=i4|@_Dj$G$O!"$3$NJQ?t$OA0$K:n@.$5$l$?8E$$\e(B 
+@code{Message-ID} \e$B$,<h$j=|$+$l!"?7$7$$$b$N$,:n@.$5$l$k;v$r3N<B$K$7$F$$$^\e(B
+\e$B$9!#$b$7$3$l$,$J$5$l$J$$$H!"Dk9qA4BN$O$*$=$i$/Jx2u$7!"L5@/I\<g5A$,?;F)$7!"\e(B
+\e$BG-$,\e(B2\e$BK\$NB-$GJb$-;O$a!"@$3&$r;YG[$9$k$G$7$g$&!#J9$/$H$3$m$K0M$l$P!#\e(B
+
+@item message-default-headers
+@vindex message-default-headers
+\e$B$3$NJ8;zNs$OA4$F$N%a%C%;!<%8%P%C%U%!$N%X%C%@!<$N:G8e$KA^F~$5$l$^$9!#\e(B
+
+@item message-subject-re-regexp
+@vindex message-subject-re-regexp
+\e$B%a%C%;!<%8$X$N1~Ez$O\e(B @samp{Re: } \e$B$G;O$^$j$^$9!#$3$l$O1Q8l$N\e(B ``response'' 
+\e$B$NN,$G$O\e(B @emph{\e$B$"$j$^$;$s\e(B} \e$B$,!"%i%F%s8l$G!"\e(B``\e$B$=$l$K1~Ez$7$F\e(B'' (in
+response to) \e$B$H8@$&0UL#$G$9!#$$$/$D$+$NL53X$NGO</$O$3$N;v<B$rF@$k;v$K<:\e(B
+\e$BGT$7!"H`$i$N%=%U%H%&%'%"$r4w$^$o$7$$\e(B @samp{Aw: } (``antwort'') \e$B$d\e(B 
+@samp{Sv: } (``svar'') \e$B$rBe$o$j$K;H$&$h$&$K\e(B ``\e$B9q:]2=\e(B'' \e$B$7$^$7$?!#$=$l$O\e(B
+\e$B0UL#$,L5$/!"<Y0-$G$9!#$7$+$7!"$3$l$i$N<Y0-$JF;6q$r;H$C$?MxMQ<T$r07$o$J$1\e(B
+\e$B$l$P$J$i$J$$$+$b$7$l$^$;$s$N$G!"$=$N$h$&$J>l9g$O$3$NJQ?t$r$3$l$i$N@\F,8l\e(B
+\e$B$K9g$&$h$&$J@55,I=8=$K@_Dj$9$k$G$7$g$&!#;d<+?H$O!"$=$N$h$&$J5,3J$K=>$o$J\e(B
+\e$B$$%a!<%k$O$?$@<N$F5n$C$F$$$k$@$1$G$9!#\e(B
+
+@end table
+
+
+@node Mail Headers
+@section \e$B%a!<%k%X%C%@!<\e(B
+
+@table @code
+@item message-required-mail-headers
+@vindex message-required-mail-headers
+\e$B$3$NJQ?t$N9=J8$rCN$j$?$1$l$P!"\e(B@xref{News Headers} \e$B$r;2>H$7$F2<$5$$!#$=$l\e(B
+\e$B$N=i4|CM$O\e(B @code{(From Date Subject (optional . In-Reply-To) Message-ID
+Lines (optional . X-Mailer))} \e$B$G$9!#\e(B
+
+@item message-ignored-mail-headers
+@vindex message-ignored-mail-headers
+\e$B%a!<%k$r=P$9A0$K<h$j=|$+$l$k%X%C%@!<$N@55,I=8=$G$9!#=i4|CM$O\e(B 
+@samp{^[GF]cc:\\|^Resent-Fcc:} \e$B$G$9!#\e(B
+
+@item message-default-mail-headers
+@vindex message-default-mail-headers
+\e$B$3$NJ8;zNs$O%a!<%k$H$7$F=i4|2=$5$l$?A4$F$N%a%C%;!<%8%P%C%U%!$N%X%C%@!<$N\e(B
+\e$B:G8e$NA^F~$5$l$^$9!#\e(B
+
+@end table
+
+
+@node Mail Variables
+@section \e$B%a!<%kJQ?t\e(B
+
+@table @code
+@item message-send-mail-function
+@vindex message-send-mail-function
+\e$B8=:_$N%P%C%U%!$r%a!<%k$H$7$FAw$k$?$a$K;H$o$l$k4X?t$G$9!#=i4|CM$O\e(B 
+@code{message-send-mail-with-sendmail} \e$B$G$9!#$b$7Be$o$j$K\e(B MH \e$B$GAw$k$N$r\e(B
+\e$B9%$`$N$G$"$l$P!"$3$NJQ?t$r\e(B @code{message-send-mail-with-mh} \e$B$K@_Dj$7$F2<\e(B
+\e$B$5$$!#\e(B
+
+@item message-mh-deletable-headers
+@vindex message-mh-deletable-headers
+\e$B$[$H$s$I$NHG$N\e(B MH \e$B$O$3$NJQ?t$N%X%C%@!<$r4^$`%a%C%;!<%8$r?)$o$5$l$k$N$r7y\e(B
+\e$B$$$^$9!#$3$NJQ?t$,\e(B @code{nil} \e$B$G$J$$$J$i\e(B (\e$B$3$l$,=i4|@_Dj$G$9$,\e(B)\e$B!"$3$l$i\e(B
+\e$B$N%X%C%@!<$O\e(B MH \e$B$r;H$C$F%a%C%;!<%8$rAw$C$F$$$k$H$-$K$O<h$j=|$+$l$^$9!#$"\e(B
+\e$B$J$?$N\e(B MH \e$B$,$3$l$i$N%X%C%@!<$r07$($k$N$G$"$l$P!"$=$l$r\e(B @code{nil} \e$B$K@_Dj\e(B
+\e$B$7$F2<$5$$!#\e(B
+
+@end table
+
+
+@node News Headers
+@section \e$B%K%e!<%9%X%C%@!<\e(B
+
+@vindex message-required-news-headers
+@code{message-required-news-headers} \e$B$O%X%C%@!<%7%s%\%k$N%j%9%H$G$9!#$3\e(B
+\e$B$l$i$N%X%C%@!<$O<+F0E*$K:n@.$5$l$k$+!"$b$7$/$O$=$l$,IT2DG=$G$"$l$P!"F~NO\e(B
+\e$B$rB%?J$7$^$9!#0J2<$N%7%s%\%k$O9gK!E*$G$9\e(B:
+
+@table @code
+
+@item From
+@cindex From
+@findex user-full-name
+@findex user-mail-address
+\e$B$3$NI,MW$J%X%C%@!<$O4X?t\e(B @code{message-make-from} \e$B4X?t$N7k2L$K$h$j:n$i$l!"\e(B
+\e$B$=$l$OJQ?t\e(B @code{message-from-style}, @code{user-full-name},
+@code{user-mail-address} \e$B$K0MB8$7$^$9!#\e(B
+
+@item Subject
+@cindex Subject
+\e$B$3$NI,MW$J%X%C%@!<$O!"$^$@B8:_$7$J$$>l9g$OF~NO$rB%?J$5$l$^$9!#\e(B
+
+@item Newsgroups
+@cindex Newsgroups
+\e$B$3$NI,MW$J%X%C%@!<$O$I$N%K%e!<%9%0%k!<%W$K5-;v$,Ej9F$5$l$k;v$K$J$k$+$r;X\e(B
+\e$BDj$7$^$9!#$b$7$^$@B8:_$7$F$$$J$$$J$i!"F~NO$rB%?J$5$l$^$9!#\e(B
+
+@item Organization
+@cindex organization
+\e$B$3$NA*BrG$0U$J%X%C%@!<$OJQ?t\e(B @code{message-user-organization} \e$B$K0MB8$7$F\e(B
+\e$B:n@.$5$l$^$9!#$b$7$3$NJQ?t$,\e(B @code{t} \e$B$G$"$l$P!"\e(B
+@code{message-user-organization-file} \e$B$,;H$o$l$^$9!#$3$NJQ?t$OJ8;zNs$G$"\e(B
+\e$B$k;v$b$G$-\e(B (\e$B$=$N>l9g$O$=$NJ8;zNs$,;H$o$l$^$9\e(B)\e$B!"4X?t$G$"$k;v$b$G$-$^$9\e(B 
+(\e$B$=$N4X?t$O0z?tL5$7$G8F$P$l!";H$o$l$kJ8;zNs$rJV$9I,MW$,$"$j$^$9\e(B)\e$B!#\e(B
+
+@item Lines
+@cindex Lines
+\e$B$3$NA*BrG$0U$J%X%C%@!<$O\e(B Message \e$B$K$h$j7W;;$5$l$^$9!#\e(B
+
+@item Message-ID
+@cindex Message-ID
+@vindex mail-host-address
+@findex system-name
+@cindex Sun
+\e$B$3$NI,MW$J%X%C%@!<$O\e(B Message \e$B$K$h$j:n@.$5$l$^$9!#F|IU!";~4V!"MxMQ<TL>!"\e(B
+\e$B%7%9%F%`L>$K4p$E$$$?B>$KL5$$\e(B ID \e$B$,:n@.$5$l$^$9!#\e(BMessage \e$B$O\e(B 
+@code{mail-host-address} \e$B$,Dj5A$5$l$F$$$l$P!"$=$l$r\e(B fully qualified
+domain name (FQDN) (\e$B40A4$K>r7o$rK~$?$7$?%I%a%$%sL>\e(B) \e$B$H$7$F;H$$$^$9!#$b$7\e(B
+\e$B$=$&$G$J$1$l$P!"$=$l$O\e(B @code{system-name} \e$B$r;H$$!"$=$l$O$$$/$D$+$N%^%7%s\e(B 
+-- \e$B<g$K\e(B Sun \e$B$G$O!"\e(BFQDN \e$B$rJs9p$7$^$;$s!#\e(B
+
+@item X-Newsreader
+@cindex X-Nesreader
+\e$B$3$NA*Br<+M3$J%X%C%@!<$O%m!<%+%kJQ?t\e(B @code{message-newsreader} \e$B$K$7$?$,$C\e(B
+\e$B$F:n$i$l$^$9!#\e(B
+
+@item X-Mailer
+\e$B$3$NA*Br<+M3$J%X%C%@!<$O!"4{$K\e(B @code{X-Nesreader} \e$B%X%C%@!<$,B8:_$7$F$$$k\e(B
+\e$B>l9g0J30$O!"%m!<%+%kJQ?t\e(B @code{message-mailer} \e$B$K$7$?$,$C$F:n$i$l$^$9!#\e(B
+
+@item In-Reply-To
+\e$B$3$NA*Br<+M3$J%X%C%@!<$OJVEz$7$F$$$k5-;v$N\e(B @code{Date} \e$B$H\e(B @code{From} \e$B%X%C\e(B
+\e$B%@!<$r;H$C$F:n$i$l$^$9!#\e(B
+
+@item Expires
+@cindex Expires
+\e$B$3$NHs>o$KA*Br<+M3$J%X%C%@!<$OJQ?t\e(B @code{message-expires} \e$B$K$7$?$,$C$FA^\e(B
+\e$BF~$5$l$^$9!#$3$l$O<+J,$,2?$r$7$F$$$k$+$rCN$i$J$$8B$j!";HMQ$OA4$/4+$a$i$l\e(B
+\e$B$^$;$s!#\e(B
+
+@item Distribution
+@cindex Distribution
+\e$B$3$NA*Br<+M3$J%X%C%@!<$OJQ?t\e(B @code{message-distribution-function} \e$B$K$7$?\e(B
+\e$B$,$C$F:n$i$l$^$9!#$=$l$OHs?d>)$G!"Hs>o$K8m2r$5$l$?%X%C%@!<$G$9!#\e(B
+
+@item Path
+@cindex path
+\e$B$3$NHs>o$KA*Br<+M3$J%X%C%@!<$O$*$=$i$/7h$7$F;H$o$l$F$O$J$i$J$$$G$7$g$&!#\e(B
+\e$B$7$+$7$$$/$D$+$N\e(B @emph{\e$B$H$F$b\e(B} \e$B8E$$%5!<%P!<$O$3$N%X%C%@!<$,B8:_$9$k;v$r\e(B
+\e$BMW5a$7$^$9!#\e(B@code{message-user-path} \e$B$,$3$N\e(B @code{Path} \e$B%X%C%@!<$,$I$N$h\e(B
+\e$B$&$K8+$($k$+$r$5$i$K@)8f$7$^$9!#$b$7$=$l$,\e(B @code{nil} \e$B$G$"$l$P!"%5!<%P!<\e(B
+\e$BL>$r\e(B leaf \e$B@a$H$7$F;H$$$^$9!#$b$7$=$l$,J8;zNs$G$"$l$P!"$=$NJ8;zNs$r;H$$$^\e(B
+\e$B$9!#$b$7$=$l$,J8;zNs$G$b\e(B @code{nil} \e$B$G$b$J$1$l$P!"MxMQ<T$NL>A0$@$1$r;H$$\e(B
+\e$B$^$9!#$7$+$7!"2?$i$+$N7A$G$3$NJQ?t$rO.$i$J$1$l$P$J$i$J$$I,MW@-$OHs>o$K>/\e(B
+\e$B$J$$$G$7$g$&!#\e(B
+@end table
+
+@findex yow
+@cindex Mime-Version
+\e$B2C$($F!"$"$J$?$O\e(B cons \e$B$r%j%9%H$KF~$l$k;v$,$G$-$^$9!#\e(Bcons \e$B$N\e(B car \e$B$O%7%s%\\e(B
+\e$B%k$G$"$k$Y$-$G$9!#$3$N%7%s%\%kL>$O%X%C%@!<L>$G!"\e(Bcdr \e$B$O$3$N%X%C%@!<$NCM$H\e(B
+\e$B$7$F$=$N$^$^F~$l$i$l$k$3$H$K$J$kJ8;zNs$+!"8F$P$l$k4X?t$N$I$A$i$+$G$"$k;v\e(B
+\e$B$,$G$-$^$9!#Nc$($P!"$b$7\e(B @code{Mime-Version: 1.0} \e$B$rA^F~$7$?$$$J$i!"\e(B
+@code{(Mime-Version . "1.0")} \e$B$r%j%9%H$KF~$l$k$Y$-$G$7$g$&!#$b$7$*$b$7$m\e(B
+\e$B$$0zMQ$rA^F~$7$?$$$J$i!"\e(B@code{(X-Yow . yow)} \e$B$N$h$&$J$b$N$r%j%9%H$KF~$l\e(B
+\e$B$k;v$,$G$-$k$G$7$g$&!#4X?t\e(B @code{yow} \e$B$O$=$N8e$G0z?tL5$7$G8F$P$l$^$9!#\e(B
+
+\e$B$b$7%j%9%H$,\e(B cons \e$B$N\e(B car \e$B$,\e(B @code{optional} \e$B$G$"$k\e(B cons \e$B$r4^$s$G$$$k$J$i!"\e(B
+\e$B$3$N\e(B cons \e$B$N\e(B cdr \e$B$O\e(B @code{nil} \e$B$G$J$$$H$-$@$1A^F~$5$l$^$9!#\e(B
+
+\e$B=P$F9T$/%K%e!<%95-;v$r%+%9%?%^%$%:$9$k$?$a$NB>$NJQ?t\e(B:
+
+@table @code
+
+@item message-syntax-checks
+@vindex message-syntax-checks
+@code{nil} \e$B$G$J$1$l$P!"\e(BMessage \e$B$OEj9F$NA0$K!"%X%C%@!<$HB>$N$b$N$N9gK!@-\e(B
+\e$B$rD4$Y$^$9!#$3$N%j%9%H$KMWAG$rIU$12C$($?$j<h$j=|$$$?$j$9$k;v$G!"D4$Y$kN3\e(B
+\e$B$NBg$-$5$r@)8f$9$k;v$,$G$-$^$9!#9gK!E*$JMWAG$O\e(B:
+
+@table @code
+@item subject-cmsg
+\e$BL?Na$N$?$a$NI=Bj$rD4$Y$^$9!#\e(B
+@item sender
+@cindex Sender
+@code{From} \e$B%X%C%@!<$,JQ$K8+$($l$P!"?7$7$$\e(B @code{Sender} \e$B%X%C%@!<$rA^F~\e(B
+\e$B$7$^$9!#\e(B
+@item multiple-headers
+\e$BJ#?t$NEy2A$J%X%C%@!<$NB8:_$rD4$Y$^$9!#\e(B
+@item sendsys
+@cindex sendsys
+\e$BHGHV9f$H\e(B sendsys \e$BL?Na$NB8:_$rD4$Y$^$9!#\e(B
+@item message-id
+@code{Message-ID} \e$B$,Bg>fIW$+$I$&$+D4$Y$^$9!#\e(B
+@item from
+@code{From} \e$B%X%C%@!<$,$h$/8+$($k$+$I$&$+$rD4$Y$^$9!#\e(B
+@item long-lines
+\e$B$"$^$j$KD9$$9T$rD4$Y$^$9!#\e(B
+@item control-chars
+\e$BHs9gK!J8;z$rD4$Y$^$9!#\e(B
+@item size
+\e$B2a>j$JBg$-$5$rD4$Y$^$9!#\e(B
+@item new-text
+\e$B%a%C%;!<%8$K?7$7$$J8$,$"$k$+$I$&$+$rD4$Y$^$9!#\e(B
+@item signature
+\e$B=pL>$ND9$5$rD4$Y$^$9!#\e(B
+@item approved
+@cindex approved
+\e$B5-;v$,\e(B @code{Approved} \e$B%X%C%@!<$r;}$C$F$$$k$+$I$&$+$rD4$Y$^$9!#$=$l$O;J\e(B
+\e$B2q<T$@$1$,4^$`$Y$-J*$G$9!#\e(B
+@item empty
+\e$B5-;v$,6u$+$I$&$+$rD4$Y$^$9!#\e(B
+@item empty-headers
+\e$B%X%C%@!<$N$I$l$+$,6u$G$"$k$+$rD4$Y$^$9!#\e(B
+@item existing-newsgroups
+@code{Newsgroups} \e$B$H\e(B @code{Follouup-to} \e$B$G=q$+$l$F$$$k%K%e!<%9%0%k!<%W$,\e(B
+\e$BB8:_$9$k$+$I$&$+$rD4$Y$^$9!#\e(B
+@item valid-newsgroups
+@code{Newsgroups} \e$B$H\e(B @code{Followup-to} \e$B%X%C%@!<$,9=J8E*$K@5$7$$$+$rD4$Y\e(B
+\e$B$^$9!#\e(B
+@item repeated-newsgroups
+@code{Newsgroups} \e$B$H\e(B @code{Followup-to} \e$B%X%C%@!<$K7+$jJV$5$l$?%0%k!<%WL>\e(B
+\e$B$,L5$$$+$rD4$Y$^$9!#\e(B
+@item shorten-followup-to
+\e$BEj9F$9$k%0%k!<%W$N?t$r\e(B @code{Followup-to} \e$B%X%C%@!<$rIU$12C$($k;v$G>/$J$/\e(B
+\e$B$9$k$+$rD4$Y$^$9!#\e(B
+@end table
+
+\e$B$3$l$iA4$F$N>uBV$O=i4|@_Dj$G$OD4$Y$i$l$^$9!#\e(B
+
+@item message-ignored-news-headers
+@vindex message-ignored-news-headers
+\e$BEj9F$9$kA0$K<h$j=|$+$l$k%X%C%@!<$N@55,I=8=$G$9!#=i4|CM$O\e(B @*
+@samp{^NNTP-Posting-Host:\\|^Xref:\\|^[BGF]cc:\\|^Resent-Fcc:} \e$B$G$9!#\e(B
+
+@item message-default-news-headers
+@vindex message-default-news-headers
+\e$B$3$NJ8;zNs$O%K%e!<%9$H$7$F=i4|2=$5$l$?$9$Y$F$N%a%C%;!<%8%P%C%U%!$N%X%C%@!<\e(B
+\e$B$N:G8e$KA^F~$5$l$^$9!#\e(B
+
+@end table
+
+
+@node News Variables
+@section \e$B?7$7$$JQ?t\e(B
+
+@table @code
+@item message-send-news-function
+@vindex message-send-news-function
+\e$B8=:_$N%P%C%U%!$r%K%e!<%9$H$7$FAw$k$?$a$K;H$o$l$k4X?t$G$9!#=i4|CM$O\e(B 
+@code{mesage-send-news} \e$B$G$9!#\e(B
+
+@item message-post-method
+@vindex message-post-method
+\e$B=`Hw$5$l$?%K%e!<%9%a%C%;!<%8$rEj9F$9$k$N$K;H$o$l$k\e(B gnus \e$B$N\e(B @dfn{\e$BA*BrJ}K!\e(B}
+(\e$B>\:Y$O\e(B gnus \e$B%^%K%e%"%k$r8+$F2<$5$$\e(B) \e$B$G$9!#\e(B
+
+@end table
+
+
+@node Various Message Variables
+@section \e$B$$$m$$$m$J%a%C%;!<%8JQ?t\e(B
+
+@table @code
+@item message-signature-separator
+@vindex message-signature-separator
+\e$B=pL>J,N%$K9gCW$9$k@55,I=8=$G$9!#=i4|CM$O\e(B @samp{^-- *$} \e$B$G$9!#\e(B
+
+@item mail-header-separator
+@vindex mail-header-separator
+\e$B%X%C%@!<$rK\BN$+$iJ,$1$k$N$K;H$o$l$kJ8;zNs$G$9!#=i4|CM$O\e(B @samp{--text
+follows this line--} \e$B$G$9!#\e(B
+
+@item message-directory
+@vindex message-directory
+\e$BB?$/$N%a!<%k$N$b$N$+$i;H$o$l$k%G%#%l%/%H%j!<$G$9!#=i4|CM$O\e(B 
+@file{~/Mail/} \e$B$G$9!#\e(B
+
+@item message-signature-setup-hook
+@vindex message-signature-setup-hook
+\e$B%a%C%;!<%8%P%C%U%!$r=i4|2=$9$k$H$-$K<B9T$5$l$k%U%C%/$G$9!#$=$l$O%X%C%@!<\e(B
+\e$B$,A^F~$5$l$F$$$k$,!"=pL>$,A^F~$5$l$kA0$K<B9T$5$l$^$9!#\e(B
+
+@item message-setup-hook
+@vindex message-setup-hook
+\e$B%a%C%;!<%8%P%C%U%!$,=i4|2=$5$l$?$H$-$N:G8e$G$9$,!"E=$jIU$1$i$l$kJ8>O$,A^\e(B
+\e$BF~$5$l$kA0$K<B9T$5$l$k%U%C%/$G$9!#\e(B
+
+@item message-header-setup-hook
+@vindex message-header-setup-hook
+\e$B%X%C%@!<$r=i4|2=$7$?8e$K!"%X%C%@!<$KHO0O$r8BDj$7$F8F$P$l$k%U%C%/$G$9!#\e(B
+
+\e$BNc$($P!"\e(Bgnus \e$B$r<B9T$7$F$$$F!"$"$J$?$,A4$F$N%K%e!<%95-;v$H%a!<%j%s%0%j%9\e(B
+\e$B%H$KAw$kA4$F$N%a%C%;!<%8$K\e(B @samp{Mail-Copies-To} \e$B%X%C%@!<$rA^F~$7$?$$$N\e(B
+\e$B$G$"$l$P!"0J2<$N$h$&$J;v$,$G$-$^$9\e(B:
+
+@lisp
+(defun my-message-header-setup-hook ()
+  (let ((group (or gnus-newsgroup-name "")))
+    (when (or (message-fetch-field "newsgroups")
+              (gnus-group-find-parameter group 'to-address)
+              (gnus-group-find-parameter group 'to-list))
+      (insert "Mail-Copies-To: never\n"))))
+
+(add-hook 'message-header-setup-hook
+          'my-message-header-setup-hook)
+@end lisp
+
+@item message-send-hook
+@vindex message-send-hook
+\e$B%a%C%;!<%8$rAw$kA0$K<B9T$5$l$k%U%C%/$G$9!#\e(B
+
+\e$B$b$7Aw$kA0$KFCDj$N%X%C%@!<$r2C$($?$$$N$G$"$l$P!"4X?t\e(B 
+@code{message-add-header} \e$B$r$3$N%U%C%/$K;H$&;v$,$G$-$^$9!#Nc$($P\e(B:
+@findex message-add-header
+
+@lisp
+(add-hook 'message-send-hook 'my-message-add-content)
+(defun my-message-add-content ()
+  (message-add-header
+   "Mime-Version: 1.0"
+   "Content-Type: text/plain"
+   "Content-Transfer-Encoding: 7bit"))
+@end lisp
+
+\e$B$3$N4X?t$O!"%X%C%@!<$,4{$KB8:_$7$F$$$k>l9g$O%X%C%@!<$r2C$($^$;$s!#\e(B
+
+@item message-send-mail-hook
+@vindex message-send-mail-hook
+\e$B%a!<%k%a%C%;!<%8$rAw$kA0$K<B9T$5$l$k%U%C%/$G$9!#\e(B
+
+@item message-send-news-hook
+@vindex message-send-news-hook
+\e$B%K%e!<%9%a%C%;!<%8$rAw$kA0$K<B9T$5$l$k%U%C%/$G$9!#\e(B
+
+@item message-sent-hook
+@vindex message-sent-hook
+\e$B%a%C%;!<%8$rAw$k8e$K<B9T$5$l$k%U%C%/$G$9!#\e(B
+
+@item message-mode-syntax-table
+@vindex message-mode-syntax-table
+\e$B%a%C%;!<%8%b!<%I%P%C%U%!$G;H$o$l$k9=J8%F!<%V%k$G$9!#\e(B
+
+@item message-send-method-alist
+@vindex message-send-method-alist
+
+\e$B=P$F9T$/%a%C%;!<%8$rAw$k$?$a$NJ}K!$NO"A[%j%9%H$G$9!#$=$l$>$l$NMWAG$O<!$N\e(B
+\e$B<0$r;}$C$F$$$^$9\e(B
+
+@lisp
+(TYPE PREDICATE FUNCTION)
+@end lisp
+
+@table @var
+@item type
+\e$BJ}K!$r;XDj$9$k%7%s%\%k$G$9!#\e(B
+
+@item predicate
+\e$B%a%C%;!<%8$O\e(B @var{type} \e$B$N%a%C%;!<%8$G$"$k$+$I$&$+$r7hDj$9$k$?$a$K0z?tL5\e(B
+\e$B$7$G8F$P$l$k4X?t$G$9!#\e(B
+
+@item function
+@var{predicate} \e$B$,\e(B @code{nil} \e$B$G$J$$CM$r5"$7$?$H$-$K8F$P$l$k4X?t$G$9!#\e(B
+@var{function} \e$B$O0l$D$N0z?t\e(B -- \e$B@\F,<-\e(B \e$B$H6&$K8F$P$l$^$9!#\e(B
+@end table
+
+@lisp
+((news message-news-p message-send-via-news)
+ (mail message-mail-p message-send-via-mail))
+@end lisp
+
+
+
+@end table
+
+
+
+@node Sending Variables
+@section \e$BAw$k$?$a$NJQ?t\e(B
+
+@table @code
+
+@item message-fcc-handler-function
+@vindex message-fcc-handler-function
+\e$B=P$F$$$/5-;v$rJ]B8$9$k$?$a$K8F$P$l$k4X?t$G$9!#$3$N4X?t$O5-;v$rC_@Q$9$k$?\e(B
+\e$B$a$N%U%!%$%kL>$H6&$K8F$P$l$^$9!#=i4|@_Dj$N4X?t$O\e(B @code{message-output} 
+\e$B$G!"$=$l$O\e(B Unix mailbox \e$BMM<0$GJ]B8$7$^$9!#\e(B
+
+@item message-courtesy-message
+@vindex messsage-courtesy-messsage
+\e$BJ#9g%a%C%;!<%8$rAw$k$H$-$O!"$3$NJ8;zNs$O%a!<%k$GAw$i$l$?J#@=$NJ}$N:G=i$K\e(B
+\e$BA^F~$5$l$^$9!#$b$7$=$NJ8;zNs$,=qK!;EMM;XDj\e(B @samp{%s} \e$B$r4^$s$G$$$l$P!"5-\e(B
+\e$B;v$,Ej9F$5$l$?%K%e!<%9%0%k!<%W$,$=$3$KA^F~$5$l$^$9!#$b$7$3$NJQ?t$,\e(B 
+@code{nil} \e$B$G$"$l$P!"$=$N$h$&$J?F@Z%a%C%;!<%8$O2C$($i$l$^$;$s!#=i4|CM$O\e(B 
+@samp{"The following message is a courtesy copy of an article\nthat has
+been posted to %s as well.\n\n"} \e$B$G$9!#\e(B
+
+@end table
+
+
+@node Message Buffers
+@section \e$B%a%C%;!<%8%P%C%U%!\e(B
+
+Message \e$B$O$"$J$?$,%a%C%;!<%8%P%C%U%!$rMW5a$7$?$H$-$K!"B>$KL5$$M#0l$N%P%C\e(B
+\e$B%U%!L>$G?7$7$$%P%C%U%!$r$D$/$j$^$9!#%a%C%;!<%8$rAw$C$?$H$-$K!"%P%C%U%!$O\e(B
+\e$BIaDL$O:o=|$5$l$^$;$s!#$=$NL>A0$OJQ99$5$l$F!"FCDj$N?t$N8E$$%a%C%;!<%8%P%C\e(B
+\e$B%U%!$O@8$-$?$^$^$K$J$j$^$9!#\e(B
+
+@table @code
+@item message-generate-new-buffers
+@vindex message-generate-new-buffers
+@code{nil} \e$B$G$J$1$l$P!"?7$7$$%P%C%U%!$r:n@.$7$^$9!#=i4|CM$O\e(B @code{t} \e$B$G\e(B
+\e$B$9!#$b$7$3$l$,4X?t$J$i!"$=$N4X?t$r\e(B3\e$B$D$N0z?t$H6&$K8F$S$^$9\e(B: \e$B7?!"Aw$j@h%"\e(B
+\e$B%I%l%9!"%0%k!<%WL>\e(B \e$B$G$9!#\e(B (\e$B$3$l$i$N$I$l$G$b\e(B @code{nil} \e$B$G$"$k$+$b$7$l$^\e(B
+\e$B$;$s!#\e(B) \e$B4X?t$O?7$7$$%P%C%U%!L>$rJV$9$Y$-$G$9!#\e(B
+
+@item message-use-multi-frames
+@vindex message-use-multi-frames
+@code{nil} \e$B$G$J$1$l$P!"?7$7$$%U%l!<%`$r:n@.$7$^$9!#=i4|CM$O\e(B @code{nil} 
+\e$B$G$9!#\e(B
+
+@item message-delete-frame-on-exit
+@vindex messgae-delete-frame-on-exit
+\e$BJQ?t\e(B @code{message-delete-frame-on-exit} \e$B$O%a%C%;!<%8$rAw?.$7$?$H$-$H!"\e(B
+\e$B%P%C%U%!$r@Z$C$?$H$-$K%U%l!<%`$r>C5n$9$k$+$r7hDj$7$^$9!#\e(B@code{nil} \e$B$G$"\e(B
+\e$B$l$P!"\e(B(\e$B$3$l$,=i4|@_Dj$G$9$,\e(B) \e$B%U%l!<%`$r>C5n$7$^$;$s!#\e(B@code{ask} \e$B$G$"$l$P!"\e(B
+\e$B>C5n$9$k$+$I$&$+$rMxMQ<T$K?R$M$^$9!#\e(B@code{t} \e$B$G$"$l$P!">o$K>C5n$7$^$9!#\e(B
+
+@item message-max-buffers
+@vindex message-max-buffers
+\e$B#k$NJQ?t$O$I$N$/$i$$8E$$%a%C%;!<%8%P%C%U%!$rJ]$C$F$*$/$+$r;XDj$7$^$9!#$3\e(B
+\e$B$l$h$jB?$$%a%C%;!<%8%P%C%U%!$,$"$l$P!"0lHV8E$$%P%C%U%!$,:o=|$5$l$^$9!#=i\e(B
+\e$B4|CM$O\e(B10\e$B$G$9!#$3$NJQ?t$,\e(B @code{nil} \e$B$G$"$k$H!"8E$$%a%C%;!<%8%P%C%U%!$O:o\e(B
+\e$B=|$5$l$^$;$s!#\e(B
+
+@item message-send-rename-function
+@vindex message-send-rename-function
+\e$B%a%C%;!<%8$rAw$C$?8e$G!"%P%C%U%!$NL>A0$O!"Nc$($P!"\e(B@samp{*reply to Lars*} 
+\e$B$+$i\e(B @samp{*sent reply to Lars*} \e$B$KJQ99$5$l$^$9!#$b$7$3$l$r9%$^$J$$$J$i!"\e(B
+\e$B$3$NJQ?t$r$"$J$?$N9%$-$JJ}K!$G%P%C%U%!$NL>A0$rJQ99$9$k4X?t$K@_Dj$7$F2<$5\e(B
+\e$B$$!#$=$b$=$b%P%C%U%!L>$rJQ99$9$k;v$r9%$^$J$$$N$G$"$l$P!"<!$N$h$&$K$G$-$^\e(B
+\e$B$9\e(B:
+
+@lisp
+(setq message-send-rename-function 'ignore)
+@end lisp
+
+@item message-kill-buffer-on-exit
+@findex message-kill-buffer-on-exit
+@code{nil} \e$B$G$J$1$l$P!"=*N;;~$K$9$0$K%P%C%U%!$r:o=|$7$^$9!#\e(B
+
+@end table
+
+
+@node Message Actions
+@section \e$B%a%C%;!<%8$NF0:n\e(B
+
+Message \e$B$,%K%e!<%9\e(B/\e$B%a!<%k%j!<%@!<$+$i;H$o$l$?$H$-!"%j!<%@!<$O%a%C%;!<%8\e(B
+\e$B$,Aw$i$l$?8e$N2?$i$+$N;E;v$r<B9T$7$?$,$k798~$,$"$j$^$9!#$*$=$i$/!"A0$N%&%#\e(B
+\e$B%s%I%&@_Dj$KLa$k$+!"5-;v$KJVEz$5$l$?$H8@$&0u$rIU$1$k$J$I$r$7$?$$$N$G$7$g\e(B
+\e$B$&!#\e(B
+
+@vindex message-kill-actions
+@vindex message-postpone-actions
+@vindex message-exit-actions
+@vindex message-send-actions
+\e$BMxMQ<T$O$$$m$$$m$JJ}K!$G%a%C%;!<%8%P%C%U%!$+$i=P$k$+$b$7$l$^$;$s!#0lHVNI\e(B
+\e$B$/$"$k$N$O\e(B @kbd{C-c C-c} \e$B$G!"$=$l$O%a%C%;!<%8$rAw$C$F=*N;$7$^$9!#B>$N2D\e(B
+\e$BG=@-$K$O\e(B @kbd{C-c C-s} \e$B$,$"$j!"$3$l$O%a%C%;!<%8$rAw$k$@$1$G$"$j!"\e(B
+@kbd{C-c C-d} \e$B$O%a%C%;!<%8$NJT=8$r@h$K1d$P$7$F%a%C%;!<%8%P%C%U%!$rKd$a!"\e(B
+@kbd{C-c C-k} \e$B$O%a%C%;!<%8%P%C%U%!$r:o=|$7$^$9!#$3$l$i$NF0:n$O$=$l$>$l$=\e(B
+\e$B$l$H4XO"IU$1$i$l$?%j%9%H$r;}$C$F$$$F!"$=$l$O<B9T$5$l$kF0:n$r4^$s$G$$$^$9\e(B:
+@code{message-send-actions}, @code{message-exit-actions},
+@code{message-postpone-actions}, and @code{message-kill-actions} \e$B$G$9!#\e(B
+
+Message \e$B$O$3$l$i$N%j%9%H$H:nMQ$9$k4X?t$rDs6!$7$F$$$^$9\e(B:
+@code{message-add-action} \e$B$G$9!#:G=i$N0z?t$O2C$($i$l$kF0:n$G!";D$j$N0z?t\e(B
+\e$B$O$I$N%j%9%H$K$3$NF0:n$r2C$($k$+$G$9!#$3$l$O\e(B gnus \e$B$+$i$NNc$G$9\e(B:
+
+@lisp
+  (message-add-action
+   `(set-window-configuration ,(current-window-configuration))
+   'exit 'postpone 'kill)
+@end lisp
+
+\e$B$3$l$O!"%a%C%;!<%8%P%C%U%!$,:o=|!"1d4|!"<mND$5$l$?$H$-$K\e(B gnus \e$B$N%&%#%s\e(B
+\e$B%I%&@_Dj$rI|3h$5$;$^$9!#\e(B
+
+@dfn{\e$BF0:n\e(B} \e$B$O<!$N$I$l$+$G$9\e(B: \e$BIaDL$N4X?t!"$b$7$/$O\e(B @code{car} \e$B$,4X?t$G!"\e(B
+@code{cdr} \e$B$,0z?t$N%j%9%H$G$"$k%j%9%H$+!"\e(B@code{\e$BI>2A\e(B} \e$B$5$l$k<0$G$9!#\e(B
+
+
+@node Compatibility
+@chapter \e$B8_49@-\e(B
+@cindex compatibility
+
+Message \e$B$O;v<B>e!"$=$l<+?H$NJQ?t$7$+;H$$$^$;$s\e(B---\e$B8E$$\e(B @code{mail-} \e$B$NJQ\e(B
+\e$B?t$O9MN8$5$l$^$;$s!#\e(BMessage \e$B$K$3$l$i$NJQ?t$r7W;;$KF~$l$5$;$?$$$N$G$"$l$P!"\e(B
+\e$B0J2<$N$b$N$r$"$J$?$N\e(B @code{.emacs} \e$B%U%!%$%k$KF~$l$k;v$,$G$-$^$9\e(B:
+
+@lisp
+(require 'messcompat)
+@end lisp
+
+\e$B$3$l$OB?$/$N\e(B Message \e$BJQ?t$rBP1~$9$k%a!<%kJQ?t$+$i=i4|2=$7$^$9!#\e(B
+
+
+@node Appendices
+@chapter \e$BIU5-\e(B
+
+@menu
+* Responses:: \e$B1~Ez$,2?=h$K9T$/$+$r7hDj$9$kI8=`$NK!B'!#\e(B
+@end menu 
+
+@node Responses
+@section \e$B1~Ez\e(B
+
+\e$B%a%C%;!<%8$,2?=h$K9T$/$+$r7hDj$9$k$?$a$K!"=i4|@_Dj$G$O0J2<$N%"%k%4%j%:%`\e(B
+\e$B$,;H$o$l$^$9!#\e(B
+
+@table @dfn
+@item reply
+@dfn{\e$BJVEz\e(B} (reply) \e$B$O%a%C%;!<%8$rAw$C$??M\e(B @emph{\e$B$@$1\e(B} \e$B$K%a!<%k$G1~Ez$7$?\e(B
+\e$B$$$H$-$N$b$N$G$9!#<u<h?M$O0l?M$7$+$$$^$;$s!#<u<h?M$,C/$G$"$k$+$r7hDj$9$k\e(B
+\e$B$?$a$K!"0J2<$N%X%C%@!<$,=gHV$K9MN8$5$l$^$9\e(B:
+
+@table @code
+@item Reply-To
+
+@item From
+@end table
+
+
+@item wide reply
+@dfn{\e$B9-$$JVEz\e(B} (wide reply) \e$B$O$"$J$?$,1~Ez$7$h$&$H$7$F$$$k%a%C%;!<%8$K=q\e(B
+\e$B$+$l$F$$$?\e(B @emph{\e$BA4$F$N\e(B} \e$B<BBN$r4^$`%a!<%k$K$h$k1~Ez$G$9!#0J2<$N%X%C%@!<\e(B
+\e$B$+$i$NA4$F$N%a!<%k%\%C%/%9$,O"7k$5$l$F!"=P$F$$$/\e(B @code{To}/@code{Cc} \e$B%X%C\e(B
+\e$B%@!<$r$D$/$j$^$9\e(B:
+
+@table @code
+@item From
+(@code{Reply-To} \e$B$,L5$$8B$j!"$3$l$,;H$o$l!"$=$l$,$"$k>l9g$O$=$l$,Be$o$j\e(B
+\e$B$K;H$o$l$^$9\e(B)\e$B!#\e(B
+
+@item Cc
+
+@item To
+@end table
+
+@code{Mail-Copies-To} \e$B%X%C%@!<$,B8:_$7$F$$$k$H!"$=$l$b%a!<%k%\%C%/%9$N%j\e(B
+\e$B%9%H$K2C$($i$l$k$G$7$g$&!#$3$N%X%C%@!<$,\e(B @samp{never} \e$B$G$"$l$P!"$=$l$O\e(B 
+@code{From} (\e$B$b$7$/$O\e(B @code{Reply-To}) \e$B%a!<%k%\%C%/%9$,M^@)$5$l$k$H8@$&\e(B
+\e$B;v$G$9!#\e(B
+
+
+@item followup
+@dfn{\e$B%U%)%m!<%"%C%W\e(B} (followup) \e$B$O%K%e!<%9$K$h$k1~Ez$G$9!#0J2<$N%X%C%@!<\e(B 
+(\e$BM%@h=g0L$N9b$$$b$N$+$i5s$2$i$l$F$$$^$9\e(B) \e$B$,2?=h$K1~Ez$,Aw$i$l$k$+$r7hDj\e(B
+\e$B$7$^$9\e(B:
+
+@table @code
+
+@item Followup-To
+
+@item Newsgroups
+
+@end table
+
+\e$B$b$7\e(B @code{Mail-Copies-To} \e$B%X%C%@!<$,B8:_$9$k$H!"$=$l$,\e(B @samp{never} \e$B$G\e(B
+\e$B$J$1$l$P!"?7$7$$\e(B @code{Cc} \e$B%X%C%@!<$N4p$H$7$F;H$o$l!"$^$9!#\e(B
+
+@end table
+
+
+
+@node Index
+@chapter Index
+@printindex cp
+
+@node Key Index
+@chapter Key Index
+@printindex ky
+
+@summarycontents
+@contents
+@bye
+
+@c End:
+
index c394868..1518738 100644 (file)
@@ -1,7 +1,7 @@
 \input texinfo                  @c -*-texinfo-*-
 
 @setfilename message
-@settitle Pterodactyl Message 0.93 Manual
+@settitle Message 5.6.45 Manual
 @synindex fn cp
 @synindex vr cp
 @synindex pg cp
@@ -17,7 +17,7 @@
 
 This file documents Message, the Emacs message composition mode.
 
-Copyright (C) 1996,97,98,99 Free Software Foundation, Inc.
+Copyright (C) 1996 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -42,13 +42,13 @@ into another language, under the above conditions for modified versions.
 @tex
 
 @titlepage
-@title Pterodactyl Message 0.93 Manual
+@title Message 5.6.45 Manual
 
 @author by Lars Magne Ingebrigtsen
 @page
 
 @vskip 0pt plus 1filll
-Copyright @copyright{} 1996,97,98,99 Free Software Foundation, Inc.
+Copyright @copyright{} 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
@@ -83,9 +83,9 @@ Message mode buffers.
 * Key Index::         List of Message mode keys.
 @end menu
 
-This manual corresponds to Pterodactyl Message 0.93.  Message is
-distributed with the Gnus distribution bearing the same version number
-as this manual.
+This manual corresponds to Message 5.6.45.  Message is distributed with
+the Gnus distribution bearing the same version number as this manual
+has. 
 
 
 @node Interface
@@ -116,7 +116,7 @@ sending it.
 @section New Mail Message
 
 @findex message-mail
-The @code{message-mail} command pops up a new message buffer.
+The @code{message-mail} command pops up a new message buffer.  
 
 Two optional parameters are accepted: The first will be used as the
 @code{To} header and the second as the @code{Subject} header.  If these
@@ -127,7 +127,7 @@ are @code{nil}, those two headers will be empty.
 @section New News Message
 
 @findex message-news
-The @code{message-news} command pops up a new message buffer.
+The @code{message-news} command pops up a new message buffer.  
 
 This function accepts two optional parameters.  The first will be used
 as the @code{Newsgroups} header and the second as the @code{Subject}
@@ -153,8 +153,8 @@ If you want the replies to go to the @code{Sender} instead of the
 (setq message-reply-to-function
       (lambda ()
        (cond ((equal (mail-fetch-field "from") "somebody")
-               (mail-fetch-field "sender"))
-             (t
+               (mail-fetch-field "sender"))     
+             (t 
               nil))))
 @end lisp
 
@@ -170,7 +170,7 @@ This function can also return a list.  In that case, each list element
 should be a cons, where the car should be the name of an header
 (eg. @code{Cc}) and the cdr should be the header value
 (eg. @samp{larsi@@ifi.uio.no}).  All these headers will be inserted into
-the head of the outgoing mail.
+the head of the outgoing mail. 
 
 
 @node Wide Reply
@@ -186,7 +186,7 @@ reply that goes out to all people listed in the @code{To}, @code{From}
 Message uses the normal methods to determine where wide replies are to go,
 but you can change the behavior to suit your needs by fiddling with the
 @code{message-wide-reply-to-function}.  It is used in the same way as
-@code{message-reply-to-function} (@pxref{Reply}).
+@code{message-reply-to-function} (@pxref{Reply}). 
 
 @findex rmail-dont-reply-to-names
 Addresses that match the @code{rmail-dont-reply-to-names} regular
@@ -249,13 +249,13 @@ news.
 @item message-forward-start-separator
 @vindex message-forward-start-separator
 Delimiter inserted before forwarded messages.  The default is@*
-@samp{------- Start of forwarded message -------\n}.
+@samp{------- Start of forwarded message -------\n}. 
 
 @vindex message-forward-end-separator
 @item message-forward-end-separator
 @vindex message-forward-end-separator
 Delimiter inserted after forwarded messages.  The default is@*
-@samp{------- End of forwarded message -------\n}.
+@samp{------- End of forwarded message -------\n}. 
 
 @item message-signature-before-forwarded-message
 @vindex message-signature-before-forwarded-message
@@ -265,7 +265,7 @@ forwarded message will be inserted first in the new mail.
 
 @item message-included-forward-headers
 @vindex message-included-forward-headers
-Regexp matching header lines to be included in forwarded messages.
+Regexp matching header lines to be included in forwarded messages.  
 
 @item message-make-forward-subject-function
 @vindex message-make-forward-subject-function
@@ -288,7 +288,7 @@ Subject of article with @samp{Fwd:} prepended to it.
 @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:},
+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}.
 
@@ -305,7 +305,7 @@ and resend the message in the current buffer to that address.
 @vindex message-ignored-resent-headers
 Headers that match the @code{message-ignored-resent-headers} regexp will
 be removed before sending the message.  The default is
-@samp{^Return-receipt}.
+@samp{^Return-receipt}. 
 
 
 @node Bouncing
@@ -316,7 +316,7 @@ The @code{message-bounce} command will, if the current buffer contains a
 bounced mail message, pop up a message buffer stripped of the bounce
 information.  A @dfn{bounced message} is typically a mail you've sent
 out that has been returned by some @code{mailer-daemon} as
-undeliverable.
+undeliverable. 
 
 @vindex message-ignored-bounced-headers
 Headers that match the @code{message-ignored-bounced-headers} regexp
@@ -331,7 +331,6 @@ will be removed before popping up the buffer.  The default is
 * Header Commands::     Commands for moving to headers.
 * Movement::            Moving around in message buffers.
 * Insertion::           Inserting things into message buffers.
-* MIME::                @sc{mime} considerations.
 * Various Commands::    Various things.
 * Sending::             Actually sending the message.
 * Mail Aliases::        How to use mail aliases.
@@ -352,57 +351,57 @@ it will be inserted.
 Describe the message mode.
 
 @item C-c C-f C-t
-@kindex C-c C-f C-t
+@kindex C-c C-f C-t 
 @findex message-goto-to
 Go to the @code{To} header (@code{message-goto-to}).
 
 @item C-c C-f C-b
-@kindex C-c C-f C-b
+@kindex C-c C-f C-b 
 @findex message-goto-bcc
 Go to the @code{Bcc} header (@code{message-goto-bcc}).
 
 @item C-c C-f C-f
-@kindex C-c C-f C-f
+@kindex C-c C-f C-f 
 @findex message-goto-fcc
 Go to the @code{Fcc} header (@code{message-goto-fcc}).
 
 @item C-c C-f C-c
-@kindex C-c C-f C-c
+@kindex C-c C-f C-c 
 @findex message-goto-cc
 Go to the @code{Cc} header (@code{message-goto-cc}).
 
 @item C-c C-f C-s
-@kindex C-c C-f C-s
+@kindex C-c C-f C-s 
 @findex message-goto-subject
 Go to the @code{Subject} header (@code{message-goto-subject}).
 
 @item C-c C-f C-r
-@kindex C-c C-f C-r
+@kindex C-c C-f C-r 
 @findex message-goto-reply-to
 Go to the @code{Reply-To} header (@code{message-goto-reply-to}).
 
 @item C-c C-f C-n
-@kindex C-c C-f C-n
+@kindex C-c C-f C-n 
 @findex message-goto-newsgroups
 Go to the @code{Newsgroups} header (@code{message-goto-newsgroups}).
 
 @item C-c C-f C-d
-@kindex C-c C-f C-d
+@kindex C-c C-f C-d 
 @findex message-goto-distribution
 Go to the @code{Distribution} header (@code{message-goto-distribution}).
 
 @item C-c C-f C-o
-@kindex C-c C-f C-o
+@kindex C-c C-f C-o 
 @findex message-goto-followup-to
 Go to the @code{Followup-To} header (@code{message-goto-followup-to}).
 
 @item C-c C-f C-k
-@kindex C-c C-f C-k
+@kindex C-c C-f C-k 
 @findex message-goto-keywords
 Go to the @code{Keywords} header (@code{message-goto-keywords}).
 
 @item C-c C-f C-u
-@kindex C-c C-f C-u
+@kindex C-c C-f C-u 
 @findex message-goto-summary
 Go to the @code{Summary} header (@code{message-goto-summary}).
 
@@ -414,13 +413,13 @@ Go to the @code{Summary} header (@code{message-goto-summary}).
 
 @table @kbd
 @item C-c C-b
-@kindex C-c C-b
+@kindex C-c C-b 
 @findex message-goto-body
 Move to the beginning of the body of the message
-(@code{message-goto-body}).
+(@code{message-goto-body}). 
 
 @item C-c C-i
-@kindex C-c C-i
+@kindex C-c C-i 
 @findex message-goto-signature
 Move to the signature of the message (@code{message-goto-signature}).
 
@@ -433,13 +432,13 @@ Move to the signature of the message (@code{message-goto-signature}).
 @table @kbd
 
 @item C-c C-y
-@kindex C-c C-y
+@kindex C-c C-y 
 @findex message-yank-original
 Yank the message that's being replied to into the message buffer
-(@code{message-yank-original}).
+(@code{message-yank-original}). 
 
 @item C-c C-q
-@kindex C-c C-q
+@kindex C-c C-q 
 @findex message-fill-yanked-message
 Fill the yanked message (@code{message-fill-yanked-message}).  Warning:
 Can severely mess up the yanked text if its quoting conventions are
@@ -447,16 +446,12 @@ strange.  You'll quickly get a feel for when it's safe, though.  Anyway,
 just remember that @kbd{C-x u} (@code{undo}) is available and you'll be
 all right.
 
+
 @item C-c C-w
-@kindex C-c C-w
+@kindex C-c C-w 
 @findex message-insert-signature
 Insert a signature at the end of the buffer
-(@code{message-insert-signature}).
-
-@item C-c M-h
-@kindex C-c M-h
-@findex message-insert-headers
-Insert the message headers (@code{message-insert-headers}).
+(@code{message-insert-signature}).  
 
 @end table
 
@@ -488,6 +483,7 @@ When you are replying to or following up an article, you normally want
 to quote the person you are answering.  Inserting quoted text is done by
 @dfn{yanking}, and each quoted line you yank will have
 @code{message-yank-prefix} prepended to it.  The default is @samp{> }.
+If it is @code{nil}, just indent the message.
 
 @item message-indentation-spaces
 @vindex message-indentation-spaces
@@ -539,27 +535,6 @@ Including ASCII graphics is an efficient way to get everybody to believe
 that you are silly and have nothing important to say.
 
 
-@node MIME
-@section MIME
-@cindex MML
-@cindex MIME
-@cindex multipart
-@cindex attachment
-
-Message is a @sc{mime}-compliant posting agent.  The user generally
-doesn't have to do anything to make the @sc{mime} happen---Message will
-automatically add the @code{Content-Type} and
-@code{Content-Transfer-Encoding} headers.
-
-The most typical thing users want to use the multipart things in
-@sc{mime} for is to add ``attachments'' to mail they send out.  This can
-be done with the @code{C-c C-a} command, which will prompt for a file
-name and a @sc{mime} type.
-
-You can also create arbitrarily complex multiparts using the MML
-language (@pxref{Composing, , Composing, emacs-mime, The Emacs MIME
-Manual}).
-
 
 @node Various Commands
 @section Various Commands
@@ -567,7 +542,7 @@ Manual}).
 @table @kbd
 
 @item C-c C-r
-@kindex C-c C-r
+@kindex C-c C-r 
 @findex message-caesar-buffer-body
 Caesar rotate (aka. rot13) the current message
 (@code{message-caesar-buffer-body}).  If narrowing is in effect, just
@@ -614,17 +589,17 @@ If point is before @samp{And} and you press @kbd{M-RET}, you'll get:
 > And here's more quoted text.
 @end example
 
-@samp{*} says where point will be placed.
+@samp{*} says where point will be placed.  
 
 @item C-c C-t
-@kindex C-c C-t
+@kindex C-c C-t 
 @findex message-insert-to
 Insert a @code{To} header that contains the @code{Reply-To} or
 @code{From} header of the message you're following up
-(@code{message-insert-to}).
+(@code{message-insert-to}). 
 
 @item C-c C-n
-@kindex C-c C-n
+@kindex C-c C-n 
 @findex message-insert-newsgroups
 Insert a @code{Newsgroups} header that reflects the @code{Followup-To}
 or @code{Newsgroups} header of the article you're replying to
@@ -644,15 +619,15 @@ prompt for a new buffer name.
 
 @table @kbd
 @item C-c C-c
-@kindex C-c C-c
+@kindex C-c C-c 
 @findex message-send-and-exit
 Send the message and bury the current buffer
-(@code{message-send-and-exit}).
+(@code{message-send-and-exit}). 
 
 @item C-c C-s
-@kindex C-c C-s
+@kindex C-c C-s 
 @findex message-send
-Send the message (@code{message-send}).
+Send the message (@code{message-send}). 
 
 @item C-c C-d
 @kindex C-c C-d
@@ -726,7 +701,7 @@ look sufficiently similar.
 @item message-generate-headers-first
 @vindex message-generate-headers-first
 If non-@code{nil}, generate all headers before starting to compose the
-message.
+message.  
 
 @item message-from-style
 @vindex message-from-style
@@ -760,7 +735,7 @@ ship it off again.  By default, this variable makes sure that the old
 generated @code{Message-ID} is deleted, and a new one generated.  If
 this isn't done, the entire empire would probably crumble, anarchy would
 prevail, and cats would start walking on two legs and rule the world.
-Allegedly.
+Allegedly.  
 
 @item message-default-headers
 @vindex message-default-headers
@@ -806,7 +781,7 @@ buffers that are initialized as mail.
 
 
 @node Mail Variables
-@section Mail Variables
+@section Mail Variables 
 
 @table @code
 @item message-send-mail-function
@@ -847,7 +822,7 @@ This required header will be filled out with the result of the
 
 @item Subject
 @cindex Subject
-This required header will be prompted for if not present already.
+This required header will be prompted for if not present already. 
 
 @item Newsgroups
 @cindex Newsgroups
@@ -950,21 +925,21 @@ to this list.
 Valid checks are:
 
 @table @code
-@item subject-cmsg
+@item subject-cmsg 
 Check the subject for commands.
 @item sender
 @cindex Sender
-Insert a new @code{Sender} header if the @code{From} header looks odd.
-@item multiple-headers
+Insert a new @code{Sender} header if the @code{From} header looks odd. 
+@item multiple-headers 
 Check for the existence of multiple equal headers.
-@item sendsys
+@item sendsys 
 @cindex sendsys
 Check for the existence of version and sendsys commands.
 @item message-id
 Check whether the @code{Message-ID} looks ok.
 @item from
 Check whether the @code{From} header seems nice.
-@item long-lines
+@item long-lines 
 @cindex long lines
 Check for too long lines.
 @item control-chars
@@ -981,12 +956,10 @@ Check whether the article has an @code{Approved} header, which is
 something only moderators should include.
 @item empty
 Check whether the article is empty.
-@item invisible-text
-Check whether there is any invisible text in the buffer.
 @item empty-headers
 Check whether any of the headers are empty.
 @item existing-newsgroups
-Check whether the newsgroups mentioned in the @code{Newsgroups} and
+Check whether the newsgroups mentioned in the @code{Newsgroups} and 
 @code{Followup-To} headers exist.
 @item valid-newsgroups
 Check whether the @code{Newsgroups} and @code{Followup-to} headers
@@ -1021,7 +994,7 @@ buffers that are initialized as news.
 @item message-send-news-function
 @vindex message-send-news-function
 Function used to send the current buffer as news.  The default is
-@code{message-send-news}.
+@code{message-send-news}. 
 
 @item message-post-method
 @vindex message-post-method
@@ -1038,7 +1011,7 @@ posting a prepared news message.
 @item message-signature-separator
 @vindex message-signature-separator
 Regexp matching the signature separator.  It is @samp{^-- *$} by
-default.
+default. 
 
 @item mail-header-separator
 @vindex mail-header-separator
@@ -1047,12 +1020,12 @@ follows this line--} by default.
 
 @item message-directory
 @vindex message-directory
-Directory used by many mailey things.  The default is @file{~/Mail/}.
+Directory used by many mailey things.  The default is @file{~/Mail/}. 
 
 @item message-signature-setup-hook
 @vindex message-signature-setup-hook
 Hook run when initializing the message buffer.  It is run after the
-headers have been inserted but before the signature has been inserted.
+headers have been inserted but before the signature has been inserted. 
 
 @item message-setup-hook
 @vindex message-setup-hook
@@ -1061,7 +1034,7 @@ but before yanked text is inserted.
 
 @item message-header-setup-hook
 @vindex message-header-setup-hook
-Hook called narrowed to the headers after initializing the headers.
+Hook called narrowed to the headers after initializing the headers. 
 
 For instance, if you're running Gnus and wish to insert a
 @samp{Mail-Copies-To} header in all your news articles and all messages
@@ -1091,8 +1064,9 @@ If you want to add certain headers before sending, you can use the
 (add-hook 'message-send-hook 'my-message-add-content)
 (defun my-message-add-content ()
   (message-add-header
-   "X-In-No-Sense: Nonsense"
-   "X-Whatever: no"))
+   "Mime-Version: 1.0"
+   "Content-Type: text/plain"
+   "Content-Transfer-Encoding: 7bit"))
 @end lisp
 
 This function won't add the header if the header is already present.
@@ -1151,8 +1125,8 @@ A function to be called if @var{predicate} returns non-@code{nil}.
 
 @table @code
 
-@item message-fcc-handler-function
-@vindex message-fcc-handler-function
+@item message-fcc-handler-function 
+@vindex message-fcc-handler-function 
 A function called to save outgoing articles.  This function will be
 called with the name of the file to store the article in. The default
 function is @code{message-output} which saves in Unix mailbox format.
@@ -1164,7 +1138,7 @@ the mailed copy.  If the string contains the format spec @samp{%s}, the
 newsgroups the article has been posted to will be inserted there.  If
 this variable is @code{nil}, no such courtesy message will be added.
 The default value is @samp{"The following message is a courtesy copy of
-an article\nthat has been posted to %s as well.\n\n"}.
+an article\nthat has been posted to %s as well.\n\n"}. 
 
 @end table
 
@@ -1217,7 +1191,7 @@ If non-@code{nil}, kill the buffer immediately on exit.
 When Message is being used from a news/mail reader, the reader is likely
 to want to perform some task after the message has been sent.  Perhaps
 return to the previous window configuration or mark an article as
-replied.
+replied.  
 
 @vindex message-kill-actions
 @vindex message-postpone-actions
@@ -1230,7 +1204,7 @@ C-d} which postpones the message editing and buries the message buffer,
 and @kbd{C-c C-k} which kills the message buffer.  Each of these actions
 have lists associated with them that contains actions to be executed:
 @code{message-send-actions}, @code{message-exit-actions},
-@code{message-postpone-actions}, and @code{message-kill-actions}.
+@code{message-postpone-actions}, and @code{message-kill-actions}.  
 
 Message provides a function to interface with these lists:
 @code{message-add-action}.  The first parameter is the action to be
diff --git a/texi/refcard-ja.tex b/texi/refcard-ja.tex
new file mode 100644 (file)
index 0000000..28f4759
--- /dev/null
@@ -0,0 +1,65 @@
+% Reference Card for (ding) Gnus, 3 twocolumn pages.
+% To be processed with latex 2.09
+\def\Guide{Card}\def\guide{card}
+\def\logoscale{0.25}
+\def\sec{\section*}
+\def\subsec{\subsection*}
+\def\subsubsec{\subsubsection*}
+\documentstyle{article}
+\textwidth 7.26in \textheight 10in \topmargin -1.0in
+% the same settings work for A4, although there is a bit of space at the
+% top and bottom of the page. 
+\oddsidemargin -0.5in \evensidemargin -0.5in
+\begin{document}
+\twocolumn\scriptsize\pagestyle{empty}
+\input{gnusref-ja}
+
+% page 1, left column
+\Title
+\par
+\vspace{0.5\baselineskip}
+\Logo{refcard}
+\vspace*{\fill}
+\GroupLevels
+\GroupMode
+\pagebreak
+
+% page 1, right column
+\Notes
+\vspace*{\fill}
+\GroupCommands
+\pagebreak
+
+% page 2, left column
+\SummaryMode
+\Asubmap
+\Bsubmap
+\Gsubmap
+\Hsubmap
+\Tsubmap
+\pagebreak
+
+% page 2, right column
+\Msubmap
+\Marks
+\pagebreak
+
+% page 3
+\Osubmap
+\Ssubmap
+\Xsubmap
+\Vsubmap
+\SortSummary
+\Wsubmap
+\Zsubmap
+\ArticleMode
+\ServerMode
+
+% page 4
+\BrowseServer
+\pagebreak
+\onecolumn
+\vspace*{\fill}
+\CopyRight
+
+\end{document}
diff --git a/texi/widget.texi b/texi/widget.texi
deleted file mode 100644 (file)
index b733a78..0000000
+++ /dev/null
@@ -1,1432 +0,0 @@
-\input texinfo.tex
-
-@c %**start of header
-@setfilename widget
-@settitle The Emacs Widget Library
-@iftex
-@afourpaper
-@headings double
-@end iftex
-@c %**end of header
-
-@node Top, Introduction, (dir), (dir)
-@comment  node-name,  next,  previous,  up
-@top The Emacs Widget Library
-
-Version: 1.82
-
-@menu
-* Introduction::                
-* User Interface::              
-* Programming Example::         
-* Setting Up the Buffer::       
-* Basic Types::                 
-* Sexp Types::                  
-* Widget Properties::           
-* Defining New Widgets::        
-* Widget Wishlist.::            
-@end menu
-
-@node  Introduction, User Interface, Top, Top
-@comment  node-name,  next,  previous,  up
-@section Introduction
-
-Most graphical user interface toolkits, such as Motif and XView, provide
-a number of standard user interface controls (sometimes known as
-`widgets' or `gadgets').  Emacs doesn't really support anything like
-this, except for an incredible powerful text ``widget''.  On the other
-hand, Emacs does provide the necessary primitives to implement many
-other widgets within a text buffer.  The @code{widget} package
-simplifies this task.
-
-The basic widgets are:
-
-@table @code
-@item link
-Areas of text with an associated action.  Intended for hypertext links
-embedded in text.
-@item push-button 
-Like link, but intended for stand-alone buttons.
-@item editable-field
-An editable text field.  It can be either variable or fixed length.
-@item menu-choice
-Allows the user to choose one of multiple options from a menu, each
-option is itself a widget.  Only the selected option will be visible in
-the buffer.
-@item radio-button-choice
-Allows the user to choose one of multiple options by pushing radio
-buttons.  The options are implemented as widgets.  All options will be
-visible in the buffer.
-@item item
-A simple constant widget intended to be used in the @code{menu-choice} and
-@code{radio-button-choice} widgets. 
-@item choice-item
-An button item only intended for use in choices.  When pushed, the user
-will be asked to select another option from the choice widget.
-@item toggle
-A simple @samp{on}/@samp{off} switch.
-@item checkbox
-A checkbox (@samp{[ ]}/@samp{[X]}). 
-@item editable-list
-Create an editable list.  The user can insert or delete items in the
-list.  Each list item is itself a widget.
-@end table
-
-Now of what possible use can support for widgets be in a text editor?
-I'm glad you asked.  The answer is that widgets are useful for
-implementing forms.  A @dfn{form} in emacs is a buffer where the user is
-supposed to fill out a number of fields, each of which has a specific
-meaning.  The user is not supposed to change or delete any of the text
-between the fields.  Examples of forms in Emacs are the @file{forms}
-package (of course), the customize buffers, the mail and news compose
-modes, and the @sc{html} form support in the @file{w3} browser.  
-
-The advantages for a programmer of using the @code{widget} package to
-implement forms are:
-
-@enumerate
-@item
-More complex field than just editable text are supported. 
-@item
-You can give the user immediate feedback if he enters invalid data in a
-text field, and sometimes prevent entering invalid data.
-@item 
-You can have fixed sized fields, thus allowing multiple field to be
-lined up in columns.
-@item
-It is simple to query or set the value of a field. 
-@item 
-Editing happens in buffer, not in the mini-buffer.
-@item 
-Packages using the library get a uniform look, making them easier for
-the user to learn.
-@item 
-As support for embedded graphics improve, the widget library will
-extended to support it.  This means that your code using the widget
-library will also use the new graphic features by automatic.
-@end enumerate
-
-In order to minimize the code that is loaded by users who does not
-create any widgets, the code has been split in two files:
-
-@table @file
-@item widget.el
-This will declare the user variables, define the function
-@code{widget-define}, and autoload the function @code{widget-create}. 
-@item wid-edit.el
-Everything else is here, there is no reason to load it explicitly, as
-it will be autoloaded when needed.
-@end table
-
-@node User Interface, Programming Example, Introduction, Top
-@comment  node-name,  next,  previous,  up
-@section User Interface
-
-A form consist of read only text for documentation and some fields,
-where each the fields contain two parts, as tag and a value.  The tags
-are used to identify the fields, so the documentation can refer to the
-foo field, meaning the field tagged with @samp{Foo}. Here is an example
-form:
-
-@example
-Here is some documentation.
-
-Name: @i{My Name}     @strong{Choose}: This option
-Address:  @i{Some Place
-In some City
-Some country.}
-
-See also @b{_other work_} for more information.
-
-Numbers: count to three below
-@b{[INS]} @b{[DEL]} @i{One}
-@b{[INS]} @b{[DEL]} @i{Eh, two?}
-@b{[INS]} @b{[DEL]} @i{Five!}
-@b{[INS]} 
-
-Select multiple:
-
-@b{[X]} This
-@b{[ ]} That
-@b{[X]} Thus
-
-Select one:
-
-@b{(*)} One
-@b{( )} Another One.
-@b{( )} A Final One.
-
-@b{[Apply Form]} @b{[Reset Form]}
-@end example
-
-The top level widgets in is example are tagged @samp{Name},
-@samp{Choose}, @samp{Address}, @samp{_other work_}, @samp{Numbers},
-@samp{Select multiple}, @samp{Select one}, @samp{[Apply Form]}, and
-@samp{[Reset Form]}.  There are basically two thing the user can do within
-a form, namely editing the editable text fields and activating the
-buttons.
-
-@subsection Editable Text Fields
-
-In the example, the value for the @samp{Name} is most likely displayed
-in an editable text field, and so are values for each of the members of
-the @samp{Numbers} list.  All the normal Emacs editing operations are
-available for editing these fields.  The only restriction is that each
-change you make must be contained within a single editable text field.
-For example, capitalizing all text from the middle of one field to the
-middle of another field is prohibited.
-
-Editing text fields are created by the @code{editable-field} widget.
-
-The editing text fields are highlighted with the
-@code{widget-field-face} face, making them easy to find.
-
-@deffn Face widget-field-face
-Face used for other editing fields.
-@end deffn
-
-@subsection Buttons
-
-Some portions of the buffer have an associated @dfn{action}, which can
-be @dfn{activated} by a standard key or mouse command.  These portions
-are called @dfn{buttons}.  The default commands for activating a button
-are:
-
-@table @kbd
-@item @key{RET}
-@deffn Command widget-button-press @var{pos} &optional @var{event}
-Activate the button at @var{pos}, defaulting to point.
-If point is not located on a button, activate the binding in
-@code{widget-global-map} (by default the global map).
-@end deffn
-
-@item mouse-2
-@deffn Command widget-button-click @var{event}
-Activate the button at the location of the mouse pointer.  If the mouse
-pointer is located in an editable text field, activate the binding in
-@code{widget-global-map} (by default the global map).
-@end deffn
-@end table
-
-There are several different kind of buttons, all of which are present in
-the example:
-
-@table @emph
-@item The Option Field Tags.
-When you activate one of these buttons, you will be asked to choose
-between a number of different options.  This is how you edit an option
-field.  Option fields are created by the @code{menu-choice} widget.  In
-the example, @samp{@b{Choose}} is an option field tag.
-@item The @samp{@b{[INS]}} and @samp{@b{[DEL]}} buttons.
-Activating these will insert or delete elements from a editable list.
-The list is created by the @code{editable-list} widget. 
-@item Embedded Buttons.
-The @samp{@b{_other work_}} is an example of an embedded
-button. Embedded buttons are not associated with a fields, but can serve
-any purpose, such as implementing hypertext references.  They are
-usually created by the @code{link} widget.
-@item The @samp{@b{[ ]}} and @samp{@b{[X]}} buttons.
-Activating one of these will convert it to the other.  This is useful
-for implementing multiple-choice fields.  You can create it wit
-@item The @samp{@b{( )}} and @samp{@b{(*)}} buttons.
-Only one radio button in a @code{radio-button-choice} widget can be selected at any
-time.  When you push one of the unselected radio buttons, it will be
-selected and the previous selected radio button will become unselected. 
-@item The @samp{@b{[Apply Form]}} @samp{@b{[Reset Form]}} buttons.
-These are explicit buttons made with the @code{push-button} widget.  The main
-difference from the @code{link} widget is that the buttons are will be
-displayed as GUI buttons when possible.
-enough. 
-@end table
-
-To make them easier to locate, buttons are emphasized in the buffer.  
-
-@deffn Face widget-button-face
-Face used for buttons.
-@end deffn
-
-@defopt widget-mouse-face
-Face used for buttons when the mouse pointer is above it.
-@end defopt
-
-@subsection Navigation
-
-You can use all the normal Emacs commands to move around in a form
-buffer, plus you will have these additional commands:
-
-@table @kbd
-@item @key{TAB}
-@deffn Command widget-forward &optional count
-Move point @var{count} buttons or editing fields forward.
-@end deffn
-@item @key{M-TAB}
-@deffn Command widget-backward &optional count
-Move point @var{count} buttons or editing fields backward.
-@end deffn
-@end table
-
-@node Programming Example, Setting Up the Buffer, User Interface, Top
-@comment  node-name,  next,  previous,  up
-@section Programming Example
-
-Here is the code to implement the user interface example (see @ref{User
-Interface}).
-
-@lisp
-(require 'widget)
-
-(eval-when-compile
-  (require 'wid-edit))
-
-(defvar widget-example-repeat)
-
-(defun widget-example ()
-  "Create the widgets from the Widget manual."
-  (interactive)
-  (switch-to-buffer "*Widget Example*")
-  (kill-all-local-variables)
-  (make-local-variable 'widget-example-repeat)
-  (let ((inhibit-read-only t))
-    (erase-buffer))
-  (widget-insert "Here is some documentation.\n\nName: ")
-  (widget-create 'editable-field
-                :size 13
-                "My Name")
-  (widget-create 'menu-choice
-                :tag "Choose"
-                :value "This"
-                :help-echo "Choose me, please!"
-                :notify (lambda (widget &rest ignore)
-                          (message "%s is a good choice!"
-                                   (widget-value widget)))
-                '(item :tag "This option" :value "This")
-                '(choice-item "That option")
-                '(editable-field :menu-tag "No option" "Thus option"))
-  (widget-insert "Address: ")
-  (widget-create 'editable-field
-                "Some Place\nIn some City\nSome country.")
-  (widget-insert "\nSee also ")
-  (widget-create 'link
-                :notify (lambda (&rest ignore)
-                          (widget-value-set widget-example-repeat 
-                                            '("En" "To" "Tre"))
-                          (widget-setup))
-                "other work")
-  (widget-insert " for more information.\n\nNumbers: count to three below\n")
-  (setq widget-example-repeat
-       (widget-create 'editable-list
-                      :entry-format "%i %d %v"
-                      :notify (lambda (widget &rest ignore)
-                                (let ((old (widget-get widget
-                                                       ':example-length))
-                                      (new (length (widget-value widget))))
-                                  (unless (eq old new)
-                                    (widget-put widget ':example-length new)
-                                    (message "You can count to %d." new))))
-                      :value '("One" "Eh, two?" "Five!")
-                      '(editable-field :value "three")))
-  (widget-insert "\n\nSelect multiple:\n\n")
-  (widget-create 'checkbox t)
-  (widget-insert " This\n")
-  (widget-create 'checkbox nil)
-  (widget-insert " That\n")
-  (widget-create 'checkbox
-                :notify (lambda (&rest ignore) (message "Tickle"))
-                t)
-  (widget-insert " Thus\n\nSelect one:\n\n")
-  (widget-create 'radio-button-choice
-                :value "One"
-                :notify (lambda (widget &rest ignore)
-                          (message "You selected %s"
-                                   (widget-value widget)))
-                '(item "One") '(item "Anthor One.") '(item "A Final One."))
-  (widget-insert "\n")
-  (widget-create 'push-button
-                :notify (lambda (&rest ignore) 
-                          (if (= (length (widget-value widget-example-repeat))
-                                 3)
-                              (message "Congratulation!")
-                            (error "Three was the count!")))
-                "Apply Form")
-  (widget-insert " ")
-  (widget-create 'push-button
-                :notify (lambda (&rest ignore)
-                          (widget-example))
-                "Reset Form")
-  (widget-insert "\n")
-  (use-local-map widget-keymap)
-  (widget-setup))
-@end lisp
-
-@node Setting Up the Buffer, Basic Types, Programming Example, Top
-@comment  node-name,  next,  previous,  up
-@section Setting Up the Buffer
-
-Widgets are created with @code{widget-create}, which returns a
-@dfn{widget} object.  This object can be queried and manipulated by
-other widget functions, until it is deleted with @code{widget-delete}.
-After the widgets have been created, @code{widget-setup} must be called
-to enable them.
-
-@defun widget-create type [ keyword argument ]@dots{}
-Create and return a widget of type @var{type}.
-The syntax for the @var{type} argument is described in @ref{Basic Types}.
-
-The keyword arguments can be used to overwrite the keyword arguments
-that are part of @var{type}.
-@end defun
-
-@defun widget-delete widget
-Delete @var{widget} and remove it from the buffer.
-@end defun
-
-@defun widget-setup 
-Setup a buffer to support widgets. 
-
-This should be called after creating all the widgets and before allowing
-the user to edit them.
-@refill
-@end defun
-
-If you want to insert text outside the widgets in the form, the
-recommended way to do that is with @code{widget-insert}.
-
-@defun widget-insert 
-Insert the arguments, either strings or characters, at point.
-The inserted text will be read only.
-@end defun
-
-There is a standard widget keymap which you might find useful.
-
-@defvr Const widget-keymap
-A keymap with the global keymap as its parent.@*
-@key{TAB} and @kbd{C-@key{TAB}} are bound to @code{widget-forward} and
-@code{widget-backward}, respectively.  @kbd{@key{RET}} and @kbd{mouse-2}
-are bound to @code{widget-button-press} and
-@code{widget-button-}.@refill
-@end defvr
-
-@defvar widget-global-map
-Keymap used by @code{widget-button-press} and @code{widget-button-click}
-when not on a button.  By default this is @code{global-map}.
-@end defvar
-
-@node Basic Types, Sexp Types, Setting Up the Buffer, Top
-@comment  node-name,  next,  previous,  up
-@section Basic Types
-
-The syntax of a type specification is given below:
-
-@example
-NAME ::= (NAME [KEYWORD ARGUMENT]... ARGS)
-     |   NAME
-@end example
-
-Where, @var{name} is a widget name, @var{keyword} is the name of a
-property, @var{argument} is the value of the property, and @var{args}
-are interpreted in a widget specific way.
-
-There following keyword arguments that apply to all widgets:
-
-@table @code
-@item :value
-The initial value for widgets of this type.
-
-@item :format
-This string will be inserted in the buffer when you create a widget.
-The following @samp{%} escapes are available:
-
-@table @samp
-@item %[
-@itemx %]
-The text inside will be marked as a button.
-
-@item %@{
-@itemx %@}
-The text inside will be displayed with the face specified by
-@code{:sample-face}. 
-
-@item %v
-This will be replaces with the buffer representation of the widgets
-value.  What this is depends on the widget type.
-
-@item %d
-Insert the string specified by @code{:doc} here.
-
-@item %h
-Like @samp{%d}, with the following modifications: If the documentation
-string is more than one line, it will add a button which will toggle
-between showing only the first line, and showing the full text.
-Furthermore, if there is no @code{:doc} property in the widget, it will
-instead examine the @code{:documentation-property} property.  If it is a
-lambda expression, it will be called with the widget's value as an
-argument, and the result will be used as the documentation text.
-
-@item %t
-Insert the string specified by @code{:tag} here, or the @code{princ}
-representation of the value if there is no tag.
-
-@item %%
-Insert a literal @samp{%}. 
-@end table
-
-@item :button-face
-Face used to highlight text inside %[ %] in the format.
-
-@item :doc
-The string inserted by the @samp{%d} escape in the format
-string.  
-
-@item :tag
-The string inserted by the @samp{%t} escape in the format
-string.  
-
-@item :tag-glyph
-Name of image to use instead of the string specified by `:tag' on
-Emacsen that supports it.
-
-@item :help-echo
-Message displayed whenever you move to the widget with either
-@code{widget-forward} or @code{widget-backward}.
-
-@item :indent
-An integer indicating the absolute number of spaces to indent children
-of this widget.
-
-@item :offset
-An integer indicating how many extra spaces to add to the widget's
-grandchildren compared to this widget.
-
-@item :extra-offset
-An integer indicating how many extra spaces to add to the widget's
-children compared to this widget.
-
-@item :notify
-A function called each time the widget or a nested widget is changed.
-The function is called with two or three arguments.  The first argument
-is the widget itself, the second argument is the widget that was
-changed, and the third argument is the event leading to the change, if
-any. 
-
-@item :menu-tag
-Tag used in the menu when the widget is used as an option in a
-@code{menu-choice} widget.
-
-@item :menu-tag-get
-Function used for finding the tag when the widget is used as an option
-in a @code{menu-choice} widget.  By default, the tag used will be either the
-@code{:menu-tag} or @code{:tag} property if present, or the @code{princ}
-representation of the @code{:value} property if not.
-
-@item :match
-Should be a function called with two arguments, the widget and a value,
-and returning non-nil if the widget can represent the specified value.
-
-@item :validate
-A function which takes a widget as an argument, and return nil if the
-widgets current value is valid for the widget.  Otherwise, it should
-return the widget containing the invalid data, and set that widgets
-@code{:error} property to a string explaining the error.
-
-@item :tab-order
-Specify the order in which widgets are traversed with
-@code{widget-forward} or @code{widget-backward}.  This is only partially
-implemented.
-
-@enumerate a
-@item
-Widgets with tabbing order @code{-1} are ignored.
-
-@item 
-(Unimplemented) When on a widget with tabbing order @var{n}, go to the
-next widget in the buffer with tabbing order @var{n+1} or @code{nil},
-whichever comes first.
-
-@item
-When on a widget with no tabbing order specified, go to the next widget
-in the buffer with a positive tabbing order, or @code{nil}
-@end enumerate
-
-@item :parent
-The parent of a nested widget (e.g. a @code{menu-choice} item or an
-element of a @code{editable-list} widget).
-
-@item :sibling-args
-This keyword is only used for members of a @code{radio-button-choice} or
-@code{checklist}.  The value should be a list of extra keyword
-arguments, which will be used when creating the @code{radio-button} or
-@code{checkbox} associated with this item.
-
-@end table
-
-@deffn {User Option} widget-glyph-directory
-Directory where glyphs are found.  
-Widget will look here for a file with the same name as specified for the
-image, with either a @samp{.xpm} (if supported) or @samp{.xbm} extension.
-@end deffn
-
-@deffn{User Option} widget-glyph-enable
-If non-nil, allow glyphs to appear on displayes where they are supported.
-@end deffn
-
-
-@menu
-* link::                        
-* url-link::                    
-* info-link::                   
-* push-button::                 
-* editable-field::              
-* text::                        
-* menu-choice::                 
-* radio-button-choice::         
-* item::                        
-* choice-item::                 
-* toggle::                      
-* checkbox::                    
-* checklist::                   
-* editable-list::               
-@end menu
-
-@node link, url-link, Basic Types, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{link} Widget
-
-Syntax:
-
-@example
-TYPE ::= (link [KEYWORD ARGUMENT]...  [ VALUE ])
-@end example
-
-The @var{value}, if present, is used to initialize the @code{:value}
-property.  The value should be a string, which will be inserted in the
-buffer. 
-
-@node url-link, info-link, link, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{url-link} Widget
-
-Syntax:
-
-@example
-TYPE ::= (url-link [KEYWORD ARGUMENT]...  URL)
-@end example
-
-When this link is activated, the @sc{www} browser specified by
-@code{browse-url-browser-function} will be called with @var{url}. 
-
-@node info-link, push-button, url-link, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{info-link} Widget
-
-Syntax:
-
-@example
-TYPE ::= (info-link [KEYWORD ARGUMENT]...  ADDRESS)
-@end example
-
-When this link is activated, the build-in info browser is started on
-@var{address}. 
-
-@node  push-button, editable-field, info-link, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{push-button} Widget
-
-Syntax:
-
-@example
-TYPE ::= (push-button [KEYWORD ARGUMENT]...  [ VALUE ])
-@end example
-
-The @var{value}, if present, is used to initialize the @code{:value}
-property. The value should be a string, which will be inserted in the
-buffer. 
-
-The following extra properties are recognized.
-
-@table @code
-@item :text-format
-The format string used when the push button cannot be displayed
-graphically.  There are two escapes, @code{%s}, which must be present
-exactly once, will be substituted with the tag, and @code{%%} will be
-substituted with a singe @samp{%}.
-@end table
-
-By default the tag will be shown in brackets.
-
-@node editable-field, text, push-button, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{editable-field} Widget
-
-Syntax:
-
-@example
-TYPE ::= (editable-field [KEYWORD ARGUMENT]... [ VALUE ])
-@end example
-
-The @var{value}, if present, is used to initialize the @code{:value}
-property.  The value should be a string, which will be inserted in
-field.  This widget will match all string values.
-
-The following extra properties are recognized.
-
-@table @code
-@item :size
-The width of the editable field.@*
-By default the field will reach to the end of the line.
-
-@item :value-face
-Face used for highlighting the editable field.  Default is
-@code{widget-field-face}. 
-
-@item :secret
-Character used to display the value.  You can set this to e.g. @code{?*}
-if the field contains a password or other secret information.  By
-default, the value is not secret.
-
-@item :valid-regexp
-By default the @code{:validate} function will match the content of the
-field with the value of this attribute.  The default value is @code{""}
-which matches everything.
-
-@item :keymap
-Keymap used in the editable field.  The default value is
-@code{widget-field-keymap}, which allows you to use all the normal
-editing commands, even if the buffers major mode supress some of them.
-Pressing return activates the function specified by @code{:activate}. 
-
-@item :hide-front-space
-@itemx :hide-rear-space
-In order to keep track of the editable field, emacs places an invisible
-space character in front of the field, and for fixed sized fields also
-in the rear end of the field.  For fields that extent to the end of the
-line, the terminating linefeed serves that purpose instead.  
-
-Emacs will try to make the spaces intangible when it is safe to do so.
-Intangible means that the cursor motion commands will skip over the
-character as if it didn't exist.  This is safe to do when the text
-preceding or following the widget cannot possible change during the
-lifetime of the @code{editable-field} widget.  The preferred way to tell
-Emacs this, is to add text to the @code{:format} property around the
-value.  For example @code{:format "Tag: %v "}.  
-
-You can overwrite the internal safety check by setting the
-@code{:hide-front-space} or @code{:hide-rear-space} properties to
-non-nil.  This is not recommended.  For example, @emph{all} text that
-belongs to a widget (i.e. is created from its @code{:format} string) will
-change whenever the widget changes its value.
-
-@end table
-
-@node text, menu-choice, editable-field, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{text} Widget
-
-This is just like @code{editable-field}, but intended for multiline text
-fields.  The default @code{:keymap} is @code{widget-text-keymap}, which
-does not rebind the return key.
-
-@node menu-choice, radio-button-choice, text, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{menu-choice} Widget
-
-Syntax:
-
-@example
-TYPE ::= (menu-choice [KEYWORD ARGUMENT]... TYPE ... )
-@end example
-
-The @var{type} arguments represents each possible choice.  The widgets
-value of will be the value of the chosen @var{type} argument.  This
-widget will match any value that matches at least one of the specified
-@var{type} arguments.
-
-@table @code
-@item :void 
-Widget type used as a fallback when the value does not match any of the
-specified @var{type} arguments.
-
-@item :case-fold
-Set this to nil if you don't want to ignore case when prompting for a
-choice through the minibuffer.
-
-@item :children
-A list whose car is the widget representing the currently chosen type in
-the buffer. 
-
-@item :choice
-The current chosen type
-
-@item :args 
-The list of types. 
-@end table
-
-@node radio-button-choice, item, menu-choice, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{radio-button-choice} Widget
-
-Syntax:
-
-@example
-TYPE ::= (radio-button-choice [KEYWORD ARGUMENT]...  TYPE ... )
-@end example
-
-The @var{type} arguments represents each possible choice.  The widgets
-value of will be the value of the chosen @var{type} argument.  This
-widget will match any value that matches at least one of the specified
-@var{type} arguments.
-
-The following extra properties are recognized.
-
-@table @code
-@item :entry-format
-This string will be inserted for each entry in the list.
-The following @samp{%} escapes are available:
-@table @samp
-@item %v
-Replaced with the buffer representation of the @var{type} widget.
-@item %b
-Replace with the radio button.
-@item %%
-Insert a literal @samp{%}. 
-@end table
-
-@item button-args
-A list of keywords to pass to the radio buttons.  Useful for setting
-e.g. the @samp{:help-echo} for each button.
-
-@item :buttons
-The widgets representing the radio buttons.
-
-@item :children
-The widgets representing each type.
-
-@item :choice
-The current chosen type
-
-@item :args 
-The list of types. 
-@end table
-
-You can add extra radio button items to a @code{radio-button-choice}
-widget after it has been created with the function
-@code{widget-radio-add-item}. 
-
-@defun widget-radio-add-item widget type
-Add to @code{radio-button-choice} widget @var{widget} a new radio button item of type
-@var{type}. 
-@end defun
-
-Please note that such items added after the @code{radio-button-choice}
-widget has been created will @strong{not} be properly destructed when
-you call @code{widget-delete}.
-
-@node item, choice-item, radio-button-choice, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{item} Widget
-
-Syntax:
-
-@example
-ITEM ::= (item [KEYWORD ARGUMENT]... VALUE)
-@end example
-
-The @var{value}, if present, is used to initialize the @code{:value}
-property.  The value should be a string, which will be inserted in the
-buffer.  This widget will only match the specified value.
-
-@node choice-item, toggle, item, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{choice-item} Widget
-
-Syntax:
-
-@example
-ITEM ::= (choice-item [KEYWORD ARGUMENT]... VALUE)
-@end example
-
-The @var{value}, if present, is used to initialize the @code{:value}
-property.  The value should be a string, which will be inserted in the
-buffer as a button.  Activating the button of a @code{choice-item} is
-equivalent to activating the parent widget.  This widget will only match
-the specified value. 
-
-@node toggle, checkbox, choice-item, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{toggle} Widget
-
-Syntax:
-
-@example
-TYPE ::= (toggle [KEYWORD ARGUMENT]...)
-@end example
-
-The widget has two possible states, `on' and `off', which corresponds to
-a @code{t} or @code{nil} value.
-
-The following extra properties are recognized.
-
-@table @code
-@item :on
-String representing the `on' state.  By default the string @samp{on}.
-@item :off 
-String representing the `off' state.  By default the string @samp{off}.
-@item :on-glyph
-Name of a glyph to be used instead of the `:on' text string, on emacsen
-that supports it.
-@item :off-glyph
-Name of a glyph to be used instead of the `:off' text string, on emacsen
-that supports it.
-@end table
-
-@node checkbox, checklist, toggle, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{checkbox} Widget
-
-The widget has two possible states, `selected' and `unselected', which
-corresponds to a @code{t} or @code{nil} value.
-
-Syntax:
-
-@example
-TYPE ::= (checkbox [KEYWORD ARGUMENT]...)
-@end example
-
-@node checklist, editable-list, checkbox, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{checklist} Widget
-
-Syntax:
-
-@example
-TYPE ::= (checklist [KEYWORD ARGUMENT]...  TYPE ... )
-@end example
-
-The @var{type} arguments represents each checklist item.  The widgets
-value of will be a list containing the value of each ticked @var{type}
-argument.  The checklist widget will match a list whose elements all
-matches at least one of the specified @var{type} arguments.
-
-The following extra properties are recognized.
-
-@table @code
-@item :entry-format
-This string will be inserted for each entry in the list.
-The following @samp{%} escapes are available:
-@table @samp
-@item %v
-Replaced with the buffer representation of the @var{type} widget.
-@item %b
-Replace with the checkbox.
-@item %%
-Insert a literal @samp{%}. 
-@end table
-
-@item button-args
-A list of keywords to pass to the checkboxes.  Useful for setting
-e.g. the @samp{:help-echo} for each checkbox.
-
-@item :buttons
-The widgets representing the checkboxes.
-
-@item :children
-The widgets representing each type.
-
-@item :args 
-The list of types. 
-@end table
-
-@node editable-list,  , checklist, Basic Types
-@comment  node-name,  next,  previous,  up
-@subsection The @code{editable-list} Widget
-
-Syntax:
-
-@example
-TYPE ::= (editable-list [KEYWORD ARGUMENT]... TYPE)
-@end example
-
-The value is a list, where each member represent one widget of type
-@var{type}. 
-
-The following extra properties are recognized.
-
-@table @code
-@item :entry-format
-This string will be inserted for each entry in the list.
-The following @samp{%} escapes are available:
-@table @samp
-@item %v
-This will be replaced with the buffer representation of the @var{type}
-widget.
-@item %i
-Insert the @b{[INS]} button.
-@item %d
-Insert the @b{[DEL]} button.
-@item %%
-Insert a literal @samp{%}. 
-@end table
-
-@item :insert-button-args
-A list of keyword arguments to pass to the insert buttons.
-
-@item :delete-button-args
-A list of keyword arguments to pass to the delete buttons.
-
-@item :append-button-args
-A list of keyword arguments to pass to the trailing insert button.
-
-
-@item :buttons
-The widgets representing the insert and delete buttons.
-
-@item :children
-The widgets representing the elements of the list.
-
-@item :args
-List whose car is the type of the list elements.
-
-@end table
-
-@node Sexp Types, Widget Properties, Basic Types, Top
-@comment
-@section Sexp Types
-
-A number of widgets for editing s-expressions (lisp types) are also
-available.  These basically fall in three categories: @dfn{atoms},
-@dfn{composite types}, and @dfn{generic}.
-
-@menu
-* generic::                     
-* atoms::                       
-* composite::                   
-@end menu
-
-@node generic, atoms, Sexp Types, Sexp Types
-@comment  node-name,  next,  previous,  up
-@subsection The Generic Widget.
-
-The @code{const} and @code{sexp} widgets can contain any lisp
-expression.  In the case of the @code{const} widget the user is
-prohibited from editing edit it, which is mainly useful as a component
-of one of the composite widgets.
-
-The syntax for the generic widgets is
-
-@example
-TYPE ::= (const [KEYWORD ARGUMENT]...  [ VALUE ])
-@end example
-
-The @var{value}, if present, is used to initialize the @code{:value}
-property and can be any s-expression.
-
-@deffn Widget const
-This will display any valid s-expression in an immutable part of the
-buffer. 
-@end deffn
-
-@deffn Widget sexp
-This will allow you to edit any valid s-expression in an editable buffer
-field. 
-
-The @code{sexp} widget takes the same keyword arguments as the
-@code{editable-field} widget.
-@end deffn
-
-@node atoms, composite, generic, Sexp Types
-@comment  node-name,  next,  previous,  up
-@subsection Atomic Sexp Widgets.
-
-The atoms are s-expressions that does not consist of other
-s-expressions.  A string is an atom, while a list is a composite type.
-You can edit the value of an atom with the following widgets.  
-
-The syntax for all the atoms are
-
-@example
-TYPE ::= (NAME [KEYWORD ARGUMENT]...  [ VALUE ])
-@end example
-
-The @var{value}, if present, is used to initialize the @code{:value}
-property and must be an expression of the same type as the widget.
-I.e. the string widget can only be initialized with a string.
-
-All the atom widgets take the same keyword arguments as the @code{editable-field}
-widget.
-
-@deffn Widget string
-Allows you to edit a string in an editable field.
-@end deffn
-
-@deffn Widget file
-Allows you to edit a file name in an editable field.  You you activate
-the tag button, you can edit the file name in the mini-buffer with
-completion. 
-
-Keywords:
-@table @code
-@item :must-match
-If this is set to non-nil, only existing file names will be allowed in
-the minibuffer.
-@end table
-@end deffn
-
-@deffn Widget directory
-Allows you to edit a directory name in an editable field.
-Similar to the @code{file} widget.
-@end deffn
-
-@deffn Widget symbol
-Allows you to edit a lisp symbol in an editable field.
-@end deffn
-
-@deffn Widget integer
-Allows you to edit an integer in an editable field.
-@end deffn
-
-@deffn Widget number
-Allows you to edit a number in an editable field.
-@end deffn
-
-@deffn Widget boolean
-Allows you to edit a boolean.  In lisp this means a variable which is
-either nil meaning false, or non-nil meaning true.
-@end deffn
-
-
-@node composite,  , atoms, Sexp Types
-@comment  node-name,  next,  previous,  up
-@subsection Composite Sexp Widgets.
-
-The syntax for the composite are
-
-@example
-TYPE ::= (NAME [KEYWORD ARGUMENT]...  COMPONENT...)
-@end example
-
-Where each @var{component} must be a widget type.  Each component widget
-will be displayed in the buffer, and be editable to the user.
-
-@deffn Widget cons
-The value of a @code{cons} widget is a cons-cell where the car is the
-value of the first component and the cdr is the value of the second
-component.  There must be exactly two components. 
-@end deffn
-
-@deffn Widget lisp
-The value of a @code{lisp} widget is a list containing the value of
-each of its component.
-@end deffn
-
-@deffn Widget vector
-The value of a @code{vector} widget is a vector containing the value of
-each of its component.
-@end deffn
-
-The above suffice for specifying fixed size lists and vectors.  To get
-variable length lists and vectors, you can use a @code{choice},
-@code{set} or @code{repeat} widgets together with the @code{:inline}
-keywords.  If any component of a composite widget has the @code{:inline}
-keyword set, its value must be a list which will then be spliced into
-the composite.  For example, to specify a list whose first element must
-be a file name, and whose remaining arguments should either by the
-symbol @code{t} or two files, you can use the following widget
-specification:
-
-@example
-(list file
-      (choice (const t)
-              (list :inline t
-                    :value ("foo" "bar")
-                    string string)))
-@end example
-
-The value of a widget of this type will either have the form 
-@samp{(file t)} or @code{(file string string)}.
-
-This concept of inline is probably hard to understand.  It was certainly
-hard to implement so instead of confuse you more by trying to explain it
-here, I'll just suggest you meditate over it for a while.
-
-@deffn Widget choice
-Allows you to edit a sexp which may have one of fixed set of types.  It
-is currently implemented with the @code{choice-menu} basic widget, and
-has a similar syntax.
-@end deffn
-
-@deffn Widget set
-Allows you to specify a type which must be a list whose elements all
-belong to given set.  The elements of the list is not significant.  This
-is implemented on top of the @code{checklist} basic widget, and has a
-similar syntax. 
-@end deffn
-
-@deffn Widget repeat
-Allows you to specify a variable length list whose members are all of
-the same type.  Implemented on top of the `editable-list' basic widget,
-and has a similar syntax.
-@end deffn
-
-@node Widget Properties, Defining New Widgets, Sexp Types, Top
-@comment  node-name,  next,  previous,  up
-@section Properties
-
-You can examine or set the value of a widget by using the widget object
-that was returned by @code{widget-create}.
-
-@defun widget-value widget
-Return the current value contained in @var{widget}.
-It is an error to call this function on an uninitialized widget.
-@end defun
-
-@defun widget-value-set widget value
-Set the value contained in @var{widget} to @var{value}.
-It is an error to call this function with an invalid @var{value}.
-@end defun
-
-@strong{Important:} You @emph{must} call @code{widget-setup} after
-modifying the value of a widget before the user is allowed to edit the
-widget again.  It is enough to call @code{widget-setup} once if you
-modify multiple widgets.  This is currently only necessary if the widget
-contains an editing field, but may be necessary for other widgets in the
-future. 
-
-If your application needs to associate some information with the widget
-objects, for example a reference to the item being edited, it can be
-done with @code{widget-put} and @code{widget-get}.  The property names
-must begin with a @samp{:}.
-
-@defun widget-put widget property value
-In @var{widget} set @var{property} to @var{value}.
-@var{property} should be a symbol, while @var{value} can be anything.
-@end defun
-
-@defun widget-get widget property
-In @var{widget} return the value for @var{property}.
-@var{property} should be a symbol, the value is what was last set by
-@code{widget-put} for @var{property}.
-@end defun
-
-@defun widget-member widget property
-Non-nil if @var{widget} has a value (even nil) for property @var{property}.
-@end defun
-
-Occasionally it can be useful to know which kind of widget you have,
-i.e. the name of the widget type you gave when the widget was created. 
-
-@defun widget-type widget
-Return the name of @var{widget}, a symbol.
-@end defun
-
-Widgets can be in two states: active, which means they are modifiable by
-the user, or inactive, which means they cannot be modified by the user.
-You can query or set the state with the following code:
-
-@lisp
-;; Examine if @var{widget} is active or not.
-(if (widget-apply @var{widget} :active)
-    (message "Widget is active.")
-  (message "Widget is inactive.")
-
-;; Make @var{widget} inactive.
-(widget-apply @var{widget} :deactivate)
-
-;; Make @var{widget} active.
-(widget-apply @var{widget} :activate)
-@end lisp
-
-A widget is inactive if itself, or any of its ancestors (found by
-following the @code{:parent} link) have been deactivated.  To make sure
-a widget is really active, you must therefore activate both itself, and
-all its ancestors.
-
-@lisp
-(while widget 
-  (widget-apply widget :activate)
-  (setq widget (widget-get widget :parent)))
-@end lisp
-
-You can check if a widget has been made inactive by examining the value
-of @code{:inactive} keyword.  If this is non-nil, the widget itself has
-been deactivated.  This is different from using the @code{:active}
-keyword, in that the later tell you if the widget @strong{or} any of its
-ancestors have been deactivated.   Do not attempt to set the
-@code{:inactive} keyword directly.  Use the @code{:activate}
-@code{:deactivated} keywords instead.
-
-
-@node Defining New Widgets, Widget Wishlist., Widget Properties, Top
-@comment  node-name,  next,  previous,  up
-@section Defining New Widgets
-
-You can define specialized widgets with @code{define-widget}.  It allows
-you to create a shorthand for more complex widgets, including specifying
-component widgets and default new default values for the keyword
-arguments. 
-
-@defun widget-define name class doc &rest args
-Define a new widget type named @var{name} from @code{class}.
-
-@var{name} and class should both be symbols, @code{class} should be one
-of the existing widget types. 
-
-The third argument @var{DOC} is a documentation string for the widget.
-
-After the new widget has been defined, the following two calls will
-create identical widgets:
-
-@itemize @bullet
-@item
-@lisp
-(widget-create @var{name})
-@end lisp
-
-@item
-@lisp
-(apply widget-create @var{class} @var{args})
-@end lisp
-@end itemize
-
-@end defun
-
-Using @code{widget-define} does just store the definition of the widget
-type in the @code{widget-type} property of @var{name}, which is what
-@code{widget-create} uses.
-
-If you just want to specify defaults for keywords with no complex
-conversions, you can use @code{identity} as your conversion function.
-
-The following additional keyword arguments are useful when defining new
-widgets: 
-@table @code
-@item :convert-widget
-Function to convert a widget type before creating a widget of that
-type.  It takes a widget type as an argument, and returns the converted
-widget type.  When a widget is created, this function is called for the
-widget type and all the widgets parent types, most derived first. 
-
-@item :value-to-internal
-Function to convert the value to the internal format.  The function
-takes two arguments, a widget and an external value, and returns the
-internal value.  The function is called on the present @code{:value}
-when the widget is created, and on any value set later with
-@code{widget-value-set}.
-
-@item :value-to-external
-Function to convert the value to the external format.  The function
-takes two arguments, a widget and an internal value, and returns the
-internal value.  The function is called on the present @code{:value}
-when the widget is created, and on any value set later with
-@code{widget-value-set}.
-
-@item :create
-Function to create a widget from scratch.  The function takes one
-argument, a widget type, and create a widget of that type, insert it in
-the buffer, and return a widget object.
-
-@item :delete
-Function to delete a widget.  The function takes one argument, a widget,
-and should remove all traces of the widget from the buffer.
-
-@item :value-create
-Function to expand the @samp{%v} escape in the format string.  It will
-be called with the widget as its argument.  Should
-insert a representation of the widgets value in the buffer.
-
-@item :value-delete
-Should remove the representation of the widgets value from the buffer.
-It will be called with the widget as its argument.  It doesn't have to
-remove the text, but it should release markers and delete nested widgets
-if such has been used.
-
-@item :format-handler
-Function to handle unknown @samp{%} escapes in the format string.  It
-will be called with the widget and the escape character as arguments.
-You can set this to allow your widget to handle non-standard escapes.
-
-You should end up calling @code{widget-default-format-handler} to handle
-unknown escape sequences, which will handle the @samp{%h} and any future
-escape sequences, as well as give an error for unknown escapes.
-@end table
-
-If you want to define a new widget from scratch, use the @code{default}
-widget as its base.
-
-@deffn Widget default [ keyword argument ]
-Widget used as a base for other widgets. 
-
-It provides most of the functionality that is referred to as ``by
-default'' in this text. 
-@end deffn
-
-@node  Widget Wishlist.,  , Defining New Widgets, Top
-@comment  node-name,  next,  previous,  up
-@section Wishlist.
-
-@itemize @bullet
-@item 
-It should be possible to add or remove items from a list with @kbd{C-k}
-and @kbd{C-o} (suggested by @sc{rms}).
-
-@item 
-The @samp{[INS]} and @samp{[DEL]} buttons should be replaced by a single
-dash (@samp{-}).  The dash should be a button that, when activated, ask
-whether you want to add or delete an item (@sc{rms} wanted to git rid of
-the ugly buttons, the dash is my idea).
-
-@item
-Widgets such as @code{file} and @code{symbol} should prompt with completion. 
-
-@item
-The @code{menu-choice} tag should be prettier, something like the abbreviated
-menus in Open Look.
-
-@item
-The functions used in many widgets, like
-@code{widget-item-convert-widget}, should not have names that are
-specific to the first widget where I happended to use them.
-
-@item
-Flag to make @code{widget-move} skip a specified button.
-
-@item
-Document `helper' functions for defining new widgets.
-
-@item
-Activate the item this is below the mouse when the button is
-released, not the item this is below the mouse when the button is
-pressed.  Dired and grep gets this right.  Give feedback if possible.
-
-@item
-Use @samp{@@deffn Widget} to document widgets. 
-
-@item
-Document global keywords in one place.  
-
-Document keywords particular to a specific widget in the widget
-definition.
-
-Document the `default' widget first. 
-
-Split, when needed, keywords into those useful for normal
-customization, those primarily useful when deriving, and those who
-represent runtime information. 
-
-@item
-Figure out terminology and @sc{api} for the class/type/object/super
-stuff. 
-
-Perhaps the correct model is delegation?
-
-@item
-Document @code{widget-browse}.
-
-@item
-Make indentation work with glyphs and propertional fonts.
-
-@item
-Add object and class hierarchies to the browser.
-
-@end itemize
-
-@contents
-@bye