help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Better way to make sure external command exists in the system?


From: Jean Louis
Subject: Re: Better way to make sure external command exists in the system?
Date: Tue, 23 Mar 2021 11:02:32 +0300
User-agent: Mutt/2.0.6 (2021-03-06)

* 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 via email to

[Prev in Thread] Current Thread [Next in Thread]