@@ -14,22 +14,8 @@ import { RemoteTerminalChannelClient } from 'vs/workbench/contrib/terminal/commo
14
14
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService' ;
15
15
16
16
export class RemotePty extends Disposable implements ITerminalChildProcess {
17
- private readonly _onProcessData = this . _register ( new Emitter < string | IProcessDataEvent > ( ) ) ;
18
- readonly onProcessData = this . _onProcessData . event ;
19
- private readonly _onProcessReady = this . _register ( new Emitter < IProcessReadyEvent > ( ) ) ;
20
- readonly onProcessReady = this . _onProcessReady . event ;
21
- private readonly _onDidChangeProperty = this . _register ( new Emitter < IProcessProperty < any > > ( ) ) ;
22
- readonly onDidChangeProperty = this . _onDidChangeProperty . event ;
23
- private readonly _onProcessExit = this . _register ( new Emitter < number | undefined > ( ) ) ;
24
- readonly onProcessExit = this . _onProcessExit . event ;
25
- private readonly _onRestoreCommands = this . _register ( new Emitter < ISerializedCommandDetectionCapability > ( ) ) ;
26
- readonly onRestoreCommands = this . _onRestoreCommands . event ;
27
-
28
- private _startBarrier : Barrier ;
29
-
30
- private _inReplay = false ;
31
-
32
- private _properties : IProcessPropertyMap = {
17
+ private readonly _startBarrier : Barrier ;
18
+ private readonly _properties : IProcessPropertyMap = {
33
19
cwd : '' ,
34
20
initialCwd : '' ,
35
21
fixedDimensions : { cols : undefined , rows : undefined } ,
@@ -41,15 +27,27 @@ export class RemotePty extends Disposable implements ITerminalChildProcess {
41
27
failedShellIntegrationActivation : false ,
42
28
usedShellIntegrationInjection : undefined
43
29
} ;
30
+ private readonly _lastDimensions : { cols : number ; rows : number } = { cols : - 1 , rows : - 1 } ;
44
31
45
- get id ( ) : number { return this . _id ; }
32
+ private _inReplay = false ;
33
+
34
+ private readonly _onProcessData = this . _register ( new Emitter < string | IProcessDataEvent > ( ) ) ;
35
+ readonly onProcessData = this . _onProcessData . event ;
36
+ private readonly _onProcessReady = this . _register ( new Emitter < IProcessReadyEvent > ( ) ) ;
37
+ readonly onProcessReady = this . _onProcessReady . event ;
38
+ private readonly _onDidChangeProperty = this . _register ( new Emitter < IProcessProperty < any > > ( ) ) ;
39
+ readonly onDidChangeProperty = this . _onDidChangeProperty . event ;
40
+ private readonly _onProcessExit = this . _register ( new Emitter < number | undefined > ( ) ) ;
41
+ readonly onProcessExit = this . _onProcessExit . event ;
42
+ private readonly _onRestoreCommands = this . _register ( new Emitter < ISerializedCommandDetectionCapability > ( ) ) ;
43
+ readonly onRestoreCommands = this . _onRestoreCommands . event ;
46
44
47
45
constructor (
48
- private _id : number ,
46
+ readonly id : number ,
49
47
readonly shouldPersist : boolean ,
50
48
private readonly _remoteTerminalChannel : RemoteTerminalChannelClient ,
51
- private readonly _remoteAgentService : IRemoteAgentService ,
52
- private readonly _logService : ILogService
49
+ @ IRemoteAgentService private readonly _remoteAgentService : IRemoteAgentService ,
50
+ @ ILogService private readonly _logService : ILogService
53
51
) {
54
52
super ( ) ;
55
53
this . _startBarrier = new Barrier ( ) ;
@@ -63,9 +61,9 @@ export class RemotePty extends Disposable implements ITerminalChildProcess {
63
61
throw new Error ( 'Could not fetch remote environment' ) ;
64
62
}
65
63
66
- this . _logService . trace ( 'Spawning remote agent process' , { terminalId : this . _id } ) ;
64
+ this . _logService . trace ( 'Spawning remote agent process' , { terminalId : this . id } ) ;
67
65
68
- const startResult = await this . _remoteTerminalChannel . start ( this . _id ) ;
66
+ const startResult = await this . _remoteTerminalChannel . start ( this . id ) ;
69
67
70
68
if ( startResult && 'message' in startResult ) {
71
69
// An error occurred
@@ -83,7 +81,7 @@ export class RemotePty extends Disposable implements ITerminalChildProcess {
83
81
84
82
shutdown ( immediate : boolean ) : void {
85
83
this . _startBarrier . wait ( ) . then ( _ => {
86
- this . _remoteTerminalChannel . shutdown ( this . _id , immediate ) ;
84
+ this . _remoteTerminalChannel . shutdown ( this . id , immediate ) ;
87
85
} ) ;
88
86
}
89
87
@@ -93,17 +91,18 @@ export class RemotePty extends Disposable implements ITerminalChildProcess {
93
91
}
94
92
95
93
this . _startBarrier . wait ( ) . then ( _ => {
96
- this . _remoteTerminalChannel . input ( this . _id , data ) ;
94
+ this . _remoteTerminalChannel . input ( this . id , data ) ;
97
95
} ) ;
98
96
}
99
97
100
98
resize ( cols : number , rows : number ) : void {
101
- if ( this . _inReplay ) {
99
+ if ( this . _inReplay || this . _lastDimensions . cols === cols && this . _lastDimensions . rows === rows ) {
102
100
return ;
103
101
}
104
102
this . _startBarrier . wait ( ) . then ( _ => {
105
-
106
- this . _remoteTerminalChannel . resize ( this . _id , cols , rows ) ;
103
+ this . _lastDimensions . cols = cols ;
104
+ this . _lastDimensions . rows = rows ;
105
+ this . _remoteTerminalChannel . resize ( this . id , cols , rows ) ;
107
106
} ) ;
108
107
}
109
108
@@ -125,12 +124,12 @@ export class RemotePty extends Disposable implements ITerminalChildProcess {
125
124
}
126
125
127
126
this . _startBarrier . wait ( ) . then ( _ => {
128
- this . _remoteTerminalChannel . acknowledgeDataEvent ( this . _id , charCount ) ;
127
+ this . _remoteTerminalChannel . acknowledgeDataEvent ( this . id , charCount ) ;
129
128
} ) ;
130
129
}
131
130
132
131
async setUnicodeVersion ( version : '6' | '11' ) : Promise < void > {
133
- return this . _remoteTerminalChannel . setUnicodeVersion ( this . _id , version ) ;
132
+ return this . _remoteTerminalChannel . setUnicodeVersion ( this . id , version ) ;
134
133
}
135
134
136
135
async getInitialCwd ( ) : Promise < string > {
@@ -142,11 +141,11 @@ export class RemotePty extends Disposable implements ITerminalChildProcess {
142
141
}
143
142
144
143
async refreshProperty < T extends ProcessPropertyType > ( type : T ) : Promise < IProcessPropertyMap [ T ] > {
145
- return this . _remoteTerminalChannel . refreshProperty ( this . _id , type ) ;
144
+ return this . _remoteTerminalChannel . refreshProperty ( this . id , type ) ;
146
145
}
147
146
148
147
async updateProperty < T extends ProcessPropertyType > ( type : T , value : IProcessPropertyMap [ T ] ) : Promise < void > {
149
- return this . _remoteTerminalChannel . updateProperty ( this . _id , type , value ) ;
148
+ return this . _remoteTerminalChannel . updateProperty ( this . id , type , value ) ;
150
149
}
151
150
152
151
handleData ( e : string | IProcessDataEvent ) {
@@ -156,7 +155,7 @@ export class RemotePty extends Disposable implements ITerminalChildProcess {
156
155
this . _onProcessExit . fire ( e ) ;
157
156
}
158
157
processBinary ( e : string ) : Promise < void > {
159
- return this . _remoteTerminalChannel . processBinary ( this . _id , e ) ;
158
+ return this . _remoteTerminalChannel . processBinary ( this . id , e ) ;
160
159
}
161
160
handleReady ( e : IProcessReadyEvent ) {
162
161
this . _onProcessReady . fire ( e ) ;
@@ -202,7 +201,7 @@ export class RemotePty extends Disposable implements ITerminalChildProcess {
202
201
}
203
202
204
203
handleOrphanQuestion ( ) {
205
- this . _remoteTerminalChannel . orphanQuestionReply ( this . _id ) ;
204
+ this . _remoteTerminalChannel . orphanQuestionReply ( this . id ) ;
206
205
}
207
206
208
207
async getLatency ( ) : Promise < number > {
0 commit comments