VSCode 扩展 API - 在资源管理器上下文菜单中单击识别文件或文件夹

VSCode Extension API - Identify file or folder click in explorer context menu

VSCode 1.3 增加了对向上下文菜单添加命令的支持。有没有办法识别文件或文件夹是否被单击以打开资源管理器上下文菜单?

"menus": {
    "explorer/context": [
        {
            "when": "????",
            "command": "extension.myCommand",
            "group": "myGroup"
        }
    ]
}

此外,是否有完整的(大概)表达式列表可以在此处的 when 子句中检查?

有关此功能的文章是 here。但基本上:

  • the when is the same as the keybindings-when and can use the same keys
  • the when can use two new keys resourceScheme and resourceLangId which are available without an editor - think of the explorer context menu
  • the when can be a boolean configuration value, e.g config.editor.lineNumbers

我的菜单:

"menus":{
    "explorer/context": [
        {
            "when": "resourceLangId == sql",
            "command": "extension.myCmd"
        }
    ]

您可以像这样获取语言 ID 列表...

vscode.languages.getLanguages().then(l => console.log('languages', l));

我还没弄明白如何判断被右键单击的项目是否是一个目录。如果有人弄明白了请告诉我。

您可以使用 "when": "explorerResourceIsFolder".

我不得不深入研究代码才能找到它(我实际上是在写一个回复说它不存在并在我看到它时列举可能的子句值)。

从 v1.10.1 开始:

config.<any_config_path_here>
editorIsOpen
explorerResourceIsFolder
explorerViewletFocus
explorerViewletVisible
filesExplorerFocus
globalMessageVisible
inDebugMode
inQuickOpen
inZenMode
listFocus
openEditorsFocus
resource (Uri information: path, query, scheme, etc)
resourceFilename
resourceLangId
resourceScheme
scmProvider
textCompareEditorVisible

我已提交 an issue 以改进相关文档。

https://code.visualstudio.com/docs/getstarted/keybindings#_when-clause-contexts

是文件:"when": "!explorerResourceIsFolder"

是目录:"when": "explorerResourceIsFolder"

关于获取综合上下文键列表:在最近的VSCode版本中,有一个开发者:检查上下文键命令。执行命令后,它会让你选择一个 UI 元素:

之后,开发控制台打开,您可以在 "scope":

中展开包含上下文键及其当前值的完整列表的记录对象