api - vscode api : how to get icons from File Icon Theme

标签 api visual-studio-code vscode-extensions

我正在为 VSCode 编写扩展。在 WebviewPanel 中,我需要显示来自文件图标主题的文件扩展名图标。是否有从文件图标主题中获取图标的功能?

最佳答案

我也在研究这个。我还没有答案,但到目前为止有一些线索。希望这可以帮助:
https://code.visualstudio.com/api/references/vscode-api#ThemeIcon

A reference to a named icon. Currently, File, Folder, and ThemeIcon

ids are supported.


因此,如果您有文件/文件夹 ID,则可以使用其构造函数创建 ThemeIcon 的实例

CONSTRUCTORS

new ThemeIcon(id: string, color?: ThemeColor): ThemeIcon


如何获取文件和文件夹ID?看起来是通过文件图标主题中定义的文件关联。见 vscode API for 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
在“fileExtensions”中没有语言文件扩展名(如.ts)的映射。对于编程语言源代码,需要先找到languageId,然后映射到“languageIds”部分的图标
试图在“files.associations”配置中找到语言 ID 映射的文件扩展名,但失败了。
然后发现我可以遍历所有扩展(vscode.extensions.all)并检查它们的 package.json 以查找语言贡献。相关文件扩展名在语言贡献中定义。所以现在我可以从文件扩展名映射到语言 ID。
然后我尝试了 const icon = new vscode.ThemeIcon(langIconId);但图标并不像预期的那样。而不是我期望的 typescript 图标,它是错误图标... ThemeIcon 提到的所有图标都可以找到 here所以我想这毕竟不是 ThemeIcon ......
所以 seti 主题的 JSON document包含一个“iconDefinitions”部分,它具有图标的 fontCharacter 和 fontColor 。现在我可以将文件扩展名一直关联到图标 fontCharacter 和 fontColor。
然而这就是它的结束。我无法设置 TreeView 来使用它。
最后我想我需要设置TreeItem的resourceUri让vscode自动确定图标。见 https://code.visualstudio.com/api/references/vscode-api#TreeItem.resourceUri

关于api - vscode api : how to get icons from File Icon Theme,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66178468/

相关文章:

javascript - 在 VSCode 扩展中使用 JavaScript DOM

visual-studio-code - 如何在 VS Code 中运行 Lua 脚本

javascript - VSCode扩展直接使用多步输入

php - 如何使用定期计费功能设置 Paypal 自适应付款

c# - 异步正在成为背后的痛苦,因为我正在尝试制作一个不会吸吮的可重用库

javascript - 如何使用 Javascript 排除不存在的 JSON 数据?

visual-studio-code - 发布 VSCode 扩展时检测图标时出错

ios - 使用 AFXAuthClient 时,如何保留 token 并发出进一步的请求?

macos - 有没有可以在配备 M1 芯片的 iPad Pro 2021 上使用 VS Code 程序?

visual-studio-code - 如何在 VSC 中再次启用工具提示/提示?