提交 a07e7a54 编写于 作者: B Benjamin Pasero

icons: show them in language picker too

上级 1bf88815
......@@ -26,6 +26,7 @@ export class LanguagesRegistry {
private name2LanguageId: { [name: string]: string; };
private id2Name: { [id: string]: string; };
private id2Extensions: { [id: string]: string[]; };
private id2Filenames: { [id: string]: string[]; };
private compatModes: { [id: string]: ICompatModeDescriptor; };
private lowerName2Id: { [name: string]: string; };
private id2ConfigurationFiles: { [id:string]: string[]; };
......@@ -39,6 +40,7 @@ export class LanguagesRegistry {
this.name2LanguageId = {};
this.id2Name = {};
this.id2Extensions = {};
this.id2Filenames = {};
this.compatModes = {};
this.lowerName2Id = {};
this.id2ConfigurationFiles = {};
......@@ -127,8 +129,10 @@ export class LanguagesRegistry {
}
if (Array.isArray(lang.filenames)) {
this.id2Filenames[lang.id] = this.id2Filenames[lang.id] || [];
for (let filename of lang.filenames) {
mime.registerTextMime({ mime: primaryMime, filename: filename });
this.id2Filenames[lang.id].push(filename);
}
}
......@@ -270,4 +274,12 @@ export class LanguagesRegistry {
}
return this.id2Extensions[languageId];
}
public getFilenames(languageName: string): string[] {
let languageId = this.name2LanguageId[languageName];
if (!languageId) {
return [];
}
return this.id2Filenames[languageId];
}
}
......@@ -50,6 +50,7 @@ export interface IModeService {
getRegisteredModes(): string[];
getRegisteredLanguageNames(): string[];
getExtensions(alias: string): string[];
getFilenames(alias: string): string[];
getMimeForMode(modeId: string): string;
getLanguageName(modeId:string): string;
getModeIdForLanguageName(alias: string): string;
......
......@@ -183,6 +183,10 @@ export class ModeServiceImpl implements IModeService {
return this._registry.getExtensions(alias);
}
public getFilenames(alias: string): string[] {
return this._registry.getFilenames(alias);
}
public getMimeForMode(modeId: string): string {
return this._registry.getMimeForMode(modeId);
}
......
......@@ -32,6 +32,9 @@ export class MockModeService implements IModeService {
getExtensions(alias: string): string[] {
throw new Error('Not implemented');
}
getFilenames(alias: string): string[] {
throw new Error('Not implemented');
}
getMimeForMode(modeId: string): string {
throw new Error('Not implemented');
}
......
......@@ -34,7 +34,7 @@ import {BaseBinaryResourceEditor} from 'vs/workbench/browser/parts/editor/binary
import {BinaryResourceDiffEditor} from 'vs/workbench/browser/parts/editor/binaryDiffEditor';
import {IEditor as IBaseEditor} from 'vs/platform/editor/common/editor';
import {IWorkbenchEditorService} from 'vs/workbench/services/editor/common/editorService';
import {IQuickOpenService, IPickOpenEntry} from 'vs/workbench/services/quickopen/common/quickOpenService';
import {IQuickOpenService, IPickOpenEntry, IFilePickOpenEntry} from 'vs/workbench/services/quickopen/common/quickOpenService';
import {IWorkspaceConfigurationService} from 'vs/workbench/services/configuration/common/configuration';
import {IFilesConfiguration, SUPPORTED_ENCODINGS} from 'vs/platform/files/common/files';
import {IInstantiationService} from 'vs/platform/instantiation/common/instantiation';
......@@ -716,8 +716,21 @@ export class ChangeModeAction extends Action {
description = nls.localize('languageDescriptionConfigured', "({0})", this.modeService.getModeIdForLanguageName(lang.toLowerCase()));
}
return <IPickOpenEntry>{
// construct a fake resource to be able to show nice icons if any
let fakeResource: uri;
const extensions = this.modeService.getExtensions(lang);
if (extensions && extensions.length) {
fakeResource = uri.file(extensions[0]);
} else {
const filenames = this.modeService.getFilenames(lang);
if (filenames && filenames.length) {
fakeResource = uri.file(filenames[0]);
}
}
return <IFilePickOpenEntry>{
label: lang,
resource: fakeResource,
description
};
});
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册