From: Juri Linkov Date: Sun, 22 Jul 2007 22:33:48 +0000 (+0000) Subject: (isearch-edit-string): Save old point and X-Git-Tag: emacs-pretest-23.0.90~11785 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=02b99a172e2127474b13a4bdddd8e339941313e4;p=emacs.git (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. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 40b875386d3..2f72604c3cd 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,14 @@ +2007-07-22 Juri Linkov + + * isearch.el (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. + 2007-07-22 Dan Nicolaescu * vc-git.el (vc-git-register, vc-git-checkin): Use vc-git-command, diff --git a/lisp/isearch.el b/lisp/isearch.el index 71e5e4bccd3..00e7f1cc306 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."