From 052c770395728009e6d0d6a2a3c5471af6098aaf Mon Sep 17 00:00:00 2001 From: Haileyesus Date: Mon, 23 Feb 2026 11:56:56 +0300 Subject: [PATCH] fix(shell): resize and copy fixes --- src/components/shell/hooks/useShellTerminal.ts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/components/shell/hooks/useShellTerminal.ts b/src/components/shell/hooks/useShellTerminal.ts index ce0e787..cf7afc5 100644 --- a/src/components/shell/hooks/useShellTerminal.ts +++ b/src/components/shell/hooks/useShellTerminal.ts @@ -1,4 +1,4 @@ -import { useCallback, useEffect, useState } from 'react'; +import { useCallback, useEffect, useRef, useState } from 'react'; import type { MutableRefObject, RefObject } from 'react'; import { FitAddon } from '@xterm/addon-fit'; import { WebLinksAddon } from '@xterm/addon-web-links'; @@ -51,6 +51,7 @@ export function useShellTerminal({ closeSocket, }: UseShellTerminalOptions): UseShellTerminalResult { const [isInitialized, setIsInitialized] = useState(false); + const resizeTimeoutRef = useRef(null); const selectedProjectKey = selectedProject?.fullPath || selectedProject?.path || ''; const hasSelectedProject = Boolean(selectedProject); @@ -117,7 +118,10 @@ export function useShellTerminal({ !event.altKey && event.key?.toLowerCase() === 'c' ) { + event.preventDefault(); + event.stopPropagation(); void copyAuthUrlToClipboard(activeAuthUrl); + return false; } if ( @@ -184,7 +188,11 @@ export function useShellTerminal({ }); const resizeObserver = new ResizeObserver(() => { - window.setTimeout(() => { + if (resizeTimeoutRef.current !== null) { + window.clearTimeout(resizeTimeoutRef.current); + } + + resizeTimeoutRef.current = window.setTimeout(() => { const currentFitAddon = fitAddonRef.current; const currentTerminal = terminalRef.current; if (!currentFitAddon || !currentTerminal) { @@ -204,6 +212,10 @@ export function useShellTerminal({ return () => { resizeObserver.disconnect(); + if (resizeTimeoutRef.current !== null) { + window.clearTimeout(resizeTimeoutRef.current); + resizeTimeoutRef.current = null; + } dataSubscription.dispose(); closeSocket(); disposeTerminal();