Subject: 27.1; Clicking on grep-mode find-abbreviate ellipsis yields user error

From: David Landell <[email-masked]>
Date: Sun, 04 Oct 2020 15:39:45 +0200

Hi,

Clicking on the find-abbreviate ellipsis in a grep-mode buffer
while focus is on another emacs window invokes the
grep-find-toggle-abbreviation on the buffer in the focused window
instead of in the clicked window.

The common manifestation of this problem would be a user error because the
abbreviated-command property can not be found. More interesting results
can be achieved if the focused window contains another grep-mode buffer
in which case the ellipsis will be expanded in the focused window
instead of the clicked.

Attaching a patch the invokes mouse-select-window before toggling the
abbreviation.

Best regards,
David Landell

>From e5d35f544b91a66553e0d86c2f3d9e29978bc700 Mon Sep 17 00:00:00 2001
From: David Landell <[email-masked]>
Date: Sun, 4 Oct 2020 15:04:19 +0200
Subject: [PATCH] Grep: Ensure window is selected when clicking on
 find-abbreviate ellipsis

Without this fix, clicking on the abbreviate ellipsis when focus is on
another window invokes grep-find-toggle-abbreviation in the focused
window instead of the clicked one.

* lisp/progmodes/grep.el (grep-find-abbreviate-properties):
Invoke mouse-select-window before toggling abbrevation.
---
 lisp/progmodes/grep.el | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index 279eb4d54b..c8c7dfa214 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -455,7 +455,11 @@ grep-find-abbreviate-properties
   (let ((ellipsis (if (char-displayable-p ?…) "[…]" "[...]"))
         (map (make-sparse-keymap)))
     (define-key map [down-mouse-2] 'mouse-set-point)
-    (define-key map [mouse-2] 'grep-find-toggle-abbreviation)
+    (define-key map [mouse-2]
+      (lambda (click)
+        (interactive "e")
+        (mouse-select-window click)
+        (grep-find-toggle-abbreviation)))
     (define-key map "\C-m" 'grep-find-toggle-abbreviation)
     `(face nil display ,ellipsis mouse-face highlight
       help-echo "RET, mouse-2: show unabbreviated command"
-- 
2.17.1

In GNU Emacs 27.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.30, cairo version 1.15.10)
 of 2020-09-19 built on lgw01-amd64-054
Windowing system distributor 'The X.Org Foundation', version 11.0.11906000
System Description: Linux Mint 19

Recent messages:
assignment to free variable ‘grep-find-abbreviate-properties’
user-error: No further redo information
Undo branch point! [2 times]
Saving file /home/david/code/emacs/.git/COMMIT_EDITMSG...
Wrote /home/david/code/emacs/.git/COMMIT_EDITMSG
yascroll: (wrong-number-of-arguments (left-width right-width outside-margins) 4)
yascroll-bar-mode disabled
Saving file /home/david/code/emacs/.git/COMMIT_EDITMSG...
Wrote /home/david/code/emacs/.git/COMMIT_EDITMSG
Git<4> finished

Configured using:
 'configure --build=x86_64-linux-gnu --prefix=/usr
 '--includedir=${prefix}/include' '--mandir=${prefix}/share/man'
 '--infodir=${prefix}/share/info' --sysconfdir=/etc --localstatedir=/var
 --disable-silent-rules '--libdir=${prefix}/lib/x86_64-linux-gnu'
 '--libexecdir=${prefix}/lib/x86_64-linux-gnu' --disable-maintainer-mode
 --disable-dependency-tracking --prefix=/usr --sharedstatedir=/var/lib
 --libexecdir=/usr/lib --localstatedir=/var/lib
 --infodir=/usr/share/info --mandir=/usr/share/man
 --enable-locallisppath=/etc/emacs:/usr/local/share/emacs/27.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/27.1/site-lisp:/usr/share/emacs/site-lisp
 --program-suffix=27 --with-modules --with-file-notification=inotify
 --with-mailutils --with-harfbuzz --with-json --with-x=yes
 --with-x-toolkit=gtk3 --with-lcms2 --with-cairo --with-xpm=yes
 --with-gif=yes --with-gnutls=yes --with-jpeg=yes --with-png=yes
 --with-tiff=yes --with-xwidgets 'CFLAGS=-g -O2
 -fdebug-prefix-map=/build/emacs27-YwD3ZV/emacs27-27.1~1.git86d8d76aa3=. -fstack-protector-strong
 -Wformat -Werror=format-security -no-pie' 'CPPFLAGS=-Wdate-time
 -D_FORTIFY_SOURCE=2' 'LDFLAGS=-Wl,-Bsymbolic-functions -Wl,-z,relro
 -no-pie''

Configured features:
XPM JPEG TIFF GIF PNG RSVG CAIRO SOUND GPM DBUS GSETTINGS GLIB NOTIFY
INOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE HARFBUZZ M17N_FLT LIBOTF
ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM MODULES THREADS XWIDGETS
LIBSYSTEMD JSON PDUMPER LCMS2 GMP

Important settings:
  value of $EMACSLOADPATH: /home/david/programming/elisp/rg.el/:/home/david/programming/elisp/rg.el/.cask/27.1/elpa/wgrep-20200217.1030:/home/david/programming/elisp/rg.el/.cask/27.1/elpa/transient-20200819.1133:/home/david/programming/elisp/rg.el/.cask/27.1/elpa/ox-rst-20190920.949:/home/david/programming/elisp/rg.el/.cask/27.1/elpa/undercover-20191122.2126:/home/david/programming/elisp/rg.el/.cask/27.1/elpa/dash-20200803.1520:/home/david/programming/elisp/rg.el/.cask/27.1/elpa/shut-up-20180628.1830:/home/david/programming/elisp/rg.el/.cask/27.1/elpa/s-20180406.808:/home/david/programming/elisp/rg.el/.cask/27.1/elpa/package-lint-20200816.24:/home/david/programming/elisp/rg.el/.cask/27.1/elpa/flycheck-20200820.1403:/home/david/programming/elisp/rg.el/.cask/27.1/elpa/pkg-info-20150517.1143:/home/david/programming/elisp/rg.el/.cask/27.1/elpa/epl-20180205.2049:/home/david/programming/elisp/rg.el/.cask/27.1/elpa/find-file-in-project-20200227.1204:/home/david/programming/elisp/rg.el/.cask/27.1/elpa/ivy-20200826.955:/home/david/programming/elisp/rg.el/.cask/27.1/elpa/ert-runner-20200704.1048:/home/david/programming/elisp/rg.el/.cask/27.1/elpa/f-20191110.1357:/home/david/programming/elisp/rg.el/.cask/27.1/elpa/commander-20140120.1852:/home/david/programming/elisp/rg.el/.cask/27.1/elpa/ansi-20200611.944:/usr/share/emacs/27.1/lisp:/usr/share/emacs/27.1/lisp/vc:/usr/share/emacs/27.1/lisp/url:/usr/share/emacs/27.1/lisp/textmodes:/usr/share/emacs/27.1/lisp/progmodes:/usr/share/emacs/27.1/lisp/play:/usr/share/emacs/27.1/lisp/org:/usr/share/emacs/27.1/lisp/nxml:/usr/share/emacs/27.1/lisp/net:/usr/share/emacs/27.1/lisp/mh-e:/usr/share/emacs/27.1/lisp/mail:/usr/share/emacs/27.1/lisp/leim:/usr/share/emacs/27.1/lisp/language:/usr/share/emacs/27.1/lisp/international:/usr/share/emacs/27.1/lisp/image:/usr/share/emacs/27.1/lisp/gnus:/usr/share/emacs/27.1/lisp/eshell:/usr/share/emacs/27.1/lisp/erc:/usr/share/emacs/27.1/lisp/emulation:/usr/share/emacs/27.1/lisp/emacs-lisp:/usr/share/emacs/27.1/lisp/cedet:/usr/share/emacs/27.1/lisp/calendar:/usr/share/emacs/27.1/lisp/calc:/usr/share/emacs/27.1/lisp/obsolete
  value of $LC_MONETARY: sv_SE.UTF-8
  value of $LC_NUMERIC: sv_SE.UTF-8
  value of $LC_TIME: sv_SE.UTF-8
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-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
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message rmc puny dired dired-loaddefs
rfc822 mml mml-sec password-cache epa epg epg-config gnus-util rmail
rmail-loaddefs text-property-search time-date mm-decode mm-bodies
mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail
rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils rg pcase vc
vc-dispatcher rg-info-hack advice rg-menu transient cl-extra help-mode
easymenu format-spec eieio eieio-core eieio-loaddefs rg-ibuffer
ibuf-macs rg-result derived wgrep-rg wgrep rg-history cl-seq cl-macs
subr-x rg-header ibuf-ext ibuffer ibuffer-loaddefs seq byte-opt gv
bytecomp byte-compile cconv grep compile comint ansi-color ring
cl-loaddefs cl-lib tooltip eldoc electric uniquify ediff-hook vc-hooks
lisp-float-type mwheel term/x-win x-win term/common-win x-dnd tool-bar
dnd fontset image regexp-opt fringe tabulated-list replace newcomment
text-mode elisp-mode lisp-mode prog-mode register page tab-bar menu-bar
rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock
syntax facemenu font-core term/tty-colors frame minibuffer cl-generic
cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese composite charscript charprop
case-table epa-hook jka-cmpr-hook help simple abbrev obarray
cl-preloaded 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 threads dbusbind
inotify lcms2 dynamic-setting system-font-setting font-render-setting
xwidget-internal cairo move-toolbar gtk x-toolkit x multi-tty
make-network-process emacs)

Memory information:
((conses 16 81436 6914)
 (symbols 48 9028 1)
 (strings 32 24666 2335)
 (string-bytes 1 829109)
 (vectors 16 15246)
 (vector-slots 8 190627 11660)
 (floats 8 28 26)
 (intervals 56 294 0)
 (buffers 1000 12))