Change:
Currently you can disable them via: But this is not particularly easy and the decorations still end up rendering. We should have a switch that disables them outright, including adding them to xterm.
<img width="1111" alt="Screen Shot 2022-02-23 at 5 04 01 PM" src="https://user-"It is enabled even though shell integration is off... But thanks for the fix, now i can go back to using the integrated terminal! EDIT: the fix doesn't work, guess i'm stuck with iterm2 for now...
they're rectangles so you're probably on a pretty old build (1 week+?), updating will probably fix it for you.
are there any verification steps?
It's still unreleased, but use to disable them.

Discussion:
AutoReplies = 'terminal.integrated.autoReplies', ShellIntegrationEnabled = 'terminal.integrated.shellIntegration.enabled', ShellIntegrationShowWelcome = 'terminal.integrated.shellIntegration.showWelcome', <del> ShellIntegrationCommandIcon = 'terminal.integrated.shellIntegration.commandIcon', ShellIntegrationCommandIconError = 'terminal.integrated.shellIntegration.commandIconError', ShellIntegrationCommandIconDefault = 'terminal.integrated.shellIntegration.commandIconDefault', </del> <ins> ShellIntegrationDecorationsEnabled = 'terminal.integrated.shellIntegration.decorationsEnabled', ShellIntegrationDecorationIcon = 'terminal.integrated.shellIntegration.decorationIcon', ShellIntegrationDecorationIconError = 'terminal.integrated.shellIntegration.decorationIconError', ShellIntegrationDecorationIconSuccess = 'terminal.integrated.shellIntegration.decorationIconSuccess', </ins> ShellIntegrationCommandHistory = 'terminal.integrated.shellIntegration.history' }

