diff options
Diffstat (limited to 'lisp/isearch.el')
-rw-r--r-- | lisp/isearch.el | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/lisp/isearch.el b/lisp/isearch.el index 7702707c6ac..f1cb55e7fcc 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -736,7 +736,8 @@ is treated as a regexp. See \\[isearch-forward] for more info." (setq ;; quit-flag nil not for isearch-mode isearch-adjusted nil isearch-yank-flag nil) - (if isearch-lazy-highlight (isearch-lazy-highlight-new-loop)) + (when isearch-lazy-highlight + (isearch-lazy-highlight-new-loop nil nil)) ;; We must prevent the point moving to the end of composition when a ;; part of the composition has just been searched. (setq disable-point-adjustment t)) @@ -2310,6 +2311,8 @@ since they have special meaning in a regexp." (defvar isearch-lazy-highlight-overlays nil) (defvar isearch-lazy-highlight-wrapped nil) +(defvar isearch-lazy-highlight-start-limit nil) +(defvar isearch-lazy-highlight-end-limit nil) (defvar isearch-lazy-highlight-start nil) (defvar isearch-lazy-highlight-end nil) (defvar isearch-lazy-highlight-timer nil) @@ -2335,10 +2338,12 @@ is nil. This function is called when exiting an incremental search if (cancel-timer isearch-lazy-highlight-timer) (setq isearch-lazy-highlight-timer nil))) -(defun isearch-lazy-highlight-new-loop () +(defun isearch-lazy-highlight-new-loop (beg end) "Cleanup any previous `lazy-highlight' loop and begin a new one. -This happens when `isearch-update' is invoked (which can cause the -search string to change or the window to scroll)." +BEG and END specify the bounds within which highlighting should occur. +This is called when `isearch-update' is invoked (which can cause the +search string to change or the window to scroll). It is also used +by other Emacs features." (when (and (null executing-kbd-macro) (sit-for 0) ;make sure (window-start) is credible (or (not (equal isearch-string @@ -2356,6 +2361,8 @@ search string to change or the window to scroll)." ;; something important did indeed change (isearch-lazy-highlight-cleanup t) ;kill old loop & remove overlays (when (not isearch-invalid-regexp) + (setq isearch-lazy-highlight-start-limit beg + isearch-lazy-highlight-end-limit end) (setq isearch-lazy-highlight-window (selected-window) isearch-lazy-highlight-window-start (window-start) isearch-lazy-highlight-window-end (window-end) @@ -2378,12 +2385,14 @@ Attempt to do the search exactly the way the pending isearch would." (funcall (isearch-search-fun) isearch-string (if isearch-forward - (if isearch-lazy-highlight-wrapped - isearch-lazy-highlight-start - (window-end)) - (if isearch-lazy-highlight-wrapped - isearch-lazy-highlight-end - (window-start))) + (min (or isearch-lazy-highlight-end-limit (point-max)) + (if isearch-lazy-highlight-wrapped + isearch-lazy-highlight-start + (window-end))) + (max (or isearch-lazy-highlight-start-limit (point-min)) + (if isearch-lazy-highlight-wrapped + isearch-lazy-highlight-end + (window-start)))) t))) (defun isearch-lazy-highlight-update () @@ -2442,9 +2451,11 @@ Attempt to do the search exactly the way the pending isearch would." (if isearch-forward (progn (setq isearch-lazy-highlight-end (window-start)) - (goto-char (window-start))) + (goto-char (max (or isearch-lazy-highlight-start-limit (point-min)) + (window-start)))) (setq isearch-lazy-highlight-start (window-end)) - (goto-char (window-end))))))) + (goto-char (min (or isearch-lazy-highlight-end-limit (point-max)) + (window-end)))))))) (unless nomore (setq isearch-lazy-highlight-timer (run-at-time lazy-highlight-interval nil |