fix: show modifier keys and missing keys during shortcut rebinding
Add Tab, F1-F12, Delete, Home, End, PageUp, PageDown, Insert to the key map so they can be captured during rebinding. Show held modifier keys (Ctrl, Alt, Shift, Cmd) as live feedback matching VS Code's keydown-only approach — modifiers persist after release until the next keypress. Cancel capture when navigating away from settings.
This commit is contained in:
@@ -43,6 +43,17 @@ KEY_MAP["ArrowLeft"] = { code: "ArrowLeft" };
|
||||
KEY_MAP["ArrowRight"] = { code: "ArrowRight" };
|
||||
KEY_MAP["ArrowUp"] = { code: "ArrowUp" };
|
||||
KEY_MAP["ArrowDown"] = { code: "ArrowDown" };
|
||||
KEY_MAP["Tab"] = { code: "Tab" };
|
||||
KEY_MAP["Delete"] = { code: "Delete" };
|
||||
KEY_MAP["Home"] = { code: "Home" };
|
||||
KEY_MAP["End"] = { code: "End" };
|
||||
KEY_MAP["PageUp"] = { code: "PageUp" };
|
||||
KEY_MAP["PageDown"] = { code: "PageDown" };
|
||||
KEY_MAP["Insert"] = { code: "Insert" };
|
||||
|
||||
for (let i = 1; i <= 12; i++) {
|
||||
KEY_MAP[`F${i}`] = { code: `F${i}` };
|
||||
}
|
||||
|
||||
const CODE_TO_KEY: Record<string, string> = {};
|
||||
for (const [humanKey, mapping] of Object.entries(KEY_MAP)) {
|
||||
@@ -170,6 +181,15 @@ export function chordStringToShortcutKeys(s: string): ShortcutKey[][] {
|
||||
return s.split(" ").map(comboStringToShortcutKeys);
|
||||
}
|
||||
|
||||
export function heldModifiersFromEvent(event: KeyboardEvent): string | null {
|
||||
const parts: string[] = [];
|
||||
if (event.ctrlKey) parts.push("Ctrl");
|
||||
if (event.altKey) parts.push("Alt");
|
||||
if (event.shiftKey) parts.push("Shift");
|
||||
if (event.metaKey) parts.push("Cmd");
|
||||
return parts.length > 0 ? parts.join("+") : null;
|
||||
}
|
||||
|
||||
export function keyboardEventToComboString(event: KeyboardEvent): string | null {
|
||||
if (MODIFIER_CODES.has(event.code)) {
|
||||
return null;
|
||||
|
||||
Reference in New Issue
Block a user