tm 7.21.
authormorioka <morioka>
Mon, 9 Mar 1998 11:22:24 +0000 (11:22 +0000)
committermorioka <morioka>
Mon, 9 Mar 1998 11:22:24 +0000 (11:22 +0000)
15 files changed:
Changes-7.21.en [new file with mode: 0644]
Changes-7.21.ja [new file with mode: 0644]
Makefile
gnus/Makefile
gnus/tm-gnus.el
gnus/tm-gnus4.el
gnus/tm-sgnus.el
mh-e/Makefile
mh-e/tm-mh-e.el
mime-setup.el
mk-tm
tm-edit.el
tm-rmail.el
tm-view.el
tm-vm.el

diff --git a/Changes-7.21.en b/Changes-7.21.en
new file mode 100644 (file)
index 0000000..5a55202
--- /dev/null
@@ -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 (file)
index 0000000..175ef66
--- /dev/null
@@ -0,0 +1,125 @@
+* mel
+
+  Version 3.1 \e$B$rE:IU$7$?!#\e(B
+
+mel/mel.el
+----------------------------
+revision 3.1
+date: 1995/10/30 06:03:37;  author: morioka;  state: Exp;  lines: +18 -14
+(1) mel-u.el \e$B$N\e(B uuencode-decode-region \e$B$N@_Dj$r9T$C$?!#\e(B
+(2) \e$BJQ?t\e(B mime-decoding-method-alist \e$B$r@_$1$F!"4X?t\e(B mime/decode-region
+    \e$B$G$N\e(B decoder \e$B$NA*Br$K$3$l$rMQ$$$k$h$&$K$7$?!#\e(B
+----------------------------
+
+mel/mel-u.el
+----------------------------
+revision 2.0
+date: 1995/10/30 06:01:29;  author: morioka;  state: Exp;  lines: +51 -1
+\e$B4X?t\e(B uuencode-decode-region \e$B$rDI2C$7$?!#\e(B
+----------------------------
+
+
+* tm
+
+tm/mime-setup.el
+----------------------------
+revision 7.9
+date: 1995/10/28 06:02:53;  author: morioka;  state: Exp;  lines: +38 -39
+(1) VM \e$BMQ$N@_Dj$rA4$F:o=|$7$?!#\e(B
+(2) mime-setup-load-hook \e$B$r@_$1$?!#\e(B
+(3) \e$BJQ?t\e(B mime/editor-mode-hook \e$B$K\e(B encoded-word \e$B$N\e(B decode \e$BMQ$N\e(B code \e$B$r\e(B
+    \e$BF~$l!"$=$l0J30$NItJ,$K$"$C$?\e(B mime/decode-message-header \e$B$r8F$V@_Dj\e(B
+    \e$B$r:o=|$7$?!#\e(B
+----------------------------
+revision 7.8
+date: 1995/10/27 08:36:13;  author: morioka;  state: Exp;  lines: +2 -16
+mh-letter-mode-hook \e$B$KBP$7$F\e(B append mode \e$B$G\e(B add-hook \e$B$9$k$h$&$K$7$?!#\e(B
+----------------------------
+
+tm/tm-edit.el
+----------------------------
+revision 7.14
+date: 1995/10/29 06:15:49;  author: morioka;  state: Exp;  lines: +6 -120
+\e$BITMW$J\e(B comment \e$B$r:o=|$7$?!#\e(B
+----------------------------
+revision 7.13
+date: 1995/10/28 05:48:36;  author: morioka;  state: Exp;  lines: +501 -463
+(1) prefix \e$B$r\e(B ``tm-edit/'' \e$B$+$i\e(B ``mime-editor/'' \e$B$KJQ$($?!#\e(B
+(2) mime-mode \e$B$r\e(B mime/editor-mode \e$B$KJQ$($?!#\e(B
+(3) \e$BH/?.MQ$N\e(B key \e$B$r@_Dj$9$k$N$r$d$a!"3F\e(B MUA \e$B$NH/?.D>A0$K8F$P$l$k\e(B hook
+    \e$B$K4X?t\e(B mime-editor/maybe-translate \e$B$r@_Dj$9$k$h$&$K$7$?!#\e(B
+(4) \e$B$$$m$$$m$JIT6q9g$r=$@5$7$?!#\e(B
+----------------------------
+revision 7.12
+date: 1995/10/27 11:18:22;  author: morioka;  state: Exp;  lines: +13 -43
+\e$BDj?t\e(B mime-menu \e$B$r\e(B tm-edit/menu \e$B$K\e(B rename \e$B$9$k$N$rK:$l$F$$$?ItJ,$r=$@5\e(B
+\e$B$7$?!#\e(B
+----------------------------
+
+tm/tm-view.el
+----------------------------
+revision 7.21
+date: 1995/10/30 05:57:27;  author: morioka;  state: Exp;  lines: +31 -17
+message \e$B$N@hF,\e(B content \e$B$+$iA0$K9T$3$&$H$9$k;~$K8F$P$l$k\e(B
+`mime-viewer/over-to-previous-method-alist' \e$B$H\e(B message \e$B$NKvHx$N\e(B
+content \e$B$+$i<!$N\e(B content \e$B$K9T$3$&$H$9$k;~$K8F$P$l$k\e(B
+`mime-viewer/over-to-next-method-alist' \e$B$r@_$1$?!#\e(B
+----------------------------
+
+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 \e$B$r9T$C$?!#\e(B
+----------------------------
+
+tm/tm-vm.el
+----------------------------
+revision 7.3
+date: 1995/10/28 06:00:09;  author: morioka;  state: Exp;  lines: +13 -1
+mime-setup \e$BBP:vMQ$N\e(B code \e$B$rF~$l$?!#\e(B
+----------------------------
+
+
+* tm/mh-e
+
+  Version 7.10 \e$B$rE:IU$7$?!#\e(B
+
+tm/mh-e/tm-mh-e.el
+----------------------------
+revision 7.10
+date: 1995/10/30 03:19:18;  author: morioka;  state: Exp;  lines: +2 -2
+\e$BJQ?t\e(B tm-edit/message-inserter-alist \e$B$,\e(B
+`mime-editor/message-inserter-alist' \e$B$K2~L>$5$l$?$N$KH<$$!"\e(Btm-edit \e$B$N\e(B
+\e$B@_Dj$r=$@5$7$?!#\e(B
+----------------------------
+
+
+* tm/gnus
+
+  Version 7.12 \e$B$rE:IU$7$?!#\e(B
+
+tm/gnus/tm-gnus4.el
+----------------------------
+revision 7.1
+date: 1995/10/28 05:44:44;  author: morioka;  state: Exp;  lines: +1 -98
+tm-comp \e$BMQ$N@_Dj$r:o=|$7$?!#\e(B
+----------------------------
+
+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 \e$B$N\e(B decode \e$B$@$1$r9T$&\e(B mode\e$B!J\e(Btm-gnus/decode-all \e$B$,\e(B nil
+    \e$B$G$"$k>uBV!K$rGQ;_$7$?!#$3$l$KH<$$!"JQ?t\e(B tm-gnus/decode-all \e$B$rGQ;_\e(B
+    \e$B$7$?!#\e(B
+(2) \e$B4X?t\e(B gnus-article-hide-headers-if-wanted \e$B$r:FDj5A$9$k$h$&$K$7$?!#\e(B
+(3) \e$BJQ?t\e(B tm-gnus/automatic-mime-preview \e$B$r@_$1$?!#$3$l$OJQ?t\e(B
+    gnus-show-mime \e$B$KBeF~$5$l$k!#!J\e(Bdefault \e$B$N>uBV$G\e(B automatic MIME
+    preview mode \e$B$K$7!"$J$*$+$D!"\e(Buser \e$B$,=i4|>uBV$r@_Dj$G$-$k$h$&$K$9$k\e(B
+    \e$B$?$a!K\e(B
+----------------------------
+revision 7.11
+date: 1995/10/27 10:19:38;  author: morioka;  state: Exp;  lines: +3 -1
+BBDB \e$BBP:vMQ$N@_Dj$r$^$?$^$?=$@5!#\e(B
+----------------------------
index 8f6db0a..91dc3cc 100644 (file)
--- 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:
index cf062b7..94915f4 100644 (file)
@@ -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:
index 460dc80..657d1cd 100644 (file)
@@ -6,7 +6,7 @@
 ;;;
 ;;; Author: Morioka Tomohiko <morioka@jaist.ac.jp>
 ;;; 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)
index d7d41f1..123b728 100644 (file)
@@ -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"))
          (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
 ;;;
 
index 038929f..3ce2136 100644 (file)
@@ -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"))
 ;;; @ 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
index 7f31ccc..489a3c5 100644 (file)
@@ -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:
index c059ea3..4aa2977 100644 (file)
@@ -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))
     )))
 
index f97680c..8936601 100644 (file)
@@ -6,7 +6,7 @@
 ;;;
 ;;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
 ;;; 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).
 
 (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
 ;;;
 (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
   )
 
 
+;;; @ 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
                     (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 (file)
--- 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
index 0329458..8533700 100644 (file)
 
 ;; 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:
 ;;
 ;; 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:
 
 ;;; @ 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)
+
 \f
-(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 <pema@niksula.hut.fi>
 ;;;    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 <pema@niksula.hut.fi>
-    ;;         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 <pema@niksula.hut.fi>
-    ;;         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 <pema@niksula.hut.fi>
     ;;         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 <pema@niksula.hut.fi>
     ;; 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."
 \f
 ;; 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 <hiro@isl.ntt.JP>
 ;;     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 <hiro@isl.ntt.JP>
 ;;     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)))
     ))
+
 \f
 ;; 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."
 \f
 ;; 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."
              )))))
 
 \f
-;;;
-;;; 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 <okabe@kudpc.kyoto-u.ac.jp>
 ;;      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))
index 54c9b16..9fef7ea 100644 (file)
@@ -4,7 +4,7 @@
 ;;;
 ;;; Author:   MORIOKA Tomohiko <morioka@jaist.ac.jp>
 ;;; 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).
 (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 ()
           (set-buffer-modified-p mf)
           ))))
 
+
+;;; @ MIME preview
+;;;
+
 (defun tm-rmail/show-all-header-p ()
   (save-restriction
     (narrow-to-region (point-min)
     (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)
   )
 
 (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
     )))
 
 
+;;; @ 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
 ;;;
 
index 88dd0c6..7c88bd7 100644 (file)
@@ -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)
 ;;; @@ 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
index 0c2479a..f539621 100644 (file)
--- 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
 ;;;