From 28f74f8591350881ff06ef3758fa29f04eacea0a Mon Sep 17 00:00:00 2001 From: James Long Date: Thu, 12 Nov 2026 10:50:11 -0600 Subject: [PATCH] fix(tui): copy the paste inside the prompt selection (#63275) --- packages/tui/src/component/prompt/index.tsx | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/tui/src/component/prompt/index.tsx b/packages/tui/src/component/prompt/index.tsx index 075f037dcc5..7072853b537 100644 --- a/packages/tui/src/component/prompt/index.tsx +++ b/packages/tui/src/component/prompt/index.tsx @@ -1822,7 +1822,18 @@ export function Prompt(props: PromptProps) { ref={(r: TextareaRenderable) => { input = r Object.assign(r, { - getClipboardText: (text: string) => expandPastedTextPlaceholders(text, store.prompt.pasted), + getClipboardText: (text: string) => { + const range = r.getSelection() + // A selection spanning other renderables is not indexed relative to this textarea. + if (!range || text !== r.getSelectedText()) { + return expandPastedTextPlaceholders(text, store.prompt.pasted) + } + const parts = store.prompt.pasted.flatMap(({ source, text }) => { + if (source.start < range.start || source.end > range.end) return [] + return [{ start: source.start - range.start, end: source.end - range.start, text }] + }) + return expandTrackedPastedText(text, parts, renderer.widthMethod) + }, }) setInputTarget(r) if (promptPartTypeId === 0) {