From ec19e508a6f09c15912e5d87a50ed184c31087ea Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Tue, 10 Aug 2021 05:26:08 -0700 Subject: [PATCH] Await xterm writes before resolving reuseTerminal Fixes #129994 --- .../workbench/contrib/tasks/browser/terminalTaskSystem.ts | 2 +- src/vs/workbench/contrib/terminal/browser/terminal.ts | 2 +- .../workbench/contrib/terminal/browser/terminalInstance.ts | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/vs/workbench/contrib/tasks/browser/terminalTaskSystem.ts b/src/vs/workbench/contrib/tasks/browser/terminalTaskSystem.ts index 90773652240..af66f24f1de 100644 --- a/src/vs/workbench/contrib/tasks/browser/terminalTaskSystem.ts +++ b/src/vs/workbench/contrib/tasks/browser/terminalTaskSystem.ts @@ -1285,7 +1285,7 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem { } terminalToReuse.terminal.scrollToBottom(); - terminalToReuse.terminal.reuseTerminal(launchConfigs); + await terminalToReuse.terminal.reuseTerminal(launchConfigs); if (task.command.presentation && task.command.presentation.clear) { terminalToReuse.terminal.clear(); diff --git a/src/vs/workbench/contrib/terminal/browser/terminal.ts b/src/vs/workbench/contrib/terminal/browser/terminal.ts index 9aca8c39208..a82a556d0c7 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminal.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminal.ts @@ -702,7 +702,7 @@ export interface ITerminalInstance { * * @param shell The new launch configuration. */ - reuseTerminal(shell: IShellLaunchConfig): void; + reuseTerminal(shell: IShellLaunchConfig): Promise; /** * Relaunches the terminal, killing it and reusing the launch config used initially. Any diff --git a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts index 7423427c9cd..af23251b1c2 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts @@ -1367,7 +1367,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { } } - reuseTerminal(shell: IShellLaunchConfig, reset: boolean = false): void { + async reuseTerminal(shell: IShellLaunchConfig, reset: boolean = false): Promise { // Unsubscribe any key listener we may have. this._pressAnyKeyToCloseListener?.dispose(); this._pressAnyKeyToCloseListener = undefined; @@ -1375,12 +1375,12 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { if (this._xterm) { if (!reset) { // Ensure new processes' output starts at start of new line - this._xterm.write('\n\x1b[G'); + await new Promise(r => this._xterm!.write('\n\x1b[G', r)); } // Print initialText if specified if (shell.initialText) { - this._xterm.writeln(shell.initialText); + await new Promise(r => this._xterm!.writeln(shell.initialText!, r)); } // Clean up waitOnExit state