From 381df96561a159ec072dc0b4936134405a5d68cd Mon Sep 17 00:00:00 2001 From: morioka Date: Mon, 9 Mar 1998 11:22:24 +0000 Subject: [PATCH] tm 7.21. --- Changes-7.21.en | 119 +++++++ Changes-7.21.ja | 125 +++++++ Makefile | 2 +- gnus/Makefile | 2 +- gnus/tm-gnus.el | 4 +- gnus/tm-gnus4.el | 99 +----- gnus/tm-sgnus.el | 68 ++-- mh-e/Makefile | 2 +- mh-e/tm-mh-e.el | 4 +- mime-setup.el | 93 +++-- mk-tm | 1 + tm-edit.el | 986 ++++++++++++++++++++++++------------------------------ tm-rmail.el | 185 ++++++++-- tm-view.el | 48 ++- tm-vm.el | 14 +- 15 files changed, 961 insertions(+), 791 deletions(-) create mode 100644 Changes-7.21.en create mode 100644 Changes-7.21.ja diff --git a/Changes-7.21.en b/Changes-7.21.en new file mode 100644 index 0000000..5a55202 --- /dev/null +++ b/Changes-7.21.en @@ -0,0 +1,119 @@ +* mel + + Attached version 3.1. + +mel/mel.el +---------------------------- +revision 3.1 +date: 1995/10/30 06:03:37; author: morioka; state: Exp; lines: +18 -14 +(1) setting for function `uuencode-decode-region' of mel-u.el. +(2) Variable `mime-decoding-method-alist' was created to chose decoder + in function `mime/decode-region'. +---------------------------- + +mel/mel-u.el +---------------------------- +revision 2.0 +date: 1995/10/30 06:01:29; author: morioka; state: Exp; lines: +51 -1 +Function `uuencode-decode-region' was created. +---------------------------- + + +* tm + +tm/mime-setup.el +---------------------------- +revision 7.9 +date: 1995/10/28 06:02:53; author: morioka; state: Exp; lines: +38 -39 +(1) all of VM settings were deleted. +(2) `mime-setup-load-hook' was created. +(3) Setting to decode encoded-words was inserted to variable + `mime/editor-mode-hook'. Other similar settings were deleted. +---------------------------- +revision 7.8 +date: 1995/10/27 08:36:13; author: morioka; state: Exp; lines: +2 -16 +For `mh-letter-mode-hook', do add-hook as append mode. +---------------------------- + +tm/tm-edit.el +---------------------------- +revision 7.14 +date: 1995/10/29 06:15:49; author: morioka; state: Exp; lines: +6 -120 +Unnecessary comments were deleted. +---------------------------- +revision 7.13 +date: 1995/10/28 05:48:36; author: morioka; state: Exp; lines: +501 -463 +(1) prefix was renamed from ``tm-edit/'' to ``mime-editor/''. +(2) `mime-mode' was renamed to `mime/editor-mode'. +(3) Does not set sending key. + It sets function `mime-editor/maybe-translate' to before sending + hooks of each MUAs'. +(4) Some problems were fixed. +---------------------------- +revision 7.12 +date: 1995/10/27 11:18:22; author: morioka; state: Exp; lines: +13 -43 +Forgot part to rename `mime-menu' to `tm-edit/menu' was renamed. +---------------------------- + +tm/tm-view.el +---------------------------- +revision 7.21 +date: 1995/10/30 05:57:27; author: morioka; state: Exp; lines: +31 -17 +Variable `mime-viewer/over-to-previous-method-alist' and variable +`mime-viewer/over-to-next-method-alist' were created. +---------------------------- + +tm/tm-rmail.el +---------------------------- +revision 7.8 +date: 1995/10/30 05:52:36; author: morioka; state: Exp; lines: +80 -23 +automatic MIME preview support. +---------------------------- + +tm/tm-vm.el +---------------------------- +revision 7.3 +date: 1995/10/28 06:00:09; author: morioka; state: Exp; lines: +13 -1 +Code for mime-setup. +---------------------------- + + +* tm/mh-e + + Attached version 7.10. + +tm/mh-e/tm-mh-e.el +---------------------------- +revision 7.10 +date: 1995/10/30 03:19:18; author: morioka; state: Exp; lines: +2 -2 +Setting for tm-edit was modified because variable +`tm-edit/message-inserter-alist' was renamed to +`mime-editor/message-inserter-alist'. +---------------------------- + + +* tm/gnus + + Attached version 7.12. + +tm/gnus/tm-gnus4.el +---------------------------- +revision 7.1 +date: 1995/10/28 05:44:44; author: morioka; state: Exp; lines: +1 -98 +Setting for tm-comp was deleted. +---------------------------- + +tm/gnus/tm-sgnus.el +---------------------------- +revision 7.12 +date: 1995/10/29 14:13:08; author: morioka; state: Exp; lines: +16 -29 +(1) encoded-words decoding mode (tm-gnus/decode-all = nil) was + abolished. So variable `tm-gnus/decode-all' was deleted. +(2) Redefine function `gnus-article-hide-headers-if-wanted'. +(3) Variable `tm-gnus/automatic-mime-preview' was created. It is set + to variable `gnus-show-mime'. +---------------------------- +revision 7.11 +date: 1995/10/27 10:19:38; author: morioka; state: Exp; lines: +3 -1 +measure for BBDB again. +---------------------------- diff --git a/Changes-7.21.ja b/Changes-7.21.ja new file mode 100644 index 0000000..175ef66 --- /dev/null +++ b/Changes-7.21.ja @@ -0,0 +1,125 @@ +* mel + + Version 3.1 を添付した。 + +mel/mel.el +---------------------------- +revision 3.1 +date: 1995/10/30 06:03:37; author: morioka; state: Exp; lines: +18 -14 +(1) mel-u.el の uuencode-decode-region の設定を行った。 +(2) 変数 mime-decoding-method-alist を設けて、関数 mime/decode-region + での decoder の選択にこれを用いるようにした。 +---------------------------- + +mel/mel-u.el +---------------------------- +revision 2.0 +date: 1995/10/30 06:01:29; author: morioka; state: Exp; lines: +51 -1 +関数 uuencode-decode-region を追加した。 +---------------------------- + + +* tm + +tm/mime-setup.el +---------------------------- +revision 7.9 +date: 1995/10/28 06:02:53; author: morioka; state: Exp; lines: +38 -39 +(1) VM 用の設定を全て削除した。 +(2) mime-setup-load-hook を設けた。 +(3) 変数 mime/editor-mode-hook に encoded-word の decode 用の code を + 入れ、それ以外の部分にあった mime/decode-message-header を呼ぶ設定 + を削除した。 +---------------------------- +revision 7.8 +date: 1995/10/27 08:36:13; author: morioka; state: Exp; lines: +2 -16 +mh-letter-mode-hook に対して append mode で add-hook するようにした。 +---------------------------- + +tm/tm-edit.el +---------------------------- +revision 7.14 +date: 1995/10/29 06:15:49; author: morioka; state: Exp; lines: +6 -120 +不要な comment を削除した。 +---------------------------- +revision 7.13 +date: 1995/10/28 05:48:36; author: morioka; state: Exp; lines: +501 -463 +(1) prefix を ``tm-edit/'' から ``mime-editor/'' に変えた。 +(2) mime-mode を mime/editor-mode に変えた。 +(3) 発信用の key を設定するのをやめ、各 MUA の発信直前に呼ばれる hook + に関数 mime-editor/maybe-translate を設定するようにした。 +(4) いろいろな不具合を修正した。 +---------------------------- +revision 7.12 +date: 1995/10/27 11:18:22; author: morioka; state: Exp; lines: +13 -43 +定数 mime-menu を tm-edit/menu に rename するのを忘れていた部分を修正 +した。 +---------------------------- + +tm/tm-view.el +---------------------------- +revision 7.21 +date: 1995/10/30 05:57:27; author: morioka; state: Exp; lines: +31 -17 +message の先頭 content から前に行こうとする時に呼ばれる +`mime-viewer/over-to-previous-method-alist' と message の末尾の +content から次の content に行こうとする時に呼ばれる +`mime-viewer/over-to-next-method-alist' を設けた。 +---------------------------- + +tm/tm-rmail.el +---------------------------- +revision 7.8 +date: 1995/10/30 05:52:36; author: morioka; state: Exp; lines: +80 -23 +automatic MIME preview support を行った。 +---------------------------- + +tm/tm-vm.el +---------------------------- +revision 7.3 +date: 1995/10/28 06:00:09; author: morioka; state: Exp; lines: +13 -1 +mime-setup 対策用の code を入れた。 +---------------------------- + + +* tm/mh-e + + Version 7.10 を添付した。 + +tm/mh-e/tm-mh-e.el +---------------------------- +revision 7.10 +date: 1995/10/30 03:19:18; author: morioka; state: Exp; lines: +2 -2 +変数 tm-edit/message-inserter-alist が +`mime-editor/message-inserter-alist' に改名されたのに伴い、tm-edit の +設定を修正した。 +---------------------------- + + +* tm/gnus + + Version 7.12 を添付した。 + +tm/gnus/tm-gnus4.el +---------------------------- +revision 7.1 +date: 1995/10/28 05:44:44; author: morioka; state: Exp; lines: +1 -98 +tm-comp 用の設定を削除した。 +---------------------------- + +tm/gnus/tm-sgnus.el +---------------------------- +revision 7.12 +date: 1995/10/29 14:13:08; author: morioka; state: Exp; lines: +16 -29 +(1) encoded-word の decode だけを行う mode(tm-gnus/decode-all が nil + である状態)を廃止した。これに伴い、変数 tm-gnus/decode-all を廃止 + した。 +(2) 関数 gnus-article-hide-headers-if-wanted を再定義するようにした。 +(3) 変数 tm-gnus/automatic-mime-preview を設けた。これは変数 + gnus-show-mime に代入される。(default の状態で automatic MIME + preview mode にし、なおかつ、user が初期状態を設定できるようにする + ため) +---------------------------- +revision 7.11 +date: 1995/10/27 10:19:38; author: morioka; state: Exp; lines: +3 -1 +BBDB 対策用の設定をまたまた修正。 +---------------------------- diff --git a/Makefile b/Makefile index 8f6db0a..91dc3cc 100644 --- a/Makefile +++ b/Makefile @@ -34,7 +34,7 @@ TL_FILES = tl/README.eng tl/Makefile tl/mk-tl tl/*.el tl/doc/*.texi FILES = $(TM_FILES) $(TM_MUA_FILES) $(MEL_FILES) $(TL_FILES) -TARFILE = tm7.20.tar +TARFILE = tm7.21.tar nemacs: diff --git a/gnus/Makefile b/gnus/Makefile index cf062b7..94915f4 100644 --- a/gnus/Makefile +++ b/gnus/Makefile @@ -17,7 +17,7 @@ TMDIR19 = $(HOME)/lib/emacs19/lisp FILES = tm/gnus/*.el tm/doc/tm-gnus*.texi -TARFILE = tm-gnus7.09.tar +TARFILE = tm-gnus7.12.tar gnus3: diff --git a/gnus/tm-gnus.el b/gnus/tm-gnus.el index 460dc80..657d1cd 100644 --- a/gnus/tm-gnus.el +++ b/gnus/tm-gnus.el @@ -6,7 +6,7 @@ ;;; ;;; Author: Morioka Tomohiko ;;; Version: -;;; $Id: tm-gnus.el,v 6.5 1995/09/28 02:20:46 morioka Exp $ +;;; $Id: tm-gnus.el,v 7.0 1995/10/29 09:13:16 morioka Exp $ ;;; Keywords: news, MIME, multimedia, encoded-word, multilingual ;;; ;;; This file is part of tm (Tools for MIME). @@ -46,4 +46,4 @@ (provide 'tm-gnus) -(run-hooks 'tm-gnus/startup-hook) +(run-hooks 'tm-gnus-load-hook) diff --git a/gnus/tm-gnus4.el b/gnus/tm-gnus4.el index d7d41f1..123b728 100644 --- a/gnus/tm-gnus4.el +++ b/gnus/tm-gnus4.el @@ -11,7 +11,7 @@ ;;; (defconst tm-gnus/RCS-ID - "$Id: tm-gnus4.el,v 7.0 1995/10/22 12:12:56 morioka Exp $") + "$Id: tm-gnus4.el,v 7.1 1995/10/28 05:44:44 morioka Exp $") (defconst tm-gnus/version (concat (get-version-string tm-gnus/RCS-ID) " for GNUS 4")) @@ -107,103 +107,6 @@ (function tm-gnus/decode-encoded-word-if-you-need) t) -;;; @ for tm-comp -;;; - -(defun tm-gnus4/message-before-send () - (let ((case-fold-search nil)) - (or (boundp 'mime/news-reply-mode-server-running) - (make-variable-buffer-local 'mime/news-reply-mode-server-running)) - (setq mime/news-reply-mode-server-running (gnus-server-opened)) - (save-excursion - (gnus-start-news-server) - (widen) - (goto-char (point-min)) - (run-hooks 'news-inews-hook) - (save-restriction - (narrow-to-region - (point-min) - (progn - (goto-char (point-min)) - (search-forward (concat "\n" mail-header-separator "\n")) - (point))) - - (goto-char (point-min)) - (if (search-forward-regexp "^Newsgroups: +" nil t) - (save-restriction - (narrow-to-region - (point) - (if (re-search-forward "^[^ \t]" nil 'end) - (match-beginning 0) - (point-max))) - (goto-char (point-min)) - (replace-regexp "\n[ \t]+" " ") - (goto-char (point-min)) - (replace-regexp "[ \t\n]*,[ \t\n]*\\|[ \t]+" ",") - )) - )))) - -(defun tm-gnus4/message-sender () - (interactive) - (widen) - (goto-char (point-min)) - (save-restriction - (narrow-to-region - (point-min) - (progn - (goto-char (point-min)) - (search-forward (concat "\n" mail-header-separator "\n")) - (point))) - ;; Mail the message too if To: or Cc: exists. - (if (or (mail-fetch-field "to" nil t) - (mail-fetch-field "cc" nil t)) - (if gnus-mail-send-method - (progn - (message - (format "Sending (%d/%d) via mail..." (+ i 1) total)) - (widen) - (funcall gnus-mail-send-method) - (message - (format "Sending (%d/%d) via mail... done" (+ i 1) total)) - (ding) - (message - "No mailer defined. To: and/or Cc: fields ignored.") - (sit-for 1))))) - (message - (format "Posting %d/%d to USENET..." (+ i 1) total)) - (if (gnus-inews-article) - (message - (format "Posting %d/%d to USENET... done" (+ i 1) total)) - ;; We cannot signal an error. - (ding) - (message - (format "Article %d/%d rejected: %s" - (+ i 1) total (gnus-status-message))) - (sit-for 3)) - ) - -(defun tm-gnus4/message-after-send () - (or mime/news-reply-mode-server-running - (gnus-close-server)) - (and (fboundp 'bury-buffer) (bury-buffer)) - ) - -(call-after-loaded - 'tm-comp - (function - (lambda () - (set-alist 'mime/message-before-send-hook-alist - 'news-reply-mode - (function tm-gnus4/message-before-send)) - (set-alist 'mime/message-sender-alist - 'news-reply-mode - (function tm-gnus4/message-sender)) - (set-alist 'mime/message-after-send-hook-alist - 'news-reply-mode - (function tm-gnus4/message-after-send)) - ))) - - ;;; @ end ;;; diff --git a/gnus/tm-sgnus.el b/gnus/tm-sgnus.el index 038929f..3ce2136 100644 --- a/gnus/tm-sgnus.el +++ b/gnus/tm-sgnus.el @@ -26,7 +26,7 @@ ;;; (defconst tm-gnus/RCS-ID - "$Id: tm-sgnus.el,v 7.9 1995/10/23 10:18:13 morioka Exp $") + "$Id: tm-sgnus.el,v 7.12 1995/10/29 14:13:08 morioka Exp $") (defconst tm-gnus/version (concat (get-version-string tm-gnus/RCS-ID) " for September")) @@ -35,10 +35,11 @@ ;;; @ variables ;;; -(defvar tm-gnus/decode-all t - "If it is non-nil and -tm-gnus/automatic-MIME-preview-support is non-nil, -article is automatic MIME decoded.") +(defvar tm-gnus/automatic-mime-preview t + "*If non-nil, show MIME processed article. +This variable is set to `gnus-show-mime'.") + +(setq gnus-show-mime tm-gnus/automatic-mime-preview) ;;; @ command functions @@ -68,7 +69,7 @@ article is automatic MIME decoded.") (defun tm-gnus/summary-toggle-header (&optional arg) (interactive "P") - (if (and tm-gnus/decode-all gnus-show-mime) + (if gnus-show-mime (let ((mime-viewer/ignored-field-list (if (save-excursion (set-buffer gnus-article-buffer) @@ -168,53 +169,32 @@ article is automatic MIME decoded.") (run-hooks 'tm-gnus/article-prepare-hook) ) -(defun tm-gnus/decode-message-header () - (mime/decode-message-header) - (run-hooks 'tm-gnus/article-prepare-hook) - ) - -(defun tm-gnus/set-mime-method (mode) - (setq gnus-show-mime-method - (if mode - (function tm-gnus/preview-article) - (function tm-gnus/decode-message-header) - ))) +(setq gnus-show-mime-method (function tm-gnus/preview-article)) -(tm-gnus/set-mime-method tm-gnus/decode-all) - -(setq gnus-show-mime t) +(or (fboundp 'tm::gnus-article-hide-headers-if-wanted) + (fset 'tm::gnus-article-hide-headers-if-wanted + (symbol-function 'gnus-article-hide-headers-if-wanted)) + ) -(defun tm-gnus/article-hide-headers-if-wanted () - (if (not (and gnus-show-mime tm-gnus/decode-all)) - (gnus-article-hide-headers-if-wanted) +(defun gnus-article-hide-headers-if-wanted () + (if (not gnus-show-mime) + (tm::gnus-article-hide-headers-if-wanted) )) -(remove-hook 'gnus-article-display-hook - 'gnus-article-hide-headers-if-wanted) -(add-hook 'gnus-article-display-hook - 'tm-gnus/article-hide-headers-if-wanted) - -;;; @ for tm-comp +;;; @ for BBDB ;;; -(call-after-loaded - 'tm-comp - (lambda () - (set-alist 'mime/message-sender-alist - 'news-reply-mode - (function gnus-inews-news)) - )) +(defun tm-gnus/bbdb-setup () + (if (memq 'bbdb/gnus-update-record gnus-article-prepare-hook) + (progn + (remove-hook 'gnus-article-prepare-hook 'bbdb/gnus-update-record) + (add-hook 'tm-gnus/article-prepare-hook 'bbdb/gnus-update-record) + ))) +(add-hook 'gnus-startup-hook 'tm-gnus/bbdb-setup t) -;;; @ for BBDB -;;; - -(if (memq 'bbdb/gnus-update-record gnus-article-prepare-hook) - (progn - (remove-hook 'gnus-article-prepare-hook 'bbdb/gnus-update-record) - (add-hook 'tm-gnus/article-prepare-hook 'bbdb/gnus-update-record) - )) +(tm-gnus/bbdb-setup) ;;; @ end diff --git a/mh-e/Makefile b/mh-e/Makefile index 7f31ccc..489a3c5 100644 --- a/mh-e/Makefile +++ b/mh-e/Makefile @@ -23,7 +23,7 @@ TMDIR19 = $(HOME)/lib/emacs19/lisp FILES = tm/mh-e/*.el tm/mh-e/Makefile tm/mh-e/mk-tmh tm/mh-e/*.ol -TARFILE = tm-mh-e7.09.tar +TARFILE = tm-mh-e7.10.tar elc: diff --git a/mh-e/tm-mh-e.el b/mh-e/tm-mh-e.el index c059ea3..4aa2977 100644 --- a/mh-e/tm-mh-e.el +++ b/mh-e/tm-mh-e.el @@ -26,7 +26,7 @@ ;;; (defconst tm-mh-e/RCS-ID - "$Id: tm-mh-e.el,v 7.9 1995/10/26 09:26:23 morioka Exp $") + "$Id: tm-mh-e.el,v 7.10 1995/10/30 03:19:18 morioka Exp $") (defconst tm-mh-e/version (get-version-string tm-mh-e/RCS-ID)) @@ -325,7 +325,7 @@ With arg, turn MIME processing on if arg is positive." (function (lambda () (set-alist - 'tm-edit/message-inserter-alist + 'mime-editor/message-inserter-alist 'mh-letter-mode (function tm-mh-e/insert-message)) ))) diff --git a/mime-setup.el b/mime-setup.el index f97680c..8936601 100644 --- a/mime-setup.el +++ b/mime-setup.el @@ -6,7 +6,7 @@ ;;; ;;; Author: MORIOKA Tomohiko ;;; Version: -;;; $Id: mime-setup.el,v 7.7 1995/10/26 11:12:49 morioka Exp $ +;;; $Id: mime-setup.el,v 7.9 1995/10/28 06:02:53 morioka Exp $ ;;; Keywords: mail, news, MIME, multimedia, multilingual, encoded-word ;;; ;;; This file is part of tm (Tools for MIME). @@ -14,6 +14,27 @@ (require 'tm-setup) +(autoload 'mime/editor-mode "tm-edit" + "Minor mode for editing MIME message." t) + +(add-hook 'mime/editor-mode-hook + (function + (lambda () + (save-excursion + (save-restriction + (goto-char (point-min)) + (narrow-to-region + (point-min) + (if (re-search-forward + (concat "^" (regexp-quote mail-header-separator) "$") + nil t) + (match-beginning 0) + (point-max) + )) + (mime/decode-message-header) + (set-buffer-modified-p nil) + ))))) + ;;; @ variables ;;; @@ -24,19 +45,13 @@ (defvar mime-setup-signature-key-alist '((mail-mode . "\C-c\C-w"))) -;;; @ for Edit MIME mode -;;; - -(autoload 'mime-mode "tm-edit" "Edit MIME message." t) - - ;;; @ for signature ;;; (if mime-setup-use-signature (progn (autoload 'insert-signature "signature" "Insert signature" t) - (add-hook 'mime-mode-hook + (add-hook 'mime/editor-mode-hook (function (lambda () (let ((key (or (cdr @@ -59,14 +74,21 @@ ) +;;; @ for RMAIL +;;; + +(add-hook 'mail-mode-hook 'mime/editor-mode) +(add-hook 'mail-setup-hook 'mime/decode-message-header) +(add-hook 'mail-send-hook 'mime-editor/maybe-translate) + + ;;; @ for mh-e ;;; (add-hook 'mh-letter-mode-hook (function (lambda () - (mime/decode-message-header) - (mime-mode) + (mime/editor-mode) (make-local-variable 'mail-header-separator) (setq mail-header-separator "--------") (save-excursion @@ -77,58 +99,21 @@ (set-buffer-modified-p (buffer-modified-p)) )) ) - ))) + )) t) +(add-hook 'mh-before-send-letter-hook 'mime-editor/maybe-translate) -;;; @ for GNUS -;;; -(add-hook 'news-reply-mode-hook - (function - (lambda () - (mime/decode-message-header) - (set-buffer-modified-p nil) - (mime-mode) - ))) - -;;; for Gnus 5.* and September Gnus -;;; -(add-hook 'news-inews-hook - (function - (lambda () - (if mime-mode-flag - (mime-mode-exit) - )))) -(add-hook 'mail-send-hook - (function - (lambda () - (if mime-mode-flag - (mime-mode-exit) - )))) - - -;;; @ for Mail mode (includes VM mode) +;;; @ for GNUS ;;; -(add-hook 'mail-mode-hook (function mime-mode)) -(add-hook 'mail-setup-hook (function mime/decode-message-header)) - -;;; @@ In VM, the following definitions may be requried: -;;; - -;;; (if (boundp 'vm-visible-headers) -;;; (progn -;;; (setq vm-preview-lines nil) -;;; (setq vm-invisible-header-regexp nil) -;;; (setq vm-visible-headers -;;; (append vm-visible-headers -;;; '("Mime-Version:" -;;; "Content-Type:" -;;; "Content-Transfer-Encoding:"))) -;;; )) +(add-hook 'news-reply-mode-hook 'mime/editor-mode) +(add-hook 'news-inews-hook 'mime-editor/maybe-translate) ;;; @ end ;;; (provide 'mime-setup) + +(run-hooks 'mime-setup-load-hook) diff --git a/mk-tm b/mk-tm index 162b252..117e3b2 100644 --- a/mk-tm +++ b/mk-tm @@ -15,6 +15,7 @@ (require 'tl-misc) (require 'gnus) (require 'tm-rich) +(require 'mel-u) (setq tm-modules (append diff --git a/tm-edit.el b/tm-edit.el index 0329458..8533700 100644 --- a/tm-edit.el +++ b/tm-edit.el @@ -45,69 +45,42 @@ ;; This MIME composer can work with Mail mode, mh-e letter Mode, and ;; News mode. First of all, you need the following autoload -;; definition to load mime-mode automatically: +;; definition to load mime/editor-mode automatically: ;; -;; (autoload 'mime-mode "mime" "Minor mode for editing MIME message." t) +;; (autoload 'mime/editor-mode "tm-edit" +;; "Minor mode for editing MIME message." t) ;; ;; In case of Mail mode (includes VM mode), you need the following ;; hook definition: ;; -;; (setq mail-mode-hook -;; (list -;; (function -;; (lambda () -;; (mime-mode))))) +;; (add-hook 'mail-mode-hook 'mime/editor-mode) +;; (add-hook 'mail-send-hook 'mime-editor/maybe-translate) ;; ;; In case of MH-E, you need the following hook definition: ;; -;; (setq mh-letter-mode-hook -;; (list -;; (function -;; (lambda () -;; (mime-mode) -;; (make-local-variable 'mail-header-separator) -;; (setq mail-header-separator "--------"))))) +;; (add-hook 'mh-letter-mode-hook +;; (function +;; (lambda () +;; (mime/editor-mode) +;; (make-local-variable 'mail-header-separator) +;; (setq mail-header-separator "--------") +;; )))) +;; (add-hook 'mh-before-send-letter-hook 'mime-editor/maybe-translate) ;; ;; In case of News mode, you need the following hook definition: ;; -;; (setq news-reply-mode-hook -;; (list -;; (function -;; (lambda () -;; (mime-mode))))) -;; -;; Followings are for message forwarding as content-type -;; "message/rfc822". -;; -;; (setq rmail-mode-hook -;; (list -;; (function -;; (lambda () -;; ;; Forward mail using MIME. -;; (require 'mime) -;; (substitute-key-definition 'rmail-forward -;; 'mime-forward-from-rmail-using-mail -;; (current-local-map)) -;; )))) -;; -;; (setq gnus-mail-forward-method 'mime-forward-from-gnus-using-mail) -;; (setq gnus-summary-mode-hook -;; (list -;; (function -;; (lambda () -;; ;; Forward article using MIME. -;; (require 'mime) -;; )))) +;; (add-hook 'news-reply-mode-hook 'mime/editor-mode) +;; (add-hook 'news-inews-hook 'mime-editor/maybe-translate) ;; ;; In case of Emacs 19, it is possible to emphasize the message tags ;; using font-lock mode as follows: ;; -;; (setq mime-mode-hook -;; (list -;; (function -;; (lambda () -;; (font-lock-mode 1) -;; (setq font-lock-keywords (list tm-edit/tag-regexp)))))) +;; (add-hook 'mime/editor-mode-hook +;; (function +;; (lambda () +;; (font-lock-mode 1) +;; (setq font-lock-keywords (list mime-editor/tag-regexp)) +;; )))) ;; The message tag looks like: ;; @@ -134,7 +107,7 @@ ;; LCD Archive Entry: ;; mime|Masanobu UMEDA|umerin@mse.kyutech.ac.jp| ;; Simple MIME Composer| -;; $Date: 1995/10/26 11:12:05 $|$Revision: 7.11 $|~/misc/mime.el.Z| +;; $Date: 1995/10/29 06:15:49 $|$Revision: 7.14 $|~/misc/mime.el.Z| ;;; Code: @@ -151,10 +124,10 @@ ;;; @ version ;;; -(defconst tm-edit/RCS-ID - "$Id: tm-edit.el,v 7.11 1995/10/26 11:12:05 morioka Exp $") +(defconst mime-editor/RCS-ID + "$Id: tm-edit.el,v 7.14 1995/10/29 06:15:49 morioka Exp $") -(defconst tm-edit/version (get-version-string tm-edit/RCS-ID)) +(defconst mime-editor/version (get-version-string mime-editor/RCS-ID)) ;;; @ variables @@ -208,16 +181,16 @@ The method is a form of (CHARSET . ENCODING).") (function mime-voice-recorder-for-sun) "*Function to record a voice message and return a buffer that contains it.") -(defvar mime-mode-hook nil +(defvar mime/editor-mode-hook nil "*Hook called when enter MIME mode.") -(defvar mime-translate-hook nil +(defvar mime-editor/translate-hook nil "*Hook called before translating into a MIME compliant message. To insert a signature file specified by mime-signature-file (`.signature.rtf' by default) automatically, call the function -`tm-edit/insert-signature' from this hook.") +`mime-editor/insert-signature' from this hook.") -(defvar mime-exit-hook nil +(defvar mime-editor/exit-hook nil "*Hook called when exit MIME mode.") (defvar mime-content-types @@ -318,24 +291,25 @@ To insert a signature file specified by mime-signature-file "*Alist of file name, types, parameters, and default encoding. If encoding is nil, it is determined from its contents.") -(defvar tm-edit/split-message t) +(defvar mime-editor/split-message t) -(defvar tm-edit/message-default-max-length 1000) +(defvar mime-editor/message-default-max-length 1000) -(defvar tm-edit/message-max-length-alist +(defvar mime-editor/message-max-length-alist '((news-reply-mode . 500))) -(defconst tm-edit/message-nuke-headers +(defconst mime-editor/message-nuke-headers "\\(^Content-\\|^Subject:\\|^Mime-Version:\\)") -(defvar tm-edit/message-blind-headers "\\(^[BDFbdf]cc:\\|^cc:[ \t]*$\\)") +(defvar mime-editor/blind-fields-regexp "\\(^[BDFbdf]cc:\\|^cc:[ \t]*$\\)") -(defvar tm-edit/message-default-sender-alist +(defvar mime-editor/message-default-sender-alist '((mail-mode . mail-send-and-exit) (mh-letter-mode . mh-send-letter) - (news-reply-mode . gnus-inews-news))) + (news-reply-mode . gnus-inews-news) + )) -(defvar tm-edit/message-sender-alist +(defvar mime-editor/message-sender-alist '((mail-mode . (lambda () (interactive) @@ -345,15 +319,13 @@ If encoding is nil, it is determined from its contents.") . (lambda (&optional arg) (interactive "P") (write-region (point-min) (point-max) - tm-edit/draft-file-name) - (message - (format "Sending %d/%d..." (+ i 1) total)) + mime-editor/draft-file-name nil 'no-message) (cond (arg (pop-to-buffer "MH mail delivery") (erase-buffer) (mh-exec-cmd-output mh-send-prog t "-watch" "-nopush" "-nodraftfolder" - mh-send-args tm-edit/draft-file-name) + mh-send-args mime-editor/draft-file-name) (goto-char (point-max)) ; show the interesting part (recenter -1) (sit-for 1)) @@ -362,13 +334,11 @@ If encoding is nil, it is determined from its contents.") (mh-list-to-string (list "-nopush" "-nodraftfolder" "-noverbose" "-nowatch" - mh-send-args tm-edit/draft-file-name))))) - (message - (format "Sending %d/%d... done" (+ i 1) total)) + mh-send-args mime-editor/draft-file-name))))) )) )) -(defvar tm-edit/window-config-alist +(defvar mime-editor/window-config-alist '((mail-mode . nil) (mh-letter-mode . mh-previous-window-config) (news-reply-mode . (cond ((boundp 'gnus-winconf-post-news) @@ -384,12 +354,12 @@ If encoding is nil, it is determined from its contents.") )) )) -(defvar tm-edit/news-reply-mode-server-running nil) +(defvar mime-editor/news-reply-mode-server-running nil) -(defvar tm-edit/message-before-send-hook-alist +(defvar mime-editor/message-before-send-hook-alist '((mh-letter-mode . mh-before-send-letter-hook))) -(defvar tm-edit/message-after-send-hook-alist +(defvar mime-editor/message-after-send-hook-alist '((mh-letter-mode . (lambda () (if mh-annotate-char @@ -403,32 +373,32 @@ If encoding is nil, it is determined from its contents.") (mh-get-field "Cc:")))))) )) -(defvar tm-edit/message-inserter-alist nil) +(defvar mime-editor/message-inserter-alist nil) (defvar mime-tspecials-regexp "[][()<>@,;:\\\"/?.= \t]" "*Specify MIME tspecials. Tspecials means any character that matches with it in header must be quoted.") -(defconst tm-edit/single-part-tag-regexp +(defconst mime-editor/single-part-tag-regexp "^--[[][[]\\([^]]*\\)]\\([[]\\([^]]*\\)]\\|\\)]" "*Regexp of MIME tag in the form of [[CONTENT-TYPE][ENCODING]].") -(defconst tm-edit/multipart-beginning-regexp "^--<<\\([^<>]+\\)>>-{\n") +(defconst mime-editor/multipart-beginning-regexp "^--<<\\([^<>]+\\)>>-{\n") -(defconst tm-edit/multipart-end-regexp "^--}-<<\\([^<>]+\\)>>\n") +(defconst mime-editor/multipart-end-regexp "^--}-<<\\([^<>]+\\)>>\n") -(defconst tm-edit/beginning-tag-regexp - (regexp-or tm-edit/single-part-tag-regexp - tm-edit/multipart-beginning-regexp)) +(defconst mime-editor/beginning-tag-regexp + (regexp-or mime-editor/single-part-tag-regexp + mime-editor/multipart-beginning-regexp)) -(defconst tm-edit/end-tag-regexp - (regexp-or tm-edit/single-part-tag-regexp - tm-edit/multipart-end-regexp)) +(defconst mime-editor/end-tag-regexp + (regexp-or mime-editor/single-part-tag-regexp + mime-editor/multipart-end-regexp)) -(defconst tm-edit/tag-regexp - (regexp-or tm-edit/single-part-tag-regexp - tm-edit/multipart-beginning-regexp - tm-edit/multipart-end-regexp)) +(defconst mime-editor/tag-regexp + (regexp-or mime-editor/single-part-tag-regexp + mime-editor/multipart-beginning-regexp + mime-editor/multipart-end-regexp)) (defvar mime-tag-format "--[[%s]]" "*Control-string making a MIME tag.") @@ -439,102 +409,103 @@ Tspecials means any character that matches with it in header must be quoted.") (defvar mime-multipart-boundary "Multipart" "*Boundary of a multipart message.") + +;;; @@ buffer local variables +;;; + +(defvar mime/editor-mode-old-local-map nil) +(defvar mime/editor-mode-old-selective-display nil) +(defvar mime/editing-buffer nil) + -(defconst tm-edit/mime-version-value - (format "1.0 (generated by tm-edit %s)" tm-edit/version) +;;; @ constants +;;; + +(defconst mime-editor/mime-version-value + (format "1.0 (generated by tm-edit %s)" mime-editor/version) "MIME version number.") -(defvar mime-mode-flag nil) -(make-variable-buffer-local 'mime-mode-flag) +(defvar mime/editor-mode-flag nil) +(make-variable-buffer-local 'mime/editor-mode-flag) -(or (assq 'mime-mode-flag minor-mode-alist) - (setq minor-mode-alist - (cons (list 'mime-mode-flag " MIME") minor-mode-alist))) +(set-alist 'minor-mode-alist 'mime/editor-mode-flag '(" MIME-Edit")) -(defun mime-define-keymap (keymap) - "Add MIME commands to KEYMAP." +(defun mime-editor/define-keymap (keymap) + "Add mime-editor commands to KEYMAP." (if (not (keymapp keymap)) nil - (define-key keymap "\C-t" 'tm-edit/insert-text) - (define-key keymap "\C-i" 'tm-edit/insert-file) - (define-key keymap "\C-e" 'tm-edit/insert-external) - (define-key keymap "\C-v" 'tm-edit/insert-voice) - (define-key keymap "\C-y" 'tm-edit/insert-message) - (define-key keymap "\C-w" 'tm-edit/insert-signature) - (define-key keymap "\C-s" 'tm-edit/insert-signature) - (define-key keymap "\C-m" 'tm-edit/insert-tag) - (define-key keymap "a" 'tm-edit/enclose-alternative-region) - (define-key keymap "p" 'tm-edit/enclose-parallel-region) - (define-key keymap "m" 'tm-edit/enclose-mixed-region) - (define-key keymap "d" 'tm-edit/enclose-digest-region) - (define-key keymap "\C-p" 'tm-edit/preview-message) - (define-key keymap "\C-z" 'mime-mode-exit) - (define-key keymap "?" 'help-mime-mode) + (define-key keymap "\C-t" 'mime-editor/insert-text) + (define-key keymap "\C-i" 'mime-editor/insert-file) + (define-key keymap "\C-e" 'mime-editor/insert-external) + (define-key keymap "\C-v" 'mime-editor/insert-voice) + (define-key keymap "\C-y" 'mime-editor/insert-message) + (define-key keymap "\C-w" 'mime-editor/insert-signature) + (define-key keymap "\C-s" 'mime-editor/insert-signature) + (define-key keymap "\C-m" 'mime-editor/insert-tag) + (define-key keymap "a" 'mime-editor/enclose-alternative-region) + (define-key keymap "p" 'mime-editor/enclose-parallel-region) + (define-key keymap "m" 'mime-editor/enclose-mixed-region) + (define-key keymap "d" 'mime-editor/enclose-digest-region) + (define-key keymap "\C-p" 'mime-editor/preview-message) + (define-key keymap "\C-z" 'mime-editor/exit) + (define-key keymap "?" 'mime-editor/help) )) -(defconst tm-edit/menu - '("MIME" - ["Describe MIME Mode" help-mime-mode mime-mode-flag] - ["Insert File" tm-edit/insert-file mime-mode-flag] - ["Insert External" tm-edit/insert-external mime-mode-flag] - ["Insert Voice" tm-edit/insert-voice mime-mode-flag] - ["Insert Mail" tm-edit/insert-message mime-mode-flag] - ["Insert Signature" tm-edit/insert-signature mime-mode-flag] - ["Insert Text" tm-edit/insert-text mime-mode-flag] - ["Insert Tag" tm-edit/insert-tag mime-mode-flag] - ["Enclose as alternative" - tm-edit/enclose-alternative-region mime-mode-flag] - ["Enclose as parallel" - tm-edit/enclose-parallel-region mime-mode-flag] - ["Enclose as serial" - tm-edit/enclose-mixed-region mime-mode-flag] - ["Enclose as digest" - tm-edit/enclose-digest-region mime-mode-flag] - ["Preview Message" tm-edit/preview-message mime-mode-flag] +(defconst mime-editor/menu-title "MIME-Edit") + +(defconst mime-editor/menu-list + '((mime-help "Describe MIME Mode" mime-editor/help) + (file "Insert File" mime-editor/insert-file) + (external "Insert External" mime-editor/insert-external) + (voice "Insert Voice" mime-editor/insert-voice) + (mail "Insert Mail" mime-editor/insert-message) + (signature "Insert Signature" mime-editor/insert-signature) + (text "Insert Text" mime-editor/insert-text) + (tag "Insert Tag" mime-editor/insert-tag) + (alternative "Enclose as alternative" + mime-editor/enclose-alternative-region) + (parallel "Enclose as parallel" mime-editor/enclose-parallel-region) + (mixed "Enclose as serial" mime-editor/enclose-mixed-region) + (digest "Enclose as digest" mime-editor/enclose-digest-region) + (preview "Preview Message" mime-editor/preview-message) ) - "MIME menubar entry.") + "MIME-edit menubar entry.") -(defun tm-edit/define-menu-for-emacs19 () +(defun mime-editor/define-menu-for-emacs19 () "Define menu for Emacs 19." - (define-key (current-local-map) [menu-bar mime] - (cons "MIME" (make-sparse-keymap "MIME"))) + (define-key (current-local-map) [menu-bar mime-edit] + (cons mime-editor/menu-title + (make-sparse-keymap mime-editor/menu-title))) (mapcar (function (lambda (item) (define-key (current-local-map) - (vector 'menu-bar 'mime (aref item 1)) - (cons (aref item 0)(aref item 1)) + (vector 'menu-bar 'mime-edit (car item)) + (cons (nth 1 item)(nth 2 item)) ) )) - (reverse (cdr tm-edit/menu)) + (reverse mime-editor/menu-list) )) ;;; modified by Pekka Marjola ;;; 1995/9/5 (c.f. [tm-eng:69]) -(defun tm-edit/define-menu-for-xemacs () +(defun mime-editor/define-menu-for-xemacs () "Define menu for Emacs 19." (cond ((featurep 'menubar) (make-local-variable 'current-menubar) (set-buffer-menubar current-menubar) - (add-submenu nil mime-menu) + (add-submenu nil + (cons mime-editor/menu-title + (mapcar (function + (lambda (item) + (vector (nth 1 item)(nth 2 item) + mime/editor-mode-flag) + )) + mime-editor/menu-list))) ))) - -(defvar mime-xemacs-old-bindings nil - "A list of commands to restore old bindings.") - -(defun mime-xemacs-save-old-bindings (keymap funct) - "Save key bindings to a list for setting it back." - (let* ((key-bindings (where-is-internal funct keymap)) - (key-binding nil)) - (while key-bindings - (setq key-binding (pop key-bindings)) - (setq mime-xemacs-old-bindings - (append mime-xemacs-old-bindings - (list (list 'define-key keymap key-binding - (list 'function funct)))))))) ;;; end ;;;###autoload -(defun mime-mode () +(defun mime/editor-mode () "MIME minor mode for editing the tagged MIME message. In this mode, basically, the message is composed in the tagged MIME @@ -566,21 +537,21 @@ languages that has no registered charset are represented as either ISO-2022-JP-2 or ISO-2022-INT-1 in Mule. Following commands are available in addition to major mode commands: -\\[tm-edit/insert-text] insert a text message. -\\[tm-edit/insert-file] insert a (binary) file. -\\[tm-edit/insert-external] insert a reference to external body. -\\[tm-edit/insert-voice] insert a voice message. -\\[tm-edit/insert-message] insert a mail or news message. -\\[tm-edit/insert-signature] insert a signature file at end. -\\[tm-edit/insert-tag] insert a new MIME tag. -\\[tm-edit/enclose-alternative-region] Enclose as multipart/alternative. -\\[tm-edit/enclose-parallel-region] Enclose as multipart/parallel. -\\[tm-edit/enclose-mixed-region] Enclose as multipart/mixed. -\\[tm-edit/enclose-digest-region] Enclose as multipart/digest. -\\[tm-edit/preview-message] preview editing MIME message. -\\[mime-mode-exit] exit and translate into a MIME compliant message. -\\[tm-edit/exit-and-run] exit, translate and run the original command. -\\[help-mime-mode] show this help. +\\[mime-editor/insert-text] insert a text message. +\\[mime-editor/insert-file] insert a (binary) file. +\\[mime-editor/insert-external] insert a reference to external body. +\\[mime-editor/insert-voice] insert a voice message. +\\[mime-editor/insert-message] insert a mail or news message. +\\[mime-editor/insert-signature] insert a signature file at end. +\\[mime-editor/insert-tag] insert a new MIME tag. +\\[mime-editor/enclose-alternative-region] enclose as multipart/alternative. +\\[mime-editor/enclose-parallel-region] enclose as multipart/parallel. +\\[mime-editor/enclose-mixed-region] enclose as multipart/mixed. +\\[mime-editor/enclose-digest-region] enclose as multipart/digest. +\\[mime-editor/preview-message] preview editing MIME message. +\\[mime-editor/exit] exit and translate into a MIME compliant message. +\\[mime-editor/maybe-translate] exit, translate and run the original command. +\\[mime-editor/help] show this help. Additional commands are available in some major modes: C-c C-c exit, translate and run the original command. @@ -637,176 +608,123 @@ User customizable variables (not documented all of them): that contains it. The function mime-voice-recorder-for-sun is for Sun SparcStations. - mime-mode-hook - Turning on MIME mode calls the value of mime-mode-hook, if it is - non-nil. + mime/editor-mode-hook + Turning on MIME mode calls the value of mime/editor-mode-hook, if + it is non-nil. - mime-translate-hook - The value of mime-translate-hook is called just before translating + mime-editor/translate-hook + The value of mime-editor/translate-hook is called just before translating the tagged MIME format into a MIME compliant message if it is - non-nil. If the hook call the function tm-edit/insert-signature, + non-nil. If the hook call the function mime-editor/insert-signature, the signature file will be inserted automatically. - mime-exit-hook - Turning off MIME mode calls the value of mime-exit-hook, if it is + mime-editor/exit-hook + Turning off MIME mode calls the value of mime-editor/exit-hook, if it is non-nil." (interactive) - (if mime-mode-flag + (if mime/editor-mode-flag (error "You are already editing a MIME message.") - (setq mime-mode-flag t) + (setq mime/editor-mode-flag t) ;; Remember old key bindings. - (make-local-variable 'mime-mode-old-local-map) - (setq mime-mode-old-local-map (current-local-map)) + (make-local-variable 'mime/editor-mode-old-local-map) + (setq mime/editor-mode-old-local-map (current-local-map)) ;; Add MIME commands to current local map. - ;; modified by Pekka Marjola - ;; 1995/9/5 (c.f. [tm-eng:69]) - (or (string-match "XEmacs\\|Lucid" emacs-version) ; can't use w/ XEmacs - (use-local-map (copy-keymap (current-local-map)))) - ;; end - + (use-local-map (copy-keymap (current-local-map))) (if (not (lookup-key (current-local-map) mime-prefix)) (define-key (current-local-map) mime-prefix (make-sparse-keymap))) - (mime-define-keymap (lookup-key (current-local-map) mime-prefix)) - ;; Replace key definitions to avoid sending a message without - ;; conversion into a MIME compliant message. - ;; modified by Pekka Marjola - ;; 1995/9/5 (c.f. [tm-eng:69]) - ;; copy-keymap behaves strangely in XEmacs - (cond ((string-match "XEmacs\\|Lucid" emacs-version) - (make-variable-buffer-local 'mime-xemacs-old-bindings) - (setq mime-xemacs-old-bindings nil) - (let ((keymap nil) - (keymaps (accessible-keymaps (current-local-map)))) - (while keymaps - (setq keymap (cdr (car keymaps))) - (setq keymaps (cdr keymaps)) - (if (not (keymapp keymap)) - nil - ;; Mail mode: - (mime-xemacs-save-old-bindings keymap 'mail-send) - (mime-xemacs-save-old-bindings keymap 'mail-send-and-exit) - ;; mh-e letter mode: - (mime-xemacs-save-old-bindings keymap 'mh-send-letter) - ;; Mail mode called from VM: - (mime-xemacs-save-old-bindings keymap 'vm-mail-send) - (mime-xemacs-save-old-bindings keymap 'vm-mail-send-and-exit) - ;; News mode: - (mime-xemacs-save-old-bindings keymap 'news-inews) - )) - ))) - ;; end + (mime-editor/define-keymap (lookup-key (current-local-map) mime-prefix)) - (let ((keymap nil) - (keymaps (accessible-keymaps (current-local-map)))) - (while keymaps - (setq keymap (cdr (car keymaps))) - (setq keymaps (cdr keymaps)) - (if (not (keymapp keymap)) - nil - ;; Mail mode: - (substitute-key-definition - 'mail-send 'tm-edit/exit-and-run keymap) - (substitute-key-definition - 'mail-send-and-exit 'tm-edit/exit-and-run keymap) - ;; mh-e letter mode: - (substitute-key-definition - 'mh-send-letter 'tm-edit/exit-and-run keymap) - ;; Mail mode called from VM: - (substitute-key-definition - 'vm-mail-send 'tm-edit/exit-and-run keymap) - (substitute-key-definition - 'vm-mail-send-and-exit 'tm-edit/exit-and-run keymap) - ;; News mode: - (substitute-key-definition - 'news-inews 'tm-edit/exit-and-run keymap) - ))) ;; Define menu. Menus for other emacs implementations are ;; welcome. ;; modified by Pekka Marjola ;; 1995/9/5 (c.f. [tm-eng:69]) (cond ((string-match "XEmacs\\|Lucid" emacs-version) - (tm-edit/define-menu-for-xemacs)) + (mime-editor/define-menu-for-xemacs)) ((string-match "^19\\." emacs-version) - (tm-edit/define-menu-for-emacs19) + (mime-editor/define-menu-for-emacs19) )) ;; end ;; Remember old selective-display. - (make-local-variable 'mime-mode-old-selective-display) - (setq mime-mode-old-selective-display selective-display) + (make-local-variable 'mime/editor-mode-old-selective-display) + (setq mime/editor-mode-old-selective-display selective-display) (setq selective-display t) ;; I don't care about saving these. (setq paragraph-start - (concat tm-edit/single-part-tag-regexp "\\|" paragraph-start)) + (concat mime-editor/single-part-tag-regexp "\\|" paragraph-start)) (setq paragraph-separate - (concat tm-edit/single-part-tag-regexp "\\|" paragraph-separate)) - (run-hooks 'mime-mode-hook) + (concat mime-editor/single-part-tag-regexp "\\|" paragraph-separate)) + (run-hooks 'mime/editor-mode-hook) (message (substitute-command-keys - "Type \\[mime-mode-exit] to exit MIME mode, and type \\[help-mime-mode] to get help.")) + "Type \\[mime-editor/exit] to exit MIME mode, and type \\[mime-editor/help] to get help.")) )) ;;;###autoload -(fset 'edit-mime 'mime-mode) ; for convenience +(defalias 'edit-mime 'mime/editor-mode) ; for convenience +(defalias 'mime-mode 'mime/editor-mode) ; for convenience -(defun mime-mode-exit (&optional nomime) +(defun mime-editor/exit (&optional nomime no-error) "Translate the tagged MIME message into a MIME compliant message. With no argument encode a message in the buffer into MIME, otherwise just return to previous mode." (interactive "P") - (if (not mime-mode-flag) - (error "You aren't editing a MIME message.") + (if (not mime/editor-mode-flag) + (if (null no-error) + (error "You aren't editing a MIME message.") + ) (if (not nomime) (progn - (run-hooks 'mime-translate-hook) - (tm-edit/translate-buffer))) + (run-hooks 'mime-editor/translate-hook) + (mime-editor/translate-buffer))) ;; Restore previous state. - (setq mime-mode-flag nil) - (use-local-map mime-mode-old-local-map) + (setq mime/editor-mode-flag nil) + (use-local-map mime/editor-mode-old-local-map) ;; modified by Pekka Marjola ;; 1995/9/5 (c.f. [tm-eng:69]) (if (string-match "XEmacs\\|Lucid" emacs-version) (progn - (delete-menu-item '("MIME")) ; should rather be const - (while mime-xemacs-old-bindings - (eval (pop mime-xemacs-old-bindings))) + (delete-menu-item (list mime-editor/menu-title)) + ; should rather be const + ;; (while mime-editor/xemacs-old-bindings + ;; (eval (pop mime-editor/xemacs-old-bindings))) (local-unset-key mime-prefix))) ;; end - (setq selective-display mime-mode-old-selective-display) + (setq selective-display mime/editor-mode-old-selective-display) (set-buffer-modified-p (buffer-modified-p)) - (run-hooks 'mime-exit-hook) - (message "Exit MIME mode.") + (run-hooks 'mime-editor/exit-hook) + (message "Exit MIME editor mode.") )) -(defun tm-edit/exit-and-run () +(defun mime-editor/maybe-translate () (interactive) - (mime-mode-exit) - (call-interactively 'tm-edit/split-and-send) + (mime-editor/exit nil t) + (call-interactively 'mime-editor/split-and-send) ) -(defun help-mime-mode () +(defun mime-editor/help () "Show help message about MIME mode." (interactive) (with-output-to-temp-buffer "*Help*" - (princ "Edit MIME Mode:\n") - (princ (documentation 'mime-mode)) + (princ "MIME editor mode:\n") + (princ (documentation 'mime/editor-mode)) (print-help-return-message))) -(defun tm-edit/insert-text () +(defun mime-editor/insert-text () "Insert a text message. Charset is automatically obtained from the mime-body-charset-chooser." (interactive) - (if (and (tm-edit/insert-tag "text" nil nil) - (looking-at tm-edit/single-part-tag-regexp)) + (if (and (mime-editor/insert-tag "text" nil nil) + (looking-at mime-editor/single-part-tag-regexp)) (progn ;; Make a space between the following message. (insert "\n") (forward-char -1) ))) -(defun tm-edit/insert-file (file) +(defun mime-editor/insert-file (file) "Insert a message from a file." (interactive "fInsert file as MIME message: ") (let* ((guess (mime-find-file-type file)) @@ -822,7 +740,9 @@ Charset is automatically obtained from the mime-body-charset-chooser." (concat "What transfer encoding" (if default (concat " (default " - (if (string-equal default "") "\"\"" default) + (if (string-equal default "") + "\"\"" + default) ")" )) ": ") @@ -854,14 +774,14 @@ Charset is automatically obtained from the mime-body-charset-chooser." (setq rest (cdr rest)) ) )) - (tm-edit/insert-tag pritype subtype parameters) - (tm-edit/insert-binary-file file encoding) + (mime-editor/insert-tag pritype subtype parameters) + (mime-editor/insert-binary-file file encoding) )) -(defun tm-edit/insert-external () +(defun mime-editor/insert-external () "Insert a reference to external body." (interactive) - (tm-edit/insert-tag "message" "external-body" nil ";\n\t") + (mime-editor/insert-tag "message" "external-body" nil ";\n\t") ;;(forward-char -1) ;;(insert "Content-Description: " (read-string "Content-Description: ") "\n") ;;(forward-line 1) @@ -873,24 +793,24 @@ Charset is automatically obtained from the mime-body-charset-chooser." (insert "Content-Type: " pritype "/" subtype (or parameters "") "\n"))) (if (and (not (eobp)) - (not (looking-at tm-edit/single-part-tag-regexp))) + (not (looking-at mime-editor/single-part-tag-regexp))) (insert (mime-make-text-tag) "\n"))) -(defun tm-edit/insert-voice () +(defun mime-editor/insert-voice () "Insert a voice message." (interactive) - (tm-edit/insert-tag "audio" "basic" nil) + (mime-editor/insert-tag "audio" "basic" nil) (let ((buffer (funcall mime-voice-recorder))) (unwind-protect - (tm-edit/insert-binary-buffer buffer "base64") + (mime-editor/insert-binary-buffer buffer "base64") (kill-buffer buffer) ))) -(defun tm-edit/insert-signature () +(defun mime-editor/insert-signature () "Insert a signature file specified by mime-signature-file." (interactive) (save-restriction - (apply (function tm-edit/insert-tag) + (apply (function mime-editor/insert-tag) (prog1 (mime-find-file-type (insert-signature)) (narrow-to-region (point-min)(point)) @@ -899,7 +819,7 @@ Charset is automatically obtained from the mime-body-charset-chooser." ;; Insert a new tag around a point. -(defun tm-edit/insert-tag (&optional pritype subtype parameters delimiter) +(defun mime-editor/insert-tag (&optional pritype subtype parameters delimiter) "Insert new MIME tag and return a list of PRITYPE, SUBTYPE, and PARAMETERS. If nothing is inserted, return nil." (interactive) @@ -920,21 +840,22 @@ If nothing is inserted, return nil." ;; Find an current MIME tag. (setq oldtag (save-excursion - (if (tm-edit/goto-tag) + (if (mime-editor/goto-tag) (buffer-substring (match-beginning 0) (match-end 0)) ;; Assume content type is 'text/plan'. (mime-make-tag "text" "plain") ))) ;; We are only interested in TEXT. (if (and oldtag - (not (mime-test-content-type (tm-edit/get-contype oldtag) "text"))) + (not (mime-test-content-type + (mime-editor/get-contype oldtag) "text"))) (setq oldtag nil)) (beginning-of-line) (cond ((and oldtag ;Text (not (eobp)) (save-excursion (forward-line -1) - (looking-at tm-edit/beginning-tag-regexp) + (looking-at mime-editor/beginning-tag-regexp) ) (or mime-ignore-same-text-tag (not (string-equal oldtag newtag)))) @@ -943,18 +864,18 @@ If nothing is inserted, return nil." (forward-line -1)) ((and oldtag ;Text (not (eobp)) - (not (looking-at tm-edit/tag-regexp)) + (not (looking-at mime-editor/tag-regexp)) (or mime-ignore-same-text-tag (not (string-equal oldtag newtag)))) ;; Copy current tag to break a text into two. (save-excursion (insert oldtag "\n"))) ((and (null oldtag) ;Not text - (not (looking-at tm-edit/tag-regexp))) + (not (looking-at mime-editor/tag-regexp))) ;; Adjust insertion point. In the middle of text, it is ;; okay to break the text into two. However, it should not ;; be broken into two, if otherwise. - (goto-char (tm-edit/content-end)) + (goto-char (mime-editor/content-end)) (if (eolp) (forward-line 1)) (if (not (bolp)) @@ -979,7 +900,7 @@ If nothing is inserted, return nil." ;; Insert the binary content after MIME tag. ;; modified by MORITA Masahiro ;; for x-uue -(defun tm-edit/insert-binary-file (file &optional encoding) +(defun mime-editor/insert-binary-file (file &optional encoding) "Insert binary FILE at point. Optional argument ENCODING specifies an encoding method such as base64." (let ((tmpbuf (get-buffer-create " *MIME insert*"))) @@ -1004,15 +925,15 @@ Optional argument ENCODING specifies an encoding method such as base64." (cons (car uuencode-external-encoder) (list (file-name-nondirectory file)) ))) - (tm-edit/insert-binary-buffer tmpbuf encoding) + (mime-editor/insert-binary-buffer tmpbuf encoding) )) - (tm-edit/insert-binary-buffer tmpbuf encoding)) + (mime-editor/insert-binary-buffer tmpbuf encoding)) (kill-buffer tmpbuf)))) ;; Insert the binary content after MIME tag. ;; modified by MORITA Masahiro ;; for x-uue -(defun tm-edit/insert-binary-buffer (buffer &optional encoding) +(defun mime-editor/insert-binary-buffer (buffer &optional encoding) "Insert binary BUFFER at point. Optional argument ENCODING specifies an encoding method such as base64." (let* ((tagend (1- (point))) ;End of the tag @@ -1040,18 +961,19 @@ Optional argument ENCODING specifies an encoding method such as base64." (if (stringp encoding) (save-excursion (goto-char tagend) ;Make sure which line the tag is on. - (tm-edit/define-encoding encoding))) + (mime-editor/define-encoding encoding))) )) + ;; Commands work on a current message flagment. -(defun tm-edit/goto-tag () +(defun mime-editor/goto-tag () "Search for the beginning of the tagged MIME message." (let ((current (point)) multipart) - (if (looking-at tm-edit/tag-regexp) + (if (looking-at mime-editor/tag-regexp) t ;; At first, go to the end. - (cond ((re-search-forward tm-edit/beginning-tag-regexp nil t) + (cond ((re-search-forward mime-editor/beginning-tag-regexp nil t) (goto-char (match-beginning 0)) ;For multiline tag (forward-line -1) (end-of-line) @@ -1060,9 +982,9 @@ Optional argument ENCODING specifies an encoding method such as base64." (goto-char (point-max)) )) ;; Then search for the beginning. - (re-search-backward tm-edit/end-tag-regexp nil t) + (re-search-backward mime-editor/end-tag-regexp nil t) (beginning-of-line) - (or (looking-at tm-edit/beginning-tag-regexp) + (or (looking-at mime-editor/beginning-tag-regexp) ;; Restore previous point. (progn (goto-char current) @@ -1070,12 +992,12 @@ Optional argument ENCODING specifies an encoding method such as base64." )) ))) -(defun tm-edit/content-beginning () +(defun mime-editor/content-beginning () "Return the point of the beginning of content." (save-excursion (let ((beg (save-excursion (beginning-of-line) (point)))) - (if (tm-edit/goto-tag) + (if (mime-editor/goto-tag) (let ((top (point))) (goto-char (match-end 0)) (if (and (= beg top) @@ -1092,12 +1014,12 @@ Optional argument ENCODING specifies an encoding method such as base64." (point)) ))) -(defun tm-edit/content-end () +(defun mime-editor/content-end () "Return the point of the end of content." (save-excursion (let ((beg (save-excursion (beginning-of-line) (point)))) - (if (tm-edit/goto-tag) + (if (mime-editor/goto-tag) (let ((top (point))) (goto-char (match-end 0)) (if (and (= beg top) ;Must be on the same line. @@ -1106,52 +1028,52 @@ Optional argument ENCODING specifies an encoding method such as base64." (end-of-line) (point)) ;; Move to the end of this text. - (if (re-search-forward tm-edit/tag-regexp nil 'move) + (if (re-search-forward mime-editor/tag-regexp nil 'move) ;; Don't forget a multiline tag. (goto-char (match-beginning 0))) (point) )) ;; Assume the message begins with text/plain. - (goto-char (tm-edit/content-beginning)) - (if (re-search-forward tm-edit/tag-regexp nil 'move) + (goto-char (mime-editor/content-beginning)) + (if (re-search-forward mime-editor/tag-regexp nil 'move) ;; Don't forget a multiline tag. (goto-char (match-beginning 0))) (point)) ))) -(defun tm-edit/define-charset (charset) +(defun mime-editor/define-charset (charset) "Set charset of current tag to CHARSET." (save-excursion - (if (tm-edit/goto-tag) + (if (mime-editor/goto-tag) (let ((tag (buffer-substring (match-beginning 0) (match-end 0)))) (delete-region (match-beginning 0) (match-end 0)) (insert (mime-create-tag (mime-set-parameter - (tm-edit/get-contype tag) "charset" charset) - (tm-edit/get-encoding tag)))) + (mime-editor/get-contype tag) "charset" charset) + (mime-editor/get-encoding tag)))) ))) -(defun tm-edit/define-encoding (encoding) +(defun mime-editor/define-encoding (encoding) "Set encoding of current tag to ENCODING." (save-excursion - (if (tm-edit/goto-tag) + (if (mime-editor/goto-tag) (let ((tag (buffer-substring (match-beginning 0) (match-end 0)))) (delete-region (match-beginning 0) (match-end 0)) - (insert (mime-create-tag (tm-edit/get-contype tag) encoding))) + (insert (mime-create-tag (mime-editor/get-contype tag) encoding))) ))) -(defun tm-edit/choose-charset () +(defun mime-editor/choose-charset () "Choose charset of a text following current point." (save-excursion (let* ((beg (point)) - (end (tm-edit/content-end))) + (end (mime-editor/content-end))) (car (funcall mime-body-charset-chooser beg end))))) -(defun tm-edit/choose-encoding () +(defun mime-editor/choose-encoding () "Choose encoding of a text following current point." (save-excursion (let* ((beg (point)) - (end (tm-edit/content-end))) + (end (mime-editor/content-end))) (cdr (funcall mime-body-charset-chooser beg end))))) (defun mime-make-text-tag (&optional subtype) @@ -1178,20 +1100,20 @@ Otherwise, it is obtained from mime-content-types." (format (if encoding mime-tag-format-with-encoding mime-tag-format) contype encoding)) -(defun tm-edit/get-contype (tag) +(defun mime-editor/get-contype (tag) "Return Content-Type (including parameters) of TAG." (and (stringp tag) - (or (string-match tm-edit/single-part-tag-regexp tag) - (string-match tm-edit/multipart-beginning-regexp tag) - (string-match tm-edit/multipart-end-regexp tag) + (or (string-match mime-editor/single-part-tag-regexp tag) + (string-match mime-editor/multipart-beginning-regexp tag) + (string-match mime-editor/multipart-end-regexp tag) ) (substring tag (match-beginning 1) (match-end 1)) )) -(defun tm-edit/get-encoding (tag) +(defun mime-editor/get-encoding (tag) "Return encoding of TAG." (and (stringp tag) - (string-match tm-edit/single-part-tag-regexp tag) + (string-match mime-editor/single-part-tag-regexp tag) (match-beginning 3) (not (= (match-beginning 3) (match-end 3))) (substring tag (match-beginning 3) (match-end 3)))) @@ -1383,14 +1305,14 @@ while if FLAG is `\\^M' (control-M) the text is hidden." ;; Translate the tagged MIME messages into a MIME compliant message. -(defun tm-edit/translate-buffer () +(defun mime-editor/translate-buffer () "Encode the tagged MIME message in current buffer in MIME compliant message." (interactive) (mime/encode-message-header) - (tm-edit/translate-body) + (mime-editor/translate-body) ) -(defun tm-edit/translate-body () +(defun mime-editor/translate-body () "Encode the tagged MIME body in current buffer in MIME compliant message." (interactive) (save-excursion @@ -1399,7 +1321,7 @@ while if FLAG is `\\^M' (control-M) the text is hidden." (i 1) (time (current-time-string)) ret) - (while (tm-edit/process-multipart-1 + (while (mime-editor/process-multipart-1 (format "%s %s-%d" mime-multipart-boundary time i)) (setq i (1+ i)) ) @@ -1420,7 +1342,7 @@ while if FLAG is `\\^M' (control-M) the text is hidden." (re-search-backward "[^ \t\n]\n" beg t) (forward-char 1)) (point)))) - (setq ret (tm-edit/translate-region + (setq ret (mime-editor/translate-region beg end (format "%s %s-%d" mime-multipart-boundary time i))) )) @@ -1429,7 +1351,7 @@ while if FLAG is `\\^M' (control-M) the text is hidden." ) ;; Make primary MIME headers. (or (mail-position-on-field "Mime-Version") - (insert tm-edit/mime-version-value)) + (insert mime-editor/mime-version-value)) ;; Remove old Content-Type and other fields. (save-restriction (goto-char (point-min)) @@ -1447,30 +1369,30 @@ while if FLAG is `\\^M' (control-M) the text is hidden." (insert encoding))) )))) -(defun tm-edit/normalize-body () +(defun mime-editor/normalize-body () "Normalize the body part by inserting appropriate message tags." ;; Insert the first MIME tags if necessary. (goto-char (point-min)) - (if (not (looking-at tm-edit/single-part-tag-regexp)) + (if (not (looking-at mime-editor/single-part-tag-regexp)) (insert (mime-make-text-tag) "\n")) ;; Check each tag, and add new tag or correct it if necessary. (goto-char (point-min)) - (while (re-search-forward tm-edit/single-part-tag-regexp nil t) + (while (re-search-forward mime-editor/single-part-tag-regexp nil t) (let* ((tag (buffer-substring (match-beginning 0) (match-end 0))) - (contype (tm-edit/get-contype tag)) + (contype (mime-editor/get-contype tag)) (charset (mime-get-parameter contype "charset")) - (encoding (tm-edit/get-encoding tag))) + (encoding (mime-editor/get-encoding tag))) ;; Remove extra whitespaces after the tag. (if (looking-at "[ \t]+$") (delete-region (match-beginning 0) (match-end 0))) (cond ((= (following-char) ?\^M) ;; It must be image, audio or video. (let ((beg (point)) - (end (tm-edit/content-end))) + (end (mime-editor/content-end))) ;; Insert explicit MIME tags after hidden messages. (forward-line 1) (if (and (not (eobp)) - (not (looking-at tm-edit/single-part-tag-regexp))) + (not (looking-at mime-editor/single-part-tag-regexp))) (progn (insert (mime-make-text-tag) "\n") (forward-line -1) ;Process it again as text. @@ -1483,14 +1405,14 @@ while if FLAG is `\\^M' (control-M) the text is hidden." (forward-line 1)) ((mime-test-content-type contype "text") ;; Define charset for text if necessary. - (setq charset (or charset (tm-edit/choose-charset))) - (tm-edit/define-charset charset) + (setq charset (or charset (mime-editor/choose-charset))) + (mime-editor/define-charset charset) ;; Point is now on current tag. ;; Define encoding and encode text if necessary. (if (null encoding) ;Encoding is not specified. - (let* ((encoding (tm-edit/choose-encoding)) - (beg (tm-edit/content-beginning)) - (end (tm-edit/content-end)) + (let* ((encoding (mime-editor/choose-encoding)) + (beg (mime-editor/content-beginning)) + (end (mime-editor/content-end)) (body (buffer-substring beg end)) (encoded (funcall mime-string-encoder (cons charset encoding) body))) @@ -1500,15 +1422,15 @@ while if FLAG is `\\^M' (control-M) the text is hidden." (delete-region beg end) (insert encoded) (goto-char beg))) - (tm-edit/define-encoding encoding))) + (mime-editor/define-encoding encoding))) (forward-line 1)) ((null encoding) ;Encoding is not specified. ;; Application, image, audio, video, and any other ;; unknown content-type without encoding should be ;; encoded. (let* ((encoding "base64") ;Encode in BASE64 by default. - (beg (tm-edit/content-beginning)) - (end (tm-edit/content-end)) + (beg (mime-editor/content-beginning)) + (end (mime-editor/content-end)) (body (buffer-substring beg end)) (encoded (funcall mime-string-encoder (cons nil encoding) body))) @@ -1518,7 +1440,7 @@ while if FLAG is `\\^M' (control-M) the text is hidden." (delete-region beg end) (insert encoded) (goto-char beg))) - (tm-edit/define-encoding encoding)) + (mime-editor/define-encoding encoding)) (forward-line 1)) ) ))) @@ -1745,87 +1667,25 @@ a recording host instead of local host." ))))) -;;; -;;; Other useful commands. +;;; @ Other useful commands. ;;; ;; Message forwarding commands as content-type "message/rfc822". -(defun tm-edit/insert-message (&optional message) +(defun mime-editor/insert-message (&optional message) (interactive) - (let ((inserter (assoc-value major-mode tm-edit/message-inserter-alist))) + (let ((inserter (assoc-value major-mode mime-editor/message-inserter-alist))) (if (and inserter (fboundp inserter)) (progn - (tm-edit/insert-tag "message" "rfc822") + (mime-editor/insert-tag "message" "rfc822") (funcall inserter message) ) (message "Sorry, I don't have message inserter for your MUA.") ))) -;;;###autoload -;;; (defun mime-forward-from-rmail-using-mail () -;;; "Forward current message in message/rfc822 content-type message from rmail. -;;; The message will be appended if being composed." -;;; (interactive) -;;; ;;>> this gets set even if we abort. Can't do anything about it, though. -;;; (rmail-set-attribute "forwarded" t) -;;; (let ((initialized nil) -;;; (beginning nil) -;;; (forwarding-buffer (current-buffer)) -;;; (subject (concat "[" -;;; (mail-strip-quoted-names (mail-fetch-field "From")) -;;; ": " (or (mail-fetch-field "Subject") "") "]"))) -;;; ;; If only one window, use it for the mail buffer. -;;; ;; Otherwise, use another window for the mail buffer -;;; ;; so that the Rmail buffer remains visible -;;; ;; and sending the mail will get back to it. -;;; (setq initialized -;;; (if (one-window-p t) -;;; (mail nil nil subject) -;;; (mail-other-window nil nil subject))) -;;; (save-excursion -;;; (goto-char (point-max)) -;;; (forward-line 1) -;;; (setq beginning (point)) -;;; (tm-edit/insert-tag "message" "rfc822") -;;; (insert-buffer forwarding-buffer)) -;;; (if (not initialized) -;;; (goto-char beginning)) -;;; )) - -;;;###autoload -;;; (defun mime-forward-from-gnus-using-mail () -;;; "Forward current article in message/rfc822 content-type message from GNUS. -;;; The message will be appended if being composed." -;;; (let ((initialized nil) -;;; (beginning nil) -;;; (forwarding-buffer (current-buffer)) -;;; (subject -;;; (concat "[" gnus-newsgroup-name "] " -;;; ;;(mail-strip-quoted-names (gnus-fetch-field "From")) ": " -;;; (or (gnus-fetch-field "Subject") "")))) -;;; ;; If only one window, use it for the mail buffer. -;;; ;; Otherwise, use another window for the mail buffer -;;; ;; so that the Rmail buffer remains visible -;;; ;; and sending the mail will get back to it. -;;; (setq initialized -;;; (if (one-window-p t) -;;; (mail nil nil subject) -;;; (mail-other-window nil nil subject))) -;;; (save-excursion -;;; (goto-char (point-max)) -;;; (setq beginning (point)) -;;; (tm-edit/insert-tag "message" "rfc822") -;;; (insert-buffer forwarding-buffer) -;;; ;; You have a chance to arrange the message. -;;; (run-hooks 'gnus-mail-forward-hook) -;;; ) -;;; (if (not initialized) -;;; (goto-char beginning)) -;;; )) - ;;; mime.el ends here -(defun tm-edit/translate-region (beg end &optional boundary multipart) + +(defun mime-editor/translate-region (beg end &optional boundary multipart) (if (null boundary) (setq boundary (concat mime-multipart-boundary " " (current-time-string))) @@ -1839,31 +1699,31 @@ a recording host instead of local host." (nparts 0)) ;Number of body parts ;; Normalize the body part by inserting appropriate message ;; tags for every message contents. - (tm-edit/normalize-body) + (mime-editor/normalize-body) ;; Counting the number of Content-Type. (goto-char (point-min)) - (while (re-search-forward tm-edit/single-part-tag-regexp nil t) + (while (re-search-forward mime-editor/single-part-tag-regexp nil t) (setq nparts (1+ nparts))) ;; Begin translation. (cond ((and (<= nparts 1)(not multipart)) ;; It's a singular message. (goto-char (point-min)) - (while (re-search-forward tm-edit/single-part-tag-regexp nil t) + (while (re-search-forward mime-editor/single-part-tag-regexp nil t) (setq tag (buffer-substring (match-beginning 0) (match-end 0))) (delete-region (match-beginning 0) (1+ (match-end 0))) - (setq contype (tm-edit/get-contype tag)) - (setq encoding (tm-edit/get-encoding tag)) + (setq contype (mime-editor/get-contype tag)) + (setq encoding (mime-editor/get-encoding tag)) )) (t ;; It's a multipart message. (goto-char (point-min)) - (while (re-search-forward tm-edit/single-part-tag-regexp nil t) + (while (re-search-forward mime-editor/single-part-tag-regexp nil t) (setq tag (buffer-substring (match-beginning 0) (match-end 0))) (delete-region (match-beginning 0) (match-end 0)) - (setq contype (tm-edit/get-contype tag)) - (setq encoding (tm-edit/get-encoding tag)) + (setq contype (mime-editor/get-contype tag)) + (setq encoding (mime-editor/get-encoding tag)) (insert "--" boundary "\n") (insert "Content-Type: " contype "\n") (if encoding @@ -1887,9 +1747,9 @@ a recording host instead of local host." )))) -(defun tm-edit/find-inmost () +(defun mime-editor/find-inmost () (goto-char (point-min)) - (if (re-search-forward tm-edit/multipart-beginning-regexp nil t) + (if (re-search-forward mime-editor/multipart-beginning-regexp nil t) (let ((bb (match-beginning 0)) (be (match-end 0)) (type (buffer-substring (match-beginning 1)(match-end 1))) @@ -1906,18 +1766,18 @@ a recording host instead of local host." ) (narrow-to-region be eb) (goto-char be) - (if (re-search-forward tm-edit/multipart-beginning-regexp nil t) + (if (re-search-forward mime-editor/multipart-beginning-regexp nil t) (let (ret) (narrow-to-region (match-beginning 0)(point-max)) - (tm-edit/find-inmost) + (mime-editor/find-inmost) ) (widen) ;;(delete-region eb ee) (list type bb be eb) )))) -(defun tm-edit/process-multipart-1 (boundary) - (let ((ret (tm-edit/find-inmost))) +(defun mime-editor/process-multipart-1 (boundary) + (let ((ret (mime-editor/find-inmost))) (if ret (let ((type (car ret)) (bb (nth 1 ret))(be (nth 2 ret)) @@ -1929,15 +1789,15 @@ a recording host instead of local host." (setq eb (point-max)) (widen) (goto-char eb) - (if (looking-at tm-edit/multipart-end-regexp) + (if (looking-at mime-editor/multipart-end-regexp) (let ((beg (match-beginning 0)) (end (match-end 0)) ) (delete-region beg end) - (if (not (looking-at tm-edit/single-part-tag-regexp)) + (if (not (looking-at mime-editor/single-part-tag-regexp)) (insert (concat (mime-make-text-tag) "\n")) ))) - (setq boundary (nth 2 (tm-edit/translate-region bb eb boundary t))) + (setq boundary (nth 2 (mime-editor/translate-region bb eb boundary t))) (goto-char bb) (insert (format "--[[multipart/%s; boundary=\"%s\"][7bit]]\n" @@ -1949,7 +1809,7 @@ a recording host instead of local host." ;;; @ multipart enclosure ;;; -(defun tm-edit/enclose-region (type beg end) +(defun mime-editor/enclose-region (type beg end) (save-excursion (goto-char beg) (let ((f (bolp))) @@ -1976,7 +1836,7 @@ a recording host instead of local host." (forward-char) ) ) - (if (not (looking-at tm-edit/single-part-tag-regexp)) + (if (not (looking-at mime-editor/single-part-tag-regexp)) (insert (mime-make-text-tag) "\n") ) ) @@ -1985,138 +1845,172 @@ a recording host instead of local host." )) ))) -(defun tm-edit/enclose-mixed-region (beg end) +(defun mime-editor/enclose-mixed-region (beg end) (interactive "*r") - (tm-edit/enclose-region "mixed" beg end) + (mime-editor/enclose-region "mixed" beg end) ) -(defun tm-edit/enclose-parallel-region (beg end) +(defun mime-editor/enclose-parallel-region (beg end) (interactive "*r") - (tm-edit/enclose-region "parallel" beg end) + (mime-editor/enclose-region "parallel" beg end) ) -(defun tm-edit/enclose-digest-region (beg end) +(defun mime-editor/enclose-digest-region (beg end) (interactive "*r") - (tm-edit/enclose-region "digest" beg end) + (mime-editor/enclose-region "digest" beg end) ) -(defun tm-edit/enclose-alternative-region (beg end) +(defun mime-editor/enclose-alternative-region (beg end) (interactive "*r") - (tm-edit/enclose-region "alternative" beg end) + (mime-editor/enclose-region "alternative" beg end) ) ;;; @ split ;;; -(defun tm-edit/split-and-send (&optional cmd) +(defun mime-editor/insert-partial-header (fields subject id number total separator) + (insert fields) + (insert (format "Subject: %s (%d/%d)\n" subject number total)) + (insert (format "Mime-Version: 1.0 (split by tm-edit %s)\n" + mime-editor/version)) + (insert (format "\ +Content-Type: message/partial; id=%s; number=%d; total=%d\n%s\n" + id number total separator)) + ) + +(defun mime-editor/split-and-send (&optional cmd) (interactive) - (let ((tm-edit/message-max-length - (or (cdr (assq major-mode tm-edit/message-max-length-alist)) - tm-edit/message-default-max-length)) + (let ((mime-editor/message-max-length + (or (cdr (assq major-mode mime-editor/message-max-length-alist)) + mime-editor/message-default-max-length)) (lines (count-lines (point-min) (point-max))) ) - (if (or (<= lines tm-edit/message-max-length) - (not tm-edit/split-message)) - (call-interactively - (or cmd - (cdr (assq major-mode tm-edit/message-default-sender-alist)) - )) - (let* ((tm-edit/draft-file-name - (or (buffer-file-name) - (make-temp-name (expand-file-name "tm-draft" mime/tmp-dir)))) - (separator mail-header-separator) - (config - (eval (cdr (assq major-mode tm-edit/window-config-alist)))) - (id (concat "\"" - (replace-space-with-underline (current-time-string)) - "@" (system-name) "\""))) - - (let ((hook (cdr (assq major-mode - tm-edit/message-before-send-hook-alist)))) - (run-hooks hook)) - (let* ((header (rfc822/get-header-string-except - tm-edit/message-nuke-headers separator)) - (orig-header (rfc822/get-header-string-except - tm-edit/message-blind-headers separator)) - (subject (mail-fetch-field "subject")) - (total (+ (/ lines tm-edit/message-max-length) - (if (> (mod lines tm-edit/message-max-length) 0) - 1))) - (i 0) - (l tm-edit/message-max-length) - (the-buf (current-buffer)) - (buf (get-buffer "*tmp-send*")) - (command - (or cmd - (cdr (assq major-mode tm-edit/message-sender-alist)) - (cdr (assq major-mode tm-edit/message-default-sender-alist)))) - data) - (goto-char (point-min)) - (if (re-search-forward (concat "^" (regexp-quote separator) "$") - nil t) - (replace-match "") - ) - (if buf - (progn + (if (and (> lines mime-editor/message-max-length) mime-editor/split-message) + (let* ((mime-editor/draft-file-name + (or (buffer-file-name) + (make-temp-name + (expand-file-name "tm-draft" mime/tmp-dir)))) + (separator mail-header-separator) + (config + (eval (cdr (assq major-mode mime-editor/window-config-alist)))) + (id (concat "\"" + (replace-space-with-underline (current-time-string)) + "@" (system-name) "\""))) + (run-hooks 'mime-editor/before-split-hook) + (let* ((header (rfc822/get-header-string-except + mime-editor/message-nuke-headers separator)) + (subject (mail-fetch-field "subject")) + (total (+ (/ lines mime-editor/message-max-length) + (if (> (mod lines mime-editor/message-max-length) 0) + 1))) + (the-buf (current-buffer)) + (buf (get-buffer "*tmp-send*")) + (command + (or cmd + (cdr (assq major-mode + mime-editor/message-sender-alist)) + (cdr (assq major-mode + mime-editor/message-default-sender-alist)))) + data) + (goto-char (point-min)) + (if (re-search-forward (concat "^" (regexp-quote separator) "$") + nil t) + (replace-match "") + ) + (if buf + (progn + (switch-to-buffer buf) + (erase-buffer) + (switch-to-buffer the-buf) + ) + (setq buf (get-buffer-create "*tmp-send*")) + ) + (switch-to-buffer buf) + (make-variable-buffer-local 'mail-header-separator) + (setq mail-header-separator separator) + (switch-to-buffer the-buf) + (goto-char (point-min)) + (re-search-forward "^$" nil t) + (let ((mime-editor/partial-number 1)) + (setq data (buffer-substring + (point-min) + (progn + (goto-line mime-editor/message-max-length) + (point)) + )) + (delete-region (point-min)(point)) + (switch-to-buffer buf) + (mime-editor/insert-partial-header header subject + id mime-editor/partial-number total + separator) + (insert data) + (save-excursion + (save-restriction + (goto-char (point-min)) + (search-forward (concat "\n" mail-header-separator "\n")) + (narrow-to-region + (match-end 0) + (if (re-search-forward "^$" nil t) + (match-beginning 0) + (point-max) + )) + (goto-char (point-min)) + (while (re-search-forward mime-editor/blind-fields-regexp nil t) + (delete-region (match-beginning 0) + (let ((e (rfc822/field-end))) + (if (< e (point-max)) + (1+ e) + e))) + ) + )) + (save-excursion + (message (format "Sending %d/%d..." + mime-editor/partial-number total)) + (call-interactively command) + (message (format "Sending %d/%d... done" + mime-editor/partial-number total)) + ) + (erase-buffer) + (switch-to-buffer the-buf) + (setq mime-editor/partial-number 2) + (while (< mime-editor/partial-number total) + (setq data (buffer-substring + (point-min) + (progn + (goto-line mime-editor/message-max-length) + (point)) + )) + (delete-region (point-min)(point)) (switch-to-buffer buf) + (mime-editor/insert-partial-header header subject + id mime-editor/partial-number total + separator) + (insert data) + (save-excursion + (message (format "Sending %d/%d..." + mime-editor/partial-number total)) + (call-interactively command) + (message (format "Sending %d/%d... done" + mime-editor/partial-number total)) + ) (erase-buffer) (switch-to-buffer the-buf) + (setq mime-editor/partial-number (1+ mime-editor/partial-number)) ) - (setq buf (get-buffer-create "*tmp-send*")) - ) - (switch-to-buffer buf) - (make-variable-buffer-local 'mail-header-separator) - (setq mail-header-separator separator) - (switch-to-buffer the-buf) - (goto-char (point-min)) - (re-search-forward "^$" nil t) - (while (< i total) - (setq buf (get-buffer "*tmp-send*")) - (setq data (buffer-substring - (point) - (progn - (goto-line l) - (point)) - )) - (switch-to-buffer buf) - (insert header) - (insert - (format "Subject: %s (%d/%d)\n" subject (+ i 1) total)) - (insert - (format "Mime-Version: 1.0 (split by tm-edit %s)\n" - tm-edit/version)) - (insert - (format - "Content-Type: message/partial; id=%s; number=%d; total=%d\n%s\n" - id (+ i 1) total separator)) - (if (eq i 0) - (insert orig-header)) - (insert data) - (save-excursion - (call-interactively command)) - (erase-buffer) - (switch-to-buffer the-buf) - (setq l (+ l tm-edit/message-max-length)) - (setq i (+ i 1)) - ) - ) - (let ((hook - (cdr (assq major-mode tm-edit/message-after-send-hook-alist)))) - (run-hooks 'hook)) - (set-buffer-modified-p nil) - (cond ((y-or-n-p "Kill draft buffer? ") - (kill-buffer (current-buffer)) - (if config - (set-window-configuration config)))) - (message "") - )))) + (goto-char (point-min)) + (mime-editor/insert-partial-header header subject + id mime-editor/partial-number total + separator) + (message (format "Sending %d/%d..." + mime-editor/partial-number total)) + )))))) ;;; @ preview message ;;; -(defun tm-edit/preview-message () +(defun mime-editor/preview-message () "preview editing MIME message. [tm-edit.el]" (interactive) (let* ((str (buffer-string)) @@ -2141,8 +2035,8 @@ a recording host instead of local host." (make-local-variable 'mime/editing-buffer) (setq mime/editing-buffer the-buf) - (run-hooks 'mime-translate-hook) - (tm-edit/translate-buffer) + (run-hooks 'mime-editor/translate-hook) + (mime-editor/translate-buffer) (goto-char (point-min)) (if (re-search-forward (concat "^" (regexp-quote separator) "$")) @@ -2151,7 +2045,7 @@ a recording host instead of local host." (mime/viewer-mode) )) -(defun tm-edit/quitting-method () +(defun mime-editor/quitting-method () (let ((temp mime::preview/article-buffer) buf) (mime-viewer/kill-buffer) @@ -2163,7 +2057,7 @@ a recording host instead of local host." (set-alist 'mime-viewer/quitting-method-alist 'mime/temporary-message-mode - (function tm-edit/quitting-method) + (function mime-editor/quitting-method) ) @@ -2172,16 +2066,16 @@ a recording host instead of local host." ;; by "OKABE Yasuo ;; Mon, 10 Apr 1995 20:03:07 +0900 -(defvar tm-edit/draft-header-separator-alist +(defvar mime-editor/draft-header-separator-alist '((news-reply-mode . mail-header-separator) (mh-letter-mode . mail-header-separator) )) (defvar mime::article/draft-header-separator nil) -(defun tm-edit/draft-preview () +(defun mime-editor/draft-preview () (interactive) - (let ((sep (assoc-value major-mode tm-edit/draft-header-separator-alist))) + (let ((sep (assoc-value major-mode mime-editor/draft-header-separator-alist))) (or (stringp sep) (setq sep (eval sep))) (make-variable-buffer-local 'mime::article/draft-header-separator) (goto-char (point-min)) diff --git a/tm-rmail.el b/tm-rmail.el index 54c9b16..9fef7ea 100644 --- a/tm-rmail.el +++ b/tm-rmail.el @@ -4,7 +4,7 @@ ;;; ;;; Author: MORIOKA Tomohiko ;;; Version: -;;; $Id: tm-rmail.el,v 7.4 1995/10/24 00:19:52 morioka Exp $ +;;; $Id: tm-rmail.el,v 7.8 1995/10/30 05:52:36 morioka Exp $ ;;; Keywords: mail, MIME, multimedia, multilingual, encoded-word ;;; ;;; This file is part of tm (Tools for MIME). @@ -18,6 +18,16 @@ (autoload 'mime/Content-Type "tm-view" "parse Content-Type field.") (autoload 'mime/decode-message-header "tm-ew-d" "Decode MIME encoded-word." t) + +;;; @ variables +;;; + +(defvar tm-rmail/decode-all nil) + + +;;; @ message filter +;;; + (setq rmail-message-filter (function (lambda () @@ -27,6 +37,10 @@ (set-buffer-modified-p mf) )))) + +;;; @ MIME preview +;;; + (defun tm-rmail/show-all-header-p () (save-restriction (narrow-to-region (point-min) @@ -36,17 +50,45 @@ (re-search-forward rmail-ignored-headers nil t) )) -(defun tm-rmail/view-message () +(defun tm-rmail/preview-message () (interactive) + (setq tm-rmail/decode-all t) (let ((ret (rmail-widen-to-current-msgbeg (function (lambda () (cons (mime/Content-Type) (mail-fetch-field "Content-Transfer-Encoding")) ))))) - (mime/viewer-mode nil (car ret)(cdr ret)) + (mime/viewer-mode nil (car ret)(cdr ret) nil + (format "*Preview-%s [%d/%d]*" + (buffer-name) + rmail-current-message rmail-total-messages)) + )) + +(defun tm-rmail/preview-message-if-you-need () + (if tm-rmail/decode-all + (tm-rmail/preview-message) )) +(add-hook 'rmail-show-message-hook 'tm-rmail/preview-message-if-you-need) + +(define-key rmail-mode-map "v" (function tm-rmail/preview-message)) + +(defun tm-rmail/setup () + (local-set-key "v" (function + (lambda () + (interactive) + (pop-to-buffer rmail-buffer) + (tm-rmail/preview-message) + ))) + ) + +(add-hook 'rmail-summary-mode-hook 'tm-rmail/setup) + + +;;; @ over-to-* and quitting methods +;;; + (defun tm-rmail/quitting-method-to-summary () (mime-viewer/kill-buffer) (rmail-summary) @@ -54,32 +96,47 @@ ) (defun tm-rmail/quitting-method-to-article () + (setq tm-rmail/decode-all nil) (mime-viewer/kill-buffer) ) (defalias 'tm-rmail/quitting-method 'tm-rmail/quitting-method-to-article) -(define-key rmail-mode-map "v" (function tm-rmail/view-message)) - -(add-hook 'rmail-summary-mode-hook - (function - (lambda () - (local-set-key "v" - (function - (lambda () - (interactive) - (pop-to-buffer rmail-buffer) - (tm-rmail/view-message) - ))) - ))) - -(call-after-loaded 'tm-view - (function - (lambda () - (set-alist 'mime-viewer/quitting-method-alist - 'rmail-mode - (function tm-rmail/quitting-method)) - ))) + +(defun tm-rmail/over-to-previous-method () + (let (tm-rmail/decode-all) + (mime-viewer/quit) + ) + (if (not (eq (rmail-next-undeleted-message -1) t)) + (tm-rmail/preview-message) + ) + ) + +(defun tm-rmail/over-to-next-method () + (let (tm-rmail/decode-all) + (mime-viewer/quit) + ) + (if (not (eq (rmail-next-undeleted-message 1) t)) + (tm-rmail/preview-message) + ) + ) + +(call-after-loaded + 'tm-view + (function + (lambda () + (set-alist 'mime-viewer/quitting-method-alist + 'rmail-mode + (function tm-rmail/quitting-method)) + + (set-alist 'mime-viewer/over-to-previous-method-alist + 'rmail-mode + (function tm-rmail/over-to-previous-method)) + + (set-alist 'mime-viewer/over-to-next-method-alist + 'rmail-mode + (function tm-rmail/over-to-next-method)) + ))) ;;; @ for tm-partial @@ -110,6 +167,86 @@ ))) +;;; @ for tm-edit +;;; + +(call-after-loaded + 'tm-edit + (function + (lambda () + +(defun tm-rmail/forward () + "\ +Forward current message in message/rfc822 content-type message +from rmail. The message will be appended if being composed." + (interactive) + ;;>> this gets set even if we abort. Can't do anything about it, though. + (rmail-set-attribute "forwarded" t) + (let ((initialized nil) + (beginning nil) + (forwarding-buffer (current-buffer)) + (subject (concat "[" + (mail-strip-quoted-names + (mail-fetch-field "From")) + ": " (or (mail-fetch-field "Subject") "") "]"))) + ;; If only one window, use it for the mail buffer. + ;; Otherwise, use another window for the mail buffer + ;; so that the Rmail buffer remains visible + ;; and sending the mail will get back to it. + (setq initialized + (if (one-window-p t) + (mail nil nil subject) + (mail-other-window nil nil subject))) + (save-excursion + (goto-char (point-max)) + (forward-line 1) + (setq beginning (point)) + (tm-edit/insert-tag "message" "rfc822") + (insert-buffer forwarding-buffer)) + (if (not initialized) + (goto-char beginning)) + )) + +(substitute-key-definition 'rmail-forward + 'tm-rmail/forward + rmail-mode-map) + +(defun tm-rmail/forward-from-gnus () + "\ +Forward current article in message/rfc822 content-type message from +GNUS. The message will be appended if being composed." + (let ((initialized nil) + (beginning nil) + (forwarding-buffer (current-buffer)) + (subject + (concat "[" gnus-newsgroup-name "] " + ;;(mail-strip-quoted-names (gnus-fetch-field "From")) ": " + (or (gnus-fetch-field "Subject") "")))) + ;; If only one window, use it for the mail buffer. + ;; Otherwise, use another window for the mail buffer + ;; so that the Rmail buffer remains visible + ;; and sending the mail will get back to it. + (setq initialized + (if (one-window-p t) + (mail nil nil subject) + (mail-other-window nil nil subject))) + (save-excursion + (goto-char (point-max)) + (setq beginning (point)) + (mime-editor/insert-tag "message" "rfc822") + (insert-buffer forwarding-buffer) + ;; You have a chance to arrange the message. + (run-hooks 'gnus-mail-forward-hook) + ) + (if (not initialized) + (goto-char beginning)) + )) + +;; (setq gnus-mail-forward-method 'mime-forward-from-gnus-using-mail) + +))) + + ;;; @ end ;;; diff --git a/tm-view.el b/tm-view.el index 88dd0c6..7c88bd7 100644 --- a/tm-view.el +++ b/tm-view.el @@ -25,7 +25,7 @@ ;;; (defconst mime-viewer/RCS-ID - "$Id: tm-view.el,v 7.20 1995/10/24 00:21:02 morioka Exp $") + "$Id: tm-view.el,v 7.21 1995/10/30 05:57:27 morioka Exp $") (defconst mime-viewer/version (get-version-string mime-viewer/RCS-ID)) (defconst mime/viewer-version mime-viewer/version) @@ -251,21 +251,23 @@ ;;; @@ quitting method ;;; +(defun mime-viewer/quitting-method-for-mime/show-message-mode () + (set-window-configuration mime/show-mode-old-window-configuration) + (let ((mother mime/mother-buffer)) + (kill-buffer + (mime::preview-content-info/buffer (car mime::preview/content-list))) + (mime-viewer/kill-buffer) + (pop-to-buffer mother) + (goto-char (point-min)) + (mime-viewer/up-content) + )) + (defvar mime-viewer/quitting-method-alist '((mime/show-message-mode - . (lambda () - (set-window-configuration - mime/show-mode-old-window-configuration) - (let ((mother mime/mother-buffer)) - (kill-buffer - (mime::preview-content-info/buffer - (car mime::preview/content-list))) - (mime-viewer/kill-buffer) - (pop-to-buffer mother) - (goto-char (point-min)) - (mime-viewer/up-content) - ))) - )) + . mime-viewer/quitting-method-for-mime/show-message-mode))) + +(defvar mime-viewer/over-to-previous-method-alist nil) +(defvar mime-viewer/over-to-next-method-alist nil) ;;; @@ X-Face @@ -823,7 +825,13 @@ listed in key order: (throw 'tag (goto-char beg)) ) (setq i (- i 1)) - )) + ) + (let ((f (assq mime::preview/original-major-mode + mime-viewer/over-to-previous-method-alist))) + (if f + (funcall (cdr f)) + )) + ) )) (defun mime-viewer/next-content () @@ -838,7 +846,13 @@ listed in key order: (throw 'tag (goto-char beg)) ) (setq pcl (cdr pcl)) - )) + ) + (let ((f (assq mime::preview/original-major-mode + mime-viewer/over-to-next-method-alist))) + (if f + (funcall (cdr f)) + )) + ) )) (defun mime-viewer/scroll-up-content (&optional h) @@ -912,7 +926,7 @@ listed in key order: ) (let ((r (progn (switch-to-buffer buf) - (assoc major-mode mime-viewer/quitting-method-alist) + (assq major-mode mime-viewer/quitting-method-alist) ))) (if r (progn diff --git a/tm-vm.el b/tm-vm.el index 0c2479a..f539621 100644 --- a/tm-vm.el +++ b/tm-vm.el @@ -22,7 +22,7 @@ (require 'vm) (defconst tm-vm/RCS-ID - "$Id: tm-vm.el,v 7.2 1995/10/22 13:17:12 morioka Exp $") + "$Id: tm-vm.el,v 7.3 1995/10/28 06:00:09 morioka Exp $") (defconst tm-vm/version (get-version-string tm-vm/RCS-ID)) (define-key vm-mode-map "Z" 'tm-vm/view-message) @@ -160,6 +160,18 @@ all marked messages are affected, other messages are ignored." ))) +;;; @ for tm-edit +;;; + +(call-after-loaded + 'mime-setup + (function + (lambda () + (remove-hook 'mail-mode-hook 'mime/editor-mode) + (add-hook 'vm-mail-mode-hook 'mime/editor-mode) + ))) + + ;;; @ end ;;; -- 1.7.10.4