From 8b5715422d5aa27a83f22d439260642b49b7734f Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Mon, 14 Jun 2021 14:36:20 -0700 Subject: [PATCH] Support detaching terminal processes manually Part of #118276 --- .../contrib/terminal/browser/terminalActions.ts | 13 +++++++++++++ .../contrib/terminal/browser/terminalInstance.ts | 1 + .../terminal/browser/terminalProcessManager.ts | 1 + .../workbench/contrib/terminal/common/terminal.ts | 3 ++- 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalActions.ts b/src/vs/workbench/contrib/terminal/browser/terminalActions.ts index 8982c2ae0fb..26f8053d7d8 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalActions.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalActions.ts @@ -846,6 +846,19 @@ export function registerTerminalActions() { accessor.get(ITerminalService).hideFindWidget(); } }); + registerAction2(class extends Action2 { + constructor() { + super({ + id: TerminalCommandId.DetachProcess, + title: { value: localize('workbench.action.terminal.detachProcess', "Detach Process"), original: 'Detach Process' }, + f1: true, + category + }); + } + async run(accessor: ServicesAccessor) { + accessor.get(ITerminalService).doWithActiveInstance(instance => instance.detachFromProcess()); + } + }); registerAction2(class extends Action2 { constructor() { super({ diff --git a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts index a80f5e4e61f..279f805f31d 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts @@ -984,6 +984,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { detachFromProcess(): void { this._processManager.detachFromProcess(); + this.dispose(); } forceRedraw(): void { diff --git a/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts b/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts index 5642ec8b3dd..f09749a3056 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts @@ -176,6 +176,7 @@ export class TerminalProcessManager extends Disposable implements ITerminalProce detachFromProcess(): void { this._process?.detach?.(); + this._process = null; } async createProcess( diff --git a/src/vs/workbench/contrib/terminal/common/terminal.ts b/src/vs/workbench/contrib/terminal/common/terminal.ts index 0d6f364ce3b..a0a7a2599e8 100644 --- a/src/vs/workbench/contrib/terminal/common/terminal.ts +++ b/src/vs/workbench/contrib/terminal/common/terminal.ts @@ -447,7 +447,8 @@ export const enum TerminalCommandId { NavigationModeFocusPrevious = 'workbench.action.terminal.navigationModeFocusPrevious', ShowEnvironmentInformation = 'workbench.action.terminal.showEnvironmentInformation', SearchWorkspace = 'workbench.action.terminal.searchWorkspace', - AttachToRemoteTerminal = 'workbench.action.terminal.attachToSession' + AttachToRemoteTerminal = 'workbench.action.terminal.attachToSession', + DetachProcess = 'workbench.action.terminal.detachProcess' } export const DEFAULT_COMMANDS_TO_SKIP_SHELL: string[] = [