diff options
| author | Shoubhit Dash <[email protected]> | 2026-03-24 16:46:16 +0530 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-03-24 11:16:16 +0000 |
| commit | fde201c286a83ff32dda9b41d61d734a4449fe70 (patch) | |
| tree | 6caeb59fd098ad27c2020d4d838b4ae4a8ba2966 /packages/app/src/pages/session | |
| parent | d3debc191f116f8ed005bf0c3ddc8776546d53cd (diff) | |
| download | opencode-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.ts | 21 | ||||
| -rw-r--r-- | packages/app/src/pages/session/helpers.ts | 7 |
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 |
