unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: Jean Louis <bugs@gnu.support>
To: help-gnu-emacs@gnu.org
Subject: Re: Better way to make sure external command exists in the system?
Date: Tue, 23 Mar 2021 11:02:32 +0300	[thread overview]
Message-ID: <YFmgmMt3A738/3tB@protected.localdomain> (raw)
In-Reply-To: <87y2ego29q.fsf@zoho.eu>

* Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> [2021-03-21 20:18]:
> Jean Louis wrote:
> 
> > I would not like later invoking functions that don't work.
> > But I do the checks in the functions. Sometimes majority of
> > functions belong in the same domain that uses
> > external commands.
> >
> > (defun rcd-which-list (command-list)
> >   "Verifies that list of shell commands COMMAND-LIST exist in
> > user's $PATH"
> >   (let ((all-exist t))
> >     (dolist (command command-list all-exist)
> >       (unless (executable-find command)
> > 	(setq all-exist nil)
> > 	(rcd-warning-message "Shell command `%s' does not exist" command)))))
> >
> > [and much more Elisp]
> 
> I'll read it, if you fix all this first...
> 
> byte compiler:
> 
> geh.el: 
> In image-resize-dired:
> geh.el:324:32: Warning: reference to free variable
>     ‘*image-default-resize-size*’

;;; image-resize-dired.el --- Function to resize images in Dired
;; dired-get-marked-files is in dired

;;; Commentary:
;; 

;;; Code:

(require 'dired)

(defvar *image-default-resize-size* 1536)
(defvar *image-resize-sizes* '("1536" "1024" "800" "1200" "640"))

;; Place your warning sound file yourself
(defcustom rcd-warning-message-sound-file nil
  "The sound file for warning messages."
  :group 'rcd
  :type 'string)

(defun image-resize (file &optional size)
  "Resizes the JPG image with default SIZE.
Argument FILE is image to be resized."
  (if (rcd-which-list '("mogrify"))
      (let ((extension (file-name-extension file)))
	(when (or (equal (downcase extension) "jpg")
		  (equal (downcase extension) "png"))
	  (let* ((file (shell-double-quote file))
		 (command (format "mogrify -resize %s \"%s\"" size file)))
	    (message command)
	    (call-process-shell-command command))))
    (rcd-warning-message "RCD ERROR: `mogrify' not found in `$PATH'")))

(defun image-resize-dired ()
  "Resizes images."
  (interactive)
  (let ((files (dired-get-marked-files))
	(size (read-number "Size: " *image-default-resize-size* '(*image-resize-sizes*))))
    (dolist (file files)
      (image-resize file size))
    (revert-buffer)))

(defun shell-double-quote (s)
  "Double quotes for the string that shall be fed to shell command.
Argument S is string."
  (replace-regexp-in-string "\"" "\\\\\"" s))

(provide 'image-resize-dired)

;;; image-resize-dired.el ends here



  reply	other threads:[~2021-03-23  8:02 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-18 12:13 Better way to make sure external command exists in the system? Jean Louis
2021-03-19 13:57 ` Daniel Martín
2021-03-19 14:16   ` 2QdxY4RzWzUUiLuE
2021-03-21 14:10     ` Jean Louis
2021-03-21 17:17       ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-03-21 14:07   ` Jean Louis
2021-03-21 17:16     ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-03-23  8:02       ` Jean Louis [this message]
2021-03-23  9:56         ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-03-23 10:13           ` Jean Louis
2021-03-25 15:01             ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-03-25 15:17               ` Jean Louis
2021-03-25 20:47                 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-03-25 20:56                   ` Jean Louis
2021-03-25 21:10                     ` Emanuel Berg via Users list for the GNU Emacs text editor

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

  List information: https://www.gnu.org/software/emacs/

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

  git send-email \
    --in-reply-to=YFmgmMt3A738/3tB@protected.localdomain \
    --to=bugs@gnu.support \
    --cc=help-gnu-emacs@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.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).