Subject: bug#58608: 29.0.50; Nasty bug with pasting primary selection in term buffers

From: Phil Sainty <[email-masked]>
Date: Tue, 18 Oct 2022 23:10:27 +1300

This one has been causing me occasional pain for years, but
only rarely, and I didn't have a recipe to reproduce it until
now.  The following steps don't all need to be followed to
the letter, but hopefully demonstrate the issue well.

0. emacs -Q
1. M-x term (and run your shell; term must be in char-mode)
2. Run "ls" # or anything else to produce a decent amount of
    output.
3. Run "cat >/dev/null" # for safety
4. Using the mouse, select any small piece of text several
    lines above the bottom of the term buffer (e.g. double-
    click a word).
5. Move the mouse to the shell prompt at the end of the buffer
    and middle click to paste that selected text as input.
6. Without moving the mouse, middle click again at the same
    position.
7. Be thankful for step 3.

My impression is that the first middle-click unexpectedly
creates a new primary selection based on the current mouse
position, so the second middle-click then pastes that new
selection as input.

This has bitten me on many occasions when I wanted to repeat
the previously-pasted command as input again, and find that
I've instead asked the shell to execute a ton of unintended
commands! (which, thankfully, tend to only rarely be valid).

This bug exists in all the versions of Emacs I have installed
at present (back to 26.3), and I think this is severe enough
to fix in the emacs-28 branch as well as master.

-Phil

In GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo
  version 1.15.10, Xaw scroll bars) of 2022-10-18 built on phil-lp
Repository revision: be3d9f717dd317eafc8f511072040a5ff8c1071c
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 
11.0.12008000
System Description: Ubuntu 18.04.6 LTS

Configured using:
  'configure --prefix=/home/phil/emacs/trunk/usr/local
  --with-x-toolkit=lucid --without-sound
  '--program-transform-name=s/^ctags$/ctags_emacs/''

Configured features:
CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG JSON
LCMS2 LIBXML2 MODULES NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP THREADS
TIFF TOOLKIT_SCROLL_BARS WEBP X11 XDBE XIM XINPUT2 XPM LUCID ZLIB

Important settings:
   value of $LC_MONETARY: en_NZ.UTF-8
   value of $LC_NUMERIC: en_NZ.UTF-8
   value of $LC_TIME: en_NZ.UTF-8
   value of $LANG: en_GB.UTF-8
   value of $XMODIFIERS: @im=ibus
   locale-coding-system: utf-8

Major mode: Term

Minor modes in effect:
   minibuffer-line-mode: t
   global-edit-server-edit-mode: t
   savehist-mode: t
   magit-wip-initial-backup-mode: t
   magit-wip-before-change-mode: t
   magit-wip-after-apply-mode: t
   magit-wip-after-save-mode: t
   magit-wip-mode: t
   global-git-commit-mode: t
   magit-auto-revert-mode: t
   shell-dirtrack-mode: t
   my-contextual-help-mode: t
   global-so-long-mode: t
   display-battery-mode: t
   my-visible-bell-mode: t
   global-display-fill-column-indicator-mode: t
   display-fill-column-indicator-mode: t
   minibuffer-depth-indicate-mode: t
   which-key-mode: t
   windmove-mode: t
   winner-mode: t
   global-subword-mode: t
   display-time-mode: t
   keep-buffers-mode: t
   my-keys-local-minor-mode: t
   auto-compile-on-load-mode: t
   auto-compile-on-save-mode: t
   url-handler-mode: t
   tooltip-mode: t
   global-eldoc-mode: t
   show-paren-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
   buffer-read-only: t
   column-number-mode: t
   line-number-mode: t
   transient-mark-mode: t
   auto-composition-mode: t
   auto-encryption-mode: t
   auto-compression-mode: t

