aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Ingebrigtsen2022-03-21 18:05:18 +0100
committerLars Ingebrigtsen2022-03-21 18:05:18 +0100
commitd74cd0cf1f96e256c479599939efacd11600c0c8 (patch)
tree97d47945bff9757af2ffa38a40c776b92ab7fc43
parent61d34c6a500d487c8952d4ad7751e1deb80f5bfc (diff)
downloademacs-d74cd0cf1f96e256c479599939efacd11600c0c8.tar.gz
emacs-d74cd0cf1f96e256c479599939efacd11600c0c8.zip
Make `n' in image-mode work more reliably with external formats
* lisp/image-mode.el (image-mode): Init the external machinery so that commands like `n' work for those files. * lisp/image/image-converter.el (image-converter-initialize): Factored out into own function. (image-convert-p): Use it. (image-convert): Ditto.
-rw-r--r--lisp/image-mode.el9
-rw-r--r--lisp/image/image-converter.el14
2 files changed, 16 insertions, 7 deletions
diff --git a/lisp/image-mode.el b/lisp/image-mode.el
index b2af3f06a27..38a5e7cdfdc 100644
--- a/lisp/image-mode.el
+++ b/lisp/image-mode.el
@@ -625,6 +625,8 @@ image as text, when opening such images in `image-mode'."
625 625
626(put 'image-mode 'mode-class 'special) 626(put 'image-mode 'mode-class 'special)
627 627
628(declare-function image-converter-initialize "image-converter.el")
629
628;;;###autoload 630;;;###autoload
629(defun image-mode () 631(defun image-mode ()
630 "Major mode for image files. 632 "Major mode for image files.
@@ -650,7 +652,12 @@ Key bindings:
650 "Empty file" 652 "Empty file"
651 "(New file)") 653 "(New file)")
652 "Empty buffer")) 654 "Empty buffer"))
653 (image-mode--display))) 655 (image-mode--display)
656 ;; Ensure that we recognize externally parsed image formats in
657 ;; commands like `n'.
658 (when image-use-external-converter
659 (require 'image-converter)
660 (image-converter-initialize))))
654 661
655(defun image-mode--display () 662(defun image-mode--display ()
656 (if (not (image-get-display-property)) 663 (if (not (image-get-display-property))
diff --git a/lisp/image/image-converter.el b/lisp/image/image-converter.el
index b8c9a620024..a339e95ab4a 100644
--- a/lisp/image/image-converter.el
+++ b/lisp/image/image-converter.el
@@ -68,15 +68,19 @@ not, conversion will fail."
68 (imagemagick :command "convert" :probe ("-list" "format"))) 68 (imagemagick :command "convert" :probe ("-list" "format")))
69 "List of supported image converters to try.") 69 "List of supported image converters to try.")
70 70
71(defun image-converter-initialize ()
72 "Determine the external image converter to be used.
73This also determines which external formats we can parse."
74 (unless image-converter
75 (image-converter--find-converter)))
76
71(defun image-convert-p (source &optional data-p) 77(defun image-convert-p (source &optional data-p)
72 "Return `image-convert' if SOURCE is an image that can be converted. 78 "Return `image-convert' if SOURCE is an image that can be converted.
73SOURCE can either be a file name or a string containing image 79SOURCE can either be a file name or a string containing image
74data. In the latter case, DATA-P should be non-nil. If DATA-P 80data. In the latter case, DATA-P should be non-nil. If DATA-P
75is a string, it should be a MIME format string like 81is a string, it should be a MIME format string like
76\"image/gif\"." 82\"image/gif\"."
77 ;; Find an installed image converter. 83 (image-converter-initialize)
78 (unless image-converter
79 (image-converter--find-converter))
80 ;; When image-converter was customized 84 ;; When image-converter was customized
81 (when (and image-converter (not image-converter-regexp)) 85 (when (and image-converter (not image-converter-regexp))
82 (when-let ((formats (image-converter--probe image-converter))) 86 (when-let ((formats (image-converter--probe image-converter)))
@@ -111,9 +115,7 @@ IMAGE can also be an image object as returned by `create-image'.
111 115
112This function converts the image the preferred format, and the 116This function converts the image the preferred format, and the
113converted image data is returned as a string." 117converted image data is returned as a string."
114 ;; Find an installed image converter. 118 (image-converter-initialize)
115 (unless image-converter
116 (image-converter--find-converter))
117 (unless image-converter 119 (unless image-converter
118 (error "No external image converters available")) 120 (error "No external image converters available"))
119 (when (and image-format 121 (when (and image-format