-1998-12-22 Katsumi Yamaoka <yamaoka@jpl.org>
+1998-12-01 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * lisp/gnus-art.el (gnus-article-prepare-display): Set
- `gnus-article-current-summary' to `gnus-summary-buffer'.
+ * Chao-gnus: Version 6.12.5 was released.
-1998-12-18 Katsumi Yamaoka <yamaoka@jpl.org>
+ * Abolish smtp.el and smtpmail.el (moved to FLIM).
- * lisp/gnus-start.el (gnus-read-newsrc-el-file): Bug (referring to
- unbounded variable) fix.
+1998-11-30 MORIOKA Tomohiko <morioka@jaist.ac.jp>
-1998-12-17 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * lisp/gnus-start.el (gnus-read-newsrc-el-file): Don't load newsrc
- file if it does not exist.
+ * lisp/gnus.el (gnus-version-number): Update to 6.12.5.
+ (gnus-version): Modify for SEMI 1.12.
-1998-12-14 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * lisp/gnus.el: (gnus-version-number): Update to 6.9.2.
-
- * lisp/nnheader.el (nnheader-find-file-noselect): Call
- `find-file-noselect-as-coding-system' with CODING-SYSTEM as the
- 1st arg.
-
- * lisp/nnmail.el (nnmail-find-file): Call
- `insert-file-contents-as-coding-system' with CODING-SYSTEM as the
- 1st arg.
- * lisp/nnheader.el (nnheader-insert-file-contents): Likewise.
-
- * lisp/gnus-start.el (gnus-save-newsrc-file): Call
- `write-region-as-coding-system' with CODING-SYSTEM as the 1st arg.
- (gnus-read-newsrc-el-file): Call
- `insert-file-contents-as-coding-system' with CODING-SYSTEM as the
- 1st arg.
-
- * lisp/gnus-cache.el (gnus-cache-save-buffers): Call
- `gnus-write-buffer-as-coding-system' with CODING-SYSTEM as the 1st
- arg.
-
- * lisp/gnus-util.el (gnus-write-buffer-as-coding-system): Be
- CODING-SYSTEM the 1st arg.
-
- * lisp/nnmail.el (nnmail-write-region): Call
- `write-region-as-coding-system' with CODING-SYSTEM as the 1st arg.
- * lisp/gnus-start.el (gnus-save-newsrc-file): Likewise.
- * lisp/gnus-agent.el (gnus-agent-expire): Likewise.
- (gnus-agent-fetch-headers): Likewise.
- (gnus-agent-flush-cache): Likewise.
- (gnus-agent-fetch-articles): Likewise.
- (gnus-agent-save-history): Likewise.
- (gnus-agent-save-groups): Likewise.
- (gnus-agent-save-active): Likewise.
-
-1998-12-14 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * lisp/nnheader.el (nnheader-find-file-noselect): Use
- `find-file-noselect-as-coding-system' (renamed from
- `find-file-noselect-as-specified-coding-system').
-
- * lisp/nnmail.el (nnmail-find-file): Use
- `insert-file-contents-as-coding-system' (renamed from
- `insert-file-contents-as-specified-coding-system').
- * lisp/nnheader.el (nnheader-insert-file-contents): Likewise.
-
- * lisp/gnus-start.el (gnus-save-newsrc-file): Use
- `write-region-as-coding-system' (renamed from
- `write-region-as-specified-coding-system').
- (gnus-read-newsrc-el-file): Use
- `insert-file-contents-as-coding-system' (renamed from
- `insert-file-contents-as-specified-coding-system').
-
- * lisp/gnus-cache.el (gnus-cache-save-buffers): Use
- `gnus-write-buffer-as-coding-system' (renamed from
- `gnus-write-buffer-as-specified-coding-system').
-
- * lisp/gnus-util.el (gnus-write-buffer-as-coding-system):
- Renamed from `gnus-write-buffer-as-specified-coding-system'.
-
- * lisp/nnmail.el (nnmail-write-region): Use
- `write-region-as-coding-system' (renamed from
- `write-region-as-specified-coding-system').
- * lisp/gnus-start.el (gnus-save-newsrc-file): Likewise.
- * lisp/gnus-agent.el (gnus-agent-expire): Likewise.
- (gnus-agent-fetch-headers): Likewise.
- (gnus-agent-flush-cache): Likewise.
- (gnus-agent-fetch-articles): Likewise.
- (gnus-agent-save-history): Likewise.
- (gnus-agent-save-groups): Likewise.
- (gnus-agent-save-active): Likewise.
-
-1998-12-11 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * lisp/nnheader.el (nnheader-find-file-noselect): Call
- `find-file-noselect-as-specified-coding-system' directly.
-
-1998-12-10 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * lisp/pop3.el (pop3-movemail): Use `write-region-as-binary'
- instead of `append-to-file'.
- (pop3-movemail-file-coding-system): Abolished.
-
- * lisp/nnheader.el (nnheader-find-file-noselect): Use
- `find-file-noselect-as-specified-coding-system' instead of
- `find-file-noselect'.
-
- * lisp/nnmail.el (nnmail-find-file): Use
- `insert-file-contents-as-specified-coding-system' instead of
- `insert-file-contents'.
- * lisp/nnheader.el (nnheader-insert-file-contents): Likewise.
-
- * lisp/message.el (message-send-mail-with-qmail): Enclose
- `call-process-region' with `as-binary-process'.
- (message-send-mail-with-sendmail): Likewise.
- (message-send-coding-system): Abolished.
-
- * lisp/gnus-start.el (gnus-save-newsrc-file): Emulate
- `save-buffer' with `write-region-as-specified-coding-system'.
- (gnus-read-newsrc-el-file): Emulate `load' with
- `insert-file-contents-as-specified-coding-system' and
- `eval-region'.
-
- * lisp/gnus-cache.el (gnus-cache-save-buffers): Use
- `gnus-write-buffer-as-specified-coding-system' instead of
- `gnus-write-buffer'.
-
- * lisp/gnus-util.el (gnus-output-to-mail): Use
- `write-region-as-binary' instead of `append-to-file'.
- (gnus-output-to-mail): Use `gnus-write-buffer-as-binary' instead
- of `gnus-write-buffer'.
- (gnus-write-buffer-as-specified-coding-system): New function.
- (gnus-write-buffer-as-binary): New function.
-
- * lisp/nnmail.el (nnmail-write-region): Use
- `write-region-as-specified-coding-system' instead of
- `write-region'.
- * lisp/gnus-start.el (gnus-save-newsrc-file): Likewise.
- * lisp/gnus-agent.el (gnus-agent-expire): Likewise.
- (gnus-agent-fetch-headers): Likewise.
- (gnus-agent-flush-cache): Likewise.
- (gnus-agent-fetch-articles): Likewise.
- (gnus-agent-save-history): Likewise.
- (gnus-agent-save-groups): Likewise.
- (gnus-agent-save-active): Likewise.
-
-1998-12-08 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * lisp/smtp.el (smtp-via-smtp): Use `open-network-stream-as-binary'
- instead of `open-network-stream'.
- * lisp/pop3.el (pop3-open-server): Likewise.
- * lisp/nntp.el (nntp-open-network-stream): Likewise.
- * lisp/gnus-gl.el (bbb-connect-to-bbbd): Likewise.
-
- * lisp/nntp.el (nntp-open-rlogin): Enclose `start-process' with
- `as-binary-process'.
- (nntp-open-telnet): Likewise.
-
- * lisp/smtp.el (smtp-coding-system): Abolished.
-
- * lisp/nntp.el (nntp-coding-system-for-write): Abolished.
- (nntp-coding-system-for-read): Abolished.
-
- * lisp/nntp.el: Don't require `tcp'.
- * lisp/nndb.el: Likewise.
-
-1998-12-07 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * lisp/message.el (message-get-parameter-with-eval): Call
- `message-get-parameter' with arg `key' first.
-
-1998-11-26 Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp>
-
- * lisp/gnus.el: (gnus-version-number): Update to 6.9.1.
- (gnus-version): Modified for SEMI 1.11, FLIM 1.12.
-
- * lisp/gnus-draft.el: (gnus-draft-decoding-buffer): Call
- `mime-edit-decode-message-in-buffer' instead of
- `mime-edit-decode-buffer'.
+1998-11-30 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * 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'.
+ * lisp/message.el: Sync with Gnus 5.6.45.
-1998-11-26 Katsumi Yamaoka <yamaoka@jpl.org>
+1998-07-03 Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
- * lisp/gnus-msg.el (gnus-summary-supersede-article): Bind
- `gnus-message-setup-hook' to nil.
+ * lisp/message.el (message-send-mail-with-smtp): Require 'smtp.
- * lisp/message.el (message-supersede-setup-for-mime-edit): New
- function.
- (message-supersede-setup-function): New user option. Use
- `message-supersede-setup-for-mime-edit' in default.
- (message-supersede): Call `message-supersede-setup-function' if it
- is non-nil.
- (message-supersede-setup-hook): New user option.
+1998-06-18 Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
+
+ * lisp/message.el (message-send-mail-with-smtp): New
+ implementation.
- * lisp/message.el (message-bounce-setup-for-mime-edit): Don't
- delete header separator. It is up to MIME-Edit to do so.
+1998-11-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
-1998-11-25 Hasebe Satoshi <hasebe@mtgcb.telcom.oki.co.jp>
+ * lisp/gnus.el (gnus-version-number): Update to 6.12.4.
- * lisp/gnus-util.el: Require RMAIL in a different way.
+ * lisp/nnheader.el (nnheader-decode-subject): Use field-decoder
+ for `nov' mode.
+ (nnheader-decode-from): Likewise.
-1998-11-24 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
+1998-11-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * lisp/pop3-fma.el (pop3-fma-save-password-information): New
- variable. Do not save password information when
- `pop3-fma-save-password-information' set to nil (in default).
- (pop3-fma-encode-string): abolished - because of difference of
- FLIM API.
- (pop3-fma-decode-string): Likewise.
+ * lisp/gnus.el (gnus-version-number): Update to 6.12.3.
-1998-11-24 Katsumi Yamaoka <yamaoka@jpl.org>
+1998-11-04 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * lisp/dgnushack.el (dgnushack-compile): Dismiss "gnus-bbdb.el"
- from the list if BBDB has not been installed.
+ * lisp/mmgnus.el (entity-buffer): Must move to (point-min) before
+ search boundary between header and body (to fix problem with
+ Emacs).
-1998-11-20 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
+1998-11-03 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * lisp/gnus-util.el: Require `rmail' only if RMAIL has been
- installed.
+ * lisp/nnmh.el (nnmh-retrieve-headers): Don't use
+ `nnheader-fold-continuation-lines'.
-1998-11-19 Keiichi Suzuki <kei-suzu@mail.wbs.ne.jp>
+ * lisp/gnus-sum.el (gnus-get-newsgroup-headers): Don't expect
+ unfolded (to fix problem when using gnus-cache).
- * 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'.
+1998-10-31 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * 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'.
+ * lisp/gnus.el (gnus-version-number): Update to 6.12.2.
+ (gnus-version): Modify for SEMI 1.11.
-1998-11-19 Katsumi Yamaoka <yamaoka@jpl.org>
+ * lisp/gnus-draft.el (gnus-draft-decoding-function): Use
+ `mime-edit-decode-message-in-buffer' instead of
+ `mime-edit-decode-buffer'.
+
+1998-10-29 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * lisp/gnus.el (gnus-version-number): Update to 6.8.20.
+ * lisp/gnus-draft.el (gnus-draft-decoding-function): Use
+ `mime-edit-decode-buffer' simply as initial value.
- * Sync up with Gnus 5.6.45.
+ * 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.
-1998-11-18 Katsumi Yamaoka <yamaoka@jpl.org>
+ * lisp/gnus.el (gnus-version-number): Update to 6.12.1.
- * lisp/message.el (message-mimic-kill-buffer): Rewrite.
+ * 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'.
-1998-11-18 Katsumi Yamaoka <yamaoka@jpl.org>
+1998-10-20 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * lisp/message.el (message-mimic-kill-buffer): New function.
- (message-mode-map): Use it for `C-x k'.
+ * lisp/gnus.el (gnus-version-number): Update to 6.9.7.
+ (gnus-version): Modify for SEMI 1.10.
-1998-11-18 Keiichi Suzuki <kei-suzu@mail.wbs.ne.jp>
+1998-10-20 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * lisp/message.el (message-dont-send): Use `message-delete-frame'.
+ * lisp/nnheader.el (nnheader-insert-nov): Use `mime-fetch-field'
+ for Subject and From field.
-1998-11-14 Kenji Itoh <keit@tpj.co.jp>
+1998-10-20 Katsumi Yamaoka <yamaoka@jpl.org>
- * lisp/nnmail.el (nnmail-read-passwd): Use `read-passwd' if it
- exists as a function.
+ * lisp/nnheader.el (nnheader-parse-nov): Use
+ `make-full-mail-header'.
- * lisp/pop3.el (pop3-read-passwd): Likewise.
+1998-10-20 MORIOKA Tomohiko <morioka@jaist.ac.jp>
-1998-11-16 Katsumi Yamaoka <yamaoka@jpl.org>
+ * lisp/nnheader.el (nnheader-parse-head): Use
+ `make-full-mail-header'.
- * make.bat: Replace line endings from `LF' to `CRLF'.
+1998-10-14 MORIOKA Tomohiko <morioka@jaist.ac.jp>
-1998-11-16 Katsumi Yamaoka <yamaoka@jpl.org>
+ * lisp/gnus.el (gnus-version-number): Update to 6.9.6.
+ (gnus-version): Modify for SEMI 1.9.
- * README-gnus-bbdb.en, README-gnus-bbdb.ja: New files.
+1998-10-14 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * lisp/gnus-bbdb.el: Replace string in comment "Nana-" to "Semi-".
+ * 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-11-13 Keiichi Suzuki <kei-suzu@mail.wbs.ne.jp>
+1998-10-12 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * lisp/gnus-msg.el (gnus-setup-message): Setup
- `message-startup-parameter-alist' for starting `message-mode'.
+ * lisp/gnus.el (gnus-version-number): Update to 6.9.5.
- * 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'.
+1998-10-12 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * lisp/gnus-bbdb.el: New file. Interface for BBDB.
+ * lisp/nnheader.el (make-full-mail-header-from-decoded-header):
+ New function.
-1998-11-12 Katsumi Yamaoka <yamaoka@jpl.org>
+ * lisp/message.el (message-reply): Use
+ `make-full-mail-header-from-decoded-header' instead of
+ `make-full-mail-header'.
+ (message-followup): Likewise.
- * lisp/gnus-msg.el (gnus-summary-resend-bounced-mail): Bind
- `gnus-message-setup-hook' to nil.
+1998-10-05 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * lisp/message.el (message-bounce-setup-for-mime-edit): New
+ * lisp/gnus-sum.el (gnus-summary-set-default-charset): New
function.
- (message-bounce-setup-function): New user option. Use
- `message-bounce-setup-for-mime-edit' in default.
- (message-bounce): Call `message-bounce-setup-function' if it is
- non-nil.
- (message-bounce-setup-hook): New user option.
- * lisp/gnus-art.el (gnus-article-edit-done): Remove
- `gnus-article-mime-edit-article-unwind' from
- `gnus-article-mode-hook' before run `gnus-article-edit-exit'.
- (gnus-article-edit-article): Call
- `gnus-article-edit-article-setup-function' if it is non-nil.
- (gnus-article-edit-article-setup-function): New user option. Use
- `gnus-article-mime-edit-article-setup' in default.
- (gnus-article-mime-edit-article-setup-hook): New hook.
- (gnus-article-mime-edit-exit): New function. Use
- `gnus-article-make-full-mail-header'.
- (gnus-article-mime-edit-article-setup): Ditto.
- (gnus-article-mime-edit-article-unwind): New function.
- (gnus-article-make-full-mail-header): New function.
- (gnus-article-prepare-display): New function.
- (gnus-article-prepare): Use it.
+ * 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-11-11 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
+1998-10-05 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * lisp/message.el (message-mode-map): Add new command key
- `C-x C-s' for `message-save-drafts'.
+ * 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-11-11 Keiichi Suzuki <kei-suzu@mail.wbs.ne.jp>
+ * 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'.
- * lisp/message.el (message-8bit-encoding-list): New variable.
- (message-send-mail): Use `message-check-mail-syntax'.
- (message-check-news-body-syntax): Use `message-check-8bit'.
- (message-check-mail-syntax): New function.
- (message-check-mail-header-syntax): New function.
- (message-check-mail-body-syntax): New function.
- (message-check-8bit): New function.
+1998-10-03 MORIOKA Tomohiko <morioka@jaist.ac.jp>
-1998-11-09 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
+ * lisp/gnus.el (gnus-version-number): Update to 6.9.4.
- * lisp/pop3-fma.el: Set the value of `nnmail-read-passwd' as a
- symbol `pop3-fma-read-passwd'.
+1998-10-03 MORIOKA Tomohiko <morioka@jaist.ac.jp>
-1998-11-04 Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp>
+ * lisp/gnus-draft.el (gnus-draft-send): Call
+ `message-send-news-function' or `message-send-mail-function'
+ instead of `message-send-and-exit'.
- * lisp/message.el: (message-do-fcc): Don't run message-header-hook
- and message-before-do-fcc-hook.
+1998-09-17 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
-1998-11-02 Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp>
+ * lisp/gnus-draft.el (gnus-draft-edit-message): Use
+ `gnus-draft-setup-for-editing' instead of `gnus-draft-setup'.
+ (gnus-draft-send): Use `gnus-draft-setup-for-sending' instead of
+ `gnus-draft-setup'.
+ (gnus-draft-setup-for-editing): New function (renamed from
+ `gnus-draft-setup').
+ (gnus-draft-setup-for-sending): New function.
+ (gnus-draft-send-draft-buffer): New variable.
+
+1998-10-02 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * lisp/message.el: (message-make-in-reply-to): Generate
- In-Reply-To header according to draft-ietf-drums-msg-fmt-05.
+ * lisp/gnus-art.el (gnus-article-prepare): Don't store original
+ buffer to the entity.
-1998-10-30 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
+ * 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.el: Add autoload setting for `pop3-fma'.
+ * 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-28 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
+1998-10-01 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * lisp/pop3-fma.el: Determin base64 encode/decode function by FLIM.
+ * lisp/gnus.el (gnus-version-number): Update to 6.9.3.
-1998-10-26 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
+ * lisp/nnheader.el (make-full-mail-header): Store original subject
+ and from fields.
+
+1998-09-30 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * lisp/message.el (message-save-drafts): New function.
- To save drafts in network code.
- (message-save-buffer): New variable.
+ * 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/pop3-fma.el: Require `mel-b-el' if `mel-b' does not exist.
+ * lisp/nnheader.el (make-full-mail-header): Decode subject and
+ from; changed to inline function.
-1998-10-23 Katsumi Yamaoka <yamaoka@jpl.org>
+1998-09-30 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * lisp/gnus-msg.el (gnus-message-make-user-agent): New function.
+ * lisp/gnus-sum.el (gnus-get-newsgroup-headers): Store
+ content-type.
-1998-10-21 Katsumi Yamaoka <yamaoka@jpl.org>
+1998-09-30 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * lisp/gnus-xmas.el (gnus-tilde-pad-form): Guard for non string
- symbol.
+ * lisp/gnus.el (gnus-version-number): Update to 6.9.2.
-1998-10-17 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
+ * lisp/mmgnus.el: New module.
- * lisp/pop3-fma.el (pop3-fma-init-message-hook): Change
- message-send-hook to mime-edit-translate-hook.
+ * lisp/gnus-art.el (gnus-article-prepare): Use content of
+ `gnus-current-headers' as mime-message-structure.
-1998-10-14 Katsumi Yamaoka <yamaoka@jpl.org>
+1998-09-30 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * 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.el (gnus-version-number): Update to 6.9.1.
+ (gnus-version): Modify for Chao 1.11.
-1998-10-13 Katsumi Yamaoka <yamaoka@jpl.org>
+ * lisp/nnheader.el (make-full-mail-header): Changed to macro.
- * 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.
+1998-09-30 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * lisp/nnheader.el (nnheader-Y-or-n-p): Rewrite for Emacs 19 or
- later except for XEmacs.
+ * lisp/gnus.el (gnus-version): Modify for Chao 1.10.
-1998-10-08 Katsumi Yamaoka <yamaoka@jpl.org>
+ * lisp/gnus-score.el (gnus-header-index): Modify to use
+ mime-entity structure as gnus-header structure.
- * lisp/message.el (message-mode-map): Define key `C-x k'.
- (message-kill-buffer): Change the prompt string.
- (message-kill-buffer): Refer to
- `message-kill-buffer-query-function'.
- (message-kill-buffer-query-function): New user option.
+ * lisp/nnheader.el: 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'.
- * lisp/nnheader.el (nnheader-Y-or-n-p): New function.
+1998-09-30 MORIOKA Tomohiko <morioka@jaist.ac.jp>
-1998-10-07 Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp>
+ * lisp/message.el (message-reply): Use `make-full-mail-header'.
+ (message-followup): Likewise.
- * lisp/nnagent.el (nnagent-open-server): Small bug fix.
+ * 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-10-07 Keiichi Suzuki <kei-suzu@mail.wbs.ne.jp>
+1998-09-29 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * TODO.ja: New file.
+ * 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-10-05 Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp>
+1998-09-29 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * lisp/gnus.el (gnus-info-filename): New variable.
- (gnus-info-find-node): Use `gnus-info-filename' and
- `current-language-environment'.
+ * 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-10-03 MORIOKA Tomohiko <morioka@jaist.ac.jp>
+1998-09-29 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * lisp/gnus-draft.el (gnus-draft-send): Call
- `message-send-news-function' or `message-send-mail-function'
- instead of `message-send-and-exit'.
+ * 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-10-01 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
+1998-09-29 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * 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 (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 <morioka@jaist.ac.jp>
+
+ * lisp/gnus-sum.el (gnus-update-summary-mark-positions): Use
+ `make-full-mail-header'.
1998-09-30 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* lisp/gnus-soup.el (gnus-soup-send-packet): `message-mailer' and
`message-newsreader' were replaced by `message-user-agent'.
-1998-09-17 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
+1998-09-29 MORIOKA Tomohiko <morioka@jaist.ac.jp>
- * lisp/gnus-draft.el (gnus-draft-edit-message): Use
- `gnus-draft-setup-for-editing' instead of `gnus-draft-setup'.
- (gnus-draft-send): Use `gnus-draft-setup-for-sending' instead of
- `gnus-draft-setup'.
- (gnus-draft-setup-for-editing): New function (renamed from
- `gnus-draft-setup').
- (gnus-draft-setup-for-sending): New function.
- (gnus-draft-send-draft-buffer): New variable.
+ * lisp/gnus-sum.el (gnus-get-newsgroup-headers): Use
+ `make-full-mail-header'.
1998-09-26 Katsumi Yamaoka <yamaoka@jpl.org>
1998-09-11 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* lisp/message.el (message-send): Don't call
- `message-fix-before-sending' before `message-encode-function' is
- called.
+ `message-fix-before-sending' before `message-encode-function' is
+ called.
1998-09-06 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
* lisp/pop3-fma.el: Add error handle and fix typo.
-
+
1998-08-28 Keiichi Suzuki <kei-suzu@mail.wbs.ne.jp>
* lisp/message.el: Repair `multi frame control'.
* lisp/gnus.el (gnus-version-number): Update to 6.8.14.
* Sync up with Gnus 5.6.38.
-
+
1998-08-20 Keiichi Suzuki <kei-suzu@mail.wbs.ne.jp>
* lisp/message.el (message-frames): New custom group.
* lisp/gnus.el (gnus-version-number): Update to 6.8.13.
* Sync up with Gnus 5.6.37.
-
+
1998-08-16 Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp>
* lisp/gnus-sum.el (gnus-summary-scroll-down): Failed to sync.
* lisp/gnus.el (gnus-version-number): Update to 6.8.12.
* Sync up with Gnus 5.6.36.
-
+
1998-08-15 Yoshiki Hayashi <g740685@komaba.ecc.u-tokyo.ac.jp>
* texi/gnus-ja.texi: Update.
-1998-08-14 Katsumi Yamaoka <yamaoka@jpl.org>
-
- * lisp/gnus-start.el (gnus-save-newsrc-file): Bind
- `coding-system-for-write' by `gnus-startup-file-coding-system'
- while saving the quick newsrc file.
-
- * lisp/gnus-start.el (gnus-startup-file-coding-system): Change
- default value to `ctext'.
-
1998-08-13 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
* lisp/gnus.el (gnus-version-number): Fix typo.
* lisp/gnus.el (gnus-version-number): Update to 6.8.11.
* Sync up with Gnus 5.6.34.
-
+
1998-08-12 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
* lisp/gnus.el (gnus-version-number): Update to 6.8.10.
* Sync up with Gnus 5.6.33.
-
+
1998-08-11 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
* lisp/gnus.el (gnus-version-number): Update to 6.8.9.
* Sync up with Gnus 5.6.31.
-
+
1998-08-10 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
* lisp/gnus.el (gnus-version-number): Update to 6.8.8.
* Sync up with Gnus 5.6.30.
-
+
1998-08-10 Keiichi Suzuki <kei-suzu@mail.wbs.ne.jp>
* lisp/message.el (message-yank-original): For citing any message.
1998-08-06 Katsumi Yamaoka <yamaoka@jpl.org>
- * 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 <t-ichi@po.shiojiri.ne.jp>
* lisp/gnus.el (gnus-version-number): Update to 6.8.6.
* Sync up with Gnus 5.6.29.
-
+
1998-08-05 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
* lisp/gnus-start.el (gnus-read-init-file): Fix indent.
* lisp/gnus-ems.el (gnus-tilde-max-form): Redefine instead of
- (gnus-summary-line-format-spec) to display Japanese character
+ (gnus-summary-line-format-spec) to display Japanese character
correctly in Gnus summaly.
1998-08-05 Keiichi Suzuki <kei-suzu@mail.wbs.ne.jp>
* Sync up with Gnus 5.6.22
* lisp/gnus.el (gnus-version-number): Update to 6.7.8.
* lisp/pop3-fma.el : Enable to get localhost mail spool.
-
+
1998-06-29 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* lisp/gnus.el (gnus-version-number): Update to 6.7.7.
Gnus 5.6.13.
1998-06-14 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
-
+
* Sync up with Gnus 5.6.13.
-
+
1998-06-24 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* lisp/gnus-art.el (gnus-article-display-mime-message): Don't
1998-06-17 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
* lisp/pop3-fma.el: Small bug fix.
-
+
* lisp/pop3-fma.el: Delete variable pop3-fma-cypher-key
- Use base64-encode-string , base64-decode-string instead.
+ Use base64-encode-string , base64-decode-string instead.
Both change by Yasuo OKABE <okabe@kuis.kyoto-u.ac.jp>
1998-06-13 Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
* lisp/gnus.el (gnus-version-number): Update to 6.3.4.
And fix typo 5.6.10 -> 5.6.11.
-
+
1998-06-03 Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
* lisp/gnus.el (gnus-version-number): Update to 6.3.3.
(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 <morioka@jaist.ac.jp>
* 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 <shuhei-k@jaist.ac.jp>
1998-04-25 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* README.semi (How to get? (via CVS)): Modify descriptions about
- TAG.
+ TAG.
1998-04-23 MORIOKA Tomohiko <morioka@jaist.ac.jp>
1998-04-23 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* 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 <morioka@jaist.ac.jp>
(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 <g740685@komaba.ecc.u-tokyo.ac.jp>
* 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 <g740685@komaba.ecc.u-tokyo.ac.jp>
1998-04-19 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* lisp/gnus-art.el (gnus-following-method): New function; set up
- for 'mime-view-following-method-alist.
+ for 'mime-view-following-method-alist.
1998-04-18 MORIOKA Tomohiko <morioka@jaist.ac.jp>
`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.
1998-03-14 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* lisp/gnus-art.el: Add setting for
- `mime-raw-buffer-coding-system-alist'.
+ `mime-raw-buffer-coding-system-alist'.
1998-03-13 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* lisp/gnus-art.el: Rename `mime-view-quitting-method-for-gnus' ->
- `mime-preview-quitting-method-for-gnus'.
+ `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 <shuhei-k@jaist.ac.jp>
* lisp/gnus.el (gnus-bdf-image-file): New variable.
(gnus-mule-group-startup-message): Display bitmap image using
bitmap.el running with Emacs 20.
-
+
* lisp/gnus-agent.el (gnus-agent-fetch-headers): Fix problem when
Xref field is not exist.
1998-02-20 Christophe Broult <christophe.broult@info.unicaen.fr>
* README.semi (How to get?): The command `update' must come before
- `-r semi-gnus'. (cf. [tm-en:1559])
+ `-r semi-gnus'. (cf. [tm-en:1559])
1998-02-17 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* 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 <morioka@jaist.ac.jp>
* lisp/gnus-sum.el: Check SEMI-0.118.2 (Otomaru) or later.
(gnus-structured-field-decoder): Use
- `eword-decode-and-unfold-structured-field'.
+ `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 <morioka@jaist.ac.jp>
* lisp/gnus-art.el (gnus-article-decode-rfc1522): Decode header by
- localized code.
+ localized code.
1998-02-16 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* lisp/nnmail.el, lisp/nnmh.el: Use original.
* lisp/gnus.el, lisp/gnus-draft.el, lisp/gnus-sum.el,
- lisp/message.el, lisp/gnus-art.el: Sync up with qgnus-0.25.
+ lisp/message.el, lisp/gnus-art.el: Sync up with qgnus-0.25.
1998-02-11 Shuhei Kobayashi <shuhei-k@jaist.ac.jp>
* texi/message.texi, texi/gnus.texi, texi/ChangeLog,
- lisp/message.el, lisp/gnus.el, lisp/gnus-uu.el,
- lisp/gnus-topic.el, lisp/gnus-sum.el, lisp/gnus-start.el,
- lisp/gnus-score.el, lisp/gnus-group.el, lisp/gnus-art.el,
- lisp/gnus-agent.el, lisp/ChangeLog: Importing qgnus-0.24
+ lisp/message.el, lisp/gnus.el, lisp/gnus-uu.el,
+ lisp/gnus-topic.el, lisp/gnus-sum.el, lisp/gnus-start.el,
+ lisp/gnus-score.el, lisp/gnus-group.el, lisp/gnus-art.el,
+ lisp/gnus-agent.el, lisp/ChangeLog: Importing qgnus-0.24
1998-02-10 MORIOKA Tomohiko <morioka@jaist.ac.jp>
1998-01-17 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* 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 <morioka@jaist.ac.jp>
1998-01-12 MORIOKA Tomohiko <morioka@jaist.ac.jp>
* lisp/smtp.el (smtp-deduce-address-list): Don't use
- `smtp-recipient-address-list' as global variable.
+ `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 <morioka@jaist.ac.jp>
* lisp/message.el (message-send-mail-with-smtp): Don't generate
- temporary buffer for message; don't generate and kill
- `smtp-address-buffer' for `smtp-deduce-address-list'.
+ 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 <morioka@jaist.ac.jp>
* 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.
info:
cd texi && $(MAKE) EMACS=$(EMACS) all
+info-ja:
+ cd texi && $(MAKE) EMACS=$(EMACS) MAKEINFO=no ja
+
clean:
rm -f */*.orig */*.rej *.orig *.rej
-This package contains Semi-gnus 6.9.
+This package contains Semi-gnus.
What is Semi-gnus?
==================
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
ichikawa ichikawa branch
- pgnus-ichikawa ichikawa branch. Based on pGnus
-
akr akr branch
shuhei-k shuhei-k branch
Mail-Followup-To/Mail-Reply-To, gnus-cache fix.
-For more detailed information, please read README.branch.
-
How to get? (via ftp)
=====================
semi-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.
-;;; gnus-agent.el --- unplugged support for Gnus
+;;; gnus-agent.el --- unplugged support for Semi-gnus
;; Copyright (C) 1997,98 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; 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))
(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)
(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
-;;; gnus-art.el --- article mode commands for Gnus
+;;; gnus-art.el --- article mode commands for Semi-gnus
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: news
+;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Keywords: mail, news, MIME
;; This file is part of GNU Emacs.
(require 'gnus-spec)
(require 'gnus-int)
(require 'browse-url)
+(require 'alist)
+(require 'mime-view)
(defgroup gnus-article nil
"Article display."
:group 'gnus-article-hiding)
(defcustom gnus-visible-headers
- "From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^Followup-To:\\|^Reply-To:\\|^Organization:\\|^Summary:\\|^Keywords:\\|^To:\\|^Cc:\\|^Posted-To:\\|^Mail-Copies-To:\\|^Apparently-To:\\|^Gnus-Warning:\\|^Resent-From:\\|X-Sent:"
+ "From:\\|^Newsgroups:\\|^Subject:\\|^Date:\\|^\\(Mail-\\)?Followup-To:\\|^\\(Mail-\\)?Reply-To:\\|^Mail-Copies-To:\\|^Organization:\\|^Summary:\\|^Keywords:\\|^To:\\|^Cc:\\|^Posted-To:\\|^Apparently-To:\\|^Gnus-Warning:\\|^Resent-From:\\|X-Sent:"
"*All headers that do not match this regexp will be hidden.
This variable can also be a list of regexp of headers to remain visible.
If this variable is non-nil, `gnus-ignored-headers' will be ignored."
(sexp :value nil))))
(defcustom gnus-strict-mime t
- "*If nil, MIME-decode even if there is no Mime-Version header."
+ "*If nil, MIME-decode even if there is no MIME-Version header."
:group 'gnus-article-mime
:type 'boolean)
-(defcustom gnus-show-mime-method 'metamail-buffer
- "Function to process a MIME message.
+(defcustom gnus-article-display-method-for-mime
+ 'gnus-article-display-mime-message
+ "Function to display a MIME message.
The function is called from the article buffer."
:group 'gnus-article-mime
:type 'function)
-(defcustom gnus-decode-encoded-word-method 'gnus-article-de-quoted-unreadable
- "*Function to decode MIME encoded words.
+(defcustom gnus-article-display-method-for-encoded-word
+ 'gnus-article-display-message-with-encoded-word
+ "*Function to display a message with MIME encoded-words.
+The function is called from the article buffer."
+ :group 'gnus-article-mime
+ :type 'function)
+
+(defcustom gnus-article-display-method-for-traditional
+ 'gnus-article-display-traditional-message
+ "*Function to display a traditional message.
The function is called from the article buffer."
:group 'gnus-article-mime
:type 'function)
from reply-to
(ignore-errors
(equal
- (nth 1 (mail-extract-address-components from))
- (nth 1 (mail-extract-address-components reply-to)))))
+ (nth 1 (funcall gnus-extract-address-components from))
+ (nth 1 (funcall gnus-extract-address-components reply-to)))))
(gnus-article-hide-header "reply-to"))))
((eq elem 'date)
(let ((date (message-fetch-field "date")))
(process-send-region "article-x-face" beg end)
(process-send-eof "article-x-face"))))))))))
-(defun gnus-hack-decode-rfc1522 ()
- "Emergency hack function for avoiding problems when decoding."
- (let ((buffer-read-only nil))
- (goto-char (point-min))
- ;; Remove encoded TABs.
- (while (search-forward "=09" nil t)
- (replace-match " " t t))
- ;; Remove encoded newlines.
- (goto-char (point-min))
- (while (search-forward "=10" nil t)
- (replace-match " " t t))))
-
-(defalias 'gnus-decode-rfc1522 'article-decode-rfc1522)
-(defalias 'gnus-article-decode-rfc1522 'article-decode-rfc1522)
-(defun article-decode-rfc1522 ()
- "Hack to remove QP encoding from headers."
- (let ((case-fold-search t)
- (inhibit-point-motion-hooks t)
- (buffer-read-only nil)
- string)
- (save-restriction
- (narrow-to-region
- (goto-char (point-min))
- (or (search-forward "\n\n" nil t) (point-max)))
- (goto-char (point-min))
- (while (re-search-forward
- "=\\?iso-8859-1\\?q\\?\\([^?\t\n]*\\)\\?=" nil t)
- (setq string (match-string 1))
- (save-restriction
- (narrow-to-region (match-beginning 0) (match-end 0))
- (delete-region (point-min) (point-max))
- (insert string)
- (article-mime-decode-quoted-printable
- (goto-char (point-min)) (point-max))
- (subst-char-in-region (point-min) (point-max) ?_ ? )
- (goto-char (point-max)))
- (goto-char (point-min))))))
-
-(defun article-de-quoted-unreadable (&optional force)
- "Do a naive translation of a quoted-printable-encoded article.
-This is in no way, shape or form meant as a replacement for real MIME
-processing, but is simply a stop-gap measure until MIME support is
-written.
-If FORCE, decode the article whether it is marked as quoted-printable
-or not."
- (interactive (list 'force))
- (save-excursion
- (let ((case-fold-search t)
- (buffer-read-only nil)
- (type (gnus-fetch-field "content-transfer-encoding")))
- (gnus-article-decode-rfc1522)
- (when (or force
- (and type (string-match "quoted-printable" (downcase type))))
- (goto-char (point-min))
- (search-forward "\n\n" nil 'move)
- (article-mime-decode-quoted-printable (point) (point-max))))))
-
-(defun article-mime-decode-quoted-printable-buffer ()
- "Decode Quoted-Printable in the current buffer."
- (article-mime-decode-quoted-printable (point-min) (point-max)))
-
-(defun article-mime-decode-quoted-printable (from to)
- "Decode Quoted-Printable in the region between FROM and TO."
- (interactive "r")
- (goto-char from)
- (while (search-forward "=" to t)
- (cond ((eq (following-char) ?\n)
- (delete-char -1)
- (delete-char 1))
- ((looking-at "[0-9A-F][0-9A-F]")
- (subst-char-in-region
- (1- (point)) (point) ?=
- (hexl-hex-string-to-integer
- (buffer-substring (point) (+ 2 (point)))))
- (delete-char 2))
- ((looking-at "=")
- (delete-char 1))
- ((gnus-message 3 "Malformed MIME quoted-printable message")))))
+(defun gnus-article-decode-rfc1522 ()
+ "Decode MIME encoded-words in header fields."
+ (let (buffer-read-only)
+ (let ((charset (save-excursion
+ (set-buffer gnus-summary-buffer)
+ default-mime-charset)))
+ (mime-decode-header-in-buffer charset)
+ )))
(defun article-hide-pgp (&optional arg)
"Toggle hiding of any PGP headers and signatures in the current article.
(while (re-search-forward "^[ \t]*\n" nil t)
(replace-match "" t t)))))
-(defvar mime::preview/content-list)
-(defvar mime::preview-content-info/point-min)
(defun gnus-article-narrow-to-signature ()
"Narrow to the signature; return t if a signature is found, else nil."
(widen)
(let ((inhibit-point-motion-hooks t))
- (when (and (boundp 'mime::preview/content-list)
- mime::preview/content-list)
- ;; We have a MIMEish article, so we use the MIME data to narrow.
- (let ((pcinfo (car (last mime::preview/content-list))))
- (ignore-errors
- (narrow-to-region
- (funcall (intern "mime::preview-content-info/point-min") pcinfo)
- (point-max)))))
-
(when (gnus-article-search-signature)
(forward-line 1)
;; Check whether we have some limits to what we consider
(article-fill . gnus-article-word-wrap)
article-remove-cr
article-display-x-face
- article-de-quoted-unreadable
- article-mime-decode-quoted-printable
article-hide-pgp
article-hide-pem
article-hide-signature
["Hide citation" gnus-article-hide-citation t]
["Treat overstrike" gnus-article-treat-overstrike t]
["Remove carriage return" gnus-article-remove-cr t]
- ["Remove quoted-unreadable" gnus-article-de-quoted-unreadable t]))
+ ))
;; Note "Commands" menu is defined in gnus-sum.el for consistency
(forward-line line)
(point)))))
+;;; @@ article filters
+;;;
+
+(defun gnus-article-display-mime-message ()
+ "Article display method for MIME message."
+ ;; called from `gnus-original-article-buffer'.
+ (let ((charset (with-current-buffer gnus-summary-buffer
+ default-mime-charset)))
+ (make-local-variable 'default-mime-charset)
+ (setq default-mime-charset charset)
+ (mime-display-message mime-message-structure
+ gnus-article-buffer nil gnus-article-mode-map)
+ (make-local-variable 'default-mime-charset)
+ (setq default-mime-charset charset)
+ )
+ ;; `mime-display-message' changes current buffer to `gnus-article-buffer'.
+ (make-local-variable 'mime-button-mother-dispatcher)
+ (setq mime-button-mother-dispatcher
+ (function gnus-article-push-button))
+ (run-hooks 'gnus-mime-article-prepare-hook))
+
+(defun gnus-article-display-traditional-message ()
+ "Article display method for traditional message."
+ (set-buffer gnus-article-buffer)
+ (let (buffer-read-only)
+ (erase-buffer)
+ (insert-buffer-substring gnus-original-article-buffer)))
+
+(defun gnus-article-display-message-with-encoded-word ()
+ "Article display method for message with encoded-words."
+ (let ((charset (save-excursion
+ (set-buffer gnus-summary-buffer)
+ default-mime-charset)))
+ (make-local-variable 'default-mime-charset)
+ (setq default-mime-charset charset)
+ (gnus-article-display-traditional-message)
+ (make-local-variable 'default-mime-charset)
+ (setq default-mime-charset charset)
+ (let (buffer-read-only)
+ (mime-decode-header-in-buffer charset)
+ (goto-char (point-min))
+ (if (search-forward "\n\n" nil t)
+ (decode-mime-charset-region (match-end 0) (point-max) charset)))
+ (mime-maybe-hide-echo-buffer))
+ (gnus-run-hooks 'gnus-mime-article-prepare-hook))
+
(defun gnus-article-prepare (article &optional all-headers header)
"Prepare ARTICLE in article mode buffer.
ARTICLE should either be an article number or a Message-ID.
result)
(save-excursion
(gnus-article-setup-buffer)
- (set-buffer gnus-article-buffer)
+ (set-buffer gnus-original-article-buffer)
;; Deactivate active regions.
(when (and (boundp 'transient-mark-mode)
transient-mark-mode)
(stringp article))
;; Hooks for getting information from the article.
;; This hook must be called before being narrowed.
- (let (buffer-read-only)
+ (let ((method
+ (if gnus-show-mime
+ (progn
+ (setq mime-message-structure gnus-current-headers)
+ (if (or (not gnus-strict-mime)
+ (mime-fetch-field "MIME-Version"))
+ gnus-article-display-method-for-mime
+ gnus-article-display-method-for-encoded-word))
+ gnus-article-display-method-for-traditional)))
(gnus-run-hooks 'gnus-tmp-internal-hook)
(gnus-run-hooks 'gnus-article-prepare-hook)
- ;; Decode MIME message.
- (when gnus-show-mime
- (if (or (not gnus-strict-mime)
- (gnus-fetch-field "Mime-Version"))
- (let ((coding-system-for-write 'binary)
- (coding-system-for-read 'binary))
- (funcall gnus-show-mime-method))
- (funcall gnus-decode-encoded-word-method)))
+ ;; Display message.
+ (funcall method)
+ ;; Associate this article with the current summary buffer.
+ (setq gnus-article-current-summary summary-buffer)
;; Perform the article display hooks.
(gnus-run-hooks 'gnus-article-display-hook))
;; Do page break.
(assq article gnus-newsgroup-reads)))
gnus-canceled-mark))
nil)
- ;; We first check `gnus-original-article-buffer'.
- ((and (get-buffer gnus-original-article-buffer)
- (numberp article)
- (save-excursion
- (set-buffer gnus-original-article-buffer)
- (and (equal (car gnus-original-article) group)
- (eq (cdr gnus-original-article) article))))
- (insert-buffer-substring gnus-original-article-buffer)
- 'article)
;; Check the backlog.
((and gnus-keep-backlog
(gnus-backlog-request-article group article (current-buffer)))
(setq to (gnus-url-unhex-string url)))
(setq args (cons (list "to" to) args)
subject (cdr-safe (assoc "subject" args)))
- (message-mail)
- (while args
- (setq func (intern-soft (concat "message-goto-" (downcase (caar args)))))
- (if (fboundp func)
- (funcall func)
- (message-position-on-field (caar args)))
- (insert (mapconcat 'identity (cdar args) ", "))
- (setq args (cdr args)))
- (if subject
- (message-goto-body)
- (message-goto-subject))))
+ (gnus-setup-message 'reply
+ (message-mail)
+ (while args
+ (setq func (intern-soft (concat "message-goto-" (downcase (caar args)))))
+ (if (fboundp func)
+ (funcall func)
+ (message-position-on-field (caar args)))
+ (insert (mapconcat 'identity (cdar args) ", "))
+ (setq args (cdr args)))
+ (if subject
+ (message-goto-body)
+ (message-goto-subject)))))
(defun gnus-button-mailto (address)
;; Mail to ADDRESS.
(set-buffer (gnus-copy-article-buffer))
- (message-reply address))
+ (gnus-setup-message 'reply
+ (message-reply address)))
(defun gnus-button-reply (address)
;; Reply to ADDRESS.
- (message-reply address))
+ (gnus-setup-message 'reply
+ (message-reply address)))
(defun gnus-button-url (address)
"Browse ADDRESS."
(gnus-article-prev-page)
(select-window win)))
+
+;;; @ for mime-view
+;;;
+
+(defun gnus-article-header-presentation-method (entity situation)
+ (mime-insert-decoded-header entity)
+ )
+
+(set-alist 'mime-header-presentation-method-alist
+ 'gnus-original-article-mode
+ #'gnus-article-header-presentation-method)
+
+(defun gnus-mime-preview-quitting-method ()
+ (if gnus-show-mime
+ (gnus-article-show-summary)
+ (mime-preview-kill-buffer)
+ (delete-other-windows)
+ (gnus-article-show-summary)
+ (gnus-summary-select-article nil t)
+ ))
+
+(set-alist 'mime-preview-quitting-method-alist
+ 'gnus-original-article-mode #'gnus-mime-preview-quitting-method)
+
+(defun gnus-following-method (buf)
+ (set-buffer buf)
+ (message-followup)
+ (message-yank-original)
+ (kill-buffer buf)
+ (goto-char (point-min))
+ )
+
+(set-alist 'mime-preview-following-method-alist
+ 'gnus-original-article-mode #'gnus-following-method)
+
+
+;;; @ end
+;;;
+
(gnus-ems-redefine)
(provide 'gnus-art)
;; [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) "")
(when (file-exists-p file)
(erase-buffer)
(gnus-kill-all-overlays)
- (insert-file-contents file)
+ (nnheader-insert-file-contents file)
t)))
(defun gnus-cache-possibly-alter-active (group active)
;; unsuccessful), so we use the cached headers exclusively.
(set-buffer nntp-server-buffer)
(erase-buffer)
- (insert-file-contents cache-file)
+ (nnheader-insert-file-contents cache-file)
'nov)
((eq type 'nov)
;; We have both cached and uncached NOV headers, so we
(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)))
(save-excursion
(set-buffer cache-buf)
(erase-buffer)
- (insert-file-contents (gnus-cache-file-name group (car cached)))
+ (nnheader-insert-file-contents (gnus-cache-file-name group (car cached)))
(goto-char (point-min))
(insert "220 ")
(princ (car cached) (current-buffer))
;; We simply read the active file.
(save-excursion
(gnus-set-work-buffer)
- (insert-file-contents gnus-cache-active-file)
+ (nnheader-insert-file-contents gnus-cache-active-file)
(gnus-active-to-gnus-format
nil (setq gnus-cache-active-hashtb
(gnus-make-hashtable
-;;; gnus-draft.el --- draft message support for Gnus
+;;; gnus-draft.el --- draft message support for Semi-gnus
;; Copyright (C) 1997,98 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: news
+;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
+;; Keywords: mail, news, MIME, offline
;; This file is part of GNU Emacs.
(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
(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
(message-remove-header gnus-agent-meta-information-header)))
;; Then we send it. If we have no meta-information, we just send
;; it and let Message figure out how.
- (when (and (or (null method)
- (gnus-server-opened method)
- (gnus-open-server method))
- (if type
- (let ((message-this-is-news (eq type 'news))
- (message-this-is-mail (eq type 'mail))
- (gnus-post-method method)
- (message-post-method method))
- (message-send-and-exit))
- (message-send-and-exit)))
+ (when (let ((mail-header-separator ""))
+ (cond ((eq type 'news)
+ (mime-edit-maybe-split-and-send
+ (function
+ (lambda ()
+ (interactive)
+ (funcall message-send-news-function method)
+ )))
+ (funcall message-send-news-function method)
+ )
+ ((eq type 'mail)
+ (mime-edit-maybe-split-and-send
+ (function
+ (lambda ()
+ (interactive)
+ (funcall message-send-mail-function)
+ )))
+ (funcall message-send-mail-function)
+ t)))
(let ((gnus-verbose-backends nil))
(gnus-request-expire-articles
(list article) (or group "nndraft:queue") t)))))
;;; Utility functions
+(defcustom gnus-draft-decoding-function
+ #'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)
(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."
-;;; gnus-ems.el --- functions for making Gnus work under different Emacsen
+;;; gnus-ems.el --- functions for making Semi-gnus work under different Emacsen
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Tatsuya Ichikawa <t-ichi@niagara.shiojiri.ne.jp>
;; Keywords: news
;; This file is part of GNU Emacs.
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)
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)
;; `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 ()
-;;; gnus-msg.el --- mail and post interface for Gnus
+;;; gnus-msg.el --- mail and post interface for Semi-gnus
;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
;; Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: news
+;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
+;; Keywords: mail, news, MIME
;; This file is part of GNU Emacs.
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
(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
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)
"\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
(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
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))
\f
;; 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" <pp@gnu.ai.mit.edu>.
-(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))
\f
;;;
(interactive "P")
(gnus-setup-message 'forward
(gnus-summary-select-article)
- (set-buffer gnus-original-article-buffer)
+ (let ((charset default-mime-charset))
+ (set-buffer gnus-original-article-buffer)
+ (make-local-variable 'default-mime-charset)
+ (setq default-mime-charset charset)
+ )
(let ((message-included-forward-headers
(if full-headers "" message-included-forward-headers)))
(message-forward post))))
+(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")
(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.
(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))
(save-restriction
(message-narrow-to-headers)
(let ((gcc (or gcc (mail-fetch-field "gcc" nil t)))
- (cur (current-buffer))
+ (coding-system-for-write 'raw-text)
groups group method)
(when gcc
(message-remove-header "gcc")
(gnus-request-create-group group method))
(save-excursion
(nnheader-set-temp-buffer " *acc*")
- (insert-buffer-substring cur)
+ (insert-buffer-substring message-encoding-buffer)
+ (gnus-run-hooks 'gnus-before-do-gcc-hook)
(goto-char (point-min))
(when (re-search-forward
(concat "^" (regexp-quote mail-header-separator) "$")
(insert (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)
(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.
(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..."
;; 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
(setq elem '("*" ?s))))
(setq elem-type (cadr elem))
;; Insert the new format elements.
- (when pad-width
- (insert (number-to-string pad-width)))
+ (and pad-width (not xemacs-mule-p)
+ (insert (number-to-string pad-width)))
;; Create the form to be evaled.
- (if (or max-width cut-width ignore-value)
+ (if (or max-width cut-width ignore-value
+ (and pad-width xemacs-mule-p))
(progn
(insert ?s)
(let ((el (car elem)))
(setq el (gnus-tilde-cut-form el cut-width)))
(when max-width
(setq el (gnus-tilde-max-form el max-width)))
+ (and pad-width xemacs-mule-p
+ (setq el (gnus-tilde-pad-form el pad-width)))
(push el flist)))
(insert elem-type)
(push (car elem) flist))))
:group 'gnus-newsrc
:type 'boolean)
-(defvar gnus-startup-file-coding-system 'binary
- "*Coding system for startup file.")
-
;;; Internal variables
(defvar gnus-newsrc-file-version nil)
(file-exists-p (concat file ".el"))
(file-exists-p (concat file ".elc")))
(condition-case var
- (let ((coding-system-for-read
- gnus-startup-file-coding-system))
- (load file nil t))
+ (load file nil t)
(error
(error "Error in %s: %s" file var)))))))))
(gnus-message 5 "Reading %s..." ding-file)
(let (gnus-newsrc-assoc)
(condition-case nil
- (let ((coding-system-for-read gnus-startup-file-coding-system))
- (load ding-file t t t))
+ (load ding-file t t t)
(error
(ding)
(unless (gnus-yes-or-no-p
(gnus-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))
-;;; gnus-sum.el --- summary mode commands for Gnus
+;;; gnus-sum.el --- summary mode commands for Semi-gnus
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: news
+;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Keywords: mail, news, MIME
;; This file is part of GNU Emacs.
(require 'gnus-range)
(require 'gnus-int)
(require 'gnus-undo)
-(require 'gnus-util)
+(require 'mime-view)
+
(autoload 'gnus-summary-limit-include-cached "gnus-cache" nil t)
+(autoload 'gnus-set-summary-default-charset "gnus-i18n" nil t)
(defcustom gnus-kill-summary-on-exit t
"*If non-nil, kill the summary buffer when you exit from it.
:group 'gnus-article-various
:type 'boolean)
-(defcustom gnus-show-mime nil
+(defcustom gnus-show-mime t
"*If non-nil, do mime processing of articles.
The articles will simply be fed to the function given by
`gnus-show-mime-method'."
:group 'gnus-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)
(?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)
"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
"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
["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]
["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]
(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)))))
(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) ; subject
+ (gnus-nov-field) ; from
(gnus-nov-field) ; date
(or (gnus-nov-field)
(nnheader-generate-fake-message-id)) ; id
(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 (mime-read-field 'From h1)))
+ (or (std11-full-name-string addr)
+ (std11-address-string addr)
+ ""))
+ (let ((addr (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."
(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.
;; doesn't always go hand in hand.
(setq
header
- (vector
+ (make-full-mail-header
;; Number.
(prog1
(read cur)
(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)
(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
;; 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)
(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))
(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)
(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)
(> (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
(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.
"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)
(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
(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)
-;;; gnus-util.el --- utility functions for Gnus
+;;; gnus-util.el --- utility functions for Semi-gnus
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: news
+;; Keywords: mail, news, MIME
;; This file is part of GNU Emacs.
(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 <dairiki@u.washington.edu>. A safe way
(let ((file-buffer (create-file-buffer filename)))
(save-excursion
(set-buffer file-buffer)
- (let ((require-final-newline nil))
+ (let ((require-final-newline nil)
+ (coding-system-for-write 'binary))
(gnus-write-buffer filename)))
(kill-buffer file-buffer))
(error "Output file does not exist")))
;; Decide whether to append to a file or to an Emacs buffer.
(let ((outbuf (get-file-buffer filename)))
(if (not outbuf)
- (let ((buffer-read-only nil))
+ (let ((buffer-read-only nil)
+ (coding-system-for-write 'binary))
(save-excursion
(goto-char (point-max))
(forward-char -2)
'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."
(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.
: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.0"
+ "Version number for this version of gnus.")
+
+(defconst gnus-version
+ (format "%s %s (based on Gnus 5.6.45; for SEMI 1.12, 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.
: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
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
"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")
(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)
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
(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))
;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: mail, news
+;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Shuhei KOBAYASHI <shuhei-k@jaist.ac.jp>
+;; Keiichi Suzuki <kei-suzu@mail.wbs.ne.jp>
+;; Keywords: mail, news, MIME
;; This file is part of GNU Emacs.
;;; Code:
-(eval-when-compile (require 'cl))
+(eval-when-compile
+ (require 'cl)
+ (require 'smtp)
+ )
(require 'mailheader)
(require 'nnheader)
(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))
: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
(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.
(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
(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))
:group 'message-headers
:type 'regexp)
-(defcustom message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-Complaints-To:\\|Return-Path:\\|^Supersedes:\\|^X-Trace:\\|^X-Complaints-To:"
+(defcustom message-ignored-supersedes-headers "^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|^Received:\\|^X-From-Line:\\|^X-Trace:\\|^X-Complaints-To:\\|Return-Path:\\|^Supersedes:"
"*Header lines matching this regexp will be deleted before posting.
It's best to delete old Path and Date headers before posting to avoid
any confusion."
:group 'message-headers)
(defcustom message-forward-start-separator
- "------- Start of forwarded message -------\n"
+ (concat (mime-make-tag "message" "rfc822") "\n")
"*Delimiter inserted before forwarded messages."
:group 'message-forwarding
:type 'string)
(defcustom message-forward-end-separator
- "------- End of forwarded message -------\n"
+ (concat (mime-make-tag "text" "plain") "\n")
"*Delimiter inserted after forwarded messages."
:group 'message-forwarding
:type 'string)
: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)
: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)
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'."
: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
: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)
(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
"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."
: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.")
(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
(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"))
(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)
(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.
(let ((modified (buffer-modified-p)))
(when (and message-reply-buffer
message-cite-function)
+ (gnus-copy-article-buffer)
+ (setq message-reply-buffer gnus-article-copy)
(delete-windows-on message-reply-buffer t)
(insert-buffer message-reply-buffer)
(funcall message-cite-function)
;;; 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
(when (eq buf (current-buffer))
(message-bury buf)))
(message-do-actions actions)
+ (message-delete-frame frame org-frame)
t)))
(defun message-dont-send ()
(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."
(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)
(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."
(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.
(save-excursion
(set-buffer tembuf)
(erase-buffer)
- ;; Avoid copying text props.
- (insert (format
- "%s" (save-excursion
- (set-buffer mailbuf)
- (buffer-string))))
+ (insert-buffer message-encoding-buffer)
;; Remove some headers.
(save-restriction
(message-narrow-to-headers)
(or (message-fetch-field "cc")
(message-fetch-field "to")))
(message-insert-courtesy-copy))
+ (mime-edit-maybe-split-and-send
+ (function
+ (lambda ()
+ (interactive)
+ (funcall message-send-mail-function)
+ )))
(funcall message-send-mail-function))
(kill-buffer tembuf))
- (set-buffer mailbuf)
+ (set-buffer message-edit-buffer)
(push 'mail message-sent-message-via)))
(defun message-send-mail-with-sendmail ()
;; 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)
(set-buffer tembuf)
(buffer-disable-undo (current-buffer))
(erase-buffer)
- ;; Avoid copying text props.
- (insert (format
- "%s" (save-excursion
- (set-buffer messbuf)
- (buffer-string))))
+ (insert-buffer message-encoding-buffer)
;; Remove some headers.
(save-restriction
(message-narrow-to-headers)
;; require one newline at the end.
(or (= (preceding-char) ?\n)
(insert ?\n))
- (let ((case-fold-search t))
- ;; Remove the delimiter.
- (goto-char (point-min))
- (re-search-forward
- (concat "^" (regexp-quote mail-header-separator) "\n"))
- (replace-match "\n")
- (backward-char 1))
- (run-hooks 'message-send-news-hook)
- ;;(require (car method))
- ;;(funcall (intern (format "%s-open-server" (car method)))
- ;;(cadr method) (cddr method))
- ;;(setq result
- ;; (funcall (intern (format "%s-request-post" (car method)))
- ;; (cadr method)))
- (gnus-open-server method)
- (setq result (gnus-request-post method)))
+ (mime-edit-maybe-split-and-send
+ (function
+ (lambda ()
+ (interactive)
+ (save-restriction
+ (std11-narrow-to-header mail-header-separator)
+ (goto-char (point-min))
+ (when (re-search-forward "^Message-Id:" nil t)
+ (delete-region (match-end 0)(std11-field-end))
+ (insert (concat " " (message-make-message-id)))
+ ))
+ (funcall message-send-news-function method)
+ )))
+ (setq result (funcall message-send-news-function method)))
(kill-buffer tembuf))
- (set-buffer messbuf)
+ (set-buffer message-edit-buffer)
(if result
(push 'news message-sent-message-via)
(message "Couldn't send message via news: %s"
(nnheader-get-report (car method)))
nil))))
+;; 1997-09-29 by MORIOKA Tomohiko
+(defun message-send-news-with-gnus (method)
+ (let ((case-fold-search t))
+ ;; Remove the delimiter.
+ (goto-char (point-min))
+ (re-search-forward
+ (concat "^" (regexp-quote mail-header-separator) "\n"))
+ (replace-match "\n")
+ (backward-char 1)
+ (run-hooks 'message-send-news-hook)
+ ;;(require (car method))
+ ;;(funcall (intern (format "%s-open-server" (car method)))
+ ;;(cadr method) (cddr method))
+ ;;(setq result
+ ;; (funcall (intern (format "%s-request-post" (car method)))
+ ;; (cadr method)))
+ (gnus-open-server method)
+ (gnus-request-post method)
+ ))
+
;;;
;;; Header generation & syntax checking.
;;;
(message-narrow-to-headers)
(message-check-news-header-syntax)))
;; Check the body.
- (message-check-news-body-syntax)))))
+ (save-excursion
+ (set-buffer message-edit-buffer)
+ (message-check-news-body-syntax))))))
(defun message-check-news-header-syntax ()
(and
(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)
(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."
(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)
(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)
(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
(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."
(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)
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
message-id (message-fetch-field "message-id" t)
distribution (message-fetch-field "distribution")))
;; Make sure that this article was written by the user.
- (unless (or (and sender
- (string-equal
- (downcase sender)
- (downcase (message-make-sender))))
- (string-equal
- (downcase (cadr (mail-extract-address-components from)))
- (downcase (cadr (mail-extract-address-components
- (message-make-from))))))
+ (unless (or (and sender
+ (string-equal
+ (downcase sender)
+ (downcase (message-make-sender))))
+ (string-equal
+ (downcase (cadr (mail-extract-address-components from)))
+ (downcase (cadr (mail-extract-address-components
+ (message-make-from))))))
(error "This article is not yours"))
;; Make control message.
(setq buf (set-buffer (get-buffer-create " *message cancel*")))
message-cancel-message)
(message "Canceling your article...")
(if (let ((message-syntax-checks
- 'dont-check-for-anything-just-trust-me))
- (funcall message-send-news-function))
+ 'dont-check-for-anything-just-trust-me)
+ (message-encoding-buffer (current-buffer))
+ (message-edit-buffer (current-buffer)))
+ (message-send-news))
(message "Canceling your article...done"))
(kill-buffer buf)))))
(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))
(set-buffer (get-buffer-create " *message resend*"))
(buffer-disable-undo (current-buffer))
(erase-buffer)
- (message-setup `((To . ,address)))
+ ;; avoid to turn-on-mime-edit
+ (let (message-setup-hook)
+ (message-setup `((To . ,address)))
+ )
;; Insert our usual headers.
(message-generate-headers '(From Date To))
(message-narrow-to-headers)
(when (looking-at "From ")
(replace-match "X-From-Line: "))
;; Send it.
- (message-send-mail)
+ (let ((message-encoding-buffer (current-buffer))
+ (message-edit-buffer (current-buffer)))
+ (message-send-mail))
(kill-buffer (current-buffer)))
(message "Resending message to %s...done" address)))
(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"
(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)
(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
--- /dev/null
+;;; mmgnus.el --- MIME entity implementation for gnus-article
+
+;; Copyright (C) 1998 Free Software Foundation, Inc.
+
+;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Keywords: MIME, multimedia, mail, news
+
+;; This file is part of Chao-gnus.
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2, or (at
+;; your option) any later version.
+
+;; This program is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING. If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Code:
+
+(require 'mmbuffer)
+
+(mm-define-backend gnus (generic))
+
+(mm-define-method entity-buffer ((entity gnus))
+ ;; (if (with-current-buffer gnus-summary-buffer
+ ;; (eq gnus-current-article (mail-header-number entity)))
+ ;; ...)
+ (unless (mime-entity-header-start-internal entity)
+ (set-buffer gnus-original-article-buffer)
+ (mime-entity-set-header-start-internal entity (point-min))
+ (mime-entity-set-body-end-internal entity (point-max))
+ (goto-char (point-min))
+ (if (re-search-forward "^$" nil t)
+ (progn
+ (mime-entity-set-header-end-internal entity (match-end 0))
+ (mime-entity-set-body-start-internal
+ entity
+ (if (= (mime-entity-header-end-internal entity)
+ (mime-entity-body-end-internal entity))
+ (mime-entity-body-end-internal entity)
+ (1+ (mime-entity-header-end-internal entity))
+ ))
+ )
+ (mime-entity-set-header-end-internal entity (point-min))
+ (mime-entity-set-body-start-internal entity (point-min))
+ ))
+ gnus-original-article-buffer)
+
+
+;;; @ end
+;;;
+
+(provide 'mmgnus)
+
+;;; mmgnus.el ends here
-;;; nnheader.el --- header access macros for Gnus and its backends
+;;; nnheader.el --- header access macros for Semi-gnus and its backends
;; Copyright (C) 1987,88,89,90,93,94,95,96,97,98 Free Software Foundation, Inc.
;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
-;; Lars Magne Ingebrigtsen <larsi@gnus.org>
-;; Keywords: news
+;; Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Keywords: mail, news, MIME
;; This file is part of GNU Emacs.
(eval-when-compile (require 'cl))
(require 'mail-utils)
+(require 'mime)
(defvar nnheader-max-head-length 4096
"*Max length of the head of articles.")
(defmacro mail-header-number (header)
"Return article number in HEADER."
- `(aref ,header 0))
+ `(mime-entity-location-internal ,header))
(defmacro mail-header-set-number (header number)
"Set article number of HEADER to NUMBER."
- `(aset ,header 0 ,number))
+ `(mime-entity-set-location-internal ,header ,number))
-(defmacro mail-header-subject (header)
- "Return subject string in HEADER."
- `(aref ,header 1))
+(defalias 'mail-header-subject 'mime-entity-decoded-subject-internal)
+(defalias 'mail-header-set-subject 'mime-entity-set-decoded-subject-internal)
-(defmacro mail-header-set-subject (header subject)
- "Set article subject of HEADER to SUBJECT."
- `(aset ,header 1 ,subject))
+(defalias 'mail-header-from 'mime-entity-decoded-from-internal)
+(defalias 'mail-header-set-from 'mime-entity-set-decoded-from-internal)
-(defmacro mail-header-from (header)
- "Return author string in HEADER."
- `(aref ,header 2))
+(defalias 'mail-header-date 'mime-entity-date-internal)
+(defalias 'mail-header-set-date 'mime-entity-set-date-internal)
-(defmacro mail-header-set-from (header from)
- "Set article author of HEADER to FROM."
- `(aset ,header 2 ,from))
+(defalias 'mail-header-message-id 'mime-entity-message-id-internal)
+(defalias 'mail-header-id 'mime-entity-message-id-internal)
+(defalias 'mail-header-set-message-id 'mime-entity-set-message-id-internal)
+(defalias 'mail-header-set-id 'mime-entity-set-message-id-internal)
-(defmacro mail-header-date (header)
- "Return date in HEADER."
- `(aref ,header 3))
+(defalias 'mail-header-references 'mime-entity-references-internal)
+(defalias 'mail-header-set-references 'mime-entity-set-references-internal)
-(defmacro mail-header-set-date (header date)
- "Set article date of HEADER to DATE."
- `(aset ,header 3 ,date))
+(defalias 'mail-header-chars 'mime-entity-chars-internal)
+(defalias 'mail-header-set-chars 'mime-entity-set-chars-internal)
-(defalias 'mail-header-message-id 'mail-header-id)
-(defmacro mail-header-id (header)
- "Return Id in HEADER."
- `(aref ,header 4))
+(defalias 'mail-header-lines 'mime-entity-lines-internal)
+(defalias 'mail-header-set-lines 'mime-entity-set-lines-internal)
-(defalias 'mail-header-set-message-id 'mail-header-set-id)
-(defmacro mail-header-set-id (header id)
- "Set article Id of HEADER to ID."
- `(aset ,header 4 ,id))
+(defalias 'mail-header-xref 'mime-entity-xref-internal)
+(defalias 'mail-header-set-xref 'mime-entity-set-xref-internal)
-(defmacro mail-header-references (header)
- "Return references in HEADER."
- `(aref ,header 5))
+(defalias 'nnheader-decode-subject
+ (mime-find-field-decoder 'Subject 'nov))
+(defalias 'nnheader-decode-from
+ (mime-find-field-decoder 'From 'nov))
-(defmacro mail-header-set-references (header ref)
- "Set article references of HEADER to REF."
- `(aset ,header 5 ,ref))
-
-(defmacro mail-header-chars (header)
- "Return number of chars of article in HEADER."
- `(aref ,header 6))
-
-(defmacro mail-header-set-chars (header chars)
- "Set number of chars in article of HEADER to CHARS."
- `(aset ,header 6 ,chars))
-
-(defmacro mail-header-lines (header)
- "Return lines in HEADER."
- `(aref ,header 7))
-
-(defmacro mail-header-set-lines (header lines)
- "Set article lines of HEADER to LINES."
- `(aset ,header 7 ,lines))
-
-(defmacro mail-header-xref (header)
- "Return xref string in HEADER."
- `(aref ,header 8))
-
-(defmacro mail-header-set-xref (header xref)
- "Set article xref of HEADER to xref."
- `(aset ,header 8 ,xref))
+(defsubst make-full-mail-header (&optional number subject from date id
+ references chars lines xref)
+ "Create a new mail header structure initialized with the parameters given."
+ (make-mime-entity-internal
+ 'gnus number
+ nil
+ nil nil nil
+ (if subject
+ (nnheader-decode-subject subject)
+ )
+ (if from
+ (nnheader-decode-from from)
+ )
+ date id references
+ chars lines xref
+ (list (cons 'Subject subject)
+ (cons 'From from))
+ ))
+
+(defsubst make-full-mail-header-from-decoded-header
+ (&optional number subject from date id references chars lines xref)
+ "Create a new mail header structure initialized with the parameters given."
+ (make-mime-entity-internal
+ 'gnus number
+ nil
+ nil nil nil
+ subject
+ from
+ date id references
+ chars lines xref))
(defun make-mail-header (&optional init)
"Create a new mail header structure initialized with INIT."
- (make-vector 9 init))
-
-(defun make-full-mail-header (&optional number subject from date id
- references chars lines xref)
- "Create a new mail header structure initialized with the parameters given."
- (vector number subject from date id references chars lines xref))
+ (make-full-mail-header init init init init init
+ init init init init))
;; fake message-ids: generation and detection
;; about twice as fast, even though it looks messier. You
;; can't have everything, I guess. Speed and elegance
;; don't always go hand in hand.
- (vector
+ (make-full-mail-header
;; Number.
(if naked
(progn
(defun nnheader-parse-nov ()
(let ((eol (gnus-point-at-eol)))
- (vector
+ (make-full-mail-header
(nnheader-nov-read-integer) ; number
(nnheader-nov-field) ; subject
(nnheader-nov-field) ; from
(princ (mail-header-number header) (current-buffer))
(insert
"\t"
- (or (mail-header-subject header) "(none)") "\t"
- (or (mail-header-from header) "(nobody)") "\t"
+ (or (mime-fetch-field 'Subject header) "(none)") "\t"
+ (or (mime-fetch-field 'From header) "(nobody)") "\t"
(or (mail-header-date header) "") "\t"
(or (mail-header-id header)
(nnmail-message-id))
(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.
(when large
(nnheader-message 5 "nnmh: Receiving headers...done"))
- (nnheader-fold-continuation-lines)
+ ;; (nnheader-fold-continuation-lines)
'headers))))
(deffoo nnmh-open-server (server &optional defs)
;; Yasuo Okabe
;; Author: Tatsuya Ichikawa <t-ichi@po.shiojiri.ne.jp>
;; Yasuo OKABE <okabe@kuis.kyoto-u.ac.jp>
-;; Version: 1.16
+;; Version: 1.11
;; Keywords: mail , gnus , pop3
;;
;; SPECIAL THANKS
(` (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
: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))
(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)))
(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
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
;;
(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)
(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
(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 ."
(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)))))
;;
;; pop3-fma.el ends here.
-
;; Author: Richard L. Pieri <ratinox@peorth.gweep.net>
;; Keywords: mail, pop3
-;; Version: 1.3m
+;; Version: 1.3m+
;; This file is part of GNU Emacs.
(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.")
"Timestamp returned when initially connected to the POP server.
Used for APOP authentication.")
+(defvar pop3-movemail-file-coding-system 'binary
+ "Crashbox made by pop3-movemail with this coding system.")
+
(defvar pop3-read-point nil)
(defvar pop3-debug nil)
(pop3-retr process n crashbuf)
(save-excursion
(set-buffer crashbuf)
- (append-to-file (point-min) (point-max) crashbox)
+ (let ((coding-system-for-write pop3-movemail-file-coding-system))
+ (append-to-file (point-min) (point-max) crashbox))
(set-buffer (process-buffer process))
(while (> (buffer-size) 5000)
(goto-char (point-min))
(setq pop3-timestamp
(substring response (or (string-match "<" response) 0)
(+ 1 (or (string-match ">" response) -1)))))
- process
- ))
+ process))
;; Support functions