Load-path shadows:
/home/phil/.emacs.d.sandboxes/trunk/HOME/.emacs.d/el-get/scratch/el-get 
hides 
/home/phil/.emacs.d.sandboxes/trunk/HOME/.emacs.d/el-get/el-get/el-get
/home/phil/.emacs.d.sandboxes/trunk/HOME/.emacs.d/el-get/delight/delight 
hides 
/home/phil/.emacs.d.sandboxes/trunk/HOME/.emacs.d/elpa/delight-1.7/delight
/home/phil/.emacs.d.sandboxes/trunk/HOME/.emacs.d/el-get/transient/lisp/transient 
hides 
/home/phil/emacs/trunk/usr/local/share/emacs/29.0.50/lisp/transient
/home/phil/.emacs.d.sandboxes/trunk/HOME/.emacs.d/lisp/python hides 
/home/phil/emacs/trunk/usr/local/share/emacs/29.0.50/lisp/progmodes/python

Features:
(shadow sort project-local-variables ecomplete mail-extr emacsbug term
disp-table ehelp dired-aux elisp-slime-nav etags fileloop generator xref
project hl-sexp lexbind-mode idle-highlight-mode tramp-sh warnings
docker-tramp tramp-cache time-stamp tramp tramp-loaddefs trampver
tramp-integration cus-start files-x tramp-compat parse-time iso8601
ls-lisp tabify minibuffer-line edit-server my-org my-projects my-session
savehist desktop frameset my-theme zenburn-theme my-mail autoloads
my-libraries sudo my-version-control magit-wip magit-log which-func
imenu edebug debug backtrace find-func magit-diff smerge-mode diff
git-commit rx log-edit message sendmail yank-media puny rfc822 mml
mml-sec epa epg rfc6068 epg-config gnus-util text-property-search
time-date mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047
rfc2045 mm-util ietf-drums mail-prsvr mailabbrev mail-utils gmm-utils
mailheader pcvs-util add-log magit-core magit-autorevert autorevert
filenotify magit-margin magit-transient magit-process with-editor shell
pcomplete comint ansi-osc server ansi-color magit-mode transient pcase
edmacro kmacro compat compat-macs format-spec magit-git magit-section
magit-utils crm dash my-text my-programming my-python so-long
my-whitespace ws-trim my-rectangles my-utilities browse-kill-ring
my-configuration cus-edit pp cus-load wid-edit dired-details dired-x
highlight-parentheses battery delight delsel cua-base ffap
display-fill-column-indicator mb-depth which-key framemove windmove
winner ring cap-words superword subword hl-line time my-externals
.loaddefs windcycle transpose-frame simple-wiki derived sdcv-mode
noutline outline icons sauron rainbow-mode notify dbus xml
multiple-cursors mc-separate-operations rectangular-region-mode
mc-mark-pop mc-mark-more thingatpt mc-cycle-cursors mc-edit-lines
multiple-cursors-core rect mo-git-blame keep-buffers iedit fic-mode
dtrt-indent browse-at-remote vc-git diff-mode easy-mmode vc-dispatcher s
el-get cl-extra help-mode autoload loaddefs-gen radix-tree lisp-mnt cl
dired dired-loaddefs jka-compr my-local my-keybindings auto-compile
packed compat-autoloads etags-select-autoloads info
project-local-variables-autoloads advice wtf-autoloads package
browse-url url url-proxy url-privacy url-expand url-methods url-history
url-cookie generate-lisp-file url-domsuf url-util mailcap url-handlers
url-parse auth-source cl-seq eieio eieio-core cl-macs password-cache
json subr-x map byte-opt gv bytecomp byte-compile cconv url-vars
cl-loaddefs cl-lib rmc iso-transl tooltip eldoc paren electric uniquify
ediff-hook vc-hooks lisp-float-type elisp-mode 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 lisp-mode prog-mode register
page tab-bar menu-bar rfn-eshadow isearch easymenu timer select
scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors
frame minibuffer nadvice seq simple cl-generic indonesian philippine
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 emoji-zwj charscript
charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure
cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp
files window text-properties overlay sha1 md5 base64 format env
code-pages mule custom widget keymap hashtable-print-readable backquote
threads dbusbind inotify lcms2 dynamic-setting system-font-setting
font-render-setting cairo x-toolkit xinput2 x multi-tty
make-network-process emacs)

Memory information:
((conses 16 257815 38654)
  (symbols 48 24320 0)
  (strings 32 74590 14132)
  (string-bytes 1 2492927)
  (vectors 16 39953)
  (vector-slots 8 456801 46856)
  (floats 8 202 110)
  (intervals 56 886 0)
  (buffers 1000 14))