emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] externals/speedrect d2af235ca3 60/90: stash: save point and mark


From: ELPA Syncer
Subject: [elpa] externals/speedrect d2af235ca3 60/90: stash: save point and mark crutches to stash
Date: Fri, 6 Dec 2024 18:59:15 -0500 (EST)

branch: externals/speedrect
commit d2af235ca3fdd90163f8a065a927ca7f63eb587b
Author: JD Smith <93749+jdtsmith@users.noreply.github.com>
Commit: JD Smith <93749+jdtsmith@users.noreply.github.com>

    stash: save point and mark crutches to stash
    
    Crutches are extensions from point and mark that allow rectangle to
    cover areas where point can't go, like middle of tab or past EOL.
---
 speedrect.el | 34 +++++++++++++++++++++-------------
 1 file changed, 21 insertions(+), 13 deletions(-)

diff --git a/speedrect.el b/speedrect.el
index 24fb720b14..95961efd5d 100644
--- a/speedrect.el
+++ b/speedrect.el
@@ -50,27 +50,34 @@
   "Last rectangle position.
 Stored as (point-line point-col mark-line mark-col)")
 
-(defun speedrect-stash ()
-  "Stash the line and column of point and mark."
-  (when rectangle-mark-mode
-    (setq speedrect-last
-         (list (point) (mark)
-               (window-parameter nil 'rectangle--point-crutches)
-               rectangle--mark-crutches))))
-
 (defun speedrect-recall-last ()
   "Restore last saved rectangle position."
   (interactive)
   (pcase speedrect-last
-    (`(,point ,mark ,point-crutches ,mark-crutches)
-     (set-mark mark)
+    (`((,point . ,mark) ,point-crutches ,mark-crutches)
+     (set-mark (marker-position mark))
      (goto-char point)
      (setf (window-parameter nil 'rectangle--point-crutches) point-crutches)
      (setq-local rectangle--mark-crutches mark-crutches)
      (if (called-interactively-p 'interactive)
-        (message "Restored last rectangle %d %d" point mark)))
+        (message "Restored last rectangle %d %d"
+                 (marker-position point) (marker-position mark))))
     (_ (message "No stored rectangle position"))))
 
+(defun speedrect-stash ()
+  "Stash the line and column of point and mark."
+  (when rectangle-mark-mode
+    (let ((pm (car speedrect-last)))
+      (if pm
+         (progn
+           (move-marker (car pm) (point))
+           (move-marker (cdr pm) (mark)))
+       (setq pm (cons (point-marker) (copy-marker (mark-marker)))))
+      (setq speedrect-last
+           (list pm
+            (window-parameter nil 'rectangle--point-crutches)
+            rectangle--mark-crutches)))))
+
 (defun speedrect-restart ()
   "Start a new rectangle, setting mark at the current position."
   (interactive)
@@ -322,9 +329,10 @@ prior to deactivating mark."
     (message "%s: [?] for help%s"
             (propertize "SpeedRect" 'face 'success)
             (if speedrect-last
-                (format "  %s:%S"
+                (format "  %s:%d->%d"
                         (propertize "last-rect" 'face 'bold)
-                        speedrect-last)
+                        (marker-position (caar speedrect-last))
+                        (marker-position (cdar speedrect-last)))
               ""))))
 
 ;;; autoload



reply via email to

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