Terminal: Don't use codicon.iconRegistry, use platform/theme/common/iconRegistry

This commit is contained in:
Martin Aeschlimann
2021-12-08 18:08:37 +01:00
parent b882ae5646
commit ea242ec8ef
5 changed files with 32 additions and 23 deletions
@@ -3,10 +3,11 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { Codicon, iconRegistry } from 'vs/base/common/codicons';
import { Codicon } from 'vs/base/common/codicons';
import { hash } from 'vs/base/common/hash';
import { URI } from 'vs/base/common/uri';
import { IExtensionTerminalProfile, ITerminalProfile } from 'vs/platform/terminal/common/terminal';
import { getIconRegistry } from 'vs/platform/theme/common/iconRegistry';
import { ColorScheme } from 'vs/platform/theme/common/theme';
import { IColorTheme, ThemeIcon } from 'vs/platform/theme/common/themeService';
import { ITerminalInstance } from 'vs/workbench/contrib/terminal/browser/terminal';
@@ -94,7 +95,7 @@ export function getUriClasses(terminal: ITerminalInstance | IExtensionTerminalPr
let uri = undefined;
if (extensionContributed) {
if (typeof icon === 'string' && (icon.startsWith('$(') || iconRegistry.get(icon))) {
if (typeof icon === 'string' && (icon.startsWith('$(') || getIconRegistry().getIcon(icon))) {
return iconClasses;
} else if (typeof icon === 'string') {
uri = URI.parse(icon);
@@ -1798,15 +1798,16 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
}
async changeIcon() {
const items: IQuickPickItem[] = [];
type Item = IQuickPickItem & { icon: TerminalIcon };
const items: Item[] = [];
for (const icon of iconRegistry.all) {
items.push({ label: `$(${icon.id})`, description: `${icon.id}` });
items.push({ label: `$(${icon.id})`, description: `${icon.id}`, icon });
}
const result = await this._quickInputService.pick(items, {
matchOnDescription: true
});
if (result && result.description) {
this._icon = iconRegistry.get(result.description);
if (result) {
this._icon = result.icon;
this._onIconChanged.fire(this);
}
}
@@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { iconRegistry, Codicon } from 'vs/base/common/codicons';
import { Codicon } from 'vs/base/common/codicons';
import { ConfigurationTarget, IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IQuickInputService, IKeyMods, IPickOptions, IQuickPickSeparator, IQuickInputButton, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput';
import { IExtensionTerminalProfile, ITerminalProfile, ITerminalProfileObject, TerminalSettingPrefix } from 'vs/platform/terminal/common/terminal';
@@ -14,6 +14,7 @@ import { IThemeService, ThemeIcon } from 'vs/platform/theme/common/themeService'
import { ITerminalProfileService } from 'vs/workbench/contrib/terminal/common/terminal';
import { IQuickPickTerminalObject, ITerminalInstance } from 'vs/workbench/contrib/terminal/browser/terminal';
import { IPickerQuickAccessItem } from 'vs/platform/quickinput/browser/pickerQuickAccess';
import { getIconRegistry } from 'vs/platform/theme/common/iconRegistry';
type DefaultProfileName = string;
@@ -144,10 +145,17 @@ export class TerminalProfileQuickpick {
quickPickItems.push({ type: 'separator', label: nls.localize('ICreateContributedTerminalProfileOptions', "contributed") });
const contributedProfiles: IProfileQuickPickItem[] = [];
for (const contributed of this._terminalProfileService.contributedProfiles) {
if (typeof contributed.icon === 'string' && contributed.icon.startsWith('$(')) {
contributed.icon = contributed.icon.substring(2, contributed.icon.length - 1);
let icon: ThemeIcon | undefined;
if (typeof contributed.icon === 'string') {
if (contributed.icon.startsWith('$(')) {
icon = ThemeIcon.fromString(contributed.icon);
} else {
icon = ThemeIcon.fromId(contributed.icon);
}
}
if (!icon || !getIconRegistry().getIcon(icon.id)) {
icon = Codicon.terminal;
}
const icon = contributed.icon && typeof contributed.icon === 'string' ? (iconRegistry.get(contributed.icon) || Codicon.terminal) : Codicon.terminal;
const uriClasses = getUriClasses(contributed, this._themeService.getColorTheme().type, true);
const colorClass = getColorClass(contributed);
const iconClasses = [];
@@ -15,7 +15,7 @@ import { IProcessEnvironment, OperatingSystem, OS } from 'vs/base/common/platfor
import { IShellLaunchConfig, ITerminalProfile, ITerminalProfileObject, TerminalIcon, TerminalSettingId, TerminalSettingPrefix } from 'vs/platform/terminal/common/terminal';
import { IShellLaunchConfigResolveOptions, ITerminalProfileResolverService, ITerminalProfileService } from 'vs/workbench/contrib/terminal/common/terminal';
import * as path from 'vs/base/common/path';
import { Codicon, iconRegistry } from 'vs/base/common/codicons';
import { Codicon } from 'vs/base/common/codicons';
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
import { debounce } from 'vs/base/common/decorators';
import { ThemeIcon } from 'vs/platform/theme/common/themeService';
@@ -172,7 +172,7 @@ export abstract class BaseTerminalProfileResolverService implements ITerminalPro
return undefined;
}
if (typeof icon === 'string') {
return iconRegistry.get(icon);
return ThemeIcon.fromId(icon);
}
if (ThemeIcon.isThemeIcon(icon)) {
return icon;
@@ -5,7 +5,6 @@
import * as dom from 'vs/base/browser/dom';
import { timeout } from 'vs/base/common/async';
import { Codicon, iconRegistry } from 'vs/base/common/codicons';
import { debounce } from 'vs/base/common/decorators';
import { Emitter, Event } from 'vs/base/common/event';
import { dispose, IDisposable, toDisposable } from 'vs/base/common/lifecycle';
@@ -20,7 +19,7 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { ICreateContributedTerminalProfileOptions, IShellLaunchConfig, ITerminalLaunchError, ITerminalsLayoutInfo, ITerminalsLayoutInfoById, TerminalLocation, TerminalLocationString } from 'vs/platform/terminal/common/terminal';
import { iconForeground } from 'vs/platform/theme/common/colorRegistry';
import { IconDefinition } from 'vs/platform/theme/common/iconRegistry';
import { getIconRegistry, IconContribution } from 'vs/platform/theme/common/iconRegistry';
import { ColorScheme } from 'vs/platform/theme/common/theme';
import { IThemeService, Themable, ThemeIcon } from 'vs/platform/theme/common/themeService';
import { VirtualWorkspaceContext } from 'vs/workbench/browser/contextkeys';
@@ -1126,16 +1125,16 @@ class TerminalEditorStyle extends Themable {
);
}
if (ThemeIcon.isThemeIcon(icon)) {
const codicon = iconRegistry.get(icon.id);
if (codicon) {
let def: Codicon | IconDefinition = codicon;
while ('definition' in def) {
def = def.definition;
const iconRegistry = getIconRegistry();
const iconContribution = iconRegistry.getIcon(icon.id);
if (iconContribution) {
const def = IconContribution.getDefinition(iconContribution, iconRegistry);
if (def) {
css += (
`.monaco-workbench .terminal-tab.codicon-${icon.id}::before` +
`{content: '${def.fontCharacter}' !important; font-family: ${dom.asCSSPropertyValue(def.fontId ?? 'codicon')} !important;}`
);
}
css += (
`.monaco-workbench .terminal-tab.codicon-${icon.id}::before` +
`{content: '${def.fontCharacter}' !important;}`
);
}
}
}