From 113573b2d2ec646f1d8b860bd3bc79f3dc9348cd Mon Sep 17 00:00:00 2001 From: Eugene Pankov Date: Wed, 25 Mar 2020 22:42:15 +0100 Subject: [PATCH] warn on multi-line paste (fixed #2131) --- .../src/api/baseTerminalTab.component.ts | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/terminus-terminal/src/api/baseTerminalTab.component.ts b/terminus-terminal/src/api/baseTerminalTab.component.ts index d77f4f9a..a646a2b0 100644 --- a/terminus-terminal/src/api/baseTerminalTab.component.ts +++ b/terminus-terminal/src/api/baseTerminalTab.component.ts @@ -291,7 +291,7 @@ export class BaseTerminalTabComponent extends BaseTabComponent implements OnInit this.frontend.write(data) } - paste (): void { + async paste (): Promise { let data = this.electron.clipboard.readText() as string if (this.config.store.terminal.bracketedPaste) { data = '\x1b[200~' + data + '\x1b[201~' @@ -301,6 +301,28 @@ export class BaseTerminalTabComponent extends BaseTabComponent implements OnInit } else { data = data.replace(/\n/g, '\r') } + + if (data.includes('\r')) { + const canTrim = !data.trim().includes('\r') + const buttons = canTrim ? ['Paste', 'Trim whitespace and paste', 'Cancel'] : ['Paste', 'Cancel'] + const result = (await this.electron.showMessageBox( + this.hostApp.getWindow(), + { + type: 'warning', + detail: data, + message: `Paste multiple lines?`, + buttons, + defaultId: 0, + cancelId: buttons.length - 1, + } + )).response + if (result === buttons.length - 1) { + return + } + if (result === 1) { + data = data.trim() + } + } this.sendInput(data) }