Editor = 'editor' } <del> export const enum TerminalCommandIcon { TriangleRight = 'triangle-right', ChevronRight = 'chevron-right', } export const enum TerminalCommandIconError { TriangleRight = 'triangle-right', ChevronRight = 'chevron-right', X = 'x' } </del> export type TerminalIcon = ThemeIcon | URI | { light: URI; dark: URI }; export interface IShellLaunchConfigDto {

XtermScreen = 'xterm-screen' } <del> interface IDisposableDecoration { decoration: IDecoration; disposables: IDisposable[] } </del> <ins> interface IDisposableDecoration { decoration: IDecoration; disposables: IDisposable[]; exitCode?: number } </ins> export class DecorationAddon extends Disposable implements ITerminalAddon { protected _terminal: Terminal | undefined;

@IConfigurationService private readonly _configurationService: IConfigurationService ) { super(); <del> this._register({ dispose: () => { this._commandStartedListener?.dispose(); this._commandFinishedListener?.dispose(); this._clearDecorations(); } }); </del> this._attachToCommandCapability(); this._register(this._contextMenuService.onDidShowContextMenu(() => this._contextMenuVisible = true)); this._register(this._contextMenuService.onDidHideContextMenu(() => this._contextMenuVisible = false)); this._hoverDelayer = this._register(new Delayer(this._configurationService.getValue('workbench.hover.delay'))); this._configurationService.onDidChangeConfiguration(e => { <del> if (e.affectsConfiguration(TerminalSettingId.ShellIntegrationCommandIcon) || e.affectsConfiguration(TerminalSettingId.ShellIntegrationCommandIconDefault) || e.affectsConfiguration(TerminalSettingId.ShellIntegrationCommandIconError)) { </del> <ins> console.log('changed', e.affectedKeys); if (e.affectsConfiguration(TerminalSettingId.ShellIntegrationDecorationIcon) || e.affectsConfiguration(TerminalSettingId.ShellIntegrationDecorationIconSuccess) || e.affectsConfiguration(TerminalSettingId.ShellIntegrationDecorationIconError)) { </ins> for (const decoration of this._decorations) { if (decoration[1].decoration?.element) { <del> this._applyStyles(decoration[1].decoration.element); </del> <ins> this._applyStyles(decoration[1].decoration.element, decoration[1].exitCode); </ins> } } <ins> } else if (e.affectsConfiguration(TerminalSettingId.ShellIntegrationDecorationsEnabled)) { if (!this._configurationService.getValue(TerminalSettingId.ShellIntegrationDecorationsEnabled)) { this._commandStartedListener?.dispose(); this._commandFinishedListener?.dispose(); this._clearDecorations(); } </ins> } }); } private _clearDecorations(): void { <del> for (const [, decorationDisposables] of Object.entries(this._decorations)) { decorationDisposables.decoration.dispose(); dispose(decorationDisposables.disposables); </del> <ins> this._placeholderDecoration?.dispose(); this._placeholderDecoration?.marker.dispose(); for (const value of this._decorations.values()) { value.decoration.dispose(); value.decoration.marker.dispose(); dispose(value.disposables); </ins> } this._decorations.clear(); <ins> this.dispose(); </ins> } private _attachToCommandCapability(): void {

decoration.onRender(target => { this._applyStyles(target); target.classList.add(DecorationSelector.DefaultColor); <del> target.classList.add(`codicon-${this._configurationService.getValue(TerminalSettingId.ShellIntegrationCommandIconDefault)}`); </del> <ins> target.classList.add(`codicon-${this._configurationService.getValue(TerminalSettingId.ShellIntegrationDecorationIcon)}`); </ins> }); this._placeholderDecoration = decoration; return decoration;

decoration.onRender(target => { if (target && !this._decorations.get(decoration.marker.id)) { const disposables = command.exitCode === undefined ? [] : [this._createContextMenu(target, command), ...this._createHover(target, command)]; <del> this._decorations.set(decoration.marker.id, { decoration, disposables }); </del> <ins> this._decorations.set(decoration.marker.id, { decoration, disposables, exitCode: command.exitCode }); </ins> } if (target.clientWidth! > 0) { <del> this._applyStyles(target); if (command.exitCode === undefined) { target.classList.add(DecorationSelector.DefaultColor); target.classList.add(`codicon-${this._configurationService.getValue(TerminalSettingId.ShellIntegrationCommandIconDefault)}`); } else if (command.exitCode) { target.classList.add(DecorationSelector.ErrorColor); target.classList.add(`codicon-${this._configurationService.getValue(TerminalSettingId.ShellIntegrationCommandIconError)}`); } else { target.classList.add(`codicon-${this._configurationService.getValue(TerminalSettingId.ShellIntegrationCommandIcon)}`); } </del> <ins> this._applyStyles(target, command.exitCode); </ins> } }); return decoration; } <del> private _applyStyles(target: HTMLElement): void { target.classList.add(DecorationSelector.CommandDecoration); target.classList.add(DecorationSelector.Codicon); </del> <ins> private _applyStyles(target: HTMLElement, exitCode?: number): void { </ins> // must be inlined to override the inlined styles from xterm target.style.width = '16px'; target.style.height = '16px'; <ins> for (const classes of target.classList) { target.classList.remove(classes); } target.classList.add(DecorationSelector.CommandDecoration, DecorationSelector.Codicon); if (exitCode === undefined) { target.classList.add(DecorationSelector.DefaultColor); target.classList.add(`codicon-${this._configurationService.getValue(TerminalSettingId.ShellIntegrationDecorationIcon)}`); } else if (exitCode) { target.classList.add(DecorationSelector.ErrorColor); target.classList.add(`codicon-${this._configurationService.getValue(TerminalSettingId.ShellIntegrationDecorationIconError)}`); } else { target.classList.add(`codicon-${this._configurationService.getValue(TerminalSettingId.ShellIntegrationDecorationIconSuccess)}`); } </ins> } private _createContextMenu(target: HTMLElement, command: ITerminalCommand): IDisposable {

this.raw.loadAddon(this._commandTrackerAddon); this._shellIntegrationAddon = this._instantiationService.createInstance(ShellIntegrationAddon); this.raw.loadAddon(this._shellIntegrationAddon); <ins> if (this._configurationService.getValue(TerminalSettingId.ShellIntegrationEnabled) && this._configurationService.getValue(TerminalSettingId.ShellIntegrationDecorationsEnabled)) { this._createDecorationAddon(capabilities); } } private _createDecorationAddon(capabilities: ITerminalCapabilityStore): void { </ins> const decorationAddon = this._instantiationService.createInstance(DecorationAddon, capabilities); decorationAddon.onDidRequestRunCommand(command => this._onDidRequestRunCommand.fire(command)); this.raw.loadAddon(decorationAddon);

default: 'view', description: localize('terminal.integrated.defaultLocation', "Controls where newly created terminals will appear.") }, <del> [TerminalSettingId.ShellIntegrationCommandIcon]: { </del> <ins> [TerminalSettingId.ShellIntegrationDecorationIconSuccess]: { </ins> type: 'string', default: 'primitive-dot', <del> description: localize('terminal.integrated.shellIntegration.commandIconSuccess', "Controls the icon that will be used for each command in terminals with shell integration enabled that do not have an associated exit code. Set to '' to hide the icon.") </del> <ins> markdownDescription: localize('terminal.integrated.shellIntegration.decorationIconSuccess', "Controls the icon that will be used for each command in terminals with shell integration enabled that do not have an associated exit code. Set to `''` to hide the icon or disable decorations with `#terminal.integrated.shellIntegration.decorationsEnabled#`") </ins> }, <del> [TerminalSettingId.ShellIntegrationCommandIconError]: { </del> <ins> [TerminalSettingId.ShellIntegrationDecorationIconError]: { </ins> type: 'string', default: 'error-small', <del> description: localize('terminal.integrated.shellIntegration.commandIconError', "Controls the icon that will be used for each command in terminals with shell integration enabled that do have an associated exit code. Set to '' to hide the icon.") </del> <ins> markdownDescription: localize('terminal.integrated.shellIntegration.decorationIconError', "Controls the icon that will be used for each command in terminals with shell integration enabled that do have an associated exit code. Set to `''` to hide the icon or disable decorations with `#terminal.integrated.shellIntegration.decorationsEnabled#`.") </ins> }, <del> [TerminalSettingId.ShellIntegrationCommandIconDefault]: { </del> <ins> [TerminalSettingId.ShellIntegrationDecorationIcon]: { </ins> type: 'string', default: 'circle-outline', <del> description: localize('terminal.integrated.shellIntegration.commandIconDefault', "Controls the icon that will be used for skipped/empty commands. Set to '' to hide the icon.") </del> <ins> markdownDescription: localize('terminal.integrated.shellIntegration.decorationIcon', "Controls the icon that will be used for skipped/empty commands. Set to `''` to hide the icon or disable decorations with `#terminal.integrated.shellIntegration.decorationsEnabled#`") </ins> }, [TerminalSettingId.TabsFocusMode]: { type: 'string',

type: 'boolean', default: false }, <ins> [TerminalSettingId.ShellIntegrationDecorationsEnabled]: { restricted: true, markdownDescription: localize('terminal.integrated.shellIntegration.decorationsEnabled', "When shell integration is enabled, adds a decoration for each command."), type: 'boolean', default: true }, </ins> [TerminalSettingId.ShellIntegrationShowWelcome]: { restricted: true, markdownDescription: localize('terminal.integrated.shellIntegration.showWelcome', "Whether to show the shell integration activated welcome message in the terminal when the feature is enabled."),