changeset 92882:05fd686fa0f7

(isearch-edit-string): Remove one call to `isearch-push-state' not to push an inconsistent state, but keep another correct call to `isearch-push-state'. (isearch-ring-adjust): Call `isearch-push-state' only when `search-ring-update' is non-nil since `isearch-edit-string' already pushes its state. (isearch-message): Improve matching the failed part by checking if the original message starts with the last successful message.
author Juri Linkov <juri@jurta.org>
date Fri, 14 Mar 2008 01:01:59 +0000
parents d6c8f902278a
children 150cdc89c68b
files lisp/isearch.el
diffstat 1 files changed, 18 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/isearch.el	Fri Mar 14 01:01:36 2008 +0000
+++ b/lisp/isearch.el	Fri Mar 14 01:01:59 2008 +0000
@@ -1096,12 +1096,15 @@
 	    ;; Only the string actually used should be saved.
 	    ))
 
-	;; Push the state as of before this C-s.
-	(isearch-push-state)
+	;; This used to push the state as of before this C-s, but it adds
+	;; an inconsistent state where part of variables are from the
+	;; previous search (e.g. `isearch-success'), and part of variables
+	;; are just entered from the minibuffer (e.g. `isearch-string').
+	;; (isearch-push-state)
 
 	;; Reinvoke the pending search.
 	(isearch-search)
-	(isearch-push-state)
+	(isearch-push-state)		; this pushes the correct state
 	(isearch-update)
 	(if isearch-nonincremental
 	    (progn
@@ -1895,10 +1898,12 @@
   (if search-ring-update
       (progn
 	(isearch-search)
+	(isearch-push-state)
 	(isearch-update))
-    (isearch-edit-string)
-    )
-  (isearch-push-state))
+    ;; Otherwise, edit the search string instead.  Note that there is
+    ;; no need to push the search state after isearch-edit-string here
+    ;; since isearch-edit-string already pushes its state
+    (isearch-edit-string)))
 
 (defun isearch-ring-advance ()
   "Advance to the next search string in the ring."
@@ -1975,9 +1980,13 @@
 	(pop cmds))
       (setq succ-msg (and cmds (isearch-message-state (car cmds)))
 	    m (copy-sequence m))
-      (when (and (stringp succ-msg) (< (length succ-msg) (length m)))
-	(add-text-properties (length succ-msg) (length m)
-			     '(face isearch-fail) m))
+      (add-text-properties
+       (if (and (stringp succ-msg)
+		(< (length succ-msg) (length m))
+		(equal succ-msg (substring m 0 (length succ-msg))))
+	   (length succ-msg)
+	 0)
+       (length m) '(face isearch-fail) m)
       ;; Highlight failed trailing whitespace
       (when (string-match " +$" m)
 	(add-text-properties (match-beginning 0) (match-end 0)