mirror of
https://github.com/microsoft/vscode.git
synced 2026-08-19 14:02:34 +01:00
Implement proposed TerminalState.isShellIntegrationActivated
This is not protected to only proposed extensions, not clear how to do it easily for a property. Part of #205058
This commit is contained in:
@@ -84,6 +84,11 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape
|
||||
this._store.add(_terminalService.onDidChangeActiveInstance(instance => this._onActiveTerminalChanged(instance ? instance.instanceId : null)));
|
||||
this._store.add(_terminalService.onAnyInstanceTitleChange(instance => instance && this._onTitleChanged(instance.instanceId, instance.title)));
|
||||
this._store.add(_terminalService.onAnyInstanceDataInput(instance => this._proxy.$acceptTerminalInteraction(instance.instanceId)));
|
||||
this._store.add(_terminalService.onDidChangeInstanceCapability(instance => {
|
||||
if (instance.capabilities.has(TerminalCapability.CommandDetection)) {
|
||||
this._proxy.$acceptTerminalShellIntegrationActivation(instance.instanceId);
|
||||
}
|
||||
}));
|
||||
this._store.add(_terminalService.onAnyInstanceSelectionChange(instance => this._proxy.$acceptTerminalSelection(instance.instanceId, instance.selection)));
|
||||
|
||||
// Set initial ext host state
|
||||
|
||||
@@ -2238,6 +2238,7 @@ export interface ExtHostTerminalServiceShape {
|
||||
$acceptTerminalDimensions(id: number, cols: number, rows: number): void;
|
||||
$acceptTerminalMaximumDimensions(id: number, cols: number, rows: number): void;
|
||||
$acceptTerminalInteraction(id: number): void;
|
||||
$acceptTerminalShellIntegrationActivation(id: number): void;
|
||||
$acceptTerminalSelection(id: number, selection: string | undefined): void;
|
||||
$startExtensionTerminal(id: number, initialDimensions: ITerminalDimensionsDto | undefined): Promise<ITerminalLaunchError | undefined>;
|
||||
$acceptProcessAckDataEvent(id: number, charCount: number): void;
|
||||
|
||||
@@ -82,7 +82,10 @@ export class ExtHostTerminal {
|
||||
private _pidPromiseComplete: ((value: number | undefined) => any) | undefined;
|
||||
private _rows: number | undefined;
|
||||
private _exitStatus: vscode.TerminalExitStatus | undefined;
|
||||
private _state: vscode.TerminalState = { isInteractedWith: false };
|
||||
private _state: Readonly<vscode.TerminalState> = {
|
||||
isInteractedWith: false,
|
||||
isShellIntegrationActivated: false,
|
||||
};
|
||||
private _selection: string | undefined;
|
||||
|
||||
public isOpen: boolean = false;
|
||||
@@ -240,7 +243,21 @@ export class ExtHostTerminal {
|
||||
|
||||
public setInteractedWith(): boolean {
|
||||
if (!this._state.isInteractedWith) {
|
||||
this._state = { isInteractedWith: true };
|
||||
this._state = {
|
||||
...this._state,
|
||||
isInteractedWith: true,
|
||||
};
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public setShellIntegrationActivated(): boolean {
|
||||
if (!this._state.isShellIntegrationActivated) {
|
||||
this._state = {
|
||||
...this._state,
|
||||
isShellIntegrationActivated: true,
|
||||
};
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -671,6 +688,13 @@ export abstract class BaseExtHostTerminalService extends Disposable implements I
|
||||
}
|
||||
}
|
||||
|
||||
public $acceptTerminalShellIntegrationActivation(id: number): void {
|
||||
const terminal = this._getTerminalById(id);
|
||||
if (terminal?.setShellIntegrationActivated()) {
|
||||
this._onDidChangeTerminalState.fire(terminal.value);
|
||||
}
|
||||
}
|
||||
|
||||
public $acceptTerminalSelection(id: number, selection: string | undefined): void {
|
||||
this._getTerminalById(id)?.setSelection(selection);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
declare module 'vscode' {
|
||||
|
||||
// https://github.com/microsoft/vscode/issues/205058
|
||||
|
||||
export interface TerminalState {
|
||||
/**
|
||||
* Whether the {@link Terminal} has had [shell integration](https://code.visualstudio.com/docs/terminal/shell-integration)
|
||||
* activated. This typically happens shortly after the terminal has been created.
|
||||
*/
|
||||
readonly isShellIntegrationActivated: boolean;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user