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

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

[nongnu] elpa/iedit adb0d2e92d 179/301: Expand to next occurence ("incre


From: ELPA Syncer
Subject: [nongnu] elpa/iedit adb0d2e92d 179/301: Expand to next occurence ("incremental select")
Date: Mon, 10 Jan 2022 22:59:01 -0500 (EST)

branch: elpa/iedit
commit adb0d2e92d71023cdc7fdeb65ba77a3e810bd946
Author: Bar Magal <barmagal@gmail.com>
Commit: Bar Magal <barmagal@gmail.com>

    Expand to next occurence ("incremental select")
    
    iedit-expand-up-to-occurence and iedit-expand-down-to-occurence expand
    the search region up/down to next available occurence. If no such
    occurence exists, throw an error.
    
    Because the expansion is based on iedit-expand-by-a-line, when there are
    two occurences are on the same, it is impossible to select one of them
    without the other.
---
 iedit.el | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/iedit.el b/iedit.el
index c71eee3720..eb1308947c 100644
--- a/iedit.el
+++ b/iedit.el
@@ -238,6 +238,8 @@ This is like `describe-bindings', but displays only Iedit 
keys."
     (define-key map (kbd "M-I") 'iedit-restrict-current-line)
     (define-key map (kbd "M-{") 'iedit-expand-up-a-line)
     (define-key map (kbd "M-}") 'iedit-expand-down-a-line)
+    (define-key map (kbd "M-[") 'iedit-expand-up-to-occurence)
+    (define-key map (kbd "M-]") 'iedit-expand-down-to-occurence)
     (define-key map (kbd "M-G") 'iedit-apply-global-modification)
     (define-key map (kbd "M-C") 'iedit-toggle-case-sensitive)
     map)
@@ -583,6 +585,38 @@ the region back up one line."
   (iedit-expand-by-a-line 'bottom
                           (if arg -1 1)))
 
+(defun iedit-down-occurence-pos ()
+  "Get position of next occurence past `iedit-last-occurrence'"
+  (save-excursion
+    (goto-char (1+ (iedit-last-occurrence)))
+    (search-forward-regexp (iedit-current-occurrence-string))))
+
+(defun iedit-expand-down-to-occurence ()
+  "Expand the search region downwards until reaching a new occurence.
+If no such occurence can be found, throw an error."
+  (interactive)
+  (let ((last-pos (iedit-last-occurrence))
+        (next-pos (iedit-down-occurence-pos)))
+    (iedit-expand-by-a-line 'bottom
+                            (- (line-number-at-pos next-pos)
+                               (line-number-at-pos last-pos)))))
+
+(defun iedit-up-occurrence-pos ()
+  "Get position of next occurence past `iedit-first-occurrence'"
+  (save-excursion
+    (goto-char (iedit-first-occurrence))
+    (search-backward-regexp (iedit-current-occurrence-string))))
+
+(defun iedit-expand-up-to-occurence ()
+  "Expand the search region upwards until reaching a new occurence.
+If no such occurence can be found, throw an error."
+  (interactive)
+  (let ((first-pos (iedit-first-occurrence))
+        (prev-pos (iedit-up-occurrence-pos)))
+    (iedit-expand-by-a-line 'top
+                            (- (line-number-at-pos first-pos)
+                               (line-number-at-pos prev-pos)))))
+
 (defun iedit-restrict-region (beg end &optional inclusive)
   "Restricting Iedit mode in a region."
   (when iedit-buffering



reply via email to

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