summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/pages/session
diff options
context:
space:
mode:
authorShoubhit Dash <[email protected]>2026-03-24 16:46:16 +0530
committerGitHub <[email protected]>2026-03-24 11:16:16 +0000
commitfde201c286a83ff32dda9b41d61d734a4449fe70 (patch)
tree6caeb59fd098ad27c2020d4d838b4ae4a8ba2966 /packages/app/src/pages/session
parentd3debc191f116f8ed005bf0c3ddc8776546d53cd (diff)
downloadopencode-fde201c286a83ff32dda9b41d61d734a4449fe70.tar.gz
opencode-fde201c286a83ff32dda9b41d61d734a4449fe70.zip
fix(app): stop terminal autofocus on shortcuts (#18931)
Diffstat (limited to 'packages/app/src/pages/session')
-rw-r--r--packages/app/src/pages/session/helpers.test.ts21
-rw-r--r--packages/app/src/pages/session/helpers.ts7
2 files changed, 28 insertions, 0 deletions
diff --git a/packages/app/src/pages/session/helpers.test.ts b/packages/app/src/pages/session/helpers.test.ts
index 047946fc1..95f7cd384 100644
--- a/packages/app/src/pages/session/helpers.test.ts
+++ b/packages/app/src/pages/session/helpers.test.ts
@@ -7,6 +7,7 @@ import {
createSessionTabs,
focusTerminalById,
getTabReorderIndex,
+ shouldFocusTerminalOnKeyDown,
} from "./helpers"
describe("createOpenReviewFile", () => {
@@ -86,6 +87,26 @@ describe("focusTerminalById", () => {
})
})
+describe("shouldFocusTerminalOnKeyDown", () => {
+ test("skips pure modifier keys", () => {
+ expect(shouldFocusTerminalOnKeyDown(new KeyboardEvent("keydown", { key: "Meta", metaKey: true }))).toBe(false)
+ expect(shouldFocusTerminalOnKeyDown(new KeyboardEvent("keydown", { key: "Control", ctrlKey: true }))).toBe(false)
+ expect(shouldFocusTerminalOnKeyDown(new KeyboardEvent("keydown", { key: "Alt", altKey: true }))).toBe(false)
+ expect(shouldFocusTerminalOnKeyDown(new KeyboardEvent("keydown", { key: "Shift", shiftKey: true }))).toBe(false)
+ })
+
+ test("skips shortcut key combos", () => {
+ expect(shouldFocusTerminalOnKeyDown(new KeyboardEvent("keydown", { key: "c", metaKey: true }))).toBe(false)
+ expect(shouldFocusTerminalOnKeyDown(new KeyboardEvent("keydown", { key: "c", ctrlKey: true }))).toBe(false)
+ expect(shouldFocusTerminalOnKeyDown(new KeyboardEvent("keydown", { key: "ArrowLeft", altKey: true }))).toBe(false)
+ })
+
+ test("keeps plain typing focused on terminal", () => {
+ expect(shouldFocusTerminalOnKeyDown(new KeyboardEvent("keydown", { key: "a" }))).toBe(true)
+ expect(shouldFocusTerminalOnKeyDown(new KeyboardEvent("keydown", { key: "A", shiftKey: true }))).toBe(true)
+ })
+})
+
describe("getTabReorderIndex", () => {
test("returns target index for valid drag reorder", () => {
expect(getTabReorderIndex(["a", "b", "c"], "a", "c")).toBe(2)
diff --git a/packages/app/src/pages/session/helpers.ts b/packages/app/src/pages/session/helpers.ts
index c3571f3ff..7e2c1ccf7 100644
--- a/packages/app/src/pages/session/helpers.ts
+++ b/packages/app/src/pages/session/helpers.ts
@@ -93,6 +93,13 @@ export const focusTerminalById = (id: string) => {
return true
}
+const skip = new Set(["Alt", "Control", "Meta", "Shift"])
+
+export const shouldFocusTerminalOnKeyDown = (event: Pick<KeyboardEvent, "key" | "ctrlKey" | "metaKey" | "altKey">) => {
+ if (skip.has(event.key)) return false
+ return !(event.ctrlKey || event.metaKey || event.altKey)
+}
+
export const createOpenReviewFile = (input: {
showAllFiles: () => void
tabForPath: (path: string) => string