diff options
| author | Jacob Richman <[email protected]> | 2025-06-02 14:31:35 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-06-02 14:31:35 -0700 |
| commit | 51949f3121dd924002974a4e50f5ee34fd14c3ef (patch) | |
| tree | 0e55b92565ec962d727ffd0169fd9ce6c6990410 /packages/cli/src/ui/components/shared/text-buffer.ts | |
| parent | 8365c8f954b2732be3ec9441f8464117d4c0cb93 (diff) | |
Fix bug pasting multiline strings (#632)
Diffstat (limited to 'packages/cli/src/ui/components/shared/text-buffer.ts')
| -rw-r--r-- | packages/cli/src/ui/components/shared/text-buffer.ts | 48 |
1 files changed, 24 insertions, 24 deletions
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); + const newLines = [...lines]; + const lineContent = currentLine(cursorRow); + const before = cpSlice(lineContent, 0, cursorCol); + const after = cpSlice(lineContent, cursorCol); - newLines[cursorRow] = before + parts[0]; + 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; - }); + 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; |
