我也在研究这个。我还没有答案,但到目前为止已经有了一些线索。希望这可以帮助:
https://code.visualstudio.com/api/references/vscode-api#ThemeIcon https://code.visualstudio.com/api/references/vscode-api#ThemeIcon
对命名图标的引用。目前,文件、文件夹和主题图标
支持 id。
因此,如果您有文件/文件夹 ID,您可以使用其构造函数创建 ThemeIcon 的实例
建设者
新 ThemeIcon(id: 字符串, 颜色?: ThemeColor): ThemeIcon
如何获取文件和文件夹 ID?看起来是通过文件图标主题中定义的文件关联。看vscode API 用于文件图标主题/文件关联 https://code.visualstudio.com/api/extension-guides/file-icon-theme#file-association
那么如何获得这种关联呢?
我可以从下面的代码中获取当前图标主题的名称
const config = vscode.workspace.getConfiguration();
console.log(config.workbench.iconTheme); // output "vs-seti"
seti 主题是一个内部扩展,我可以通过
const ext = vscode.extensions.getExtension("vscode.vscode-theme-seti")
console.log(ext.packageJSON.contributes.iconThemes[0].id) // 'vs-seti'
我可以通过以下方式进一步获取主题 JSON
const themePath = path.join(ext.extensionPath, ext.packageJSON.contributes.iconThemes[0].path);
然后我可以读取该 JSON 文件,使用它将文件/目录名称与文件/目录 id 关联,然后获取图标......
今天的报告:
内置 seti 文件图标扩展的 JSON 位于here https://github.com/microsoft/vscode/blob/main/extensions/theme-seti/icons/vs-seti-icon-theme.json
在“fileExtensions”中,没有语言文件扩展名的映射(如 .ts)。对于编程语言源代码,需要首先找到 languageId,然后映射到“languageIds”部分中的图标
尝试在“files.associations”配置中查找语言 ID 映射的文件扩展名,但失败。
然后发现我可以循环遍历所有扩展 (vscode.extensions.all) 并检查它们的 package.json 以查找语言贡献。相关的文件扩展名在语言贡献中定义。现在我可以从文件扩展名映射到语言 ID。
然后我尝试了const icon = new vscode.ThemeIcon(langIconId);
但图标并不如预期。我期待的不是打字稿图标,而是错误图标...ThemeIcon 提到所有图标都可以找到here https://code.visualstudio.com/api/references/icons-in-labels#icon-listing所以我想这毕竟不是 ThemeIcon...
所以 seti 主题的 JSONdocument https://github.com/microsoft/vscode/blob/main/extensions/theme-seti/icons/vs-seti-icon-theme.json包含“iconDefinitions”部分,它具有图标的 fontCharacter 和 fontColor。现在我可以将文件扩展名一直关联到图标 fontCharacter 和 fontColor。
然而这就是结束了。我无法设置树视图来使用它。
最后我想我需要设置TreeItem的resourceUri让vscode自动确定图标。看https://code.visualstudio.com/api/references/vscode-api#TreeItem.resourceUri https://code.visualstudio.com/api/references/vscode-api#TreeItem.resourceUri