diff --git a/src/ink/components/App.tsx b/src/ink/components/App.tsx index a805ce31..deeb8f4c 100644 --- a/src/ink/components/App.tsx +++ b/src/ink/components/App.tsx @@ -227,11 +227,11 @@ export default class App extends PureComponent { // The buffered text is preserved for REPL.tsx via consumeEarlyInput(). stopCapturingEarlyInput(); stdin.ref(); - // Windows consoles can leave stdin paused even after raw mode is set. - // Explicitly resuming keeps `readable` events flowing cross-platform. - stdin.resume(); stdin.setRawMode(true); stdin.addListener('readable', this.handleReadable); + // Windows consoles can leave stdin paused even after raw mode is set. + // Resume after attaching the listener so input doesn't wake up early. + stdin.resume(); // Enable bracketed paste mode this.props.stdout.write(EBP); // Enable terminal focus reporting (DECSET 1004) diff --git a/src/utils/earlyInput.ts b/src/utils/earlyInput.ts index 8248ee91..300ec242 100644 --- a/src/utils/earlyInput.ts +++ b/src/utils/earlyInput.ts @@ -48,7 +48,6 @@ export function startCapturingEarlyInput(): void { process.stdin.setEncoding('utf8') process.stdin.setRawMode(true) process.stdin.ref() - process.stdin.resume() readableHandler = () => { let chunk = process.stdin.read() @@ -61,6 +60,7 @@ export function startCapturingEarlyInput(): void { } process.stdin.on('readable', readableHandler) + process.stdin.resume() } catch { // If we can't set raw mode, just silently continue without early capture isCapturing = false