Support attach to session in local

Fixes #118241
This commit is contained in:
Daniel Imms 2021-03-05 10:18:59 -08:00
parent df6b269170
commit fe24a792b0
3 changed files with 11 additions and 14 deletions

View file

@ -117,8 +117,7 @@ export class PtyService extends Disposable implements IPtyService {
}
}
const persistentProcesses = Array.from(this._ptys.entries())
.filter(([_, terminalProcessData]) => terminalProcessData.shouldPersistTerminal);
const persistentProcesses = Array.from(this._ptys.entries()).filter(([_, pty]) => pty.shouldPersistTerminal);
this._logService.info(`Listing ${persistentProcesses.length} persistent terminals, ${this._ptys.size} total terminals`);
const promises = persistentProcesses.map(async ([id, terminalProcessData]) => this._buildProcessDetails(id, terminalProcessData));

View file

@ -24,9 +24,9 @@ import { ILabelService } from 'vs/platform/label/common/label';
import { INotificationService } from 'vs/platform/notification/common/notification';
import { IOpenerService } from 'vs/platform/opener/common/opener';
import { IPickOptions, IQuickInputService, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput';
import { ILocalTerminalService } from 'vs/platform/terminal/common/terminal';
import { IWorkspaceContextService, IWorkspaceFolder } from 'vs/platform/workspace/common/workspace';
import { PICK_WORKSPACE_FOLDER_COMMAND_ID } from 'vs/workbench/browser/actions/workspaceCommands';
import { RemoteNameContext } from 'vs/workbench/browser/contextkeys';
import { FindInFilesCommand, IFindInFilesArgs } from 'vs/workbench/contrib/search/browser/searchActions';
import { Direction, IRemoteTerminalService, ITerminalInstance, ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal';
import { TerminalQuickAccessProvider } from 'vs/workbench/contrib/terminal/browser/terminalQuickAccess';
@ -35,6 +35,7 @@ import { ITerminalContributionService } from 'vs/workbench/contrib/terminal/comm
import { IConfigurationResolverService } from 'vs/workbench/services/configurationResolver/common/configurationResolver';
import { IHistoryService } from 'vs/workbench/services/history/common/history';
import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences';
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
export const switchTerminalActionViewItemSeparator = '─────────';
export const selectDefaultShellTitle = localize('workbench.action.terminal.selectDefaultShell', "Select Default Shell");
@ -662,19 +663,16 @@ export function registerTerminalActions() {
id: TERMINAL_COMMAND_ID.ATTACH_TO_REMOTE_TERMINAL,
title: { value: localize('workbench.action.terminal.attachToRemote', "Attach to Session"), original: 'Attach to Session' },
f1: true,
category,
keybinding: {
when: RemoteNameContext.notEqualsTo(''),
weight: KeybindingWeight.WorkbenchContrib
}
category
});
}
async run(accessor: ServicesAccessor) {
const quickInputService = accessor.get(IQuickInputService);
const remoteTerminalService = accessor.get(IRemoteTerminalService);
const terminalService = accessor.get(ITerminalService);
const labelService = accessor.get(ILabelService);
const remoteTerms = await remoteTerminalService.listProcesses();
const remoteAgentService = accessor.get(IRemoteAgentService);
const offProcTerminalService = remoteAgentService.getConnection() ? accessor.get(IRemoteTerminalService) : accessor.get(ILocalTerminalService);
const remoteTerms = await offProcTerminalService.listProcesses();
const unattachedTerms = remoteTerms.filter(term => !terminalService.isAttachedToTerminal(term));
const items = unattachedTerms.map(term => {
const cwdLabel = labelService.getUriLabel(URI.file(term.cwd));

View file

@ -286,15 +286,15 @@ export class RemoteTerminalChannelClient {
return await this._channel.call<ICreateTerminalProcessResult>('$createProcess', args);
}
public async attachToProcess(id: number): Promise<void> {
return await this._channel.call('$attachToProcess', [id]);
public attachToProcess(id: number): Promise<void> {
return this._channel.call('$attachToProcess', [id]);
}
public async listProcesses(reduceGraceTime: boolean): Promise<IProcessDetails[]> {
public listProcesses(reduceGraceTime: boolean): Promise<IProcessDetails[]> {
return this._channel.call('$listProcesses', [reduceGraceTime]);
}
public async start(id: number): Promise<ITerminalLaunchError | void> {
public start(id: number): Promise<ITerminalLaunchError | void> {
return this._channel.call('$start', [id]);
}
public input(id: number, data: string): Promise<void> {