Skip to content

Commit

Permalink
Start of change state event, clean up ext host events
Browse files Browse the repository at this point in the history
Part of #127717
  • Loading branch information
Tyriar committed Aug 12, 2021
1 parent 84abbfb commit 5bab627
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 9 deletions.
53 changes: 53 additions & 0 deletions src/vs/vscode.proposed.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -887,6 +887,59 @@ declare module 'vscode' {

//#endregion

//#region Terminal state event https://github.com/microsoft/vscode/issues/127717

/**
* Represents the state of a {@link Terminal}.
*/
export interface TerminalState {
/**
* Whether the {@link Terminal} has been interacted with. Interaction means that the
* terminal has sent data to the process which depending on the terminal's _mode_. By
* default input is sent when a key is pressed but based on the terminal's mode it can also
* happen on:
*
* - a pointer click event
* - a pointer scroll event
* - a pointer move event
* - terminal focus in/out
*
* For more information on events that can send data see "DEC Private Mode Set (DECSET)" on
* https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
*/
readonly interactedWith: boolean;
}

export interface Terminal {
/**
* The current state of the {@link Terminal}.
*/
readonly state: TerminalState;
}

/**
* An event representing a change in a {@link Terminal.state terminal's state}.
*/
export interface TerminalStateChangeEvent {
/**
* The {@link Terminal} this event occurred on.
*/
readonly terminal: Terminal;
/**
* The {@link Terminal.state current state} of the {@link Terminal}.
*/
readonly state: TerminalState;
}

export namespace window {
/**
* An {@link Event} which fires when a {@link Terminal.state terminal's state} has changed.
*/
export const onDidChangeTerminalState: Event<TerminalStateChangeEvent>;
}

//#endregion

//#region Terminal name change event https://github.com/microsoft/vscode/issues/114898

export interface Pseudoterminal {
Expand Down
4 changes: 4 additions & 0 deletions src/vs/workbench/api/common/extHost.api.impl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -568,6 +568,10 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
checkProposedApiEnabled(extension);
return extHostTerminalService.onDidChangeTerminalDimensions(listener, thisArg, disposables);
},
onDidChangeTerminalState(listener, thisArg?, disposables?) {
checkProposedApiEnabled(extension);
return extHostTerminalService.onDidChangeTerminalState(listener, thisArg, disposables);
},
onDidWriteTerminalData(listener, thisArg?, disposables?) {
checkProposedApiEnabled(extension);
return extHostTerminalService.onDidWriteTerminalData(listener, thisArg, disposables);
Expand Down
21 changes: 12 additions & 9 deletions src/vs/workbench/api/common/extHostTerminalService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -326,16 +326,18 @@ export abstract class BaseExtHostTerminalService extends Disposable implements I
public get activeTerminal(): vscode.Terminal | undefined { return this._activeTerminal?.value; }
public get terminals(): vscode.Terminal[] { return this._terminals.map(term => term.value); }

protected readonly _onDidCloseTerminal: Emitter<vscode.Terminal> = new Emitter<vscode.Terminal>();
public get onDidCloseTerminal(): Event<vscode.Terminal> { return this._onDidCloseTerminal && this._onDidCloseTerminal.event; }
protected readonly _onDidOpenTerminal: Emitter<vscode.Terminal> = new Emitter<vscode.Terminal>();
public get onDidOpenTerminal(): Event<vscode.Terminal> { return this._onDidOpenTerminal && this._onDidOpenTerminal.event; }
protected readonly _onDidChangeActiveTerminal: Emitter<vscode.Terminal | undefined> = new Emitter<vscode.Terminal | undefined>();
public get onDidChangeActiveTerminal(): Event<vscode.Terminal | undefined> { return this._onDidChangeActiveTerminal && this._onDidChangeActiveTerminal.event; }
protected readonly _onDidChangeTerminalDimensions: Emitter<vscode.TerminalDimensionsChangeEvent> = new Emitter<vscode.TerminalDimensionsChangeEvent>();
public get onDidChangeTerminalDimensions(): Event<vscode.TerminalDimensionsChangeEvent> { return this._onDidChangeTerminalDimensions && this._onDidChangeTerminalDimensions.event; }
protected readonly _onDidCloseTerminal = new Emitter<vscode.Terminal>();
readonly onDidCloseTerminal = this._onDidCloseTerminal.event;
protected readonly _onDidOpenTerminal = new Emitter<vscode.Terminal>();
readonly onDidOpenTerminal = this._onDidOpenTerminal.event;
protected readonly _onDidChangeActiveTerminal = new Emitter<vscode.Terminal | undefined>();
readonly onDidChangeActiveTerminal = this._onDidChangeActiveTerminal.event;
protected readonly _onDidChangeTerminalDimensions = new Emitter<vscode.TerminalDimensionsChangeEvent>();
readonly onDidChangeTerminalDimensions = this._onDidChangeTerminalDimensions.event;
protected readonly _onDidChangeTerminalState = new Emitter<vscode.TerminalDimensionsChangeEvent>();
readonly onDidChangeTerminalState = this._onDidChangeTerminalState.event;
protected readonly _onDidWriteTerminalData: Emitter<vscode.TerminalDataWriteEvent>;
public get onDidWriteTerminalData(): Event<vscode.TerminalDataWriteEvent> { return this._onDidWriteTerminalData && this._onDidWriteTerminalData.event; }
readonly onDidWriteTerminalData: Event<vscode.TerminalDataWriteEvent>;

constructor(
supportsProcesses: boolean,
Expand All @@ -348,6 +350,7 @@ export abstract class BaseExtHostTerminalService extends Disposable implements I
onFirstListenerAdd: () => this._proxy.$startSendingDataEvents(),
onLastListenerRemove: () => this._proxy.$stopSendingDataEvents()
});
this.onDidWriteTerminalData = this._onDidWriteTerminalData.event;
this._proxy.$registerProcessSupport(supportsProcesses);
this._register({
dispose: () => {
Expand Down

0 comments on commit 5bab627

Please sign in to comment.