diff options
Diffstat (limited to 'lisp/isearch.el')
-rw-r--r-- | lisp/isearch.el | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/lisp/isearch.el b/lisp/isearch.el index 1bb08d1ebb4..7f018ab14c7 100644 --- a/lisp/isearch.el +++ b/lisp/isearch.el @@ -1062,6 +1062,22 @@ nonincremental search instead via `isearch-edit-string'." (defvar minibuffer-history-symbol) ;; from external package gmhist.el +(defun isearch-fail-pos () + "Position of first mismatch in search string, or its length if none." + (let ((cmds isearch-cmds)) + (if (and isearch-success (not isearch-error)) + (length isearch-message) + (while (or (not (isearch-success-state (car cmds))) + (isearch-error-state (car cmds))) + (pop cmds)) + (let ((succ-msg (and cmds (isearch-message-state (car cmds))))) + (if (and (stringp succ-msg) + (< (length succ-msg) (length isearch-message)) + (equal succ-msg + (substring isearch-message 0 (length succ-msg)))) + (length succ-msg) + 0))))) + (defun isearch-edit-string () "Edit the search string in the minibuffer. The following additional command keys are active while editing. @@ -1141,7 +1157,7 @@ If first char entered is \\[isearch-yank-word-or-char], then do word search inst (setq isearch-new-string (read-from-minibuffer (isearch-message-prefix nil nil isearch-nonincremental) - isearch-string + (cons isearch-string (1+ (isearch-fail-pos))) minibuffer-local-isearch-map nil (if isearch-regexp (cons 'regexp-search-ring |