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

From: Philipp Stephani <[email-masked]>
Date: Wed, 14 Sep 2016 20:05:21 +0000

Robert Cochran <[email-masked]> schrieb am Mi., 14. Sep. 2016
um 20:37 Uhr:

> 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?

For the same reason that every web browser on the planet declares itself as
"Mozilla". Identification strings simply don't work.

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?
>

That's not really possible. Basically Emacs tries to enable all features
and assumes the terminal emulator simply ignores escape sequences it
doesn't understand.

>
> > 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.
>
>
Fixing gnome-terminal would be preferred, yes, but old (unfixed) versions
tend to stick around for years.
With HTerm it's a bit different: arguably HTerm's behavior is better than
XTerm's, because with XTerm you can't paste any more once you enable
extended mouse mode.