Subject: Re: bug#74833: 31.0.50; Copy to OS clipboard doesn't work in macOS Terminal.app with xterm-mouse-mode enabled

From: Jared Finder <[email-masked]>
Date: Fri, 27 Dec 2024 23:08:27 -0800

On 2024-12-27 00:02, Eli Zaretskii wrote:
>> Date: Thu, 26 Dec 2024 15:51:14 -0800
>> From: Jared Finder <[email-masked]>
>> Cc: Eli Zaretskii <[email-masked]>, [email-masked], 
>> [email-masked],
>>  [email-masked], [email-masked]
>> 
>> On 2024-12-23 11:43, Ship Mints wrote:
>> > On Mon, Dec 23, 2024 at 4:07 PM Eli Zaretskii <[email-masked]> wrote:
>> >>> From: Ship Mints <[email-masked]>
>> >>>
>> >>> Away from a computer, but I think this is still the same in 0.82
>> >>> these days and I assume you're using modern
>> >>> ssh.
>> >>>
>> >>> https://serverfault.com/a/819740
>> >>
>> >> OK, so does this mean we want to tell PuTTY users to configure this in
>> >> some specific way that Emacs can recognize?
>> >
>> > Still away from a computer. If you can set a variable using that method
>> > and have it pass through for you to test in lisp, then it would be a
>> > good idea to recommend. We could suggest using TERM_PROGRAM and setting
>> > it to "Putty".
>> 
>> What if we only auto-enabled xterm-mouse-mode on OSC52 compatible
>> terminals?
> 
> On OSC52 compatible terminals, or on OSC52 compatible terminals that
> define TERM to xterm-like string?  The latter sounds like a good idea
> to me, but only if support for OSC52 necessarily means xterm-mouse
> escape sequences must be supported.  Is this conjecture indeed true?

I'm proposing Emacs have a manually curated allow list for now for 
auto-enabling xterm-mouse-mode. Being OSC52 compatible gets us the copy 
/ paste issue this bug mentioned. We can add other conditions going 
forward.

>> Between $TERM and the results from the terminal escape
>> sequence "ESC [ > 0 q", Emacs can have high confidence if it is 
>> running
>> on an OSC52 compatible terminal. I checked against most of the 
>> terminals
>> mentioned at
>> https://can-i-use-terminal.github.io/features/osc52copy.html I just
>> wasn't able to test Foot (Wayland-only), hterm (Chromebook-only), 
>> mintty
>> (Cygwin-only), or xterm.js (I have no idea how to test).
> 
> How do I check this? can you show some script or Lisp or whatever you
> used to check?

Run the following lisp code in Emacs:

(progn
   (send-string-to-terminal "\e[>0q")
   (let ((str "")
         chr)
     (while (setq chr (xterm--read-event-for-query))
       (setq str (concat str (string chr))))
     str))

You should get the string "\eP>|terminal name and version\e\\". For 
example, under iTerm2 I get iTerm2 3.5.10 as the terminal name and 
version and under Kitty I get kitty(0.38.1).

   -- MJF