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

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

[nongnu] elpa/evil-exchange 1e3ba07be4 18/46: Merge pull request #5 from


From: ELPA Syncer
Subject: [nongnu] elpa/evil-exchange 1e3ba07be4 18/46: Merge pull request #5 from fbergroth/remove-transpose-regions
Date: Thu, 6 Jan 2022 03:59:51 -0500 (EST)

branch: elpa/evil-exchange
commit 1e3ba07be4cac67cd7e54e9169b1dcbd0b44d5de
Merge: d35ebe9a7d 0539868f46
Author: Dewdrops <v_v_4474@126.com>
Commit: Dewdrops <v_v_4474@126.com>

    Merge pull request #5 from fbergroth/remove-transpose-regions
    
    Drop use of `transpose-regions`
---
 evil-exchange.el | 29 +++++++++++++++++------------
 1 file changed, 17 insertions(+), 12 deletions(-)

diff --git a/evil-exchange.el b/evil-exchange.el
index 843dbb611b..4f334a6a9e 100644
--- a/evil-exchange.el
+++ b/evil-exchange.el
@@ -104,27 +104,32 @@
         (cond
          ;; exchange block region
          ((and (eq orig-type 'block) (eq type 'block))
-          (let ((orig-rect (delete-extract-rectangle orig-beg orig-end))
-                (curr-rect (delete-extract-rectangle beg-marker end-marker)))
-            (save-excursion
-              (goto-char orig-beg)
-              (insert-rectangle curr-rect)
-              (goto-char beg-marker)
-              (insert-rectangle orig-rect)))
-          (setq evil-exchange-position nil)
-          (evil-exchange-remove-overlays))
+          (evil-exchange--do-swap beg-marker end-marker
+                                  orig-beg orig-end
+                                  #'delete-extract-rectangle 
#'insert-rectangle))
          ;; signal error if regions incompatible
          ((or (eq orig-type 'block) (eq type 'block))
           (error "Can't exchange block region with non-block region."))
          ;; exchange normal region
          (t
-          (transpose-regions orig-beg orig-end beg end)
-          (setq evil-exchange-position nil)
-          (evil-exchange-remove-overlays))))))
+          (evil-exchange--do-swap beg-marker end-marker
+                                  orig-beg orig-end
+                                  #'delete-and-extract-region #'insert))))))
   ;; place cursor on beginning of line
   (when (and (evil-called-interactively-p) (eq type 'line))
     (evil-first-non-blank)))
 
+(defun evil-exchange--do-swap (curr-beg curr-end orig-beg orig-end extract-fn 
insert-fn)
+  (let ((orig-text (funcall extract-fn orig-beg orig-end))
+        (curr-text (funcall extract-fn curr-beg curr-end)))
+    (save-excursion
+      (goto-char orig-beg)
+      (funcall insert-fn curr-text)
+      (goto-char curr-beg)
+      (funcall insert-fn orig-text)))
+  (setq evil-exchange-position nil)
+  (evil-exchange-remove-overlays))
+
 ;;;###autoload
 (defun evil-exchange-cancel ()
   "Cancel current pending exchange."



reply via email to

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