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

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

[elpa] externals/objed 9f565e4 30/34: Make transposing objects work with


From: Stefan Monnier
Subject: [elpa] externals/objed 9f565e4 30/34: Make transposing objects work with active region
Date: Mon, 15 Mar 2021 22:21:12 -0400 (EDT)

branch: externals/objed
commit 9f565e44d511eab64e2e2e34d589a9779659777c
Author: Clemens Radermacher <clemera@posteo.net>
Commit: Clemens Radermacher <clemera@posteo.net>

    Make transposing objects work with active region
---
 objed.el | 93 ++++++++++++++++++++++++++++++++++++++--------------------------
 1 file changed, 56 insertions(+), 37 deletions(-)

diff --git a/objed.el b/objed.el
index b586aa6..3de48e9 100644
--- a/objed.el
+++ b/objed.el
@@ -3042,49 +3042,68 @@ Moves point over any whitespace afterwards."
 
 Swaps the current object with the next one."
   (interactive)
-  (let* ((current (buffer-substring (objed--beg)
-                                    (objed--end)))
-
-         (nexto (objed--get-next))
-         (next (and nexto (apply #'buffer-substring
-                                 (objed--current nexto))))
-         (nend (objed--end nexto)))
-    (apply #'delete-region (objed--current nexto))
-    (goto-char (objed--beg nexto))
-    (insert current)
-
-    (apply #'delete-region (objed--current))
-    (goto-char (objed--beg))
-    (insert next)
-
-    (goto-char (- nend (length current)))
-    (objed--update-current-object)))
-
+  (let ((reg (use-region-p)))
+    (when reg
+      (setq objed--current-obj
+            (objed-make-object :beg (region-beginning)
+                               :end (region-end)))
+      (deactivate-mark))
+
+    (let* ((current (buffer-substring (objed--beg)
+                                      (objed--end)))
+           (nexto (objed--get-next))
+           (next (and nexto (apply #'buffer-substring
+                                   (objed--current nexto))))
+           (nend (objed--end nexto)))
+      (apply #'delete-region (objed--current nexto))
+      (goto-char (objed--beg nexto))
+      (insert current)
+
+      (apply #'delete-region (objed--current))
+      (goto-char (objed--beg))
+      (insert next)
+
+      (when reg
+        (push-mark nend t t)
+        (setq deactivate-mark nil))
+      (goto-char (- nend (length current)))
+      (unless reg
+        (objed--update-current-object)))))
 
 (defun objed-move-object-backward ()
   "Move object backward.
 
 Swaps the current object with the previous one."
   (interactive)
-  (let* ((current (buffer-substring (objed--beg)
-                                    (objed--end)))
-
-         (prevo (objed--get-prev))
-         (prev (and prevo (apply #'buffer-substring
-                                 (objed--current prevo))))
-         (pbeg (objed--beg prevo)))
-
-    (apply #'delete-region (objed--current))
-    (goto-char (objed--beg))
-    (insert prev)
-
-    (apply #'delete-region (objed--current prevo))
-    (goto-char (objed--beg prevo))
-    (insert current)
-    (goto-char pbeg)
-    (objed--update-current-object)))
-
-
+  (let ((reg (use-region-p)))
+    (when reg
+      (setq objed--current-obj
+            (objed-make-object :beg (region-beginning)
+                               :end (region-end)))
+      (deactivate-mark))
+
+    (let* ((current (buffer-substring (objed--beg)
+                                      (objed--end)))
+
+           (prevo (objed--get-prev))
+           (prev (and prevo (apply #'buffer-substring
+                                   (objed--current prevo))))
+           (pbeg (objed--beg prevo)))
+
+      (apply #'delete-region (objed--current))
+      (goto-char (objed--beg))
+      (insert prev)
+
+      (apply #'delete-region (objed--current prevo))
+      (goto-char (objed--beg prevo))
+      (insert current)
+
+      (when reg
+        (push-mark (point) t t)
+        (setq deactivate-mark nil))
+      (goto-char pbeg)
+      (unless reg
+        (objed--update-current-object)))))
 
 (defun objed--switch-and-move (o dir)
   "Switch to object O and move it in direction DIR."



reply via email to

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