Correctly restore original Isearch point. (Bug#4994)

* isearch.el (isearch-mode): Move `isearch-push-state' after
`(run-hooks 'isearch-mode-hook)'.
(isearch-cancel): When `isearch-push-state-function' is defined,
let-bind `isearch-cmds' to the first state (the last element of
`isearch-cmds') and call `isearch-top-state' (it calls pop-state
function and restores the original point).  Otherwise, move point
to `isearch-opoint'.
This commit is contained in:
Juri Linkov 2009-12-07 17:30:01 +00:00
parent e07278736e
commit 406374109c
2 changed files with 24 additions and 6 deletions

View file

@ -1,3 +1,15 @@
2009-12-07 Juri Linkov <juri@jurta.org>
Correctly restore original Isearch point. (Bug#4994)
* isearch.el (isearch-mode): Move `isearch-push-state' after
`(run-hooks 'isearch-mode-hook)'.
(isearch-cancel): When `isearch-push-state-function' is defined,
let-bind `isearch-cmds' to the first state (the last element of
`isearch-cmds') and call `isearch-top-state' (it calls pop-state
function and restores the original point). Otherwise, move point
to `isearch-opoint'.
2009-12-07 Stefan Monnier <monnier@iro.umontreal.ca>
* international/mule-cmds.el (ucs-names): Weed out at compile-time the

View file

@ -798,10 +798,14 @@ It is called by the function `isearch-forward' and other related functions."
(setq isearch-mode " Isearch") ;; forward? regexp?
(force-mode-line-update)
(isearch-push-state)
(setq overriding-terminal-local-map isearch-mode-map)
(run-hooks 'isearch-mode-hook)
;; Pushing the initial state used to be before running isearch-mode-hook,
;; but a hook might set `isearch-push-state-function' used in
;; `isearch-push-state' to save mode-specific initial state. (Bug#4994)
(isearch-push-state)
(isearch-update)
(add-hook 'mouse-leave-buffer-hook 'isearch-done)
@ -1212,10 +1216,12 @@ If first char entered is \\[isearch-yank-word-or-char], then do word search inst
(defun isearch-cancel ()
"Terminate the search and go back to the starting point."
(interactive)
(if (functionp (isearch-pop-fun-state (car (last isearch-cmds))))
(funcall (isearch-pop-fun-state (car (last isearch-cmds)))
(car (last isearch-cmds))))
(goto-char isearch-opoint)
(if (and isearch-push-state-function isearch-cmds)
;; For defined push-state function, restore the first state.
;; This calls pop-state function and restores original point.
(let ((isearch-cmds (last isearch-cmds)))
(isearch-top-state))
(goto-char isearch-opoint))
(isearch-done t) ; exit isearch
(isearch-clean-overlays)
(signal 'quit nil)) ; and pass on quit signal