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);