From: Katsumi Yamaoka Date: Wed, 27 Jul 2005 08:27:12 +0000 (+0000) Subject: (mm-display-external): Delete temp file, directory and buffer immediately X-Git-Url: http://cgit.sxemacs.org/?a=commitdiff_plain;ds=sidebyside;h=f7aa2d077007566b256e7b1be841da6fcb4bcf79;p=gnus (mm-display-external): Delete temp file, directory and buffer immediately if the external process is exited. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 9633cee5c..2da7ceab1 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2005-07-27 Katsumi Yamaoka + + * mm-decode.el (mm-display-external): Delete temp file, directory + and buffer immediately if the external process is exited. + 2005-07-26 Katsumi Yamaoka * gnus-art.el (gnus-article-next-page-1): Don't scroll if there're diff --git a/lisp/mm-decode.el b/lisp/mm-decode.el index 7c34f7e2c..1eb019f27 100644 --- a/lisp/mm-decode.el +++ b/lisp/mm-decode.el @@ -811,11 +811,32 @@ external if displayed external." (let ((command (mm-mailcap-command method file (mm-handle-type handle)))) (unwind-protect - (start-process "*display*" - (setq buffer - (generate-new-buffer " *mm*")) - shell-file-name - shell-command-switch command) + (progn + (start-process "*display*" + (setq buffer + (generate-new-buffer " *mm*")) + shell-file-name + shell-command-switch command) + (set-process-sentinel + (get-buffer-process buffer) + `(lambda (process state) + (when (eq 'exit (process-status process)) + ;; Don't use `ignore-errors'. + (condition-case nil + (delete-file ,file) + (error)) + (condition-case nil + (delete-directory ,(file-name-directory file)) + (error)) + (condition-case nil + (kill-buffer ,buffer) + (error)) + (condition-case nil + ,(macroexpand (list 'mm-handle-set-undisplayer + (list 'quote handle) + nil)) + (error)) + (message "Displaying %s...done" ,command))))) (mm-handle-set-external-undisplayer handle (cons file buffer))) (message "Displaying %s..." command))