summaryrefslogtreecommitdiff
path: root/packages/cli/src
diff options
context:
space:
mode:
authorTaylor Mullen <[email protected]>2025-05-20 23:42:40 -0700
committerN. Taylor Mullen <[email protected]>2025-05-20 23:44:53 -0700
commit7fd7c1a5394342e00977d2243b90b71fa8360c0f (patch)
tree28cdee7fbe804b2e3e53dd31e495672175fd136c /packages/cli/src
parentba7f1e1e3c8aa1214c43fefde04ad4b8583aa580 (diff)
fix(cli): Handle VSCode Shift+Enter in text buffer
- The text buffer now correctly interprets `\\\r` (produced by Shift+Enter in the VSCode terminal) as a newline character. - Added a corresponding test case to `text-buffer.test.ts`. Fixes https://buganizer.corp.google.com/issues/418505364
Diffstat (limited to 'packages/cli/src')
-rw-r--r--packages/cli/src/ui/components/shared/text-buffer.test.ts6
-rw-r--r--packages/cli/src/ui/components/shared/text-buffer.ts8
2 files changed, 13 insertions, 1 deletions
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');