(defun mailcap-mime-type-to-extension (mime-type)
"Return a file name extension based on a MIME-TYPE.
For instance, `image/png' will result in `png'."
- (intern (cadr (split-string (if (symbolp mime-type)
- (symbol-name mime-type)
- mime-type)
- "/"))))
+ (intern
+ (let ((e (cadr (split-string (if (symbolp mime-type)
+ (symbol-name mime-type)
+ mime-type)
+ "/"))))
+ ;; Usually, the normal extension is the same as the MIME subtype.
+ ;; But for SVG files, the extension is "svg" and the MIME type is
+ ;; "svg+xml".
+ (if (string= e "svg+xml")
+ "svg"
+ e))))
(defun mailcap-mime-types ()
"Return a list of MIME media types."
(lambda (type)
(pcase-let ((`(,major ,minor) (split-string (symbol-name type) "/")))
(if (and (equal major "image")
- (not (image-type-available-p (intern minor))))
+ (not (image-type-available-p
+ ;; Usually, MIME subtype is the same as Emacs'
+ ;; identifier for an image type. But for SVG, the
+ ;; identifier is 'svg, while the MIME type is
+ ;; image/svg+xml. So we make the exception here.
+ (intern (if (string= minor "svg+xml") "svg" minor)))))
;; Just filter out all the image types that Emacs doesn't
;; support, because the clipboard is full of things like
;; `image/x-win-bitmap'.