User option to move to another match when changing direction in isearch.
* lisp/isearch.el (isearch-direction-change-changes-match): New user option (bug#47599). (isearch-repeat): Use the new option. (isearch-repeat-forward, isearch-repeat-backward): Adapt to the new option. * etc/NEWS: Mention the new user option. * doc/emacs/search.texi: Document the new user option.
This commit is contained in:
parent
b4eb84d4af
commit
972bab0981
3 changed files with 34 additions and 4 deletions
|
@ -201,6 +201,14 @@ something before the starting point, type @kbd{C-r} to switch to a
|
|||
backward search, leaving the search string unchanged. Similarly,
|
||||
@kbd{C-s} in a backward search switches to a forward search.
|
||||
|
||||
@cindex search, changing direction
|
||||
@vindex isearch-repeat-on-direction-change
|
||||
When you change the direction of a search, the first command you
|
||||
type will, by default, remain on the same match, and the cursor will
|
||||
move to the other end of the match. To move to another match
|
||||
immediately, customize the variable
|
||||
@code{isearch-repeat-on-direction-change} to @code{t}.
|
||||
|
||||
@cindex search, wrapping around
|
||||
@cindex search, overwrapped
|
||||
@cindex wrapped search
|
||||
|
|
6
etc/NEWS
6
etc/NEWS
|
@ -367,6 +367,12 @@ trying to be non-destructive.
|
|||
This command opens a new buffer called "*Memory Report*" and gives a
|
||||
summary of where Emacs is using memory currently.
|
||||
|
||||
+++
|
||||
** New user option 'isearch-repeat-on-direction-change'.
|
||||
When this option is set, direction changes in Isearch move to another
|
||||
search match, if there is one, instead of moving point to the other
|
||||
end of the current match.
|
||||
|
||||
** Outline
|
||||
|
||||
+++
|
||||
|
|
|
@ -185,6 +185,16 @@ When `nil', never wrap, just stop at the last match."
|
|||
(const :tag "Disable wrapping" nil))
|
||||
:version "28.1")
|
||||
|
||||
(defcustom isearch-repeat-on-direction-change nil
|
||||
"Whether a direction change should move to another match.
|
||||
When `nil', the default, a direction change moves point to the other
|
||||
end of the current search match.
|
||||
When `t', a direction change moves to another search match, if there
|
||||
is one."
|
||||
:type '(choice (const :tag "Remain on the same match" nil)
|
||||
(const :tag "Move to another match" t))
|
||||
:version "28.1")
|
||||
|
||||
(defvar isearch-mode-hook nil
|
||||
"Function(s) to call after starting up an incremental search.")
|
||||
|
||||
|
@ -1847,6 +1857,8 @@ Use `isearch-exit' to quit without signaling."
|
|||
(funcall isearch-wrap-function)
|
||||
(goto-char (if isearch-forward (point-min) (point-max))))))
|
||||
;; C-s in reverse or C-r in forward, change direction.
|
||||
(if (and isearch-other-end isearch-repeat-on-direction-change)
|
||||
(goto-char isearch-other-end))
|
||||
(setq isearch-forward (not isearch-forward)
|
||||
isearch-success t))
|
||||
|
||||
|
@ -1910,10 +1922,12 @@ of the buffer, type \\[isearch-beginning-of-buffer] with a numeric argument."
|
|||
(cond ((< count 0)
|
||||
(isearch-repeat-backward (abs count))
|
||||
;; Reverse the direction back
|
||||
(isearch-repeat 'forward))
|
||||
(let ((isearch-repeat-on-direction-change nil))
|
||||
(isearch-repeat 'forward)))
|
||||
(t
|
||||
;; Take into account one iteration to reverse direction
|
||||
(when (not isearch-forward) (setq count (1+ count)))
|
||||
(unless isearch-repeat-on-direction-change
|
||||
(when (not isearch-forward) (setq count (1+ count))))
|
||||
(isearch-repeat 'forward count))))
|
||||
(isearch-repeat 'forward)))
|
||||
|
||||
|
@ -1931,10 +1945,12 @@ of the buffer, type \\[isearch-end-of-buffer] with a numeric argument."
|
|||
(cond ((< count 0)
|
||||
(isearch-repeat-forward (abs count))
|
||||
;; Reverse the direction back
|
||||
(isearch-repeat 'backward))
|
||||
(let ((isearch-repeat-on-direction-change nil))
|
||||
(isearch-repeat 'backward)))
|
||||
(t
|
||||
;; Take into account one iteration to reverse direction
|
||||
(when isearch-forward (setq count (1+ count)))
|
||||
(unless isearch-repeat-on-direction-change
|
||||
(when isearch-forward (setq count (1+ count))))
|
||||
(isearch-repeat 'backward count))))
|
||||
(isearch-repeat 'backward)))
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue