From 316f0b8b129ffcb9c6d500453fa165795576de44 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Tue, 30 Mar 2021 12:11:10 -0700 Subject: [PATCH 1/8] fix #118724 --- src/vs/platform/terminal/common/terminal.ts | 3 +++ src/vs/platform/terminal/node/ptyService.ts | 10 +++++++--- .../contrib/terminal/browser/remoteTerminalService.ts | 8 +++++++- .../contrib/terminal/browser/terminalService.ts | 1 + .../contrib/terminal/common/remoteTerminalChannel.ts | 4 ++++ .../terminal/electron-sandbox/localTerminalService.ts | 4 ++++ src/vs/workbench/test/browser/workbenchTestServices.ts | 1 + 7 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/vs/platform/terminal/common/terminal.ts b/src/vs/platform/terminal/common/terminal.ts index fd0d139c7789f..eb041ea7d2e83 100644 --- a/src/vs/platform/terminal/common/terminal.ts +++ b/src/vs/platform/terminal/common/terminal.ts @@ -96,6 +96,7 @@ export interface IOffProcessTerminalService { listProcesses(reduceGraceTime?: boolean): Promise; setTerminalLayoutInfo(layoutInfo?: ITerminalsLayoutInfoById): Promise; getTerminalLayoutInfo(): Promise; + reduceConnectionGraceTime(): void; } export const ILocalTerminalService = createDecorator('localTerminalService'); @@ -146,6 +147,7 @@ export interface IPtyService { * terminals. */ listProcesses(reduceGraceTime: boolean): Promise; + reduceConnectionGraceTime(): void; start(id: number): Promise; shutdown(id: number, immediate: boolean): Promise; @@ -160,6 +162,7 @@ export interface IPtyService { setTerminalLayoutInfo(args: ISetTerminalLayoutInfoArgs): Promise; getTerminalLayoutInfo(args: IGetTerminalLayoutInfoArgs): Promise; + reduceConnectionGraceTime(): void; } export enum HeartbeatConstants { diff --git a/src/vs/platform/terminal/node/ptyService.ts b/src/vs/platform/terminal/node/ptyService.ts index 121973445982c..44008b1fb446e 100644 --- a/src/vs/platform/terminal/node/ptyService.ts +++ b/src/vs/platform/terminal/node/ptyService.ts @@ -114,11 +114,15 @@ export class PtyService extends Disposable implements IPtyService { this._throwIfNoPty(id).detach(); } + reduceConnectionGraceTime(): void { + for (const pty of this._ptys.values()) { + pty.reduceGraceTime(); + } + } + async listProcesses(reduceGraceTime: boolean): Promise { if (reduceGraceTime) { - for (const pty of this._ptys.values()) { - pty.reduceGraceTime(); - } + this.reduceConnectionGraceTime(); } const persistentProcesses = Array.from(this._ptys.entries()).filter(([_, pty]) => pty.shouldPersistTerminal); diff --git a/src/vs/workbench/contrib/terminal/browser/remoteTerminalService.ts b/src/vs/workbench/contrib/terminal/browser/remoteTerminalService.ts index eca405fb55aa5..c4ed5f13d5d44 100644 --- a/src/vs/workbench/contrib/terminal/browser/remoteTerminalService.ts +++ b/src/vs/workbench/contrib/terminal/browser/remoteTerminalService.ts @@ -190,8 +190,14 @@ export class RemoteTerminalService extends Disposable implements IRemoteTerminal return this._remoteTerminalChannel.setTerminalLayoutInfo(layout); } + public reduceConnectionGraceTime(): void { + if (!this._remoteTerminalChannel) { + throw new Error('Cannot reduce grace time when there is no remote'); + } + this._remoteTerminalChannel.reduceGraceTime(); + } + public async getTerminalLayoutInfo(): Promise { - await this._remoteTerminalChannel?.listProcesses(true); if (!this._remoteTerminalChannel) { throw new Error(`Cannot call getActiveInstanceId when there is no remote`); } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalService.ts b/src/vs/workbench/contrib/terminal/browser/terminalService.ts index 382a7b716129f..d96116ae2d869 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalService.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalService.ts @@ -189,6 +189,7 @@ export class TerminalService implements ITerminalService { private async _reconnectToRemoteTerminals(): Promise { // Reattach to all remote terminals const layoutInfo = await this._remoteTerminalService.getTerminalLayoutInfo(); + await this._remoteTerminalService.reduceConnectionGraceTime(); const reconnectCounter = this._recreateTerminalTabs(layoutInfo); /* __GDPR__ "terminalReconnection" : { diff --git a/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts b/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts index e055f798fb395..556e5601c8e35 100644 --- a/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts +++ b/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts @@ -237,6 +237,10 @@ export class RemoteTerminalChannelClient { return this._channel.call('$listProcesses', [reduceGraceTime]); } + public reduceGraceTime(): Promise { + return this._channel.call('$reduceGracetime'); + } + public start(id: number): Promise { return this._channel.call('$start', [id]); } diff --git a/src/vs/workbench/contrib/terminal/electron-sandbox/localTerminalService.ts b/src/vs/workbench/contrib/terminal/electron-sandbox/localTerminalService.ts index c892298e0c56a..28044b90fa057 100644 --- a/src/vs/workbench/contrib/terminal/electron-sandbox/localTerminalService.ts +++ b/src/vs/workbench/contrib/terminal/electron-sandbox/localTerminalService.ts @@ -120,6 +120,10 @@ export class LocalTerminalService extends Disposable implements ILocalTerminalSe return this._localPtyService.listProcesses(reduceGraceTime); } + public reduceConnectionGraceTime(): void { + this._localPtyService.reduceConnectionGraceTime(); + } + public async setTerminalLayoutInfo(layoutInfo?: ITerminalsLayoutInfoById): Promise { const args: ISetTerminalLayoutInfoArgs = { workspaceId: this._getWorkspaceId(), diff --git a/src/vs/workbench/test/browser/workbenchTestServices.ts b/src/vs/workbench/test/browser/workbenchTestServices.ts index 7dea1df11ce64..744c2cd477687 100644 --- a/src/vs/workbench/test/browser/workbenchTestServices.ts +++ b/src/vs/workbench/test/browser/workbenchTestServices.ts @@ -1521,6 +1521,7 @@ export class TestLocalTerminalService implements ILocalTerminalService { async listProcesses(reduceGraceTime: boolean): Promise { throw new Error('Method not implemented.'); } async setTerminalLayoutInfo(argsOrLayout?: ISetTerminalLayoutInfoArgs | ITerminalsLayoutInfoById) { throw new Error('Method not implemented.'); } async getTerminalLayoutInfo(): Promise { throw new Error('Method not implemented.'); } + reduceConnectionGraceTime(): void { throw new Error('Method not implemented.'); } } class TestTerminalChildProcess implements ITerminalChildProcess { From 64fc0c2b3efd79a0a9800314aebb7476daba5017 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Tue, 30 Mar 2021 12:11:10 -0700 Subject: [PATCH 2/8] Allow terminal profiles w source to have args --- src/vs/workbench/contrib/terminal/browser/terminalService.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalService.ts b/src/vs/workbench/contrib/terminal/browser/terminalService.ts index d96116ae2d869..7aa5a4a7c6306 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalService.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalService.ts @@ -189,7 +189,7 @@ export class TerminalService implements ITerminalService { private async _reconnectToRemoteTerminals(): Promise { // Reattach to all remote terminals const layoutInfo = await this._remoteTerminalService.getTerminalLayoutInfo(); - await this._remoteTerminalService.reduceConnectionGraceTime(); + this._remoteTerminalService.reduceConnectionGraceTime(); const reconnectCounter = this._recreateTerminalTabs(layoutInfo); /* __GDPR__ "terminalReconnection" : { @@ -211,6 +211,8 @@ export class TerminalService implements ITerminalService { } // Reattach to all local terminals const layoutInfo = await this._localTerminalService.getTerminalLayoutInfo(); + this._localTerminalService.reduceConnectionGraceTime(); + if (layoutInfo && layoutInfo.tabs.length > 0) { this._recreateTerminalTabs(layoutInfo); } From 8638d39da5cb76ff8033f07dd0837c765a4d6008 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Tue, 30 Mar 2021 12:57:06 -0700 Subject: [PATCH 3/8] remove from local --- src/vs/platform/terminal/common/terminal.ts | 1 - src/vs/platform/terminal/node/ptyHostService.ts | 4 +++- src/vs/workbench/contrib/terminal/browser/terminal.ts | 1 + src/vs/workbench/contrib/terminal/browser/terminalService.ts | 1 - .../contrib/terminal/electron-sandbox/localTerminalService.ts | 4 ---- src/vs/workbench/test/browser/workbenchTestServices.ts | 1 - 6 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/vs/platform/terminal/common/terminal.ts b/src/vs/platform/terminal/common/terminal.ts index eb041ea7d2e83..3a6b8b0c98d52 100644 --- a/src/vs/platform/terminal/common/terminal.ts +++ b/src/vs/platform/terminal/common/terminal.ts @@ -96,7 +96,6 @@ export interface IOffProcessTerminalService { listProcesses(reduceGraceTime?: boolean): Promise; setTerminalLayoutInfo(layoutInfo?: ITerminalsLayoutInfoById): Promise; getTerminalLayoutInfo(): Promise; - reduceConnectionGraceTime(): void; } export const ILocalTerminalService = createDecorator('localTerminalService'); diff --git a/src/vs/platform/terminal/node/ptyHostService.ts b/src/vs/platform/terminal/node/ptyHostService.ts index 6d56aad168dde..d100b2124b07f 100644 --- a/src/vs/platform/terminal/node/ptyHostService.ts +++ b/src/vs/platform/terminal/node/ptyHostService.ts @@ -156,7 +156,9 @@ export class PtyHostService extends Disposable implements IPtyService { listProcesses(reduceGraceTime: boolean): Promise { return this._proxy.listProcesses(reduceGraceTime); } - + reduceConnectionGraceTime(): void { + return this._proxy.reduceConnectionGraceTime(); + } start(id: number): Promise { return this._proxy.start(id); } diff --git a/src/vs/workbench/contrib/terminal/browser/terminal.ts b/src/vs/workbench/contrib/terminal/browser/terminal.ts index 07d55150ce213..3595276653f70 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminal.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminal.ts @@ -189,6 +189,7 @@ export interface ITerminalService { export interface IRemoteTerminalService extends IOffProcessTerminalService { createProcess(shellLaunchConfig: IShellLaunchConfig, activeWorkspaceRootUri: URI | undefined, cols: number, rows: number, shouldPersist: boolean, configHelper: ITerminalConfigHelper): Promise; + reduceConnectionGraceTime(): void; } /** diff --git a/src/vs/workbench/contrib/terminal/browser/terminalService.ts b/src/vs/workbench/contrib/terminal/browser/terminalService.ts index 7aa5a4a7c6306..721cef6c56602 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalService.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalService.ts @@ -211,7 +211,6 @@ export class TerminalService implements ITerminalService { } // Reattach to all local terminals const layoutInfo = await this._localTerminalService.getTerminalLayoutInfo(); - this._localTerminalService.reduceConnectionGraceTime(); if (layoutInfo && layoutInfo.tabs.length > 0) { this._recreateTerminalTabs(layoutInfo); diff --git a/src/vs/workbench/contrib/terminal/electron-sandbox/localTerminalService.ts b/src/vs/workbench/contrib/terminal/electron-sandbox/localTerminalService.ts index 28044b90fa057..c892298e0c56a 100644 --- a/src/vs/workbench/contrib/terminal/electron-sandbox/localTerminalService.ts +++ b/src/vs/workbench/contrib/terminal/electron-sandbox/localTerminalService.ts @@ -120,10 +120,6 @@ export class LocalTerminalService extends Disposable implements ILocalTerminalSe return this._localPtyService.listProcesses(reduceGraceTime); } - public reduceConnectionGraceTime(): void { - this._localPtyService.reduceConnectionGraceTime(); - } - public async setTerminalLayoutInfo(layoutInfo?: ITerminalsLayoutInfoById): Promise { const args: ISetTerminalLayoutInfoArgs = { workspaceId: this._getWorkspaceId(), diff --git a/src/vs/workbench/test/browser/workbenchTestServices.ts b/src/vs/workbench/test/browser/workbenchTestServices.ts index 744c2cd477687..7dea1df11ce64 100644 --- a/src/vs/workbench/test/browser/workbenchTestServices.ts +++ b/src/vs/workbench/test/browser/workbenchTestServices.ts @@ -1521,7 +1521,6 @@ export class TestLocalTerminalService implements ILocalTerminalService { async listProcesses(reduceGraceTime: boolean): Promise { throw new Error('Method not implemented.'); } async setTerminalLayoutInfo(argsOrLayout?: ISetTerminalLayoutInfoArgs | ITerminalsLayoutInfoById) { throw new Error('Method not implemented.'); } async getTerminalLayoutInfo(): Promise { throw new Error('Method not implemented.'); } - reduceConnectionGraceTime(): void { throw new Error('Method not implemented.'); } } class TestTerminalChildProcess implements ITerminalChildProcess { From 2c37e83391275c54bd61ffd4710e0b8eb7efa58a Mon Sep 17 00:00:00 2001 From: meganrogge Date: Tue, 30 Mar 2021 12:58:52 -0700 Subject: [PATCH 4/8] remove duplicate --- src/vs/platform/terminal/common/terminal.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/vs/platform/terminal/common/terminal.ts b/src/vs/platform/terminal/common/terminal.ts index 3a6b8b0c98d52..04d2c72b86c2e 100644 --- a/src/vs/platform/terminal/common/terminal.ts +++ b/src/vs/platform/terminal/common/terminal.ts @@ -146,7 +146,6 @@ export interface IPtyService { * terminals. */ listProcesses(reduceGraceTime: boolean): Promise; - reduceConnectionGraceTime(): void; start(id: number): Promise; shutdown(id: number, immediate: boolean): Promise; From 2e1ac795232c0fcbf5b6c67447d712dfdfbcaea4 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Tue, 30 Mar 2021 13:02:41 -0700 Subject: [PATCH 5/8] remove line --- src/vs/workbench/contrib/terminal/browser/terminalService.ts | 1 - .../workbench/contrib/terminal/common/remoteTerminalChannel.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalService.ts b/src/vs/workbench/contrib/terminal/browser/terminalService.ts index 721cef6c56602..37b5569afd6d3 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalService.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalService.ts @@ -211,7 +211,6 @@ export class TerminalService implements ITerminalService { } // Reattach to all local terminals const layoutInfo = await this._localTerminalService.getTerminalLayoutInfo(); - if (layoutInfo && layoutInfo.tabs.length > 0) { this._recreateTerminalTabs(layoutInfo); } diff --git a/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts b/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts index 556e5601c8e35..b2a1aeab014ce 100644 --- a/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts +++ b/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts @@ -238,7 +238,7 @@ export class RemoteTerminalChannelClient { } public reduceGraceTime(): Promise { - return this._channel.call('$reduceGracetime'); + return this._channel.call('$reduceGraceTime'); } public start(id: number): Promise { From 311e205e08ae2deefb9d8e58ac9bcb9c1760d329 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Tue, 30 Mar 2021 13:03:43 -0700 Subject: [PATCH 6/8] remove lines for uniformity --- .../contrib/terminal/common/remoteTerminalChannel.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts b/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts index b2a1aeab014ce..c44b040a17250 100644 --- a/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts +++ b/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts @@ -232,15 +232,12 @@ export class RemoteTerminalChannelClient { public attachToProcess(id: number): Promise { return this._channel.call('$attachToProcess', [id]); } - public listProcesses(reduceGraceTime: boolean): Promise { return this._channel.call('$listProcesses', [reduceGraceTime]); } - public reduceGraceTime(): Promise { return this._channel.call('$reduceGraceTime'); } - public start(id: number): Promise { return this._channel.call('$start', [id]); } @@ -265,7 +262,6 @@ export class RemoteTerminalChannelClient { public orphanQuestionReply(id: number): Promise { return this._channel.call('$orphanQuestionReply', [id]); } - public sendCommandResult(reqId: number, isError: boolean, payload: any): Promise { return this._channel.call('$sendCommandResult', [reqId, isError, payload]); } From 61d21544e143cf8c5d5e3eef10c247803939b0b8 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Wed, 31 Mar 2021 09:49:59 -0700 Subject: [PATCH 7/8] remove reduceGraceTime boolean from listProcesses --- src/vs/platform/terminal/common/terminal.ts | 4 +--- src/vs/platform/terminal/node/ptyHostService.ts | 4 ++-- src/vs/platform/terminal/node/ptyService.ts | 6 +----- .../terminal/browser/remoteTerminalService.ts | 6 +++--- .../contrib/terminal/browser/terminalActions.ts | 12 +++++++++--- .../contrib/terminal/common/remoteTerminalChannel.ts | 8 ++++---- .../electron-sandbox/localTerminalService.ts | 4 ++-- 7 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/vs/platform/terminal/common/terminal.ts b/src/vs/platform/terminal/common/terminal.ts index 04d2c72b86c2e..0ea7a4cd51c2b 100644 --- a/src/vs/platform/terminal/common/terminal.ts +++ b/src/vs/platform/terminal/common/terminal.ts @@ -142,10 +142,8 @@ export interface IPtyService { /** * Lists all orphaned processes, ie. those without a connected frontend. - * @param reduceGraceTime Whether to reduce the reconnection grace time for all orphaned - * terminals. */ - listProcesses(reduceGraceTime: boolean): Promise; + listProcesses(): Promise; start(id: number): Promise; shutdown(id: number, immediate: boolean): Promise; diff --git a/src/vs/platform/terminal/node/ptyHostService.ts b/src/vs/platform/terminal/node/ptyHostService.ts index d100b2124b07f..ab73d598fe6e2 100644 --- a/src/vs/platform/terminal/node/ptyHostService.ts +++ b/src/vs/platform/terminal/node/ptyHostService.ts @@ -153,8 +153,8 @@ export class PtyHostService extends Disposable implements IPtyService { detachFromProcess(id: number): Promise { return this._proxy.detachFromProcess(id); } - listProcesses(reduceGraceTime: boolean): Promise { - return this._proxy.listProcesses(reduceGraceTime); + listProcesses(): Promise { + return this._proxy.listProcesses(); } reduceConnectionGraceTime(): void { return this._proxy.reduceConnectionGraceTime(); diff --git a/src/vs/platform/terminal/node/ptyService.ts b/src/vs/platform/terminal/node/ptyService.ts index 44008b1fb446e..21fff4a60e3d2 100644 --- a/src/vs/platform/terminal/node/ptyService.ts +++ b/src/vs/platform/terminal/node/ptyService.ts @@ -120,11 +120,7 @@ export class PtyService extends Disposable implements IPtyService { } } - async listProcesses(reduceGraceTime: boolean): Promise { - if (reduceGraceTime) { - this.reduceConnectionGraceTime(); - } - + async listProcesses(): Promise { const persistentProcesses = Array.from(this._ptys.entries()).filter(([_, pty]) => pty.shouldPersistTerminal); this._logService.info(`Listing ${persistentProcesses.length} persistent terminals, ${this._ptys.size} total terminals`); diff --git a/src/vs/workbench/contrib/terminal/browser/remoteTerminalService.ts b/src/vs/workbench/contrib/terminal/browser/remoteTerminalService.ts index c4ed5f13d5d44..a3bd42c717cee 100644 --- a/src/vs/workbench/contrib/terminal/browser/remoteTerminalService.ts +++ b/src/vs/workbench/contrib/terminal/browser/remoteTerminalService.ts @@ -168,8 +168,8 @@ export class RemoteTerminalService extends Disposable implements IRemoteTerminal return undefined; } - public async listProcesses(reduceGraceTime: boolean = false): Promise { - const terms = this._remoteTerminalChannel ? await this._remoteTerminalChannel.listProcesses(reduceGraceTime) : []; + public async listProcesses(): Promise { + const terms = this._remoteTerminalChannel ? await this._remoteTerminalChannel.listProcesses() : []; return terms.map(termDto => { return { id: termDto.id, @@ -194,7 +194,7 @@ export class RemoteTerminalService extends Disposable implements IRemoteTerminal if (!this._remoteTerminalChannel) { throw new Error('Cannot reduce grace time when there is no remote'); } - this._remoteTerminalChannel.reduceGraceTime(); + this._remoteTerminalChannel.reduceConnectionGraceTime(); } public async getTerminalLayoutInfo(): Promise { diff --git a/src/vs/workbench/contrib/terminal/browser/terminalActions.ts b/src/vs/workbench/contrib/terminal/browser/terminalActions.ts index 8ffbdc7fc9a14..a854c4d4bab7e 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalActions.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalActions.ts @@ -670,9 +670,15 @@ export function registerTerminalActions() { const labelService = accessor.get(ILabelService); const remoteAgentService = accessor.get(IRemoteAgentService); const notificationService = accessor.get(INotificationService); - const offProcTerminalService = remoteAgentService.getConnection() ? accessor.get(IRemoteTerminalService) : accessor.get(ILocalTerminalService); - const remoteTerms = await offProcTerminalService.listProcesses(); - const unattachedTerms = remoteTerms.filter(term => !terminalService.isAttachedToTerminal(term)); + let offProcTerminalService = remoteAgentService.getConnection() ? accessor.get(IRemoteTerminalService) : accessor.get(ILocalTerminalService); + + const terms = await offProcTerminalService.listProcesses(); + + if ('reduceConnectionGraceTime' in offProcTerminalService) { + offProcTerminalService.reduceConnectionGraceTime(); + } + + const unattachedTerms = terms.filter(term => !terminalService.isAttachedToTerminal(term)); const items = unattachedTerms.map(term => { const cwdLabel = labelService.getUriLabel(URI.file(term.cwd)); return { diff --git a/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts b/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts index c44b040a17250..06c3f2886024a 100644 --- a/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts +++ b/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts @@ -232,11 +232,11 @@ export class RemoteTerminalChannelClient { public attachToProcess(id: number): Promise { return this._channel.call('$attachToProcess', [id]); } - public listProcesses(reduceGraceTime: boolean): Promise { - return this._channel.call('$listProcesses', [reduceGraceTime]); + public listProcesses(): Promise { + return this._channel.call('$listProcesses'); } - public reduceGraceTime(): Promise { - return this._channel.call('$reduceGraceTime'); + public reduceConnectionGraceTime(): Promise { + return this._channel.call('$reduceConnectionGraceTime'); } public start(id: number): Promise { return this._channel.call('$start', [id]); diff --git a/src/vs/workbench/contrib/terminal/electron-sandbox/localTerminalService.ts b/src/vs/workbench/contrib/terminal/electron-sandbox/localTerminalService.ts index c892298e0c56a..9a21db8a4ce7a 100644 --- a/src/vs/workbench/contrib/terminal/electron-sandbox/localTerminalService.ts +++ b/src/vs/workbench/contrib/terminal/electron-sandbox/localTerminalService.ts @@ -116,8 +116,8 @@ export class LocalTerminalService extends Disposable implements ILocalTerminalSe return undefined; } - public async listProcesses(reduceGraceTime: boolean): Promise { - return this._localPtyService.listProcesses(reduceGraceTime); + public async listProcesses(): Promise { + return this._localPtyService.listProcesses(); } public async setTerminalLayoutInfo(layoutInfo?: ITerminalsLayoutInfoById): Promise { From 3c1dd27378c0d3a181430398c009eaa76962a6a2 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Thu, 1 Apr 2021 11:41:37 -0700 Subject: [PATCH 8/8] add to local terminal service --- src/vs/platform/terminal/common/terminal.ts | 1 + src/vs/workbench/contrib/terminal/browser/terminal.ts | 1 - src/vs/workbench/contrib/terminal/browser/terminalActions.ts | 4 +--- src/vs/workbench/contrib/terminal/browser/terminalService.ts | 1 + .../contrib/terminal/electron-sandbox/localTerminalService.ts | 4 ++++ src/vs/workbench/test/browser/workbenchTestServices.ts | 2 ++ 6 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/vs/platform/terminal/common/terminal.ts b/src/vs/platform/terminal/common/terminal.ts index 0ea7a4cd51c2b..df10ea8d04926 100644 --- a/src/vs/platform/terminal/common/terminal.ts +++ b/src/vs/platform/terminal/common/terminal.ts @@ -96,6 +96,7 @@ export interface IOffProcessTerminalService { listProcesses(reduceGraceTime?: boolean): Promise; setTerminalLayoutInfo(layoutInfo?: ITerminalsLayoutInfoById): Promise; getTerminalLayoutInfo(): Promise; + reduceConnectionGraceTime(): void; } export const ILocalTerminalService = createDecorator('localTerminalService'); diff --git a/src/vs/workbench/contrib/terminal/browser/terminal.ts b/src/vs/workbench/contrib/terminal/browser/terminal.ts index 3595276653f70..07d55150ce213 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminal.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminal.ts @@ -189,7 +189,6 @@ export interface ITerminalService { export interface IRemoteTerminalService extends IOffProcessTerminalService { createProcess(shellLaunchConfig: IShellLaunchConfig, activeWorkspaceRootUri: URI | undefined, cols: number, rows: number, shouldPersist: boolean, configHelper: ITerminalConfigHelper): Promise; - reduceConnectionGraceTime(): void; } /** diff --git a/src/vs/workbench/contrib/terminal/browser/terminalActions.ts b/src/vs/workbench/contrib/terminal/browser/terminalActions.ts index a854c4d4bab7e..9fb23adb6555b 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalActions.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalActions.ts @@ -674,9 +674,7 @@ export function registerTerminalActions() { const terms = await offProcTerminalService.listProcesses(); - if ('reduceConnectionGraceTime' in offProcTerminalService) { - offProcTerminalService.reduceConnectionGraceTime(); - } + offProcTerminalService.reduceConnectionGraceTime(); const unattachedTerms = terms.filter(term => !terminalService.isAttachedToTerminal(term)); const items = unattachedTerms.map(term => { diff --git a/src/vs/workbench/contrib/terminal/browser/terminalService.ts b/src/vs/workbench/contrib/terminal/browser/terminalService.ts index 37b5569afd6d3..48388b38d5a15 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalService.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalService.ts @@ -211,6 +211,7 @@ export class TerminalService implements ITerminalService { } // Reattach to all local terminals const layoutInfo = await this._localTerminalService.getTerminalLayoutInfo(); + this._localTerminalService.reduceConnectionGraceTime(); if (layoutInfo && layoutInfo.tabs.length > 0) { this._recreateTerminalTabs(layoutInfo); } diff --git a/src/vs/workbench/contrib/terminal/electron-sandbox/localTerminalService.ts b/src/vs/workbench/contrib/terminal/electron-sandbox/localTerminalService.ts index 9a21db8a4ce7a..3bfe3a8e9ec4f 100644 --- a/src/vs/workbench/contrib/terminal/electron-sandbox/localTerminalService.ts +++ b/src/vs/workbench/contrib/terminal/electron-sandbox/localTerminalService.ts @@ -120,6 +120,10 @@ export class LocalTerminalService extends Disposable implements ILocalTerminalSe return this._localPtyService.listProcesses(); } + public reduceConnectionGraceTime(): void { + this._localPtyService.reduceConnectionGraceTime(); + } + public async setTerminalLayoutInfo(layoutInfo?: ITerminalsLayoutInfoById): Promise { const args: ISetTerminalLayoutInfoArgs = { workspaceId: this._getWorkspaceId(), diff --git a/src/vs/workbench/test/browser/workbenchTestServices.ts b/src/vs/workbench/test/browser/workbenchTestServices.ts index 7dea1df11ce64..ae239152ba488 100644 --- a/src/vs/workbench/test/browser/workbenchTestServices.ts +++ b/src/vs/workbench/test/browser/workbenchTestServices.ts @@ -1507,6 +1507,7 @@ export class TestTerminalInstanceService implements ITerminalInstanceService { } export class TestLocalTerminalService implements ILocalTerminalService { + declare readonly _serviceBrand: undefined; onPtyHostExit = Event.None; @@ -1521,6 +1522,7 @@ export class TestLocalTerminalService implements ILocalTerminalService { async listProcesses(reduceGraceTime: boolean): Promise { throw new Error('Method not implemented.'); } async setTerminalLayoutInfo(argsOrLayout?: ISetTerminalLayoutInfoArgs | ITerminalsLayoutInfoById) { throw new Error('Method not implemented.'); } async getTerminalLayoutInfo(): Promise { throw new Error('Method not implemented.'); } + reduceConnectionGraceTime(): void { throw new Error('Method not implemented.'); } } class TestTerminalChildProcess implements ITerminalChildProcess {