emacs-diffs
[Top][All Lists]
Advanced

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

master 0bca1b4d03 7/8: image-dired: Fix C-a/C-e in thumbnail buffer


From: Stefan Kangas
Subject: master 0bca1b4d03 7/8: image-dired: Fix C-a/C-e in thumbnail buffer
Date: Sat, 24 Sep 2022 08:08:18 -0400 (EDT)

branch: master
commit 0bca1b4d037ef23d259dc6e7561266bf54433339
Author: Stefan Kangas <stefankangas@gmail.com>
Commit: Stefan Kangas <stefankangas@gmail.com>

    image-dired: Fix C-a/C-e in thumbnail buffer
    
    * lisp/image/image-dired.el
    (image-dired--movement-ensure-point-pos): New function, and...
    (image-dired--movement-command): ...new macros broken out from...
    (image-dired-next-line, image-dired-previous-line)
    (image-dired-beginning-of-buffer, image-dired-end-of-buffer):
    ...here.
    (image-dired-move-beginning-of-line)
    (image-dired-move-end-of-line): New commands.
    (image-dired-thumbnail-mode-map): Remap 'move-beginning-of-line'
    and 'move-beginning-of-line' to above new commands.
---
 lisp/image/image-dired.el | 76 +++++++++++++++++++++++++----------------------
 1 file changed, 40 insertions(+), 36 deletions(-)

diff --git a/lisp/image/image-dired.el b/lisp/image/image-dired.el
index c25dcad769..f73b81c22d 100644
--- a/lisp/image/image-dired.el
+++ b/lisp/image/image-dired.el
@@ -655,56 +655,57 @@ On reaching end or beginning of buffer, stop and show a 
message."
   (interactive "p" image-dired-thumbnail-mode)
   (image-dired-forward-image (- (or arg 1))))
 
+(defun image-dired--movement-ensure-point-pos (&optional reverse)
+  "Ensure point is on an image."
+  (while (and (not (image-at-point-p))
+              (not (if reverse (bobp) (eobp))))
+    (forward-char (if reverse -1 1))))
+
+(defmacro image-dired--movement-command (to &optional reverse)
+  `(progn
+     (goto-char ,to)
+     (image-dired--movement-ensure-point-pos ,reverse)
+     (when image-dired-track-movement
+       (image-dired-track-original-file))
+     (image-dired-update-header-line)))
+
+(defmacro image-dired--movement-command-line (&optional reverse)
+  `(image-dired--movement-command
+     (let ((goal-column (current-column)))
+       (forward-line ,(if reverse -1 1))
+       (move-to-column goal-column)
+       (point))
+     ,reverse))
+
 (defun image-dired-next-line ()
   "Move to next line in the thumbnail buffer."
   (interactive nil image-dired-thumbnail-mode)
-  (let ((goal-column (current-column)))
-    (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))
-  (if image-dired-track-movement
-      (image-dired-track-original-file))
-  (image-dired-update-header-line))
+  (image-dired--movement-command-line))
 
 (defun image-dired-previous-line ()
   "Move to previous line in the thumbnail buffer."
   (interactive nil image-dired-thumbnail-mode)
-  (let ((goal-column (current-column)))
-    (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 can handle it in a
-  ;; good manner, so why not?
-  (if (not (image-dired-image-at-point-p))
-      (image-dired-backward-image))
-  (if image-dired-track-movement
-      (image-dired-track-original-file))
-  (image-dired-update-header-line))
+  (image-dired--movement-command-line 'reverse))
 
 (defun image-dired-beginning-of-buffer ()
   "Move to the first image in the thumbnail buffer."
   (interactive nil image-dired-thumbnail-mode)
-  (goto-char (point-min))
-  (while (and (not (image-at-point-p))
-              (not (eobp)))
-    (forward-char 1))
-  (when image-dired-track-movement
-    (image-dired-track-original-file))
-  (image-dired-update-header-line))
+  (image-dired--movement-command (point-min)))
 
 (defun image-dired-end-of-buffer ()
   "Move to the last image in the thumbnail buffer."
   (interactive nil image-dired-thumbnail-mode)
-  (goto-char (point-max))
-  (while (and (not (image-at-point-p))
-              (not (bobp)))
-    (forward-char -1))
-  (when image-dired-track-movement
-    (image-dired-track-original-file))
-  (image-dired-update-header-line))
+  (image-dired--movement-command (point-max) 'reverse))
+
+(defun image-dired-move-beginning-of-line ()
+  "Move to the beginning of current line in thumbnail buffer."
+  (interactive nil image-dired-thumbnail-mode)
+  (image-dired--movement-command (pos-bol)))
+
+(defun image-dired-move-end-of-line ()
+  "Move to the end of current line in thumbnail buffer."
+  (interactive nil image-dired-thumbnail-mode)
+  (image-dired--movement-command (pos-eol) 'reverse))
 
 
 ;;; Header line
@@ -894,7 +895,10 @@ You probably want to use this together with
   "<down-mouse-2>"   #'image-dired-mouse-select-thumbnail
   "<down-mouse-3>"   #'image-dired-mouse-select-thumbnail
   "C-<down-mouse-1>" #'ignore           ; Don't open the buffer menu.
-  "C-<mouse-1>"      #'image-dired-mouse-toggle-mark)
+  "C-<mouse-1>"      #'image-dired-mouse-toggle-mark
+
+  "<remap> <move-beginning-of-line>" #'image-dired-move-beginning-of-line
+  "<remap> <move-end-of-line>"       #'image-dired-move-end-of-line)
 
 (easy-menu-define image-dired-thumbnail-mode-menu 
image-dired-thumbnail-mode-map
   "Menu for `image-dired-thumbnail-mode'."



reply via email to

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