# HG changeset patch # User Juri Linkov # Date 1102888394 0 # Node ID 50c8d5bb29a0009761b3b22f5dc4b728dd2b1063 # Parent cce663b649f6fe80cf162a38618fb15170a9f1ba (isearch-edit-string): Set 7th arg of `read-from-minibuffer' to `t' to inherit the current input method (whose name is indicated by [IM] in the minibuffer prompt) from the current buffer to the minibuffer. (isearch-lazy-highlight-update): Put body to `with-local-quit' to allow C-g quitting for lazy highlighting looping inside the search with nested repetition operators. Add overlay to the list before setting its face and other properties to avoid the case of code quitting after placing the new overlay but before it's recorded on the list. Select the window where isearch was activated, to highlight matches in the right window when isearch switches the current window to the minibuffer. diff -r cce663b649f6 -r 50c8d5bb29a0 lisp/isearch.el --- a/lisp/isearch.el Sun Dec 12 18:25:21 2004 +0000 +++ b/lisp/isearch.el Sun Dec 12 21:53:14 2004 +0000 @@ -943,7 +943,7 @@ (isearch-message-prefix nil nil isearch-nonincremental) isearch-string minibuffer-local-isearch-map nil - 'junk-ring)) + 'junk-ring nil t)) isearch-new-message (mapconcat 'isearch-text-char-description isearch-new-string ""))) @@ -2386,59 +2386,64 @@ (let ((max isearch-lazy-highlight-max-at-a-time) (looping t) nomore) - (save-excursion - (save-match-data - (goto-char (if isearch-forward - isearch-lazy-highlight-end - isearch-lazy-highlight-start)) - (while looping - (let ((found (isearch-lazy-highlight-search))) - (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-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))) + (with-local-quit + (save-selected-window + (if (and (window-live-p isearch-lazy-highlight-window) + (not (eq (selected-window) isearch-lazy-highlight-window))) + (select-window isearch-lazy-highlight-window)) + (save-excursion + (save-match-data + (goto-char (if isearch-forward + isearch-lazy-highlight-end + isearch-lazy-highlight-start)) + (while looping + (let ((found (isearch-lazy-highlight-search))) + (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-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 - (let ((ov (make-overlay mb me))) - (overlay-put ov 'face isearch-lazy-highlight-face) - (overlay-put ov 'priority 0) ;lower than main overlay - (overlay-put ov 'window (selected-window)) - (push ov isearch-lazy-highlight-overlays))) - (if isearch-forward - (setq isearch-lazy-highlight-end (point)) - (setq isearch-lazy-highlight-start (point))))) + ;; non-zero-length match + (let ((ov (make-overlay mb me))) + (push ov isearch-lazy-highlight-overlays) + (overlay-put ov 'face isearch-lazy-highlight-face) + (overlay-put ov 'priority 0) ;lower than main overlay + (overlay-put ov 'window (selected-window)))) + (if isearch-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-forward - (progn - (setq isearch-lazy-highlight-end (window-start)) - (goto-char (window-start))) - (setq isearch-lazy-highlight-start (window-end)) - (goto-char (window-end))))))) - (unless nomore - (setq isearch-lazy-highlight-timer - (run-at-time isearch-lazy-highlight-interval nil - 'isearch-lazy-highlight-update))))))) + ;; 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-forward + (progn + (setq isearch-lazy-highlight-end (window-start)) + (goto-char (window-start))) + (setq isearch-lazy-highlight-start (window-end)) + (goto-char (window-end))))))) + (unless nomore + (setq isearch-lazy-highlight-timer + (run-at-time isearch-lazy-highlight-interval nil + 'isearch-lazy-highlight-update))))))))) (defun isearch-resume (search regexp word forward message case-fold) "Resume an incremental search.