X-Git-Url: http://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fmm-archive.el;h=7cfa4659fd997ed443d06a52cd29a567e0d0b0c9;hb=873ba7b51ddfb07246cd874b7de72662308236c9;hp=43a951ee5797a56a9b3a5d7d4b653aa16dc7b02e;hpb=88c1e362cdc09905cf0400b4c9399e409e910b50;p=gnus diff --git a/lisp/mm-archive.el b/lisp/mm-archive.el index 43a951ee5..7cfa4659f 100644 --- a/lisp/mm-archive.el +++ b/lisp/mm-archive.el @@ -22,15 +22,22 @@ ;;; Code: +(require 'mm-decode) +(eval-when-compile + (autoload 'gnus-recursive-directory-files "gnus-util") + (autoload 'mailcap-extension-to-mime "mailcap")) + (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" t "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-archive-decoders () mm-archive-decoders) (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) @@ -79,6 +86,22 @@ handles))) handles)) +(defun mm-archive-dissect-and-inline (handle) + (let ((start (point-marker))) + (save-restriction + (narrow-to-region (point) (point)) + (dolist (handle (cddr (mm-dissect-archive handle))) + (goto-char (point-max)) + (mm-display-inline handle)) + (goto-char (point-max)) + (mm-handle-set-undisplayer + handle + `(lambda () + (let ((inhibit-read-only t) + (end ,(point-marker))) + (remove-images ,start end) + (delete-region ,start end))))))) + (provide 'mm-archive) ;; mm-archive.el ends here