Don't unpack zip/tar files automatically, but allow RET-ing them
authorLars Ingebrigtsen <larsi@gnus.org>
Thu, 9 Feb 2012 21:54:26 +0000 (22:54 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Thu, 9 Feb 2012 21:54:26 +0000 (22:54 +0100)
lisp/ChangeLog
lisp/mm-archive.el
lisp/mm-decode.el

index 6cf2f0c..905e6f5 100644 (file)
@@ -1,5 +1,7 @@
 2012-02-09  Lars Ingebrigtsen  <larsi@gnus.org>
 
+       * mm-archive.el (mm-archive-dissect-and-inline): New function.
+
        * gnus-compat.el: Define `timer-set-function'.
 
        * mm-decode.el (mm-display-external): Output the text from the command
index 43a951e..3f01735 100644 (file)
 ;;; Code:
 
 (defvar mm-archive-decoders
-  '(("application/ms-tnef" "tnef" "-f" "-" "-C")
-    ("application/zip" "unzip" "-j" "-x" "%f" "-d")
-    ("application/x-gtar-compressed" "tar" "xzf" "-" "-C")
-    ("application/x-tar" "tar" "xf" "-" "-C")))
+  '(("application/ms-tnef" "tnef" "-f" "-" "-C")
+    ("application/zip" nil "unzip" "-j" "-x" "%f" "-d")
+    ("application/x-gtar-compressed" nil "tar" "xzf" "-" "-C")
+    ("application/x-tar" nil "tar" "xf" "-" "-C")))
 
 (defun mm-dissect-archive (handle)
-  (let ((decoder (cdr (assoc (car (mm-handle-type handle))
-                            mm-archive-decoders)))
+  (let ((decoder (cddr (assoc (car (mm-handle-type handle))
+                             mm-archive-decoders)))
        (dir (mm-make-temp-file
              (expand-file-name "emm." mm-tmp-directory) 'dir)))
     (set-file-modes dir #o700)
         handles)))
     handles))
 
+(defun mm-archive-dissect-and-inline (handle)
+  (dolist (handle (cddr (mm-dissect-archive handle)))
+    (mm-display-inline handle)))
+
 (provide 'mm-archive)
 
 ;; mm-archive.el ends here
index 6ec226f..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))))