Function: multi-isearch-search-fun
multi-isearch-search-fun is a byte-compiled function defined in
misearch.el.gz.
Signature
(multi-isearch-search-fun)
Documentation
Return the proper search function, for isearch in multiple buffers.
Source Code
;; Defined in /usr/src/emacs/lisp/misearch.el.gz
(defun multi-isearch-search-fun ()
"Return the proper search function, for isearch in multiple buffers."
(lambda (string bound noerror)
(let ((search-fun
;; Use standard functions to search within one buffer
(isearch-search-fun-default))
found buffer)
(or
;; 1. First try searching in the initial buffer
(let ((res (funcall search-fun string bound noerror)))
;; Reset wrapping for all-buffers pause after successful search
(if (and res (not bound) (eq multi-isearch-pause t))
(setq multi-isearch-current-buffer nil))
res)
;; 2. If the above search fails, start visiting next/prev buffers
;; successively, and search the string in them. Do this only
;; when bound is nil (i.e. not while lazy-highlighting search
;; strings in the current buffer).
(when (and (not bound) multi-isearch-search)
;; If no-pause or there was one attempt to leave the current buffer
(if (or (null multi-isearch-pause)
(and multi-isearch-pause multi-isearch-current-buffer))
(condition-case nil
(progn
(while (not found)
;; Find the next buffer to search
(setq buffer (funcall multi-isearch-next-buffer-current-function
(or buffer (current-buffer)) nil))
(with-current-buffer buffer
(goto-char (if isearch-forward (point-min) (point-max)))
(setq isearch-barrier (point) isearch-opoint (point))
;; After visiting the next/prev buffer search the
;; string in it again, until the function in
;; multi-isearch-next-buffer-current-function raises
;; an error at the beginning/end of the buffer sequence.
(setq found (funcall search-fun string bound noerror))))
;; Set buffer for isearch-search-string to switch
(if buffer (setq multi-isearch-current-buffer buffer))
;; Return point of the new search result
found)
;; Return nil when multi-isearch-next-buffer-current-function fails
;; (`with-current-buffer' raises an error for nil returned from it).
(error (signal 'search-failed (list string "end of multi"))))
(signal 'search-failed (list string "repeat for next buffer"))))))))