This commit was generated by cvs2svn to compensate for changes in r128,
[elisp/tm.git] / mh-e / tm-mh-e.el
index 985e4ed..5d14bfc 100644 (file)
 ;;; @ require modules
 ;;;
 (require 'tl-str)
+(require 'tl-misc)
 (require 'tm-misc)
 (require 'mh-e)
 (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.1 1995/04/18 16:49:45 morioka Exp $")
+  "$Id: tm-mh-e.el,v 6.18 1995/06/20 21:07:39 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
+          (setq buffer-read-only nil)
+          (erase-buffer)
+          (if mode
+              (progn
+                (let ((file-coding-system-for-read
+                       (if (boundp 'MULE) *noconv*))
+                      kanji-fileio-code)
+                  (insert-file-contents msg-filename)
+                  ;; (goto-char (point-min))
+                  (while (re-search-forward "\r$" nil t)
+                    (replace-match "")
+                    )
+                  )
+                (set-buffer-modified-p nil)
+                (setq buffer-read-only t)
+                (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)
+              (setq buffer-read-only t)
+              (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))
-  )
+  (save-window-excursion
+    (switch-to-buffer mh-show-buffer)
+    (if (null tm-mh-e/decode-all)
+       (if (and mime::article/preview-buffer
+                (get-buffer mime::article/preview-buffer))
+           (kill-buffer mime::article/preview-buffer)
+         )))
+  (mh-show (mh-get-msg-num t))
+  (if tm-mh-e/decode-all
+      (let ((the-buf (current-buffer)))
+       (if mime::article/preview-buffer
+           (pop-to-buffer (save-excursion
+                            (switch-to-buffer mh-show-buffer)
+                            mime::article/preview-buffer))
+         (tm-mh-e/view-message (mh-get-msg-num t)))
+       (pop-to-buffer the-buf)
+       )))
+
+(defun tm-mh-e/page-msg ()
+  (interactive)
+  (if tm-mh-e/decode-all
+      (scroll-other-window)
+    (mh-page-msg)
+    ))
+
+(defun tm-mh-e/previous-page ()
+  (interactive)
+  (if tm-mh-e/decode-all
+      (scroll-other-window (- (save-window-excursion
+                               (other-window 1)
+                               (window-height))))
+    (mh-previous-page)
+    ))
+
+(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)
+
+(fset 'tm-mh-e/code-convert-region-to-emacs
+      (symbol-function 'mime/code-convert-region-to-emacs))
+
+(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)))
+  (tm-mh-e/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
 ;;;
@@ -107,34 +265,23 @@ With arg, turn MIME processing on if arg is positive."
   (insert-file (tm-mh-e::message/file-name message))
   )
 
-(if (featurep 'tm-comp)
-    (set-alist 'tm-comp/message-inserter-alist
-              'mh-letter-mode (function tm-mh-e::insert-message))
-  (add-hook 'tm-comp-load-hook
-           (function
-            (lambda ()
-              (set-alist
-               'tm-comp/message-inserter-alist
-               'mh-letter-mode (function tm-mh-e::insert-message))
-              )))
-  )
+(call-after-loaded
+ 'tm-comp
+ (function
+  (lambda ()
+    (set-alist
+     'tm-comp/message-inserter-alist
+     'mh-letter-mode (function tm-mh-e::insert-message))
+    )))
 
 
 ;;; @ 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)
@@ -145,6 +292,27 @@ With arg, turn MIME processing on if arg is positive."
              (interactive)
              (scroll-other-window -1)
              )))
+(define-key mh-folder-mode-map " " (function tm-mh-e/page-msg))
+(define-key mh-folder-mode-map "\177" (function tm-mh-e/previous-page))
+
+(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))
+
+(set-alist 'mime-viewer/code-converter-alist
+          'mh-show-mode
+          (function tm-mh-e/code-convert-region-to-emacs))
 
+(run-hooks 'tm-mh-e-load-hook)
 
 (provide 'tm-mh-e)