diff --git a/docs/docs/keybindings.mdx b/docs/docs/keybindings.mdx index 7bd2775d6..b73470d26 100644 --- a/docs/docs/keybindings.mdx +++ b/docs/docs/keybindings.mdx @@ -38,6 +38,7 @@ replace "Cmd" with "Alt" (note that "Ctrl" is "Ctrl" on both Mac, Windows, and L | | Switch tab right | | | Switch to workspace number | | | Refresh the UI | +| | Toggle terminal multi-input mode | ## File Preview Keybindings @@ -64,6 +65,7 @@ replace "Cmd" with "Alt" (note that "Ctrl" is "Ctrl" on both Mac, Windows, and L | | Reload webpage | | | Back | | | Forward | +| | Find in webpage | ## WaveAI Keybindings @@ -73,11 +75,12 @@ replace "Cmd" with "Alt" (note that "Ctrl" is "Ctrl" on both Mac, Windows, and L ## Terminal Keybindings -| Key | Function | -| ----------------------- | -------------- | -| | Copy | -| | Paste | -| | Clear Terminal | +| Key | Function | +| ----------------------- | ---------------- | +| | Copy | +| | Paste | +| | Clear Terminal | +| | Find in Terminal | ## Customizeable Systemwide Global Hotkey diff --git a/emain/emain-util.ts b/emain/emain-util.ts index c8f42ff07..4395d22af 100644 --- a/emain/emain-util.ts +++ b/emain/emain-util.ts @@ -6,11 +6,15 @@ import { getWebServerEndpoint } from "../frontend/util/endpoints"; export const WaveAppPathVarName = "WAVETERM_APP_PATH"; +// not necessarily exact, but we use this to help get us unstuck in certain cases +let lastCtrlShiftSate: boolean = false; + export function delay(ms): Promise { return new Promise((resolve) => setTimeout(resolve, ms)); } function setCtrlShift(wc: Electron.WebContents, state: boolean) { + lastCtrlShiftSate = state; wc.send("control-shift-state-update", state); } @@ -30,6 +34,11 @@ export function handleCtrlShiftState(sender: Electron.WebContents, waveEvent: Wa setCtrlShift(sender, true); } } + if (lastCtrlShiftSate) { + if (!waveEvent.control || !waveEvent.shift) { + setCtrlShift(sender, false); + } + } return; } if (waveEvent.type == "keydown") { diff --git a/frontend/app/app.tsx b/frontend/app/app.tsx index 230544282..c935dfa91 100644 --- a/frontend/app/app.tsx +++ b/frontend/app/app.tsx @@ -12,7 +12,7 @@ import { PLATFORM, removeFlashError, } from "@/store/global"; -import { appHandleKeyDown } from "@/store/keymodel"; +import { appHandleKeyDown, keyboardMouseDownHandler } from "@/store/keymodel"; import { getElemAsStr } from "@/util/focusutil"; import * as keyutil from "@/util/keyutil"; import * as util from "@/util/util"; @@ -193,9 +193,11 @@ const AppKeyHandlers = () => { useEffect(() => { const staticKeyDownHandler = keyutil.keydownWrapper(appHandleKeyDown); document.addEventListener("keydown", staticKeyDownHandler); + document.addEventListener("mousedown", keyboardMouseDownHandler); return () => { document.removeEventListener("keydown", staticKeyDownHandler); + document.removeEventListener("mousedown", keyboardMouseDownHandler); }; }, []); return null; diff --git a/frontend/app/store/keymodel.ts b/frontend/app/store/keymodel.ts index be9374e19..f2fa9911f 100644 --- a/frontend/app/store/keymodel.ts +++ b/frontend/app/store/keymodel.ts @@ -26,6 +26,12 @@ import * as jotai from "jotai"; const simpleControlShiftAtom = jotai.atom(false); const globalKeyMap = new Map boolean>(); +export function keyboardMouseDownHandler(e: MouseEvent) { + if (!e.ctrlKey || !e.shiftKey) { + unsetControlShift(); + } +} + function getFocusedBlockInStaticTab() { const tabId = globalStore.get(atoms.staticTabId); const layoutModel = getLayoutModelForTabById(tabId);