mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-14 15:56:13 +03:00
42 lines
2.0 KiB
Plaintext
42 lines
2.0 KiB
Plaintext
import VTSequence from "@/components/VTSequence";
|
|
|
|
# Set Shift-Escape (XTSHIFTESCAPE)
|
|
|
|
<VTSequence sequence={["CSI", ">", "Pn", "s"]} />
|
|
|
|
Configure whether mouse reports are allowed to capture the `shift` modifier.
|
|
|
|
The parameter `n` must be an integer equal to 0 or 1. If `n` is omitted,
|
|
`n` defaults to 1. If `n` is an invalid value, this sequence does nothing.
|
|
|
|
When a terminal program requests [mouse reporting](#TODO), some mouse
|
|
reporting modes also report the modifier keys that are pressed (control, shift,
|
|
etc.). This would disable the ability for a terminal user to natively select
|
|
text if they typically select text using left-click and drag, since the
|
|
left-click event is captured by the running program.
|
|
|
|
To get around this limitation, many terminal emulators (including xterm)
|
|
use the `shift` modifier to disable mouse reporting temporarily, allowing
|
|
native text selection to work. In this scenario, however, the running
|
|
terminal program cannot detect shift-clicks because the terminal emulator
|
|
captures the event.
|
|
|
|
This sequence (`XTSHIFTESCAPE`) allows configuring this behavior. If
|
|
`n` is `0`, the terminal is allowed to override the shift key and not pass
|
|
it through to the terminal program. If `n` is `1`, the terminal program
|
|
is requesting that the shift modifier is sent using standard mouse
|
|
reporting formats.
|
|
|
|
In either case, the terminal emulator is not forced to respect this request.
|
|
For example, `xterm` has a `never` and `always` terminal configuration
|
|
to never allow terminal programs to capture shift or to always allow them,
|
|
respectively. If either of these configurations are set, `XTSHIFTESCAPE`
|
|
has zero effect.
|
|
|
|
`xterm` also has `false` and `true` terminal configurations. In the `false`
|
|
scenario, the terminal emulator will override `shift` (not allow the terminal
|
|
program to see it) _unless it is explicitly requested_ via `XTSHIFTESCAPE`.
|
|
The `true` scenario is the exact opposite: pass the shift modifier through
|
|
to the running terminal program unless the terminal program explicitly states
|
|
it doesn't need to know about it (`n = 0`).
|