diff options
Diffstat (limited to 'packages/cli/src/ui/components/shared/multiline-editor.tsx')
| -rw-r--r-- | packages/cli/src/ui/components/shared/multiline-editor.tsx | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/packages/cli/src/ui/components/shared/multiline-editor.tsx b/packages/cli/src/ui/components/shared/multiline-editor.tsx index bd49efcb..e1e21fff 100644 --- a/packages/cli/src/ui/components/shared/multiline-editor.tsx +++ b/packages/cli/src/ui/components/shared/multiline-editor.tsx @@ -43,7 +43,12 @@ 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) => boolean; + readonly inputPreprocessor?: ( + input: string, + key: Key, + currentText: string, + cursorOffset: number, + ) => boolean; // Optional initial cursor position (character offset) readonly initialCursorOffset?: number; @@ -92,7 +97,24 @@ export const MultilineTextEditor = ({ return; } - if (inputPreprocessor?.(input, key) === true) { + // 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) { + return; + } + + if (key.ctrl && input === 'k') { + buffer.killLineRight(); + return; + } + + if (key.ctrl && input === 'u') { + buffer.killLineLeft(); return; } |
