diff --git a/src/vs/workbench/contrib/terminal/terminalContribExports.ts b/src/vs/workbench/contrib/terminal/terminalContribExports.ts index e5099ad04da0e..8ed2904d93412 100644 --- a/src/vs/workbench/contrib/terminal/terminalContribExports.ts +++ b/src/vs/workbench/contrib/terminal/terminalContribExports.ts @@ -16,6 +16,7 @@ import { TerminalDeveloperCommandId } from '../terminalContrib/developer/common/ import { defaultTerminalFindCommandToSkipShell } from '../terminalContrib/find/common/terminal.find.js'; import { defaultTerminalHistoryCommandsToSkipShell, terminalHistoryConfiguration } from '../terminalContrib/history/common/terminal.history.js'; import { terminalOscNotificationsConfiguration } from '../terminalContrib/notification/common/terminalNotificationConfiguration.js'; +import { terminalResizeDimensionsOverlayConfiguration } from '../terminalContrib/resizeDimensionsOverlay/common/terminalResizeDimensionsOverlayConfiguration.js'; import { TerminalStickyScrollSettingId, terminalStickyScrollConfiguration } from '../terminalContrib/stickyScroll/common/terminalStickyScrollConfiguration.js'; import { defaultTerminalSuggestCommandsToSkipShell } from '../terminalContrib/suggest/common/terminal.suggest.js'; import { TerminalSuggestSettingId, terminalSuggestConfiguration } from '../terminalContrib/suggest/common/terminalSuggestConfiguration.js'; @@ -74,6 +75,7 @@ export const terminalContribConfiguration: IConfigurationNode['properties'] = { ...terminalCommandGuideConfiguration, ...terminalHistoryConfiguration, ...terminalOscNotificationsConfiguration, + ...terminalResizeDimensionsOverlayConfiguration, ...terminalStickyScrollConfiguration, ...terminalSuggestConfiguration, ...terminalTypeAheadConfiguration, diff --git a/src/vs/workbench/contrib/terminalContrib/resizeDimensionsOverlay/browser/terminal.resizeDimensionsOverlay.contribution.ts b/src/vs/workbench/contrib/terminalContrib/resizeDimensionsOverlay/browser/terminal.resizeDimensionsOverlay.contribution.ts index 665d52e06d5ea..8d783eddd6798 100644 --- a/src/vs/workbench/contrib/terminalContrib/resizeDimensionsOverlay/browser/terminal.resizeDimensionsOverlay.contribution.ts +++ b/src/vs/workbench/contrib/terminalContrib/resizeDimensionsOverlay/browser/terminal.resizeDimensionsOverlay.contribution.ts @@ -5,10 +5,12 @@ import type { Terminal as RawXtermTerminal } from '@xterm/xterm'; import { Disposable, MutableDisposable, type IDisposable } from '../../../../../base/common/lifecycle.js'; +import { IConfigurationService } from '../../../../../platform/configuration/common/configuration.js'; import type { ITerminalContribution, IXtermTerminal } from '../../../terminal/browser/terminal.js'; import { registerTerminalContribution, type ITerminalContributionContext } from '../../../terminal/browser/terminalExtensions.js'; import { timeout } from '../../../../../base/common/async.js'; import { TerminalResizeDimensionsOverlay } from './terminalResizeDimensionsOverlay.js'; +import { TerminalResizeDimensionsOverlaySettingId } from '../common/terminalResizeDimensionsOverlayConfiguration.js'; class TerminalResizeDimensionsOverlayContribution extends Disposable implements ITerminalContribution { static readonly ID = 'terminal.resizeDimensionsOverlay'; @@ -17,6 +19,7 @@ class TerminalResizeDimensionsOverlayContribution extends Disposable implements constructor( private readonly _ctx: ITerminalContributionContext, + @IConfigurationService private readonly _configurationService: IConfigurationService, ) { super(); } @@ -27,11 +30,28 @@ class TerminalResizeDimensionsOverlayContribution extends Disposable implements // Wait a second to avoid resize events during startup like when opening a terminal or // when a terminal reconnects. Ideally we'd have an actual event to listen to here. timeout(1000).then(() => { - if (!this._store.isDisposed) { - this._overlay.value = new TerminalResizeDimensionsOverlay(this._ctx.instance.domElement, xterm); + if (this._store.isDisposed) { + return; } + this._updateOverlay(xterm); + this._register(this._configurationService.onDidChangeConfiguration(e => { + if (e.affectsConfiguration(TerminalResizeDimensionsOverlaySettingId.Enabled)) { + this._updateOverlay(xterm); + } + })); }); }); } + + private _updateOverlay(xterm: IXtermTerminal & { raw: RawXtermTerminal }): void { + const enabled = this._configurationService.getValue(TerminalResizeDimensionsOverlaySettingId.Enabled) !== false; + if (enabled) { + if (!this._overlay.value) { + this._overlay.value = new TerminalResizeDimensionsOverlay(this._ctx.instance.domElement, xterm); + } + } else { + this._overlay.clear(); + } + } } registerTerminalContribution(TerminalResizeDimensionsOverlayContribution.ID, TerminalResizeDimensionsOverlayContribution); diff --git a/src/vs/workbench/contrib/terminalContrib/resizeDimensionsOverlay/common/terminalResizeDimensionsOverlayConfiguration.ts b/src/vs/workbench/contrib/terminalContrib/resizeDimensionsOverlay/common/terminalResizeDimensionsOverlayConfiguration.ts new file mode 100644 index 0000000000000..ed523130568f9 --- /dev/null +++ b/src/vs/workbench/contrib/terminalContrib/resizeDimensionsOverlay/common/terminalResizeDimensionsOverlayConfiguration.ts @@ -0,0 +1,25 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import type { IStringDictionary } from '../../../../../base/common/collections.js'; +import { localize } from '../../../../../nls.js'; +import type { IConfigurationPropertySchema } from '../../../../../platform/configuration/common/configurationRegistry.js'; + +export const enum TerminalResizeDimensionsOverlaySettingId { + Enabled = 'terminal.integrated.resizeDimensionsOverlay.enabled', +} + +export interface ITerminalResizeDimensionsOverlayConfiguration { + enabled: boolean; +} + +export const terminalResizeDimensionsOverlayConfiguration: IStringDictionary = { + [TerminalResizeDimensionsOverlaySettingId.Enabled]: { + markdownDescription: localize('resizeDimensionsOverlay.enabled', "Whether to show a visual overlay with the terminal's columns and rows when it is resized."), + type: 'boolean', + default: true + }, +}; +