VT mouse sequences don't work when DECARM is disabled #21029

Open
opened 2026-01-31 07:31:07 +00:00 by claunia · 0 comments
Owner

Originally created by @j4james on GitHub (Dec 31, 2023).

Windows Terminal version

1.19.3172.0

Windows build number

10.0.19045.3803

Other Software

Vttest

Steps to reproduce

  1. Open a WSL shell in Windows Terminal.
  2. Run vttest.
  3. Select the Normal Mouse Tracking test (menu 11.8.5.4)
  4. Click somewhere in the terminal window.

Expected Behavior

You should see the mouse escape sequence starting with <27> [ M <32> output near the top of the page, and a 1 output wherever you've clicked.

Actual Behavior

Some of the characters in the mouse sequence are lost, so it starts with <27> <32>, and there is nothing output in the cell where you've clicked.

This is similar to the problem we had with the Device Attribute reports not working in vttest because it disables auto-repeat mode (#14208). But in this case the lost key events are coming from conpty passing the mouse sequences through TerminalInput::HandleKey, so it only affects Windows Terminal.

The fact that the mouse sequences are being treated as keypresses is already questionable, and I think that's likely the cause of #15083, but I also think HandleKey should be capable of accepting a sequence of key events with a 0 virtual key (as a form of input "passthrough"), without DECARM getting in the way.

So my proposed solution is this: before we even check for repeated keys, if we receive a key-down event, and the virtual key code is 0 or VK_PACKET (which serves a similar purpose), then we should immediately return the given UnicodeChar value as the HandleKey output.

Originally created by @j4james on GitHub (Dec 31, 2023). ### Windows Terminal version 1.19.3172.0 ### Windows build number 10.0.19045.3803 ### Other Software Vttest ### Steps to reproduce 1. Open a WSL shell in Windows Terminal. 2. Run `vttest`. 3. Select the _Normal Mouse Tracking_ test (menu 11.8.5.4) 4. Click somewhere in the terminal window. ### Expected Behavior You should see the mouse escape sequence starting with `<27> [ M <32>` output near the top of the page, and a `1` output wherever you've clicked. ### Actual Behavior Some of the characters in the mouse sequence are lost, so it starts with `<27> <32>`, and there is nothing output in the cell where you've clicked. This is similar to the problem we had with the _Device Attribute_ reports not working in vttest because it disables auto-repeat mode (#14208). But in this case the lost key events are coming from conpty passing the mouse sequences through `TerminalInput::HandleKey`, so it only affects Windows Terminal. The fact that the mouse sequences are being treated as keypresses is already questionable, and I think that's likely the cause of #15083, but I also think `HandleKey` should be capable of accepting a sequence of key events with a `0` virtual key (as a form of input "passthrough"), without `DECARM` getting in the way. So my proposed solution is this: before we even check for repeated keys, if we receive a key-down event, and the virtual key code is `0` or `VK_PACKET` (which serves a similar purpose), then we should immediately return the given `UnicodeChar` value as the `HandleKey` output.
claunia added the Help WantedProduct-ConhostIssue-BugIn-PRArea-VTNeeds-Tag-Fix labels 2026-01-31 07:31:07 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#21029