From 906a00619bba67026f3b7962507366517e90b1bd Mon Sep 17 00:00:00 2001 From: sawka Date: Wed, 19 Feb 2025 15:30:58 -0800 Subject: [PATCH 1/2] fix multi-input paste --- frontend/app/view/term/termwrap.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/frontend/app/view/term/termwrap.ts b/frontend/app/view/term/termwrap.ts index 370312b090..dc22794702 100644 --- a/frontend/app/view/term/termwrap.ts +++ b/frontend/app/view/term/termwrap.ts @@ -152,6 +152,7 @@ export class TermWrap { sendDataHandler: (data: string) => void; onSearchResultsDidChange?: (result: { resultIndex: number; resultCount: number }) => void; private toDispose: TermTypes.IDisposable[] = []; + pasteActive: boolean = false; constructor( blockId: string, @@ -217,6 +218,19 @@ export class TermWrap { this.handleResize_debounced = debounce(50, this.handleResize.bind(this)); this.terminal.open(this.connectElem); this.handleResize(); + let pasteEventHandler = () => { + this.pasteActive = true; + setTimeout(() => { + this.pasteActive = false; + }, 30); + }; + pasteEventHandler = pasteEventHandler.bind(this); + this.connectElem.addEventListener("paste", pasteEventHandler, true); + this.toDispose.push({ + dispose: () => { + this.connectElem.removeEventListener("paste", pasteEventHandler); + }, + }); } async initTerminal() { @@ -263,6 +277,12 @@ export class TermWrap { if (!this.loaded) { return; } + if (this.pasteActive) { + this.pasteActive = false; + if (this.multiInputCallback) { + this.multiInputCallback(data); + } + } this.sendDataHandler?.(data); } From 378e67ce6a4d22fa7ee4ed899767a09e33890d9d Mon Sep 17 00:00:00 2001 From: sawka Date: Wed, 19 Feb 2025 15:40:43 -0800 Subject: [PATCH 2/2] correctly remove the event listener --- frontend/app/view/term/termwrap.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/app/view/term/termwrap.ts b/frontend/app/view/term/termwrap.ts index dc22794702..19e632a548 100644 --- a/frontend/app/view/term/termwrap.ts +++ b/frontend/app/view/term/termwrap.ts @@ -228,7 +228,7 @@ export class TermWrap { this.connectElem.addEventListener("paste", pasteEventHandler, true); this.toDispose.push({ dispose: () => { - this.connectElem.removeEventListener("paste", pasteEventHandler); + this.connectElem.removeEventListener("paste", pasteEventHandler, true); }, }); }