diff --git a/src/vs/workbench/contrib/terminal/browser/terminal.ts b/src/vs/workbench/contrib/terminal/browser/terminal.ts index a0836949d50ad..5d2cf9ccebaaa 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminal.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminal.ts @@ -9,7 +9,7 @@ import { URI } from 'vs/base/common/uri'; import { FindReplaceState } from 'vs/editor/contrib/find/findState'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { IShellLaunchConfig, ITerminalDimensions, ITerminalLaunchError, ITerminalProfile, ITerminalTabLayoutInfoById, TerminalIcon, TitleEventSource, TerminalShellType, IExtensionTerminalProfile, TerminalLocation, ProcessPropertyType, ProcessCapability, IProcessPropertyMap } from 'vs/platform/terminal/common/terminal'; -import { ICommandTracker, INavigationMode, IRemoteTerminalAttachTarget, IStartExtensionTerminalRequest, ITerminalConfigHelper, ITerminalFont, ITerminalBackend, ITerminalProcessExtHostProxy, IRegisterContributedProfileArgs } from 'vs/workbench/contrib/terminal/common/terminal'; +import { ICommandTracker, INavigationMode, IRemoteTerminalAttachTarget, IStartExtensionTerminalRequest, ITerminalConfigHelper, ITerminalFont, ITerminalBackend, ITerminalProcessExtHostProxy, IRegisterContributedProfileArgs, IShellIntegration } from 'vs/workbench/contrib/terminal/common/terminal'; import { ITerminalStatusList } from 'vs/workbench/contrib/terminal/browser/terminalStatusList'; import { Orientation } from 'vs/base/browser/ui/splitview/splitview'; import { IEditableData } from 'vs/workbench/common/views'; @@ -808,6 +808,11 @@ export interface IXtermTerminal { */ readonly commandTracker: ICommandTracker; + /** + * Reports the status of shell integration and fires events relating to it. + */ + readonly shellIntegration: IShellIntegration; + /** * The position of the terminal. */ diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTabsList.ts b/src/vs/workbench/contrib/terminal/browser/terminalTabsList.ts index 49f2ea82d13c6..805144e2cf89d 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTabsList.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTabsList.ts @@ -17,7 +17,7 @@ import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar'; import { MenuItemAction } from 'vs/platform/actions/common/actions'; import { MenuEntryActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem'; import { ITerminalBackend, TerminalCommandId } from 'vs/workbench/contrib/terminal/common/terminal'; -import { TerminalLocation, TerminalSettingId } from 'vs/platform/terminal/common/terminal'; +import { ProcessCapability, TerminalLocation, TerminalSettingId } from 'vs/platform/terminal/common/terminal'; import { Codicon } from 'vs/base/common/codicons'; import { Action } from 'vs/base/common/actions'; import { MarkdownString } from 'vs/base/common/htmlContent'; @@ -304,6 +304,16 @@ class TerminalTabsRenderer implements IListRenderer(); @@ -107,6 +108,7 @@ export class ShellIntegrationAddon extends Disposable implements IShellIntegrati type = ShellIntegrationInteraction.CommandFinished; break; case ShellIntegrationOscPt.EnableShellIntegration: + this.capabilities.push(ProcessCapability.CommandCognisant); this._onCapabilityEnabled.fire(ProcessCapability.CommandCognisant); return true; default: diff --git a/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts b/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts index 2268f0f6e45bb..a483087f67d0d 100644 --- a/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts +++ b/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts @@ -13,7 +13,7 @@ import { TerminalConfigHelper } from 'vs/workbench/contrib/terminal/browser/term import { DisposableStore } from 'vs/base/common/lifecycle'; import { IEditorOptions } from 'vs/editor/common/config/editorOptions'; import { ProcessCapability, TerminalLocation, TerminalSettingId } from 'vs/platform/terminal/common/terminal'; -import { ICommandTracker, ITerminalFont, TERMINAL_VIEW_ID } from 'vs/workbench/contrib/terminal/common/terminal'; +import { ICommandTracker, IShellIntegration, ITerminalFont, TERMINAL_VIEW_ID } from 'vs/workbench/contrib/terminal/common/terminal'; import { isSafari } from 'vs/base/browser/browser'; import { IXtermTerminal } from 'vs/workbench/contrib/terminal/browser/terminal'; import { ILogService } from 'vs/platform/log/common/log'; @@ -55,14 +55,15 @@ export class XtermTerminal extends DisposableStore implements IXtermTerminal { // Always on addons private _commandTrackerAddon: CommandTrackerAddon; + private _shellIntegrationAddon: ShellIntegrationAddon; // Optional addons private _searchAddon?: SearchAddonType; - private _shellIntegrationAddon?: ShellIntegrationAddon; private _unicode11Addon?: Unicode11AddonType; private _webglAddon?: WebglAddonType; get commandTracker(): ICommandTracker { return this._commandTrackerAddon; } + get shellIntegration(): IShellIntegration { return this._shellIntegrationAddon; } private _target: TerminalLocation | undefined; set target(location: TerminalLocation | undefined) { diff --git a/src/vs/workbench/contrib/terminal/common/terminal.ts b/src/vs/workbench/contrib/terminal/common/terminal.ts index 38c007a2d9d4c..c2a0403856a21 100644 --- a/src/vs/workbench/contrib/terminal/common/terminal.ts +++ b/src/vs/workbench/contrib/terminal/common/terminal.ts @@ -332,6 +332,7 @@ export interface ICommandTracker { } export interface IShellIntegration { + readonly capabilities: readonly ProcessCapability[]; readonly onCapabilityEnabled: Event; readonly onCapabilityDisabled: Event; // TODO: Fire more fine-grained and stronger typed events