-;;;
;;; 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.63 $
-;;; 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.77 $
+;; 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 GNU Emacs; 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)
(require 'tl-list)
(require 'tl-atype)
(require 'tl-misc)
-(require 'tl-822)
+(require 'std11)
(require 'mel)
(require 'tm-ew-d)
(require 'tm-def)
;;;
(defconst mime-viewer/RCS-ID
- "$Id: tm-view.el,v 7.63 1996/05/20 14:56:33 morioka Exp $")
+ "$Id: tm-view.el,v 7.77 1996/09/23 13:15:09 morioka Exp $")
(defconst mime-viewer/version (get-version-string mime-viewer/RCS-ID))
(defconst mime/viewer-version mime-viewer/version)
(defvar mime/content-decoding-condition
'(((type . "text/plain")
- (method "tm-plain" nil 'file 'type 'encoding 'mode 'name))
+ (method "tm-plain" nil 'file 'type 'encoding 'mode 'name)
+ (mode "play" "print")
+ )
((type . "text/html")
(method "tm-html" nil 'file 'type 'encoding 'mode 'name)
- (mode . "play"))
+ (mode . "play")
+ )
((type . "text/x-rot13-47")
- (method . mime-article/decode-caesar))
-
+ (method . mime-article/decode-caesar)
+ (mode . "play")
+ )
((type . "audio/basic")
- (method "tm-au" nil 'file 'type 'encoding 'mode 'name))
+ (method "tm-au" nil 'file 'type 'encoding 'mode 'name)
+ (mode . "play")
+ )
((type . "image/jpeg")
- (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
+ (method "tm-image" nil 'file 'type 'encoding 'mode 'name)
+ (mode "play" "print")
+ )
((type . "image/gif")
- (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
+ (method "tm-image" nil 'file 'type 'encoding 'mode 'name)
+ (mode "play" "print")
+ )
((type . "image/tiff")
- (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
+ (method "tm-image" nil 'file 'type 'encoding 'mode 'name)
+ (mode "play" "print")
+ )
((type . "image/x-tiff")
- (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
+ (method "tm-image" nil 'file 'type 'encoding 'mode 'name)
+ (mode "play" "print")
+ )
((type . "image/x-xbm")
- (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
+ (method "tm-image" nil 'file 'type 'encoding 'mode 'name)
+ (mode "play" "print")
+ )
((type . "image/x-pic")
- (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
+ (method "tm-image" nil 'file 'type 'encoding 'mode 'name)
+ (mode "play" "print")
+ )
((type . "image/x-mag")
- (method "tm-image" nil 'file 'type 'encoding 'mode 'name))
+ (method "tm-image" nil 'file 'type 'encoding 'mode 'name)
+ (mode "play" "print")
+ )
((type . "video/mpeg")
- (method "tm-mpeg" nil 'file 'type 'encoding 'mode 'name))
+ (method "tm-mpeg" nil 'file 'type 'encoding 'mode 'name)
+ (mode . "play")
+ )
+ ((type . "application/postscript")
+ (method "tm-ps" nil 'file 'type 'encoding 'mode 'name)
+ (mode "play" "print")
+ )
((type . "application/octet-stream")
- (method "tm-file" nil 'file 'type 'encoding 'mode 'name))
+ (method "tm-file" nil 'file 'type 'encoding 'mode 'name)
+ (mode "play" "print")
+ )
;;((type . "message/external-body")
;; (method "xterm" nil
;; "-e" "showexternal"
;; 'file '"access-type" '"name" '"site" '"directory"))
((type . "message/rfc822")
- (method . mime-article/view-message/rfc822))
+ (method . mime-article/view-message/rfc822)
+ (mode . "play")
+ )
((type . "message/partial")
- (method . mime-article/decode-message/partial))
+ (method . mime-article/decode-message/partial)
+ (mode . "play")
+ )
- ((method "metamail" t
- "-m" "tm" "-x" "-d" "-z" "-e" 'file)(mode . "play"))
+ ((method "metamail" t "-m" "tm" "-x" "-d" "-z" "-e" 'file)
+ (mode . "play")
+ )
((method "tm-file" nil 'file 'type 'encoding 'mode 'name)
- (mode . "extract"))
+ (mode . "extract")
+ )
))
(defvar mime-viewer/childrens-header-showing-Content-Type-list
(let ((server (assoc "server" params)))
(setq access-type (cdr access-type))
(if server
- (format "[%s %s ([%s] %s)]\n" num subj
- access-type (cdr server))
+ (insert (format "[%s %s ([%s] %s)]\n" num subj
+ access-type (cdr server)))
(let ((site (assoc-value "site" params))
(dir (assoc-value "directory" params))
)
(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)
))
(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)))
(setq ret (assoc "name" param))
(setq ret (assoc "x-name" param))
)
- (rfc822/strip-quoted-string (cdr ret))
+ (std11-strip-quoted-string (cdr ret))
))
(mime-article/get-uu-filename param encoding)
""))
(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
)
"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.
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)))
(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
(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)
":") ""))))
(insert str)
)
rcnum))
- (setq fields (rfc822/get-field-names)
+ (setq fields (std11-collect-field-names)
rcnum (cdr rcnum))
)
)