From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.emacs.gnus.general/36124 Path: main.gmane.org!not-for-mail From: Jaap-Henk Hoepman Newsgroups: gmane.emacs.gnus.general Subject: Patch (mm-encode.el): delayed destroy of external mime viewers Date: 04 May 2001 21:27:40 +0200 Organization: University of Twente, Department of Computer Science Sender: hoepman@cs.utwente.nl Message-ID: NNTP-Posting-Host: coloc-standby.netfonds.no Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: main.gmane.org 1035171761 6878 80.91.224.250 (21 Oct 2002 03:42:41 GMT) X-Complaints-To: usenet@main.gmane.org NNTP-Posting-Date: Mon, 21 Oct 2002 03:42:41 +0000 (UTC) Return-Path: Original-Received: (qmail 14459 invoked by alias); 4 May 2001 19:27:46 -0000 Original-Received: (qmail 14454 invoked from network); 4 May 2001 19:27:45 -0000 Original-Received: from a194-109-241-161.adsl.xs4all.nl (HELO utip202.cs.utwente.nl) (194.109.241.161) by gnus.org with SMTP; 4 May 2001 19:27:45 -0000 Original-Received: (from hoepman@localhost) by utip202.cs.utwente.nl (8.11.2/8.11.2) id f44JReY01265; Fri, 4 May 2001 21:27:40 +0200 X-Authentication-Warning: utip202.cs.utwente.nl: hoepman set sender to hoepman@cs.utwente.nl using -f Original-To: ding@gnus.org X-Face: #U;T;~,y.iVz7!wB(gVzSj:j}x-tZr\v-PQU}''7h^>jaAM'vw1KA83N5/gN~kcktG%,>Q>""S?Fg`&U80!Vg=)El,s/W)W^ User-Agent: Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.1 (Cuyahoga Valley) Original-Lines: 25 Xref: main.gmane.org gmane.emacs.gnus.general:36124 X-Report-Spam: http://spam.gmane.org/gmane.emacs.gnus.general:36124 --=-=-= The following patch implements delayed destroy of external mime viewers. All external mime viewers on parts whose type is a member of the list mm-keep-viewer-alive-types will not be destroyed when switching to another article or to another group. Instead, these viewers stay open until they are explicitly closed by the user, or until gnus is exited. Any remaining temporary files are removed when exiting gnus. Could someone please commit this patch, and perhaps look at a more suitable default for mm-keep-viewer-alive-types Thanks, Jaap-Henk --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=mm-decode.el.patch --- mm-decode.el.orig Fri May 4 21:17:17 2001 +++ mm-decode.el Fri May 4 21:18:23 2001 @@ -22,6 +22,14 @@ ;;; Commentary: +;; Jaap-Henk Hoepman (jhh@xs4all.nl): +;; +;; Added support for delayed destroy of external MIME viewers. All external +;; viewers for mime types in mm-keep-viewer-alive-types will remain active +;; after switching articles or groups, and will only be removed when exiting +;; gnus. +;; + ;;; Code: (require 'mail-parse) @@ -32,6 +40,8 @@ (eval-and-compile (autoload 'mm-inline-partial "mm-partial")) +(add-hook 'gnus-exit-gnus-hook 'mm-destroy-postponed-undisplay-list) + (defgroup mime-display () "Display of MIME in mail and news articles." :link '(custom-manual "(emacs-mime)Customization") @@ -158,6 +168,15 @@ "List of media types that are to be displayed inline." :type '(repeat string) :group 'mime-display) + +(defcustom mm-keep-viewer-alive-types + '("application/postscript" "application/msword" "application/vnd.ms-excel" + "application/pdf" "application/x-dvi" + ) + "List of media types for which the external viewer will not be killed +when selecting a different article." + :type '(repeat string) + :group 'mime-display) (defcustom mm-automatic-display '("text/plain" "text/enriched" "text/richtext" "text/html" @@ -212,6 +231,7 @@ (defvar mm-dissection-list nil) (defvar mm-last-shell-command "") (defvar mm-content-id-alist nil) +(defvar mm-postponed-undisplay-list nil) ;; According to RFC2046, in particular, in a digest, the default ;; Content-Type value for a body part is changed from "text/plain" to @@ -229,6 +249,35 @@ ;;; The functions. +(defun mm-keep-viewer-alive-p (handle) + "Say whether external viewer for HANDLE should stay alive." + (let ((types mm-keep-viewer-alive-types) + (type (mm-handle-media-type handle)) + ty) + (catch 'found + (while (setq ty (pop types)) + (when (string-match ty type) + (throw 'found t)))))) + +(defun mm-handle-set-external-undisplayer (handle function) + "Set the undisplayer for this handle; postpone undisplaying of viewers +for types in mm-keep-viewer-alive-types." + (if (mm-keep-viewer-alive-p handle) + (progn + (setq new-handle (copy-sequence handle)) + (mm-handle-set-undisplayer new-handle function) + (mm-handle-set-undisplayer handle nil) + (push new-handle mm-postponed-undisplay-list) + ) + (mm-handle-set-undisplayer handle function) + ) +) + +(defun mm-destroy-postponed-undisplay-list () + (message "Destroying external MIME viewers") + (mm-destroy-parts mm-postponed-undisplay-list) +) + (defun mm-dissect-buffer (&optional no-strict-mime) "Dissect the current buffer and return a list of MIME handles." (save-excursion @@ -432,7 +481,7 @@ shell-command-switch (mm-mailcap-command method file (mm-handle-type handle))) - (mm-handle-set-undisplayer handle (cons file buffer))) + (mm-handle-set-external-undisplayer handle (cons file buffer))) (message "Displaying %s..." (format method file)) 'external) (copiousoutput @@ -468,7 +517,7 @@ shell-command-switch (mm-mailcap-command method file (mm-handle-type handle))) - (mm-handle-set-undisplayer handle (cons file buffer))) + (mm-handle-set-external-undisplayer handle (cons file buffer))) (message "Displaying %s..." (format method file)) 'external))))))) --=-=-= -- Jaap-Henk Hoepman | Come sail your ships around me Dept. of Computer Science | And burn your bridges down University of Twente | Nick Cave - "Ship Song" Email: hoepman@cs.utwente.nl === WWW: www.cs.utwente.nl/~hoepman Phone: +31 53 4893795 === Secr: +31 53 4893770 === Fax: +31 53 4894590 PGP ID: 0xF52E26DD Fingerprint: 1AED DDEB C7F1 DBB3 0556 4732 4217 ABEF --=-=-=--