From ee702c3139a2fe966407379891cae0e3a148891e Mon Sep 17 00:00:00 2001
From: DeWitt Clinton <dclinton@gmail.com>
Date: Tue, 20 May 2025 10:12:07 -0700
Subject: Implement additional readline-like keybindings, including alt-left
 arrow and alt-right arrow. (#443)

This change adds keybinding support for:

  - `Ctrl+B`: Moves the cursor backward one character.
  - `Ctrl+F`: Moves the cursor forward one character.
  - `Alt+Left Arrow`: Moves the cursor backward one word.
  - `Alt+Right Arrow`: Moves the cursor forward one word.

Closes b/411469305.
---
 .../src/ui/components/shared/multiline-editor.tsx  | 25 +++-------------------
 1 file changed, 3 insertions(+), 22 deletions(-)

(limited to 'packages/cli/src/ui/components/shared/multiline-editor.tsx')

diff --git a/packages/cli/src/ui/components/shared/multiline-editor.tsx b/packages/cli/src/ui/components/shared/multiline-editor.tsx
index a89acfd1..890a9b47 100644
--- a/packages/cli/src/ui/components/shared/multiline-editor.tsx
+++ b/packages/cli/src/ui/components/shared/multiline-editor.tsx
@@ -44,12 +44,7 @@ export interface MultilineTextEditorProps {
 
   // Called on all key events to allow the caller. Returns true if the
   // event was handled and should not be passed to the editor.
-  readonly inputPreprocessor?: (
-    input: string,
-    key: Key,
-    currentText: string,
-    cursorOffset: number,
-  ) => boolean;
+  readonly inputPreprocessor?: (input: string, key: Key) => boolean;
 
   // Optional initial cursor position (character offset)
   readonly initialCursorOffset?: number;
@@ -98,14 +93,7 @@ export const MultilineTextEditor = ({
         return;
       }
 
-      // Calculate cursorOffset for inputPreprocessor
-      let charOffset = 0;
-      for (let i = 0; i < buffer.cursor[0]; i++) {
-        charOffset += buffer.lines[i].length + 1; // +1 for newline
-      }
-      charOffset += buffer.cursor[1];
-
-      if (inputPreprocessor?.(input, key, buffer.text, charOffset) === true) {
+      if (inputPreprocessor?.(input, key) === true) {
         return;
       }
 
@@ -121,14 +109,7 @@ export const MultilineTextEditor = ({
 
       const isCtrlX =
         (key.ctrl && (input === 'x' || input === '\x18')) || input === '\x18';
-      const isCtrlE =
-        (key.ctrl && (input === 'e' || input === '\x05')) ||
-        input === '\x05' ||
-        (!key.ctrl &&
-          input === 'e' &&
-          input.length === 1 &&
-          input.charCodeAt(0) === 5);
-      if (isCtrlX || isCtrlE) {
+      if (isCtrlX) {
         buffer.openInExternalEditor();
         return;
       }
-- 
cgit v1.2.3

