Initial terminal API onData impl

Part of #23177
This commit is contained in:
Daniel Imms
2017-03-24 14:09:41 -07:00
parent daf6df1e83
commit 804562ed46
8 changed files with 94 additions and 0 deletions

View File

@@ -204,6 +204,7 @@ export abstract class MainThreadTerminalServiceShape {
$hide(terminalId: number): void { throw ni(); }
$sendText(terminalId: number, text: string, addNewLine: boolean): void { throw ni(); }
$show(terminalId: number, preserveFocus: boolean): void { throw ni(); }
$registerOnData(terminalId: number): void { throw ni(); }
}
export interface MyQuickPickItems extends IPickOpenEntry {
@@ -413,6 +414,7 @@ export abstract class ExtHostQuickOpenShape {
export abstract class ExtHostTerminalServiceShape {
$acceptTerminalClosed(id: number): void { throw ni(); }
$acceptTerminalProcessId(id: number, processId: number): void { throw ni(); }
$acceptTerminalData(id: number, data: string): void { throw ni(); }
}
export abstract class ExtHostSCMShape {

View File

@@ -20,6 +20,8 @@ export class ExtHostTerminal implements vscode.Terminal {
private _pidPromise: TPromise<number>;
private _pidPromiseComplete: TValueCallback<number>;
private _onDataCallback: (data: string) => any;
constructor(
proxy: MainThreadTerminalServiceShape,
name?: string,
@@ -67,6 +69,11 @@ export class ExtHostTerminal implements vscode.Terminal {
this._queueApiRequest(this._proxy.$hide, []);
}
public onData(callback: (data: string) => any): void {
this._onDataCallback = callback;
this._queueApiRequest(this._proxy.$registerOnData, []);
}
public dispose(): void {
if (!this._disposed) {
this._disposed = true;
@@ -79,6 +86,10 @@ export class ExtHostTerminal implements vscode.Terminal {
this._pidPromiseComplete = null;
}
public _onData(data: string): void {
this._onDataCallback(data);
}
private _queueApiRequest(callback: (...args: any[]) => void, args: any[]) {
let request: ApiRequest = new ApiRequest(callback, args);
if (!this._id) {
@@ -138,6 +149,11 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
terminal._setProcessId(processId);
}
public $acceptTerminalData(id: number, data: string): void {
let terminal = this._getTerminalById(id);
terminal._onData(data);
}
private _getTerminalById(id: number): ExtHostTerminal {
let index = this._getTerminalIndexById(id);
return index !== null ? this._terminals[index] : null;

View File

@@ -24,6 +24,7 @@ export class MainThreadTerminalService extends MainThreadTerminalServiceShape {
this._toDispose = [];
this._toDispose.push(terminalService.onInstanceDisposed((terminalInstance) => this._onTerminalDisposed(terminalInstance)));
this._toDispose.push(terminalService.onInstanceProcessIdReady((terminalInstance) => this._onTerminalProcessIdReady(terminalInstance)));
this._toDispose.push(terminalService.onInstanceData(event => this._onTerminalData(event.instance, event.data)));
}
public dispose(): void {
@@ -55,6 +56,13 @@ export class MainThreadTerminalService extends MainThreadTerminalServiceShape {
}
}
public $registerOnData(terminalId: number): void {
let terminalInstance = this.terminalService.getInstanceFromId(terminalId);
if (terminalInstance) {
terminalInstance.enableApiOnData();
}
}
public $dispose(terminalId: number): void {
let terminalInstance = this.terminalService.getInstanceFromId(terminalId);
if (terminalInstance) {
@@ -76,4 +84,8 @@ export class MainThreadTerminalService extends MainThreadTerminalServiceShape {
private _onTerminalProcessIdReady(terminalInstance: ITerminalInstance): void {
this._proxy.$acceptTerminalProcessId(terminalInstance.id, terminalInstance.processId);
}
private _onTerminalData(terminalInstance: ITerminalInstance, data: string): void {
this._proxy.$acceptTerminalData(terminalInstance.id, data);
}
}