This subsection describes how to control whether typing a command not specifically meaningful in searches exits the search before executing the command. It also describes three categories of commands which you can type without exiting the current incremental search, even though they are not themselves part of incremental search.
Normally, typing a command that is not bound by the incremental
search exits the search before executing the command. Thus, the
command operates on the buffer from which you invoked the search.
However, if you customize the variable search-exit-option
to
append
, the characters which you type that are not interpreted by
the incremental search are simply appended to the search string. This
is so you could include in the search string control characters, such
as C-a, that would normally exit the search and invoke the
command bound to them on the buffer.
In incremental search, when you type a command that specifies a prefix argument (see Numeric Arguments), by default it will apply either to the next action in the search or to the command that exits the search. In other words, entering a prefix argument will not by itself terminate the search.
In previous versions of Emacs, entering a prefix argument always
terminated the search. You can revert to this behavior by setting the
variable isearch-allow-prefix
to nil
.
When isearch-allow-scroll
is non-nil
(see below),
prefix arguments always have the default behavior described above,
i.e., they don’t terminate the search, even if
isearch-allow-prefix
is nil
.
Normally, scrolling commands exit incremental search. But if you
change the variable isearch-allow-scroll
to a non-nil
value, that enables the use of the scroll-bar, as well as keyboard
scrolling commands like C-v, M-v, and C-l
(see Scrolling), which have a non-nil
scroll-command
property, without exiting the search. This applies only to calling
these commands via their bound key sequences—typing M-x will
still exit the search. You can give prefix arguments to these
commands in the usual way. This feature normally won’t let you scroll
the current match out of visibility; but if you customize
isearch-allow-scroll
to the special value unlimited
,
that restriction is lifted.
The isearch-allow-scroll
feature also affects some other
commands, such as C-x 2 (split-window-below
) and
C-x ^ (enlarge-window
), which don’t exactly scroll but do
affect where the text appears on the screen. In fact, it affects
any command that has a non-nil
isearch-scroll
property.
So you can control which commands are affected by changing these
properties.
For example, to make C-h l usable within an incremental search
in all future Emacs sessions, use C-h c to find what command it
runs (see Documentation for a Key), which is view-lossage
. Then you can
put the following line in your init file (see The Emacs Initialization File):
(put 'view-lossage 'isearch-scroll t)
This feature can be applied to any command that doesn’t permanently
change point, the buffer contents, the match data, the current buffer,
or the selected window and frame. The command must not itself attempt
an incremental search. This feature is disabled if
isearch-allow-scroll
is nil
(which it is by default).
Likewise, if you change the variable isearch-allow-motion
to a non-nil
value, this enables the use of the keyboard motion
commands M-<, M->, C-v and M-v, to move
respectively to the first occurrence of the current search string in
the buffer, the last one, the first one after the current window,
and the last one before the current window. The search direction
does not change when these motion commands are used, unless you change
the variable isearch-motion-changes-direction
to a non-nil
value, in which case the search direction is forward after M-< and
C-v, and backward after M-> and M-v.
When isearch-yank-on-move
is customized to shift
,
you can extend the search string by holding down the shift key while
typing cursor motion commands. It will yank text that ends at the new
position after moving point in the current buffer.
When isearch-yank-on-move
is t
, you can extend the
search string without using the shift key for cursor motion commands,
but it applies only for certain motion command that have the
isearch-move
property on their symbols.