diff --git a/src/ink/components/App.tsx b/src/ink/components/App.tsx index f9d248d3..a805ce31 100644 --- a/src/ink/components/App.tsx +++ b/src/ink/components/App.tsx @@ -227,6 +227,9 @@ 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); // Enable bracketed paste mode @@ -275,6 +278,7 @@ export default class App extends PureComponent { this.props.stdout.write(DBP); stdin.setRawMode(false); stdin.removeListener('readable', this.handleReadable); + stdin.pause(); stdin.unref(); } }; diff --git a/src/utils/earlyInput.ts b/src/utils/earlyInput.ts index 734dad4f..8248ee91 100644 --- a/src/utils/earlyInput.ts +++ b/src/utils/earlyInput.ts @@ -48,6 +48,7 @@ export function startCapturingEarlyInput(): void { process.stdin.setEncoding('utf8') process.stdin.setRawMode(true) process.stdin.ref() + process.stdin.resume() readableHandler = () => { let chunk = process.stdin.read()