История изменений
Исправление theNamelessOne, (текущая версия) :
А можете еще об’яснить, почему надо с такими сложностями оперировать именно
isearch-cmds
, а неisearch-string
?
Потому что isearch-string
– это только строка поиска, которая отображается в минибуфере. Само состояние хранится в стеке isearch-cmds
. Каждый элемент этого стека – состояние поиска в определённый момент: текущая введённая строка, позиция совпадения в родительском буфере, успех и пр. Это позволяет реализовать именно инкрементальный поиск с возможностью возврата к предыдущим состояниям. Команды, введённые в минибуфере (включая self-insert-command
), модифицируют этот стек: при вводе символа в стек добавляется элемент-состояние, при удалении символа – удаляется элемент. После каждой команды на основе этого стека устанавливается новое значение isearch-string
и кучи других переменных с помощью функции isearch--set-state
, затем вызывается isearch-update
для применения изменений. Можно сказать, что значение isearch-string
на любом шаге — это значение поля isearch-string
элемента в голове стека.
с такими сложностями
На самомо деле, тут ничего сложного нет. Как и в функции backward-kill-word
, сначала определяется, сколько символов от текущей позиции до границы слова, просто вместо удаления N символов мы дропаем N элементов стека isearch-cmds
.
Исходная версия theNamelessOne, :
А можете еще об’яснить, почему надо с такими сложностями оперировать именно
isearch-cmds
, а неisearch-string
?
Потому что isearch-string
– это только строка поиска, которая отображается в минибуфере. Само состояние хранится в стеке isearch-cmds
. Каждый элемент этого стека – состояние поиска в определённый момент: текущая введённая строка, позиция совпадения в родительском буфере, успех и пр. Это позволяет реализовать именно инкрементальный поиск с возможностью возврата к предыдущим состояниям. Команды, введённые в минибуфере (включая self-insert-command
), модифицируют этот стек: при вводе символа в стек добавляется элемент-состояние, при удалении символа – удаляется элемент. После каждой команды на основе этого стека устанавливается новое значение isearch-string
и кучи других переменных с помощью функции isearch--set-state
, затем вызывается isearch-update
для применения изменений. Можно сказать, что значение isearch-string
на любом шаге — это значение поля isearch-string
элемента в голове стека.
с такими сложностями
На самомо деле, тут ничего сложного нет. Как и в функции backward-kill-word
, сначала определяется, сколько символов от текущей позиции до границы слова, только вместо удаления N символов мы дропаем N элементов стека isearch-cmds
.