branch: externals/objed
commit 9f565e44d511eab64e2e2e34d589a9779659777c
Author: Clemens Radermacher <[email protected]>
Commit: Clemens Radermacher <[email protected]>
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."