Subject: bug#24420: 25.1.50; Work around terminal differences for bracketed-paste/mouse-2

From: Robert Cochran <[email-masked]>
Date: Wed, 14 Sep 2016 11:36:57 -0700

Philipp Stephani <[email-masked]> writes:

> There are several terminals that announce themselves as XTerm and
> partially implement the XTerm control sequences
> (http://invisible-island.net/xterm/ctlseqs/ctlseqs.html), but have some
> slightly different behavior.

That sounds like breakage waiting to happen. Maybe I'm not entirely
familiar with how things are done in terminal-emulator-land, but why
would you declare yourself as an XTerm if you only partially implement
or differ from the real thing? _That_ sounds like the bug to me. Don't
claim to be something you're not. When a program *still* has to account
for differences in terminals after getting a terminal descriptor, then
IMO you've lost the whole point of term{cap,info}.

How does one get new entries into the database (and curses) nowadays
anyhow? Maybe part of the problem here is that people piggy-back off of
xterm's descriptor because they don't have their own entry... Also, how
do you communicate the advanced features (like mouse support)? Is it
simply that it's there if a terminal claims to be an xterm? Or is there
a real query method for those things?

> I've tried out XTerm, HTerm, and gnome-terminal, and found the
> following behavior differences:
>
> - XTerm sends xterm-paste (ESC [ 200~ ... ESC [ 201~) if
>   xterm-mouse-mode is disabled.  If xterm-mouse-mode is enabled, it
>   sends down-mouse-2 + up-mouse-2 using SGR coordinates (ESC [<1;x;yM
>   ESC [<1;x;ym), which gets translated to mouse-yank-primary.
>
> - Gnome Terminal sends xterm-paste if xterm-mouse-mode is disabled.  If
>   xterm-mouse-mode is enabled, it only sends down-mouse-2 using SGR
>   coordinates, which is ignored by Emacs.
>
> - HTerm doesn't use bracketed paste mode if xterm-mouse-mode is disabled
>   (i.e. pasted text gets inserted using individual
>   self-insert-commands).  If xterm-mouse-mode is enabled, it uses both
>   (!) down-mouse-2 + down-mouse-up (using basic coordinates) and then a
>   bracketed paste.
>
> The HTerm and Gnome-Terminal behaviors are probably bugs, and I'll try
> to get them fixed.  However, maybe we want to work around these issues
> on the Emacs side, e.g. by not requiring an up-mouse-2 if
> xterm-mouse-mode is enabled.

I could go either way on this one... Emacs maybe ought not to be so
choosy about what it gets from a control character standpoint, but how
relatively difficuly would it be to fix the emulators to do both up and
down? That way both flavors of program are satisfied: the ones looking
for down-only get their event, and those looking for both get both.

-- 
~Robert Cochran

GPG Fingerprint - E778 2DD4 FEA6 6A68 6F26  AD2D E5C3 EB36 4886 8871