]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix 'yank-media' to allow yanking SVG data
authorCecilio Pardo <cpardo@imayhem.com>
Sun, 27 Oct 2024 13:39:34 +0000 (14:39 +0100)
committerEshel Yaron <me@eshelyaron.com>
Fri, 1 Nov 2024 13:20:40 +0000 (14:20 +0100)
* 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'.  (Bug#74044)

(cherry picked from commit bf395fd8bcc68499479cd6df31319eca93509359)

lisp/net/mailcap.el
lisp/yank-media.el

index 5ff75deb4e63e020eb031899eedb58c0d6bfd991..7a4acdd8af42310f116447a97e6afdee953635f1 100644 (file)
@@ -1084,10 +1084,17 @@ For instance, \"foo.png\" will result in \"image/png\"."
 (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."
index 563aae8541931fd5e47219420a740b8217703676..7f8a3d378296511703411506a44041d3a84594cd 100644 (file)
@@ -67,7 +67,12 @@ all the different selection 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'.