From b74aa22b0a69709a67f33fb446da3c22f7ea340c Mon Sep 17 00:00:00 2001 From: Drew Adams Date: Fri, 27 May 2011 22:26:53 -0300 Subject: [PATCH] * lisp/isearch.el: Let M-e start with point at the first mismatched char. (isearch-fail-pos): New function. (isearch-edit-string): Use it. --- lisp/ChangeLog | 6 ++++++ lisp/isearch.el | 18 +++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index fe1f6cdeaba..03af0adf999 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2011-05-28 Drew Adams + + * isearch.el: Let M-e start with point at the first mismatched char. + (isearch-fail-pos): New function. + (isearch-edit-string): Use it. + 2011-05-28 Dmitry Kurochkin (tiny change) * isearch.el (isearch-range-invisible): Use invisible-p (bug#8721). 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 -- 2.11.4.GIT