From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.devel Subject: Displaying MIME parts internally/externally in Gnus Date: Sun, 20 Nov 2005 21:42:07 -0500 Message-ID: <87irum4tka.fsf-monnier+emacs@gnu.org> NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: sea.gmane.org 1132541052 3214 80.91.229.2 (21 Nov 2005 02:44:12 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Mon, 21 Nov 2005 02:44:12 +0000 (UTC) Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Nov 21 03:44:00 2005 Return-path: Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1Ee1dN-0002Hs-BF for ged-emacs-devel@m.gmane.org; Mon, 21 Nov 2005 03:42:22 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Ee1dM-0004Q0-QH for ged-emacs-devel@m.gmane.org; Sun, 20 Nov 2005 21:42:20 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Ee1dD-0004Pv-12 for emacs-devel@gnu.org; Sun, 20 Nov 2005 21:42:11 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Ee1dB-0004Pj-FJ for emacs-devel@gnu.org; Sun, 20 Nov 2005 21:42:10 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Ee1dB-0004Pg-Ae for emacs-devel@gnu.org; Sun, 20 Nov 2005 21:42:09 -0500 Original-Received: from [209.226.175.93] (helo=tomts36-srv.bellnexxia.net) by monty-python.gnu.org with esmtp (Exim 4.34) id 1Ee1dB-0003f3-CL for emacs-devel@gnu.org; Sun, 20 Nov 2005 21:42:09 -0500 Original-Received: from alfajor ([67.71.33.38]) by tomts36-srv.bellnexxia.net (InterMail vM.5.01.06.10 201-253-122-130-110-20040306) with ESMTP id <20051121024208.FWJT16985.tomts36-srv.bellnexxia.net@alfajor>; Sun, 20 Nov 2005 21:42:08 -0500 Original-Received: by alfajor (Postfix, from userid 1000) id 0C1CDD72BA; Sun, 20 Nov 2005 21:42:08 -0500 (EST) Original-To: emacs-devel@gnu.org, gnus@gnus.org User-Agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (gnu/linux) X-Originating-IP: [0] X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:46385 Archived-At: Many attachments come with poor content-type description, in which case Gnus typically doesn't know what to do with it. When doing "view externally", such attachments are actually saved. I don't know about you, but I don't consider "saving" as a sort of "viewing" activity. If I had wanted to save the attachment I'd have used something more like, say, the "Save" command instead, don't you think? Similar problems happen for "view internally". So I suggest the patch below which tries harder to show the attachment internally or externally: if the content-type can't be displayed as requested, it asks the user what kind of content-type to use instead. A minor variant of it has been mildly tested (and only on Emacs-CVS), and it's based on a very shallow understanding of the code, so it's probably not perfect. If there's no objection I'll install it, otherwise please tell me what's wrong with it. Stefan --- gnus-art.el 23 oct 2005 22:29:41 -0400 1.98 +++ gnus-art.el 20 nov 2005 21:33:17 -0500 @@ -4276,14 +4276,16 @@ (def-type (and name (mm-default-file-encoding name)))) (and def-type (cons def-type 0)))) -(defun gnus-mime-view-part-as-type (&optional mime-type) - "Choose a MIME media type, and view the part as such." +(defun gnus-mime-view-part-as-type (&optional mime-type pred) + "Choose a MIME media type, and view the part as such. +If non-nil, PRED is a predicate to use during completion to limit the +available media-types." (interactive) (unless mime-type (setq mime-type (completing-read "View as MIME type: " (mapcar #'list (mailcap-mime-types)) - nil nil + pred nil (gnus-mime-view-part-as-type-internal)))) (gnus-article-check-buffer) (let ((handle (get-text-property (point) 'gnus-data))) @@ -4450,12 +4452,18 @@ (mm-inlined-types nil) (mail-parse-charset gnus-newsgroup-charset) (mail-parse-ignored-charsets - (save-excursion (set-buffer gnus-summary-buffer) - gnus-newsgroup-ignored-charsets))) + (with-current-buffer gnus-summary-buffer + gnus-newsgroup-ignored-charsets)) + (type (mm-handle-media-type handle)) + (method (mailcap-mime-info type)) + (mm-enable-external t)) + (if (not (stringp method)) + (gnus-mime-view-part-as-type + nil (lambda (type) (stringp (mailcap-mime-info type)))) (when handle (if (mm-handle-undisplayer handle) (mm-remove-part handle) - (mm-display-part handle))))) + (mm-display-part handle)))))) (defun gnus-mime-view-part-internally (&optional handle) "View the MIME part under point with an internal viewer. @@ -4467,13 +4475,16 @@ (mm-inline-large-images t) (mail-parse-charset gnus-newsgroup-charset) (mail-parse-ignored-charsets - (save-excursion (set-buffer gnus-summary-buffer) + (with-current-buffer gnus-summary-buffer gnus-newsgroup-ignored-charsets)) (inhibit-read-only t)) + (if (not (mm-inlinable-p handle)) + (gnus-mime-view-part-as-type + nil (lambda (type) (mm-inlinable-p handle type))) (when handle (if (mm-handle-undisplayer handle) (mm-remove-part handle) - (mm-display-part handle))))) + (mm-display-part handle)))))) (defun gnus-mime-action-on-part (&optional action) "Do something with the MIME attachment at \(point\)."