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

若如初见. 提交于 2019-11-27 07:49:16

问题


VSCode 1.3 has added support for adding commands to context menus. Is there a way to identify whether a file or folder is clicked to open the explorer context menu?

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

Also, is there a comprehensive(ish) list of expressions that might be checked in the when clause here?


回答1:


Regarding obtaining a comprehensive list of context keys: in recent VSCode versions, there's a Developer: Inspect Context Keys command. After executing the command, it lets you pick a UI element:

After that, the dev console opens, and you can expand the logged object that contains a full list of context keys and their current values in this "scope":




回答2:


You can use "when": "explorerResourceIsFolder".

I had to dig through the code to find it (I was actually writing up a response to say it didn't exist and enumerating the possible clause values when I saw it).

As of 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

I've submitted an issue to improve the documentation for this.




回答3:


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

is file: "when": "!explorerResourceIsFolder"

is dir: "when": "explorerResourceIsFolder"




回答4:


You can get the list of language ids like this...

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

I still haven't figured out how to determine if the item that was right clicked is a directory. If someone figures it out please let me know.




回答5:


A write up about the feature is here. But basically:

  • 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

My menu:

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


来源:https://stackoverflow.com/questions/38267360/vscode-extension-api-identify-file-or-folder-click-in-explorer-context-menu

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!