* bug#23007: 24.5; buggy interactive search with middle click
@ 2016-03-14 3:10 Vincent Lefevre
2017-05-29 19:56 ` Alex
0 siblings, 1 reply; 12+ messages in thread
From: Vincent Lefevre @ 2016-03-14 3:10 UTC (permalink / raw)
To: 23007
1. Start Emacs with its own UI under X Window.
2. Type: M-<
Here the cursor is at the beginning of the buffer, which contains
some text.
3. In some other window, select some text (e.g. the letter "n").
4. Type: C-s
This starts the interactive search. It says:
I-search:
5. Click with the middle button near the bottom of the window.
This pastes the text at the end of the buffer.
6. Type: C-_
This removes the pasted text and moves the cursor back at the
beginning of the buffer.
7. Type: C-s
This starts the interactive search again. But this time, it says:
I-search: [No previous search string]
8. Type: e
This searches for "e". All the occurrences of "e" are highlighted.
9. Type: <down>
This is no longer the interactive search, but the occurrences of "e"
are still highlighted.
Typing other letters brings back to the interactive search.
In GNU Emacs 24.5.1 (x86_64-pc-linux-gnu, GTK+ Version 3.18.6)
of 2016-01-22 on binet, modified by Debian
Windowing system distributor `The X.Org Foundation', version 11.0.11801000
System Description: Debian GNU/Linux stable-updates (sid)
Configured using:
`configure --build x86_64-linux-gnu --prefix=/usr
--sharedstatedir=/var/lib --libexecdir=/usr/lib
--localstatedir=/var/lib --infodir=/usr/share/info
--mandir=/usr/share/man --with-pop=yes
--enable-locallisppath=/etc/emacs24:/etc/emacs:/usr/local/share/emacs/24.5/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/24.5/site-lisp:/usr/share/emacs/site-lisp
--build x86_64-linux-gnu --prefix=/usr --sharedstatedir=/var/lib
--libexecdir=/usr/lib --localstatedir=/var/lib
--infodir=/usr/share/info --mandir=/usr/share/man --with-pop=yes
--enable-locallisppath=/etc/emacs24:/etc/emacs:/usr/local/share/emacs/24.5/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/24.5/site-lisp:/usr/share/emacs/site-lisp
--with-x=yes --with-x-toolkit=gtk3 --with-toolkit-scroll-bars
'CFLAGS=-g -O2 -fstack-protector-strong -Wformat
-Werror=format-security -Wall' 'CPPFLAGS=-Wdate-time
-D_FORTIFY_SOURCE=2' LDFLAGS=-Wl,-z,relro'
Important settings:
value of $LC_COLLATE: POSIX
value of $LC_CTYPE: en_US.UTF-8
value of $LC_TIME: en_DK
value of $LANG: POSIX
locale-coding-system: utf-8-unix
Major mode: Lisp Interaction
Minor modes in effect:
display-time-mode: t
show-paren-mode: t
tooltip-mode: t
electric-indent-mode: t
mouse-wheel-mode: t
menu-bar-mode: t
file-name-shadow-mode: t
global-font-lock-mode: t
font-lock-mode: t
blink-cursor-mode: t
auto-composition-mode: t
auto-encryption-mode: t
auto-compression-mode: t
column-number-mode: t
line-number-mode: t
transient-mark-mode: t
Recent messages:
Loading /etc/emacs/site-start.d/50latex-cjk-common.el (source)...done
Loading /etc/emacs/site-start.d/50latex-cjk-thai.el (source)...done
Loading /etc/emacs/site-start.d/50psvn.el (source)...done
Loading /etc/emacs/site-start.d/50python-docutils.el (source)...done
Loading /etc/emacs/site-start.d/50rnc-mode.el (source)...done
Loading /etc/emacs/site-start.d/50texlive-lang-english.el (source)...done
Loading /home/vinc17/share/emacs/site-lisp/mutteditor.el (source)...done
Loading time...done
For information about GNU Emacs and the GNU system, type C-h C-a.
user-error: Beginning of history; no preceding item
Load-path shadows:
/usr/share/emacs/24.5/site-lisp/debian-startup hides /usr/share/emacs/site-lisp/debian-startup
/usr/share/emacs24/site-lisp/cmake-data/cmake-mode hides /usr/share/emacs/site-lisp/cmake-mode
/usr/share/emacs/site-lisp/rst hides /usr/share/emacs/24.5/lisp/textmodes/rst
/usr/share/emacs24/site-lisp/latex-cjk-thai/thai-word hides /usr/share/emacs/24.5/lisp/language/thai-word
Features:
(shadow sort gnus-util mail-extr warnings emacsbug message format-spec
rfc822 mml easymenu mml-sec mm-decode mm-bodies mm-encode mail-parse
rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045
ietf-drums mm-util help-fns mail-prsvr mail-utils time cus-start
cus-load paren cc-styles cc-align cc-engine cc-vars cc-defs edmacro
kmacro cl-loaddefs cl-lib time-date tooltip electric uniquify ediff-hook
vc-hooks lisp-float-type mwheel x-win x-dnd tool-bar dnd fontset image
regexp-opt fringe tabulated-list newcomment lisp-mode prog-mode register
page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock
font-lock syntax facemenu font-core frame cham georgian utf-8-lang
misc-lang vietnamese tibetan thai tai-viet lao korean japanese hebrew
greek romanian slovak czech european ethiopic indian cyrillic chinese
case-table epa-hook jka-cmpr-hook help simple abbrev minibuffer nadvice
loaddefs button faces cus-face macroexp files text-properties overlay
sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote make-network-process dbusbind
gfilenotify dynamic-setting system-font-setting font-render-setting
move-toolbar gtk x-toolkit x multi-tty emacs)
Memory information:
((conses 16 92473 4397)
(symbols 48 20392 0)
(miscs 40 44 93)
(strings 32 16021 4470)
(string-bytes 1 471882)
(vectors 16 10303)
(vector-slots 8 396854 4370)
(floats 8 70 88)
(intervals 56 230 0)
(buffers 960 12)
(heap 1024 32308 1033))
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#23007: 24.5; buggy interactive search with middle click
2016-03-14 3:10 bug#23007: 24.5; buggy interactive search with middle click Vincent Lefevre
@ 2017-05-29 19:56 ` Alex
2017-05-29 23:56 ` npostavs
0 siblings, 1 reply; 12+ messages in thread
From: Alex @ 2017-05-29 19:56 UTC (permalink / raw)
To: Vincent Lefevre; +Cc: 23007
[-- Attachment #1: Type: text/plain, Size: 1496 bytes --]
tags 23007 patch
quit
Vincent Lefevre <vincent@vinc17.net> writes:
> 1. Start Emacs with its own UI under X Window.
>
> 2. Type: M-<
> Here the cursor is at the beginning of the buffer, which contains
> some text.
>
> 3. In some other window, select some text (e.g. the letter "n").
>
> 4. Type: C-s
> This starts the interactive search. It says:
> I-search:
>
> 5. Click with the middle button near the bottom of the window.
> This pastes the text at the end of the buffer.
>
> 6. Type: C-_
> This removes the pasted text and moves the cursor back at the
> beginning of the buffer.
>
> 7. Type: C-s
> This starts the interactive search again. But this time, it says:
> I-search: [No previous search string]
>
> 8. Type: e
> This searches for "e". All the occurrences of "e" are highlighted.
>
> 9. Type: <down>
> This is no longer the interactive search, but the occurrences of "e"
> are still highlighted.
>
> Typing other letters brings back to the interactive search.
This is because clicking the middle button during isearch calls
isearch-mouse-2, which calls the usual mouse-yank-primary, which calls
isearch-done to finish isearch. Problem is, it let-binds
overriding-terminal-local-map around this call, which counteracts
isearch-done setting this variable to nil. The end result is having quit
isearch, but with the overriding map still in place.
I have attached a simple patch below. Eli, if it's satisfactory, would
you commit it for me?
TIA
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: patch --]
[-- Type: text/x-patch, Size: 1562 bytes --]
From 33251d03d1d2298b29ae2a35ecccb8ae41e8bdd4 Mon Sep 17 00:00:00 2001
From: Alexander Gramiak <agrambot@gmail.com>
Date: Mon, 29 May 2017 13:43:23 -0600
Subject: [PATCH] Limit scope of local overriding-terminal-local-map
The function `binding' may call isearch-done, which globally sets
overriding-terminal-local-map to nil (Bug #23007).
* lisp/isearch.el (isearch-mouse-2): Don't bind
overriding-terminal-local-map around the call to `binding'.
---
lisp/isearch.el | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/lisp/isearch.el b/lisp/isearch.el
index c34739d638..992794e43a 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -2036,14 +2036,15 @@ isearch-mouse-2
Otherwise invoke whatever the calling mouse-2 command sequence
is bound to outside of Isearch."
(interactive "e")
- (let* ((w (posn-window (event-start click)))
- (overriding-terminal-local-map nil)
- (binding (key-binding (this-command-keys-vector) t)))
+ (let ((w (posn-window (event-start click)))
+ binding)
(if (and (window-minibuffer-p w)
- (not (minibuffer-window-active-p w))) ; in echo area
- (isearch-yank-x-selection)
+ (not (minibuffer-window-active-p w))) ; in echo area
+ (isearch-yank-x-selection)
+ (let ((overriding-terminal-local-map nil))
+ (setq binding (key-binding (this-command-keys-vector) t)))
(when (functionp binding)
- (call-interactively binding)))))
+ (call-interactively binding)))))
(declare-function xterm--pasted-text "term/xterm" ())
--
2.11.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* bug#23007: 24.5; buggy interactive search with middle click
2017-05-29 19:56 ` Alex
@ 2017-05-29 23:56 ` npostavs
2017-05-30 0:41 ` Drew Adams
2017-05-30 2:47 ` Alex
0 siblings, 2 replies; 12+ messages in thread
From: npostavs @ 2017-05-29 23:56 UTC (permalink / raw)
To: Alex; +Cc: Vincent Lefevre, 23007
Alex <agrambot@gmail.com> writes:
> + (let ((overriding-terminal-local-map nil))
> + (setq binding (key-binding (this-command-keys-vector) t)))
IMO, it would be better style to do something like
(let ((binding (let ((overriding-terminal-local-map nil))
(key-binding (this-command-keys-vector) t))))
...)
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#23007: 24.5; buggy interactive search with middle click
2017-05-29 23:56 ` npostavs
@ 2017-05-30 0:41 ` Drew Adams
2017-05-30 0:53 ` npostavs
2017-05-30 2:47 ` Alex
1 sibling, 1 reply; 12+ messages in thread
From: Drew Adams @ 2017-05-30 0:41 UTC (permalink / raw)
To: npostavs, Alex; +Cc: Vincent Lefevre, 23007
> > + (let ((overriding-terminal-local-map nil))
> > + (setq binding (key-binding (this-command-keys-vector) t)))
>
> IMO, it would be better style to do something like
>
> (let ((binding (let ((overriding-terminal-local-map nil))
> (key-binding (this-command-keys-vector) t))))
> ...)
(let* ((overriding-terminal-local-map nil)
(binding (key-binding (this-command-keys-vector) t)))
...)
;-)
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#23007: 24.5; buggy interactive search with middle click
2017-05-30 0:41 ` Drew Adams
@ 2017-05-30 0:53 ` npostavs
2017-05-30 1:07 ` Drew Adams
0 siblings, 1 reply; 12+ messages in thread
From: npostavs @ 2017-05-30 0:53 UTC (permalink / raw)
To: Drew Adams; +Cc: Vincent Lefevre, Alex, 23007
Drew Adams <drew.adams@oracle.com> writes:
>> > + (let ((overriding-terminal-local-map nil))
>> > + (setq binding (key-binding (this-command-keys-vector) t)))
>>
>> IMO, it would be better style to do something like
>>
>> (let ((binding (let ((overriding-terminal-local-map nil))
>> (key-binding (this-command-keys-vector) t))))
>> ...)
>
> (let* ((overriding-terminal-local-map nil)
> (binding (key-binding (this-command-keys-vector) t)))
> ...)
Check https://debbugs.gnu.org/cgi/bugreport.cgi?bug=23007#8, we need to
avoid binding `overriding-terminal-local-map' in "...".
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#23007: 24.5; buggy interactive search with middle click
2017-05-30 0:53 ` npostavs
@ 2017-05-30 1:07 ` Drew Adams
2017-05-30 1:28 ` npostavs
0 siblings, 1 reply; 12+ messages in thread
From: Drew Adams @ 2017-05-30 1:07 UTC (permalink / raw)
To: npostavs; +Cc: Vincent Lefevre, Alex, 23007
> >> > + (let ((overriding-terminal-local-map nil))
> >> > + (setq binding (key-binding (this-command-keys-vector) t)))
> >>
> >> IMO, it would be better style to do something like
> >>
> >> (let ((binding (let ((overriding-terminal-local-map nil))
> >> (key-binding (this-command-keys-vector) t))))
> >> ...)
> >
> > (let* ((overriding-terminal-local-map nil)
> > (binding (key-binding (this-command-keys-vector) t)))
> > ...)
>
> Check https://urldefense.proofpoint.com/v2/url?u=https-
> 3A__debbugs.gnu.org_cgi_bugreport.cgi-3Fbug-3D23007-
> 238&d=DwIBAg&c=RoP1YumCXCgaWHvlZYR8PQcxBKCX5YTpkKY057SbK10&r=qZLZosY6GBAaJtO
> G9v8QX7nD4BS9t9s5otgxC3d4IFU&m=eZ-Uw6bQQfS-_CFDf_e3zupcjOhlrCnDnq5pNm6-
> bao&s=e0BQOMr3F7kitlASNZ_EMEy-LvwMn0CsRuZUecvrYZg&e= , we need to
> avoid binding `overriding-terminal-local-map' in "...".
Clearly I, like you, meant that this let is for only the second
`if' clause. But these are only style differences.
If it were I, I'd also move the let-binding that is used only
in the first `if' clause into the `if' test. (And I'd ensure
that there is in fact a mark.)
(if (let ((win (posn-window (event-start click))))
(and (window-minibuffer-p win)
(not (minibuffer-window-active-p win))
(mark)))
(isearch-yank-x-selection)
(let* ((overriding-terminal-local-map nil)
(binding (key-binding (this-command-keys-vector) t)))
(when (functionp binding) (call-interactively binding))))
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#23007: 24.5; buggy interactive search with middle click
2017-05-30 1:07 ` Drew Adams
@ 2017-05-30 1:28 ` npostavs
2017-05-30 2:04 ` Drew Adams
0 siblings, 1 reply; 12+ messages in thread
From: npostavs @ 2017-05-30 1:28 UTC (permalink / raw)
To: Drew Adams; +Cc: Vincent Lefevre, Alex, 23007
Drew Adams <drew.adams@oracle.com> writes:
> Clearly I, like you, meant that this let is for only the second
> `if' clause.
Sorry for not being clear, but that's not what I meant:
`overriding-terminal-local-map' must be bound for the `key-binding'
call, and not for the `call-interactively' binding call. See Alex's
explanation in message #8 and its attached patch.
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#23007: 24.5; buggy interactive search with middle click
2017-05-30 1:28 ` npostavs
@ 2017-05-30 2:04 ` Drew Adams
0 siblings, 0 replies; 12+ messages in thread
From: Drew Adams @ 2017-05-30 2:04 UTC (permalink / raw)
To: npostavs; +Cc: Vincent Lefevre, Alex, 23007
> Sorry for not being clear, but that's not what I meant:
> `overriding-terminal-local-map' must be bound for the `key-binding'
> call, and not for the `call-interactively' binding call. See Alex's
> explanation in message #8 and its attached patch.
My bad. Sorry for the noise.
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#23007: 24.5; buggy interactive search with middle click
2017-05-29 23:56 ` npostavs
2017-05-30 0:41 ` Drew Adams
@ 2017-05-30 2:47 ` Alex
2017-05-30 4:44 ` Drew Adams
2017-05-30 11:47 ` npostavs
1 sibling, 2 replies; 12+ messages in thread
From: Alex @ 2017-05-30 2:47 UTC (permalink / raw)
To: npostavs; +Cc: Vincent Lefevre, 23007
[-- Attachment #1: Type: text/plain, Size: 826 bytes --]
npostavs@users.sourceforge.net writes:
> Alex <agrambot@gmail.com> writes:
>
>> + (let ((overriding-terminal-local-map nil))
>> + (setq binding (key-binding (this-command-keys-vector) t)))
>
> IMO, it would be better style to do something like
>
> (let ((binding (let ((overriding-terminal-local-map nil))
> (key-binding (this-command-keys-vector) t))))
> ...)
That was my first idea, but at the time I thought it was better style to
use the setq version instead. :)
Your version makes the binding more obvious, though, so I updated the
patch to use it. I've attached it below.
PS: I don't immediately see a reason to check for the (mark) in the
condition. I tested by deactivating the mark explicitly, and setting
mark-even-if-inactive to nil in the window, but it still worked
correctly.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: patch v2 --]
[-- Type: text/x-diff, Size: 1551 bytes --]
From be6236ea77920a123a30b6fb3b4d52602d4d9097 Mon Sep 17 00:00:00 2001
From: Alexander Gramiak <agrambot@gmail.com>
Date: Mon, 29 May 2017 13:43:23 -0600
Subject: [PATCH] Limit scope of local overriding-terminal-local-map
The function `binding' may call isearch-done, which globally sets
overriding-terminal-local-map to nil (Bug#23007).
* lisp/isearch.el (isearch-mouse-2): Don't bind
overriding-terminal-local-map around the call to `binding'.
---
lisp/isearch.el | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/lisp/isearch.el b/lisp/isearch.el
index c34739d638..0d50c9dd9a 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -2036,14 +2036,14 @@ isearch-mouse-2
Otherwise invoke whatever the calling mouse-2 command sequence
is bound to outside of Isearch."
(interactive "e")
- (let* ((w (posn-window (event-start click)))
- (overriding-terminal-local-map nil)
- (binding (key-binding (this-command-keys-vector) t)))
+ (let ((w (posn-window (event-start click)))
+ (binding (let ((overriding-terminal-local-map 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)
+ (not (minibuffer-window-active-p w))) ; in echo area
+ (isearch-yank-x-selection)
(when (functionp binding)
- (call-interactively binding)))))
+ (call-interactively binding)))))
(declare-function xterm--pasted-text "term/xterm" ())
--
2.11.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* bug#23007: 24.5; buggy interactive search with middle click
2017-05-30 2:47 ` Alex
@ 2017-05-30 4:44 ` Drew Adams
2017-05-30 11:47 ` npostavs
1 sibling, 0 replies; 12+ messages in thread
From: Drew Adams @ 2017-05-30 4:44 UTC (permalink / raw)
To: Alex, npostavs; +Cc: Vincent Lefevre, 23007
> PS: I don't immediately see a reason to check for the (mark) in the
> condition. I tested by deactivating the mark explicitly, and setting
> mark-even-if-inactive to nil in the window, but it still worked
> correctly.
You probably don't need it. Sorry if I confused things, again.
[I use it because my code needs to work also in older Emacs versions.
So it first calls `gui-set-selection' to set the primary selection
on the region (when there is a mark). And it `deactivates-mark'
before then calling `isearch-yank-x-selection'.]
^ permalink raw reply [flat|nested] 12+ messages in thread
* bug#23007: 24.5; buggy interactive search with middle click
2017-05-30 2:47 ` Alex
2017-05-30 4:44 ` Drew Adams
@ 2017-05-30 11:47 ` npostavs
2017-06-01 22:09 ` npostavs
1 sibling, 1 reply; 12+ messages in thread
From: npostavs @ 2017-05-30 11:47 UTC (permalink / raw)
To: Alex; +Cc: Vincent Lefevre, 23007
Alex <agrambot@gmail.com> writes:
> npostavs@users.sourceforge.net writes:
>
>> Alex <agrambot@gmail.com> writes:
>>
>>> + (let ((overriding-terminal-local-map nil))
>>> + (setq binding (key-binding (this-command-keys-vector) t)))
>>
>> IMO, it would be better style to do something like
>>
>> (let ((binding (let ((overriding-terminal-local-map nil))
>> (key-binding (this-command-keys-vector) t))))
>> ...)
>
> That was my first idea, but at the time I thought it was better style to
> use the setq version instead. :)
Hah, well it is somewhat a question of personal opinion, but generally I
try to avoid setq, if it's not too much trouble.
> Your version makes the binding more obvious, though, so I updated the
> patch to use it. I've attached it below.
Ok, I'll push to master in a couple of days.
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2017-06-01 22:09 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-14 3:10 bug#23007: 24.5; buggy interactive search with middle click Vincent Lefevre
2017-05-29 19:56 ` Alex
2017-05-29 23:56 ` npostavs
2017-05-30 0:41 ` Drew Adams
2017-05-30 0:53 ` npostavs
2017-05-30 1:07 ` Drew Adams
2017-05-30 1:28 ` npostavs
2017-05-30 2:04 ` Drew Adams
2017-05-30 2:47 ` Alex
2017-05-30 4:44 ` Drew Adams
2017-05-30 11:47 ` npostavs
2017-06-01 22:09 ` npostavs
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).