help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: isearch doesn't seem to set mark where search began


From: Drew Adams
Subject: RE: isearch doesn't seem to set mark where search began
Date: Sun, 3 Oct 2004 10:35:13 -0700

I mentioned no customization. I spoke of the case where you add an
isearch-mode-hook that does goto-char isearch-other-end. This hook moves
point to where the search ends (but at the search-string start, rather than
end). C-g in this case does _not_ leave point unchanged from the starting
point of the search.

See email thread below with Juri. As he points out, the isearch code already
tries to do the right thing, but the hook is called too late. It no doubt
suffices to move the hook call earlier (but this should be tested to be sure
it doesn't break anything else).

Here is the exchange with Juri:

-----Original Message-----
From: Drew Adams [mailto:drew.adams@oracle.com]
Sent: Saturday, October 02, 2004 1:26 PM
To: Juri Linkov
Subject: RE: isearch doesn't seem to set mark where search began


Right. I noticed the same thing, but wasn't sure if just moving it wouldn't
break something else.

Thanks,

  Drew

-----Original Message-----
From: emacs-devel-bounces+drew.adams=oracle.com@gnu.org
[mailto:emacs-devel-bounces+drew.adams=oracle.com@gnu.org]On Behalf Of
Juri Linkov
Sent: Saturday, October 02, 2004 1:16 PM
To: Drew Adams
Cc: emacs-devel@gnu.org
Subject: Re: isearch doesn't seem to set mark where search began


"Drew Adams" <drew.adams@oracle.com> writes:
> A lot of folks are doing this now:
>
> (add-hook 'isearch-mode-end-hook 'my-goto-match-beginning)
> (defun my-goto-match-beginning ()
>   (when isearch-forward (goto-char isearch-other-end)))
>
> If you end with Control-g, point is left at the beginning of the last
> find. You would like to be able to do C-x C-x to return to the search
> start.
>
> If you end with, say, RET or C-b, no problem. The behavior should
> consistently set mark at the search start point, provided point is
> different.

The behavior you described is already implemented in `isearch-done'
even if the search is ended with C-g, but it doesn't work for the
case where the point is changed in `isearch-mode-end-hook' because
this hook is run too late.

I think the code for pushing the mark should be moved below the
`(run-hooks 'isearch-mode-end-hook)':

Index: lisp/isearch.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/isearch.el,v
retrieving revision 1.240
diff -u -r1.240 isearch.el
--- lisp/isearch.el     13 Sep 2004 08:18:22 -0000      1.240
+++ lisp/isearch.el     2 Oct 2004 20:08:28 -0000
@@ -680,16 +680,7 @@
     (if isearch-small-window
        (goto-char found-point)
       ;; Exiting the save-window-excursion clobbers window-start; restore
it.
-      (set-window-start (selected-window) found-start t))
-
-    ;; If there was movement, mark the starting position.
-    ;; Maybe should test difference between and set mark iff > threshold.
-    (if (/= (point) isearch-opoint)
-       (or (and transient-mark-mode mark-active)
-           (progn
-             (push-mark isearch-opoint t)
-             (or executing-kbd-macro (> (minibuffer-depth) 0)
-                 (message "Mark saved where search started"))))))
+      (set-window-start (selected-window) found-start t)))

   (setq isearch-mode nil)
   (if isearch-input-method-local-p
@@ -714,6 +705,16 @@
       (isearch-update-ring isearch-string isearch-regexp))

   (run-hooks 'isearch-mode-end-hook)
+
+  ;; If there was movement, mark the starting position.
+  ;; Maybe should test difference between and set mark iff > threshold.
+  (if (/= (point) isearch-opoint)
+      (or (and transient-mark-mode mark-active)
+          (progn
+            (push-mark isearch-opoint t)
+            (or executing-kbd-macro (> (minibuffer-depth) 0)
+                (message "Mark saved where search started")))))
+
   (and (not edit) isearch-recursive-edit (exit-recursive-edit)))

 (defun isearch-update-ring (string &optional regexp)


-----Original Message-----
From: emacs-devel-bounces+drew.adams=oracle.com@gnu.org
[mailto:emacs-devel-bounces+drew.adams=oracle.com@gnu.org]On Behalf Of
Richard Stallman
Sent: Sunday, October 03, 2004 7:32 AM
To: Drew Adams
Cc: help-gnu-emacs@gnu.org; emacs-devel@gnu.org
Subject: Re: isearch doesn't seem to set mark where search began


Exiting the search with C-g means it does not move.
That should not set the mark.  I don't want that to change.

You say the problem arises because of a customization.
If you can suggest a clean patch that won't change the normal
behavior but improves matters with your customization, I won't object
to that.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]