Queries for the currently activated requests for Mouse and/or Focus events via VT sequences #19489

Closed
opened 2026-01-31 06:44:53 +00:00 by claunia · 5 comments
Owner

Originally created by @ShrykeWindgrace on GitHub (Mar 6, 2023).

Description of the new feature/enhancement

I am writing a CLI app that would like to track mouse focus events, buttons events, and discard mouse move events. I can achieve that by sending to stdout the sequence \ESC[?1004h\ESC[?1003l\ESC[?1002h (source of inspiration: https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Mouse-Tracking). The app then would reset these modes by emitting appropriate sequences and the end of its lifetime: \ESC[?1004l\ESC[?1003h\ESC[?1002l.

The stdin is configured as ENABLE_VIRTUAL_TERMINAL_INPUT | ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT | ENABLE_EXTENDED_FLAGS if that's relevant.

However, the approach above presumes the initial state of requested modes - and I'd rather have (in pseudocode)

let s = getRequestedEvents(stdout);
setRequestedEvents( (MOUSE_BUTTON | FOCUS) & ~MOUSE_MOVE, stdout);
app();
setRequestedEvents(s, stdout);

I wonder if it is possible to achieve that via a VT sequence (I found only https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#query-state) or via a console API?

Cheers!

Originally created by @ShrykeWindgrace on GitHub (Mar 6, 2023). <!-- 🚨🚨🚨🚨🚨🚨🚨🚨🚨🚨 I ACKNOWLEDGE THE FOLLOWING BEFORE PROCEEDING: 1. If I delete this entire template and go my own path, the core team may close my issue without further explanation or engagement. 2. If I list multiple bugs/concerns in this one issue, the core team may close my issue without further explanation or engagement. 3. If I write an issue that has many duplicates, the core team may close my issue without further explanation or engagement (and without necessarily spending time to find the exact duplicate ID number). 4. If I leave the title incomplete when filing the issue, the core team may close my issue without further explanation or engagement. 5. If I file something completely blank in the body, the core team may close my issue without further explanation or engagement. All good? Then proceed! --> # Description of the new feature/enhancement <!-- A clear and concise description of what the problem is that the new feature would solve. Describe why and how a user would use this new functionality (if applicable). --> I am writing a CLI app that would like to track mouse focus events, buttons events, and discard mouse move events. I can achieve that by sending to `stdout` the sequence `\ESC[?1004h\ESC[?1003l\ESC[?1002h` (source of inspiration: https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Mouse-Tracking). The app then would reset these modes by emitting appropriate sequences and the end of its lifetime: `\ESC[?1004l\ESC[?1003h\ESC[?1002l`. The `stdin` is configured as `ENABLE_VIRTUAL_TERMINAL_INPUT | ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT | ENABLE_EXTENDED_FLAGS` if that's relevant. However, the approach above presumes the initial state of requested modes - and I'd rather have (in pseudocode) ``` let s = getRequestedEvents(stdout); setRequestedEvents( (MOUSE_BUTTON | FOCUS) & ~MOUSE_MOVE, stdout); app(); setRequestedEvents(s, stdout); ``` I wonder if it is possible to achieve that via a VT sequence (I found only https://learn.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#query-state) or via a console API? Cheers!
claunia added the Issue-FeatureNeeds-TriageNeeds-Tag-Fix labels 2026-01-31 06:44:54 +00:00
Author
Owner

@j4james commented on GitHub (Mar 6, 2023):

@ShrykeWindgrace You should be able to read the initial state of any of the modes with a DECRQM query. But be aware that that has only recently been added to Windows Terminal (preview version 1.17.1023).

@j4james commented on GitHub (Mar 6, 2023): @ShrykeWindgrace You should be able to read the initial state of any of the modes with a [`DECRQM`](https://vt100.net/docs/vt510-rm/DECRQM.html) query. But be aware that that has only recently been added to Windows Terminal (preview version [1.17.1023](https://github.com/microsoft/terminal/releases/tag/v1.17.1023)).
Author
Owner

@ShrykeWindgrace commented on GitHub (Mar 7, 2023):

@j4james that's great news, thank you!

Just a little bit of clarification, if you don't mind. When we query for a mode N via \ESC [ ? N $ p, the response format is \ESC [ ? N ; z y. What are possible values for z here? 0..4 or 0..2?

(I took https://terminalguide.namepad.de/seq/csi_sp__p_t_dollar/ as reference)

@ShrykeWindgrace commented on GitHub (Mar 7, 2023): @j4james that's great news, thank you! Just a little bit of clarification, if you don't mind. When we query for a mode `N` via `\ESC [ ? N $ p`, the response format is `\ESC [ ? N ; z y`. What are possible values for `z` here? `0..4` or `0..2`? (I took https://terminalguide.namepad.de/seq/csi_sp__p_t_dollar/ as reference)
Author
Owner

@j4james commented on GitHub (Mar 7, 2023):

What are possible values for z here? 0..4 or 0..2?

The possible values are 0..4. Quoting the DECRPM documentation:

0 	Mode not recognized
1 	Set
2 	Reset
3 	Permanently set
4 	Permanently reset
@j4james commented on GitHub (Mar 7, 2023): > What are possible values for `z` here? `0..4` or `0..2`? The possible values are `0..4`. Quoting the [`DECRPM`](https://vt100.net/docs/vt510-rm/DECRPM.html) documentation: ``` 0 Mode not recognized 1 Set 2 Reset 3 Permanently set 4 Permanently reset ```
Author
Owner

@j4james commented on GitHub (Mar 7, 2023):

I should also mention that the terminalguide documentation is a bit misleading. The ? isn't part of the query sequence - it's part of the mode. DEC modes and XTerm modes have a ? prefix, while ANSI modes do not. You could also potentially have modes with other prefix characters.

@j4james commented on GitHub (Mar 7, 2023): I should also mention that the terminalguide documentation is a bit misleading. The `?` isn't part of the query sequence - it's part of the mode. DEC modes and XTerm modes have a `?` prefix, while ANSI modes do not. You could also potentially have modes with other prefix characters.
Author
Owner

@ShrykeWindgrace commented on GitHub (Mar 7, 2023):

Great, thanks for the detailed answer!

@ShrykeWindgrace commented on GitHub (Mar 7, 2023): Great, thanks for the detailed answer!
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#19489