unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: "Drew Adams" <drew.adams@oracle.com>
Cc: help-gnu-emacs@gnu.org, emacs-devel@gnu.org
Subject: RE: isearch doesn't seem to set mark where search began
Date: Sun, 3 Oct 2004 10:35:13 -0700	[thread overview]
Message-ID: <FDELKNEBLPKKDCEBEJCBMEABCIAA.drew.adams@oracle.com> (raw)
In-Reply-To: <E1CE7PF-0002jk-AK@fencepost.gnu.org>

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	other threads:[~2004-10-03 17:35 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-10-02 16:34 isearch doesn't seem to set mark where search began Drew Adams
2004-10-02 20:15 ` Juri Linkov
2004-10-04 15:19   ` Richard Stallman
2004-10-03 14:32 ` Richard Stallman
2004-10-03 17:35   ` Drew Adams [this message]
2004-10-04 15:20     ` Richard Stallman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=FDELKNEBLPKKDCEBEJCBMEABCIAA.drew.adams@oracle.com \
    --to=drew.adams@oracle.com \
    --cc=emacs-devel@gnu.org \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).