Skip to content

Commit

Permalink
Change the configure default picker (#122863)
Browse files Browse the repository at this point in the history
* Change the configure default picker

* Remove variable refernced nls key
  • Loading branch information
lramos15 committed May 3, 2021
1 parent ae2eb51 commit 967020f
Showing 1 changed file with 24 additions and 25 deletions.
49 changes: 24 additions & 25 deletions src/vs/workbench/services/editor/browser/editorOverrideService.ts
Expand Up @@ -17,7 +17,6 @@ import { DiffEditorInput } from 'vs/workbench/common/editor/diffEditorInput';
import { ContributedEditorInfo, ContributedEditorPriority, ContributionPointOptions, DEFAULT_EDITOR_ASSOCIATION, DiffEditorInputFactoryFunction, EditorAssociation, EditorAssociations, EditorInputFactoryFunction, editorsAssociationsSettingId, globMatchesResource, IEditorOverrideService, priorityToRank } from 'vs/workbench/services/editor/common/editorOverrideService';
import { IKeyMods, IQuickInputService, IQuickPickItem, IQuickPickSeparator } from 'vs/platform/quickinput/common/quickInput';
import { localize } from 'vs/nls';
import { Codicon } from 'vs/base/common/codicons';
import { INotificationService, Severity } from 'vs/platform/notification/common/notification';
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
Expand All @@ -41,6 +40,7 @@ type ContributionPoints = Array<ContributionPoint>;
export class EditorOverrideService extends Disposable implements IEditorOverrideService {
readonly _serviceBrand: undefined;

private static readonly configureDefaultID = 'promptOpenWith.configureDefault';
private _contributionPoints: Map<string | glob.IRelativePattern, ContributionPoints> = new Map<string | glob.IRelativePattern, ContributionPoints>();
private static readonly overrideCacheStorageID = 'editorOverrideService.cache';
private cache: Set<string> | undefined;
Expand Down Expand Up @@ -369,7 +369,7 @@ export class EditorOverrideService extends Disposable implements IEditorOverride
});
}

private mapContributionsToQuickPickEntry(resource: URI, group: IEditorGroup, alwaysUpdateSetting?: boolean) {
private mapContributionsToQuickPickEntry(resource: URI, group: IEditorGroup, showDefaultPicker?: boolean) {
const currentEditor = firstOrDefault(group.findEditors(resource));
// If untitled, we want all contribution points
let contributionPoints = resource.scheme === Schemas.untitled ? distinct(flatten(Array.from(this._contributionPoints.values())), (contrib) => contrib.editorInfo.id) : this.findMatchingContributions(resource);
Expand All @@ -384,37 +384,31 @@ export class EditorOverrideService extends Disposable implements IEditorOverride
return priorityToRank(b.editorInfo.priority) - priorityToRank(a.editorInfo.priority);
}
});
const contribGroups: { defaults: Array<IQuickPickSeparator | IQuickPickItem>, optional: Array<IQuickPickSeparator | IQuickPickItem> } = {
defaults: [
{ type: 'separator', label: localize('editorOverride.picker.default', 'Defaults') }
],
optional: [
{ type: 'separator', label: localize('editorOverride.picker.optional', 'Optional') }
],
};
const quickPickEntries: Array<IQuickPickItem | IQuickPickSeparator> = [];
// Get the matching contribtuions and call resolve whether they're active for the picker
contributionPoints.forEach(contribPoint => {
const isActive = currentEditor ? contribPoint.editorInfo.describes(currentEditor) : false;
const quickPickEntry = {
const quickPickEntry: IQuickPickItem = {
id: contribPoint.editorInfo.id,
label: contribPoint.editorInfo.label,
description: isActive ? localize('promptOpenWith.currentlyActive', "Currently Active") : undefined,
detail: contribPoint.editorInfo.detail ?? contribPoint.editorInfo.priority,
buttons: alwaysUpdateSetting ? [] : [{
iconClass: Codicon.gear.classNames,
tooltip: localize('promptOpenWith.setDefaultTooltip', "Set as default editor for '{0}' files", extname(resource))
}],
};
if (contribPoint.editorInfo.priority === ContributedEditorPriority.option) {
contribGroups.optional.push(quickPickEntry);
} else {
contribGroups.defaults.push(quickPickEntry);
}
quickPickEntries.push(quickPickEntry);
});
return [...contribGroups.defaults, ...contribGroups.optional];
if (!showDefaultPicker) {
const separator: IQuickPickSeparator = { type: 'separator' };
quickPickEntries.push(separator);
const configureDefaultEntry = {
id: EditorOverrideService.configureDefaultID,
label: localize('promptOpenWith.configureDefault', "Configure default editor....")
};
quickPickEntries.push(configureDefaultEntry);
}
return quickPickEntries;
}

private async doPickEditorOverride(editor: IEditorInput, options: IEditorOptions | undefined, group: IEditorGroup, alwaysUpdateSetting?: boolean): Promise<[IEditorOptions, IEditorGroup | undefined] | undefined> {
private async doPickEditorOverride(editor: IEditorInput, options: IEditorOptions | undefined, group: IEditorGroup, showDefaultPicker?: boolean): Promise<[IEditorOptions, IEditorGroup | undefined] | undefined> {

type EditorOverridePick = {
readonly item: IQuickPickItem;
Expand All @@ -429,11 +423,11 @@ export class EditorOverrideService extends Disposable implements IEditorOverride
}

// Text editor has the lowest priority because we
const editorOverridePicks = this.mapContributionsToQuickPickEntry(resource, group, alwaysUpdateSetting);
const editorOverridePicks = this.mapContributionsToQuickPickEntry(resource, group, showDefaultPicker);

// Create editor override picker
const editorOverridePicker = this.quickInputService.createQuickPick<IQuickPickItem>();
const placeHolderMessage = alwaysUpdateSetting ?
const placeHolderMessage = showDefaultPicker ?
localize('prompOpenWith.updateDefaultPlaceHolder', "Select new default editor for '{0}'", basename(resource)) :
localize('promptOpenWith.placeHolder', "Select editor for '{0}'", basename(resource));
editorOverridePicker.placeholder = placeHolderMessage;
Expand All @@ -458,7 +452,7 @@ export class EditorOverrideService extends Disposable implements IEditorOverride
}

// If asked to always update the setting then update it even if the gear isn't clicked
if (alwaysUpdateSetting && result?.item.id) {
if (showDefaultPicker && result?.item.id) {
this.updateUserAssociations(`*${extname(resource)}`, result.item.id,);
}

Expand Down Expand Up @@ -487,6 +481,11 @@ export class EditorOverrideService extends Disposable implements IEditorOverride
// options and group to use accordingly
if (picked) {

// If the user selected to configure default we trigger this picker again and tell it to show the default picker
if (picked.item.id === EditorOverrideService.configureDefaultID) {
return this.doPickEditorOverride(editor, options, group, true);
}

// Figure out target group
let targetGroup: IEditorGroup | undefined;
if (picked.keyMods?.alt || picked.keyMods?.ctrlCmd) {
Expand Down

0 comments on commit 967020f

Please sign in to comment.