44 *--------------------------------------------------------------------------------------------*/
55
66import { Barrier } from 'vs/base/common/async' ;
7- import { Emitter } from 'vs/base/common/event' ;
8- import { Disposable } from 'vs/base/common/lifecycle' ;
9- import { mark } from 'vs/base/common/performance' ;
10- import { URI } from 'vs/base/common/uri' ;
11- import { IPtyHostProcessReplayEvent , ISerializedCommandDetectionCapability } from 'vs/platform/terminal/common/capabilities/capabilities' ;
12- import { IProcessDataEvent , ITerminalChildProcess , ITerminalLaunchError , IProcessProperty , IProcessPropertyMap , ProcessPropertyType , IProcessReadyEvent , ITerminalLogService } from 'vs/platform/terminal/common/terminal' ;
7+ import { IProcessPropertyMap , ITerminalChildProcess , ITerminalLaunchError , ITerminalLogService , ProcessPropertyType } from 'vs/platform/terminal/common/terminal' ;
8+ import { BasePty } from 'vs/workbench/contrib/terminal/common/basePty' ;
139import { RemoteTerminalChannelClient } from 'vs/workbench/contrib/terminal/common/remote/remoteTerminalChannel' ;
1410import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService' ;
1511
16- export class RemotePty extends Disposable implements ITerminalChildProcess {
12+ export class RemotePty extends BasePty implements ITerminalChildProcess {
1713 private readonly _startBarrier : Barrier ;
18- private readonly _properties : IProcessPropertyMap = {
19- cwd : '' ,
20- initialCwd : '' ,
21- fixedDimensions : { cols : undefined , rows : undefined } ,
22- title : '' ,
23- shellType : undefined ,
24- hasChildProcesses : true ,
25- resolvedShellLaunchConfig : { } ,
26- overrideDimensions : undefined ,
27- failedShellIntegrationActivation : false ,
28- usedShellIntegrationInjection : undefined
29- } ;
30- private readonly _lastDimensions : { cols : number ; rows : number } = { cols : - 1 , rows : - 1 } ;
31-
32- private _inReplay = false ;
33-
34- private readonly _onProcessData = this . _register ( new Emitter < string | IProcessDataEvent > ( ) ) ;
35- readonly onProcessData = this . _onProcessData . event ;
36- private readonly _onProcessReplayComplete = this . _register ( new Emitter < void > ( ) ) ;
37- readonly onProcessReplayComplete = this . _onProcessReplayComplete . event ;
38- private readonly _onProcessReady = this . _register ( new Emitter < IProcessReadyEvent > ( ) ) ;
39- readonly onProcessReady = this . _onProcessReady . event ;
40- private readonly _onDidChangeProperty = this . _register ( new Emitter < IProcessProperty < any > > ( ) ) ;
41- readonly onDidChangeProperty = this . _onDidChangeProperty . event ;
42- private readonly _onProcessExit = this . _register ( new Emitter < number | undefined > ( ) ) ;
43- readonly onProcessExit = this . _onProcessExit . event ;
44- private readonly _onRestoreCommands = this . _register ( new Emitter < ISerializedCommandDetectionCapability > ( ) ) ;
45- readonly onRestoreCommands = this . _onRestoreCommands . event ;
4614
4715 constructor (
48- readonly id : number ,
49- readonly shouldPersist : boolean ,
16+ id : number ,
17+ shouldPersist : boolean ,
5018 private readonly _remoteTerminalChannel : RemoteTerminalChannelClient ,
5119 @IRemoteAgentService private readonly _remoteAgentService : IRemoteAgentService ,
5220 @ITerminalLogService private readonly _logService : ITerminalLogService
5321 ) {
54- super ( ) ;
22+ super ( id , shouldPersist ) ;
5523 this . _startBarrier = new Barrier ( ) ;
5624 }
5725
@@ -97,6 +65,10 @@ export class RemotePty extends Disposable implements ITerminalChildProcess {
9765 } ) ;
9866 }
9967
68+ processBinary ( e : string ) : Promise < void > {
69+ return this . _remoteTerminalChannel . processBinary ( this . id , e ) ;
70+ }
71+
10072 resize ( cols : number , rows : number ) : void {
10173 if ( this . _inReplay || this . _lastDimensions . cols === cols && this . _lastDimensions . rows === rows ) {
10274 return ;
@@ -134,14 +106,6 @@ export class RemotePty extends Disposable implements ITerminalChildProcess {
134106 return this . _remoteTerminalChannel . setUnicodeVersion ( this . id , version ) ;
135107 }
136108
137- async getInitialCwd ( ) : Promise < string > {
138- return this . _properties . initialCwd ;
139- }
140-
141- async getCwd ( ) : Promise < string > {
142- return this . _properties . cwd || this . _properties . initialCwd ;
143- }
144-
145109 async refreshProperty < T extends ProcessPropertyType > ( type : T ) : Promise < IProcessPropertyMap [ T ] > {
146110 return this . _remoteTerminalChannel . refreshProperty ( this . id , type ) ;
147111 }
@@ -150,62 +114,6 @@ export class RemotePty extends Disposable implements ITerminalChildProcess {
150114 return this . _remoteTerminalChannel . updateProperty ( this . id , type , value ) ;
151115 }
152116
153- handleData ( e : string | IProcessDataEvent ) {
154- this . _onProcessData . fire ( e ) ;
155- }
156- handleExit ( e : number | undefined ) {
157- this . _onProcessExit . fire ( e ) ;
158- }
159- processBinary ( e : string ) : Promise < void > {
160- return this . _remoteTerminalChannel . processBinary ( this . id , e ) ;
161- }
162- handleReady ( e : IProcessReadyEvent ) {
163- this . _onProcessReady . fire ( e ) ;
164- }
165- handleDidChangeProperty ( { type, value } : IProcessProperty < any > ) {
166- switch ( type ) {
167- case ProcessPropertyType . Cwd :
168- this . _properties . cwd = value ;
169- break ;
170- case ProcessPropertyType . InitialCwd :
171- this . _properties . initialCwd = value ;
172- break ;
173- case ProcessPropertyType . ResolvedShellLaunchConfig :
174- if ( value . cwd && typeof value . cwd !== 'string' ) {
175- value . cwd = URI . revive ( value . cwd ) ;
176- }
177- }
178- this . _onDidChangeProperty . fire ( { type, value } ) ;
179- }
180-
181- async handleReplay ( e : IPtyHostProcessReplayEvent ) {
182- mark ( `code/terminal/willHandleReplay/${ this . id } ` ) ;
183- try {
184- this . _inReplay = true ;
185- for ( const innerEvent of e . events ) {
186- if ( innerEvent . cols !== 0 || innerEvent . rows !== 0 ) {
187- // never override with 0x0 as that is a marker for an unknown initial size
188- this . _onDidChangeProperty . fire ( { type : ProcessPropertyType . OverrideDimensions , value : { cols : innerEvent . cols , rows : innerEvent . rows , forceExactSize : true } } ) ;
189- }
190- const e : IProcessDataEvent = { data : innerEvent . data , trackCommit : true } ;
191- this . _onProcessData . fire ( e ) ;
192- await e . writePromise ;
193- }
194- } finally {
195- this . _inReplay = false ;
196- }
197-
198- if ( e . commands ) {
199- this . _onRestoreCommands . fire ( e . commands ) ;
200- }
201-
202- // remove size override
203- this . _onDidChangeProperty . fire ( { type : ProcessPropertyType . OverrideDimensions , value : undefined } ) ;
204-
205- mark ( `code/terminal/didHandleReplay/${ this . id } ` ) ;
206- this . _onProcessReplayComplete . fire ( ) ;
207- }
208-
209117 handleOrphanQuestion ( ) {
210118 this . _remoteTerminalChannel . orphanQuestionReply ( this . id ) ;
211119 }
0 commit comments