Subject: 25.0.92; xterm-mouse-mode should not assume UTF-8 coordinates

From: Philipp Stephani <[email-masked]>
Date: Mon, 14 Mar 2016 13:56:41 +0100

`xterm-mouse-mode' sends \e[?1005h to enable UTF-8 mouse coordinates,
but it never checks that the terminal actually supports that.  Then
`xterm-mouse--read-utf8-char' reads an UTF-8 sequence without checking
that the terminal actually sent one.  On terminals that don't support
UTF-8 coordinates (such as Chromium's hterm) this leads to garbage if
any mouse coordinate is larger than 127.  For example, when clicking in
the right part of the terminal in hterm, the menu opens and the
following is shown in lossage:

   ESC [ M SPC \237 F ESC [ M # \237 F [tmm-menubar-mouse]

Instead, this should have been interpreted as two events with
single-byte mouse coordinates.

I'd suggest the following (and will happily provide patches if
accepted):

- Don't enable UTF-8 coordinates at all.  It is too hard to figure out
  whether they are enabled.  Rather, err on the safe side and only use
  single-byte coordinates.  (The superior SGR mode, which doesn't suffer
  from this problem, should remain enabled.)

- In `xterm-mouse--read-number-from-terminal', specify a very short
  timeout.  The terminal will always write the entire escape sequence as
  a unit, so waiting only increases the chance to accidentially read
  unrelated events.

- As an optimization, provide a `read-byte' function written in C that
  reads a single byte without taking the current terminal encoding into
  account.

In GNU Emacs 25.0.92.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.10.8)
 of 2016-03-14 built on REDACTED
Repository revision: 80ec484ac83e6965a843dabf766ade057ee1bc6a
Windowing system distributor 'The X.Org Foundation', version 11.0.11501000
System Description:	Ubuntu 14.04 LTS

Configured features:
XPM JPEG TIFF GIF PNG RSVG SOUND GPM DBUS GCONF GSETTINGS NOTIFY ACL
LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB
TOOLKIT_SCROLL_BARS GTK3 X11

Important settings:
  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
  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

Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message dired format-spec rfc822 mml
mml-sec epg epg-config gnus-util mm-decode mm-bodies mm-encode
mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047
rfc2045 ietf-drums mm-util help-fns help-mode easymenu cl-loaddefs pcase
cl-lib mail-prsvr mail-utils time-date mule-util tooltip eldoc electric
uniquify ediff-hook vc-hooks lisp-float-type mwheel x-win
term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe
tabulated-list newcomment elisp-mode lisp-mode prog-mode register page
menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock font-lock
syntax facemenu font-core frame 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 charscript case-table epa-hook jka-cmpr-hook help
simple abbrev minibuffer 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
dbusbind inotify dynamic-setting system-font-setting font-render-setting
move-toolbar gtk x-toolkit x multi-tty make-network-process emacs)

Memory information:
((conses 16 88738 7446)
 (symbols 48 19932 0)
 (miscs 40 463 186)
 (strings 32 14918 4643)
 (string-bytes 1 445677)
 (vectors 16 12226)
 (vector-slots 8 442799 4664)
 (floats 8 164 18)
 (intervals 56 206 0)
 (buffers 976 12)
 (heap 1024 30327 1014))

-- 
Google Germany GmbH
Erika-Mann-Straße 33
80636 München

Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Geschäftsführer: Matthew Scott Sucherman, Paul Terence Manicle

Diese E-Mail ist vertraulich.  Wenn Sie nicht der richtige Adressat sind,
leiten Sie diese bitte nicht weiter, informieren Sie den Absender und löschen
Sie die E-Mail und alle Anhänge.  Vielen Dank.

This e-mail is confidential.  If you are not the right addressee please do not
forward it, please inform the sender, and please erase this e-mail including
any attachments.  Thanks.