提交 e6254db3 编写于 作者: D Daniel Imms

Recreate pid promise when reusing terminals

上级 461bf720
...@@ -36,7 +36,6 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape ...@@ -36,7 +36,6 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape
this._toDispose.push(terminalService.onInstanceRequestExtHostProcess(request => this._onTerminalRequestExtHostProcess(request))); this._toDispose.push(terminalService.onInstanceRequestExtHostProcess(request => this._onTerminalRequestExtHostProcess(request)));
this._toDispose.push(terminalService.onActiveInstanceChanged(instance => this._onActiveTerminalChanged(instance ? instance.id : undefined))); this._toDispose.push(terminalService.onActiveInstanceChanged(instance => this._onActiveTerminalChanged(instance ? instance.id : undefined)));
this._toDispose.push(terminalService.onInstanceTitleChanged(instance => this._onTitleChanged(instance.id, instance.title))); this._toDispose.push(terminalService.onInstanceTitleChanged(instance => this._onTitleChanged(instance.id, instance.title)));
this._toDispose.push(terminalService.onInstanceProcessLaunching(instance => this._onProcessLaunching(instance.id)));
// Set initial ext host state // Set initial ext host state
this.terminalService.terminalInstances.forEach(t => { this.terminalService.terminalInstances.forEach(t => {
...@@ -173,10 +172,6 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape ...@@ -173,10 +172,6 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape
this._proxy.$acceptTerminalTitleChange(terminalId, name); this._proxy.$acceptTerminalTitleChange(terminalId, name);
} }
private _onProcessLaunching(terminalId: number): void {
this._proxy.$acceptTerminalProcessLaunching(terminalId);
}
private _onTerminalRendererInput(terminalId: number, data: string): void { private _onTerminalRendererInput(terminalId: number, data: string): void {
this._proxy.$acceptTerminalRendererInput(terminalId, data); this._proxy.$acceptTerminalRendererInput(terminalId, data);
} }
......
...@@ -915,7 +915,6 @@ export interface ExtHostTerminalServiceShape { ...@@ -915,7 +915,6 @@ export interface ExtHostTerminalServiceShape {
$acceptTerminalProcessId(id: number, processId: number): void; $acceptTerminalProcessId(id: number, processId: number): void;
$acceptTerminalProcessData(id: number, data: string): void; $acceptTerminalProcessData(id: number, data: string): void;
$acceptTerminalRendererInput(id: number, data: string): void; $acceptTerminalRendererInput(id: number, data: string): void;
$acceptTerminalProcessLaunching(id: number): void;
$acceptTerminalTitleChange(id: number, name: string): void; $acceptTerminalTitleChange(id: number, name: string): void;
$acceptTerminalRendererDimensions(id: number, cols: number, rows: number): void; $acceptTerminalRendererDimensions(id: number, cols: number, rows: number): void;
$createProcess(id: number, shellLaunchConfig: ShellLaunchConfigDto, activeWorkspaceRootUri: URI, cols: number, rows: number): void; $createProcess(id: number, shellLaunchConfig: ShellLaunchConfigDto, activeWorkspaceRootUri: URI, cols: number, rows: number): void;
......
...@@ -90,7 +90,13 @@ export class ExtHostTerminal extends BaseExtHostTerminal implements vscode.Termi ...@@ -90,7 +90,13 @@ export class ExtHostTerminal extends BaseExtHostTerminal implements vscode.Termi
pid?: number pid?: number
) { ) {
super(proxy, id); super(proxy, id);
this._createProcessIdPromise(pid); this._pidPromise = new Promise<number>(c => {
if (pid === RENDERER_NO_PROCESS_ID) {
c(undefined);
} else {
this._pidPromiseComplete = c;
}
});
} }
public create( public create(
...@@ -133,21 +139,18 @@ export class ExtHostTerminal extends BaseExtHostTerminal implements vscode.Termi ...@@ -133,21 +139,18 @@ export class ExtHostTerminal extends BaseExtHostTerminal implements vscode.Termi
this._queueApiRequest(this._proxy.$hide, []); this._queueApiRequest(this._proxy.$hide, []);
} }
public _createProcessIdPromise(pid?: number): void {
this._pidPromise = new Promise<number>(c => {
if (pid === RENDERER_NO_PROCESS_ID) {
c(undefined);
} else {
this._pidPromiseComplete = c;
}
});
}
public _setProcessId(processId: number): void { public _setProcessId(processId: number): void {
// The event may fire 2 times when the panel is restored // The event may fire 2 times when the panel is restored
if (this._pidPromiseComplete) { if (this._pidPromiseComplete) {
this._pidPromiseComplete(processId); this._pidPromiseComplete(processId);
this._pidPromiseComplete = null; this._pidPromiseComplete = null;
} else {
// Recreate the promise if this is the nth processId set (eg. reused task terminals)
this._pidPromise.then(pid => {
if (pid !== processId) {
this._pidPromise = Promise.resolve(processId);
}
});
} }
} }
...@@ -355,10 +358,6 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape { ...@@ -355,10 +358,6 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
this._performTerminalIdAction(id, terminal => terminal._setProcessId(processId)); this._performTerminalIdAction(id, terminal => terminal._setProcessId(processId));
} }
public $acceptTerminalProcessLaunching(id: number): void {
this._performTerminalIdAction(id, terminal => terminal._createProcessIdPromise());
}
private _performTerminalIdAction(id: number, callback: (terminal: ExtHostTerminal) => void): void { private _performTerminalIdAction(id: number, callback: (terminal: ExtHostTerminal) => void): void {
let terminal = this._getTerminalById(id); let terminal = this._getTerminalById(id);
if (terminal) { if (terminal) {
......
...@@ -187,7 +187,6 @@ export interface ITerminalService { ...@@ -187,7 +187,6 @@ export interface ITerminalService {
onTabDisposed: Event<ITerminalTab>; onTabDisposed: Event<ITerminalTab>;
onInstanceCreated: Event<ITerminalInstance>; onInstanceCreated: Event<ITerminalInstance>;
onInstanceDisposed: Event<ITerminalInstance>; onInstanceDisposed: Event<ITerminalInstance>;
onInstanceProcessLaunching: Event<ITerminalInstance>;
onInstanceProcessIdReady: Event<ITerminalInstance>; onInstanceProcessIdReady: Event<ITerminalInstance>;
onInstanceDimensionsChanged: Event<ITerminalInstance>; onInstanceDimensionsChanged: Event<ITerminalInstance>;
onInstanceRequestExtHostProcess: Event<ITerminalProcessExtHostRequest>; onInstanceRequestExtHostProcess: Event<ITerminalProcessExtHostRequest>;
...@@ -323,8 +322,6 @@ export interface ITerminalInstance { ...@@ -323,8 +322,6 @@ export interface ITerminalInstance {
onFocused: Event<ITerminalInstance>; onFocused: Event<ITerminalInstance>;
onProcessLaunching: Event<ITerminalInstance>;
onProcessIdReady: Event<ITerminalInstance>; onProcessIdReady: Event<ITerminalInstance>;
onRequestExtHostProcess: Event<ITerminalInstance>; onRequestExtHostProcess: Event<ITerminalInstance>;
......
...@@ -46,8 +46,6 @@ export abstract class TerminalService implements ITerminalService { ...@@ -46,8 +46,6 @@ export abstract class TerminalService implements ITerminalService {
public get onInstancesChanged(): Event<void> { return this._onInstancesChanged.event; } public get onInstancesChanged(): Event<void> { return this._onInstancesChanged.event; }
protected readonly _onInstanceTitleChanged: Emitter<ITerminalInstance> = new Emitter<ITerminalInstance>(); protected readonly _onInstanceTitleChanged: Emitter<ITerminalInstance> = new Emitter<ITerminalInstance>();
public get onInstanceTitleChanged(): Event<ITerminalInstance> { return this._onInstanceTitleChanged.event; } public get onInstanceTitleChanged(): Event<ITerminalInstance> { return this._onInstanceTitleChanged.event; }
protected readonly _onInstanceProcessLaunching: Emitter<ITerminalInstance> = new Emitter<ITerminalInstance>();
public get onInstanceProcessLaunching(): Event<ITerminalInstance> { return this._onInstanceProcessLaunching.event; }
protected readonly _onActiveInstanceChanged: Emitter<ITerminalInstance> = new Emitter<ITerminalInstance>(); protected readonly _onActiveInstanceChanged: Emitter<ITerminalInstance> = new Emitter<ITerminalInstance>();
public get onActiveInstanceChanged(): Event<ITerminalInstance> { return this._onActiveInstanceChanged.event; } public get onActiveInstanceChanged(): Event<ITerminalInstance> { return this._onActiveInstanceChanged.event; }
protected readonly _onTabDisposed: Emitter<ITerminalTab> = new Emitter<ITerminalTab>(); protected readonly _onTabDisposed: Emitter<ITerminalTab> = new Emitter<ITerminalTab>();
...@@ -288,7 +286,6 @@ export abstract class TerminalService implements ITerminalService { ...@@ -288,7 +286,6 @@ export abstract class TerminalService implements ITerminalService {
instance.addDisposable(instance.onTitleChanged(this._onInstanceTitleChanged.fire, this._onInstanceTitleChanged)); instance.addDisposable(instance.onTitleChanged(this._onInstanceTitleChanged.fire, this._onInstanceTitleChanged));
instance.addDisposable(instance.onProcessIdReady(this._onInstanceProcessIdReady.fire, this._onInstanceProcessIdReady)); instance.addDisposable(instance.onProcessIdReady(this._onInstanceProcessIdReady.fire, this._onInstanceProcessIdReady));
instance.addDisposable(instance.onDimensionsChanged(() => this._onInstanceDimensionsChanged.fire(instance))); instance.addDisposable(instance.onDimensionsChanged(() => this._onInstanceDimensionsChanged.fire(instance)));
instance.addDisposable(instance.onProcessLaunching(() => this._onInstanceProcessLaunching.fire(instance)));
instance.addDisposable(instance.onFocus(this._onActiveInstanceChanged.fire, this._onActiveInstanceChanged)); instance.addDisposable(instance.onFocus(this._onActiveInstanceChanged.fire, this._onActiveInstanceChanged));
} }
......
...@@ -104,8 +104,6 @@ export class TerminalInstance implements ITerminalInstance { ...@@ -104,8 +104,6 @@ export class TerminalInstance implements ITerminalInstance {
public get onProcessIdReady(): Event<ITerminalInstance> { return this._onProcessIdReady.event; } public get onProcessIdReady(): Event<ITerminalInstance> { return this._onProcessIdReady.event; }
private readonly _onTitleChanged: Emitter<ITerminalInstance> = new Emitter<ITerminalInstance>(); private readonly _onTitleChanged: Emitter<ITerminalInstance> = new Emitter<ITerminalInstance>();
public get onTitleChanged(): Event<ITerminalInstance> { return this._onTitleChanged.event; } public get onTitleChanged(): Event<ITerminalInstance> { return this._onTitleChanged.event; }
private readonly _onProcessLaunching: Emitter<ITerminalInstance> = new Emitter<ITerminalInstance>();
public get onProcessLaunching(): Event<ITerminalInstance> { return this._onProcessLaunching.event; }
private readonly _onData: Emitter<string> = new Emitter<string>(); private readonly _onData: Emitter<string> = new Emitter<string>();
public get onData(): Event<string> { return this._onData.event; } public get onData(): Event<string> { return this._onData.event; }
private readonly _onLineData: Emitter<string> = new Emitter<string>(); private readonly _onLineData: Emitter<string> = new Emitter<string>();
...@@ -786,8 +784,6 @@ export class TerminalInstance implements ITerminalInstance { ...@@ -786,8 +784,6 @@ export class TerminalInstance implements ITerminalInstance {
this._processManager.onProcessExit(exitCode => this._onProcessExit(exitCode)); this._processManager.onProcessExit(exitCode => this._onProcessExit(exitCode));
this._processManager.onProcessData(data => this._onData.fire(data)); this._processManager.onProcessData(data => this._onData.fire(data));
this._onProcessLaunching.fire(this);
if (this._shellLaunchConfig.name) { if (this._shellLaunchConfig.name) {
this.setTitle(this._shellLaunchConfig.name, false); this.setTitle(this._shellLaunchConfig.name, false);
} else { } else {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册