From 8e9f71b7a34953fca0fd77745d448198556f35f0 Mon Sep 17 00:00:00 2001 From: Keith Lyons Date: Thu, 23 Oct 2025 00:40:29 -0400 Subject: [PATCH] fix(ui): resolve race condition in double-escape handler (#8913) Co-authored-by: Megha Bansal --- packages/cli/src/ui/components/InputPrompt.tsx | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/cli/src/ui/components/InputPrompt.tsx b/packages/cli/src/ui/components/InputPrompt.tsx index 10cf694b7e..d7ffcf8729 100644 --- a/packages/cli/src/ui/components/InputPrompt.tsx +++ b/packages/cli/src/ui/components/InputPrompt.tsx @@ -120,7 +120,7 @@ export const InputPrompt: React.FC = ({ const isShellFocused = useShellFocusState(); const { mainAreaWidth } = useUIState(); const [justNavigatedHistory, setJustNavigatedHistory] = useState(false); - const [escPressCount, setEscPressCount] = useState(0); + const escPressCount = useRef(0); const [showEscapePrompt, setShowEscapePrompt] = useState(false); const escapeTimerRef = useRef(null); const [recentUnsafePasteTime, setRecentUnsafePasteTime] = useState< @@ -184,7 +184,7 @@ export const InputPrompt: React.FC = ({ clearTimeout(escapeTimerRef.current); escapeTimerRef.current = null; } - setEscPressCount(0); + escPressCount.current = 0; setShowEscapePrompt(false); }, []); @@ -401,7 +401,7 @@ export const InputPrompt: React.FC = ({ // Reset ESC count and hide prompt on any non-ESC key if (key.name !== 'escape') { - if (escPressCount > 0 || showEscapePrompt) { + if (escPressCount.current > 0 || showEscapePrompt) { resetEscapeState(); } } @@ -462,11 +462,11 @@ export const InputPrompt: React.FC = ({ } // Handle double ESC for clearing input - if (escPressCount === 0) { + if (escPressCount.current === 0) { if (buffer.text === '') { return; } - setEscPressCount(1); + escPressCount.current = 1; setShowEscapePrompt(true); if (escapeTimerRef.current) { clearTimeout(escapeTimerRef.current); @@ -774,7 +774,6 @@ export const InputPrompt: React.FC = ({ reverseSearchCompletion, handleClipboardImage, resetCompletionState, - escPressCount, showEscapePrompt, resetEscapeState, vimHandleInput,