mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-26 03:29:00 +01:00
@@ -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 {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user