From e1f09607e02eb507b229285ed48b85a3c6a50259 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Mon, 3 Aug 2020 09:14:52 +0200 Subject: [PATCH] Make `n'/`p' in image-mode also find externally converted images * lisp/image-file.el (image-file-name-regexp): Use it to make `n'/`p' in image mode work (bug#39994). * lisp/image/image-converter.el (image-converter-file-name-extensions): New variable to keep track of all suffixes. (image-convert-p): Update. (image-converter--find-converter): Set. --- lisp/image-file.el | 12 ++++++++---- lisp/image/image-converter.el | 14 ++++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/lisp/image-file.el b/lisp/image-file.el index 89cd75d50dd..22366c89e6a 100644 --- a/lisp/image-file.el +++ b/lisp/image-file.el @@ -32,6 +32,7 @@ ;;; Code: (require 'image) +(require 'image-converter) ;;;###autoload @@ -80,10 +81,13 @@ the variable is set using \\[customize]." (let ((exts-regexp (and image-file-name-extensions (concat "\\." - (regexp-opt (nconc (mapcar #'upcase - image-file-name-extensions) - image-file-name-extensions) - t) + (regexp-opt + (append (mapcar #'upcase image-file-name-extensions) + image-file-name-extensions + (mapcar #'upcase + image-converter-file-name-extensions) + image-converter-file-name-extensions) + t) "\\'")))) (mapconcat 'identity diff --git a/lisp/image/image-converter.el b/lisp/image/image-converter.el index b694052f5b9..ee1dc845fb5 100644 --- a/lisp/image/image-converter.el +++ b/lisp/image/image-converter.el @@ -42,6 +42,9 @@ installed on the system." (defvar image-converter-regexp nil "A regexp that matches the file name suffixes that can be converted.") +(defvar image-converter-file-name-extensions nil + "A list of file name suffixes that can be converted.") + (defvar image-converter--converters '((graphicsmagick :command ("gm" "convert") :probe ("-list" "format")) (ffmpeg :command "ffmpeg" :probe "-decoders") @@ -58,9 +61,11 @@ is a string, it should be a MIME format string like (unless image-converter (image-converter--find-converter)) ;; When image-converter was customized - (if (and image-converter (not image-converter-regexp)) - (when-let ((formats (image-converter--probe image-converter))) - (setq image-converter-regexp (concat "\\." (regexp-opt formats) "\\'")))) + (when (and image-converter (not image-converter-regexp)) + (when-let ((formats (image-converter--probe image-converter))) + (setq image-converter-regexp + (concat "\\." (regexp-opt formats) "\\'")) + (setq image-converter-file-name-extensions formats))) (and image-converter (or (and (not data-p) (string-match image-converter-regexp source)) @@ -183,7 +188,8 @@ data is returned as a string." (dolist (elem image-converter--converters) (when-let ((formats (image-converter--probe (car elem)))) (setq image-converter (car elem) - image-converter-regexp (concat "\\." (regexp-opt formats) "\\'")) + image-converter-regexp (concat "\\." (regexp-opt formats) "\\'") + image-converter-file-name-extensions formats) (throw 'done image-converter))))) (cl-defmethod image-converter--convert ((type (eql graphicsmagick)) source