diff --git a/src/vs/workbench/api/common/extHostTerminalService.ts b/src/vs/workbench/api/common/extHostTerminalService.ts index 9a9273a2c10..e710b164288 100644 --- a/src/vs/workbench/api/common/extHostTerminalService.ts +++ b/src/vs/workbench/api/common/extHostTerminalService.ts @@ -34,6 +34,7 @@ export interface IExtHostTerminalService extends ExtHostTerminalServiceShape, ID onDidOpenTerminal: Event; onDidChangeActiveTerminal: Event; onDidChangeTerminalDimensions: Event; + onDidChangeTerminalState: Event; onDidWriteTerminalData: Event; 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(); readonly onDidChangeTerminalDimensions = this._onDidChangeTerminalDimensions.event; - protected readonly _onDidChangeTerminalState = new Emitter(); + protected readonly _onDidChangeTerminalState = new Emitter(); readonly onDidChangeTerminalState = this._onDidChangeTerminalState.event; protected readonly _onDidWriteTerminalData: Emitter; readonly onDidWriteTerminalData: Event; @@ -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 {