Subject: Tramp's direct-async-process makes remote IRB be missing prompt and duplicate input

From: Dmitry Gutov <[email-masked]>
Date: Sun, 19 May 2024 03:46:30 +0300

It's not 100% clear to me that the bug is in Tramp and not IRB 
(run-python doesn't seem to exhibit the same problems), but it's easy 
enough to reproduce, so maybe the cause can be identified and fixed 
without too much trouble. It's probably something like the TERM variable 
or "is a tty" detection.

Steps:

1. Install inf-ruby from somewhere (e.g. NonGNU ELPA).
2. Connect to a server that has "direct-async-process" configured and 
which also has Ruby installed. fencepost has Ruby installed, FWIW.
3. Evaluate this: (run-ruby "irb").
4. The REPL buffer will be created called *ruby* where you can send 
input and receive output, but there is no prompt there, and whatever 
input you send is first duplicated in the output. Also, the buffer 
starts with "Switch to inspect mode", which seems to be related to the 
latter (input duplication) but not the former.

If the connection is not "direct-async-process", the REPL functions 
normally (prompt visible, no input duplication).

There is also an intermediate situation (with "direct-async-process" 
enabled) that happens if you simply run 'M-x inf-ruby' - that calls 
'irb' with a certain set of arguments for maximum compatibility. The 
result is that the prompt *is* visible, but the input duplication still 
happens.

It would be great to fix the bare (run-ruby "irb"), though - because 
there are contexts where passing the aforementioned extra arguments is 
more difficult. But I'll take any improvements as a win.