【问题标题】:VSCode Extension API - Identify file or folder click in explorer context menuVSCode 扩展 API - 在资源管理器上下文菜单中单击识别文件或文件夹
【发布时间】:2016-11-11 01:32:24
【问题描述】:

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

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

另外,这里的 when 子句中是否有一个全面的(ish)表达式列表?

【问题讨论】:

    标签: visual-studio-code vscode-extensions


    【解决方案1】:

    您可以使用"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 以改进文档。

    【讨论】:

      【解决方案2】:

      关于获取全面的上下文键列表:在最近的 VSCode 版本中,有一个 Developer: Inspect Context Keys 命令。执行命令后,它可以让您选择一个 UI 元素:

      之后,开发控制台打开,您可以在此“范围”中展开包含上下文键及其当前值的完整列表的记录对象:

      【讨论】:

        【解决方案3】:

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

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

        是目录:"when": "explorerResourceIsFolder"

        【讨论】:

          【解决方案4】:

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

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

          我还没有弄清楚如何确定右键单击的项目是否是目录。如果有人弄清楚了,请告诉我。

          【讨论】:

          • Lenny,看看我的回答。你可以使用explorerResourceIsFolder
          【解决方案5】:

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

          • when 和 keybindings 一样——when 和可以使用相同的键
          • 何时可以使用两个新的键 resourceScheme 和 resourceLangId,它们无需编辑器即可使用 - 考虑资源管理器上下文 菜单
          • when 可以是布尔配置值,例如 config.editor.lineNumbers

          我的菜单:

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

          【讨论】:

          • 我仍然没有看到完整的列表。键绑定是否反映所有可用选项?也可以使用resourceScheme 或resourceLangId 来区分文件和文件夹吗?
          • @bingles 查看我对语言 ID 列表的回答。可悲的是,我还没有弄清楚如何判断该项目是否为文件夹。
          • 我不知道你是否已经想到这一点,但现在有一个enablement 可用:explorerResourceIsFolder
          猜你喜欢
          • 2011-12-24
          • 2014-01-11
          • 1970-01-01
          • 2021-04-09
          • 1970-01-01
          • 2012-04-05
          • 2023-04-08
          • 2019-01-28
          相关资源
          最近更新 更多