Synch to No Gnus 200410060748.
[elisp/gnus.git-] / lisp / mm-decode.el
index a359dfd..49fc7e1 100644 (file)
@@ -32,7 +32,6 @@
                   (require 'term))
 
 (eval-and-compile
-  (autoload 'executable-find "executable")
   (autoload 'mm-inline-partial "mm-partial")
   (autoload 'mm-inline-external-body "mm-extern")
   (autoload 'mm-insert-inline "mm-view"))
@@ -99,8 +98,9 @@
 
 (defcustom mm-text-html-renderer
   (cond ((locate-library "w3") 'w3)
-       ((locate-library "w3m") 'w3m)
-       ((executable-find "w3m") 'w3m-standalone)
+       ((executable-find "w3m") (if (locate-library "w3m")
+                                    'w3m
+                                  'w3m-standalone))
        ((executable-find "links") 'links)
        ((executable-find "lynx") 'lynx)
        (t 'html2text))
@@ -114,6 +114,7 @@ The defined renderer types are:
 `lynx' : use lynx;
 `html2text' : use html2text;
 nil    : use external viewer."
+  :version "21.4"
   :type '(choice (const w3)
                 (const w3m)
                 (const w3m-standalone)
@@ -122,7 +123,6 @@ nil    : use external viewer."
                 (const html2text)
                 (const nil)
                 (function))
-  :version "21.3"
   :group 'mime-display)
 
 (defvar mm-inline-text-html-renderer nil
@@ -133,6 +133,7 @@ It is suggested to customize `mm-text-html-renderer' instead.")
   "If non-nil, Gnus will allow retrieving images in HTML contents with
 the <img> tags.  It has no effect on Emacs/w3.  See also the
 documentation for the `mm-w3m-safe-url-regexp' variable."
+  :version "21.4"
   :type 'boolean
   :group 'mime-display)
 
@@ -218,6 +219,7 @@ before the external MIME handler is invoked."
        (locate-library "diff-mode")))
     ("application/emacs-lisp" mm-display-elisp-inline identity)
     ("application/x-emacs-lisp" mm-display-elisp-inline identity)
+    ("text/dns" mm-display-dns-inline identity)
     ("text/html"
      mm-inline-text-html
      (lambda (handle)
@@ -279,13 +281,14 @@ type inline."
     "application/pdf" "application/x-dvi")
   "List of media types for which the external viewer will not be killed
 when selecting a different article."
+  :version "21.4"
   :type '(repeat string)
   :group 'mime-display)
 
 (defcustom mm-automatic-display
   '("text/plain" "text/enriched" "text/richtext" "text/html"
     "text/x-vcard" "image/.*" "message/delivery-status" "multipart/.*"
-    "message/rfc822" "text/x-patch" "application/pgp-signature"
+    "message/rfc822" "text/x-patch" "text/dns" "application/pgp-signature"
     "application/emacs-lisp" "application/x-emacs-lisp"
     "application/x-pkcs7-signature"
     "application/pkcs7-signature" "application/x-pkcs7-mime"
@@ -380,6 +383,7 @@ If not set, `default-directory' will be used."
 
 (defcustom mm-external-terminal-program "xterm"
   "The program to start an external terminal."
+  :version "21.4"
   :type 'string
   :group 'mime-display)
 
@@ -412,6 +416,7 @@ If not set, `default-directory' will be used."
   "Option of verifying signed parts.
 `never', not verify; `always', always verify;
 `known', only verify known protocols.  Otherwise, ask user."
+  :version "21.4"
   :type '(choice (item always)
                 (item never)
                 (item :tag "only known protocols" known)
@@ -522,15 +527,11 @@ Postpone undisplaying of viewers for types in
          ;; solution, avoids most of them.
          (if from
              (setq from (cadr (mail-extract-address-components from))))))
-      (when cte
-       (setq cte (mail-header-strip cte)))
       (if (or (not ctl)
              (not (string-match "/" (car ctl))))
          (mm-dissect-singlepart
           (list mm-dissect-default-type)
-          (and cte (intern (downcase (mail-header-remove-whitespace
-                                      (mail-header-remove-comments
-                                       cte)))))
+          (and cte (intern (downcase (mail-header-strip cte))))
           no-strict-mime
           (and cd (ignore-errors (mail-header-parse-content-disposition cd)))
           description)
@@ -563,9 +564,7 @@ Postpone undisplaying of viewers for types in
           (mm-possibly-verify-or-decrypt
            (mm-dissect-singlepart
             ctl
-            (and cte (intern (downcase (mail-header-remove-whitespace
-                                        (mail-header-remove-comments
-                                         cte)))))
+            (and cte (intern (downcase (mail-header-strip cte))))
             no-strict-mime
             (and cd (ignore-errors
                       (mail-header-parse-content-disposition cd)))
@@ -617,18 +616,17 @@ Postpone undisplaying of viewers for types in
 (defun mm-copy-to-buffer ()
   "Copy the contents of the current buffer to a fresh buffer."
   (save-excursion
-    (let ((flag enable-multibyte-characters)
-         (new-buffer (generate-new-buffer " *mm*")))
+    (let ((obuf (current-buffer))
+         beg)
       (goto-char (point-min))
       (search-forward-regexp "^\n" nil t)
-      (save-restriction
-       (narrow-to-region (point) (point-max))
-       (when flag
-         (set-buffer-multibyte nil))
-       (copy-to-buffer new-buffer (point-min) (point-max))
-       (when flag
-         (set-buffer-multibyte t)))
-      new-buffer)))
+      (setq beg (point))
+      (set-buffer
+       ;; Preserve the data's unibyteness (for url-insert-file-contents).
+       (let ((default-enable-multibyte-characters (mm-multibyte-p)))
+        (generate-new-buffer " *mm*")))
+      (insert-buffer-substring obuf beg)
+      (current-buffer))))
 
 (defun mm-display-parts (handle &optional no-default)
   (if (stringp (car handle))
@@ -1094,9 +1092,10 @@ string if you do not like underscores."
       (setq filename (gnus-map-function mm-file-name-rewrite-functions
                                        (file-name-nondirectory filename))))
     (setq file
-         (read-file-name "Save MIME part to: "
-                         (or mm-default-directory default-directory)
-                         nil nil (or filename name "")))
+         (mm-with-multibyte
+           (read-file-name "Save MIME part to: "
+                           (or mm-default-directory default-directory)
+                           nil nil (or filename name ""))))
     (setq mm-default-directory (file-name-directory file))
     (and (or (not (file-exists-p file))
             (yes-or-no-p (format "File %s already exists; overwrite? "
@@ -1460,6 +1459,10 @@ If RECURSIVE, search recursively."
        (or (listp (car handles))
           (stringp (car handles)))))
 
+(defun mm-complicated-handles (handles)
+  (and (listp (car handles))
+       (> (length handles) 1)))
+
 (defun mm-merge-handles (handles1 handles2)
   (append
    (if (listp (car handles1))