diff --git a/frontend/src/renderer/components/TerminalPane.tsx b/frontend/src/renderer/components/TerminalPane.tsx index 79367e1a38..c88246b44f 100644 --- a/frontend/src/renderer/components/TerminalPane.tsx +++ b/frontend/src/renderer/components/TerminalPane.tsx @@ -193,6 +193,9 @@ function AttachedTerminal({ session, theme, daemonReady, terminalTarget, fontSiz terminal.clear(); } hadAttachmentRef.current = true; + if (handleId) { + terminal.focus(); + } return attach(terminal); }, [terminal, handleId, attach, attachSession?.id]); diff --git a/frontend/src/renderer/components/XtermTerminal.tsx b/frontend/src/renderer/components/XtermTerminal.tsx index 102a642b65..1efef5ae12 100644 --- a/frontend/src/renderer/components/XtermTerminal.tsx +++ b/frontend/src/renderer/components/XtermTerminal.tsx @@ -555,6 +555,7 @@ export function XtermTerminal(props: XtermTerminalProps) { return { dispose: () => userInputListeners.delete(listener) }; }, onResize: (listener) => term.onResize(listener), + focus: () => term.focus(), }; callbacksRef.current.onReady?.(handle); diff --git a/frontend/src/renderer/hooks/useTerminalSession.test.tsx b/frontend/src/renderer/hooks/useTerminalSession.test.tsx index aa42387622..78ea4bd017 100644 --- a/frontend/src/renderer/hooks/useTerminalSession.test.tsx +++ b/frontend/src/renderer/hooks/useTerminalSession.test.tsx @@ -110,6 +110,7 @@ function createFakeTerminal(): FakeTerminal { clear: () => { terminal.clears += 1; }, + focus: () => {}, onUserInput: (listener) => { inputListeners.add(listener); return { dispose: () => inputListeners.delete(listener) }; diff --git a/frontend/src/renderer/hooks/useTerminalSession.ts b/frontend/src/renderer/hooks/useTerminalSession.ts index 0ecfcfc216..7b76968832 100644 --- a/frontend/src/renderer/hooks/useTerminalSession.ts +++ b/frontend/src/renderer/hooks/useTerminalSession.ts @@ -35,6 +35,7 @@ export type AttachableTerminal = { clear: () => void; onUserInput: (listener: (data: string, source: TerminalUserInputSource) => void) => { dispose: () => void }; onResize: (listener: (size: { cols: number; rows: number }) => void) => { dispose: () => void }; + focus: () => void; }; export type TerminalSessionState =