-
Notifications
You must be signed in to change notification settings - Fork 815
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Mouse movement control sequences leak to terminal at app shutdown #4418
Comments
We found the following entries in the FAQ which you may find helpful:
Feel free to close this issue if you found an answer in the FAQ. Otherwise, please give us a little time to review. This is an automated reply, generated by FAQtory |
I took a shot at diagnosing this issue, and the issue disappears if we modify the shutdown sequence of the input thread to loop a few times more to drain the mouse movement sequences out from the input descriptor: class LinuxDriver(Driver):
...
def run_input_thread(self) -> None:
...
countdown = 3
try:
with open("/tmp/textual_out", "a") as f:
while not self.exit_event.is_set() or countdown > 0:
selector_events = selector.select(0.1)
for _selector_key, mask in selector_events:
if mask & EVENT_READ:
rdd = read(fileno, 1024)
unicode_data = decode(rdd, final=self.exit_event.is_set())
for event in feed(unicode_data):
self.process_event(event)
if self.exit_event.is_set():
print(
f"Exit event set, countdown: {countdown}, data: {rdd if mask & EVENT_READ else None}",
file=f,
)
termios.tcflush(fileno, termios.TCIFLUSH)
rdd = ""
countdown -= 1
finally:
selector.close() I'm getting the following output in
so it looks like new mouse movement control sequences may appear on the linux driver's terminal file descriptor, even though the control sequence for disabling mouse support is already sent by |
This issue does seem specific to certain terminal emulators, at least from running quick tests with:
|
FWIW I couldn't reproduce it with kitty on macOS. |
@davep How about with macOS Terminal (just for confirmation as not one I'm able to check)? |
Didn't test with anything else; I'll try and remember to have a look the next time I'm at a machine. |
I've also now tested with Xfce Terminal which shows the same issue, which makes me wonder if perhaps specific to VTE-based terminal emulators? (Though this wouldn't explain issues with macOS terminals.) |
for more macOS terminal emulators: |
I can't seem to reproduce it at all with the latest Textual (on macOS). |
Actually, I did manage to reproduce it after a few attempt on Hyper. This should help me track it down! |
Happens the same to me on Windows PowerShell |
There were some recent changes to mouse handling and I think this issue is fixed (I can no longer reproduce it). Feel free to re-open if anyone can reproduce with 0.69.0 or later. |
Don't forget to star the repository! Follow @textualizeio for Textual updates. |
I can still reproduce this with |
Has anyone managed to reproduce this apart from the EDIT: Never mind, after a number of attempts I was also able to reproduce with |
I have noticed something in terminator after many attempts to reproduce this, but I'm not sure really how useful this is to diagnose the issue. When the mouse escape sequences leak after app shutdown, I noticed in terminator that a light-bulb icon is briefly displayed in the title bar. You can see this in the original screen recording. This icon is apparently the default setting in terminator for the terminal bell. Sorry for the noise if this was already obvious. I did try investigating exactly what would trigger the terminal bell without much success. |
I can reproduce this fairly easily with the following app:
This issue may be correlated with the amount of "stuff" that needs to happen as you move the mouse around, such as changing button highlights. I'm attaching a video where this reproduces for me three times in a row in Terminator; all I'm doing is wiggling the mouse while I press the control-seq-leak-2-2024-06-26_20.00.51.mp4 |
Sorry yes I edited my message after I later managed to reproduce this with the Textual demo (
That's my suspicion too, but using the demo or even a blank app without any widgets, I was very, very occasionally still able to reproduce by jiggling the mouse in empty space. This issue does seem specific to certain terminal emulators, but I'm struggling to find any info on why mouse handling might be different. |
Don't forget to star the repository! Follow @textualizeio for Textual updates. |
If the user is moving the mouse while the textual application exits, terminal control sequences from the mouse movement may leak from the application and get into the terminal.
This happens on all terminals I have tested: gnome-terminal and Terminator on Ubuntu Linux, and the Terminal on macOS. The issue can be easily reproduced using the examples from the textual repository. Here's a reproduction with
five_by_five.py
, where I pressq
on the keyboard while moving the mouse around the terminal:control-seq-leak-2024-04-15_10.56.24.mp4
Please find the diagnostics output below:
textual diagnose output
The text was updated successfully, but these errors were encountered: