[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Displaying MIME parts internally/externally in Gnus
From: |
Stefan Monnier |
Subject: |
Displaying MIME parts internally/externally in Gnus |
Date: |
Sun, 20 Nov 2005 21:42:07 -0500 |
User-agent: |
Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (gnu/linux) |
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\)."
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Displaying MIME parts internally/externally in Gnus,
Stefan Monnier <=