feat: every key on the keyboard is bindable - the F-row, the six-pack, Caps Lock and the numpad
The platform gave these keys no code at all, so a game's rebinding screen could not take one and nothing said why. Windows asked the active layout what they type and got nothing (w_vk_char answers 0 for a key with no character); macOS let them fall through to charactersIgnoringModifiers, which reports NSF1FunctionKey and its neighbours at 0xF704 and up - outside the 256-bit held set either way. w_keyval and ev_keyval now name them, with the same codes on both: 132-143 F1-F12, 144-149 Home / End / PageUp / PageDown / Insert / Delete, 150 Caps Lock, 152-161 the numpad digits, 162-166 its * + - . and /. The numpad's Enter is Enter. Key.F1, Key.Home, Key.Numpad0 and the rest fold at compile time, and Input.key_label names them without asking the layout - a key that types nothing is called the same thing on every layout. examples/library/input_typeless_keys.ludic covers the codes, the names, the held set and the press edge; 150 passed in ludic-dev test, 33 in selfhost-test. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
9dfa2951f6
commit
4979cc0c94
11 changed files with 21327 additions and 20462 deletions
19
changes/typeless-keys.md
Normal file
19
changes/typeless-keys.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
bump: minor
|
||||
type: feat
|
||||
**Every key on the keyboard is bindable** — the F-row, Home/End/PageUp/PageDown,
|
||||
Insert/Delete, Caps Lock and the numpad reach a game as codes 132-166.
|
||||
|
||||
Until now the platform gave them no code at all, so a game's rebinding screen could
|
||||
not take one and nothing said why. Windows asked the active layout what they type and
|
||||
got nothing back (`w_vk_char` answers 0 for a key with no character); macOS let them
|
||||
fall through to `charactersIgnoringModifiers`, which reports `NSF1FunctionKey` and its
|
||||
neighbours at 0xF704 and up - outside the 256-bit held set either way.
|
||||
|
||||
- **The codes are the same on both platforms**: 132-143 are F1-F12, 144-149 are Home,
|
||||
End, PageUp, PageDown, Insert and Delete, 150 is Caps Lock, 152-161 are the numpad
|
||||
digits and 162-166 its `*`, `+`, `-`, `.` and `/`. The numpad's Enter is Enter.
|
||||
- **`Key.F1`, `Key.Home`, `Key.Numpad0`** and the rest fold at compile time like the
|
||||
other named keys.
|
||||
- **`Input.key_label`** names them - "F1", "Home", "CapsLock", "Num 0", "Num /" - and
|
||||
does *not* ask the layout, because a key that types nothing is called the same thing
|
||||
on every layout.
|
||||
Loading…
Add table
Add a link
Reference in a new issue