;;; mm-decode.el --- Functions for decoding MIME things
-;; Copyright (C) 1998,99 Free Software Foundation, Inc.
+;; Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
;; MORIOKA Tomohiko <morioka@jaist.ac.jp>
(require 'mail-parse)
(require 'mailcap)
(require 'mm-bodies)
+(eval-when-compile (require 'cl))
-(defvar mm-xemacs-p (string-match "XEmacs" (emacs-version)))
+(eval-and-compile
+ (autoload 'mm-inline-partial "mm-partial"))
(defgroup mime-display ()
"Display of MIME in mail and news articles."
(locate-library "vcard"))))
("message/delivery-status" mm-inline-text identity)
("message/rfc822" mm-inline-message identity)
+ ("message/partial" mm-inline-partial identity)
("text/.*" mm-inline-text identity)
("audio/wav" mm-inline-audio
(lambda (handle)
(defcustom mm-inlined-types
'("image/.*" "text/.*" "message/delivery-status" "message/rfc822"
+ "message/partial"
"application/pgp-signature")
"List of media types that are to be displayed inline."
:type '(repeat string)
Viewing agents are supposed to view the last possible part of a message,
as that is supposed to be the richest. However, users may prefer other
types instead, and this list says what types are most unwanted. If,
-for instance, text/html parts are very unwanted, and text/richtech are
+for instance, text/html parts are very unwanted, and text/richtext are
somewhat unwanted, then the value of this variable should be set
to:
(if (or (not ctl)
(not (string-match "/" (car ctl))))
(mm-dissect-singlepart
- '("text/plain")
+ '("text/plain")
(and cte (intern (downcase (mail-header-remove-whitespace
(mail-header-remove-comments
cte)))))
(unwind-protect
(start-process "*display*" nil
"xterm"
- "-e" shell-file-name
+ "-e" shell-file-name
shell-command-switch
(mm-mailcap-command
method file (mm-handle-type handle)))
(unwind-protect
(progn
(call-process shell-file-name nil
- (setq buffer
+ (setq buffer
(generate-new-buffer "*mm*"))
nil
shell-command-switch
(mapconcat 'identity (nreverse out) "")))
(defun mm-remove-parts (handles)
- "Remove the displayed MIME parts represented by HANDLE."
+ "Remove the displayed MIME parts represented by HANDLES."
(if (and (listp handles)
(bufferp (car handles)))
(mm-remove-part handles)
(mm-remove-part handle)))))))
(defun mm-destroy-parts (handles)
- "Remove the displayed MIME parts represented by HANDLE."
+ "Remove the displayed MIME parts represented by HANDLES."
(if (and (listp handles)
(bufferp (car handles)))
(mm-destroy-part handles)
(save-excursion
(if (member (mm-handle-media-supertype handle) '("text" "message"))
(with-temp-buffer
- (insert-buffer-substring (mm-handle-buffer handle))
+ (if (eq (or (mm-handle-encoding handle)
+ (with-current-buffer (mm-handle-buffer handle)
+ (mm-body-7-or-8)))
+ '8bit)
+ ;; Emacs MULE can not handle some 8bit characters in
+ ;; multibyte character!!
+ (let ((text (with-current-buffer
+ (mm-handle-buffer handle)
+ (mm-with-unibyte-current-buffer
+ (buffer-string)))))
+ (mm-with-unibyte-current-buffer
+ (insert text)))
+ (insert-buffer-substring (mm-handle-buffer handle)))
(mm-decode-content-transfer-encoding
(mm-handle-encoding handle)
(mm-handle-media-type handle))
(method (completing-read "Viewer: " methods)))
(when (string= method "")
(error "No method given"))
+ (if (string-match "^[^% \t]+$" method)
+ (setq method (concat method " %s")))
(mm-display-external (copy-sequence handle) method)))
(defun mm-preferred-alternative (handles &optional preferred)