all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Tino Calancha <tino.calancha@gmail.com>
To: "Clément Pit--Claudel" <clement.pit@gmail.com>
Cc: Emacs developers <emacs-devel@gnu.org>
Subject: Re: master ca47390: image-dired: Report when a necessary executable is not found
Date: Mon, 5 Sep 2016 14:30:21 +0900 (JST)	[thread overview]
Message-ID: <alpine.DEB.2.20.1609051429390.32022@calancha-pc> (raw)
In-Reply-To: <9ba96760-15da-e7f5-a4e5-4a93ecd49f7a@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 5803 bytes --]


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 <tino.calancha@gmail.com>
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


  reply	other threads:[~2016-09-05  5:30 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20160904134431.30494.94659@vcs.savannah.gnu.org>
     [not found] ` <20160904134431.7513F220140@vcs.savannah.gnu.org>
2016-09-04 16:41   ` master ca47390: image-dired: Report when a necessary executable is not found Glenn Morris
2016-09-05  3:42     ` Tino Calancha
2016-09-05  4:42       ` Clément Pit--Claudel
2016-09-05  5:30         ` Tino Calancha [this message]
2016-09-05  6:41           ` Andreas Schwab
2016-09-05  7:12             ` Tino Calancha
2016-09-05 15:48           ` Clément Pit--Claudel
2016-09-05 18:00         ` Tino Calancha
2016-09-12 18:44       ` Glenn Morris
2016-09-12 19:44         ` Tino Calancha

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.DEB.2.20.1609051429390.32022@calancha-pc \
    --to=tino.calancha@gmail.com \
    --cc=clement.pit@gmail.com \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.