tm 7.80.
[elisp/tm.git] / tm-view.el
index b0f9996..b66f13d 100644 (file)
@@ -1,32 +1,29 @@
-;;;
 ;;; tm-view.el --- interactive MIME viewer for GNU Emacs
-;;;
-;;; Copyright (C) 1995 Free Software Foundation, Inc.
-;;; Copyright (C) 1994 .. 1996 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.64 $
-;;; Keywords: mail, news, MIME, multimedia
-;;;
-;;; This file is part of tm (Tools for MIME).
-;;;
-;;; This program is free software; you can redistribute it and/or
-;;; modify it under the terms of the GNU General Public License as
-;;; published by the Free Software Foundation; either version 2, or
-;;; (at your option) any later version.
-;;;
-;;; This program is distributed in the hope that it will be useful,
-;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-;;; General Public License for more details.
-;;;
-;;; 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.
-;;;
+
+;; Copyright (C) 1995,1996 Free Software Foundation, Inc.
+
+;; Author: MORIOKA Tomohiko <morioka@jaist.ac.jp>
+;; Created: 1994/7/13 (1994/8/31 obsolete tm-body.el)
+;; Version: $Revision: 7.73 $
+;; Keywords: mail, news, MIME, multimedia
+
+;; This file is part of tm (Tools for MIME).
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 2, or (at
+;; your option) any later version.
+
+;; This program is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with This program; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
 ;;; Code:
 
 (require 'tl-str)
@@ -45,7 +42,7 @@
 ;;;
 
 (defconst mime-viewer/RCS-ID
-  "$Id: tm-view.el,v 7.64 1996/05/22 02:26:49 morioka Exp $")
+  "$Id: tm-view.el,v 7.73 1996/08/30 16:57:53 morioka Exp $")
 
 (defconst mime-viewer/version (get-version-string mime-viewer/RCS-ID))
 (defconst mime/viewer-version mime-viewer/version)
