tm 6.80.
[elisp/tm.git] / tm-comp.el
index 32ff347..ef6b7cb 100644 (file)
@@ -11,7 +11,6 @@
 ;;;         and YAMAOKA Katsumi <yamaoka@ga.sony.co.jp>
 ;;;
 
-(require 'tm-misc)
 (require 'tm-view)
 (require 'tl-header)
 (require 'tl-list)
@@ -22,7 +21,7 @@
 ;;;
 
 (defconst mime/composer-RCS-ID
-  "$Id: tm-comp.el,v 6.3 1995/04/18 16:38:42 morioka Exp $")
+  "$Id: tm-comp.el,v 6.11 1995/09/04 00:47:37 morioka Exp $")
 
 (defconst mime/composer-version (get-version-string mime/composer-RCS-ID))
 
@@ -36,9 +35,8 @@
   '((news-reply-mode . 500)))
 
 (defconst mime/message-nuke-headers
-  "\\(^[Cc]ontent-\\|^[Ss]ubject:\\|^[Mm][Ii][Mm][Ee]-[Vv]ersion:\\)")
-(defvar mime/message-blind-headers
-  "\\(^[BDFbdf][Cc][Cc]:\\|^[Cc][Cc]:[ \t]*$\\)")
+  "\\(^Content-\\|^Subject:\\|^MIME-Version:\\)")
+(defvar mime/message-blind-headers "\\(^[BDFbdf]cc:\\|^cc:[ \t]*$\\)")
 
 (defvar mime/message-default-sender-alist
   '((mail-mode . mail-send-and-exit)
                        (message 
                          (format "Sending %d/%d... done" (+ i 1) total))
                              ))
-    (news-reply-mode . (lambda ()
-                        (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))
-                          ))
     ))
-                    
+
 
 (defvar mime/window-config-alist
   '((mail-mode       . nil)
     (mh-letter-mode  . mh-previous-window-config)
-    (news-reply-mode . (prog1
-                          gnus-winconf-post-news
-                        (setq gnus-winconf-post-news nil)
-                        ))
+    (news-reply-mode . (cond ((boundp 'gnus-winconf-post-news)
+                             (prog1
+                                 gnus-winconf-post-news
+                               (setq gnus-winconf-post-news nil)
+                               ))
+                            ((boundp 'gnus-prev-winconf)
+                             (prog1
+                                 gnus-prev-winconf
+                               (setq gnus-prev-winconf nil)
+                               ))
+                            ))
     ))
 
 (defvar mime/news-reply-mode-server-running nil)
 
+
 (defvar mime/message-before-send-hook-alist
-  '((mh-letter-mode  . mh-before-send-letter-hook))
-    (news-reply-mode . '(lambda ()
-                         (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-server-process)
-                             (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]+" ",")
-                                     ))
-                               ))))
-                    ))
+  '((mh-letter-mode . mh-before-send-letter-hook)))
 
 (defvar mime/message-after-send-hook-alist
-  '((mh-letter-mode  . '(lambda ()
+  '((mh-letter-mode  . (lambda ()
                         (if mh-annotate-char
                             (mh-annotate-msg mh-sent-from-msg
                                              mh-sent-from-folder
                                              (format "\"%s %s\""
                                                      (mh-get-field "To:")
                                                      (mh-get-field "Cc:"))))))
-    (news-reply-mode . '(lambda ()
-                         (or mime/news-reply-mode-server-running
-                             (gnus-close-server))
-                         (and (fboundp 'bury-buffer) (bury-buffer))))
     ))
 
 (defvar tm-comp/message-inserter-alist nil)
 ;;; @ edit
 ;;;
 
+(defun tm-comp::mime-insert-file (file)
+  "Insert a message from a file."
+  (interactive "fInsert file as MIME message: ")
+  (let*  ((guess (mime-find-file-type file))
+         (pritype (nth 0 guess))
+         (subtype (nth 1 guess))
+         (parameters (nth 2 guess))
+         (default (nth 3 guess))       ;Guess encoding from its file name.
+         (encoding
+          (if (not (interactive-p))
+              default
+            (completing-read
+             (concat "What transfer encoding"
+                     (if default
+                         (concat " (default "
+                                 (if (string-equal default "") "\"\"" default)
+                                 ")"
+                                 ))
+                     ": ")
+             mime-transfer-encoders nil t nil))))
+    (if (string-equal encoding "")
+       (setq encoding default))
+    (if (consp parameters)
+       (let ((rest parameters) cell attribute value)
+         (setq parameters "")
+         (while rest
+           (setq cell (car rest))
+           (setq attribute (car cell))
+           (setq value (cdr cell))
+           (if (eq value 'file)
+               (setq value (file-name-nondirectory file))
+             )
+           (setq parameters (concat parameters "; " attribute "=" value))
+           (setq rest (cdr rest))
+           )))
+    (mime-insert-tag pritype subtype parameters)
+    (mime-insert-binary-file file encoding)
+    ))
+
 ;; Insert the binary content after MIME tag.
 ;;     modified by MORITA Masahiro <hiro@isl.ntt.JP>
 ;;     for x-uue
@@ -276,8 +248,9 @@ Optional argument ENCODING specifies an encoding method such as base64."
                         (replace-space-with-underline (current-time-string))
                         "@" (system-name) "\"")))
 
-       (let ((hook (eval (cdr (assq major-mode mime/message-before-send-hook-alist)))))
-         (run-hooks 'hook))
+       (let ((hook (cdr (assq major-mode
+                              mime/message-before-send-hook-alist))))
+         (run-hooks hook))
        (let* ((header (message/get-header-string-except
                      mime/message-nuke-headers separator))
               (orig-header (message/get-header-string-except
@@ -327,7 +300,8 @@ Optional argument ENCODING specifies an encoding method such as base64."
            (insert
             (format "Subject: %s (%d/%d)\n" subject (+ i 1) total))
            (insert
-            (format "Mime-Version: 1.0\n"))
+            (format "Mime-Version: 1.0 (split by tm-comp %s)\n"
+                    mime/composer-version))
            (insert
             (format
              "Content-Type: message/partial; id=%s; number=%d; total=%d\n%s\n"
@@ -343,7 +317,8 @@ Optional argument ENCODING specifies an encoding method such as base64."
            (setq i (+ i 1))
            )
          )
-       (let ((hook (eval (cdr (assq major-mode mime/message-after-send-hook-alist)))))
+       (let ((hook
+              (cdr (assq major-mode mime/message-after-send-hook-alist))))
          (run-hooks 'hook))
        (set-buffer-modified-p nil)
        (cond ((y-or-n-p "Kill draft buffer? ")
@@ -366,6 +341,12 @@ Optional argument ENCODING specifies an encoding method such as base64."
 (add-hook 'mime-mode-hook
          (function
           (lambda ()
+            (if (not (fboundp 'original::mime-insert-file))
+                (progn
+                  (fset 'original::mime-insert-file
+                        (symbol-function 'mime-insert-file))
+                  (fset 'mime-insert-file 'tm-comp::mime-insert-file)
+                  ))
             (if (not (fboundp 'original::mime-insert-binary-file))
                 (progn
                   (fset 'original::mime-insert-binary-file
@@ -484,6 +465,6 @@ Optional argument ENCODING specifies an encoding method such as base64."
   )
 
 
-(run-hooks 'tm-comp-load-hook)
-
 (provide 'tm-comp)
+
+(run-hooks 'tm-comp-load-hook)