feat(cli): clear input buffer on CTRL+C when not executing commands (#1729)

Co-authored-by: Scott Densmore <scottdensmore@mac.com>
This commit is contained in:
Matias 2025-07-16 00:35:58 -03:00 committed by GitHub
parent 0903421b1a
commit d622e596a1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 37 additions and 0 deletions

View File

@ -543,4 +543,30 @@ describe('InputPrompt', () => {
expect(props.buffer.newline).toHaveBeenCalled();
unmount();
});
it('should clear the buffer on Ctrl+C if it has text', async () => {
props.buffer.setText('some text to clear');
const { stdin, unmount } = render(<InputPrompt {...props} />);
await wait();
stdin.write('\x03'); // Ctrl+C character
await wait();
expect(props.buffer.setText).toHaveBeenCalledWith('');
expect(mockCompletion.resetCompletionState).toHaveBeenCalled();
expect(props.onSubmit).not.toHaveBeenCalled();
unmount();
});
it('should NOT clear the buffer on Ctrl+C if it is empty', async () => {
props.buffer.text = '';
const { stdin, unmount } = render(<InputPrompt {...props} />);
await wait();
stdin.write('\x03'); // Ctrl+C character
await wait();
expect(props.buffer.setText).not.toHaveBeenCalled();
unmount();
});
});

View File

@ -356,6 +356,16 @@ export const InputPrompt: React.FC<InputPromptProps> = ({
}
if (key.ctrl && key.name === 'e') {
buffer.move('end');
buffer.moveToOffset(cpLen(buffer.text));
return;
}
// Ctrl+C (Clear input)
if (key.ctrl && key.name === 'c') {
if (buffer.text.length > 0) {
buffer.setText('');
resetCompletionState();
return;
}
return;
}
@ -397,6 +407,7 @@ export const InputPrompt: React.FC<InputPromptProps> = ({
handleSubmitAndClear,
shellHistory,
handleClipboardImage,
resetCompletionState,
],
);