aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/isearch.el
diff options
context:
space:
mode:
authorJuri Linkov <[email protected]>2007-07-22 22:35:10 +0000
committerJuri Linkov <[email protected]>2007-07-22 22:35:10 +0000
commite81ab986428e7c45c3e7ac2ae6bf52f39dfcefbf (patch)
treecb3ba8e491e4ff947e1f6247c0f1ca9139202780 /lisp/isearch.el
parent49bbf1b953d9ef97fa9398a90e66b6f9fc340321 (diff)
(isearch-edit-string): Save old point and
isearch-other-end to old-point and old-other-end before reading the search string from minibuffer. After exiting minibuffer set point to old-other-end if point and the search direction is the same as before reading the search string. (isearch-del-char): Don't set isearch-yank-flag to t. Put point to isearch-other-end. Instead of isearch-search-and-update call three functions isearch-search, isearch-push-state and isearch-update.
Diffstat (limited to 'lisp/isearch.el')
-rw-r--r--lisp/isearch.el25
1 files changed, 20 insertions, 5 deletions
diff --git a/lisp/isearch.el b/lisp/isearch.el
index 71e5e4bccd..00e7f1cc30 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -992,7 +992,7 @@ If first char entered is \\[isearch-yank-word-or-char], then do word search inst
isearch-original-minibuffer-message-timeout)
(isearch-original-minibuffer-message-timeout
isearch-original-minibuffer-message-timeout)
- )
+ old-point old-other-end)
;; Actually terminate isearching until editing is done.
;; This is so that the user can do anything without failure,
@@ -1001,6 +1001,10 @@ If first char entered is \\[isearch-yank-word-or-char], then do word search inst
(isearch-done t t)
(exit nil)) ; was recursive editing
+ ;; Save old point and isearch-other-end before reading from minibuffer
+ ;; that can change their values.
+ (setq old-point (point) old-other-end isearch-other-end)
+
(isearch-message) ;; for read-char
(unwind-protect
(let* (;; Why does following read-char echo?
@@ -1036,6 +1040,14 @@ If first char entered is \\[isearch-yank-word-or-char], then do word search inst
isearch-new-message
(mapconcat 'isearch-text-char-description
isearch-new-string "")))
+
+ ;; Set point at the start (end) of old match if forward (backward),
+ ;; so after exiting minibuffer isearch resumes at the start (end)
+ ;; of this match and can find it again.
+ (if (and old-other-end (eq old-point (point))
+ (eq isearch-forward isearch-new-forward))
+ (goto-char old-other-end))
+
;; Always resume isearching by restarting it.
(isearch-mode isearch-forward
isearch-regexp
@@ -1260,10 +1272,13 @@ If search string is empty, just beep."
(ding)
(setq isearch-string (substring isearch-string 0 (- (or arg 1)))
isearch-message (mapconcat 'isearch-text-char-description
- isearch-string "")
- ;; Don't move cursor in reverse search.
- isearch-yank-flag t))
- (isearch-search-and-update))
+ isearch-string "")))
+ ;; Use the isearch-other-end as new starting point to be able
+ ;; to find the remaining part of the search string again.
+ (if isearch-other-end (goto-char isearch-other-end))
+ (isearch-search)
+ (isearch-push-state)
+ (isearch-update))
(defun isearch-yank-string (string)
"Pull STRING into search string."