From bd1f30291bc332cc65decff5c766c81457e2d0d8 Mon Sep 17 00:00:00 2001 From: Cecilio Pardo Date: Sun, 27 Oct 2024 14:39:34 +0100 Subject: [PATCH] Fix yank media to allow SVG files. * lisp/net/mailcap.el (mailcap-mime-type-to-extension): Return "svg" for mime type image/svg+xml. Org-mode uses this. * lisp/yank-media.el (yank-media--find-matching-media): If svg is supported, don't filter out image/svg+xml --- lisp/net/mailcap.el | 15 +++++++++++---- lisp/yank-media.el | 7 ++++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/lisp/net/mailcap.el b/lisp/net/mailcap.el index 3e847c758c2..d3ca899216a 100644 --- a/lisp/net/mailcap.el +++ b/lisp/net/mailcap.el @@ -1084,10 +1084,17 @@ mailcap-file-name-to-mime-type (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." diff --git a/lisp/yank-media.el b/lisp/yank-media.el index 6655bb705ef..17981c37c0e 100644 --- a/lisp/yank-media.el +++ b/lisp/yank-media.el @@ -67,7 +67,12 @@ yank-media--find-matching-media (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'. -- 2.35.1.windows.2