Change:
Issue Type: <bFeature Request</bTesting Just a thought: When I see "Modified in: Workspace" I might want to go there and check. I'd keep font and color as they are and add an underline and pointer cursor to "Workspace" on hover. VS Code version: Code - Insiders 1.27.0-insider (, 2018-08-29T05:12:15.247Z) OS version: Darwin x64 17.7.0 <!-- generated by issue reporter --
Good idea!
I would take a PR for this "Modified in: Workspace" - the word Workspace is underlined When clicked, it switches to the Workspace scope, and copies the setting key into the search bar, so the view is filtered to just that one setting
I'm interested in looking into this if that is alright.

Discussion:
} } <del> private updateTarget(settingsTarget: SettingsTarget): TPromise<void> { </del> <ins> public updateTarget(settingsTarget: SettingsTarget): TPromise<void> { </ins> const isSameTarget = this.settingsTarget === settingsTarget || settingsTarget instanceof URI && this.settingsTarget instanceof URI && this.settingsTarget.toString() === settingsTarget.toString(); if (!isSameTarget) { this.settingsTarget = settingsTarget;

targetKey: string; } <ins> export interface ISettingOverrideClickEvent { scope: string; targetKey: string; } </ins> export class SettingsRenderer implements ITreeRenderer { public static readonly CONTROL_CLASS = 'setting-control-focus-target';

public static readonly SETTING_KEY_ATTR = 'data-key'; <ins> private readonly _onDidClickOverrideElement: Emitter<ISettingOverrideClickEvent> = new Emitter<ISettingOverrideClickEvent>(); public readonly onDidClickOverrideElement: Event<ISettingOverrideClickEvent> = this._onDidClickOverrideElement.event; </ins> private readonly _onDidChangeSetting: Emitter<ISettingChangeEvent> = new Emitter<ISettingChangeEvent>(); public readonly onDidChangeSetting: Event<ISettingChangeEvent> = this._onDidChangeSetting.event;

template.descriptionElement.setAttribute('checkbox_label_target_id', baseId + '_setting_item'); } <ins> template.otherOverridesElement.innerHTML = ''; </ins> if (element.overriddenScopeList.length) { const otherOverridesLabel = element.isConfigured ? localize('alsoConfiguredIn', "Also modified in") : localize('configuredIn', "Modified in"); <del> template.otherOverridesElement.textContent = `(${otherOverridesLabel}: ${element.overriddenScopeList.join(', ')})`; } else { template.otherOverridesElement.textContent = ''; </del> <ins> DOM.append(template.otherOverridesElement, $('span', null, `(${otherOverridesLabel}: `)); for (let i = 0; i < element.overriddenScopeList.length; i++) { let view = DOM.append(template.otherOverridesElement, $('a.modified-scope', null, element.overriddenScopeList[i])); if (i !== element.overriddenScopeList.length - 1) { DOM.append(template.otherOverridesElement, $('span', null, ', ')); } else { DOM.append(template.otherOverridesElement, $('span', null, ')')); } DOM.addStandardDisposableListener(view, DOM.EventType.CLICK, (e: IMouseEvent) => { this._onDidClickOverrideElement.fire({ targetKey: element.setting.key, scope: element.overriddenScopeList[i] }); e.preventDefault(); e.stopPropagation(); }); } </ins> } // Remove tree attributes - sometimes overridden by tree - should be managed there

font-style: italic; } <ins> .settings-editor > .settings-body > .settings-tree-container .setting-item .setting-item-title .setting-item-overrides a.modified-scope { text-decoration: underline; cursor: pointer; } </ins> .settings-editor > .settings-body > .settings-tree-container .setting-item .setting-item-label { margin-right: 7px; }

import { collapseAll, expandAll } from 'vs/base/parts/tree/browser/treeUtils'; import 'vs/css!./media/settingsEditor2'; import { localize } from 'vs/nls'; <del> import { ConfigurationTarget, IConfigurationOverrides, IConfigurationService } from 'vs/platform/configuration/common/configuration'; </del> <ins> import { ConfigurationTarget, IConfigurationOverrides, IConfigurationService, ConfigurationTargetToString } from 'vs/platform/configuration/common/configuration'; </ins> import { IContextKey, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; import { IEnvironmentService } from 'vs/platform/environment/common/environment';

import { PreferencesEditor } from 'vs/workbench/parts/preferences/browser/preferencesEditor'; import { SettingsTarget, SettingsTargetsWidget } from 'vs/workbench/parts/preferences/browser/preferencesWidgets'; import { commonlyUsedData, tocData } from 'vs/workbench/parts/preferences/browser/settingsLayout'; <del> import { ISettingLinkClickEvent, resolveExtensionsSettings, resolveSettingsTree, SettingsDataSource, SettingsRenderer, SettingsTree, SimplePagedDataSource } from 'vs/workbench/parts/preferences/browser/settingsTree'; </del> <ins> import { ISettingLinkClickEvent, resolveExtensionsSettings, resolveSettingsTree, SettingsDataSource, SettingsRenderer, SettingsTree, SimplePagedDataSource, ISettingOverrideClickEvent } from 'vs/workbench/parts/preferences/browser/settingsTree'; </ins> import { ISettingsEditorViewState, MODIFIED_SETTING_TAG, ONLINE_SERVICES_SETTING_TAG, parseQuery, SearchResultIdx, SearchResultModel, SettingsTreeGroupElement, SettingsTreeModel, SettingsTreeSettingElement } from 'vs/workbench/parts/preferences/browser/settingsTreeModels'; import { settingsTextInputBorder } from 'vs/workbench/parts/preferences/browser/settingsWidgets'; import { TOCRenderer, TOCTree, TOCTreeModel } from 'vs/workbench/parts/preferences/browser/tocTree';

placeholderText: searchBoxLabel, focusContextKey: this.searchFocusContextKey, // TODO: Aria-live <del> })); </del> <ins> }) ); </ins> this._register(attachSuggestEnabledInputBoxStyler(this.searchWidget, this.themeService, { inputBorder: settingsTextInputBorder

this.lastFocusedSettingElement = element.setting.key; this.settingsTree.reveal(element); })); <ins> this._register(this.settingsTreeRenderer.onDidClickOverrideElement((element: ISettingOverrideClickEvent) => { if (ConfigurationTargetToString(ConfigurationTarget.WORKSPACE) === element.scope.toUpperCase()) { this.settingsTargetsWidget.updateTarget(ConfigurationTarget.WORKSPACE); } else if (ConfigurationTargetToString(ConfigurationTarget.USER) === element.scope.toUpperCase()) { this.settingsTargetsWidget.updateTarget(ConfigurationTarget.USER); } this.searchWidget.setValue(element.targetKey); })); </ins> this.settingsTreeDataSource = this.instantiationService.createInstance(SimplePagedDataSource, this.instantiationService.createInstance(SettingsDataSource, this.viewState));