From 1789afa748769013ed77664d5cb25b4596626ddf Mon Sep 17 00:00:00 2001 From: morioka Date: Mon, 31 May 1999 10:55:41 +0000 Subject: [PATCH] Sync up with chaos-1_12. --- ChangeLog | 812 ++++++++++++++++++++++++-------------------------- Makefile.in | 3 + README.semi | 17 +- lisp/gnus-agent.el | 13 +- lisp/gnus-cache.el | 108 ++++++- lisp/gnus-draft.el | 61 +++- lisp/gnus-ems.el | 139 +++++++-- lisp/gnus-int.el | 42 ++- lisp/gnus-msg.el | 168 ++++++----- lisp/gnus-score.el | 22 +- lisp/gnus-soup.el | 3 +- lisp/gnus-spec.el | 16 +- lisp/gnus-start.el | 13 +- lisp/gnus-sum.el | 248 +++++++++------ lisp/gnus-util.el | 15 +- lisp/gnus-xmas.el | 110 ++++++- lisp/gnus.el | 29 +- lisp/lpath.el | 6 + lisp/message.el | 391 ++++++++++++++++++------ lisp/nnkiboze.el | 2 +- lisp/nnmh.el | 32 +- lisp/pop3-fma.el | 150 +++------- lisp/pop3.el | 13 +- texi/Makefile.in | 4 +- texi/gnus-ja.texi | 34 +-- texi/gnus.texi | 598 ++++++++++++++++++------------------- texi/message-ja.texi | 6 +- 27 files changed, 1800 insertions(+), 1255 deletions(-) diff --git a/ChangeLog b/ChangeLog index 66e3023..2cc8b3b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,424 +1,276 @@ -1998-12-22 Katsumi Yamaoka +1999-03-27 MORIOKA Tomohiko - * lisp/gnus-art.el (gnus-article-prepare-display): Set - `gnus-article-current-summary' to `gnus-summary-buffer'. + * lisp/gnus-art.el (gnus-following-method): Use + `gnus-group-find-parameter' to detect the current message is news + or not. -1998-12-18 Katsumi Yamaoka + * lisp/gnus-art.el (gnus-following-method): Use + `message-wide-reply' for mail. - * lisp/gnus-start.el (gnus-read-newsrc-el-file): Bug (referring to - unbounded variable) fix. +1999-03-27 MORIOKA Tomohiko -1998-12-17 Katsumi Yamaoka - - * lisp/gnus-start.el (gnus-read-newsrc-el-file): Don't load newsrc - file if it does not exist. + * lisp/message.el (message-yank-original): Don't call + `gnus-copy-article-buffer' to avoid problem to yank assembled + (FULL) message of message/partial pieces. -1998-12-14 Katsumi Yamaoka - - * 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 - - * 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 - - * lisp/nnheader.el (nnheader-find-file-noselect): Call - `find-file-noselect-as-specified-coding-system' directly. - -1998-12-10 Katsumi Yamaoka - - * 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 - - * 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 - - * lisp/message.el (message-get-parameter-with-eval): Call - `message-get-parameter' with arg `key' first. - -1998-11-26 Yoshiki Hayashi - - * 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'. +1999-01-31 MORIOKA Tomohiko + + * Chaos: Version 1.12.4 was released. + + * lisp/gnus.el (gnus-version-number): Update to 1.12.4. + + * lisp/gnus-sum.el: Abolish macro `gnus-nov-read-integer', + `gnus-nov-skip-field' and `gnus-nov-field'. + (gnus-nov-parse-line): Use `nnheader-nov-field' and + `nnheader-nov-read-integer' instead of `gnus-nov-field' and + `gnus-nov-read-integer'. + (gnus-get-newsgroup-headers-xover): Use + `gnus-retrieve-parsed-headers'. + + * lisp/gnus-cache.el (gnus-cache-retrieve-parsed-headers): Use + `gnus-cache-braid-headers', + `nnheader-get-newsgroup-headers-xover*' and + `nnheader-retrieve-headers-from-directory*' instead of + `gnus-get-newsgroup-headers-xover', `gnus-cache-braid-parsed-nov' + nor `gnus-cache-braid-parsed-heads'; abolish function + `gnus-cache-braid-parsed-nov' and `gnus-cache-braid-parsed-nov'. + (gnus-cache-braid-headers): New function. + + * lisp/nnheader.el (nnheader-file-name-translation-alist): Modify + DOC-string to sync with Pterodactyl Gnus v0.66. + (nnheader-nov-read-integer): Use `char-after' instead of + `following-char' ; use + `(search-forward "\t" eol 'move)' instead of `(forward-char 1)' as + same as `gnus-nov-read-integer'. + (nnheader-parse-nov): Use `char-after' instead of `following-char' + . + (nnheader-retrieve-headers-from-directory*): New function. + (nnheader-retrieve-headers-from-directory): Use + `nnheader-retrieve-headers-from-directory*'. + (nnheader-get-newsgroup-headers-xover*): New function. + (nnheader-insert-references): Modify comment to sync with + Pterodactyl Gnus v0.66. - * 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'. +1999-01-30 MORIOKA Tomohiko -1998-11-26 Katsumi Yamaoka + * Chaos: Version 1.12.3 was released. - * lisp/gnus-msg.el (gnus-summary-supersede-article): Bind - `gnus-message-setup-hook' to nil. + * lisp/gnus.el (gnus-version-number): Update to 1.12.3. - * lisp/message.el (message-supersede-setup-for-mime-edit): New + * lisp/nnmh.el (nnmh-retrieve-parsed-headers): Use + `nnheader-retrieve-headers-from-directory'. + + * lisp/nnheader.el (nnheader-retrieve-headers-from-directory): 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. +1999-01-29 MORIOKA Tomohiko -1998-11-25 Hasebe Satoshi + * Chaos: Version 1.12.2 was released. - * lisp/gnus-util.el: Require RMAIL in a different way. +1999-01-29 MORIOKA Tomohiko -1998-11-24 Tatsuya Ichikawa + * lisp/gnus.el (gnus-version-number): Update to 1.12.2. + (gnus-version): Modify for SEMI 1.13. - * 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. + * lisp/gnus-int.el (gnus-retrieve-parsed-headers): Use + `gnus-cache-retrieve-parsed-headers' instead of + `gnus-cache-retrieve-headers'. -1998-11-24 Katsumi Yamaoka + * lisp/gnus-cache.el (gnus-cache-retrieve-parsed-headers): New + function. + (gnus-cache-braid-parsed-nov): New function. + (gnus-cache-braid-parsed-heads): New function. - * lisp/dgnushack.el (dgnushack-compile): Dismiss "gnus-bbdb.el" - from the list if BBDB has not been installed. +1999-01-25 MORIOKA Tomohiko -1998-11-20 Tatsuya Ichikawa + * Chaos: Version 1.12.1 was released. - * lisp/gnus-util.el: Require `rmail' only if RMAIL has been - installed. +1999-01-25 MORIOKA Tomohiko -1998-11-19 Keiichi Suzuki + * lisp/gnus.el (gnus-version-number): Update to 1.12.1. - * 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-sum.el (gnus-article-sort-by-author): fixed. - * 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'. +1999-01-12 MORIOKA Tomohiko -1998-11-19 Katsumi Yamaoka + * lisp/gnus-int.el (gnus-retrieve-parsed-headers): Add new + optional arguments `dependencies' and `force-new'; new + implementation; call `retrieve-parsed-headers' if it is found. - * lisp/gnus.el (gnus-version-number): Update to 6.8.20. + * lisp/nnmh.el (nnmh-retrieve-parsed-headers): New function. - * Sync up with Gnus 5.6.45. +1999-01-12 MORIOKA Tomohiko -1998-11-18 Katsumi Yamaoka + * lisp/gnus-sum.el (gnus-select-newsgroup): Use + `gnus-retrieve-parsed-headers' instead of `gnus-retrieve-headers' + and `gnus-get-newsgroup-headers-xover' or + `gnus-get-newsgroup-headers'. - * lisp/message.el (message-mimic-kill-buffer): Rewrite. + * lisp/gnus-int.el (gnus-retrieve-parsed-headers): New function. -1998-11-18 Katsumi Yamaoka +1999-01-12 MORIOKA Tomohiko - * lisp/message.el (message-mimic-kill-buffer): New function. - (message-mode-map): Use it for `C-x k'. + * Chaos: Version 1.12.0 was released. -1998-11-18 Keiichi Suzuki +1999-01-11 MORIOKA Tomohiko - * lisp/message.el (message-dont-send): Use `message-delete-frame'. + * Sync up with Gnus 5.6.45. -1998-11-14 Kenji Itoh +1998-12-01 MORIOKA Tomohiko - * lisp/nnmail.el (nnmail-read-passwd): Use `read-passwd' if it - exists as a function. + * Chao-gnus: Version 6.12.5 was released. - * lisp/pop3.el (pop3-read-passwd): Likewise. + * Abolish smtp.el and smtpmail.el (moved to FLIM). -1998-11-16 Katsumi Yamaoka +1998-11-30 MORIOKA Tomohiko - * make.bat: Replace line endings from `LF' to `CRLF'. + * lisp/gnus.el (gnus-version-number): Update to 6.12.5. + (gnus-version): Modify for SEMI 1.12. -1998-11-16 Katsumi Yamaoka +1998-11-30 MORIOKA Tomohiko - * README-gnus-bbdb.en, README-gnus-bbdb.ja: New files. + * lisp/message.el: Sync with Gnus 5.6.45. - * lisp/gnus-bbdb.el: Replace string in comment "Nana-" to "Semi-". +1998-07-03 Shuhei KOBAYASHI -1998-11-13 Keiichi Suzuki + * lisp/message.el (message-send-mail-with-smtp): Require 'smtp. - * lisp/gnus-msg.el (gnus-setup-message): Setup - `message-startup-parameter-alist' for starting `message-mode'. +1998-06-18 Shuhei KOBAYASHI - * 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/message.el (message-send-mail-with-smtp): New + implementation. - * lisp/gnus-bbdb.el: New file. Interface for BBDB. +1998-11-13 MORIOKA Tomohiko -1998-11-12 Katsumi Yamaoka + * lisp/gnus.el (gnus-version-number): Update to 6.12.4. - * lisp/gnus-msg.el (gnus-summary-resend-bounced-mail): Bind - `gnus-message-setup-hook' to nil. + * lisp/nnheader.el (nnheader-decode-subject): Use field-decoder + for `nov' mode. + (nnheader-decode-from): Likewise. - * 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. +1998-11-04 MORIOKA Tomohiko - * 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. + * lisp/gnus.el (gnus-version-number): Update to 6.12.3. -1998-11-11 Tatsuya Ichikawa +1998-11-04 MORIOKA Tomohiko - * lisp/message.el (message-mode-map): Add new command key - `C-x C-s' for `message-save-drafts'. + * lisp/mmgnus.el (entity-buffer): Must move to (point-min) before + search boundary between header and body (to fix problem with + Emacs). -1998-11-11 Keiichi Suzuki +1998-11-03 MORIOKA Tomohiko - * 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. + * lisp/nnmh.el (nnmh-retrieve-headers): Don't use + `nnheader-fold-continuation-lines'. -1998-11-09 Tatsuya Ichikawa + * lisp/gnus-sum.el (gnus-get-newsgroup-headers): Don't expect + unfolded (to fix problem when using gnus-cache). - * lisp/pop3-fma.el: Set the value of `nnmail-read-passwd' as a - symbol `pop3-fma-read-passwd'. +1998-10-31 MORIOKA Tomohiko -1998-11-04 Yoshiki Hayashi + * lisp/gnus.el (gnus-version-number): Update to 6.12.2. + (gnus-version): Modify for SEMI 1.11. - * lisp/message.el: (message-do-fcc): Don't run message-header-hook - and message-before-do-fcc-hook. + * lisp/gnus-draft.el (gnus-draft-decoding-function): Use + `mime-edit-decode-message-in-buffer' instead of + `mime-edit-decode-buffer'. -1998-11-02 Yoshiki Hayashi +1998-10-29 MORIOKA Tomohiko - * lisp/message.el: (message-make-in-reply-to): Generate - In-Reply-To header according to draft-ietf-drums-msg-fmt-05. + * lisp/gnus-draft.el (gnus-draft-decoding-function): Use + `mime-edit-decode-buffer' simply as initial value. -1998-10-30 Tatsuya Ichikawa + * lisp/gnus-art.el (gnus-article-decode-rfc1522): Use + `mime-decode-header-in-buffer' instead of `eword-decode-header'. + (gnus-article-display-message-with-encoded-word): Likewise. - * lisp/gnus.el: Add autoload setting for `pop3-fma'. + * lisp/gnus.el (gnus-version-number): Update to 6.12.1. -1998-10-28 Tatsuya Ichikawa + * lisp/message.el (message-make-forward-subject): Use + `nnheader-decode-subject' instead of + `eword-decode-unstructured-field-body'. + + * lisp/nnheader.el (nnheader-decode-subject): New alias. + (nnheader-decode-from): New alias. + (make-full-mail-header): Use `nnheader-decode-subject' and + `nnheader-decode-from' instead of + `eword-decode-and-unfold-unstructured-field' and + `eword-decode-and-unfold-structured-field'. - * lisp/pop3-fma.el: Determin base64 encode/decode function by FLIM. +1998-10-20 MORIOKA Tomohiko -1998-10-26 Tatsuya Ichikawa + * lisp/gnus.el (gnus-version-number): Update to 6.9.7. + (gnus-version): Modify for SEMI 1.10. - * lisp/message.el (message-save-drafts): New function. - To save drafts in network code. - (message-save-buffer): New variable. +1998-10-20 MORIOKA Tomohiko - * lisp/pop3-fma.el: Require `mel-b-el' if `mel-b' does not exist. + * lisp/nnheader.el (nnheader-insert-nov): Use `mime-fetch-field' + for Subject and From field. -1998-10-23 Katsumi Yamaoka +1998-10-20 Katsumi Yamaoka - * lisp/gnus-msg.el (gnus-message-make-user-agent): New function. + * lisp/nnheader.el (nnheader-parse-nov): Use + `make-full-mail-header'. -1998-10-21 Katsumi Yamaoka +1998-10-20 MORIOKA Tomohiko - * lisp/gnus-xmas.el (gnus-tilde-pad-form): Guard for non string - symbol. + * lisp/nnheader.el (nnheader-parse-head): Use + `make-full-mail-header'. -1998-10-17 Tatsuya Ichikawa +1998-10-14 MORIOKA Tomohiko - * lisp/pop3-fma.el (pop3-fma-init-message-hook): Change - message-send-hook to mime-edit-translate-hook. + * lisp/gnus.el (gnus-version-number): Update to 6.9.6. + (gnus-version): Modify for SEMI 1.9. -1998-10-14 Katsumi Yamaoka +1998-10-14 MORIOKA Tomohiko - * 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. + * lisp/gnus-sum.el (gnus-summary-line-format-alist): Use + `mime-read-field', `std11-address-string' and + `std11-full-name-string' instead of + `gnus-extract-address-components'. + (gnus-article-sort-by-author): Likewise. -1998-10-13 Katsumi Yamaoka +1998-10-12 MORIOKA Tomohiko - * 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/gnus.el (gnus-version-number): Update to 6.9.5. - * lisp/nnheader.el (nnheader-Y-or-n-p): Rewrite for Emacs 19 or - later except for XEmacs. +1998-10-12 MORIOKA Tomohiko -1998-10-08 Katsumi Yamaoka + * lisp/nnheader.el (make-full-mail-header-from-decoded-header): + New function. - * 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/message.el (message-reply): Use + `make-full-mail-header-from-decoded-header' instead of + `make-full-mail-header'. + (message-followup): Likewise. - * lisp/nnheader.el (nnheader-Y-or-n-p): New function. +1998-10-05 MORIOKA Tomohiko -1998-10-07 Yoshiki Hayashi + * lisp/gnus-sum.el (gnus-summary-set-default-charset): New + function. - * lisp/nnagent.el (nnagent-open-server): Small bug fix. + * lisp/gnus-art.el (gnus-article-display-mime-message): Set up + buffer local variable `default-mime-charset' of + `gnus-original-article-buffer' and `gnus-article-buffer'. + (gnus-article-display-message-with-encoded-word): Likewise. -1998-10-07 Keiichi Suzuki +1998-10-05 MORIOKA Tomohiko - * TODO.ja: New file. + * lisp/gnus-msg.el (gnus-message-setup-hook): Add + `gnus-maybe-setup-default-charset'. + Delete dummy definition for `nnspool-rejected-article-hook' and + `xemacs-codename' + (gnus-maybe-setup-default-charset): New function. -1998-10-05 Yoshiki Hayashi + * lisp/message.el (message-setup-hook): Delete + `message-maybe-setup-default-charset'. + Abolish variable `message-newsreader' and `message-mailer'. + (message-user-agent): New variable. + Abolish function `message-maybe-setup-default-charset'. + +1998-10-03 MORIOKA Tomohiko - * lisp/gnus.el (gnus-info-filename): New variable. - (gnus-info-find-node): Use `gnus-info-filename' and - `current-language-environment'. + * lisp/gnus.el (gnus-version-number): Update to 6.9.4. 1998-10-03 MORIOKA Tomohiko @@ -426,11 +278,138 @@ `message-send-news-function' or `message-send-mail-function' instead of `message-send-and-exit'. -1998-10-01 Tatsuya Ichikawa +1998-09-17 Tatsuya Ichikawa + + * 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-10-02 MORIOKA Tomohiko + + * lisp/gnus-art.el (gnus-article-prepare): Don't store original + buffer to the entity. + + * lisp/mmgnus.el: Use `generic' as mother backend; abolish method + `entity-header-start', `entity-header-end' and `fetch-field'. + (entity-buffer): New method. + + * lisp/gnus-cache.el (gnus-cache-possibly-enter-article): Use + `mime-fetch-field' to refer Subject and From field for saving + cache file. + +1998-10-01 MORIOKA Tomohiko + + * lisp/gnus.el (gnus-version-number): Update to 6.9.3. + + * lisp/nnheader.el (make-full-mail-header): Store original subject + and from fields. + +1998-09-30 MORIOKA Tomohiko + + * lisp/gnus-sum.el: Abolish variable + `gnus-structured-field-decoder' and + `gnus-unstructured-field-decoder'. + (gnus-nov-parse-line): Don't decode from and subject. + (gnus-get-newsgroup-headers): Likewise. + + * lisp/nnheader.el (make-full-mail-header): Decode subject and + from; changed to inline function. + +1998-09-30 MORIOKA Tomohiko + + * lisp/gnus-sum.el (gnus-get-newsgroup-headers): Store + content-type. + +1998-09-30 MORIOKA Tomohiko + + * lisp/gnus.el (gnus-version-number): Update to 6.9.2. + + * lisp/mmgnus.el: New module. + + * lisp/gnus-art.el (gnus-article-prepare): Use content of + `gnus-current-headers' as mime-message-structure. + +1998-09-30 MORIOKA Tomohiko + + * lisp/gnus.el (gnus-version-number): Update to 6.9.1. + (gnus-version): Modify for Chao 1.11. - * lisp/pop3-fma.el (pop3-fma-movemail): Bug fix. - Delete variable pop3-fma-movemail options. - Add new variabel pop3-fma-commandline-arguments. + * lisp/nnheader.el (make-full-mail-header): Changed to macro. + +1998-09-30 MORIOKA Tomohiko + + * lisp/gnus.el (gnus-version): Modify for Chao 1.10. + + * lisp/gnus-score.el (gnus-header-index): Modify to use + mime-entity structure as gnus-header structure. + + * lisp/nnheader.el: Use `mime-entity' as gnus-header structure. + (mail-header-number): Use `mime-entity-location-internal'. + (mail-header-set-number): Use `mime-entity-set-location-internal'. + - Change other `mail-header-*' and `mail-header-set-*' to alias of + reference and set functions for mime-entity-internal. + (make-full-mail-header): Use `make-mime-entity-internal'. + +1998-09-30 MORIOKA Tomohiko + + * lisp/message.el (message-reply): Use `make-full-mail-header'. + (message-followup): Likewise. + + * lisp/nnheader.el (mail-header-references): Use + `mime-fetch-field' and `mail-header-entity'. + (mail-header-set-references): Use `mail-header-set-field'. + Define mm-backend `nil' and its method `fetch-field'. + (make-full-mail-header): Modify data structure to store References + to mime-entity. + +1998-09-29 MORIOKA Tomohiko + + * lisp/nnheader.el (mail-header-id): Use `mime-fetch-field' and + `mail-header-entity'. + (mail-header-set-id): Use `mail-header-set-field'. + (make-full-mail-header): Modify data structure to store Message-Id + to mime-entity. + +1998-09-29 MORIOKA Tomohiko + + * lisp/nnheader.el (mail-header-entity): New macro. + (mail-header-set-entity): New macro. + (mail-header-set-field): New macro. + (mail-header-set-parsed-field): New macro. + (mail-header-subject): Use `mail-header-entity'. + (mail-header-set-subject): Use `mail-header-set-parsed-field'. + (mail-header-from): Use `mail-header-entity'. + (mail-header-set-from): Use `mail-header-set-parsed-field'. + (mail-header-date): Use `mime-fetch-field' and + `mail-header-entity'. + (mail-header-set-date): Use `mail-header-set-field'. + (make-full-mail-header): Modify data structure to store Date to + mime-entity. + (make-mail-header): Use `make-full-mail-header'. + +1998-09-29 MORIOKA Tomohiko + + * lisp/nnheader.el (mail-header-from): Use `mime-read-field'. + (mail-header-set-from): Store to mime-entity. + (make-full-mail-header): Modify data structure to store Subject to + mime-entity. + +1998-09-29 MORIOKA Tomohiko + + * lisp/nnheader.el (mail-header-subject): Use `mime-read-field'. + (mail-header-set-subject): Store to mime-entity. + (make-full-mail-header): Modify data structure to store Subject to + mime-entity. + +1998-09-29 MORIOKA Tomohiko + + * lisp/gnus-sum.el (gnus-update-summary-mark-positions): Use + `make-full-mail-header'. 1998-09-30 MORIOKA Tomohiko @@ -468,16 +447,10 @@ * lisp/gnus-soup.el (gnus-soup-send-packet): `message-mailer' and `message-newsreader' were replaced by `message-user-agent'. -1998-09-17 Tatsuya Ichikawa +1998-09-29 MORIOKA Tomohiko - * 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. + * lisp/gnus-sum.el (gnus-get-newsgroup-headers): Use + `make-full-mail-header'. 1998-09-26 Katsumi Yamaoka @@ -493,13 +466,13 @@ 1998-09-11 MORIOKA Tomohiko * lisp/message.el (message-send): Don't call - `message-fix-before-sending' before `message-encode-function' is - called. + `message-fix-before-sending' before `message-encode-function' is + called. 1998-09-06 Tatsuya Ichikawa * lisp/pop3-fma.el: Add error handle and fix typo. - + 1998-08-28 Keiichi Suzuki * lisp/message.el: Repair `multi frame control'. @@ -584,7 +557,7 @@ * lisp/gnus.el (gnus-version-number): Update to 6.8.14. * Sync up with Gnus 5.6.38. - + 1998-08-20 Keiichi Suzuki * lisp/message.el (message-frames): New custom group. @@ -602,7 +575,7 @@ * lisp/gnus.el (gnus-version-number): Update to 6.8.13. * Sync up with Gnus 5.6.37. - + 1998-08-16 Yoshiki Hayashi * lisp/gnus-sum.el (gnus-summary-scroll-down): Failed to sync. @@ -612,20 +585,11 @@ * lisp/gnus.el (gnus-version-number): Update to 6.8.12. * Sync up with Gnus 5.6.36. - + 1998-08-15 Yoshiki Hayashi * texi/gnus-ja.texi: Update. -1998-08-14 Katsumi Yamaoka - - * 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 * lisp/gnus.el (gnus-version-number): Fix typo. @@ -633,25 +597,25 @@ * lisp/gnus.el (gnus-version-number): Update to 6.8.11. * Sync up with Gnus 5.6.34. - + 1998-08-12 Tatsuya Ichikawa * lisp/gnus.el (gnus-version-number): Update to 6.8.10. * Sync up with Gnus 5.6.33. - + 1998-08-11 Tatsuya Ichikawa * lisp/gnus.el (gnus-version-number): Update to 6.8.9. * Sync up with Gnus 5.6.31. - + 1998-08-10 Tatsuya Ichikawa * lisp/gnus.el (gnus-version-number): Update to 6.8.8. * Sync up with Gnus 5.6.30. - + 1998-08-10 Keiichi Suzuki * lisp/message.el (message-yank-original): For citing any message. @@ -662,19 +626,19 @@ 1998-08-06 Katsumi Yamaoka - * lisp/smtp.el: Do not insert empty line at the end of message. - + *lisp/smtp.el: Do not insert empty line at the end of message. + 1998-08-06 Tatsuya Ichikawa * lisp/gnus.el (gnus-version-number): Update to 6.8.6. * Sync up with Gnus 5.6.29. - + 1998-08-05 Tatsuya Ichikawa * 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 + (gnus-summary-line-format-spec) to display Japanese character correctly in Gnus summaly. 1998-08-05 Keiichi Suzuki @@ -781,7 +745,7 @@ * 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 * lisp/gnus.el (gnus-version-number): Update to 6.7.7. @@ -854,9 +818,9 @@ Gnus 5.6.13. 1998-06-14 Tatsuya Ichikawa - + * Sync up with Gnus 5.6.13. - + 1998-06-24 MORIOKA Tomohiko * lisp/gnus-art.el (gnus-article-display-mime-message): Don't @@ -941,9 +905,9 @@ 1998-06-17 Tatsuya Ichikawa * 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. + Use base64-encode-string , base64-decode-string instead. Both change by Yasuo OKABE 1998-06-13 Tatsuya Ichikawa @@ -989,7 +953,7 @@ * 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 * lisp/gnus.el (gnus-version-number): Update to 6.3.3. @@ -1034,7 +998,7 @@ (gnus-version): Modify for SEMI 1.4. * lisp/gnus-sum.el: Use 'mime-add-condition to set up - acting-condition. + acting-condition. 1998-05-04 MORIOKA Tomohiko @@ -1057,8 +1021,8 @@ * 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. + lisp/gnus-msg.el, lisp/gnus-cache.el, lisp/gnus-art.el: Sync up + with Gnus 5.6.7. 1998-04-28 Shuhei KOBAYASHI @@ -1081,7 +1045,7 @@ 1998-04-25 MORIOKA Tomohiko * README.semi (How to get? (via CVS)): Modify descriptions about - TAG. + TAG. 1998-04-23 MORIOKA Tomohiko @@ -1090,11 +1054,11 @@ 1998-04-23 MORIOKA Tomohiko * lisp/message.el (message-make-forward-subject): Use - `eword-decode-unstructured-field-body' for subject. + `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'. + 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 @@ -1116,7 +1080,7 @@ (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. + 'set-atype to set up for 'mime-acting-condition. 1998-04-21 Yoshiki Hayashi @@ -1127,7 +1091,7 @@ * texi/gnus-ja.texi: Modify styles. * texi/gnus.texi: Modify for Semi-gnus (sync up with - gnus-ja.texi). + gnus-ja.texi). 1998-04-20 Yoshiki Hayashi @@ -1152,7 +1116,7 @@ 1998-04-19 MORIOKA Tomohiko * lisp/gnus-art.el (gnus-following-method): New function; set up - for 'mime-view-following-method-alist. + for 'mime-view-following-method-alist. 1998-04-18 MORIOKA Tomohiko @@ -1193,14 +1157,14 @@ `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. @@ -1209,25 +1173,25 @@ 1998-03-14 MORIOKA Tomohiko * lisp/gnus-art.el: Add setting for - `mime-raw-buffer-coding-system-alist'. + `mime-raw-buffer-coding-system-alist'. 1998-03-13 MORIOKA Tomohiko * lisp/gnus-art.el: Rename `mime-view-quitting-method-for-gnus' -> - `mime-preview-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'. + `mime-preview-quitting-method-alist'. * lisp/gnus-art.el: Rename `mime-view-kill-buffer' -> - `mime-preview-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'. + `mime-combine-message/partials-automatically' -> + `mime-method-to-combine-message/partial-pieces'. 1998-03-08 Shuhei KOBAYASHI @@ -1266,7 +1230,7 @@ * 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. @@ -1308,7 +1272,7 @@ 1998-02-20 Christophe Broult * README.semi (How to get?): The command `update' must come before - `-r semi-gnus'. (cf. [tm-en:1559]) + `-r semi-gnus'. (cf. [tm-en:1559]) 1998-02-17 MORIOKA Tomohiko @@ -1317,16 +1281,16 @@ * 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-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. + References. 1998-02-17 MORIOKA Tomohiko @@ -1336,21 +1300,21 @@ * lisp/gnus-sum.el: Check SEMI-0.118.2 (Otomaru) or later. (gnus-structured-field-decoder): Use - `eword-decode-and-unfold-structured-field'. + `eword-decode-and-unfold-structured-field'. * lisp/gnus-art.el (gnus-article-decode-rfc1522): Use charset - conversion option of `eword-decode-header'. + conversion option of `eword-decode-header'. (gnus-article-decode-encoded-word): Use charset conversion option - of `eword-decode-header'; use `gnus-run-hooks'. + of `eword-decode-header'; use `gnus-run-hooks'. (gnus-content-header-filter): Use charset conversion option of - `eword-decode-header'. + `eword-decode-header'. * README.semi (How to get?): Should specify "-r semi-gnus". 1998-02-16 MORIOKA Tomohiko * lisp/gnus-art.el (gnus-article-decode-rfc1522): Decode header by - localized code. + localized code. 1998-02-16 MORIOKA Tomohiko @@ -1373,15 +1337,15 @@ * 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. + lisp/message.el, lisp/gnus-art.el: Sync up with qgnus-0.25. 1998-02-11 Shuhei Kobayashi * 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 + 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 @@ -1416,7 +1380,7 @@ 1998-01-17 MORIOKA Tomohiko * lisp/message.el (message-send-mail-with-sendmail): Guard - `coding-system-for-write' by binary. + `coding-system-for-write' by binary. (message-send-mail-with-qmail): Likewise. 1998-01-16 MORIOKA Tomohiko @@ -1435,27 +1399,27 @@ 1998-01-12 MORIOKA Tomohiko * lisp/smtp.el (smtp-deduce-address-list): Don't use - `smtp-recipient-address-list' as global variable. + `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. + `smtp-recipient-address-list' as global variable. * lisp/smtpmail.el (smtpmail-recipient-address-list): New - variable; renamed from `smtp-recipient-address-list'. + variable; renamed from `smtp-recipient-address-list'. (smtpmail-send-it): Remove `(not (null ...))'. (smtpmail-send-queued-mail): Likewise. 1998-01-12 MORIOKA Tomohiko * 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'. + 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'. + `smtp-address-buffer' for `smtp-deduce-address-list'. * lisp/smtp.el (smtp-deduce-address-list): Bind and generate - `smtp-address-buffer' in itself. + `smtp-address-buffer' in itself. 1998-01-12 MORIOKA Tomohiko @@ -1468,7 +1432,7 @@ * 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' as an item. (message-send-mail-with-smtp): New function. * ChangeLog: New file. diff --git a/Makefile.in b/Makefile.in index a30ae8d..f486fd0 100644 --- a/Makefile.in +++ b/Makefile.in @@ -25,6 +25,9 @@ l: info: cd texi && $(MAKE) EMACS=$(EMACS) all +info-ja: + cd texi && $(MAKE) EMACS=$(EMACS) MAKEINFO=no ja + clean: rm -f */*.orig */*.rej *.orig *.rej diff --git a/README.semi b/README.semi index 3dd5f49..b297fe7 100644 --- a/README.semi +++ b/README.semi @@ -1,4 +1,4 @@ -This package contains Semi-gnus 6.9. +This package contains Semi-gnus. What is Semi-gnus? ================== @@ -8,15 +8,13 @@ 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. +before to install it. + How to get? (via CVS) ===================== -(0) cvs login (first time only) +(0) cvs login % cvs -d :pserver:anonymous@chamonix.jaist.ac.jp:/hare/cvs/root \ login @@ -55,15 +53,11 @@ Major tags are following: 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) ===================== @@ -98,5 +92,4 @@ Semi-gnus. To join the Semi-gnus ML, send an empty e-mail to 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. +please send mail to cvs@chamonix.jaist.ac.jp. diff --git a/lisp/gnus-agent.el b/lisp/gnus-agent.el index e76e124..613b682 100644 --- a/lisp/gnus-agent.el +++ b/lisp/gnus-agent.el @@ -1,4 +1,4 @@ -;;; gnus-agent.el --- unplugged support for Gnus +;;; gnus-agent.el --- unplugged support for Semi-gnus ;; Copyright (C) 1997,98 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen @@ -646,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)) @@ -1311,14 +1311,14 @@ The following commands are available: (cdr (assq 'dormant (gnus-info-marks info))))) nov-file (gnus-agent-article-name ".overview" group)) - (gnus-agent-load-alist group) + (gnus-agent-load-alist group) (gnus-message 5 "Expiring articles in %s" group) (set-buffer overview) (erase-buffer) (when (file-exists-p nov-file) (nnheader-insert-file-contents nov-file)) (goto-char (point-min)) - (setq article 0) + (setq article 0) (while (setq elem (pop articles)) (setq article (car elem)) (when (or (null low) @@ -1373,9 +1373,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 diff --git a/lisp/gnus-cache.el b/lisp/gnus-cache.el index acf13b3..cea1735 100644 --- a/lisp/gnus-cache.el +++ b/lisp/gnus-cache.el @@ -1,7 +1,8 @@ -;;; gnus-cache.el --- cache interface for Gnus -;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc. +;;; gnus-cache.el --- cache interface for Chaos +;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen +;; MORIOKA Tomohiko ;; Keywords: news ;; This file is part of GNU Emacs. @@ -203,8 +204,8 @@ it's not cached." ;; [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) + (mime-fetch-field 'Subject headers) + (mime-fetch-field 'From headers) (mail-header-date headers) (mail-header-id headers) (or (mail-header-references headers) "") @@ -264,7 +265,7 @@ it's not cached." (when (file-exists-p file) (erase-buffer) (gnus-kill-all-overlays) - (insert-file-contents file) + (nnheader-insert-file-contents file) t))) (defun gnus-cache-possibly-alter-active (group active) @@ -310,7 +311,7 @@ it's not cached." ;; unsuccessful), so we use the cached headers exclusively. (set-buffer nntp-server-buffer) (erase-buffer) - (insert-file-contents cache-file) + (nnheader-insert-file-contents cache-file) 'nov) ((eq type 'nov) ;; We have both cached and uncached NOV headers, so we @@ -323,6 +324,65 @@ it's not cached." cached articles)) type))))))) +(defun gnus-cache-retrieve-parsed-headers (articles group &optional fetch-old + dependencies force-new) + "Retrieve the parsed-headers for ARTICLES in GROUP." + (let ((cached + (setq gnus-newsgroup-cached (gnus-cache-articles-in-group group)))) + (if (not cached) + ;; No cached articles here, so we just retrieve them + ;; the normal way. + (let ((gnus-use-cache nil)) + (gnus-retrieve-parsed-headers articles group fetch-old + dependencies force-new)) + (let ((uncached-articles (gnus-sorted-intersection + (gnus-sorted-complement articles cached) + articles)) + (cache-file (gnus-cache-file-name group ".overview"))) + (gnus-cache-braid-headers + ;; We first retrieve all the headers that we don't have in + ;; the cache. + (prog1 + (let ((gnus-use-cache nil)) + (when uncached-articles + (and articles + (gnus-retrieve-parsed-headers + uncached-articles group fetch-old + dependencies)) + )) + (gnus-cache-save-buffers)) + ;; Then we insert the cached headers. + (cond ((not (file-exists-p cache-file)) + ;; There are no cached headers. + ) + ((eq gnus-headers-retrieved-by 'nov) + (with-current-buffer nntp-server-buffer + (erase-buffer) + (nnheader-insert-file-contents cache-file) + (nnheader-get-newsgroup-headers-xover* + articles nil dependencies group) + )) + (t + ;; We braid HEADs. + (nnheader-retrieve-headers-from-directory* + cached + (expand-file-name + (file-name-as-directory + (nnheader-translate-file-chars + (if (gnus-use-long-file-name 'not-cache) + group + (let ((group + (nnheader-replace-chars-in-string group ?/ ?_))) + ;; Translate the first colon into a slash. + (when (string-match ":" group) + (aset group (match-beginning 0) ?/)) + (nnheader-replace-chars-in-string group ?. ?/))) + t)) + gnus-cache-directory) + dependencies) + ))) + )))) + (defun gnus-cache-enter-article (&optional n) "Enter the next N articles into the cache. If not given a prefix, use the process marked articles instead. @@ -489,7 +549,7 @@ Returns the list of articles removed." (set-buffer cache-buf) (buffer-disable-undo (current-buffer)) (erase-buffer) - (insert-file-contents (or file (gnus-cache-file-name group ".overview"))) + (nnheader-insert-file-contents (or file (gnus-cache-file-name group ".overview"))) (goto-char (point-min)) (insert "\n") (goto-char (point-min))) @@ -532,7 +592,7 @@ Returns the list of articles removed." (save-excursion (set-buffer cache-buf) (erase-buffer) - (insert-file-contents (gnus-cache-file-name group (car cached))) + (nnheader-insert-file-contents (gnus-cache-file-name group (car cached))) (goto-char (point-min)) (insert "220 ") (princ (car cached) (current-buffer)) @@ -545,6 +605,36 @@ Returns the list of articles removed." (setq cached (cdr cached))) (kill-buffer cache-buf))) +(defun gnus-cache-braid-headers (headers cached-headers) + (if cached-headers + (if headers + (let (cached-header hrest nhrest) + (nconc (catch 'tag + (while cached-headers + (setq cached-header (car cached-headers)) + (if (< (mail-header-number cached-header) + (mail-header-number (car headers))) + (throw 'tag (nreverse cached-headers)) + (setq hrest headers + nhrest (cdr hrest)) + (while (and nhrest + (> (mail-header-number cached-header) + (mail-header-number (car nhrest)))) + (setq hrest nhrest + nhrest (cdr nhrest)) + ) + ;;(if nhrest + (setcdr hrest (cons cached-header nhrest)) + ;; (setq headers + ;; (nconc headers (list cached-header))) + ;; (throw 'tag nil) + ;;) + ) + (setq cached-headers (cdr cached-headers)))) + headers)) + (nreverse cached-headers)) + headers)) + ;;;###autoload (defun gnus-jog-cache () "Go through all groups and put the articles into the cache. @@ -583,7 +673,7 @@ $ emacs -batch -l ~/.emacs -l gnus -f gnus-jog-cache" ;; We simply read the active file. (save-excursion (gnus-set-work-buffer) - (insert-file-contents gnus-cache-active-file) + (nnheader-insert-file-contents gnus-cache-active-file) (gnus-active-to-gnus-format nil (setq gnus-cache-active-hashtb (gnus-make-hashtable diff --git a/lisp/gnus-draft.el b/lisp/gnus-draft.el index 88a132e..c72ddb9 100644 --- a/lisp/gnus-draft.el +++ b/lisp/gnus-draft.el @@ -1,8 +1,10 @@ -;;; gnus-draft.el --- draft message support for Gnus +;;; gnus-draft.el --- draft message support for Semi-gnus ;; Copyright (C) 1997,98 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen -;; Keywords: news +;; MORIOKA Tomohiko +;; Tatsuya Ichikawa +;; Keywords: mail, news, MIME, offline ;; This file is part of GNU Emacs. @@ -94,7 +96,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) (push @@ -118,7 +120,7 @@ (defun gnus-draft-send (article &optional group) "Send message ARTICLE." - (gnus-draft-setup article (or group "nndraft:queue")) + (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 @@ -133,16 +135,25 @@ (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))))) @@ -170,13 +181,19 @@ ;;; Utility functions +(defcustom gnus-draft-decoding-function + #'mime-edit-decode-message-in-buffer + "*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) @@ -184,12 +201,26 @@ (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)))))) +;; +(defvar gnus-draft-send-draft-buffer " *send draft*") +(progn +(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." diff --git a/lisp/gnus-ems.el b/lisp/gnus-ems.el index 0e95762..f798e12 100644 --- a/lisp/gnus-ems.el +++ b/lisp/gnus-ems.el @@ -1,7 +1,8 @@ -;;; gnus-ems.el --- functions for making Gnus work under different Emacsen +;;; gnus-ems.el --- functions for making Semi-gnus work under different Emacsen ;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen +;; Tatsuya Ichikawa ;; Keywords: news ;; This file is part of GNU Emacs. @@ -57,9 +58,7 @@ from to) (goto-line number) (unless (eobp) ; Sometimes things become confused (broken). - (if (boundp 'MULE) - (forward-char (chars-in-string prefix)) - (forward-char (length prefix))) + (forward-char (chars-in-string prefix)) (skip-chars-forward " \t") (setq from (point)) (end-of-line 1) @@ -70,13 +69,55 @@ gnus-cite-overlay-list) (gnus-overlay-put (gnus-make-overlay from to) 'face face)))))) -(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 valstr (, max-width)) - valstr)))) +(defvar gnus-mule-bitmap-image-file nil) +(defun gnus-mule-group-startup-message (&optional x y) + "Insert startup message in current buffer." + ;; Insert the message. + (erase-buffer) + (insert + (if (featurep 'bitmap) + (format " %s + +" + "" (if (and (stringp gnus-mule-bitmap-image-file) + (file-exists-p gnus-mule-bitmap-image-file)) + (insert-file gnus-mule-bitmap-image-file))) + (format " %s + _ ___ _ _ + _ ___ __ ___ __ _ ___ + __ _ ___ __ ___ + _ ___ _ + _ _ __ _ + ___ __ _ + __ _ + _ _ _ + _ _ _ + _ _ _ + __ ___ + _ _ _ _ + _ _ + _ _ + _ _ + _ + __ + +" + ""))) + ;; And then hack it. + (gnus-indent-rigidly (point-min) (point-max) + (/ (max (- (window-width) (or x 46)) 0) 2)) + (goto-char (point-min)) + (forward-line 1) + (let* ((pheight (count-lines (point-min) (point-max))) + (wheight (window-height)) + (rest (- wheight pheight))) + (insert (make-string (max 0 (* 2 (/ rest 3))) ?\n))) + ;; Fontify some. + (put-text-property (point-min) (point-max) 'face 'gnus-splash-face) + (goto-char (point-min)) + (setq mode-line-buffer-identification (concat " " gnus-version)) + (setq gnus-simple-splash t) + (set-buffer-modified-p t)) (defun gnus-encode-coding-string (string system) string) @@ -173,38 +214,70 @@ ;; `emacs-version'. In this case, implementation for XEmacs/mule ;; may be able to share between XEmacs and XEmacs/mule. - (defalias 'gnus-truncate-string 'truncate-string) - (defvar gnus-summary-display-table nil "Display table used in summary mode buffers.") - (fset 'gnus-cite-add-face 'gnus-mule-cite-add-face) - (fset 'gnus-max-width-function 'gnus-mule-max-width-function) (fset 'gnus-summary-set-display-table (lambda ())) (fset 'gnus-encode-coding-string 'encode-coding-string) (fset 'gnus-decode-coding-string 'decode-coding-string) - + + (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 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 () diff --git a/lisp/gnus-int.el b/lisp/gnus-int.el index 8143d0d..22f602c 100644 --- a/lisp/gnus-int.el +++ b/lisp/gnus-int.el @@ -1,7 +1,8 @@ -;;; gnus-int.el --- backend interface functions for Gnus -;; Copyright (C) 1996,97,98 Free Software Foundation, Inc. +;;; gnus-int.el --- backend interface functions for Chaos +;; Copyright (C) 1996,97,98,99 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen +;; MORIOKA Tomohiko ;; Keywords: news ;; This file is part of GNU Emacs. @@ -284,6 +285,43 @@ If FETCH-OLD, retrieve all headers (or some subset thereof) in the group." articles (gnus-group-real-name group) (nth 1 gnus-command-method) fetch-old)))) +(defun gnus-retrieve-parsed-headers (articles group &optional fetch-old + dependencies force-new) + "Request parsed-headers for ARTICLES in GROUP. +If FETCH-OLD, retrieve all headers (or some subset thereof) in the group." + (unless dependencies + (setq dependencies + (save-excursion + (set-buffer gnus-summary-buffer) + gnus-newsgroup-dependencies))) + (let ((gnus-command-method (gnus-find-method-for-group group)) + headers) + (if (and gnus-use-cache (numberp (car articles))) + (setq headers + (gnus-cache-retrieve-parsed-headers articles group fetch-old + dependencies force-new)) + (let ((func (gnus-get-function gnus-command-method + 'retrieve-parsed-headers 'no-error))) + (if func + (setq headers (funcall func articles dependencies + (gnus-group-real-name group) + (nth 1 gnus-command-method) fetch-old + force-new) + gnus-headers-retrieved-by (car headers) + headers (cdr headers)) + (setq gnus-headers-retrieved-by + (funcall + (gnus-get-function gnus-command-method 'retrieve-headers) + articles (gnus-group-real-name group) + (nth 1 gnus-command-method) fetch-old)) + ))) + (or headers + (if (eq gnus-headers-retrieved-by 'nov) + (gnus-get-newsgroup-headers-xover + articles nil dependencies gnus-newsgroup-name t) + (gnus-get-newsgroup-headers dependencies))) + )) + (defun gnus-retrieve-articles (articles group) "Request ARTICLES in GROUP." (let ((gnus-command-method (gnus-find-method-for-group group))) diff --git a/lisp/gnus-msg.el b/lisp/gnus-msg.el index b0e73aa..359409e 100644 --- a/lisp/gnus-msg.el +++ b/lisp/gnus-msg.el @@ -1,9 +1,11 @@ -;;; gnus-msg.el --- mail and post interface for Gnus +;;; gnus-msg.el --- mail and post interface for Semi-gnus ;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc. ;; Author: Masanobu UMEDA ;; Lars Magne Ingebrigtsen -;; Keywords: news +;; MORIOKA Tomohiko +;; Shuhei KOBAYASHI +;; Keywords: mail, news, MIME ;; This file is part of GNU Emacs. @@ -91,7 +93,7 @@ Thank you. The first %s will be replaced by the Newsgroups header; the second with the current group name.") -(defvar gnus-message-setup-hook nil +(defvar gnus-message-setup-hook '(gnus-maybe-setup-default-charset) "Hook run after setting up a message buffer.") (defvar gnus-bug-create-help-buffer t @@ -119,7 +121,13 @@ 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 @@ -136,7 +144,11 @@ 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) @@ -167,8 +179,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 @@ -212,7 +224,7 @@ Thank you for your help in stamping out bugs. (setq message-post-method `(lambda (arg) (gnus-post-method arg ,gnus-newsgroup-name))) - (setq message-newsreader (setq message-mailer (gnus-extended-version))) + (setq message-user-agent (gnus-extended-version)) (message-add-action `(set-window-configuration ,winconf) 'exit 'postpone 'kill) (message-add-action @@ -319,8 +331,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)) @@ -524,67 +538,14 @@ If SILENT, don't prompt the user." ;; Dummy to avoid byte-compile warning. -(defvar nnspool-rejected-article-hook) -(defvar xemacs-codename) +;;(defvar nnspool-rejected-article-hook) +;;(defvar xemacs-codename) -;;; Since the X-Newsreader/X-Mailer are ``vanity'' headers, they might -;;; as well include the Emacs version as well. -;;; The following function works with later GNU Emacs, and XEmacs. +;;; Since the User-Agent is ``vanity'' headers. (defun gnus-extended-version () - "Stringified Gnus version and Emacs version." + "Stringified gnus version." (interactive) - (concat - gnus-version - "/" - (cond - ((string-match "^\\([0-9]+\\.[0-9]+\\)\\.[.0-9]+$" emacs-version) - (concat "Emacs " (substring emacs-version - (match-beginning 1) - (match-end 1)))) - ((string-match "\\([A-Z]*[Mm][Aa][Cc][Ss]\\)[^(]*\\(\\((beta.*)\\|'\\)\\)?" - emacs-version) - (concat (substring emacs-version - (match-beginning 1) - (match-end 1)) - (format " %d.%d" emacs-major-version emacs-minor-version) - (if (match-beginning 3) - (substring emacs-version - (match-beginning 3) - (match-end 3)) - "") - (if (boundp 'xemacs-codename) - (concat " - \"" xemacs-codename "\"")))) - (t emacs-version)))) - -;; Written by "Mr. Per Persson" . -(defun gnus-inews-insert-mime-headers () - "Insert MIME headers. -Assumes ISO-Latin-1 is used iff 8-bit characters are present." - (goto-char (point-min)) - (let ((mail-header-separator - (progn - (goto-char (point-min)) - (if (and (search-forward (concat "\n" mail-header-separator "\n") - nil t) - (not (search-backward "\n\n" nil t))) - mail-header-separator - "")))) - (or (mail-position-on-field "Mime-Version") - (insert "1.0") - (cond ((save-restriction - (widen) - (goto-char (point-min)) - (re-search-forward "[^\000-\177]" nil t)) - (or (mail-position-on-field "Content-Type") - (insert "text/plain; charset=ISO-8859-1")) - (or (mail-position-on-field "Content-Transfer-Encoding") - (insert "8bit"))) - (t (or (mail-position-on-field "Content-Type") - (insert "text/plain; charset=US-ASCII")) - (or (mail-position-on-field "Content-Transfer-Encoding") - (insert "7bit"))))))) - -(custom-add-option 'message-header-hook 'gnus-inews-insert-mime-headers) + (concat gnus-product-name "/" gnus-version-number)) ;;; @@ -639,11 +600,48 @@ If FULL-HEADERS (the prefix), include full headers when forwarding." (interactive "P") (gnus-setup-message 'forward (gnus-summary-select-article) - (set-buffer gnus-original-article-buffer) + (let ((charset default-mime-charset)) + (set-buffer gnus-original-article-buffer) + (make-local-variable 'default-mime-charset) + (setq default-mime-charset charset) + ) (let ((message-included-forward-headers (if full-headers "" message-included-forward-headers))) (message-forward post)))) +(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") @@ -655,12 +653,6 @@ If FULL-HEADERS (the prefix), include full headers when forwarding." (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. @@ -819,7 +811,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)) @@ -933,7 +926,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") @@ -961,7 +954,8 @@ this is a reply." (gnus-request-create-group group method)) (save-excursion (nnheader-set-temp-buffer " *acc*") - (insert-buffer-substring cur) + (insert-buffer-substring message-encoding-buffer) + (gnus-run-hooks 'gnus-before-do-gcc-hook) (goto-char (point-min)) (when (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$") @@ -1147,6 +1141,24 @@ this is a reply." (insert (car val) ": " (cdr val) "\n")) (gnus-pull (car val) gnus-message-style-insertions))))) + +;;; @ for MIME Edit mode +;;; + +(defun gnus-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) + )))) + + ;;; Allow redefinition of functions. (gnus-ems-redefine) diff --git a/lisp/gnus-score.el b/lisp/gnus-score.el index c429950..76cc2a3 100644 --- a/lisp/gnus-score.el +++ b/lisp/gnus-score.el @@ -435,20 +435,20 @@ of the last successful match.") (defconst gnus-header-index ;; Name to index alist. - '(("number" 0 gnus-score-integer) - ("subject" 1 gnus-score-string) - ("from" 2 gnus-score-string) - ("date" 3 gnus-score-date) - ("message-id" 4 gnus-score-string) - ("references" 5 gnus-score-string) - ("chars" 6 gnus-score-integer) - ("lines" 7 gnus-score-integer) - ("xref" 8 gnus-score-string) + '(("number" 1 gnus-score-integer) + ("subject" 8 gnus-score-string) + ("from" 9 gnus-score-string) + ("date" 10 gnus-score-date) + ("message-id" 11 gnus-score-string) + ("references" 12 gnus-score-string) + ("chars" 13 gnus-score-integer) + ("lines" 14 gnus-score-integer) + ("xref" 15 gnus-score-string) ("head" -1 gnus-score-body) ("body" -1 gnus-score-body) ("all" -1 gnus-score-body) - ("followup" 2 gnus-score-followup) - ("thread" 5 gnus-score-thread))) + ("followup" 9 gnus-score-followup) + ("thread" 12 gnus-score-thread))) ;;; Summary mode score maps. diff --git a/lisp/gnus-soup.el b/lisp/gnus-soup.el index 08f8176..3d97829 100644 --- a/lisp/gnus-soup.el +++ b/lisp/gnus-soup.el @@ -540,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..." diff --git a/lisp/gnus-spec.el b/lisp/gnus-spec.el index d910ae6..2a1e355 100644 --- a/lisp/gnus-spec.el +++ b/lisp/gnus-spec.el @@ -333,15 +333,16 @@ ;; 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 @@ -420,10 +421,11 @@ (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))) @@ -437,6 +439,8 @@ (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)))) diff --git a/lisp/gnus-start.el b/lisp/gnus-start.el index 97ab9b8..1d1260d 100644 --- a/lisp/gnus-start.el +++ b/lisp/gnus-start.el @@ -386,9 +386,6 @@ Can be used to turn version control on or off." :group 'gnus-newsrc :type 'boolean) -(defvar gnus-startup-file-coding-system 'binary - "*Coding system for startup file.") - ;;; Internal variables (defvar gnus-newsrc-file-version nil) @@ -427,9 +424,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))))))))) @@ -1917,8 +1912,7 @@ If FORCE is non-nil, the .newsrc file is read." (gnus-message 5 "Reading %s..." ding-file) (let (gnus-newsrc-assoc) (condition-case nil - (let ((coding-system-for-read gnus-startup-file-coding-system)) - (load ding-file t t t)) + (load ding-file t t t) (error (ding) (unless (gnus-yes-or-no-p @@ -2279,8 +2273,7 @@ If FORCE is non-nil, the .newsrc file is read." (gnus-message 5 "Saving %s.eld..." gnus-current-startup-file) (gnus-gnus-to-quick-newsrc-format) (gnus-run-hooks 'gnus-save-quick-newsrc-hook) - (let ((coding-system-for-write gnus-startup-file-coding-system)) - (save-buffer)) + (save-buffer) (kill-buffer (current-buffer)) (gnus-message 5 "Saving %s.eld...done" gnus-current-startup-file)) diff --git a/lisp/gnus-sum.el b/lisp/gnus-sum.el index 3084fc5..e405bd4 100644 --- a/lisp/gnus-sum.el +++ b/lisp/gnus-sum.el @@ -1,8 +1,9 @@ -;;; gnus-sum.el --- summary mode commands for Gnus +;;; gnus-sum.el --- summary mode commands for Semi-gnus ;; Copyright (C) 1996,97,98 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen -;; Keywords: news +;; MORIOKA Tomohiko +;; Keywords: mail, news, MIME ;; This file is part of GNU Emacs. @@ -33,8 +34,10 @@ (require 'gnus-range) (require 'gnus-int) (require 'gnus-undo) -(require 'gnus-util) +(require 'mime-view) + (autoload 'gnus-summary-limit-include-cached "gnus-cache" nil t) +(autoload 'gnus-set-summary-default-charset "gnus-i18n" nil t) (defcustom gnus-kill-summary-on-exit t "*If non-nil, kill the summary buffer when you exit from it. @@ -328,7 +331,7 @@ variable." :group 'gnus-article-various :type 'boolean) -(defcustom gnus-show-mime nil +(defcustom gnus-show-mime t "*If non-nil, do mime processing of articles. The articles will simply be fed to the function given by `gnus-show-mime-method'." @@ -663,18 +666,8 @@ is not run if `gnus-visual' is nil." :group 'gnus-summary-visual :type 'hook) -(defcustom gnus-structured-field-decoder 'identity - "Function to decode non-ASCII characters in structured field for summary." - :group 'gnus-various - :type 'function) - -(defcustom gnus-unstructured-field-decoder 'identity - "Function to decode non-ASCII characters in unstructured field for summary." - :group 'gnus-various - :type 'function) - (defcustom gnus-parse-headers-hook - (list 'gnus-hack-decode-rfc1522 'gnus-decode-rfc1522) + '(gnus-set-summary-default-charset) "*A hook called before parsing the headers." :group 'gnus-various :type 'hook) @@ -812,9 +805,10 @@ which it may alter in any way.") (?S ,(macroexpand '(mail-header-subject gnus-tmp-header)) ?s) (?s gnus-tmp-subject-or-nil ?s) (?n gnus-tmp-name ?s) - (?A (car (cdr (funcall gnus-extract-address-components gnus-tmp-from))) - ?s) - (?a (or (car (funcall gnus-extract-address-components gnus-tmp-from)) + (?A (std11-address-string + (car (mime-read-field 'From gnus-tmp-header))) ?s) + (?a (or (std11-full-name-string + (car (mime-read-field 'From gnus-tmp-header))) gnus-tmp-from) ?s) (?F gnus-tmp-from ?s) (?x ,(macroexpand '(mail-header-xref gnus-tmp-header)) ?s) @@ -1224,6 +1218,7 @@ increase the score of each group you read." "t" gnus-article-hide-headers "g" gnus-summary-show-article "l" gnus-summary-goto-last-article + "v" gnus-summary-preview-mime-message "\C-c\C-v\C-v" gnus-uu-decode-uu-view "\C-d" gnus-summary-enter-digest-group "\M-\C-d" gnus-summary-read-document @@ -1368,7 +1363,6 @@ increase the score of each group you read." "e" gnus-article-emphasize "w" gnus-article-fill-cited-article "c" gnus-article-remove-cr - "q" gnus-article-de-quoted-unreadable "f" gnus-article-display-x-face "l" gnus-summary-stop-page-breaking "r" gnus-summary-caesar-message @@ -1515,7 +1509,6 @@ increase the score of each group you read." ["Word wrap" gnus-article-fill-cited-article t] ["CR" gnus-article-remove-cr t] ["Show X-Face" gnus-article-display-x-face t] - ["Quoted-Printable" gnus-article-de-quoted-unreadable t] ["UnHTMLize" gnus-article-treat-html t] ["Rot 13" gnus-summary-caesar-message t] ["Unix pipe" gnus-summary-pipe-message t] @@ -1619,8 +1612,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] @@ -2363,7 +2356,8 @@ marks of articles." (let ((gnus-summary-line-format-spec spec) (gnus-newsgroup-downloadable '((0 . t)))) (gnus-summary-insert-line - [0 "" "" "" "" "" 0 0 ""] 0 nil 128 t nil "" nil 1) + (make-full-mail-header 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))))) @@ -3031,20 +3025,20 @@ Returns HEADER if it was entered in the DEPENDENCIES. Returns nil otherwise." ;; The following macros and functions were written by Felix Lee ;; . -(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-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-skip-field () +;; '(search-forward "\t" eol 'move)) -(defmacro gnus-nov-field () - '(buffer-substring (point) (if (gnus-nov-skip-field) (1- (point)) eol))) +;; (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. @@ -3054,29 +3048,27 @@ Returns HEADER if it was entered in the DEPENDENCIES. Returns nil otherwise." header) ;; overview: [num subject from date id refs chars lines misc] - (unwind-protect - (progn - (narrow-to-region (point) eol) - (unless (eobp) - (forward-char)) - - (setq header - (make-full-mail-header - 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)) + ;;(unwind-protect + ;;(progn + ;;(narrow-to-region (point) eol) + (unless (eobp) + (forward-char)) + + (setq header + (make-full-mail-header + number ; number + (nnheader-nov-field) ; subject + (nnheader-nov-field) ; from + (nnheader-nov-field) ; date + (or (nnheader-nov-field) ; id + (nnheader-generate-fake-message-id)) + (nnheader-nov-field) ; refs + (nnheader-nov-read-integer) ; chars + (nnheader-nov-read-integer) ; lines + (unless (= (following-char) ?\n) + (nnheader-nov-field)))) ; misc + ;;) + ;;(widen)) (when gnus-alter-header-function (funcall gnus-alter-header-function header)) @@ -3462,14 +3454,15 @@ If LINE, insert the rebuilt thread starting on line LINE." (defsubst gnus-article-sort-by-author (h1 h2) "Sort articles by root author." (string-lessp - (let ((extract (funcall - gnus-extract-address-components - (mail-header-from h1)))) - (or (car extract) (cadr extract) "")) - (let ((extract (funcall - gnus-extract-address-components - (mail-header-from h2)))) - (or (car extract) (cadr extract) "")))) + (let ((addr (car (mime-read-field 'From h1)))) + (or (std11-full-name-string addr) + (std11-address-string addr) + "")) + (let ((addr (car (mime-read-field 'From h2)))) + (or (std11-full-name-string addr) + (std11-address-string addr) + "")) + )) (defun gnus-thread-sort-by-author (h1 h2) "Sort threads by root author." @@ -3903,20 +3896,14 @@ If SELECT-ARTICLES, only select those articles from GROUP." ;; Retrieve the headers and read them in. (gnus-message 5 "Fetching headers for %s..." gnus-newsgroup-name) (setq gnus-newsgroup-headers - (if (eq 'nov - (setq gnus-headers-retrieved-by - (gnus-retrieve-headers - articles gnus-newsgroup-name - ;; We might want to fetch old headers, but - ;; not if there is only 1 article. - (and (or (and - (not (eq gnus-fetch-old-headers 'some)) - (not (numberp gnus-fetch-old-headers))) - (> (length articles) 1)) - gnus-fetch-old-headers)))) - (gnus-get-newsgroup-headers-xover - articles nil nil gnus-newsgroup-name t) - (gnus-get-newsgroup-headers))) + (gnus-retrieve-parsed-headers + articles gnus-newsgroup-name + ;; We might want to fetch old headers, but + ;; not if there is only 1 article. + (and (or (and (not (eq gnus-fetch-old-headers 'some)) + (not (numberp gnus-fetch-old-headers))) + (> (length articles) 1)) + gnus-fetch-old-headers))) (gnus-message 5 "Fetching headers for %s...done" gnus-newsgroup-name) ;; Kludge to avoid having cached articles nixed out in virtual groups. @@ -4380,7 +4367,7 @@ The resulting hash table is returned, or nil if no Xrefs were found." (subst-char-in-region (point-min) (point-max) ?\t ? t) (gnus-run-hooks 'gnus-parse-headers-hook) (let ((case-fold-search t) - in-reply-to header p lines chars) + in-reply-to header p lines chars ctype) (goto-char (point-min)) ;; Search to the beginning of the next header. Error messages ;; do not begin with 2 or 3. @@ -4395,7 +4382,7 @@ The resulting hash table is returned, or nil if no Xrefs were found." ;; doesn't always go hand in hand. (setq header - (vector + (make-full-mail-header ;; Number. (prog1 (read cur) @@ -4409,21 +4396,20 @@ 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-unstructured-field-decoder (nnheader-header-value)) + (buffer-substring (match-end 0) (std11-field-end)) "(none)")) ;; From. (progn (goto-char p) (if (search-forward "\nfrom: " nil t) - (funcall - gnus-structured-field-decoder (nnheader-header-value)) + (buffer-substring (match-end 0) (std11-field-end)) "(nobody)")) ;; Date. (progn (goto-char p) (if (search-forward "\ndate: " nil t) - (nnheader-header-value) "")) + (buffer-substring (match-end 0) (std11-field-end)) + "")) ;; Message-ID. (progn (goto-char p) @@ -4443,11 +4429,11 @@ The resulting hash table is returned, or nil if no Xrefs were found." (progn (setq end (point)) (prog1 - (nnheader-header-value) + (buffer-substring (match-end 0) (std11-field-end)) (setq ref (buffer-substring (progn - (end-of-line) + ;; (end-of-line) (search-backward ">" end t) (1+ (point))) (progn @@ -4457,7 +4443,9 @@ The resulting hash table is returned, or nil if no Xrefs were found." ;; were no references and the in-reply-to header looks ;; promising. (if (and (search-forward "\nin-reply-to: " nil t) - (setq in-reply-to (nnheader-header-value)) + (setq in-reply-to + (buffer-substring (match-end 0) + (std11-field-end))) (string-match "<[^>]+>" in-reply-to)) (let (ref2) (setq ref (substring in-reply-to (match-beginning 0) @@ -4487,7 +4475,13 @@ 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))))) + (buffer-substring (match-end 0) (std11-field-end)))))) + (goto-char p) + (if (and (search-forward "\ncontent-type: " nil t) + (setq ctype + (buffer-substring (match-end 0) (std11-field-end)))) + (mime-entity-set-content-type-internal + header (mime-parse-Content-Type ctype))) (when (equal id ref) (setq ref nil)) @@ -4554,8 +4548,8 @@ list of headers that match SEQUENCE (see `nntp-retrieve-headers')." (let ((gnus-nov-is-evil t)) (nconc (nreverse headers) - (when (gnus-retrieve-headers sequence group) - (gnus-get-newsgroup-headers)))))))) + (gnus-retrieve-parsed-headers sequence group) + )))))) (defun gnus-article-get-xrefs () "Fill in the Xref value in `gnus-current-headers', if necessary. @@ -4663,7 +4657,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) @@ -5197,6 +5191,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) @@ -6837,6 +6842,19 @@ If ARG is a positive number, turn MIME processing on." (> (prefix-numeric-value arg) 0))) (gnus-summary-select-article t 'force)) +(defun gnus-summary-set-default-charset (charset) + "Display the current article with MIME CHARSET." + (interactive + (list (completing-read "MIME-charset = " + (mapcar (function + (lambda (cs) + (list (symbol-name cs)) + )) + (mime-charset-list))))) + (let ((default-mime-charset charset)) + (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 @@ -7158,7 +7176,7 @@ latter case, they will be copied into the relevant groups." (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. @@ -7662,8 +7680,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) @@ -7719,8 +7737,8 @@ marked." (let* ((mark (or mark gnus-del-mark)) (article (or article (gnus-summary-article-number))) (old-mark (gnus-summary-article-mark article))) - ;; Allow the backend to change the mark. - (setq mark (gnus-request-update-mark gnus-newsgroup-name article mark)) + ;; 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 @@ -8965,6 +8983,38 @@ save those articles instead." (gnus-summary-exit)) buffers))))) + +;;; @ for mime-partial +;;; + +(defun gnus-request-partial-message () + (save-excursion + (let ((number (gnus-summary-article-number)) + (group gnus-newsgroup-name) + (mother gnus-article-buffer)) + (set-buffer (get-buffer-create " *Partial Article*")) + (erase-buffer) + (setq mime-preview-buffer mother) + (gnus-request-article-this-buffer number group) + (mime-parse-buffer) + ))) + +(autoload 'mime-combine-message/partial-pieces-automatically + "mime-partial" + "Internal method to combine message/partial messages automatically.") + +(mime-add-condition + 'action '((type . message)(subtype . partial) + (major-mode . gnus-original-article-mode) + (method . mime-combine-message/partial-pieces-automatically) + (summary-buffer-exp . gnus-summary-buffer) + (request-partial-message-method . gnus-request-partial-message) + )) + + +;;; @ end +;;; + (gnus-ems-redefine) (provide 'gnus-sum) diff --git a/lisp/gnus-util.el b/lisp/gnus-util.el index 8320698..7dcfdc8 100644 --- a/lisp/gnus-util.el +++ b/lisp/gnus-util.el @@ -1,8 +1,8 @@ -;;; gnus-util.el --- utility functions for Gnus +;;; gnus-util.el --- utility functions for Semi-gnus ;; Copyright (C) 1996,97,98 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen -;; Keywords: news +;; Keywords: mail, news, MIME ;; This file is part of GNU Emacs. @@ -76,7 +76,10 @@ (set symbol nil)) symbol)) -(defun gnus-truncate-string (str width) +;; 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 . A safe way @@ -786,7 +789,8 @@ with potentially long computations." (let ((file-buffer (create-file-buffer filename))) (save-excursion (set-buffer file-buffer) - (let ((require-final-newline nil)) + (let ((require-final-newline nil) + (coding-system-for-write 'binary)) (gnus-write-buffer filename))) (kill-buffer file-buffer)) (error "Output file does not exist"))) @@ -804,7 +808,8 @@ with potentially long computations." ;; Decide whether to append to a file or to an Emacs buffer. (let ((outbuf (get-file-buffer filename))) (if (not outbuf) - (let ((buffer-read-only nil)) + (let ((buffer-read-only nil) + (coding-system-for-write 'binary)) (save-excursion (goto-char (point-max)) (forward-char -2) diff --git a/lisp/gnus-xmas.el b/lisp/gnus-xmas.el index 00fc583..d8106d1 100644 --- a/lisp/gnus-xmas.el +++ b/lisp/gnus-xmas.el @@ -478,7 +478,28 @@ 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) + `(concat ,el (make-string + (max 0 (- ,pad (string-width ,el))) ?\ )) + `(concat (make-string + (max 0 (- ,pad (string-width ,el))) ?\ ) + ,el)) + (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." @@ -524,8 +545,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. diff --git a/lisp/gnus.el b/lisp/gnus.el index 18a398f..cfeade9 100644 --- a/lisp/gnus.el +++ b/lisp/gnus.el @@ -1,5 +1,6 @@ ;;; gnus.el --- a newsreader for GNU Emacs -;; Copyright (C) 1987,88,89,90,93,94,95,96,97,98 Free Software Foundation, Inc. +;; Copyright (C) 1987,88,89,90,93,94,95,96,97,98,99 +;; Free Software Foundation, Inc. ;; Author: Masanobu UMEDA ;; Lars Magne Ingebrigtsen @@ -250,11 +251,16 @@ is restarted, and sometimes reloaded." :link '(custom-manual "(gnus)Exiting Gnus") :group 'gnus) -(defconst gnus-version-number "5.6.45" - "Version number for this version of Gnus.") +(defconst gnus-product-name "Chaos" + "Product name of this version of gnus.") -(defconst gnus-version (format "Gnus v%s" gnus-version-number) - "Version string for this version of Gnus.") +(defconst gnus-version-number "1.12.4" + "Version number for this version of gnus.") + +(defconst gnus-version + (format "%s %s (based on Gnus 5.6.45; for SEMI 1.12/1.13, 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. @@ -1136,6 +1142,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 @@ -1369,7 +1376,6 @@ want." gnus-article-emphasize gnus-article-fill-cited-article gnus-article-remove-cr - gnus-article-de-quoted-unreadable gnus-summary-stop-page-breaking ;; gnus-summary-caesar-message ;; gnus-summary-verbose-headers @@ -1479,6 +1485,12 @@ want." "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.") + (defvar gnus-info-nodes '((gnus-group-mode "(gnus)The Group Buffer") (gnus-summary-mode "(gnus)The Summary Buffer") @@ -1567,8 +1579,7 @@ 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) ("ps-print" ps-print-preprint) @@ -1700,7 +1711,7 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.") gnus-article-hide-headers gnus-article-hide-boring-headers gnus-article-treat-overstrike gnus-article-word-wrap gnus-article-remove-cr gnus-article-remove-trailing-blank-lines - gnus-article-display-x-face gnus-article-de-quoted-unreadable + gnus-article-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 diff --git a/lisp/lpath.el b/lisp/lpath.el index d41172b..c8ee274 100644 --- a/lisp/lpath.el +++ b/lisp/lpath.el @@ -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)) diff --git a/lisp/message.el b/lisp/message.el index 20f2c33..1c1c956 100644 --- a/lisp/message.el +++ b/lisp/message.el @@ -2,7 +2,10 @@ ;; Copyright (C) 1996,97,98 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen -;; Keywords: mail, news +;; MORIOKA Tomohiko +;; Shuhei KOBAYASHI +;; Keiichi Suzuki +;; Keywords: mail, news, MIME ;; This file is part of GNU Emacs. @@ -29,7 +32,10 @@ ;;; Code: -(eval-when-compile (require 'cl)) +(eval-when-compile + (require 'cl) + (require 'smtp) + ) (require 'mailheader) (require 'nnheader) @@ -39,6 +45,7 @@ (if (string-match "XEmacs\\|Lucid" emacs-version) (require 'mail-abbrevs) (require 'mailabbrev)) +(require 'mime-edit) (defgroup message '((user-mail-address custom-variable) (user-full-name custom-variable)) @@ -98,6 +105,10 @@ :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 @@ -122,6 +133,11 @@ mailbox format." (function :tag "Other")) :group 'message-sending) +(defcustom message-encode-function 'message-maybe-encode + "*A function called to encode messages." + :group 'message-sending + :type 'function) + (defcustom message-courtesy-message "The following message is a courtesy copy of an article\nthat has been posted to %s as well.\n\n" "*This is inserted at the start of a mailed copy of a posted message. @@ -172,11 +188,11 @@ shorten-followup-to existing-newsgroups buffer-file-name unchanged." (defcustom message-required-news-headers '(From Newsgroups Subject Date Message-ID (optional . Organization) Lines - (optional . X-Newsreader)) + (optional . User-Agent)) "*Headers to be generated or prompted for when posting an article. RFC977 and RFC1036 require From, Date, Newsgroups, Subject, Message-ID. Organization, Lines, In-Reply-To, Expires, and -X-Newsreader are optional. If don't you want message to insert some +User-Agent are optional. If don't you want message to insert some header, remove it from this list." :group 'message-news :group 'message-headers @@ -184,10 +200,10 @@ header, remove it from this list." (defcustom message-required-mail-headers '(From Subject Date (optional . In-Reply-To) Message-ID Lines - (optional . X-Mailer)) + (optional . User-Agent)) "*Headers to be generated or prompted for when mailing a message. RFC822 required that From, Date, To, Subject and Message-ID be -included. Organization, Lines and X-Mailer are optional." +included. Organization, Lines and User-Agent are optional." :group 'message-mail :group 'message-headers :type '(repeat sexp)) @@ -210,7 +226,7 @@ included. Organization, Lines and X-Mailer 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:\\|^X-Trace:\\|^X-Complaints-To:" +(defcustom message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-Complaints-To:\\|Return-Path:\\|^Supersedes:" "*Header lines matching this regexp will be deleted before posting. It's best to delete old Path and Date headers before posting to avoid any confusion." @@ -275,13 +291,13 @@ If t, use `message-user-organization-file'." :group 'message-headers) (defcustom message-forward-start-separator - "------- Start of forwarded message -------\n" + (concat (mime-make-tag "message" "rfc822") "\n") "*Delimiter inserted before forwarded messages." :group 'message-forwarding :type 'string) (defcustom message-forward-end-separator - "------- End of forwarded message -------\n" + (concat (mime-make-tag "text" "plain") "\n") "*Delimiter inserted after forwarded messages." :group 'message-forwarding :type 'string) @@ -292,7 +308,7 @@ If t, use `message-user-organization-file'." :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:" + "^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-\\|^MIME-Version:" "*Regexp matching headers to be included in forwarded messages." :group 'message-forwarding :type 'regexp) @@ -318,7 +334,7 @@ The provided functions are: :group 'message-forwarding :type 'boolean) -(defcustom message-ignored-resent-headers "^Return-receipt" +(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) @@ -342,16 +358,17 @@ variable `mail-header-separator'. Legal values include `message-send-mail-with-sendmail' (the default), `message-send-mail-with-mh', `message-send-mail-with-qmail' and -`smtpmail-send-it'." +`message-send-mail-with-smtp'." :type '(radio (function-item message-send-mail-with-sendmail) (function-item message-send-mail-with-mh) (function-item message-send-mail-with-qmail) - (function-item smtpmail-send-it) + (function-item message-send-mail-with-smtp) (function :tag "Other")) :group 'message-sending :group 'message-mail) -(defcustom message-send-news-function 'message-send-news +;; 1997-09-29 by MORIOKA Tomohiko +(defcustom message-send-news-function 'message-send-news-with-gnus "Function to call to send the current buffer as news. The headers should be delimited by a line whose contents match the variable `mail-header-separator'." @@ -438,7 +455,7 @@ variable isn't used." :group 'message-headers :type 'boolean) -(defcustom message-setup-hook nil +(defcustom message-setup-hook '(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 @@ -456,7 +473,7 @@ the signature is inserted." :group 'message-various :type 'hook) -(defcustom message-header-hook nil +(defcustom message-header-hook '(eword-encode-header) "Hook run in a message mode buffer narrowed to the headers." :group 'message-various :type 'hook) @@ -547,8 +564,7 @@ If stringp, use this; if non-nil, use no host name (user name only)." (defvar message-reply-buffer nil) (defvar message-reply-headers nil) -(defvar message-newsreader nil) -(defvar message-mailer nil) +(defvar message-user-agent nil) ; XXX: This symbol is overloaded! See below. (defvar message-sent-message-via nil) (defvar message-checksum nil) (defvar message-send-actions nil @@ -559,6 +575,7 @@ 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) (define-widget 'message-header-lines 'text "All header lines must be LFD terminated." @@ -843,6 +860,18 @@ The cdr of ech entry is a function for applying the face to a region.") :group 'message-various :type 'hook) +(defcustom message-use-multi-frames nil + "Make new frame when sending messages." + :group 'message-frames + :type 'boolean) + +(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))) + (defvar message-send-coding-system 'binary "Coding system to encode outgoing mail.") @@ -936,9 +965,8 @@ The cdr of ech entry is a function for applying the face to a region.") (Lines) (Expires) (Message-ID) - (References . message-shorten-references) - (X-Mailer) - (X-Newsreader)) + (References . message-fill-references) + (User-Agent)) "Alist used for formatting headers.") (eval-and-compile @@ -954,6 +982,7 @@ The cdr of ech entry is a function for applying the face to a region.") (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")) @@ -1338,8 +1367,7 @@ C-c C-r message-caesar-buffer-body (rot13 the message body)." (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) (make-local-variable 'message-sent-message-via) (setq message-sent-message-via nil) @@ -1730,6 +1758,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. @@ -1859,11 +1888,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 @@ -1872,6 +1908,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 () @@ -1888,10 +1925,32 @@ The text will also be indented the normal way." (interactive) (when (or (not (buffer-modified-p)) (yes-or-no-p "Message modified; kill anyway? ")) - (let ((actions message-kill-actions)) + (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)))) + +(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." @@ -1918,23 +1977,32 @@ the user from the mailer." (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) + (let ((message-encoding-buffer + (message-generate-new-buffer-clone-locals " message encoding")) + (message-edit-buffer (current-buffer)) + (message-mime-mode mime-edit-mode-flag) + (alist message-send-method-alist) (success t) elem sent) - (while (and success - (setq elem (pop alist))) - (when (and (or (not (funcall (cadr elem))) - (and (or (not (memq (car elem) - message-sent-message-via)) - (y-or-n-p - (format - "Already sent message via %s; resend? " - (car elem)))) - (setq success (funcall (caddr elem) arg))))) - (setq sent t))) + (save-excursion + (set-buffer message-encoding-buffer) + (erase-buffer) + (insert-buffer message-edit-buffer) + (funcall message-encode-function) + (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) @@ -1957,7 +2025,7 @@ the user from the mailer." (defun message-send-via-news (arg) "Send the current message via news." - (funcall message-send-news-function arg)) + (message-send-news arg)) (defun message-fix-before-sending () "Do various things to make the message nice before sending it." @@ -1997,8 +2065,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. @@ -2011,11 +2078,7 @@ the user from the mailer." (save-excursion (set-buffer tembuf) (erase-buffer) - ;; Avoid copying text props. - (insert (format - "%s" (save-excursion - (set-buffer mailbuf) - (buffer-string)))) + (insert-buffer message-encoding-buffer) ;; Remove some headers. (save-restriction (message-narrow-to-headers) @@ -2029,9 +2092,15 @@ the user from the mailer." (or (message-fetch-field "cc") (message-fetch-field "to"))) (message-insert-courtesy-copy)) + (mime-edit-maybe-split-and-send + (function + (lambda () + (interactive) + (funcall message-send-mail-function) + ))) (funcall message-send-mail-function)) (kill-buffer tembuf)) - (set-buffer mailbuf) + (set-buffer message-edit-buffer) (push 'mail message-sent-message-via))) (defun message-send-mail-with-sendmail () @@ -2158,13 +2227,40 @@ to find out how to use this." ;; Pass it on to mh. (mh-send-letter))) +(defun message-send-mail-with-smtp () + "Send off the prepared buffer with SMTP." + (require 'smtp) ; XXX + (let ((case-fold-search t) + recipients) + (save-restriction + (message-narrow-to-headers) + (setq recipients + ;; XXX: Should be replaced by better one. + (smtp-deduce-address-list (current-buffer) + (point-min) (point-max))) + ;; Remove BCC lines. + (message-remove-header "bcc")) + ;; replace the header delimiter with a blank line. + (goto-char (point-min)) + (re-search-forward + (concat "^" (regexp-quote mail-header-separator) "\n")) + (replace-match "\n") + (backward-char 1) + (run-hooks 'message-send-mail-hook) + (if recipients + (let ((result (smtp-via-smtp user-mail-address + recipients + (current-buffer)))) + (unless (eq result t) + (error "Sending failed; " result))) + (error "Sending failed; no recipients")))) + (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) @@ -2187,11 +2283,7 @@ to find out how to use this." (set-buffer tembuf) (buffer-disable-undo (current-buffer)) (erase-buffer) - ;; Avoid copying text props. - (insert (format - "%s" (save-excursion - (set-buffer messbuf) - (buffer-string)))) + (insert-buffer message-encoding-buffer) ;; Remove some headers. (save-restriction (message-narrow-to-headers) @@ -2201,30 +2293,48 @@ to find out how to use this." ;; require one newline at the end. (or (= (preceding-char) ?\n) (insert ?\n)) - (let ((case-fold-search t)) - ;; Remove the delimiter. - (goto-char (point-min)) - (re-search-forward - (concat "^" (regexp-quote mail-header-separator) "\n")) - (replace-match "\n") - (backward-char 1)) - (run-hooks 'message-send-news-hook) - ;;(require (car method)) - ;;(funcall (intern (format "%s-open-server" (car method))) - ;;(cadr method) (cddr method)) - ;;(setq result - ;; (funcall (intern (format "%s-request-post" (car method))) - ;; (cadr method))) - (gnus-open-server method) - (setq result (gnus-request-post method))) + (mime-edit-maybe-split-and-send + (function + (lambda () + (interactive) + (save-restriction + (std11-narrow-to-header mail-header-separator) + (goto-char (point-min)) + (when (re-search-forward "^Message-Id:" nil t) + (delete-region (match-end 0)(std11-field-end)) + (insert (concat " " (message-make-message-id))) + )) + (funcall message-send-news-function method) + ))) + (setq result (funcall message-send-news-function method))) (kill-buffer tembuf)) - (set-buffer messbuf) + (set-buffer message-edit-buffer) (if result (push 'news message-sent-message-via) (message "Couldn't send message via news: %s" (nnheader-get-report (car method))) nil)))) +;; 1997-09-29 by MORIOKA Tomohiko +(defun message-send-news-with-gnus (method) + (let ((case-fold-search t)) + ;; Remove the delimiter. + (goto-char (point-min)) + (re-search-forward + (concat "^" (regexp-quote mail-header-separator) "\n")) + (replace-match "\n") + (backward-char 1) + (run-hooks 'message-send-news-hook) + ;;(require (car method)) + ;;(funcall (intern (format "%s-open-server" (car method))) + ;;(cadr method) (cddr method)) + ;;(setq result + ;; (funcall (intern (format "%s-request-post" (car method))) + ;; (cadr method))) + (gnus-open-server method) + (gnus-request-post method) + )) + ;;; ;;; Header generation & syntax checking. ;;; @@ -2258,7 +2368,9 @@ to find out how to use this." (message-narrow-to-headers) (message-check-news-header-syntax))) ;; Check the body. - (message-check-news-body-syntax))))) + (save-excursion + (set-buffer message-edit-buffer) + (message-check-news-body-syntax)))))) (defun message-check-news-header-syntax () (and @@ -2518,18 +2630,19 @@ to find out how to use this." (defun message-do-fcc () "Process Fcc headers in the current buffer." (let ((case-fold-search t) - (buf (current-buffer)) + (coding-system-for-write 'raw-text) list file) (save-excursion (set-buffer (get-buffer-create " *message temp*")) (buffer-disable-undo (current-buffer)) (erase-buffer) - (insert-buffer-substring buf) + (insert-buffer-substring message-encoding-buffer) (save-restriction (message-narrow-to-headers) (while (setq file (message-fetch-field "fcc")) (push file list) (message-remove-header "fcc" nil t))) + (run-hooks 'message-header-hook 'message-before-do-fcc-hook) (goto-char (point-min)) (re-search-forward (concat "^" (regexp-quote mail-header-separator) "$")) (replace-match "" t t) @@ -2847,6 +2960,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." @@ -2863,9 +2994,7 @@ Headers already prepared in the buffer are not modified." (To nil) (Distribution (message-make-distribution)) (Lines (message-make-lines)) - (X-Newsreader message-newsreader) - (X-Mailer (and (not (message-fetch-field "X-Newsreader")) - message-mailer)) + (User-Agent (message-make-user-agent)) (Expires (message-make-expires)) (case-fold-search t) header value elem) @@ -3031,6 +3160,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) @@ -3113,7 +3249,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 @@ -3124,7 +3277,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." @@ -3353,7 +3509,8 @@ OTHER-HEADERS is an alist of header/value pairs." (if wide to-address nil))) (setq message-reply-headers - (vector 0 subject from date message-id references 0 0 "")) + (make-full-mail-header-from-decoded-header + 0 subject from date message-id references 0 0 "")) (message-setup `((Subject . ,subject) @@ -3478,7 +3635,8 @@ responses here are directed to other newsgroups.")) cur) (setq message-reply-headers - (vector 0 subject from date message-id references 0 0 "")))) + (make-full-mail-header-from-decoded-header + 0 subject from date message-id references 0 0 "")))) ;;;###autoload @@ -3499,14 +3657,14 @@ 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*"))) @@ -3523,8 +3681,10 @@ responses here are directed to other newsgroups.")) message-cancel-message) (message "Canceling your article...") (if (let ((message-syntax-checks - 'dont-check-for-anything-just-trust-me)) - (funcall message-send-news-function)) + 'dont-check-for-anything-just-trust-me) + (message-encoding-buffer (current-buffer)) + (message-edit-buffer (current-buffer))) + (message-send-news)) (message "Canceling your article...done")) (kill-buffer buf))))) @@ -3641,8 +3801,12 @@ 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 (nnheader-decode-subject + (message-fetch-field "Subject")) + "")) + (or (nnheader-decode-subject + (message-fetch-field "Subject")) + "")))) ;; Make sure funcs is a list. (and funcs (not (listp funcs)) @@ -3703,7 +3867,10 @@ Optional NEWS will use news to forward instead of mail." (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) @@ -3734,7 +3901,9 @@ Optional NEWS will use news to forward instead of mail." (when (looking-at "From ") (replace-match "X-From-Line: ")) ;; Send it. - (message-send-mail) + (let ((message-encoding-buffer (current-buffer)) + (message-edit-buffer (current-buffer))) + (message-send-mail)) (kill-buffer (current-buffer))) (message "Resending message to %s...done" address))) @@ -3751,7 +3920,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" @@ -3978,7 +4147,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) @@ -3989,6 +4158,34 @@ regexp varstr." (cdr local))))) locals))) + +;;; @ for MIME Edit mode +;;; + +(defun message-maybe-encode () + (when message-mime-mode + (run-hooks 'mime-edit-translate-hook) + (if (catch 'mime-edit-error + (save-excursion + (mime-edit-translate-body) + )) + (error "Translation error!") + ) + (end-of-invisible) + (run-hooks 'mime-edit-exit-hook) + )) + +(defun message-mime-insert-article (&optional message) + (interactive) + (let ((message-cite-function 'mime-edit-inserted-message-filter) + (message-reply-buffer gnus-original-article-buffer) + ) + (message-yank-original nil) + )) + +(set-alist 'mime-edit-message-inserter-alist + 'message-mode (function message-mime-insert-article)) + ;;; Miscellaneous functions ;; stolen (and renamed) from nnheader.el diff --git a/lisp/nnkiboze.el b/lisp/nnkiboze.el index c47a10d..38a0244 100644 --- a/lisp/nnkiboze.el +++ b/lisp/nnkiboze.el @@ -232,7 +232,7 @@ Finds out what articles are to be part of the nnkiboze groups." (load newsrc-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. diff --git a/lisp/nnmh.el b/lisp/nnmh.el index 8aafd7d..2504cee 100644 --- a/lisp/nnmh.el +++ b/lisp/nnmh.el @@ -1,8 +1,9 @@ -;;; nnmh.el --- mhspool access for Gnus -;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc. +;;; nnmh.el --- mhspool access for Chaos +;; Copyright (C) 1995,96,97,98,99 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen -;; Masanobu UMEDA +;; Masanobu UMEDA +;; MORIOKA Tomohiko ;; Keywords: news, mail ;; This file is part of GNU Emacs. @@ -110,9 +111,32 @@ (when large (nnheader-message 5 "nnmh: Receiving headers...done")) - (nnheader-fold-continuation-lines) + ;; (nnheader-fold-continuation-lines) 'headers)))) +(deffoo nnmh-retrieve-parsed-headers (articles + dependencies + &optional newsgroup server fetch-old + force-new) + (save-excursion + (set-buffer nntp-server-buffer) + (let* ((file nil) + (number (length articles)) + (large (and (numberp nnmail-large-newsgroup) + (> number nnmail-large-newsgroup))) + (count 0) + (pathname-coding-system 'binary) + (case-fold-search t) + ;;beg + article + headers header id end ref lines chars ctype) + (nnmh-possibly-change-directory newsgroup server) + ;; We don't support fetching by Message-ID. + (nnheader-retrieve-headers-from-directory + articles nnmh-current-directory dependencies + fetch-old force-new large "nnmh") + ))) + (deffoo nnmh-open-server (server &optional defs) (nnoo-change-server 'nnmh server defs) (when (not (file-exists-p nnmh-directory)) diff --git a/lisp/pop3-fma.el b/lisp/pop3-fma.el index 293efe6..e95c147 100644 --- a/lisp/pop3-fma.el +++ b/lisp/pop3-fma.el @@ -3,7 +3,7 @@ ;; Yasuo Okabe ;; Author: Tatsuya Ichikawa ;; Yasuo OKABE -;; Version: 1.16 +;; Version: 1.11 ;; Keywords: mail , gnus , pop3 ;; ;; SPECIAL THANKS @@ -78,21 +78,30 @@ (` (defvar (, symbol) (, value) (, doc)))) ) +(unless (and (fboundp 'pop3-fma-encode-string) + (fboundp 'pop3-fma-decode-string)) + (require 'mel-b) + (fset 'pop3-fma-encode-string 'base64-encode-string) + (fset 'pop3-fma-decode-string 'base64-decode-string)) + (defgroup pop3-fma nil "Multile POP3 account utility for Gnus." :prefix "pop3-fma-" :group 'mail :group 'news) -(defconst pop3-fma-version-number "1.16") +(defconst pop3-fma-version-number "1.11") (defconst pop3-fma-codename +;; "Feel the wind" ; 0.10 +;; "My home town" ; 0.11 +;; "On the road" ; 0.12 +;; "Rock'n Roll city" ; 0.13 +;; "Money" ; 0.20 +;; "Still 19" ; 0.21 ;; "J boy" ; 1.00 ;; "Blood line" ; 1.10 -;; "Star ring" ; 1.11 -;; "Goodbye Game" ; 1.12 -;; "Love is Gamble" ; 1.13 -;; "Lonely" ; 1.14 - "Feel the wind" ; 1.16 + "Star ring" ; 0.xx +;; "Goodbye Game" ; 0.xx ) (defconst pop3-fma-version (format "Multiple POP3 account utiliy for Gnus v%s - \"%s\"" pop3-fma-version-number @@ -128,57 +137,21 @@ Lisp means `nnmail-movemail-program' is lisp function. :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.") - +(defvar pop3-fma-movemail-program "movemail.exe" + "*External program name your movemail. +Please do not set this valiable non-nil if you do not use Meadow.") ;; Temporary variable (defvar hdr nil) (defvar passwd nil) (defvar str nil) +(defvar pop3-fma-movemail-options pop3-fma-movemail-arguments) (defvar spool nil) (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)) @@ -204,12 +177,7 @@ If there is any problem , please set this variable to nil(default). (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-fma-read-passwd (substring inbox (match-end (string-match "^.*@" inbox))))) (pop3-authentication-scheme (nth 1 (assoc inbox pop3-fma-spool-file-alist))) (pop3-fma-movemail-type (pop3-fma-get-movemail-type inbox))) @@ -220,12 +188,12 @@ If there is any problem , please set this variable to nil(default). (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))) + (if (and (not (memq pop3-password pop3-fma-movemail-arguments)) + (not (memq (concat "po:" pop3-maildrop) pop3-fma-movemail-arguments))) (progn - (setq pop3-fma-commandline-arguments - (append - pop3-fma-movemail-arguments + (setq pop3-fma-movemail-arguments nil) + (setq pop3-fma-movemail-arguments + (append pop3-fma-movemail-options (list (concat "po:" pop3-maildrop) crashbox @@ -238,7 +206,7 @@ If there is any problem , please set this variable to nil(default). exec-directory pop3-fma-movemail-program) nil movemail-output-buffer nil - pop3-fma-commandline-arguments) + pop3-fma-movemail-arguments) (let ((string (buffer-string))) (if (> (length string) 0) (progn @@ -261,14 +229,9 @@ If there is any problem , please set this variable to nil(default). ;; (defun pop3-fma-read-passwd (mailhost) (setq passwd (nth 2 (assoc mailhost pop3-fma-password))) - passwd) + (pop3-fma-decode-string 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) +(setq pop3-read-passwd 'pop3-fma-read-passwd) ;; ;; Set multiple pop3 server's password (defun pop3-fma-store-password (passwd) @@ -282,26 +245,24 @@ If there is any problem , please set this variable to nil(default). (list pop3-mailhost pop3-maildrop - passwd))))) + (pop3-fma-encode-string passwd))))) (setcar (cdr (cdr (assoc pop3-mailhost pop3-fma-password))) - passwd) - (message "POP password registered.") - passwd) + (pop3-fma-encode-string passwd))) + (message "POP password registered.") + (pop3-fma-encode-string 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))) + (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 @@ -311,22 +272,6 @@ If there is any problem , please set this variable to nil(default). (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 ." @@ -345,15 +290,15 @@ Argument PROMPT ." (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 c (read-char-exclusive)) + (cond ((= c ?\C-g) (setq quit-flag t done t)) - ((memq c '(?\r ?\n ?\e)) + ((or (= c ?\r) (= c ?\n) (= c ?\e)) (setq done t)) - ((eq ?\C-u c) + ((= c ?\C-u) (setq ans "")) - ((and (/= ?\b c) (/= ?\177 c)) + ((and (/= c ?\b) (/= c ?\177)) (setq ans (concat ans (char-to-string c)))) ((> (length ans) 0) (setq ans (substring ans 0 -1))))) @@ -399,4 +344,3 @@ Argument PROMPT ." ;; ;; pop3-fma.el ends here. - diff --git a/lisp/pop3.el b/lisp/pop3.el index 3d5cdf5..beef181 100644 --- a/lisp/pop3.el +++ b/lisp/pop3.el @@ -4,7 +4,7 @@ ;; Author: Richard L. Pieri ;; Keywords: mail, pop3 -;; Version: 1.3m +;; Version: 1.3m+ ;; This file is part of GNU Emacs. @@ -37,7 +37,7 @@ (require 'mail-utils) (provide 'pop3) -(defconst pop3-version "1.3m") +(defconst pop3-version "1.3m+") (defvar pop3-maildrop (or (user-login-name) (getenv "LOGNAME") (getenv "USER") nil) "*POP3 maildrop.") @@ -60,6 +60,9 @@ values are 'apop.") "Timestamp returned when initially connected to the POP server. Used for APOP authentication.") +(defvar pop3-movemail-file-coding-system 'binary + "Crashbox made by pop3-movemail with this coding system.") + (defvar pop3-read-point nil) (defvar pop3-debug nil) @@ -91,7 +94,8 @@ Used for APOP authentication.") (pop3-retr process n crashbuf) (save-excursion (set-buffer crashbuf) - (append-to-file (point-min) (point-max) crashbox) + (let ((coding-system-for-write pop3-movemail-file-coding-system)) + (append-to-file (point-min) (point-max) crashbox)) (set-buffer (process-buffer process)) (while (> (buffer-size) 5000) (goto-char (point-min)) @@ -126,8 +130,7 @@ Returns the process associated with the connection." (setq pop3-timestamp (substring response (or (string-match "<" response) 0) (+ 1 (or (string-match ">" response) -1))))) - process - )) + process)) ;; Support functions diff --git a/texi/Makefile.in b/texi/Makefile.in index eb05e11..77db83e 100644 --- a/texi/Makefile.in +++ b/texi/Makefile.in @@ -20,6 +20,8 @@ PAPERTYPE=a4 all: gnus message +ja: gnus-ja message-ja + most: texi2latex.elc latex latexps .SUFFIXES: .texi .dvi .ps @@ -115,7 +117,7 @@ distclean: install: $(SHELL) $(top_srcdir)/mkinstalldirs $(infodir) - @for file in gnus message; 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/gnus-ja.texi b/texi/gnus-ja.texi index b742de3..8d32fd1 100644 --- a/texi/gnus-ja.texi +++ b/texi/gnus-ja.texi @@ -1,7 +1,7 @@ \input texinfo @c -*-texinfo-*- @setfilename gnus-ja -@settitle Semi-gnus 6.9.2 Manual +@settitle Semi-gnus 6.8.19 Manual @synindex fn cp @synindex vr cp @synindex pg cp @@ -345,7 +345,7 @@ into another language, under the above conditions for modified versions. @tex @titlepage -@title Semi-gnus 6.9.2 Manual +@title Semi-gnus 6.8.19 Manual @author by Lars Magne Ingebrigtsen @author by members of Semi-gnus mailing-list @@ -399,7 +399,7 @@ Semi-gnus $B$O!"Bg$-$J3($,F~$C$F$$$?$j$5$^$6$^$J7A<0$rMQ$$$?$j$7$F$$$k$A$g$C(B $B$J8@8l7w$r:9JL$7$^$;$s!#$"$"!"%/%j%s%4%s$NJ}$O(B Unicode Next Generation$B$r(B $B$*BT$A$/$@$5$$!#(B -$B$3$N@bL@=q$O(B Semi-gnus 6.9.2 $B$KBP1~$7$^$9!#(B +$B$3$N@bL@=q$O(B Semi-gnus 6.8.19 $B$KBP1~$7$^$9!#(B @end ifinfo @@ -722,7 +722,7 @@ Gnus $B$O!"IaDL$O%0%k!<%W$,?7$7$$$+$I$&$+$r!"9XFI$7$F$$$k%0%k!<%W$H:o=|$5(B @vindex gnus-subscribe-newsgroup-method $B?7$7$$%0%k!<%W$KAx6x$7$?$H$-$K(B gnus $B$,2?$r$9$k$+$O!"JQ?t(B -@code{gnus-subscribe-newsroup-method} $B$K$h$C$F7hDj$5$l$^$9!#(B +@code{gnus-subscribe-nesgroup-method} $B$K$h$C$F7hDj$5$l$^$9!#(B $B$3$NJQ?t$O4X?t$r4^$s$G$$$kI,MW$,$"$j$^$9!#$3$N4X?t$O?7$7$$%0%k!<%W$NL>A0(B $B$rM#0l$N0z?t$H$7$F8F$P$l$^$9!#(B @@ -802,10 +802,10 @@ options -n !alt.all !rec.all sci.all @vindex gnus-options-not-subscribe @vindex gnus-options-subscribe -$B%U%!%$%k(B @file{.newsrc} $B$r$$$8$j$?$/$J$$>l9g$O!"(B +$B%U%!%$%k(B @file{.newrc} $B$r$$$8$j$?$/$J$$>l9g$O!"(B @code{gnus-options-subscribe} $B$H(B @code{gnus-options-not-subscribe} $B$N#2(B $B$D$NJQ?t$@$1$r@_Dj$9$k$3$H$b$G$-$^$9!#$3$N#2$D$NJQ?t$O%U%!%$%k(B -@file{.newsrc} $B$N(B @samp{optinos -n} $B9T$HA4$/F1$8$3$H$r$7$^$9!#$I$A$i$NJQ(B +@file{.newrc} $B$N(B @samp{optinos -n} $B9T$HA4$/F1$8$3$H$r$7$^$9!#$I$A$i$NJQ(B $B?t$b@55,I=8=$G!"?7$7$$%0%k!<%W$OA0r7o$K9XFI$5$l!"8epJs$OEAE}E*$K$3$N%U%!%$%k$KC_@Q$5$l$^$9!#(B @sc{GNUS} $B$G$OJ*;v$,>/!9J#;($K$J$C$F$$$^$9!#%U%!%$%k(B @file{.newsrc} $B$r:G(B @@ -4040,8 +4040,8 @@ Prefixes})$B!#(B $B5-;v$KIU$1$i$l$k0u$O$$$/$D$+$"$j$^$9!#(B -$B5-;v$N(B @dfn{$B9XFIEY(B}$B!J$*$)!"$9$s$4$$?78l6g$@!*!K$r7hDj$9$k0u$,$"$j$^(B -$B$9!#1Q;z$N0u$O0lHLE*$K$O(B @dfn{$B4{FI(B}$B$r0UL#$7!"1Q;z$G$J$$J8;z$O0lHLE*$K(B +$B5-;v$N(B @dfn{$B9XFIEY(B}$B!J$*$)!"%K!<%H!&%-!<%N?78l6g$@!*!K$r7hDj$9$k0u$,$"$j$^(B +$B$9!#1Q;z$N0u$O0lHLE*$K$O(B@dfn{$B4{FI(B}$B$r0UL#$7!"1Q;z$G$J$$J8;z$O0lHLE*$K(B @dfn{$BL$FI(B}$B$r0UL#$7$^$9!#(B $B2C$($F!"9XFIEY$K1F6A$7$J$$0u$b$"$j$^$9!#(B @@ -7470,7 +7470,7 @@ Parameters}) $B$rJT=8$7$^$9(B (@code{gnus-summary-edit-parameters})$B!#(B @kindex Z s $B!J35N,!K(B @findex gnus-summary-save-newsrc $B8=:_$N4{FI(B/$B0uIU$-5-;v$N?t$r%I%j%V%k%P%C%U%!(B (dribble buffer) $B$KJ]B8$7!"(B -$B$=$l$+$i%I%j%V%k%P%C%U%!$rJ]B8$7$^$9(B (@code{gnus-summary-save-newsrc})$B!#(B +$B$=$l$+$i%I%j%V%k%P%C%U%!$rJ]B8$7$^$9(B (@code{gnus-summary-save-newrc})$B!#(B $B$b$7@\F,0z?t$rM?$($i$l$l$P!"%U%!%$%k(B @file{.newsrc} $B$bJ]B8$7$^$9!#$3$NL?(B $BNa$r;H$&$H!"99?7$J$7$GH4$1=P$k;v(B (@kbd{Q} $BL?Na(B) $B$O0UL#$,L5$/$J$j$^$9!#(B @end table @@ -11003,8 +11003,8 @@ To: alt-religion-emacs@@GATEWAY @table @code @item nngateway-simple-header-transformaton -@var{newsgroup}@@@code{nngateway-address} $B$N$h$&$J(B @code{To} $B%X%C%@!<$r(B -$B$D$/$j$^$9!#(B +@var{nesgroup}@@@code{nngateway-address} $B$N$h$&$J(B @code{To} $B%X%C%@!<$r$D(B +$B$/$j$^$9!#(B @findex nngateway-mail2news-header-transformation @@ -15524,11 +15524,11 @@ Gnus $B$OA4$F$N(B @sc{gnus} $B5/F0%U%!%$%k$rM}2r$7$^$9!#(B Gnus $B$O(B MIME $B$N07$$$r$;$:!"$3$NI8=`$K$J$k$b$N$O(B $B$9$4$/NI$$$H9M$($F$$$k$N(B $B$G!"2f!9$O$3$3$KBg$-$J7j$,6u$$$F$$$k;v$K$J$j$^$9!#(B -@item X-Newsreader +@item X-Nesreader $B$3$l$O(B ``$B$D$^$i$J$$%X%C%@!<(B'' $B$H9M$($i$l$F$$$^$9$,!";d$O>CHqpJs$G$"(B $B$k$H8+$J$7$F$$$^$9!#(B@code{tin} $B$H(B @code{Netscape} $B$+$iAw$i$l$F$/$kHs>o$K(B $BB?$/$NMM<0$K1h$C$F$$$J$$5-;v$r8+$?8e$G!";d$O$=$l$i$r5-;v$rEj9F$9$k$?$a$K(B -$B$O;H$o$J$$J}$,NI$$$H$$$&;v$rCN$j$^$7$?!#$b$7(B @code{X-Newsreader} $B%X%C%@!<(B +$B$O;H$o$J$$J}$,NI$$$H$$$&;v$rCN$j$^$7$?!#$b$7(B @code{X-Nesreader} $B%X%C%@!<(B $B$,L5$1$l$P;d$O$=$N>pJs$rF@$k;v$O$J$+$C$?$G$7$g$&!#(B @end table @@ -17823,8 +17823,8 @@ Solve the halting problem. @item $B%P%C%/%(%s%I(B (backend) @cindex backend Gnus $B$O%K%e!<%9$H%a!<%k$NN>J}$N$$$m$$$m$J%P%C%/%(%s%I$,M?$($?5-;v$rF@$^(B -$B$9!#(BGnus $B$O!"$$$o$f$k2<$K2#$?$o$C$F$$$k%a%G%#%"$r07$&;v$O$7$^$;$s(B---$B$3$l(B -$B$O$9$Y$F%P%C%/%(%s%I$K$h$C$F$J$5$l$^$9!#(B +$B$9!#(BGnus $B$O$O!"$$$o$f$k2<$K2#$?$o$C$F$$$k%a%G%#%"$r07$&;v$O$7$^$;$s(B---$B$3(B +$B$l$O$9$Y$F%P%C%/%(%s%I$K$h$C$F$J$5$l$^$9!#(B @item $B4pK\(B (native) @cindex native @@ -18126,7 +18126,7 @@ Gnus $B$OH"$+$i=P$7$F$9$0$K(B @emph{$BHs>o$K(B} $B$h$/F0:n$7$^$9(B---$B2? @item @kbd{M-x gnus-version} $B$r;n$7$F2<$5$$!#$b$7!"(B -@samp{Semi-gnus 6.9.2 (based on Gnus 5.6.45; for SEMI 1.11, FLIM 1.12)} +@samp{Semi-gnus 6.8.19 (based on Gnus 5.6.44; for SEMI 1.8, FLIM 1.9/1.9)} $B$N$h$&$J$b$N$,=P$F$-$?$J$i!"@5$7$$%U%!%$%k$,FI$_9~$^$l$F$$$^$9!#(B $B$b$7!"(B@samp{NNTP 3.x} $B$d(B @samp{nntp flee} $B$N$h$&$J$b$N$,=P$F$-$?$H$-$O!"(B $B$=$3$K$"$k$$$/$D$+$N8E$$(B @file{.el} $B%U%!%$%k$,FI$_9~$^$l$F$$$^$9!#$=$l$i(B diff --git a/texi/gnus.texi b/texi/gnus.texi index 998270d..8a8e990 100644 --- a/texi/gnus.texi +++ b/texi/gnus.texi @@ -1,7 +1,7 @@ \input texinfo @c -*-texinfo-*- @setfilename gnus -@settitle Gnus 5.6.45 Manual +@settitle Chaos 1.12.0 Manual @synindex fn cp @synindex vr cp @synindex pg cp @@ -291,7 +291,7 @@ into another language, under the above conditions for modified versions. @ifinfo -This file documents Gnus, the GNU Emacs newsreader. +This file documents gnus, the GNU Emacs newsreader. Copyright (C) 1995,96 Free Software Foundation, Inc. @@ -318,7 +318,7 @@ into another language, under the above conditions for modified versions. @tex @titlepage -@title Gnus 5.6.45 Manual +@title Chaos 1.12.0 Manual @author by Lars Magne Ingebrigtsen @page @@ -345,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 Gnus 5.6.45. +Chaos provides MIME features based on SEMI API. So Chaos +supports your right to read strange messages including big images or +other various kinds of formats. Chaos also supports +internationalization/localization and multiscript features based on MULE +API. So Chaos does not discriminate various language communities. +Oh, if you are a Klingon, please wait Unicode Next Generation. + +This manual corresponds to Chaos 1.12.0. @end ifinfo @@ -378,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. @@ -402,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 @@ -425,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. @@ -444,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: @@ -469,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 @@ -481,9 +489,9 @@ If @code{gnus-nntp-server} is set, this variable will override @code{gnus-nntp-server} to @code{nil}, which is what it is by default. @vindex gnus-secondary-servers -You can also make Gnus prompt you interactively for the name of an +You can also make gnus prompt you interactively for the name of an @sc{nntp} server. If you give a non-numerical prefix to @code{gnus} -(i.e., @kbd{C-u M-x gnus}), Gnus will let you choose between the servers +(i.e., @kbd{C-u M-x gnus}), gnus will let you choose between the servers in the @code{gnus-secondary-servers} list (if any). You can also just type in the name of any server you feel like visiting. @@ -518,23 +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. @@ -543,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 @@ -560,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 @@ -571,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.) @@ -606,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. @@ -624,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 @@ -640,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 @@ -652,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 @@ -672,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 @@ -709,9 +717,9 @@ up. Or something like that. @item gnus-subscribe-interactively @vindex gnus-subscribe-interactively -Subscribe new groups interactively. This means that Gnus will ask -you about @strong{all} new groups. The groups you choose to subscribe -to will be subscribed hierarchically. +Subscribe new groups interactively. This means that gnus will ask you +about @strong{all} new groups. The groups you choose to subscribe to +will be subscribed hierarchically. @item gnus-subscribe-killed @vindex gnus-subscribe-killed @@ -722,7 +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. @@ -834,11 +842,11 @@ that you have on your native groups. Use with caution. 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. @@ -849,12 +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 You can turn off writing the @file{.newsrc} file by setting @code{gnus-save-newsrc-file} to @code{nil}, which means you can delete -the file and save some space, as well as exiting from Gnus faster. +the file and save some space, as well as exiting from gnus faster. However, this will make it impossible to use other newsreaders than -Gnus. But hey, who would want to, right? +gnus. But hey, who would want to, right? @vindex gnus-save-killed-list If @code{gnus-save-killed-list} (default @code{t}) is @code{nil}, Gnus @@ -894,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}, @@ -911,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. @@ -943,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. @@ -962,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 @@ -980,9 +990,9 @@ support the @code{LIST ACTIVE group} command), on others this isn't fast at all. In any case, @code{some} should be faster than @code{nil}, and is certainly faster than @code{t} over slow lines. -If this variable is @code{nil}, Gnus will ask for group info in total +If this variable is @code{nil}, gnus will ask for group info in total lock-step, which isn't very fast. If it is @code{some} and you use an -@sc{nntp} server, Gnus will pump out commands as fast as it can, and +@sc{nntp} server, gnus will pump out commands as fast as it can, and read all the replies in one swoop. This will normally result in better performance, but if the server does not support the aforementioned @code{LIST ACTIVE group} command, this isn't very nice to the server. @@ -1001,21 +1011,21 @@ secondary select methods. @item gnus-load-hook @vindex gnus-load-hook -A hook run while Gnus is being loaded. Note that this hook will +A hook run while gnus is being loaded. Note that this hook will normally be run just once in each Emacs session, no matter how many -times you start Gnus. +times you start gnus. @item gnus-before-startup-hook @vindex gnus-before-startup-hook -A hook run after starting up Gnus successfully. +A hook run after starting up gnus successfully. @item gnus-startup-hook @vindex gnus-startup-hook -A hook run as the very last thing after starting up Gnus +A hook run as the very last thing after starting up gnus @item gnus-started-hook @vindex gnus-started-hook -A hook that is run as the very last thing after starting up Gnus +A hook that is run as the very last thing after starting up gnus successfully. @item gnus-started-hook @@ -1025,7 +1035,7 @@ generating the group buffer. @item gnus-check-bogus-newsgroups @vindex gnus-check-bogus-newsgroups -If non-@code{nil}, Gnus will check for and delete all bogus groups at +If non-@code{nil}, gnus will check for and delete all bogus groups at startup. A @dfn{bogus group} is a group that you have in your @file{.newsrc} file, but doesn't exist on the news server. Checking for bogus groups can take quite a while, so to save time and resources it's @@ -1041,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 @@ -1060,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 @@ -1141,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 @@ -1324,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 @@ -1423,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) @@ -1446,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}). @@ -1469,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 @@ -1589,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) @@ -1622,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}). @@ -1856,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) @@ -1865,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}. @@ -1898,7 +1908,7 @@ command, you will be prompted for a file name and a file type. Currently supported types are @code{babyl}, @code{mbox}, @code{digest}, @code{mmdf}, @code{news}, @code{rnews}, @code{clari-briefs}, @code{rfc934}, @code{rfc822-forward}, and @code{forward}. If you run -this command without a prefix, Gnus will guess at the file type. +this command without a prefix, gnus will guess at the file type. @xref{Document Groups}. @item G u @@ -1954,7 +1964,7 @@ methods. @vindex gnus-activate-foreign-newsgroups If @code{gnus-activate-foreign-newsgroups} is a positive number, -Gnus will check all foreign groups with this level or lower at startup. +gnus will check all foreign groups with this level or lower at startup. This might take quite a while, especially if you subscribe to lots of groups from different @sc{nntp} servers. Also @pxref{Group Levels}; @code{gnus-activate-level} also affects activation of foreign @@ -1973,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: @@ -2045,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. @@ -2115,10 +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. +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 @@ -2480,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. @@ -2759,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 @@ -2923,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 @@ -3015,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 @@ -3051,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 @@ -3069,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 @@ -3077,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) @@ -3089,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 @@ -3098,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}: @@ -3230,12 +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. +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 @@ -3346,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 @@ -3355,7 +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. +This restriction may disappear in later versions of gnus. @node Summary Buffer Mode Line @@ -3486,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. @@ -3498,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 @@ -3528,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 @@ -3826,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. @@ -3846,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,A_(B sein! This command understands the process/prefix convention (@pxref{Process/Prefix}). @@ -4007,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 @@ -4145,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 @@ -4164,7 +4175,7 @@ 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 +in the article, and gnus will jump to this bookmark the next time it encounters the article. @xref{Setting Marks} @item @@ -4635,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! @@ -4651,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 @@ -4707,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}). @@ -4831,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 @@ -4852,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. @@ -4915,9 +4926,9 @@ The default is 4. @item gnus-parse-headers-hook @vindex gnus-parse-headers-hook Hook run before parsing any headers. The default value is -@code{(gnus-decode-rfc1522)}, which means that QPized headers will be -slightly decoded in a hackish way. This is likely to change in the -future when Gnus becomes @sc{MIME}ified. +@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 @@ -5167,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 @@ -5214,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) @@ -5227,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 @@ -5320,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 @@ -5379,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. @@ -5408,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 @@ -5494,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 four ready-made +gnus do what you want it to. You can use any of the four ready-made functions below, or you can create your own. @table @code @@ -5577,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") @@ -5606,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 @@ -5687,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]+).*$}. @@ -5735,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}. @@ -5873,7 +5884,7 @@ say something like: @item gnus-uu-user-view-rules-end @vindex gnus-uu-user-view-rules-end -This variable is consulted if Gnus couldn't make any matches from the +This variable is consulted if gnus couldn't make any matches from the user and default view rules. @item gnus-uu-user-archive-rules @@ -6028,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. @@ -6147,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 @@ -6421,7 +6432,7 @@ Toggle whether to display all headers in the article buffer permanently @item W m @kindex W m (Summary) @findex gnus-summary-toggle-mime -Toggle whether to run the article through @sc{mime} before displaying +Toggle whether to display the article as @sc{mime} message (@code{gnus-summary-toggle-mime}). @item W o @@ -6450,15 +6461,6 @@ when filling. Remove CR (i. e., @samp{^M}s on the end of the lines) (@code{gnus-article-remove-cr}). -@item W q -@kindex W q (Summary) -@findex gnus-article-de-quoted-unreadable -Treat quoted-printable (@code{gnus-article-de-quoted-unreadable}). -Quoted-Printable is one common @sc{mime} encoding employed when sending -non-ASCII (i. e., 8-bit) articles. It typically makes strings like -@samp{déjà vu} look like @samp{d=E9j=E0 vu}, which doesn't look very -readable to me. - @item W f @kindex W f (Summary) @cindex x-face @@ -6845,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) @@ -6911,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. @@ -7030,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. @@ -7099,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 @@ -7246,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) @@ -7279,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 @@ -7324,11 +7326,11 @@ some other ungodly manner. I don't care. @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. @@ -7369,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 @@ -7577,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 @@ -7654,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 @@ -7705,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 @@ -7719,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. @@ -7734,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. @@ -7790,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:") @@ -7819,7 +7820,8 @@ and then the subject, you might say something like: @end lisp Any headers that are to remain visible, but are not listed in this -variable, will be displayed in random order after all the headers listed in this variable. +variable, will be displayed in random order after all the headers listed +in this variable. @findex gnus-article-hide-boring-headers @vindex gnus-article-display-hook @@ -7829,7 +7831,7 @@ You can hide further boring headers by entering @code{gnus-article-display-hook}. What this function does depends on the @code{gnus-boring-article-headers} variable. It's a list, but this list doesn't actually contain header names. Instead is lists various -@dfn{boring conditions} that Gnus can check and remove from sight. +@dfn{boring conditions} that gnus can check and remove from sight. These conditions are: @table @code @@ -7878,22 +7880,15 @@ of the characters, and it also makes it possible to embed pictures and other naughty stuff in innocent-looking articles. @vindex gnus-show-mime -@vindex gnus-show-mime-method +@vindex gnus-article-display-method-for-mime @vindex gnus-strict-mime -@findex metamail-buffer +@findex gnus-article-display-mime-message Gnus handles @sc{mime} by pushing the articles through -@code{gnus-show-mime-method}, which is @code{metamail-buffer} by -default. This function calls the external @code{metamail} program to -actually do the work. One common problem with this program is that is -thinks that it can't display 8-bit things in the Emacs buffer. To tell -it the truth, put something like the following in your -@file{.bash_profile} file. (You do use @code{bash}, don't you?) - -@example -export MM_CHARSET="iso-8859-1" -@end example - -For more information on @code{metamail}, see its manual page. +@code{gnus-article-display-method-for-mime}, which is +@code{gnus-article-display-mime-message} by default. This function +calls the SEMI MIME-View program to actually do the work. For more +information on SEMI MIME-View, see its manual page (however it is not +existed yet, sorry). Set @code{gnus-show-mime} to @code{t} if you want to use @sc{mime} all the time. However, if @code{gnus-strict-mime} is @@ -7902,18 +7897,24 @@ non-@code{nil}, the @sc{mime} method will only be used if there are set, then you'll see some unfortunate display glitches in the article buffer. These can't be avoided. -It might be best to just use the toggling functions from the summary -buffer to avoid getting nasty surprises. (For instance, you enter the -group @samp{alt.sing-a-long} and, before you know it, @sc{mime} has -decoded the sound file in the article and some horrible sing-a-long song -comes screaming out your speakers, and you can't find the volume -button, because there isn't one, and people are starting to look at you, -and you try to stop the program, but you can't, and you can't find the -program to control the volume, and everybody else in the room suddenly -decides to look at you disdainfully, and you'll feel rather stupid.) +In GNUS or Gnus, it might be best to just use the toggling functions +from the summary buffer to avoid getting nasty surprises. (For instance, +you enter the group @samp{alt.sing-a-long} and, before you know it, +@sc{mime} has decoded the sound file in the article and some horrible +sing-a-long song comes screaming out your speakers, and you can't find +the volume button, because there isn't one, and people are starting to +look at you, and you try to stop the program, but you can't, and you +can't find the program to control the volume, and everybody else in the +room suddenly decides to look at you disdainfully, and you'll feel +rather stupid.) Any similarity to real events and people is purely coincidental. Ahem. +To avoid such kind of situation, gnus stops to use +@code{metamail-buffer}. So now, you can set @code{gnus-show-mime} to +non-@code{nil} every-time, then you can push button in the article +buffer when there are nobody else. + @node Customizing Articles @section Customizing Articles @@ -8084,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? @@ -8134,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 @@ -8155,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 @@ -8171,10 +8172,10 @@ can use a non-zero prefix to the @kbd{C-c C-c} command to force using the ``current'' server for posting. If you give a zero prefix (i.e., @kbd{C-u 0 C-c C-c}) to that command, -Gnus will prompt you for what method to use for posting. +gnus will prompt you for what method to use for posting. You can also set @code{gnus-post-method} to a list of select methods. -If that's the case, Gnus will always prompt you for what method to use +If that's the case, gnus will always prompt you for what method to use for posting. Finally, if you want to always post using the same select method as @@ -8229,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 @@ -8318,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 @@ -8450,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 @@ -8520,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 @@ -10421,7 +10422,6 @@ your @file{.emacs} file: @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 @@ -11071,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',Aj(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. @@ -11736,7 +11736,7 @@ Fetch all eligible articles in all groups @kindex J S (Agent Group) @findex gnus-group-send-drafts Send all sendable messages in the draft group -(@code{gnus-agent-fetch-session}). @xref{Drafts} +(@code{gnus-agent-send-draft}). @xref{Drafts} @item J a @kindex J a (Agent Group) @@ -12108,7 +12108,7 @@ Score on the body. Score on the head. @item t -Score on thead. +Score on thread. @end table @@ -13495,7 +13495,7 @@ then this operator will return @code{false}. @item ! @itemx not -@itemx ¬ +@itemx ,A,(B This logical operator only takes a single argument. It returns the logical negation of the value of its argument. @@ -15350,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. @@ -15786,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,Ag(Bois Pinard---many, many interesting and thorough bug reports, as well as autoconf support. @end itemize @@ -15799,7 +15799,7 @@ The following people have contributed many patches and suggestions: Christopher Davis, Andrew Eskilsson, Kai Grossjohann, -David Kågedal, +David K,Ae(Bgedal, Richard Pieri, Fabrice Popineau, Daniel Quinlan, @@ -15870,7 +15870,7 @@ Marc Horowitz, Gunnar Horrigmo, Richard Hoskins, Brad Howes, -François Felix Ingrand, +Fran,Ag(Bois Felix Ingrand, Ishikawa Ichiro, @c Ishikawa Lee Iverson, Iwamuro Motonori, @c Iwamuro @@ -17295,8 +17295,8 @@ From: Jason L Tibbitts III @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,Ae(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,Af(Bre en liste hvor du bruker hvert element i listen som FOO, istedet. da kunne man hatt forskjellige serveres startup-filer forskjellige steder. @@ -17369,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,Af(Bre en m,Ae(Bte ,Ae(B si slikt. Kanskje en ny variabel? +`gnus-use-few-score-files'? S,Ae(B kunne score-regler legges til den "mest" lokale score-fila. F. eks. ville no-gruppene betjenes av "no.all.SCORE", osv. @@ -17700,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 @@ -17825,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 diff --git a/texi/message-ja.texi b/texi/message-ja.texi index 7cf6523..3a152d3 100644 --- a/texi/message-ja.texi +++ b/texi/message-ja.texi @@ -1,7 +1,7 @@ \input texinfo @c -*-texinfo-*- @setfilename message-ja -@settitle Message 5.6.45 Manual +@settitle Message 5.6.33 Manual @synindex fn cp @synindex vr cp @synindex pg cp @@ -60,7 +60,7 @@ into another language, under the above conditions for modified versions. @tex @titlepage -@title Message 5.6.45 Manual +@title Message 5.6.22 Manual @author by Lars Magne Ingebrigtsen @translated by members of Semi-gnus mailing-list @@ -112,7 +112,7 @@ Gnus $B$NA4$F$N%a%C%;!<%8$N:n@.(B ($B%a!<%k$H%K%e!<%9$NN>J}(B) $B$O%a%C%;!< * Key Index:: $B%a%C%;!<%8%b!<%I%-!<$N0lMw!#(B @end menu -$B$3$N%^%K%e%"%k$O(B Message 5.6.45 $B$KBP1~$7$^$9!#(BMessage $B$O$3$N%^%K%e%"%k$H(B +$B$3$N%^%K%e%"%k$O(B Message 5.6.22 $B$KBP1~$7$^$9!#(BMessage $B$O$3$N%^%K%e%"%k$H(B $BF1$8HGHV9f$N(B Gnus $B$NG[I[$H6&$KG[I[$5$l$^$9!#(B -- 1.7.10.4