Skip to content

Commit 57ae321

Browse files
authored
Merge pull request microsoft#187177 from microsoft/tyriar/186935
Add IPtyHostService
2 parents 440bade + 0d1bc08 commit 57ae321

File tree

7 files changed

+144
-151
lines changed

7 files changed

+144
-151
lines changed

src/vs/platform/terminal/common/terminal.ts

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -221,8 +221,6 @@ export enum TerminalIpcChannels {
221221
Heartbeat = 'heartbeat'
222222
}
223223

224-
export const IPtyService = createDecorator<IPtyService>('ptyService');
225-
226224
export const enum ProcessPropertyType {
227225
Cwd = 'cwd',
228226
InitialCwd = 'initialCwd',
@@ -266,18 +264,10 @@ export interface IFixedTerminalDimensions {
266264
rows?: number;
267265
}
268266

269-
export interface IPtyHostController {
270-
readonly onPtyHostExit?: Event<number>;
271-
readonly onPtyHostStart?: Event<void>;
272-
readonly onPtyHostUnresponsive?: Event<void>;
273-
readonly onPtyHostResponsive?: Event<void>;
274-
readonly onPtyHostRequestResolveVariables?: Event<IRequestResolveVariablesEvent>;
275-
276-
restartPtyHost?(): void;
277-
acceptPtyHostResolvedVariables?(requestId: number, resolved: string[]): Promise<void>;
278-
}
279-
280-
export interface IPtyService extends IPtyHostController {
267+
/**
268+
* A service that communicates with a pty host.
269+
*/
270+
export interface IPtyService {
281271
readonly _serviceBrand: undefined;
282272

283273
readonly onProcessData: Event<{ id: number; event: IProcessDataEvent | string }>;
@@ -288,10 +278,6 @@ export interface IPtyService extends IPtyHostController {
288278
readonly onDidChangeProperty: Event<{ id: number; property: IProcessProperty<any> }>;
289279
readonly onProcessExit: Event<{ id: number; event: number | undefined }>;
290280

291-
restartPtyHost?(): Promise<void>;
292-
shutdownAll?(): Promise<void>;
293-
acceptPtyHostResolvedVariables?(requestId: number, resolved: string[]): Promise<void>;
294-
295281
createProcess(
296282
shellLaunchConfig: IShellLaunchConfig,
297283
cwd: string,
@@ -307,6 +293,7 @@ export interface IPtyService extends IPtyHostController {
307293
): Promise<number>;
308294
attachToProcess(id: number): Promise<void>;
309295
detachFromProcess(id: number, forcePersist?: boolean): Promise<void>;
296+
shutdownAll(): Promise<void>;
310297

311298
/**
312299
* Lists all orphaned processes, ie. those without a connected frontend.
@@ -334,7 +321,6 @@ export interface IPtyService extends IPtyHostController {
334321
uninstallAllAutoReplies(): Promise<void>;
335322
uninstallAutoReply(match: string): Promise<void>;
336323
getDefaultSystemShell(osOverride?: OperatingSystem): Promise<string>;
337-
getProfiles?(workspaceId: string, profiles: unknown, defaultProfile: unknown, includeDetectedProfiles?: boolean): Promise<ITerminalProfile[]>;
338324
getEnvironment(): Promise<IProcessEnvironment>;
339325
getWslPath(original: string, direction: 'unix-to-win' | 'win-to-unix'): Promise<string>;
340326
getRevivedPtyNewId(workspaceId: string, id: number): Promise<number | undefined>;
@@ -343,7 +329,7 @@ export interface IPtyService extends IPtyHostController {
343329
reduceConnectionGraceTime(): Promise<void>;
344330
requestDetachInstance(workspaceId: string, instanceId: number): Promise<IProcessDetails | undefined>;
345331
acceptDetachInstanceReply(requestId: number, persistentProcessId?: number): Promise<void>;
346-
freePortKillProcess?(port: string): Promise<{ port: string; processId: string }>;
332+
freePortKillProcess(port: string): Promise<{ port: string; processId: string }>;
347333
/**
348334
* Serializes and returns terminal state.
349335
* @param ids The persistent terminal IDs to serialize.
@@ -357,8 +343,29 @@ export interface IPtyService extends IPtyHostController {
357343
refreshProperty<T extends ProcessPropertyType>(id: number, property: T): Promise<IProcessPropertyMap[T]>;
358344
updateProperty<T extends ProcessPropertyType>(id: number, property: T, value: IProcessPropertyMap[T]): Promise<void>;
359345

346+
// TODO: Make mandatory and remove impl from pty host service
360347
refreshIgnoreProcessNames?(names: string[]): Promise<void>;
361348
}
349+
export const IPtyService = createDecorator<IPtyService>('ptyService');
350+
351+
export interface IPtyHostController {
352+
readonly onPtyHostExit: Event<number>;
353+
readonly onPtyHostStart: Event<void>;
354+
readonly onPtyHostUnresponsive: Event<void>;
355+
readonly onPtyHostResponsive: Event<void>;
356+
readonly onPtyHostRequestResolveVariables: Event<IRequestResolveVariablesEvent>;
357+
358+
restartPtyHost(): Promise<void>;
359+
acceptPtyHostResolvedVariables(requestId: number, resolved: string[]): Promise<void>;
360+
getProfiles(workspaceId: string, profiles: unknown, defaultProfile: unknown, includeDetectedProfiles?: boolean): Promise<ITerminalProfile[]>;
361+
}
362+
363+
/**
364+
* A service that communicates with a pty host controller (eg. main or server
365+
* process) and is able to launch and forward requests to the pty host.
366+
*/
367+
export interface IPtyHostService extends IPtyService, IPtyHostController {
368+
}
362369

363370
/**
364371
* Serialized terminal state matching the interface that can be used across versions, the version
@@ -1066,7 +1073,7 @@ export const ILocalPtyService = createDecorator<ILocalPtyService>('localPtyServi
10661073
*
10671074
* **This service should only be used within the terminal component.**
10681075
*/
1069-
export interface ILocalPtyService extends IPtyService { }
1076+
export interface ILocalPtyService extends IPtyHostService { }
10701077

10711078
export const ITerminalLogService = createDecorator<ITerminalLogService>('terminalLogService');
10721079
export interface ITerminalLogService extends ILogService {

src/vs/platform/terminal/node/ptyHostService.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { RemoteLoggerChannelClient } from 'vs/platform/log/common/logIpc';
1313
import { getResolvedShellEnv } from 'vs/platform/shell/node/shellEnv';
1414
import { IPtyHostProcessReplayEvent } from 'vs/platform/terminal/common/capabilities/capabilities';
1515
import { RequestStore } from 'vs/platform/terminal/common/requestStore';
16-
import { HeartbeatConstants, IHeartbeatService, IProcessDataEvent, IProcessProperty, IProcessPropertyMap, IProcessReadyEvent, IPtyService, IRequestResolveVariablesEvent, ISerializedTerminalState, IShellLaunchConfig, ITerminalLaunchError, ITerminalProcessOptions, ITerminalProfile, ITerminalsLayoutInfo, ProcessPropertyType, TerminalIcon, TerminalIpcChannels, TerminalSettingId, TitleEventSource } from 'vs/platform/terminal/common/terminal';
16+
import { HeartbeatConstants, IHeartbeatService, IProcessDataEvent, IProcessProperty, IProcessPropertyMap, IProcessReadyEvent, IPtyHostService, IPtyService, IRequestResolveVariablesEvent, ISerializedTerminalState, IShellLaunchConfig, ITerminalLaunchError, ITerminalProcessOptions, ITerminalProfile, ITerminalsLayoutInfo, ProcessPropertyType, TerminalIcon, TerminalIpcChannels, TerminalSettingId, TitleEventSource } from 'vs/platform/terminal/common/terminal';
1717
import { registerTerminalPlatformConfiguration } from 'vs/platform/terminal/common/terminalPlatformConfiguration';
1818
import { IGetTerminalLayoutInfoArgs, IProcessDetails, ISetTerminalLayoutInfoArgs } from 'vs/platform/terminal/common/terminalProcess';
1919
import { IPtyHostConnection, IPtyHostStarter } from 'vs/platform/terminal/node/ptyHost';
@@ -29,7 +29,7 @@ enum Constants {
2929
* This service implements IPtyService by launching a pty host process, forwarding messages to and
3030
* from the pty host process and manages the connection.
3131
*/
32-
export class PtyHostService extends Disposable implements IPtyService {
32+
export class PtyHostService extends Disposable implements IPtyHostService {
3333
declare readonly _serviceBrand: undefined;
3434

3535
private __connection?: IPtyHostConnection;
@@ -230,6 +230,9 @@ export class PtyHostService extends Disposable implements IPtyService {
230230
detachFromProcess(id: number, forcePersist?: boolean): Promise<void> {
231231
return this._proxy.detachFromProcess(id, forcePersist);
232232
}
233+
shutdownAll(): Promise<void> {
234+
return this._proxy.shutdownAll();
235+
}
233236
listProcesses(): Promise<IProcessDetails[]> {
234237
return this._proxy.listProcesses();
235238
}
@@ -354,7 +357,7 @@ export class PtyHostService extends Disposable implements IPtyService {
354357
}
355358

356359
private _disposePtyHost(): void {
357-
this._proxy.shutdownAll?.();
360+
this._proxy.shutdownAll();
358361
this._connection.store.dispose();
359362
}
360363

src/vs/platform/terminal/node/ptyService.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { URI } from 'vs/base/common/uri';
1212
import { getSystemShell } from 'vs/base/node/shell';
1313
import { ILogService, LogLevel } from 'vs/platform/log/common/log';
1414
import { RequestStore } from 'vs/platform/terminal/common/requestStore';
15-
import { IProcessDataEvent, IProcessReadyEvent, IPtyService, IRawTerminalInstanceLayoutInfo, IReconnectConstants, IRequestResolveVariablesEvent, IShellLaunchConfig, ITerminalInstanceLayoutInfoById, ITerminalLaunchError, ITerminalsLayoutInfo, ITerminalTabLayoutInfoById, TerminalIcon, IProcessProperty, TitleEventSource, ProcessPropertyType, IProcessPropertyMap, IFixedTerminalDimensions, IPersistentTerminalProcessLaunchConfig, ICrossVersionSerializedTerminalState, ISerializedTerminalState, ITerminalProcessOptions } from 'vs/platform/terminal/common/terminal';
15+
import { IProcessDataEvent, IProcessReadyEvent, IPtyService, IRawTerminalInstanceLayoutInfo, IReconnectConstants, IShellLaunchConfig, ITerminalInstanceLayoutInfoById, ITerminalLaunchError, ITerminalsLayoutInfo, ITerminalTabLayoutInfoById, TerminalIcon, IProcessProperty, TitleEventSource, ProcessPropertyType, IProcessPropertyMap, IFixedTerminalDimensions, IPersistentTerminalProcessLaunchConfig, ICrossVersionSerializedTerminalState, ISerializedTerminalState, ITerminalProcessOptions } from 'vs/platform/terminal/common/terminal';
1616
import { TerminalDataBufferer } from 'vs/platform/terminal/common/terminalDataBuffering';
1717
import { escapeNonWindowsPath } from 'vs/platform/terminal/common/terminalEnvironment';
1818
import { Terminal as XtermTerminal } from 'xterm-headless';
@@ -136,12 +136,6 @@ export class PtyService extends Disposable implements IPtyService {
136136
ignoreProcessNames.push(...names);
137137
}
138138

139-
onPtyHostExit?: Event<number> | undefined;
140-
onPtyHostStart?: Event<void> | undefined;
141-
onPtyHostUnresponsive?: Event<void> | undefined;
142-
onPtyHostResponsive?: Event<void> | undefined;
143-
onPtyHostRequestResolveVariables?: Event<IRequestResolveVariablesEvent> | undefined;
144-
145139
@traceRpc
146140
async requestDetachInstance(workspaceId: string, instanceId: number): Promise<IProcessDetails | undefined> {
147141
return this._detachInstanceRequestStore.createRequest({ workspaceId, instanceId });

0 commit comments

Comments
 (0)