1

When I do I-search: or I-search-backward , it starts right away from the first word it find.

Original behavior:

word1                                           |[cursor]word1 ; cursor moves here 
wor[cursor]d2 ;<= I press `ctrl+r` word [enter] |word2
word3                                           |word3

For example, when I am in I-search, I want to start doing backward search and press ctrl+r but in the first press it remains in the current found word (cursor move into its beginning) and on the second press to ctrl+r, `emacs jumps to the found word on backward.

Example:

word1                                           |word1
wor[cursor]d2 ;<= I press `ctrl+s` word [enter] |word2
word3                                           |word3[cursor]; cursor moves here

then

word1                                           |word1
word2                                           |word2
word3[cursor] ;<= I press `ctrl+r` word [enter] |[cursor]word3 ; cursor moves here                                          

at this stage I want cursor to move beginning of word2 like it should do on its original behavior.


=> I was wondering when the switch from I-search: to I-search-backward or visa versa, can the action take place on the first click instead of two?

1

It's all based on where the cursor is when you start the search.

C-hig (emacs)Basic Isearch says:

A backward search finds matches that end before the starting point, just as a forward search finds matches that begin after it.

Hence for:

word1
wor[cursor]d2
word3

Searching backwards for word cannot find word2 because that instance of "word" doesn't end before [cursor].

word1
word2
word3[cursor]

Searching backwards here, we will initially find word3, as that instance of "word" ends before [cursor].


Edit: The following is extremely minimally tested, but give this a whirl:

(define-advice isearch-repeat (:before (direction) goto-other-end)
  "If reversing, start the search from the other end of the current match."
  (unless (eq isearch-forward (eq direction 'forward))
    (when isearch-other-end
      (goto-char isearch-other-end))))
| improve this answer | |
  • So maybe right before switch is made like from forward to backward, I can try to move cursor one postion left. But for that I have to manage to detect when the switch is made. – alper May 31 at 12:40
  • Wow your code works perfect, I don't know how it makes the magic but thank you – alper May 31 at 15:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.