Subject: Re: bug#39512: 28.0.50; Add command isearch-yank-region

From: Tino Calancha <[email-masked]>
Date: Sun, 09 Feb 2020 12:21:10 +0100

Juri Linkov <[email-masked]> writes:

>>     During an incremental search, this command appends the region
>>     to the search string.  Otherwise, start an incremental search
>>     using the region as the search string.
>
> What use cases do you think it could be used for?
> I don't see any useful case for appending the region to the search string.
Me either.  I believe I have copied such an append wording from
elsewhere.  What I have in mind is just to set the search string = to
the region.

> I see only 2 useful cases that don't append the region to the search string:
>
> 1. Before starting isearch, the user selects the region,
>    then types a special command bound to a key on the global `M-s' prefix
>    that yanks the region to the initially empty search string
>    (i.e. it doesn't append, it replaces the empty search string)

> 2. The second useful case is to activate the region, start isearch,
>    use isearch to find the string at the region end, thus moving the region end
>    to a new position, replace (don't append) the search string with region text -
>    this is what isearch-yank-region could do.
>    IOW, sync the region with the search string.

I was motivated with a scenario similar to 1.
1. I select a region that I want to search for
2. C-s ; I start an interactive search
3. `some keybinding here'; that sets the search string = to the region.

I think on 3. as an alternative of `isearch-yank-until-char' (and
family).  Sure, having the command to start the search directly with a
M-s prefix is desirable too.
My mind finds easy to remember that I always can do the patter:
C-s
;; Now some keybinding that sets the search string with `isearch-yank- (whatever)

>> +(defun isearch-yank-region ()
>> +  "Pull region into search string.
>> +If called out of an incremental search, then start an incremental
>> +search with the region as the search string."
>> +  (interactive)
>> +  (cond ((use-region-p)
>> +         (unless isearch-mode (isearch-mode t))
>> +         (isearch-yank-string (funcall region-extract-function))
>
> Here (funcall region-extract-function) signals the error
>
>   (wrong-number-of-arguments (1 . 1) 0)
>
> Have you tested your patch?

Opps, I tested without emacs -Q. sorry for that!  I have some advice
in that function that lets me call it with no arguments.