Tracking issueeframeeguigood first issuehelp wanted
Description
The keyboard input in egui is limited in a couple of ways:
- Lots of keys missing from
Event::Key - We don't report the
super/metamodifier key - We don't report modifier key presses (just their state)
- Physical keys not reported on the eframe web backend
KeyboardShortcutshould ignoreshiftandaltkeys for logical keys (e.g.Ctrl Plusmay require pressing shift on some keyboards). See https://github.com/emilk/egui/issues/3626 for more
How can I help?
- Look at the code for
egui::Keyand follow the instructions there for adding new keys - Investigate if we can get physical keycode on web
Requested keys
- Numpad
- Volume keys
- Curly brackets:
{and} - CapsLock (https://github.com/emilk/egui/issues/2041)
- Modifier keys
Prioir art
winit: https://docs.rs/winit/latest/winit/event/struct.KeyEvent.html- https://github.com/pyfisch/keyboard-types
Relevant issues
- https://github.com/emilk/egui/issues/3636
- https://github.com/emilk/egui/issues/3626
- https://github.com/emilk/egui/issues/3415
- https://github.com/emilk/egui/issues/3372
- https://github.com/emilk/egui/issues/3303
- https://github.com/emilk/egui/issues/3099
- https://github.com/emilk/egui/issues/3094
- https://github.com/emilk/egui/issues/2977
- https://github.com/emilk/egui/issues/2041
- https://github.com/emilk/egui/issues/4081
Physical vs Logical keys
- Partially fixed by https://github.com/emilk/egui/pull/3649 (needs web support, if even possible?)
Consider someone owning a physical QWERTY keyboard:
However, they have remapped it to use Dvorak (perhaps even repainting the text on their keyboard):
If they start hitting Caps Lock and then moving to the left, the keys they will be hitting will be
- physical (qwerty): CapsLock, A, S, D, F, …
- logical (Dvorak): CapsLock, A, O, E, U …
The logical keys makes sense for most keyboard shortcuts - if you say "Press Cmd+S to save" in your UI, the user will be looking for the logical key "S" The physical keys are mostly useful for games, where e.g. te physical WSAD on QWERTY moves a character, no matter what the users keymap is.