diff --git a/src/vs/workbench/api/common/extHost.api.impl.ts b/src/vs/workbench/api/common/extHost.api.impl.ts index acdb35b1b1e..e04d6de10a3 100644 --- a/src/vs/workbench/api/common/extHost.api.impl.ts +++ b/src/vs/workbench/api/common/extHost.api.impl.ts @@ -698,6 +698,15 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I checkProposedApiEnabled(extension, 'terminalDataWriteEvent'); return extHostTerminalService.onDidWriteTerminalData(listener, thisArg, disposables); }, + onWillExecuteTerminalCommand(listener, thisArg?, disposables?) { + checkProposedApiEnabled(extension, 'terminalExecuteCommandEvent'); + return extHostTerminalService.onWillExecuteTerminalCommand(listener, thisArg, disposables); + + }, + onDidExecuteTerminalCommand(listener, thisArg?, disposables?) { + checkProposedApiEnabled(extension, 'terminalExecuteCommandEvent'); + return extHostTerminalService.onDidExecuteTerminalCommand(listener, thisArg, disposables); + }, get state() { return extHostWindow.getState(extension); }, diff --git a/src/vs/workbench/api/common/extHostTerminalService.ts b/src/vs/workbench/api/common/extHostTerminalService.ts index 84f2cac70c1..92d2e7ebf62 100644 --- a/src/vs/workbench/api/common/extHostTerminalService.ts +++ b/src/vs/workbench/api/common/extHostTerminalService.ts @@ -34,13 +34,15 @@ export interface IExtHostTerminalService extends ExtHostTerminalServiceShape, ID activeTerminal: vscode.Terminal | undefined; terminals: vscode.Terminal[]; - onDidCloseTerminal: Event; - onDidOpenTerminal: Event; - onDidChangeActiveTerminal: Event; - onDidChangeTerminalDimensions: Event; - onDidChangeTerminalState: Event; - onDidWriteTerminalData: Event; - onDidChangeShell: Event; + readonly onDidCloseTerminal: Event; + readonly onDidOpenTerminal: Event; + readonly onDidChangeActiveTerminal: Event; + readonly onDidChangeTerminalDimensions: Event; + readonly onDidChangeTerminalState: Event; + readonly onDidWriteTerminalData: Event; + readonly onWillExecuteTerminalCommand: Event; + readonly onDidExecuteTerminalCommand: Event; + readonly onDidChangeShell: Event; createTerminal(name?: string, shellPath?: string, shellArgs?: readonly string[] | string): vscode.Terminal; createTerminalFromOptions(options: vscode.TerminalOptions, internalOptions?: ITerminalInternalOptions): vscode.Terminal; @@ -393,8 +395,15 @@ export abstract class BaseExtHostTerminalService extends Disposable implements I readonly onDidChangeTerminalDimensions = this._onDidChangeTerminalDimensions.event; protected readonly _onDidChangeTerminalState = new Emitter(); readonly onDidChangeTerminalState = this._onDidChangeTerminalState.event; - protected readonly _onDidWriteTerminalData: Emitter; - get onDidWriteTerminalData(): Event { return this._onDidWriteTerminalData.event; } + protected readonly _onDidWriteTerminalData: Emitter = new Emitter({ + onWillAddFirstListener: () => this._proxy.$startSendingDataEvents(), + onDidRemoveLastListener: () => this._proxy.$stopSendingDataEvents() + }); + readonly onDidWriteTerminalData = this._onDidWriteTerminalData.event; + protected readonly _onWillExecuteCommand = new Emitter(); + readonly onWillExecuteTerminalCommand = this._onWillExecuteCommand.event; + protected readonly _onDidExecuteCommand = new Emitter(); + readonly onDidExecuteTerminalCommand = this._onDidExecuteCommand.event; protected readonly _onDidChangeShell = new Emitter(); readonly onDidChangeShell = this._onDidChangeShell.event; @@ -406,10 +415,6 @@ export abstract class BaseExtHostTerminalService extends Disposable implements I super(); this._proxy = extHostRpc.getProxy(MainContext.MainThreadTerminalService); this._bufferer = new TerminalDataBufferer(this._proxy.$sendProcessData); - this._onDidWriteTerminalData = new Emitter({ - onWillAddFirstListener: () => this._proxy.$startSendingDataEvents(), - onDidRemoveLastListener: () => this._proxy.$stopSendingDataEvents() - }); this._proxy.$registerProcessSupport(supportsProcesses); this._register({ dispose: () => { diff --git a/src/vscode-dts/vscode.proposed.terminalExecuteCommandEvent.d.ts b/src/vscode-dts/vscode.proposed.terminalExecuteCommandEvent.d.ts index 68391fc7293..bfd2e10a196 100644 --- a/src/vscode-dts/vscode.proposed.terminalExecuteCommandEvent.d.ts +++ b/src/vscode-dts/vscode.proposed.terminalExecuteCommandEvent.d.ts @@ -7,13 +7,17 @@ declare module 'vscode' { // https://github.com/microsoft/vscode/issues/145234 + export interface TerminalWillExecuteCommandEvent { + terminal: Terminal; + command: TerminalCommand>; + } + export interface TerminalExecuteCommandEvent { terminal: Terminal; command: TerminalCommand; } - // NOTE: The generic here is for the future executeCommand function where the result isn't available. - export interface TerminalCommand> { + export interface TerminalCommand> { /** * The {@link Terminal} the command was executed in. */ @@ -50,7 +54,7 @@ declare module 'vscode' { * An event that is emitted when a terminal with shell integration activated has started * executing a command. */ - export const onWillExecuteTerminalCommand: Event>; + export const onWillExecuteTerminalCommand: Event; /** * An event that is emitted when a terminal with shell integration activated has completed * executing a command.