Subject: Re: bug#7787: 23.2; wrong meaning for mouse-2 while in search mode

From: Lars Ingebrigtsen <[email-masked]>
Date: Sun, 17 Apr 2022 14:37:21 +0200

Juri Linkov <[email-masked]> writes:

>>   0. emacs -Q
>>   1. M-: (setq mouse-yank-at-point t) RET
>>   2. double click any word to mark it
>>   3. C-s
>>   4. mouse-2 [with cursor still over the original window, not in
>>      minibuffer]
>>
>>> I see that the existing implementation of isearch-mouse-2
>>> allows yanking the selection when clicked in the echo area,
>>> but when clicked in the buffer it goes into infinite recursion,
>>> because isearch-mouse-2 calls itself again.
>>
>> This is what I see as well, on current master.
>
> The problem is that 'key-binding' in 'isearch-mouse-2'
>
>   (let ((overriding-terminal-local-map nil))
>     (key-binding (this-command-keys-vector) t))
>
> still returns the keybinding from 'overriding-terminal-local-map'
> that contains isearch keybindings.  Something is wrong here.

I'm wholly unfamiliar with this code, but the following trivial patch
seems to do the trick?

diff --git a/lisp/isearch.el b/lisp/isearch.el
index 168d71ada3..26db141781 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -2629,9 +2629,10 @@ isearch-mouse-2
                        ;; Key search depends on mode (bug#47755)
                        (isearch-mode nil))
                    (key-binding (this-command-keys-vector) t))))
-    (if (and (window-minibuffer-p w)
-	     (not (minibuffer-window-active-p w))) ; in echo area
-	(isearch-yank-x-selection)
+    (if (or mouse-yank-at-point
+            (and (window-minibuffer-p w)
+	         (not (minibuffer-window-active-p w)))) ; in echo area
+        (isearch-yank-x-selection)
       (when (functionp binding)
 	(call-interactively binding)))))

Is this the wrong thing to do for some reason?  I mean, we don't care
about the value of binding in this case, I think?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no