From 403b44a96cc49b1e3b0d4af90a1535e8294f93ec Mon Sep 17 00:00:00 2001 From: tsym <67378554+tsym77yoshi@users.noreply.github.com> Date: Mon, 20 May 2024 09:40:16 +0900 Subject: [PATCH] =?UTF-8?q?FIX:=20=E3=83=9B=E3=83=83=E3=83=88=E3=82=AD?= =?UTF-8?q?=E3=83=BC=E3=81=A7shift+=E6=95=B0=E5=AD=97=E3=82=92=E7=99=BB?= =?UTF-8?q?=E9=8C=B2=E6=99=82=E3=81=AE=E3=82=A8=E3=83=A9=E3=83=BC=E3=82=92?= =?UTF-8?q?=E3=81=AA=E3=81=8F=E3=81=99=20(#1964)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * FIX: ホットキーでshift+数字を登録時のエラーをなくす event.code式に書き換え .がPeriodだったりと様々な対応しきれないものがあるので対応しているもの以外は弾くようにした * Update: とりあえず既存の保存形式のままにし、-と/も認める * fix: lintエラーを修正 * Update src/plugins/hotkeyPlugin.ts Co-authored-by: Hiroshiba * Update src/plugins/hotkeyPlugin.ts Co-authored-by: Hiroshiba * Update hotkeyPlugin.ts * Apply suggestions from code review --------- Co-authored-by: Hiroshiba --- src/plugins/hotkeyPlugin.ts | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/plugins/hotkeyPlugin.ts b/src/plugins/hotkeyPlugin.ts index 8585c0628c..c187075ef7 100644 --- a/src/plugins/hotkeyPlugin.ts +++ b/src/plugins/hotkeyPlugin.ts @@ -278,10 +278,12 @@ const combinationToBindingKey = ( // MetaキーはCommandキーとして扱う // NOTE: hotkeys-jsにはWinキーが無く、Commandキーとして扱われている // NOTE: Metaキーは以前採用していたmousetrapがそうだった名残り + // NOTE: hotkeys-jsでは方向キーのarrowプレフィックスが不要 const bindingKey = combination .toLowerCase() .split(" ") .map((key) => (key === "meta" ? "command" : key)) + .map((key) => key.replace("arrow", "")) .join("+"); return bindingKey as BindingKey; }; @@ -310,15 +312,18 @@ export const eventToCombination = (event: KeyboardEvent): HotkeyCombination => { if (event.metaKey) { recordedCombination += "Meta "; } - if (event.key === " ") { - recordedCombination += "Space"; - } else { - if (["Control", "Shift", "Alt", "Meta"].includes(event.key)) { - recordedCombination = recordedCombination.slice(0, -1); - } else { - recordedCombination += - event.key.length > 1 ? event.key : event.key.toUpperCase(); - } + // event.codeからevent.key形式へと変換 + // TODO: 主要なキーも使えるようにする + const eventKey = event.code.replace(/Key|Digit|Numpad/, ""); + // 英字 数字 上下左右 Enter Space Backspace Delete Escape F1~ - /のみ認める + if ( + /^([A-Z]|\d|Arrow(Up|Down|Left|Right)|Enter|Space|Backspace|Delete|Escape|F\d+|-|\/)$/.test( + eventKey, + ) + ) { + recordedCombination += eventKey; } + // 修飾キーのみだった場合末尾がスペースになるので削除 + recordedCombination = recordedCombination.replace(/\s$/, ""); return HotkeyCombination(recordedCombination); };