[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 61b877237b 1/8: Add new macro image-dired--with-dired-buffer
From: |
Stefan Kangas |
Subject: |
master 61b877237b 1/8: Add new macro image-dired--with-dired-buffer |
Date: |
Sat, 24 Sep 2022 08:08:18 -0400 (EDT) |
branch: master
commit 61b877237baa381430cab554cbd4b4c5838095dc
Author: Stefan Kangas <stefankangas@gmail.com>
Commit: Stefan Kangas <stefankangas@gmail.com>
Add new macro image-dired--with-dired-buffer
* lisp/image/image-dired-util.el
(image-dired--with-dired-buffer): New macro.
* lisp/image/image-dired.el (image-dired-track-original-file)
(image-dired--on-file-in-dired-buffer)
(image-dired--do-mark-command)
(image-dired--on-file-in-dired-buffer)
(image-dired-jump-original-dired-buffer)
(image-dired-thumb-file-marked-p, image-dired-delete-marked):
Use above new macro to simplify and improve error handling.
(image-dired-show-all-from-dir): Simplify removing Dired marks.
(image-dired-thumb-update-marks): Avoid triggering above new error
handling.
---
lisp/image/image-dired-util.el | 15 ++++++++++
lisp/image/image-dired.el | 65 +++++++++++++++++++-----------------------
2 files changed, 44 insertions(+), 36 deletions(-)
diff --git a/lisp/image/image-dired-util.el b/lisp/image/image-dired-util.el
index 8d77a97dc4..f8e81d2e8d 100644
--- a/lisp/image/image-dired-util.el
+++ b/lisp/image/image-dired-util.el
@@ -118,6 +118,21 @@ See also `image-dired-thumbnail-storage'."
"Get associated Dired buffer at point."
(get-text-property (point) 'associated-dired-buffer))
+(defmacro image-dired--with-dired-buffer (&rest body)
+ "Run BODY in associated Dired buffer.
+Should be used by commands in `image-dired-thumbnail-mode'."
+ (declare (indent defun) (debug t))
+ (let ((file (make-symbol "file"))
+ (dired-buf (make-symbol "dired-buf")))
+ `(let ((,file (image-dired-original-file-name))
+ (,dired-buf (image-dired-associated-dired-buffer)))
+ (unless ,file
+ (error "No image at point"))
+ (unless (and ,dired-buf (buffer-live-p ,dired-buf))
+ (error "Cannot find associated Dired buffer for image: %s" ,file))
+ (with-current-buffer ,dired-buf
+ ,@body))))
+
(defun image-dired-get-buffer-window (buf)
"Return window where buffer BUF is."
(get-window-with-predicate
diff --git a/lisp/image/image-dired.el b/lisp/image/image-dired.el
index c471be86bb..07c76a2a1f 100644
--- a/lisp/image/image-dired.el
+++ b/lisp/image/image-dired.el
@@ -574,10 +574,11 @@ never ask for confirmation."
"Directory contains more than %d image files. Proceed?"
image-dired-show-all-from-dir-max-files))))
(image-dired-display-thumbs)
+ (let ((inhibit-message t))
+ (dired-unmark-all-marks))
(pop-to-buffer image-dired-thumbnail-buffer)
(setq default-directory dir)
- (image-dired-update-header-line)
- (image-dired-unmark-all-marks))
+ (image-dired-update-header-line))
(t (message "Image-Dired canceled")))))
;;;###autoload
@@ -588,17 +589,15 @@ never ask for confirmation."
(defun image-dired-track-original-file ()
"Track the original file in the associated Dired buffer.
-See documentation for `image-dired-toggle-movement-tracking'.
-Interactive use only useful if `image-dired-track-movement' is nil."
+See `image-dired-toggle-movement-tracking'. Interactive use is
+only useful if `image-dired-track-movement' is nil."
(interactive nil image-dired-thumbnail-mode image-dired-display-image-mode)
- (let* ((dired-buf (image-dired-associated-dired-buffer))
- (file-name (image-dired-original-file-name))
- (window (image-dired-get-buffer-window dired-buf)))
- (and (buffer-live-p dired-buf) file-name
- (with-current-buffer dired-buf
- (if (not (dired-goto-file file-name))
- (message "Could not track file")
- (if window (set-window-point window (point))))))))
+ (let ((file-name (image-dired-original-file-name)))
+ (image-dired--with-dired-buffer
+ (if (not (dired-goto-file file-name))
+ (message "Could not find image in Dired buffer for tracking")
+ (when-let (window (image-dired-get-buffer-window (current-buffer)))
+ (set-window-point window (point)))))))
(defun image-dired-toggle-movement-tracking ()
"Turn on and off `image-dired-track-movement'.
@@ -760,13 +759,11 @@ for. The default is to look for `dired-marker-char'."
"Run BODY with point on file at point in Dired buffer.
Should be called from commands in `image-dired-thumbnail-mode'."
(declare (indent defun) (debug t))
- `(let ((file-name (image-dired-original-file-name))
- (dired-buf (image-dired-associated-dired-buffer)))
- (if (not (and dired-buf file-name))
- (message "No image, or image with correct properties, at point")
- (with-current-buffer dired-buf
+ `(if-let ((file-name (image-dired-original-file-name)))
+ (image-dired--with-dired-buffer
(when (dired-goto-file file-name)
- ,@body)))))
+ ,@body))
+ (message "No image with correct properties at point")))
(defmacro image-dired--with-thumbnail-buffer (&rest body)
(declare (indent defun) (debug t))
@@ -827,15 +824,13 @@ Also update the marks in the thumbnail buffer."
You probably want to use this together with
`image-dired-track-original-file'."
(interactive nil image-dired-thumbnail-mode)
- (let ((buf (image-dired-associated-dired-buffer))
- window frame)
- (setq window (image-dired-get-buffer-window buf))
- (if window
+ (image-dired--with-dired-buffer
+ (if-let ((window (image-dired-get-buffer-window (current-buffer))))
(progn
- (if (not (equal (selected-frame) (setq frame (window-frame window))))
- (select-frame-set-input-focus frame))
+ (if (not (equal (selected-frame) (window-frame window)))
+ (select-frame-set-input-focus (window-frame window)))
(select-window window))
- (message "Associated dired buffer not visible"))))
+ (message "Associated Dired buffer not visible"))))
;;; Major modes
@@ -1266,15 +1261,13 @@ non-nil."
"Check if file is marked in associated Dired buffer.
If optional argument FLAGGED is non-nil, check if file is flagged
for deletion instead."
- (let ((file-name (image-dired-original-file-name))
- (dired-buf (image-dired-associated-dired-buffer)))
- (when (and dired-buf file-name)
- (with-current-buffer dired-buf
- (save-excursion
- (when (dired-goto-file file-name)
- (if flagged
- (image-dired-dired-file-flagged-p)
- (image-dired-dired-file-marked-p))))))))
+ (let ((file-name (image-dired-original-file-name)))
+ (image-dired--with-dired-buffer
+ (save-excursion
+ (when (dired-goto-file file-name)
+ (if flagged
+ (image-dired-dired-file-flagged-p)
+ (image-dired-dired-file-marked-p)))))))
(defun image-dired-thumb-file-flagged-p ()
"Check if file is flagged for deletion in associated Dired buffer."
@@ -1290,7 +1283,7 @@ for deletion instead."
(unless (bobp)
(backward-char)))
(image-dired--line-up-with-method)
- (with-current-buffer (image-dired-associated-dired-buffer)
+ (image-dired--on-file-in-dired-buffer
(dired-do-delete)))
(defun image-dired-thumb-update-marks ()
@@ -1310,7 +1303,7 @@ for deletion instead."
'image-dired-thumb-flagged))
(t (remove-text-properties (point) (1+ (point))
'(face
image-dired-thumb-mark)))))
- (forward-char)))))))
+ (forward-char 2)))))))
(defun image-dired-mouse-toggle-mark-1 ()
"Toggle Dired mark for current thumbnail.
- master updated (06de788529 -> 5be35812ac), Stefan Kangas, 2022/09/24
- master 16681ba91c 3/8: image-dired: Improve performance of marking commands, Stefan Kangas, 2022/09/24
- master 0bca1b4d03 7/8: image-dired: Fix C-a/C-e in thumbnail buffer, Stefan Kangas, 2022/09/24
- master 61b877237b 1/8: Add new macro image-dired--with-dired-buffer,
Stefan Kangas <=
- master 3d75bab0e5 2/8: image-dired: Mark 'per-directory' as :safe, Stefan Kangas, 2022/09/24
- master 95d4f5d691 4/8: image-dired: Regenerate old thumbnails when needed, Stefan Kangas, 2022/09/24
- master 4b537dd99f 5/8: Move thumbs.el to lisp/obsolete, Stefan Kangas, 2022/09/24
- master 5be35812ac 8/8: image-dired: Prefer command remapping, Stefan Kangas, 2022/09/24
- master 32e736d903 6/8: Make thumbs.el obsolete, Stefan Kangas, 2022/09/24