[Top][All Lists]

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

RE: [PATCH] (Or "question"...) isearch-kill-found

From: Drew Adams
Subject: RE: [PATCH] (Or "question"...) isearch-kill-found
Date: Sun, 30 May 2010 17:48:21 -0700

> > I proposed the feature to emacs-devel on 2007-07-10:
> > http://lists.gnu.org/archive/html/emacs-devel/2007-07/msg00490.html
> >
> > The bottom line was Richard's decision:
> >
> >   "I don't think it is needed.  You can type C-@ C-r C-r to put
> >   the region around the match that was just found."
> In that same thread Davis Herring had an idea that sounds interesting 
> and useful to me:
> http://lists.gnu.org/archive/html/emacs-devel/2007-07/msg00492.html
> >  Thinking about this, I realize
> >  that I would get almost all the utility of this idea with 
> >  just one command added to isearch which meant "exit and move
> >  point to start of match", or (closer to your idea) a command
> >  which meant "exit and drop mark at start
> >  of match" in place of your toggle.  WDOT?
> I think a function "exit and drop mark at start of match" 
> would be very useful.

Hm.  That interesting and useful idea that "Davis Herring had" I implemented in
2006, a year before the proposal.  And I pointed the list (hence Davis too) to
that code.

I call that command `set-region-around-search-target'.[*]

(defun set-region-around-search-target ()
  "Set the region around the last search or query-replace target."
  (case last-command
    ((isearch-forward isearch-backward
      isearch-forward-regexp isearch-backward-regexp)
     (push-mark isearch-other-end t 'activate))
    (t (push-mark (match-beginning 0) t 'activate)))
  (setq deactivate-mark nil))

It does exactly what he described: "drop mark at start of match".  Unlike
`isearchp-set-region' (the proposal), it is not conditional on the user option
or on `transient-mark-mode', and thus not sensitive to the toggle key, `C-SPC'.

I do not bind that command by default, but you can bind it in `isearch-map'.  Or
you can add it, in place of `isearchp-set-region', to `isearch-mode-end-hook'.

It is in fact the _same_ as `isearchp-set-region' (the proposal) in this
context, except that it is unconditional instead of respecting the toggle key.

IOW, if `transient-mark-mode' is on and the option is on, then the proposed
behavior is exactly what Davis described: just put mark at the match start.  If
t-m-mode is off and you still want the start to be marked, then use
`set-region-around-search-target' instead.

Here is what I proposed (I use it on `isearch-mode-end-hook'):

(defun isearchp-set-region ()
  "Set region around search target, if `isearchp-set-region-flag'.
Used only for Transient Mark mode."
  (when (and isearchp-set-region-flag transient-mark-mode)
    (push-mark isearch-other-end t 'activate)))

You might notice, BTW, that Davis started by saying that he does not use either
transient-mark mode or delete-selection mode.  Yet t-m mode is the context the
feature was designed for - it is active only in t-m mode.  (Transient-mark mode
is now the default.)

[*] There is perhaps a better test to use here than `last-command'.  Maybe
isearch has a state variable that can be checked for this - dunno.

reply via email to

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