From f8dfe5791d4a5b08c473012373d5893d1dfb20b9 Mon Sep 17 00:00:00 2001 From: Anthony Kim Date: Tue, 21 Apr 2026 10:04:52 -0700 Subject: [PATCH 1/3] test commit message --- .../terminal/terminalContribExports.ts | 2 ++ ...al.resizeDimensionsOverlay.contribution.ts | 11 ++++++-- ...nalResizeDimensionsOverlayConfiguration.ts | 25 +++++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 src/vs/workbench/contrib/terminalContrib/resizeDimensionsOverlay/common/terminalResizeDimensionsOverlayConfiguration.ts 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..69501cd682b1e 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,9 +30,13 @@ 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; } + if (this._configurationService.getValue(TerminalResizeDimensionsOverlaySettingId.Enabled) === false) { + return; + } + this._overlay.value = new TerminalResizeDimensionsOverlay(this._ctx.instance.domElement, xterm); }); }); } 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 + }, +}; + From 7532e9f0c1f9e24d9ec8686ff5cc3ad547f6d18c Mon Sep 17 00:00:00 2001 From: Anthony Kim Date: Tue, 21 Apr 2026 22:32:50 -0700 Subject: [PATCH 2/3] support to listen to setting changed --- ...al.resizeDimensionsOverlay.contribution.ts | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) 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 69501cd682b1e..455ed340d495f 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 @@ -16,15 +16,23 @@ class TerminalResizeDimensionsOverlayContribution extends Disposable implements static readonly ID = 'terminal.resizeDimensionsOverlay'; private readonly _overlay: MutableDisposable = this._register(new MutableDisposable()); + private _xterm: (IXtermTerminal & { raw: RawXtermTerminal }) | undefined; + private _ptyReady = false; constructor( private readonly _ctx: ITerminalContributionContext, @IConfigurationService private readonly _configurationService: IConfigurationService, ) { super(); + this._register(this._configurationService.onDidChangeConfiguration(e => { + if (e.affectsConfiguration(TerminalResizeDimensionsOverlaySettingId.Enabled)) { + this._updateOverlay(); + } + })); } xtermOpen(xterm: IXtermTerminal & { raw: RawXtermTerminal }): void { + this._xterm = xterm; // Initialize resize dimensions overlay this._ctx.processManager.ptyProcessReady.then(() => { // Wait a second to avoid resize events during startup like when opening a terminal or @@ -33,12 +41,24 @@ class TerminalResizeDimensionsOverlayContribution extends Disposable implements if (this._store.isDisposed) { return; } - if (this._configurationService.getValue(TerminalResizeDimensionsOverlaySettingId.Enabled) === false) { - return; - } - this._overlay.value = new TerminalResizeDimensionsOverlay(this._ctx.instance.domElement, xterm); + this._ptyReady = true; + this._updateOverlay(); }); }); } + + private _updateOverlay(): void { + if (!this._ptyReady || !this._xterm) { + return; + } + const enabled = this._configurationService.getValue(TerminalResizeDimensionsOverlaySettingId.Enabled) !== false; + if (enabled) { + if (!this._overlay.value) { + this._overlay.value = new TerminalResizeDimensionsOverlay(this._ctx.instance.domElement, this._xterm); + } + } else { + this._overlay.clear(); + } + } } registerTerminalContribution(TerminalResizeDimensionsOverlayContribution.ID, TerminalResizeDimensionsOverlayContribution); From 9168d8863cfac6e75db6acadcfa2d5f5a4cbfd85 Mon Sep 17 00:00:00 2001 From: Anthony Kim Date: Tue, 21 Apr 2026 22:39:02 -0700 Subject: [PATCH 3/3] no need to reference xterm and ptyready honestly Co-authored-by: Copilot --- ...al.resizeDimensionsOverlay.contribution.ts | 23 +++++++------------ 1 file changed, 8 insertions(+), 15 deletions(-) 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 455ed340d495f..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 @@ -16,23 +16,15 @@ class TerminalResizeDimensionsOverlayContribution extends Disposable implements static readonly ID = 'terminal.resizeDimensionsOverlay'; private readonly _overlay: MutableDisposable = this._register(new MutableDisposable()); - private _xterm: (IXtermTerminal & { raw: RawXtermTerminal }) | undefined; - private _ptyReady = false; constructor( private readonly _ctx: ITerminalContributionContext, @IConfigurationService private readonly _configurationService: IConfigurationService, ) { super(); - this._register(this._configurationService.onDidChangeConfiguration(e => { - if (e.affectsConfiguration(TerminalResizeDimensionsOverlaySettingId.Enabled)) { - this._updateOverlay(); - } - })); } xtermOpen(xterm: IXtermTerminal & { raw: RawXtermTerminal }): void { - this._xterm = xterm; // Initialize resize dimensions overlay this._ctx.processManager.ptyProcessReady.then(() => { // Wait a second to avoid resize events during startup like when opening a terminal or @@ -41,20 +33,21 @@ class TerminalResizeDimensionsOverlayContribution extends Disposable implements if (this._store.isDisposed) { return; } - this._ptyReady = true; - this._updateOverlay(); + this._updateOverlay(xterm); + this._register(this._configurationService.onDidChangeConfiguration(e => { + if (e.affectsConfiguration(TerminalResizeDimensionsOverlaySettingId.Enabled)) { + this._updateOverlay(xterm); + } + })); }); }); } - private _updateOverlay(): void { - if (!this._ptyReady || !this._xterm) { - return; - } + 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, this._xterm); + this._overlay.value = new TerminalResizeDimensionsOverlay(this._ctx.instance.domElement, xterm); } } else { this._overlay.clear();