mirror of
https://github.com/jeffvli/feishin.git
synced 2026-07-02 16:49:58 +02:00
add physical key mapping for useHotkeys to support alt keyboard languages (#2051)
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
const CODE_TO_HOTKEY_KEY: Record<string, string> = {
|
||||
ArrowDown: 'arrowdown',
|
||||
ArrowLeft: 'arrowleft',
|
||||
ArrowRight: 'arrowright',
|
||||
ArrowUp: 'arrowup',
|
||||
Backspace: 'backspace',
|
||||
Delete: 'delete',
|
||||
End: 'end',
|
||||
Enter: 'enter',
|
||||
Equal: 'equal',
|
||||
Escape: 'escape',
|
||||
Home: 'home',
|
||||
Insert: 'insert',
|
||||
Minus: 'minus',
|
||||
PageDown: 'pagedown',
|
||||
PageUp: 'pageup',
|
||||
Space: 'space',
|
||||
Tab: 'tab',
|
||||
};
|
||||
|
||||
const NUMPAD_CODE_TO_HOTKEY_KEY: Record<string, string> = {
|
||||
Add: 'numpadadd',
|
||||
Decimal: 'numpaddecimal',
|
||||
Divide: 'numpaddivide',
|
||||
Enter: 'numpadenter',
|
||||
Multiply: 'numpadmultiply',
|
||||
Subtract: 'numpadsubtract',
|
||||
};
|
||||
|
||||
export const MODIFIER_KEY_CODES = new Set([
|
||||
'AltLeft',
|
||||
'AltRight',
|
||||
'ControlLeft',
|
||||
'ControlRight',
|
||||
'MetaLeft',
|
||||
'MetaRight',
|
||||
'ShiftLeft',
|
||||
'ShiftRight',
|
||||
]);
|
||||
|
||||
export const keyboardCodeToHotkeyKey = (code: string): null | string => {
|
||||
const mapped = CODE_TO_HOTKEY_KEY[code];
|
||||
if (mapped) {
|
||||
return mapped;
|
||||
}
|
||||
|
||||
if (code.startsWith('Key')) {
|
||||
return code.slice(3).toLowerCase();
|
||||
}
|
||||
|
||||
if (code.startsWith('Digit')) {
|
||||
return code.slice(5);
|
||||
}
|
||||
|
||||
if (code.startsWith('Numpad')) {
|
||||
const suffix = code.slice(6);
|
||||
const numpadMapped = NUMPAD_CODE_TO_HOTKEY_KEY[suffix];
|
||||
if (numpadMapped) {
|
||||
return numpadMapped;
|
||||
}
|
||||
|
||||
if (/^\d$/.test(suffix)) {
|
||||
return `numpad${suffix}`;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
Reference in New Issue
Block a user