# HG changeset patch # User Chong Yidong # Date 1281300952 14400 # Node ID 843bffdd92eb6f1e5729f4bf758d249890130fc8 # Parent 091f3ff9a59eb42411652577e446ebbd1c6c5a9c Fix query-replace-regexp incomplete highlighting (Bug#6808). * replace.el (replace-highlight): Bind isearch-forward and isearch-error, ensuring that highlighting is updated if the user switches the search direction (Bug#6808). * isearch.el (isearch-lazy-highlight-forward): New var. (isearch-lazy-highlight-new-loop, isearch-lazy-highlight-search): (isearch-lazy-highlight-update): Use it. diff -r 091f3ff9a59e -r 843bffdd92eb lisp/ChangeLog --- a/lisp/ChangeLog Fri Aug 06 19:58:51 2010 +0900 +++ b/lisp/ChangeLog Sun Aug 08 16:55:52 2010 -0400 @@ -1,3 +1,13 @@ +2010-08-08 Johan Bockgård + + * replace.el (replace-highlight): Bind isearch-forward and + isearch-error, ensuring that highlighting is updated if the user + switches the search direction (Bug#6808). + + * isearch.el (isearch-lazy-highlight-forward): New var. + (isearch-lazy-highlight-new-loop, isearch-lazy-highlight-search): + (isearch-lazy-highlight-update): Use it. + 2010-08-06 Kenichi Handa * international/mule.el (define-charset): Store NAME as :base diff -r 091f3ff9a59e -r 843bffdd92eb lisp/isearch.el --- a/lisp/isearch.el Fri Aug 06 19:58:51 2010 +0900 +++ b/lisp/isearch.el Sun Aug 08 16:55:52 2010 -0400 @@ -2574,6 +2574,7 @@ (defvar isearch-lazy-highlight-case-fold-search nil) (defvar isearch-lazy-highlight-regexp nil) (defvar isearch-lazy-highlight-space-regexp nil) +(defvar isearch-lazy-highlight-forward nil) (defun lazy-highlight-cleanup (&optional force) "Stop lazy highlighting and remove extra highlighting from current buffer. @@ -2613,7 +2614,9 @@ (not (= (window-start) isearch-lazy-highlight-window-start)) (not (= (window-end) ; Window may have been split/joined. - isearch-lazy-highlight-window-end)))) + isearch-lazy-highlight-window-end)) + (not (eq isearch-forward + isearch-lazy-highlight-forward)))) ;; something important did indeed change (lazy-highlight-cleanup t) ;kill old loop & remove overlays (when (not isearch-error) @@ -2628,7 +2631,8 @@ isearch-lazy-highlight-case-fold-search isearch-case-fold-search isearch-lazy-highlight-regexp isearch-regexp isearch-lazy-highlight-wrapped nil - isearch-lazy-highlight-space-regexp search-whitespace-regexp) + isearch-lazy-highlight-space-regexp search-whitespace-regexp + isearch-lazy-highlight-forward isearch-forward) (unless (equal isearch-string "") (setq isearch-lazy-highlight-timer (run-with-idle-timer lazy-highlight-initial-delay nil @@ -2644,7 +2648,8 @@ (search-invisible nil) ; don't match invisible text (retry t) (success nil) - (bound (if isearch-forward + (isearch-forward isearch-lazy-highlight-forward) + (bound (if isearch-lazy-highlight-forward (min (or isearch-lazy-highlight-end-limit (point-max)) (if isearch-lazy-highlight-wrapped isearch-lazy-highlight-start @@ -2678,7 +2683,7 @@ (select-window isearch-lazy-highlight-window)) (save-excursion (save-match-data - (goto-char (if isearch-forward + (goto-char (if isearch-lazy-highlight-forward isearch-lazy-highlight-end isearch-lazy-highlight-start)) (while looping @@ -2691,7 +2696,7 @@ (let ((mb (match-beginning 0)) (me (match-end 0))) (if (= mb me) ;zero-length match - (if isearch-forward + (if isearch-lazy-highlight-forward (if (= mb (if isearch-lazy-highlight-wrapped isearch-lazy-highlight-start (window-end))) @@ -2711,7 +2716,7 @@ (overlay-put ov 'priority 1000) (overlay-put ov 'face lazy-highlight-face) (overlay-put ov 'window (selected-window)))) - (if isearch-forward + (if isearch-lazy-highlight-forward (setq isearch-lazy-highlight-end (point)) (setq isearch-lazy-highlight-start (point))))) @@ -2721,7 +2726,7 @@ (setq looping nil nomore t) (setq isearch-lazy-highlight-wrapped t) - (if isearch-forward + (if isearch-lazy-highlight-forward (progn (setq isearch-lazy-highlight-end (window-start)) (goto-char (max (or isearch-lazy-highlight-start-limit (point-min)) diff -r 091f3ff9a59e -r 843bffdd92eb lisp/replace.el --- a/lisp/replace.el Fri Aug 06 19:58:51 2010 +0900 +++ b/lisp/replace.el Sun Aug 08 16:55:52 2010 -0400 @@ -1893,7 +1893,9 @@ (let ((isearch-string string) (isearch-regexp regexp) (search-whitespace-regexp nil) - (isearch-case-fold-search case-fold)) + (isearch-case-fold-search case-fold) + (isearch-forward t) + (isearch-error nil)) (isearch-lazy-highlight-new-loop range-beg range-end)))) (defun replace-dehighlight ()