diff options
author | Juri Linkov <[email protected]> | 2007-07-22 22:35:10 +0000 |
---|---|---|
committer | Juri Linkov <[email protected]> | 2007-07-22 22:35:10 +0000 |
commit | e81ab986428e7c45c3e7ac2ae6bf52f39dfcefbf (patch) | |
tree | cb3ba8e491e4ff947e1f6247c0f1ca9139202780 /lisp/isearch.el | |
parent | 49bbf1b953d9ef97fa9398a90e66b6f9fc340321 (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.el | 25 |
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." |