diff --git a/packages/cli/src/ui/components/shared/text-buffer.test.ts b/packages/cli/src/ui/components/shared/text-buffer.test.ts index 704666d1..da4a3cd7 100644 --- a/packages/cli/src/ui/components/shared/text-buffer.test.ts +++ b/packages/cli/src/ui/components/shared/text-buffer.test.ts @@ -508,6 +508,12 @@ describe('useTextBuffer', () => { act(() => result.current.handleInput(textWithAnsi, {})); expect(getBufferState(result).text).toBe('Hello World'); }); + + it('should handle VSCode terminal Shift+Enter as newline', () => { + const { result } = renderHook(() => useTextBuffer({ viewport })); + act(() => result.current.handleInput('\r', {})); // Simulates Shift+Enter in VSCode terminal + expect(getBufferState(result).lines).toEqual(['', '']); + }); }); // More tests would be needed for: diff --git a/packages/cli/src/ui/components/shared/text-buffer.ts b/packages/cli/src/ui/components/shared/text-buffer.ts index a8b8cef3..789a909a 100644 --- a/packages/cli/src/ui/components/shared/text-buffer.ts +++ b/packages/cli/src/ui/components/shared/text-buffer.ts @@ -1151,7 +1151,13 @@ export function useTextBuffer({ if (key['escape']) return false; - if (key['return'] || input === '\r' || input === '\n') newline(); + if ( + key['return'] || + input === '\r' || + input === '\n' || + input === '\\\r' // VSCode terminal represents shift + enter this way + ) + newline(); else if (key['leftArrow'] && !key['meta'] && !key['ctrl'] && !key['alt']) move('left'); else if (key['ctrl'] && input === 'b') move('left');