@@ -12,7 +12,7 @@ import { URI } from 'vs/base/common/uri';
12
12
import { getSystemShell } from 'vs/base/node/shell' ;
13
13
import { ILogService } from 'vs/platform/log/common/log' ;
14
14
import { RequestStore } from 'vs/platform/terminal/common/requestStore' ;
15
- import { IProcessDataEvent , IProcessReadyEvent , IPtyService , IRawTerminalInstanceLayoutInfo , IReconnectConstants , IRequestResolveVariablesEvent , IShellLaunchConfig , ITerminalDimensionsOverride , ITerminalInstanceLayoutInfoById , ITerminalLaunchError , ITerminalsLayoutInfo , ITerminalTabLayoutInfoById , TerminalIcon , IProcessProperty , TerminalShellType , TitleEventSource , ProcessPropertyType , ProcessCapability , IProcessPropertyMap , IFixedTerminalDimensions } from 'vs/platform/terminal/common/terminal' ;
15
+ import { IProcessDataEvent , IProcessReadyEvent , IPtyService , IRawTerminalInstanceLayoutInfo , IReconnectConstants , IRequestResolveVariablesEvent , IShellLaunchConfig , ITerminalInstanceLayoutInfoById , ITerminalLaunchError , ITerminalsLayoutInfo , ITerminalTabLayoutInfoById , TerminalIcon , IProcessProperty , TitleEventSource , ProcessPropertyType , IProcessPropertyMap , IFixedTerminalDimensions , ProcessCapability } from 'vs/platform/terminal/common/terminal' ;
16
16
import { TerminalDataBufferer } from 'vs/platform/terminal/common/terminalDataBuffering' ;
17
17
import { escapeNonWindowsPath } from 'vs/platform/terminal/common/terminalEnvironment' ;
18
18
import { Terminal as XtermTerminal } from 'xterm-headless' ;
@@ -44,24 +44,12 @@ export class PtyService extends Disposable implements IPtyService {
44
44
readonly onProcessData = this . _onProcessData . event ;
45
45
private readonly _onProcessReplay = this . _register ( new Emitter < { id : number , event : IPtyHostProcessReplayEvent } > ( ) ) ;
46
46
readonly onProcessReplay = this . _onProcessReplay . event ;
47
- private readonly _onProcessExit = this . _register ( new Emitter < { id : number , event : number | undefined } > ( ) ) ;
48
- readonly onProcessExit = this . _onProcessExit . event ;
49
47
private readonly _onProcessReady = this . _register ( new Emitter < { id : number , event : { pid : number , cwd : string , capabilities : ProcessCapability [ ] } } > ( ) ) ;
50
48
readonly onProcessReady = this . _onProcessReady . event ;
51
- private readonly _onProcessTitleChanged = this . _register ( new Emitter < { id : number , event : string } > ( ) ) ;
52
- readonly onProcessTitleChanged = this . _onProcessTitleChanged . event ;
53
- private readonly _onProcessShellTypeChanged = this . _register ( new Emitter < { id : number , event : TerminalShellType } > ( ) ) ;
54
- readonly onProcessShellTypeChanged = this . _onProcessShellTypeChanged . event ;
55
- private readonly _onProcessOverrideDimensions = this . _register ( new Emitter < { id : number , event : ITerminalDimensionsOverride | undefined } > ( ) ) ;
56
- readonly onProcessOverrideDimensions = this . _onProcessOverrideDimensions . event ;
57
- private readonly _onProcessResolvedShellLaunchConfig = this . _register ( new Emitter < { id : number , event : IShellLaunchConfig } > ( ) ) ;
58
- readonly onProcessResolvedShellLaunchConfig = this . _onProcessResolvedShellLaunchConfig . event ;
59
49
private readonly _onProcessOrphanQuestion = this . _register ( new Emitter < { id : number } > ( ) ) ;
60
50
readonly onProcessOrphanQuestion = this . _onProcessOrphanQuestion . event ;
61
51
private readonly _onDidRequestDetach = this . _register ( new Emitter < { requestId : number , workspaceId : string , instanceId : number } > ( ) ) ;
62
52
readonly onDidRequestDetach = this . _onDidRequestDetach . event ;
63
- private readonly _onProcessDidChangeHasChildProcesses = this . _register ( new Emitter < { id : number , event : boolean } > ( ) ) ;
64
- readonly onProcessDidChangeHasChildProcesses = this . _onProcessDidChangeHasChildProcesses . event ;
65
53
private readonly _onDidChangeProperty = this . _register ( new Emitter < { id : number , property : IProcessProperty < any > } > ( ) ) ;
66
54
readonly onDidChangeProperty = this . _onDidChangeProperty . event ;
67
55
@@ -195,31 +183,21 @@ export class PtyService extends Disposable implements IPtyService {
195
183
const id = ++ this . _lastPtyId ;
196
184
const process = new TerminalProcess ( shellLaunchConfig , cwd , cols , rows , env , executableEnv , windowsEnableConpty , this . _logService ) ;
197
185
process . onProcessData ( event => this . _onProcessData . fire ( { id, event } ) ) ;
198
- process . onProcessExit ( event => this . _onProcessExit . fire ( { id, event } ) ) ;
199
- if ( process . onProcessOverrideDimensions ) {
200
- process . onProcessOverrideDimensions ( event => this . _onProcessOverrideDimensions . fire ( { id, event } ) ) ;
201
- }
202
- if ( process . onProcessResolvedShellLaunchConfig ) {
203
- process . onProcessResolvedShellLaunchConfig ( event => this . _onProcessResolvedShellLaunchConfig . fire ( { id, event } ) ) ;
204
- }
205
- if ( process . onDidChangeHasChildProcesses ) {
206
- process . onDidChangeHasChildProcesses ( event => this . _onProcessDidChangeHasChildProcesses . fire ( { id, event } ) ) ;
207
- }
208
186
const processLaunchOptions : IPersistentTerminalProcessLaunchOptions = {
209
187
env,
210
188
executableEnv,
211
189
windowsEnableConpty
212
190
} ;
213
191
const persistentProcess = new PersistentTerminalProcess ( id , process , workspaceId , workspaceName , shouldPersist , cols , rows , processLaunchOptions , unicodeVersion , this . _reconnectConstants , this . _logService , isReviving ? shellLaunchConfig . initialText : undefined , shellLaunchConfig . icon , shellLaunchConfig . color , shellLaunchConfig . fixedDimensions ) ;
214
- process . onProcessExit ( ( ) => {
215
- persistentProcess . dispose ( ) ;
216
- this . _ptys . delete ( id ) ;
192
+ process . onDidChangeProperty ( property => {
193
+ if ( property . type === ProcessPropertyType . Exit ) {
194
+ persistentProcess . dispose ( ) ;
195
+ this . _ptys . delete ( id ) ;
196
+ }
197
+ this . _onDidChangeProperty . fire ( { id, property } ) ;
217
198
} ) ;
218
- process . onDidChangeProperty ( property => this . _onDidChangeProperty . fire ( { id, property } ) ) ;
219
199
persistentProcess . onProcessReplay ( event => this . _onProcessReplay . fire ( { id, event } ) ) ;
220
200
persistentProcess . onProcessReady ( event => this . _onProcessReady . fire ( { id, event } ) ) ;
221
- persistentProcess . onProcessTitleChanged ( event => this . _onProcessTitleChanged . fire ( { id, event } ) ) ;
222
- persistentProcess . onProcessShellTypeChanged ( event => this . _onProcessShellTypeChanged . fire ( { id, event } ) ) ;
223
201
persistentProcess . onProcessOrphanQuestion ( ( ) => this . _onProcessOrphanQuestion . fire ( { id } ) ) ;
224
202
persistentProcess . onDidChangeProperty ( property => this . _onDidChangeProperty . fire ( { id, property } ) ) ;
225
203
this . _ptys . set ( id , persistentProcess ) ;
@@ -428,12 +406,6 @@ export class PersistentTerminalProcess extends Disposable {
428
406
readonly onProcessReplay = this . _onProcessReplay . event ;
429
407
private readonly _onProcessReady = this . _register ( new Emitter < IProcessReadyEvent > ( ) ) ;
430
408
readonly onProcessReady = this . _onProcessReady . event ;
431
- private readonly _onProcessTitleChanged = this . _register ( new Emitter < string > ( ) ) ;
432
- readonly onProcessTitleChanged = this . _onProcessTitleChanged . event ;
433
- private readonly _onProcessShellTypeChanged = this . _register ( new Emitter < TerminalShellType > ( ) ) ;
434
- readonly onProcessShellTypeChanged = this . _onProcessShellTypeChanged . event ;
435
- private readonly _onProcessOverrideDimensions = this . _register ( new Emitter < ITerminalDimensionsOverride | undefined > ( ) ) ;
436
- readonly onProcessOverrideDimensions = this . _onProcessOverrideDimensions . event ;
437
409
private readonly _onProcessData = this . _register ( new Emitter < string > ( ) ) ;
438
410
readonly onProcessData = this . _onProcessData . event ;
439
411
private readonly _onProcessOrphanQuestion = this . _register ( new Emitter < void > ( ) ) ;
@@ -511,20 +483,24 @@ export class PersistentTerminalProcess extends Disposable {
511
483
this . _logService . info ( `Persistent process "${ this . _persistentProcessId } ": The short reconnection grace time of ${ printTime ( reconnectConstants . shortGraceTime ) } has expired, shutting down pid ${ this . _pid } ` ) ;
512
484
this . shutdown ( true ) ;
513
485
} , reconnectConstants . shortGraceTime ) ) ;
514
-
486
+ this . _register ( this . _terminalProcess . onDidChangeProperty ( e => {
487
+ if ( e . type === ProcessPropertyType . Exit ) {
488
+ this . _bufferer . stopBuffering ( this . _persistentProcessId ) ;
489
+ }
490
+ this . _onDidChangeProperty . fire ( e ) ;
491
+ } ) ) ;
515
492
this . _register ( this . _terminalProcess . onProcessReady ( e => {
516
493
this . _pid = e . pid ;
517
494
this . _cwd = e . cwd ;
518
495
this . _onProcessReady . fire ( e ) ;
519
496
} ) ) ;
520
- this . _register ( this . _terminalProcess . onProcessTitleChanged ( e => this . _onProcessTitleChanged . fire ( e ) ) ) ;
521
- this . _register ( this . _terminalProcess . onProcessShellTypeChanged ( e => this . _onProcessShellTypeChanged . fire ( e ) ) ) ;
522
- this . _register ( this . _terminalProcess . onDidChangeProperty ( e => this . _onDidChangeProperty . fire ( e ) ) ) ;
497
+ this . _register ( this . _terminalProcess . onDidChangeProperty ( e => {
498
+ this . _onDidChangeProperty . fire ( e ) ;
499
+ } ) ) ;
523
500
524
501
// Data buffering to reduce the amount of messages going to the renderer
525
502
this . _bufferer = new TerminalDataBufferer ( ( _ , data ) => this . _onProcessData . fire ( data ) ) ;
526
503
this . _register ( this . _bufferer . startBuffering ( this . _persistentProcessId , this . _terminalProcess . onProcessData ) ) ;
527
- this . _register ( this . _terminalProcess . onProcessExit ( ( ) => this . _bufferer . stopBuffering ( this . _persistentProcessId ) ) ) ;
528
504
529
505
// Data recording for reconnect
530
506
this . _register ( this . onProcessData ( e => this . _serializer . handleData ( e ) ) ) ;
@@ -579,8 +555,8 @@ export class PersistentTerminalProcess extends Disposable {
579
555
}
580
556
} else {
581
557
this . _onProcessReady . fire ( { pid : this . _pid , cwd : this . _cwd , capabilities : this . _terminalProcess . capabilities , requiresWindowsMode : isWindows && getWindowsBuildNumber ( ) < 21376 } ) ;
582
- this . _onProcessTitleChanged . fire ( this . _terminalProcess . currentTitle ) ;
583
- this . _onProcessShellTypeChanged . fire ( this . _terminalProcess . shellType ) ;
558
+ this . _onDidChangeProperty . fire ( { type : ProcessPropertyType . Title , value : this . _terminalProcess . currentTitle } ) ;
559
+ this . _onDidChangeProperty . fire ( { type : ProcessPropertyType . ShellType , value : this . _terminalProcess . shellType } ) ;
584
560
this . triggerReplay ( ) ;
585
561
}
586
562
return undefined ;
0 commit comments