emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Displaying MIME parts internally/externally in Gnus


From: Stefan Monnier
Subject: Re: Displaying MIME parts internally/externally in Gnus
Date: Fri, 02 Dec 2005 10:11:56 -0500
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (gnu/linux)

I haven't heard the slightest comment about this.  Hello?
Is anybody there?


        Stefan


>>>>> "Stefan" == Stefan Monnier <address@hidden> writes:

> 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\)."




reply via email to

[Prev in Thread] Current Thread [Next in Thread]