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

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

[nongnu] elpa/iedit 62d2a5ac45 077/301: Fix iedit-kill-rectangle problem


From: ELPA Syncer
Subject: [nongnu] elpa/iedit 62d2a5ac45 077/301: Fix iedit-kill-rectangle problem
Date: Mon, 10 Jan 2022 22:58:52 -0500 (EST)

branch: elpa/iedit
commit 62d2a5ac45c5f3999a1740ebc660ed4e9b9dcc87
Author: Victor Ren <victorhge@gmail.com>
Commit: Victor Ren <victorhge@gmail.com>

    Fix iedit-kill-rectangle problem
---
 iedit-tests.el | 23 +++++++++++++++++++++--
 iedit.el       | 41 +++++++++++++++++++++++++++++++----------
 2 files changed, 52 insertions(+), 12 deletions(-)

diff --git a/iedit-tests.el b/iedit-tests.el
index 187cb8dd0e..96838d0791 100755
--- a/iedit-tests.el
+++ b/iedit-tests.el
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 2010, 2011, 2012 Victor Ren
 
-;; Time-stamp: <2012-03-03 17:27:58 Victor Ren>
+;; Time-stamp: <2012-03-04 11:35:50 Victor Ren>
 ;; Author: Victor Ren <victorhge@gmail.com>
 ;; Version: 0.94
 ;; X-URL: http://www.emacswiki.org/emacs/Iedit
@@ -344,6 +344,24 @@ foo"
    (iedit-rectangle-mode)
    (should (equal iedit-rectangle '(1 19))))))
 
+(ert-deftest iedit-kill-rectangle-error-test ()
+  (with-iedit-test-fixture
+"foo
+ foo
+  barfoo
+    foo"
+   (lambda ()
+   (iedit-mode)
+   (set-mark-command nil)
+   (goto-char 22)
+   (iedit-rectangle-mode)
+   (should (iedit-same-column))
+   (should (equal iedit-rectangle '(1 22)))
+   (iedit-prev-occurrence)
+   (delete-char -1)
+   (should (not (iedit-same-column)))
+   (should-error (iedit-kill-rectangle)))))
+
 (ert-deftest iedit-kill-rectangle-test ()
   (with-iedit-test-fixture
 "foo
@@ -354,7 +372,8 @@ foo"
    (iedit-mode)
    (set-mark-command nil)
    (goto-char 22)
-   (iedit-rectangle-mode )
+   (iedit-rectangle-mode)
+   (should (iedit-same-column))
    (should (equal iedit-rectangle '(1 22)))
    (iedit-kill-rectangle)
    (should (string= (buffer-string)
diff --git a/iedit.el b/iedit.el
index 17d1a8528d..035c2a2957 100644
--- a/iedit.el
+++ b/iedit.el
@@ -2,7 +2,7 @@
 
 ;; Copyright (C) 2010, 2011, 2012 Victor Ren
 
-;; Time-stamp: <2012-03-03 17:27:33 Victor Ren>
+;; Time-stamp: <2012-03-04 11:39:18 Victor Ren>
 ;; Author: Victor Ren <victorhge@gmail.com>
 ;; Keywords: occurrence region replace simultaneous
 ;; Version: 0.95
@@ -52,12 +52,13 @@
 ;; when in Iedit mode - it toggles hiding non-matching lines.
 
 ;; Renaming refactoring is convenient in iedit mode
-;; - The symbol under point is selected as occurrence by default and only 
complete
-;;   symbols are matched
+;;
+;; - The symbol under point is selected as occurrence by default and only
+;;   complete symbols are matched
 ;; - With digit prefix argument 0, only symbols in current function are matched
 ;; - Restricting symbols in current region can be done by pressing C-; again
 ;; - Last renaming refactoring is remembered and can be applied to other 
buffers
-;;   later
+;; - later
 
 ;; There are also some other facilities you may never think about.  Refer to 
the
 ;; document of function `iedit-mode' (C-h f iedit-mode RET) for more details.
@@ -858,8 +859,9 @@ This function preserves case."
   (interactive "*sReplace with: ")
   (let* ((ov (iedit-find-current-occurrence-overlay))
          (offset (- (point) (overlay-start ov)))
-         (from-string (downcase (buffer-substring-no-properties (overlay-start 
ov)
-                                                                (overlay-end 
ov)))))
+         (from-string (downcase (buffer-substring-no-properties
+                                 (overlay-start ov)
+                                 (overlay-end ov)))))
     (iedit-apply-on-occurrences
      (lambda (beg end from-string to-string)
        (goto-char beg)
@@ -991,10 +993,13 @@ with a prefix argument, prompt for START-AT and FORMAT."
   "Kill the rectangle.
 The behavior is the same as `kill-rectangle' in rect mode."
   (interactive "*P")
-  (let ((inhibit-modification-hooks t))
-    (kill-rectangle (car iedit-rectangle)
-                    (cadr iedit-rectangle)
-                    fill)))
+  (or (iedit-same-column)
+      (error "Not a rectangle"))
+  (let ((inhibit-modification-hooks t)
+        (beg (overlay-start (car iedit-occurrences-overlays)))
+        (end (overlay-end (progn (iedit-last-occurrence)
+                                 (iedit-find-current-occurrence-overlay)))))
+    (kill-rectangle beg end fill)))
 
 (defun iedit-restrict-function(&optional arg)
   "Restricting iedit mode in current function."
@@ -1021,6 +1026,22 @@ This function is supposed to be called in overlay 
keymap."
           (setq overlays (cdr overlays)))))
     found))
 
+(defun iedit-same-column ()
+  "Return t if all occurrences are at the same column."
+  (save-excursion
+    (let ((column (progn (goto-char (overlay-start (car 
iedit-occurrences-overlays)))
+                         (current-column)))
+          (overlays (cdr  iedit-occurrences-overlays))
+          (same t))
+      (while (and overlays same)
+        (let ((overlay (car overlays)))
+          (if (/= (progn (goto-char (overlay-start overlay))
+                         (current-column))
+                  column)
+              (setq same nil)
+            (setq overlays (cdr overlays)))))
+      same)))
+
 ;; This function might be called out of any occurrence
 (defun iedit-current-occurrence-string ()
   "Return current occurrence string.



reply via email to

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