1
0
Fork 0
mirror of https://github.com/alacritty/alacritty.git synced 2024-11-18 13:55:23 -05:00

Fix Kitty protocol reporting shifted keycodes

The [kitty keyboard protocol][1] explicitly requires that the
*un-shifted* version of the pressed key is used to report the primary
code point in `CSI code-point;modifiers u` sequences.

> Note that the codepoint used is always the lower-case (or more
> technically, un-shifted) version of the key. If the user presses, for
> example, ctrl+shift+a the escape code would be CSI 97;modifiers u. It
> must not be CSI 65; modifiers u.

Alacritty's current behavior is to report the shifted version when shift
is pressed, and the un-shifted version otherwise:

```console
 # Note that you'll have to kill Alacritty after running this to get
 # control back!
$ echo -ne '\x1b[>1u'; cat
^[[97;5u^[[65;6u
```

The above was generated by pressing `CTRL`+`a` followed by
`CTRL`+`SHIFT`+`a` after running the command. Here `97` and `65` are the
codepoints for `a` and `A` respectively.

This change makes Alacritty match the protocol (and Kitty's) behavior.
With this change applied, `97` is reported for both `CTRL`+`a` and
`CTRL`+`SHIFT`+`a`.

[1]: https://sw.kovidgoyal.net/kitty/keyboard-protocol/#key-codes
This commit is contained in:
jadedpasta 2024-05-23 13:36:14 -05:00 committed by GitHub
parent 8dc27cebce
commit a89d4f50dc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 2 additions and 1 deletions

View file

@ -26,6 +26,7 @@ Notable changes to the `alacritty_terminal` crate are documented in its
had multiple actions only performed the first action had multiple actions only performed the first action
- Leaking FDs when closing windows on Unix systems - Leaking FDs when closing windows on Unix systems
- Config emitting errors for non-existent import paths - Config emitting errors for non-existent import paths
- Kitty keyboard protocol reporting shifted key codes
## 0.13.2 ## 0.13.2

View file

@ -373,7 +373,7 @@ impl SequenceBuilder {
{ {
format!("{unicode_key_code}:{alternate_key_code}") format!("{unicode_key_code}:{alternate_key_code}")
} else { } else {
alternate_key_code.to_string() unicode_key_code.to_string()
}; };
Some(SequenceBase::new(payload.into(), SequenceTerminator::Kitty)) Some(SequenceBase::new(payload.into(), SequenceTerminator::Kitty))