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

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

[elpa] master 8df253a 249/399: swiper.el (swiper--isearch-same-line-p):


From: Oleh Krehel
Subject: [elpa] master 8df253a 249/399: swiper.el (swiper--isearch-same-line-p): Add
Date: Sat, 20 Jul 2019 14:57:34 -0400 (EDT)

branch: master
commit 8df253a942f684688a236f0c7a54eaad64a863bb
Author: Oleh Krehel <address@hidden>
Commit: Oleh Krehel <address@hidden>

    swiper.el (swiper--isearch-same-line-p): Add
    
    Fixes #2069
---
 swiper.el | 88 ++++++++++++++++++++++++++++++++++++---------------------------
 1 file changed, 50 insertions(+), 38 deletions(-)

diff --git a/swiper.el b/swiper.el
index 4cc9bc3..14f8801 100644
--- a/swiper.el
+++ b/swiper.el
@@ -1321,6 +1321,14 @@ When not running `swiper-isearch' already, start it."
      :background "#1a4b77" :foreground "black"))
   "Face used by `swiper-isearch' for highlighting the current match.")
 
+(defun swiper--isearch-same-line-p (s1 s2)
+  "Check if S1 and S2 are equal and on the same line."
+  (and (equal s1 s2)
+       (<= (count-lines
+            (get-text-property 0 'point s2)
+            (get-text-property 0 'point s1))
+           1)))
+
 (defun swiper-isearch-format-function (_cands)
   (let* ((half-height (/ ivy-height 2))
          (current (ivy-state-current ivy-last))
@@ -1328,44 +1336,48 @@ When not running `swiper-isearch' already, start it."
          (j 0)
          (len 0)
          res s)
-    (while (and (>= i 0)
-                (string= (nth i ivy--old-cands)
-                         current))
-      (cl-decf i)
-      (cl-incf j))
-    (while (and (>= i 0)
-                (< len half-height))
-      (setq s (nth i ivy--old-cands))
-      (unless (equal s (car res))
-        (push (ivy--format-minibuffer-line s) res)
-        (cl-incf len))
-      (cl-decf i))
-    (setq res (nreverse res))
-    (let ((current-str
-           (ivy--add-face
-            (ivy--format-minibuffer-line current)
-            'ivy-current-match))
-          (start 0))
-      (dotimes (_ (1+ j))
-        (string-match ivy--old-re current-str start)
-        (setq start (match-end 0)))
-      (ivy-add-face-text-property
-       (match-beginning 0) (match-end 0)
-       'swiper-isearch-current-match current-str)
-      (push current-str res))
-    (cl-incf len)
-    (setq i (1+ ivy--index))
-    (while (and (< i ivy--length)
-                (string= (nth i ivy--old-cands) current))
-      (cl-incf i))
-    (while (and (< i ivy--length)
-                (< len ivy-height))
-      (setq s (nth i ivy--old-cands))
-      (unless (equal s (car res))
-        (push (ivy--format-minibuffer-line s) res)
-        (cl-incf len))
-      (cl-incf i))
-    (mapconcat #'identity (nreverse res) "\n")))
+    (with-ivy-window
+      (while (and (>= i 0)
+                  (swiper--isearch-same-line-p
+                   (nth i ivy--old-cands)
+                   current))
+        (cl-decf i)
+        (cl-incf j))
+      (while (and (>= i 0)
+                  (< len half-height))
+        (setq s (nth i ivy--old-cands))
+        (unless (swiper--isearch-same-line-p s (car res))
+          (push (ivy--format-minibuffer-line s) res)
+          (cl-incf len))
+        (cl-decf i))
+      (setq res (nreverse res))
+      (let ((current-str
+             (ivy--add-face
+              (ivy--format-minibuffer-line current)
+              'ivy-current-match))
+            (start 0))
+        (dotimes (_ (1+ j))
+          (string-match ivy--old-re current-str start)
+          (setq start (match-end 0)))
+        (ivy-add-face-text-property
+         (match-beginning 0) (match-end 0)
+         'swiper-isearch-current-match current-str)
+        (push current-str res))
+      (cl-incf len)
+      (setq i (1+ ivy--index))
+      (while (and (< i ivy--length)
+                  (swiper--isearch-same-line-p
+                   (nth i ivy--old-cands)
+                   current))
+        (cl-incf i))
+      (while (and (< i ivy--length)
+                  (< len ivy-height))
+        (setq s (nth i ivy--old-cands))
+        (unless (swiper--isearch-same-line-p s (car res))
+          (push (ivy--format-minibuffer-line s) res)
+          (cl-incf len))
+        (cl-incf i))
+      (mapconcat #'identity (nreverse res) "\n"))))
 
 ;;;###autoload
 (defun swiper-isearch (&optional initial-input)



reply via email to

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