From 51949f3121dd924002974a4e50f5ee34fd14c3ef Mon Sep 17 00:00:00 2001 From: Jacob Richman Date: Mon, 2 Jun 2025 14:31:35 -0700 Subject: Fix bug pasting multiline strings (#632) --- .../cli/src/ui/components/shared/text-buffer.ts | 52 +++++++++++----------- 1 file changed, 26 insertions(+), 26 deletions(-) (limited to 'packages/cli/src/ui/components/shared/text-buffer.ts') diff --git a/packages/cli/src/ui/components/shared/text-buffer.ts b/packages/cli/src/ui/components/shared/text-buffer.ts index 6864da8c..6ce1d13d 100644 --- a/packages/cli/src/ui/components/shared/text-buffer.ts +++ b/packages/cli/src/ui/components/shared/text-buffer.ts @@ -524,35 +524,33 @@ export function useTextBuffer({ const normalised = str.replace(/\r\n/g, '\n').replace(/\r/g, '\n'); const parts = normalised.split('\n'); - setLines((prevLines) => { - const newLines = [...prevLines]; - const lineContent = currentLine(cursorRow); - const before = cpSlice(lineContent, 0, cursorCol); - const after = cpSlice(lineContent, cursorCol); - - newLines[cursorRow] = before + parts[0]; - - if (parts.length > 1) { - // Adjusted condition for inserting multiple lines - const remainingParts = parts.slice(1); - const lastPartOriginal = remainingParts.pop() ?? ''; - newLines.splice(cursorRow + 1, 0, ...remainingParts); - newLines.splice( - cursorRow + parts.length - 1, - 0, - lastPartOriginal + after, - ); - setCursorRow((prev) => prev + parts.length - 1); - setCursorCol(cpLen(lastPartOriginal)); - } else { - setCursorCol(cpLen(before) + cpLen(parts[0])); - } - return newLines; - }); + const newLines = [...lines]; + const lineContent = currentLine(cursorRow); + const before = cpSlice(lineContent, 0, cursorCol); + const after = cpSlice(lineContent, cursorCol); + + newLines[cursorRow] = before + parts[0]; + + if (parts.length > 1) { + // Adjusted condition for inserting multiple lines + const remainingParts = parts.slice(1); + const lastPartOriginal = remainingParts.pop() ?? ''; + newLines.splice(cursorRow + 1, 0, ...remainingParts); + newLines.splice( + cursorRow + parts.length - 1, + 0, + lastPartOriginal + after, + ); + setCursorRow(cursorRow + parts.length - 1); + setCursorCol(cpLen(lastPartOriginal)); + } else { + setCursorCol(cpLen(before) + cpLen(parts[0])); + } + setLines(newLines); setPreferredCol(null); return true; }, - [pushUndo, cursorRow, cursorCol, currentLine, setPreferredCol], + [pushUndo, cursorRow, cursorCol, lines, currentLine, setPreferredCol], ); const insert = useCallback( @@ -1275,6 +1273,7 @@ export function useTextBuffer({ setText, insert, + insertStr, newline, backspace, del, @@ -1354,6 +1353,7 @@ export interface TextBuffer { * Insert a single character or string without newlines. */ insert: (ch: string) => void; + insertStr: (str: string) => boolean; newline: () => void; backspace: () => void; del: () => void; -- cgit v1.2.3