@@ -375,7 +372,7 @@ The compressed face will be piped to this command.")
     (goto-char (point-min))
     (if (re-search-forward "^X-Face:[ \t]*" nil t)
        (let ((beg (match-end 0))
-             (end (rfc822/field-end))
+             (end (std11-field-end))
              )
          (call-process-region beg end "sh" nil 0 nil
                               "-c" mime-viewer/x-face-command)
@@ -564,8 +561,7 @@ The compressed face will be piped to this command.")
     ))
 
 (defun mime-article/get-subject (param &optional encoding)
-  (or (rfc822/get-field-body "Content-Description")
-      (rfc822/get-field-body "Subject")
+  (or (std11-find-field-body '("Content-Description" "Subject"))
       (let (ret)
        (if (or (and (setq ret (mime/Content-Disposition))
                     (setq ret (assoc "filename" (cdr ret)))
@@ -608,13 +604,12 @@ The compressed face will be piped to this command.")
   (or cinfo
       (setq cinfo mime::article/content-info)
       )
-  (some-element
-   (function
-    (lambda (ci)
-      (equal (mime::content-info/rcnum ci) rcnum)
-      ))
-   (mime/flatten-content-info cinfo)
-   ))
+  (find-if (function
+           (lambda (ci)
+             (equal (mime::content-info/rcnum ci) rcnum)
+             ))
+          (mime/flatten-content-info cinfo)
+          ))
 
 (defun mime-article/cnum-to-cinfo (cn &optional cinfo)
   (or cinfo
@@ -680,85 +675,94 @@ The compressed face will be piped to this command.")
     )
   "Menu for MIME Viewer")
 
-(defvar mime/viewer-mode-map nil)
-(if (null mime/viewer-mode-map)
+(if running-xemacs
     (progn
-      (setq mime/viewer-mode-map (make-keymap))
-      (suppress-keymap mime/viewer-mode-map)
-      (define-key mime/viewer-mode-map
-       "u"        (function mime-viewer/up-content))
-      (define-key mime/viewer-mode-map
-       "p"        (function mime-viewer/previous-content))
-      (define-key mime/viewer-mode-map
-       "n"        (function mime-viewer/next-content))
-      (define-key mime/viewer-mode-map
-       " "        (function mime-viewer/scroll-up-content))
-      (define-key mime/viewer-mode-map
-       "\M- "     (function mime-viewer/scroll-down-content))
-      (define-key mime/viewer-mode-map
-       "\177"     (function mime-viewer/scroll-down-content))
-      (define-key mime/viewer-mode-map
-       "\C-m"     (function mime-viewer/next-line-content))
-      (define-key mime/viewer-mode-map
-       "\C-\M-m"  (function mime-viewer/previous-line-content))
-      (define-key mime/viewer-mode-map
-       "v"        (function mime-viewer/play-content))
-      (define-key mime/viewer-mode-map
-       "e"        (function mime-viewer/extract-content))
-      (define-key mime/viewer-mode-map
-       "\C-c\C-p" (function mime-viewer/print-content))
-      (define-key mime/viewer-mode-map
-       "x"        (function mime-viewer/display-x-face))
-      (define-key mime/viewer-mode-map
-       "a"        (function mime-viewer/follow-content))
-      (define-key mime/viewer-mode-map
-       "q"        (function mime-viewer/quit))
-      (define-key mime/viewer-mode-map
-       "h"        (function mime-viewer/show-summary))
-      (define-key mime/viewer-mode-map
-       "\C-c\C-x" (function mime-viewer/kill-buffer))
-      (define-key mime/viewer-mode-map
-        "<"        (function beginning-of-buffer))
-      (define-key mime/viewer-mode-map
-        ">"        (function end-of-buffer))
-      (if mouse-button-2
-         (define-key mime/viewer-mode-map
-           mouse-button-2 (function tm:button-dispatcher))
-       )
-      (cond (running-xemacs
-            (defvar mime-viewer/xemacs-popup-menu
-              (cons mime-viewer/menu-title
-                    (mapcar (function
-                             (lambda (item)
-                               (vector (nth 1 item)(nth 2 item) t)
-                               ))
-                            mime-viewer/menu-list)))
-            (defun mime-viewer/xemacs-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/xemacs-popup-menu))
-            (define-key mime/viewer-mode-map
-              mouse-button-3 (function mime-viewer/xemacs-popup-menu))
-            )
-           ((>= emacs-major-version 19)
-            (define-key mime/viewer-mode-map [menu-bar mime-view]
-              (cons mime-viewer/menu-title
-                    (make-sparse-keymap mime-viewer/menu-title)))
-            (mapcar (function
-                     (lambda (item)
-                       (define-key mime/viewer-mode-map
-                         (vector 'menu-bar 'mime-view (car item))
-                         (cons (nth 1 item)(nth 2 item))
-                         )
-                       ))
-                    (reverse mime-viewer/menu-list)
-                    )
-            ))
+      (defvar mime-viewer/xemacs-popup-menu
+       (cons mime-viewer/menu-title
+             (mapcar (function
+                      (lambda (item)
+                        (vector (nth 1 item)(nth 2 item) t)
+                        ))
+                     mime-viewer/menu-list)))
+      (defun mime-viewer/xemacs-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/xemacs-popup-menu))
       ))
 
-(defun mime/viewer-mode (&optional mother ctl encoding ibuf obuf)
+(defun mime-viewer/define-keymap (&optional mother)
+  (let ((mime/viewer-mode-map (if mother
+                                 (copy-keymap mother)
+                               (make-keymap))))
+    (suppress-keymap mime/viewer-mode-map)
+    (define-key mime/viewer-mode-map
+      "u"        (function mime-viewer/up-content))
+    (define-key mime/viewer-mode-map
+      "p"        (function mime-viewer/previous-content))
+    (define-key mime/viewer-mode-map
+      "n"        (function mime-viewer/next-content))
+    (define-key mime/viewer-mode-map
+      " "        (function mime-viewer/scroll-up-content))
+    (define-key mime/viewer-mode-map
+      "\M- "     (function mime-viewer/scroll-down-content))
+    (define-key mime/viewer-mode-map
+      "\177"     (function mime-viewer/scroll-down-content))
+    (define-key mime/viewer-mode-map
+      "\C-m"     (function mime-viewer/next-line-content))
+    (define-key mime/viewer-mode-map
+      "\C-\M-m"  (function mime-viewer/previous-line-content))
+    (define-key mime/viewer-mode-map
+      "v"        (function mime-viewer/play-content))
+    (define-key mime/viewer-mode-map
+      "e"         (function mime-viewer/extract-content))
+    (define-key mime/viewer-mode-map
+      "\C-c\C-p" (function mime-viewer/print-content))
+    (define-key mime/viewer-mode-map
+      "x"        (function mime-viewer/display-x-face))
+    (define-key mime/viewer-mode-map
+      "a"        (function mime-viewer/follow-content))
+    (define-key mime/viewer-mode-map
+      "q"        (function mime-viewer/quit))
+    (define-key mime/viewer-mode-map
+      "h"        (function mime-viewer/show-summary))
+    (define-key mime/viewer-mode-map
+      "\C-c\C-x" (function mime-viewer/kill-buffer))
+    (define-key mime/viewer-mode-map
+      "<"        (function beginning-of-buffer))
+    (define-key mime/viewer-mode-map
+      ">"        (function end-of-buffer))
+    (define-key mime/viewer-mode-map
+      "?"        (function describe-mode))
+    (if mouse-button-2
+       (define-key mime/viewer-mode-map
+         mouse-button-2 (function tm:button-dispatcher))
+      )
+    (cond (running-xemacs
+          (define-key mime/viewer-mode-map
+            mouse-button-3 (function mime-viewer/xemacs-popup-menu))
+          )
+         ((>= emacs-major-version 19)
+          (define-key mime/viewer-mode-map [menu-bar mime-view]
+            (cons mime-viewer/menu-title
+                  (make-sparse-keymap mime-viewer/menu-title)))
+          (mapcar (function
+                   (lambda (item)
+                     (define-key mime/viewer-mode-map
+                       (vector 'menu-bar 'mime-view (car item))
+                       (cons (nth 1 item)(nth 2 item))
+                       )
+                     ))
+                  (reverse mime-viewer/menu-list)
+                  )
+          ))
+    (use-local-map mime/viewer-mode-map)
+    (run-hooks 'mime-viewer/define-keymap-hook)
+    ))
+
+(defun mime/viewer-mode (&optional mother ctl encoding ibuf obuf
+                                  mother-keymap)
   "Major mode for viewing MIME message.
 
 Here is a list of the standard keys for mime/viewer-mode.
@@ -777,16 +781,11 @@ M-RET             Move to previous line
 v              Decode current content as `play mode'
 e              Decode current content as `extract mode'
 C-c C-p                Decode current content as `print mode'
-f              Display X-Face
+a              Followup to current content.
+x              Display X-Face
 q              Quit
 button-2       Move to point under the mouse cursor
                and decode current content as `play mode'
-
-
-Here are all the commands with their current binding,
-listed in key order:
-
-\\{mime/viewer-mode-map}
 "
   (interactive)
   (let ((buf (get-buffer mime/output-buffer-name)))
@@ -805,7 +804,7 @@ listed in key order:
          (progn
            (setq mime::preview/mother-buffer mother)
            ))
-      (use-local-map mime/viewer-mode-map)
+      (mime-viewer/define-keymap mother-keymap)
       (setq mime::preview/content-list (nth 1 ret))
       (goto-char
        (let ((ce (mime::preview-content-info/point-max
@@ -933,7 +932,7 @@ listed in key order:
                                  (mime::content-info/point-min ci)
                                  (mime::content-info/point-max ci)
                                  )
-                                (rfc822/get-header-string-except
+                                (std11-header-string-except
                                  (concat "^"
                                          (apply (function regexp-or) fields)
                                          ":") ""))))
@@ -944,7 +943,7 @@ listed in key order:
                             (insert str)
                           )
                         rcnum))
-               (setq fields (rfc822/get-field-names)
+               (setq fields (std11-collect-field-names)
                      rcnum (cdr rcnum))
                )
              )