branch: elpa/isl
commit b4b082e2525445fc70d2b50aa957d8a75adba555
Author: Thierry Volpiatto <[email protected]>
Commit: Thierry Volpiatto <[email protected]>

    Put overlays in all buffer
---
 isearch-light.el | 55 ++++++++++++++++++++++++++++++++-----------------------
 1 file changed, 32 insertions(+), 23 deletions(-)

diff --git a/isearch-light.el b/isearch-light.el
index 85aa2a18ef8..02d40ed1066 100644
--- a/isearch-light.el
+++ b/isearch-light.el
@@ -28,7 +28,7 @@
 ;;
 (defun il-search-goto-next-1 ()
   (with-selected-window (get-buffer-window il-search-current-buffer)
-    (when il-search-last-overlay
+    (when (overlayp il-search-last-overlay)
       (overlay-put il-search-last-overlay 'face '(:background "brown")))
     (when il-search-iterator
       (let ((ov (iterator:next il-search-iterator)))
@@ -38,58 +38,67 @@
               (overlay-put ov 'face '(:background "green"))
               (goto-char (overlay-start ov)))
           (message "no more occurences of %s" il-search-pattern)
-          (sit-for 0.5)
-          (setq il-search-iterator (iterator:list il-search-item-overlays))
-          )))))
+          (sit-for 0.5))))))
 
 (defun il-search-goto-next ()
   (interactive)
   (when (eq il-search-direction 'backward)
-    (setq il-search-direction 'forward
-          il-search-pattern ""
-          il-search-last-overlay nil)
-    (il-search-check-input))
+    (setq il-search-direction 'forward)
+    (il-search--set-iterator)
+    (message "Changing direction"))
   (il-search-goto-next-1))
 
 (defun il-search-goto-prev ()
   (interactive)
   (when (eq il-search-direction 'forward)
-    (setq il-search-direction 'backward
-          il-search-pattern ""
-          il-search-last-overlay nil)
-    (il-search-check-input))
+    (setq il-search-direction 'backward)
+    (il-search--set-iterator)
+    (message "Changing direction"))
   (il-search-goto-next-1))
 
 (defun il-search-exit-at-point ()
   (interactive)
-  (exit-minibuffer))
+  (exit-minibuffer)
+  (recenter-top-bottom))
 
 (defun il-search-delete-overlays ()
   (when il-search-item-overlays
     (mapc 'delete-overlay il-search-item-overlays)
     (setq il-search-item-overlays nil)))
 
-(defun il-search-update-overlays (direction)
+(defun il-search-update-overlays ()
   (with-selected-window (get-buffer-window il-search-current-buffer)
     (il-search-delete-overlays)
-    (let (ov
-          (fn (cl-case direction
-                (forward #'re-search-forward)
-                (backward #'re-search-backward))))
+    (let (ov)
       (with-local-quit
         (save-excursion
-          (while (funcall fn il-search-pattern nil t)
+          (goto-char (point-min))
+          (while (re-search-forward il-search-pattern nil t)
             (setq ov (make-overlay (match-beginning 0) (match-end 0)))
             (push ov il-search-item-overlays)
             (overlay-put ov 'face '(:background "brown")))
-          (setq il-search-item-overlays (reverse il-search-item-overlays))
-          (setq il-search-iterator (iterator:list 
il-search-item-overlays)))))))
+          (setq il-search-item-overlays (reverse il-search-item-overlays)))
+        (goto-char
+         (if (eq il-search-direction 'forward)
+             (next-overlay-change (point))
+           (previous-overlay-change (point))))
+        (when il-search-item-overlays
+          (setq il-search-last-overlay
+                (car (overlays-in (previous-overlay-change (point)) (point)))))
+        (il-search--set-iterator)))))
+
+(defun il-search--set-iterator ()
+  (if (eq il-search-direction 'forward)
+      (setq il-search-iterator
+            (iterator:list (member il-search-last-overlay 
il-search-item-overlays)))
+    (setq il-search-iterator
+          (iterator:list (member il-search-last-overlay (reverse 
il-search-item-overlays))))))
 
 (defun il-search-check-input ()
   (let ((input (minibuffer-contents)))
     (when (not (string= input il-search-pattern))
       (setq il-search-pattern input)
-      (il-search-update-overlays il-search-direction))))
+      (il-search-update-overlays))))
 
 (defun il-search-read-from-minibuffer (prompt)
   (let (timer)
@@ -108,7 +117,7 @@
         il-search-current-buffer (current-buffer))
   (condition-case-unless-debug nil
       (unwind-protect
-          (il-search-read-from-minibuffer "test: ")
+          (il-search-read-from-minibuffer "search: ")
         (il-search-delete-overlays))
     (quit (goto-char il-initial-pos))))
 

Reply via email to