tm 7.32.
[elisp/tm.git] / tm-view.el
index 309b547..767e49b 100644 (file)
@@ -5,9 +5,10 @@
 ;;; Copyright (C) 1994,1995 MORIOKA Tomohiko
 ;;;
 ;;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;;; modified by Steven L. Baur <steve@miranova.com>
 ;;; Maintainer: MORIOKA Tomohiko <morioka@jaist.ac.jp>
 ;;; Created: 1994/7/13 (1994/8/31 obsolete tm-body.el)
-;;; Version: $Revision: 7.29 $
+;;; Version: $Revision: 7.32.1.2 $
 ;;; Keywords: mail, news, MIME, multimedia
 ;;;
 ;;; This file is part of tm (Tools for MIME).
@@ -25,6 +26,8 @@
 ;;; You should have received a copy of the GNU General Public License
 ;;; along with This program.  If not, write to the Free Software
 ;;; Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;;;
+;;; Code:
 
 (require 'tl-str)
 (require 'tl-list)
@@ -41,7 +44,7 @@
 ;;;
 
 (defconst mime-viewer/RCS-ID
-  "$Id: tm-view.el,v 7.29 1995/12/05 08:05:18 morioka Exp $")
+  "$Id: tm-view.el,v 7.32.1.2 1995/12/10 20:29:06 morioka Exp $")
 
 (defconst mime-viewer/version (get-version-string mime-viewer/RCS-ID))
 (defconst mime/viewer-version mime-viewer/version)
 (defvar mime-viewer/content-subject-omitting-Content-Type-list
   '("application/x-selection"))
 
+(defvar mime-viewer/content-subject-showing-Content-Type-list
+  '("application/pgp"))
+
 (defvar mime-viewer/uuencode-encoding-name-list '("x-uue" "x-uuencode"))
 
 (defvar mime-viewer/ignored-field-list
@@ -211,8 +217,7 @@ Each elements are regexp of field-name. [tm-view.el]")
   (if (and (consp rcnum)
           (not (member
                 ctype
-                mime-viewer/content-subject-omitting-Content-Type-list))
-          )
+                mime-viewer/content-subject-omitting-Content-Type-list)))
       (mime-viewer/insert-content-subject
        rcnum cinfo ctype params subj)
     ))
@@ -270,15 +275,19 @@ Each elements are regexp of field-name. [tm-view.el]")
 ;;; @@ buffer local variables
 ;;;
 
-(defvar mime/show-mode-old-window-configuration nil)
-(defvar mime::preview/mother-buffer nil)
-
-(defvar mime::article/content-info nil)
+;; for XEmacs
 (defvar mime::article/preview-buffer nil)
+(defvar mime::article/code-converter nil)
 
-(defvar mime::preview/article-buffer nil)
-(defvar mime::preview/content-list nil)
-(defvar mime::preview/original-major-mode nil)
+(make-variable-buffer-local 'mime::article/content-info)
+(make-variable-buffer-local 'mime::article/preview-buffer)
+(make-variable-buffer-local 'mime::article/code-converter)
+
+(make-variable-buffer-local 'mime::preview/mother-buffer)
+(make-variable-buffer-local 'mime::preview/content-list)
+(make-variable-buffer-local 'mime::preview/article-buffer)
+(make-variable-buffer-local 'mime::preview/original-major-mode)
+(make-variable-buffer-local 'mime::preview/original-window-configuration)
 
 
 ;;; @@ quitting method
@@ -339,10 +348,8 @@ The compressed face will be piped to this command.")
        (get-buffer ibuf)
        (set-buffer ibuf)
        ))
-  (make-variable-buffer-local 'mime::article/content-info)
   (setq mime::article/content-info (mime/parse-message ctl encoding))
   (let ((ret (mime-viewer/make-preview-buffer obuf)))
-    (make-variable-buffer-local 'mime::article/preview-buffer)
     (setq mime::article/preview-buffer (car ret))
     ret))
 
@@ -365,9 +372,7 @@ The compressed face will be piped to this command.")
        (setq bf (get-buffer-create obuf))
        (set-buffer obuf)
        ))
-    (make-variable-buffer-local 'mime::preview/article-buffer)
     (setq mime::preview/article-buffer the-buf)
-    (make-variable-buffer-local 'mime::preview/original-major-mode)
     (setq mime::preview/original-major-mode mode)
     (setq major-mode 'mime/viewer-mode)
     (setq mode-name "MIME-View")
@@ -415,6 +420,14 @@ The compressed face will be piped to this command.")
     (if (mime-viewer/header-visible-p rcnum cinfo ctype)
        (mime-viewer/display-header beg he obuf)
       )
+    (if (and (null rcnum)
+            (member
+             ctype mime-viewer/content-subject-showing-Content-Type-list))
+       (save-excursion
+         (set-buffer obuf)
+         (goto-char (point-max))
+         (mime-viewer/insert-content-subject rcnum cinfo ctype params subj)
+         ))
     (cond ((mime-viewer/body-visible-p rcnum cinfo ctype)
           (mime-viewer/display-body he end obuf
                                     rcnum cinfo ctype params subj encoding)
@@ -587,7 +600,7 @@ The compressed face will be piped to this command.")
       )
     dest))
 
-(defun mime::point-preview-content (p &optional pcl)
+(defun mime-preview/point-pcinfo (p &optional pcl)
   (or pcl
       (setq pcl mime::preview/content-list)
       )
@@ -622,9 +635,13 @@ The compressed face will be piped to this command.")
 (defun mime-preview/decode-text-region (beg end charset encoding)
   (mime/decode-region encoding beg end)
   (let* ((mode mime::preview/original-major-mode)
-        (m (assq mode mime-viewer/code-converter-alist))
+        (m (or (save-excursion
+                 (set-buffer mime::preview/article-buffer)
+                 mime::article/code-converter)
+               (cdr (assq mode mime-viewer/code-converter-alist))
+               ))
         )
-    (if (and m (fboundp (setq m (cdr m))))
+    (if (and m (fboundp m))
        (funcall m beg (point-max) charset encoding)
       (mime-viewer/default-code-convert-region
        beg (point-max) charset encoding)
@@ -695,8 +712,57 @@ The compressed face will be piped to this command.")
          (define-key mime/viewer-mode-map
            mouse-button-2 (function tm:button-dispatcher))
        )
+      (if mouse-button-3
+         (define-key mime/viewer-mode-map
+           mouse-button-3 (function mime-viewer/popup-menu))
+       )
       ))
 
+(defvar mime-viewer/popup-menu-title "MIME Viewer Commands")
+(defvar mime-viewer/popup-menu-items
+  '(("Move to upper content"     . mime-viewer/up-content)
+    ("Move to previous content"          . mime-viewer/previous-content)
+    ("Move to next content"       . mime-viewer/next-content)
+    ("Scroll to previous content" . mime-viewer/scroll-down-content)
+    ("Scroll to next content"     . mime-viewer/scroll-up-content)
+    ("Play Content"               . mime-viewer/play-content)
+    ("Extract Content"            . mime-viewer/extract-content)
+    ("Print"                      . mime-viewer/print-content)
+    ("Show X Face"                . mime-viewer/display-x-face)
+    )
+  "Popup Menu for MIME Viewer")
+
+(cond ((string-match "XEmacs\\|Lucid" emacs-version)
+       (defvar mime-viewer/popup-menu
+        (cons mime-viewer/popup-menu-title
+              (mapcar (function
+                       (lambda (item)
+                         (vector (car item)(cdr item) t)
+                         ))
+                      mime-viewer/popup-menu-items)))       
+       (defun mime-viewer/popup-menu (event)
+        "Popup the menu in the MIME Viewer buffer"
+        (interactive "e")
+        (select-window (event-window event))
+        (set-buffer (event-buffer event))
+        (popup-menu 'mime-viewer/popup-menu))
+       )
+      ((>= emacs-major-version 19)
+       (defun mime-viewer/popup-menu (event)
+        (interactive "e")
+        (mouse-set-point event)
+        (let ((menu
+               (cons mime-viewer/popup-menu-title
+                     (list (cons "Menu Items" mime-viewer/popup-menu-items))
+                     )))
+          (let ((func (x-popup-menu event menu)))
+            (if func
+                (funcall func)
+              ))
+          ))
+       ))
+
+
 (defun mime/viewer-mode (&optional mother ctl encoding ibuf obuf)
   "Major mode for viewing MIME message.
 
@@ -734,20 +800,17 @@ listed in key order:
          (set-buffer buf)
          (erase-buffer)
          )))
-  (let ((ret (mime-viewer/setup-buffer ctl encoding ibuf obuf))) 
+  (let ((ret (mime-viewer/setup-buffer ctl encoding ibuf obuf))
+       (win-conf (current-window-configuration))
+       )
     (prog1
        (switch-to-buffer (car ret))
+      (setq mime::preview/original-window-configuration win-conf)
       (if mother
          (progn
-           (make-variable-buffer-local
-            'mime/show-mode-old-window-configuration)
-           (setq mime/show-mode-old-window-configuration
-                 (current-window-configuration))
-           (make-variable-buffer-local 'mime::preview/mother-buffer)
            (setq mime::preview/mother-buffer mother)
            ))
       (use-local-map mime/viewer-mode-map)
-      (make-variable-buffer-local 'mime::preview/content-list)
       (setq mime::preview/content-list (nth 1 ret))
       (goto-char
        (let ((ce (mime::preview-content-info/point-max
@@ -765,7 +828,7 @@ listed in key order:
 
 (defun mime-preview/point-content-number (point)
   (save-window-excursion
-    (let ((pc (mime::point-preview-content (point)))
+    (let ((pc (mime-preview/point-pcinfo (point)))
          cinfo)
       (switch-to-buffer (mime::preview-content-info/buffer pc))
       (setq cinfo (mime::preview-content-info/content-info pc))
@@ -814,7 +877,7 @@ listed in key order:
 
 (defun mime-viewer/up-content ()
   (interactive)
-  (let ((pc (mime::point-preview-content (point))) cinfo
+  (let ((pc (mime-preview/point-pcinfo (point))) cinfo
        (the-buf (current-buffer))
        rcnum r)
     (switch-to-buffer (mime::preview-content-info/buffer pc))
@@ -963,7 +1026,7 @@ listed in key order:
       )
   (or buf
       (setq buf (mime::preview-content-info/buffer
-                (mime::point-preview-content (point))))
+                (mime-preview/point-pcinfo (point))))
       )
   (let ((r (progn
             (switch-to-buffer buf)