4
4
*--------------------------------------------------------------------------------------------*/
5
5
6
6
import { 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' ;
13
9
import { RemoteTerminalChannelClient } from 'vs/workbench/contrib/terminal/common/remote/remoteTerminalChannel' ;
14
10
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService' ;
15
11
16
- export class RemotePty extends Disposable implements ITerminalChildProcess {
12
+ export class RemotePty extends BasePty implements ITerminalChildProcess {
17
13
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 ;
46
14
47
15
constructor (
48
- readonly id : number ,
49
- readonly shouldPersist : boolean ,
16
+ id : number ,
17
+ shouldPersist : boolean ,
50
18
private readonly _remoteTerminalChannel : RemoteTerminalChannelClient ,
51
19
@IRemoteAgentService private readonly _remoteAgentService : IRemoteAgentService ,
52
20
@ITerminalLogService private readonly _logService : ITerminalLogService
53
21
) {
54
- super ( ) ;
22
+ super ( id , shouldPersist ) ;
55
23
this . _startBarrier = new Barrier ( ) ;
56
24
}
57
25
@@ -97,6 +65,10 @@ export class RemotePty extends Disposable implements ITerminalChildProcess {
97
65
} ) ;
98
66
}
99
67
68
+ processBinary ( e : string ) : Promise < void > {
69
+ return this . _remoteTerminalChannel . processBinary ( this . id , e ) ;
70
+ }
71
+
100
72
resize ( cols : number , rows : number ) : void {
101
73
if ( this . _inReplay || this . _lastDimensions . cols === cols && this . _lastDimensions . rows === rows ) {
102
74
return ;
@@ -134,14 +106,6 @@ export class RemotePty extends Disposable implements ITerminalChildProcess {
134
106
return this . _remoteTerminalChannel . setUnicodeVersion ( this . id , version ) ;
135
107
}
136
108
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
-
145
109
async refreshProperty < T extends ProcessPropertyType > ( type : T ) : Promise < IProcessPropertyMap [ T ] > {
146
110
return this . _remoteTerminalChannel . refreshProperty ( this . id , type ) ;
147
111
}
@@ -150,62 +114,6 @@ export class RemotePty extends Disposable implements ITerminalChildProcess {
150
114
return this . _remoteTerminalChannel . updateProperty ( this . id , type , value ) ;
151
115
}
152
116
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
-
209
117
handleOrphanQuestion ( ) {
210
118
this . _remoteTerminalChannel . orphanQuestionReply ( this . id ) ;
211
119
}
0 commit comments