tm 6.50
[elisp/tm.git] / mh-e / tm-mh-e.el
index 48d700f..2d38dcd 100644 (file)
 (if (not (boundp 'mh-e-version))
     (require 'tm-mh-e3)
   )
-(autoload 'mime/viewer-mode "tm-view" "View MIME message." t)
+(require 'tm-view)
 
 
 ;;; @ version
 ;;;
 (defconst tm-mh-e/RCS-ID
-  "$Id: tm-mh-e.el,v 6.3 1995/04/23 20:59:27 morioka Exp $")
+  "$Id: tm-mh-e.el,v 6.10 1995/06/12 01:53:19 morioka Exp $")
 
 (defconst tm-mh-e/version (get-version-string tm-mh-e/RCS-ID))
 
 
-;;; @ MIME header decoding mode
+;;; @ variable
 ;;;
-(defun tm-mh-e/toggle-header-decoding-mode (arg)
-  "Toggle MIME header processing.
+(defvar tm-mh-e/decode-all t
+  "*If t, decode all of the message. Otherwise decode header only.")
+
+
+;;; @ functions
+;;;
+
+(defun tm-mh-e/display-msg (msg-num folder &optional show-buffer mode)
+  (or mode
+      (setq mode tm-mh-e/decode-all)
+      )
+  ;; Display message NUMBER of FOLDER.
+  ;; Sets the current buffer to the show buffer.
+  (set-buffer folder)
+  (or show-buffer
+      (setq show-buffer mh-show-buffer))
+  ;; Bind variables in folder buffer in case they are local
+  (let ((msg-filename (mh-msg-filename msg-num)))
+    (if (not (file-exists-p msg-filename))
+       (error "Message %d does not exist" msg-num))
+    (set-buffer show-buffer)
+    (cond ((not (equal msg-filename buffer-file-name))
+          ;; Buffer does not yet contain message.
+          (clear-visited-file-modtime)
+          (unlock-buffer)
+          (setq buffer-file-name nil)  ; no locking during setup
+          (let (buffer-read-only)
+            (erase-buffer)
+            (if mode
+                (progn
+                  (let ((file-coding-system-for-read
+                         (if (boundp 'MULE) *noconv*))
+                        kanji-fileio-code)
+                    (insert-file-contents msg-filename)
+                    )
+                  (set-buffer-modified-p nil)
+                  (mh-show-mode)
+                  (mime/viewer-mode)
+                  (goto-char (point-min))
+                  )
+              (let ((clean-message-header mh-clean-message-header)
+                    (invisible-headers mh-invisible-headers)
+                    (visible-headers mh-visible-headers)
+                    )
+                (insert-file-contents msg-filename)
+                (goto-char (point-min))
+                (cond (clean-message-header
+                       (mh-clean-msg-header (point-min)
+                                            invisible-headers
+                                            visible-headers)
+                       (goto-char (point-min)))
+                      (t
+                       (mh-start-of-uncleaned-message)))
+                (mime/decode-message-header)
+                (set-buffer-modified-p nil)
+                (mh-show-mode)
+                )))
+          (or (eq buffer-undo-list t)  ;don't save undo info for prev msgs
+              (setq buffer-undo-list nil))
+          (setq buffer-file-name msg-filename)
+          (set-mark nil)
+          (setq mode-line-buffer-identification
+                (list (format mh-show-buffer-mode-line-buffer-id
+                              folder msg-num)))
+          (set-buffer folder)
+          (setq mh-showing-with-headers nil)))))
+
+(fset 'mh-display-msg (symbol-function 'tm-mh-e/display-msg))
+
+(defun tm-mh-e/view-message (&optional msg)
+  "MIME decode and play this message."
+  (interactive)
+  (mh-invalidate-show-buffer)
+  (let ((tm-mh-e/decode-all t))
+    (mh-show-msg msg)
+    )
+  (pop-to-buffer (save-window-excursion
+                  (switch-to-buffer mh-show-buffer)
+                  mime::article/preview-buffer))
+  )
+
+(defun tm-mh-e/toggle-decoding-mode (arg)
+  "Toggle MIME processing mode.
 With arg, turn MIME processing on if arg is positive."
   (interactive "P")
-  (setq mime/header-decoding-mode
+  (setq tm-mh-e/decode-all
        (if (null arg)
-           (not mime/header-decoding-mode)
+           (not tm-mh-e/decode-all)
          arg))
-  (mh-invalidate-show-buffer)
-  (mh-show-msg (mh-get-msg-num t))
-  )
+  (mh-show (mh-get-msg-num t))
+  (if tm-mh-e/decode-all
+      (let ((the-buf (current-buffer)))
+       (pop-to-buffer (save-excursion
+                        (switch-to-buffer mh-show-buffer)
+                        mime::article/preview-buffer))
+       (pop-to-buffer the-buf)
+       )))
+
+(defun tm-mh-e/cite ()
+  (interactive)
+  (if tm-mh-e/decode-all
+      (save-excursion
+       (save-restriction
+         (insert-buffer
+          (save-window-excursion
+            (switch-to-buffer (concat "show-" mh-sent-from-folder))
+            mime::article/preview-buffer))
+         (if (looking-at "^\\[.+\\]\n")
+             (replace-match ""))
+         (run-hooks 'mail-citation-hook)
+         ))
+    (mh-yank-cur-msg)
+    ))
 
 
-;;; @ MIME body players
+;;; @ for tm-view
 ;;;
-(defun tm-mh-e/view-message (arg)
-  "MIME decode and play this message."
-  (interactive "P")
-  (mh-invalidate-show-buffer)
-  (mh-show-msg (mh-get-msg-num t))
-  (pop-to-buffer mh-show-buffer t)
-  ;; patch for mh-narrow.el
-  ;; by YAMAOKA Katsumi <yamaoka@ga.sony.co.jp>
-  (if (featurep 'mh-narrow)
-      (widen)
-    )
-  ;; end of patch
-  (mime/viewer-mode)
+
+(defun tm-mh-e/content-header-filter ()
+  (goto-char (point-min))
+  (while (and (re-search-forward
+              (concat "^" mime-viewer/ignored-field-regexp ":")
+              nil t)
+             (progn
+               (delete-region
+                (match-beginning 0)
+                (save-excursion
+                  (and
+                   (re-search-forward "^\\([^ \t]\\|$\\)" nil t)
+                   (match-beginning 0)
+                   )))
+               t)))
+  (mime/code-convert-region-to-emacs (point-min)(point-max)
+                                    mime/default-coding-system)
+  (mime/decode-message-header)
   )
 
+(defun tm-mh-e/quitting-method ()
+  (let ((win (get-buffer-window
+             mime/output-buffer-name))
+       (buf mime::preview/article-buffer)
+       )
+    (if win
+       (delete-window win)
+      )
+    (pop-to-buffer
+     (let ((name (buffer-name buf)))
+       (substring name 5)
+       ))
+    (if (not tm-mh-e/decode-all)
+       (mh-show (mh-get-msg-num t))
+      )))
+
 
 ;;; @ for tm-comp
 ;;;
@@ -121,18 +244,10 @@ With arg, turn MIME processing on if arg is positive."
 ;;; @ set up
 ;;;
 
-(defun tm-mh-e/decode-message-header ()
-  (make-local-variable 'minor-mode-alist)
-  (mime/add-header-decoding-mode-to-mode-line)
-  (let ((buffer-read-only nil))
-    (mime/decode-message-header-if-you-need)
-    (set-buffer-modified-p nil)
-    ))
-(add-hook 'mh-show-mode-hook
-         (function tm-mh-e/decode-message-header))
+;;(add-hook 'mh-show-mode-hook (function mime/viewer-mode))
 
-(define-key mh-folder-mode-map "\et" 'tm-mh-e/toggle-header-decoding-mode)
-(define-key mh-folder-mode-map "v" 'tm-mh-e/view-message)
+(define-key mh-folder-mode-map "v" (function tm-mh-e/view-message))
+(define-key mh-folder-mode-map "\et" (function tm-mh-e/toggle-decoding-mode))
 (define-key mh-folder-mode-map "\r"
   (function (lambda ()
              (interactive)
@@ -143,6 +258,33 @@ With arg, turn MIME processing on if arg is positive."
              (interactive)
              (scroll-other-window -1)
              )))
+(define-key mh-folder-mode-map " "
+  (function (lambda ()
+             (interactive)
+             (scroll-other-window)
+             )))
+(define-key mh-folder-mode-map "\177"
+  (function (lambda ()
+             (interactive)
+             (scroll-other-window (- (save-window-excursion
+                                       (other-window 1)
+                                       (window-height))))
+             )))
+
+(add-hook 'mh-letter-mode-hook
+         (function
+          (lambda ()
+            (define-key mh-letter-mode-map "\C-c\C-y" (function tm-mh-e/cite))
+            )))
+
+(set-alist 'mime-viewer/quitting-method-alist
+          'mh-show-mode
+          (function tm-mh-e/quitting-method))
+
+(set-alist 'mime-viewer/content-header-filter-alist
+          'mh-show-mode
+          (function tm-mh-e/content-header-filter))
 
+(run-hooks 'tm-mh-e-load-hook)
 
 (provide 'tm-mh-e)