Merge remote-tracking branch 'origin/no-gnus'
[gnus] / lisp / mm-decode.el
index dc29718..03bcaa1 100644 (file)
@@ -249,6 +249,8 @@ before the external MIME handler is invoked."
     ("message/partial" mm-inline-partial identity)
     ("message/external-body" mm-inline-external-body identity)
     ("text/.*" mm-inline-text identity)
+    ("application/x-.?tar\\(-.*\\)?" mm-archive-dissect-and-inline identity)
+    ("application/zip" mm-archive-dissect-and-inline identity)
     ("audio/wav" mm-inline-audio
      (lambda (handle)
        (and (or (featurep 'nas-sound) (featurep 'native-sound))
@@ -298,6 +300,9 @@ before the external MIME handler is invoked."
     "application/pgp-signature" "application/x-pkcs7-signature"
     "application/pkcs7-signature" "application/x-pkcs7-mime"
     "application/pkcs7-mime"
+    "application/x-gtar-compressed"
+    "application/x-tar"
+    "application/zip"
     ;; Mutt still uses this even though it has already been withdrawn.
     "application/pgp")
   "List of media types that are to be displayed inline.
@@ -659,7 +664,9 @@ Postpone undisplaying of viewers for types in
            (mm-copy-to-buffer) ctl cte nil cdl description nil id))
          (decoder (assoc (car ctl) mm-archive-decoders)))
       (if (and decoder
-              (executable-find (cadr decoder)))
+              ;; Do automatic decoding
+              (cadr decoder)
+              (executable-find (caddr decoder)))
          (mm-dissect-archive handle)
        handle))))
 
@@ -945,15 +952,17 @@ external if displayed external."
                           (condition-case nil
                               (delete-directory (file-name-directory file))
                             (error))
-                          (with-current-buffer outbuf
-                            (let ((buffer-read-only nil)
-                                  (point (point)))
-                              (forward-line 2)
-                              (mm-insert-inline
-                               handle (with-current-buffer buffer
-                                        (buffer-string)))
-                              (goto-char point)))
-                          (kill-buffer buffer))
+                          (when (buffer-live-p outbuf)
+                            (with-current-buffer outbuf
+                              (let ((buffer-read-only nil)
+                                    (point (point)))
+                                (forward-line 2)
+                                (mm-insert-inline
+                                 handle (with-current-buffer buffer
+                                          (buffer-string)))
+                                (goto-char point))))
+                          (when (buffer-live-p buffer)
+                            (kill-buffer buffer)))
                         (message "Displaying %s...done" command)))))
                (mm-handle-set-external-undisplayer
                 handle (cons file buffer)))