emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Isearch: always try to find longest successful prefix [was: move to fail


From: Drew Adams
Subject: Isearch: always try to find longest successful prefix [was: move to fail position in Isearch edit]
Date: Tue, 11 Nov 2008 07:07:32 -0800

I suggested this:

> Any interest in this? I bind it to `M-e' in 
> `minibuffer-local-isearch-map', so `M-e M-e' puts the
> cursor at the match failure position. 
> 
> If you type a search string quickly and mistype a char or 
> two, this lets you correct the typo without discarding
> and retyping the rest of the search string:
> `M-e M-e <corrections> C-s'.
> 
> (defun isearch-goto-success-end ()
>     "Go to end of search string text that matches."
>     (interactive)
>     (goto-char (point-max))
>     (let ((cmds  isearch-cmds)
>           succ-msg)
>       (when (or (not isearch-success) isearch-error)
>         (while (or (not (isearch-success-state (car cmds))) 
>                    (isearch-error-state (car cmds)))
>           (pop cmds))
>         (setq succ-msg  (and cmds (isearch-message-state (car cmds))))
>         (backward-char (- (length isearch-string)
>                           (length succ-msg))))))
> 
> (define-key minibuffer-local-isearch-map 
>             "\M-e" 'isearchp-goto-success-end)

You'll notice that this would be a lot handier if Isearch always started out
(and resumed after Isearch edit) by treating the search string incrementally.

For example, suppose you search again with a previous search string `aaxbbb' by
hitting `C-s C-s' in a buffer where there is no match for `aaxbbb' but there are
matches for `aa'.

Isearch fails immediately, showing the entire search string, `aaxbbb', as a
failed match by highlighting it. If, however, you had typed `aaxbbb' to a fresh
`C-s', then the `aa' match would be located, and the failure highlighting would
correctly reflect the `aa' prefix match success and the `xbbb' suffix match
failure.

You could then, for example, hit RET to stop at the partial match (`aa')
position.

Or you could use the above code to quickly edit only the non-matching part. If,
for example, the buffer contained `aapbbb' or `aabbb', then a quick 1-character
change in the middle of the search string would put you on your way.

Besides these benefits would be the benefit of more consistency. Isearch would
always act the same (incrementally), even when it is given a complete string to
start with, just as if you had typed the string a character at a time.

I don't have the time to figure out what might need to be done to get this
behavior, which is preferable in my opinion. Perhaps someone who is an Isearch
guru (Juri?) will be interested and have the time?






reply via email to

[Prev in Thread] Current Thread [Next in Thread]