Implement Terminal.state and event

This commit is contained in:
Daniel Imms
2021-08-12 15:01:34 -07:00
parent 5bab627e05
commit a6ca2cf978

View File

@@ -34,6 +34,7 @@ export interface IExtHostTerminalService extends ExtHostTerminalServiceShape, ID
onDidOpenTerminal: Event<vscode.Terminal>;
onDidChangeActiveTerminal: Event<vscode.Terminal | undefined>;
onDidChangeTerminalDimensions: Event<vscode.TerminalDimensionsChangeEvent>;
onDidChangeTerminalState: Event<vscode.TerminalStateChangeEvent>;
onDidWriteTerminalData: Event<vscode.TerminalDataWriteEvent>;
createTerminal(name?: string, shellPath?: string, shellArgs?: string[] | string): vscode.Terminal;
@@ -63,6 +64,7 @@ export class ExtHostTerminal {
private _pidPromiseComplete: ((value: number | undefined) => any) | undefined;
private _rows: number | undefined;
private _exitStatus: vscode.TerminalExitStatus | undefined;
private _state: vscode.TerminalState = { interactedWith: false };
public isOpen: boolean = false;
@@ -91,6 +93,9 @@ export class ExtHostTerminal {
get exitStatus(): vscode.TerminalExitStatus | undefined {
return that._exitStatus;
},
get state(): vscode.TerminalState {
return that._state;
},
sendText(text: string, addNewLine: boolean = true): void {
that._checkDisposed();
that._proxy.$sendText(that._id, text, addNewLine);
@@ -193,6 +198,14 @@ export class ExtHostTerminal {
return true;
}
public setInteractedWith(): boolean {
if (!this._state.interactedWith) {
this._state = { interactedWith: true };
return true;
}
return false;
}
public _setProcessId(processId: number | undefined): void {
// The event may fire 2 times when the panel is restored
if (this._pidPromiseComplete) {
@@ -334,7 +347,7 @@ export abstract class BaseExtHostTerminalService extends Disposable implements I
readonly onDidChangeActiveTerminal = this._onDidChangeActiveTerminal.event;
protected readonly _onDidChangeTerminalDimensions = new Emitter<vscode.TerminalDimensionsChangeEvent>();
readonly onDidChangeTerminalDimensions = this._onDidChangeTerminalDimensions.event;
protected readonly _onDidChangeTerminalState = new Emitter<vscode.TerminalDimensionsChangeEvent>();
protected readonly _onDidChangeTerminalState = new Emitter<vscode.TerminalStateChangeEvent>();
readonly onDidChangeTerminalState = this._onDidChangeTerminalState.event;
protected readonly _onDidWriteTerminalData: Emitter<vscode.TerminalDataWriteEvent>;
readonly onDidWriteTerminalData: Event<vscode.TerminalDataWriteEvent>;
@@ -550,6 +563,13 @@ export abstract class BaseExtHostTerminalService extends Disposable implements I
public $acceptProcessInput(id: number, data: string): void {
this._terminalProcesses.get(id)?.input(data);
const terminal = this._getTerminalById(id);
if (terminal?.setInteractedWith()) {
this._onDidChangeTerminalState.fire({
terminal: terminal.value,
state: terminal.value.state
});
}
}
public $acceptProcessResize(id: number, cols: number, rows: number): void {