On Mon, 5 Sep 2016, Clément Pit--Claudel wrote: > On 2016-09-04 23:42, Tino Calancha wrote: >> Please let me know if the following patch is OK: >> … > >> (defcustom image-dired-cmd-create-thumbnail-program >> - "convert" >> + (executable-find "convert") > >> … > >> (defcustom image-dired-cmd-create-thumbnail-program >> - (executable-find "convert") >> + (when (executable-find "convert") "convert") > > I don't understand how these two consecutive patches works. My motivation is to report more clearly when a necessary executable is missing. If i don't have installed "jpegtran" (image-dired-cmd-rotate-original-program) and i call image-dired-rotate-original i get the message: "Could not rotate image" >Assume I don't have "convert". Before the patches Emacs would complain, >and installing ImageMagick would fix the complaint. >After, Emacs will complain about not finding "convert", but after I >install ImageMagick Emacs will keep complaining, because the defcustom >will still be nil. Is this intended? Or am I misunderstanding something? Good point. I agree is a nuisance having to set those values after installing the executable. How about following more simple patch?: It just check for the required executable at the top of each function using it; it signals an error if the executable is not found: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; From cefb3ca722ade34f81f54b0f1a09b8ba759b1f69 Mon Sep 17 00:00:00 2001 From: Tino Calancha Date: Mon, 5 Sep 2016 14:23:15 +0900 Subject: [PATCH] image-dired: Signal an error before calling a missing executable lisp/image-dired.el (image-dired-display-image) (image-dired-rotate-thumbnail) (image-dired-rotate-original) (image-dired-set-exif-data) (image-dired-get-exif-data): Throw and error when the executable used in the function is missing. (image-dired-next-line, image-dired-previous-line): Use 'forward-line'. --- lisp/image-dired.el | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/lisp/image-dired.el b/lisp/image-dired.el index 34e4eae..617914a 100644 --- a/lisp/image-dired.el +++ b/lisp/image-dired.el @@ -615,6 +615,8 @@ image-dired-thumb-name (defun image-dired-create-thumb (original-file thumbnail-file) "For ORIGINAL-FILE, create thumbnail image named THUMBNAIL-FILE." + (unless (executable-find image-dired-cmd-create-thumbnail-program) + (error "Executable image-dired-cmd-create-thumbnail-program is not found")) (let* ((width (int-to-string image-dired-thumb-width)) (height (int-to-string image-dired-thumb-height)) (modif-time (format "%.0f" (float-time (nth 5 (file-attributes @@ -1144,7 +1146,8 @@ image-dired-next-line "Move to next line and display properties." (interactive) (let ((goal-column (current-column))) - (next-line)) + (forward-line 1) + (move-to-column goal-column)) ;; If we end up in an empty spot, back up to the next thumbnail. (if (not (image-dired-image-at-point-p)) (image-dired-backward-image)) @@ -1157,7 +1160,8 @@ image-dired-previous-line "Move to previous line and display properties." (interactive) (let ((goal-column (current-column))) - (previous-line)) + (forward-line -1) + (move-to-column goal-column)) ;; If we end up in an empty spot, back up to the next ;; thumbnail. This should only happen if the user deleted a ;; thumbnail and did not refresh, so it is not very common. But we @@ -1802,6 +1806,8 @@ image-dired-display-image If optional argument ORIGINAL-SIZE is non-nil, display image in its original size." + (unless (executable-find image-dired-cmd-create-temp-image-program) + (error "image-dired-cmd-create-temp-image-program is not found")) (let ((new-file (expand-file-name image-dired-temp-image-file)) width height command ret (image-type 'jpeg)) @@ -1866,6 +1872,8 @@ image-dired-image-at-point-p (defun image-dired-rotate-thumbnail (degrees) "Rotate thumbnail DEGREES degrees." + (unless (executable-find image-dired-cmd-rotate-thumbnail-program) + (error "image-dired-cmd-rotate-thumbnail-program is not found")) (if (not (image-dired-image-at-point-p)) (message "No thumbnail at point") (let ((file (image-dired-thumb-name (image-dired-original-file-name))) @@ -1908,6 +1916,8 @@ image-dired-refresh-thumb (defun image-dired-rotate-original (degrees) "Rotate original image DEGREES degrees." + (unless (executable-find image-dired-cmd-rotate-original-program) + (error "image-dired-cmd-rotate-original-program is not found")) (if (not (image-dired-image-at-point-p)) (message "No image at point") (let ((file (image-dired-original-file-name)) @@ -1986,6 +1996,8 @@ image-dired-thumbnail-set-image-description (defun image-dired-set-exif-data (file tag-name tag-value) "In FILE, set EXIF tag TAG-NAME to value TAG-VALUE." + (unless (executable-findimage-dired-cmd-write-exif-data-program) + (error "image-dired-cmd-write-exif-data-program is not found")) (let (command) (setq command (format-spec image-dired-cmd-write-exif-data-options @@ -1998,6 +2010,8 @@ image-dired-set-exif-data (defun image-dired-get-exif-data (file tag-name) "From FILE, return EXIF tag TAG-NAME." + (unless (executable-find image-dired-cmd-read-exif-data-program) + (error "image-dired-cmd-read-exif-data-program is not found")) (let ((buf (get-buffer-create "*image-dired-get-exif-data*")) command tag-value) (setq command (format-spec -- 2.9.3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Repository revision: 2db3307e8a966a8f652a210d8f8eb83daddd7d9f