Fix an issue where xkb defined hotkeys for arrows would not work (#34823)
Sergei Surovtsev
and
Conrad Irwin
created
Addresses
https://github.com/zed-industries/zed/pull/34053#issuecomment-3096447601
where custom-defined arrows would stop working in Zed.
How to reproduce:
1. Define custom keyboard layout
```bash
cd /usr/share/X11/xkb/symbols/
sudo nano mykbd
```
```
default partial alphanumeric_keys
xkb_symbols "custom" {
name[Group1]= "Custom Layout";
key <AD01> { [ q, Q, Escape, Escape ] };
key <AD02> { [ w, W, Home, Home ] };
key <AD03> { [ e, E, Up, Up ] };
key <AD04> { [ r, R, End, End ] };
key <AD05> { [ t, T, Tab, Tab ] };
key <AC01> { [ a, A, Return, Return ] };
key <AC02> { [ s, S, Left, Left ] };
key <AC03> { [ d, D, Down, Down ] };
key <AC04> { [ f, F, Right, Right ] };
key <AC05> { [ g, G, BackSpace, BackSpace ] };
// include a base layout to inherit the rest
include "us(basic)"
};
```
2. Activate custom layout with win-key as AltGr
```bash
setxkbmap mykbd -variant custom -option lv3:win_switch
```
3. Now Win-S should produce left arrow, Win-F right arrow
4. Test whether it works in Zed
Release Notes:
- linux: xkb-defined hotkeys for arrow keys should behave as expected.
---------
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Change summary
crates/gpui/src/platform/linux/platform.rs | 7 +++++++
1 file changed, 7 insertions(+)
Detailed changes
@@ -828,6 +828,13 @@ impl crate::Keystroke {
Keysym::Delete => "delete".to_owned(),
Keysym::Escape => "escape".to_owned(),
+ Keysym::Left => "left".to_owned(),
+ Keysym::Right => "right".to_owned(),
+ Keysym::Up => "up".to_owned(),
+ Keysym::Down => "down".to_owned(),
+ Keysym::Home => "home".to_owned(),
+ Keysym::End => "end".to_owned(),
+
_ => {
let name = xkb::keysym_get_name(key_sym).to_lowercase();
if key_sym.is_keypad_key() {