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 13:13:27 +0300 [thread overview]
Message-ID: <YFm/R5Hd8xuCJgq4@protected.localdomain> (raw)
In-Reply-To: <87o8faxkfd.fsf@zoho.eu>
Hello,
Thanks for noticing, I did not. It was work in progress and I was
mostly resizing to 1536 and did not even touch those other sizes.
* Emanuel Berg via Users list for the GNU Emacs text editor <help-gnu-emacs@gnu.org> [2021-03-23 12:58]:
> Jean Louis wrote:
>
> OK, let's see, straight X-Mas Eve this...
>
> > (defvar *image-default-resize-size* 1536)
> > (defvar *image-resize-sizes* '("1536" "1024" "800" "1200" "640"))
Now it is:
(defvar image-default-resize-size "1536")
(defvar image-resize-sizes '("1536" "1024" "800" "1200" "640"))
> The *common-lisp-convention* for global variables is
> disencourage in Elisp.
Yes, those functions are old. Who knows what I knew back then.
> Also, why the strings?
Maybe it works with numbers, but now I changed it to completing-read,
maybe that is why I placed it as strings.
(defun image-resize-dired ()
"Resizes images."
(interactive)
(let ((files (dired-get-marked-files))
(size (completing-read "Size: " image-resize-sizes nil t image-default-resize-size)))
(dolist (file files)
(image-resize file size))
(revert-buffer)))
That way is better, my choice of 1536 is offered, but if I delete it,
I can complete it with some of other default choices. It is very handy
to mark files and resize them how one wants.
Optimizing them helps to make them perfect for online, optimized
images are then bringing more customers from search engines, as they
respect optimized websites.
(defun optimize-image-jpg (file)
"Optimizes the JPG image with quality 70%"
(if (rcd-which-list '("mogrify"))
(let ((extension (file-name-extension file)))
(when (equal (downcase extension) "jpg")
(let* ((file (shell-double-quote file))
(command (format "mogrify -sampling-factor 4:2:0 -strip -interlace JPEG -colorspace RGB -quality 70 \"%s\"" file)))
(message command)
(shell-command command))))
(rcd-warning-message "RCD ERROR: `mogrify' not found in $PATH")))
(defun optimize-jpg-images-dired ()
"Optimizes JPG images inside of Dired"
(interactive)
(let ((files (dired-get-marked-files)))
(dolist (file files)
(optimize-image-jpg file))
(revert-buffer)))
> > Argument FILE is image to be resized."
> > (if (rcd-which-list '("mogrify"))
>
> Not known to be defined: rcd-which-list (indeed I don't have it)
> Same with rcd-warning-message.
(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)))))
> > (let ((extension (file-name-extension file)))
> > (when (or (equal (downcase extension) "jpg")
> > (equal (downcase extension) "png"))
>
> Same thing twice, instead do let*.
There I wanted to test first for extension and then to proceed.
> > (defun image-resize-dired ()
> > "Resizes images."
> > (interactive)
> > (let ((files (dired-get-marked-files))
> > (size (read-number "Size: " *image-default-resize-size* '(*image-resize-sizes*))))
>
> HIST isn't used like that what I can see, read the
> `read-from-minibuffer' docstring. Does it even work?
That is something you noticed, I did not, I was resizing for quite a
long time to 1536 and never bothered. But now it works. It was meant
to complete with various default sizes for resizing.
> Also, why `read-number' and not in interactive?
I often use `completing-read', maybe that may be implemented in
`interactive' but I don't find it nice that way.
> And, no need for globals if they are only used here. Use let*
> for that as well.
Which globals?
Jean
next prev parent reply other threads:[~2021-03-23 10:13 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
2021-03-23 9:56 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-03-23 10:13 ` Jean Louis [this message]
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=YFm/R5Hd8xuCJgq4@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).