Function: isearch-lazy-highlight-update

isearch-lazy-highlight-update is a byte-compiled function defined in isearch.el.gz.

Signature

(isearch-lazy-highlight-update)

Documentation

Update highlighting of other matches for current search.

Source Code

;; Defined in /usr/src/emacs/lisp/isearch.el.gz
(defun isearch-lazy-highlight-update ()
  "Update highlighting of other matches for current search."
  (let ((max lazy-highlight-max-at-a-time)
        (looping t)
        nomore window-start window-end)
    (with-local-quit
      (save-selected-window
	(if (and (window-live-p isearch-lazy-highlight-window)
		 (not (memq (selected-window) isearch-lazy-highlight-window-group)))
	    (select-window isearch-lazy-highlight-window))
	(setq window-start (window-group-start))
	(setq window-end (window-group-end))
	(save-excursion
	  (save-match-data
	    (goto-char (if isearch-lazy-highlight-forward
			   isearch-lazy-highlight-end
			 isearch-lazy-highlight-start))
	    (while looping
	      (let* ((bound (if isearch-lazy-highlight-forward
                                (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))))
		     (found (isearch-lazy-highlight-search
			     isearch-lazy-highlight-last-string
			     bound)))
		(when max
		  (setq max (1- max))
		  (if (<= max 0)
		      (setq looping nil)))
		(if found
		    (let ((mb (match-beginning 0))
			  (me (match-end 0)))
		      (if (= mb me)	;zero-length match
			  (if isearch-lazy-highlight-forward
			      (if (= mb (if isearch-lazy-highlight-wrapped
					    isearch-lazy-highlight-start
					  window-end))
				  (setq found nil)
				(forward-char 1))
			    (if (= mb (if isearch-lazy-highlight-wrapped
					  isearch-lazy-highlight-end
					window-start))
				(setq found nil)
			      (forward-char -1)))

			;; non-zero-length match
			(isearch-lazy-highlight-match mb me))
		      ;; Remember the current position of point for
		      ;; the next call of `isearch-lazy-highlight-update'
		      ;; when `lazy-highlight-max-at-a-time' is too small.
		      (if isearch-lazy-highlight-forward
			  (setq isearch-lazy-highlight-end (point))
			(setq isearch-lazy-highlight-start (point)))))

		;; not found or zero-length match at the search bound
		(if (not found)
		    (if isearch-lazy-highlight-wrapped
			(setq looping nil
			      nomore  t)
		      (setq isearch-lazy-highlight-wrapped t)
		      (if isearch-lazy-highlight-forward
			  (progn
			    (setq isearch-lazy-highlight-end window-start)
			    (goto-char (max (or isearch-lazy-highlight-start-limit (point-min))
					    window-start)))
			(setq isearch-lazy-highlight-start window-end)
			(goto-char (min (or isearch-lazy-highlight-end-limit (point-max))
					window-end)))))))
	    (if nomore
		(when (or isearch-lazy-highlight-buffer
			  (and isearch-lazy-count (null isearch-lazy-count-current)))
		  (if isearch-lazy-highlight-forward
		      (setq isearch-lazy-highlight-end (point-min))
		    (setq isearch-lazy-highlight-start (point-max)))
		  (setq isearch-lazy-highlight-timer
			(run-at-time lazy-highlight-interval nil
				     'isearch-lazy-highlight-buffer-update)))
	      (setq isearch-lazy-highlight-timer
		    (run-at-time lazy-highlight-interval nil
				 'isearch-lazy-highlight-update)))))))))