From 4f6c2ee39baaab07b7b3b7975dcb00e988a3027e Mon Sep 17 00:00:00 2001 From: Cole Lashley Date: Thu, 28 Mar 2024 17:53:03 -0700 Subject: [PATCH] Other key bind bug fixes (#529) --- src/app/workspace/workspaceview.tsx | 15 +++++----- src/util/keyutil.ts | 45 ++++++++++++++++++++++++++++- 2 files changed, 52 insertions(+), 8 deletions(-) diff --git a/src/app/workspace/workspaceview.tsx b/src/app/workspace/workspaceview.tsx index 4d874f330..84915defb 100644 --- a/src/app/workspace/workspaceview.tsx +++ b/src/app/workspace/workspaceview.tsx @@ -54,33 +54,34 @@ class SessionKeybindings extends React.Component<{}, {}> { GlobalModel.onBracketCmd(1); return true; }); - keybindManager.registerKeybinding("pane", "session", "app:selectLineAbove", (waveEvent) => { + keybindManager.registerKeybinding("pane", "screen", "app:selectLineAbove", (waveEvent) => { GlobalModel.onMetaArrowUp(); return true; }); - keybindManager.registerKeybinding("pane", "session", "app:selectLineBelow", (waveEvent) => { + keybindManager.registerKeybinding("pane", "screen", "app:selectLineBelow", (waveEvent) => { GlobalModel.onMetaArrowDown(); return true; }); - keybindManager.registerKeybinding("pane", "session", "app:restartCommand", (waveEvent) => { + keybindManager.registerKeybinding("pane", "screen", "app:restartCommand", (waveEvent) => { GlobalModel.onRestartCommand(); return true; }); - keybindManager.registerKeybinding("pane", "session", "app:restartLastCommand", (waveEvent) => { + keybindManager.registerKeybinding("pane", "screen", "app:restartLastCommand", (waveEvent) => { GlobalModel.onRestartLastCommand(); return true; }); - keybindManager.registerKeybinding("pane", "session", "app:focusSelectedLine", (waveEvent) => { + keybindManager.registerKeybinding("pane", "screen", "app:focusSelectedLine", (waveEvent) => { GlobalModel.onFocusSelectedLine(); return true; }); - keybindManager.registerKeybinding("pane", "session", "app:deleteActiveLine", (waveEvent) => { + keybindManager.registerKeybinding("pane", "screen", "app:deleteActiveLine", (waveEvent) => { return GlobalModel.handleDeleteActiveLine(); }); } componentWillUnmount() { GlobalModel.keybindManager.unregisterDomain("session"); + GlobalModel.keybindManager.unregisterDomain("screen"); } render() { @@ -220,7 +221,7 @@ class WorkspaceView extends React.Component<{}, {}> { - + diff --git a/src/util/keyutil.ts b/src/util/keyutil.ts index c70f67e0b..7f0bfe69b 100644 --- a/src/util/keyutil.ts +++ b/src/util/keyutil.ts @@ -277,6 +277,49 @@ class KeybindManager { return false; } + processModalLevel(nativeEvent: any, event: WaveKeyboardEvent, keybindsArray: Array): boolean { + let curModalDomain: string = ""; + // iterate through keybinds in backwards order + let domainCallbacksToRun: Map = new Map(); + for (let index = keybindsArray.length - 1; index >= 0; index--) { + let curKeybind = keybindsArray[index]; + if (curModalDomain == "") { + curModalDomain = curKeybind.domain; + } + if (curKeybind.domain != curModalDomain) { + continue; + } + if (this.domainCallbacks.has(curKeybind.domain)) { + let curDomainCallback = this.domainCallbacks.get(curKeybind.domain); + if (curDomainCallback != null) { + domainCallbacksToRun.set(curKeybind.domain, curDomainCallback); + } + } + if (this.checkKeyPressed(event, curKeybind.keybinding)) { + if (DumpLogs) { + console.log("keybind found", curKeybind); + } + let shouldReturn = false; + let shouldRunCommand = true; + if (curKeybind.callback != null) { + shouldReturn = curKeybind.callback(event); + shouldRunCommand = false; + } + if (shouldRunCommand) { + shouldReturn = this.runSlashCommand(curKeybind); + } + if (shouldReturn) { + nativeEvent.preventDefault(); + nativeEvent.stopPropagation(); + this.runDomainCallbacks(event, domainCallbacksToRun); + return true; + } + } + } + this.runDomainCallbacks(event, domainCallbacksToRun); + return false; + } + processKeyEvent(nativeEvent: any, event: WaveKeyboardEvent): boolean { let modalLevel = this.levelMap.get("modal"); if (modalLevel.length != 0) { @@ -287,7 +330,7 @@ class KeybindManager { if (shouldReturn) { return true; } - shouldReturn = this.processLevel(nativeEvent, event, modalLevel); + shouldReturn = this.processModalLevel(nativeEvent, event, modalLevel); if (shouldReturn) { return true; }