VSCode Extension API - идентификация файла или папки, щелчок в контекстном меню проводника

VSCode 1.3 добавил поддержку для добавления команд в контекстные меню. Есть ли способ определить, щелкнули ли файл или папку, чтобы открыть контекстное меню проводника?

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

Кроме того, существует ли здесь исчерпывающий список выражений, которые можно проверить в предложении when?


person bingles    schedule 08.07.2016    source источник


Ответы (5)


Что касается получения исчерпывающего списка контекстных ключей: в последних версиях VSCode есть команда Разработчик: Проверить контекстные ключи. После выполнения команды вы можете выбрать элемент пользовательского интерфейса:

После этого откроется консоль разработчика, и вы можете развернуть зарегистрированный объект, который содержит полный список контекстных ключей и их текущих значений в этой «области»:

person Gama11    schedule 28.07.2019

Вы можете использовать "when": "explorerResourceIsFolder".

Мне пришлось покопаться в коде, чтобы найти его (на самом деле я писал ответ, в котором говорилось, что его не существует, и перечислял возможные значения предложения, когда я его видел).

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

Я отправил проблему, чтобы улучшить документацию по этому поводу.

person mdickin    schedule 12.03.2017

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

это файл: "when": "!explorerResourceIsFolder"

это dir: "when": "explorerResourceIsFolder"

person Alex Popkov    schedule 30.06.2018

Вы можете получить список идентификаторов языков вот так ...

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

Я до сих пор не понял, как определить, является ли элемент, по которому щелкнули правой кнопкой мыши, каталогом. Если кто-то это поймет, дайте мне знать.

person Lenny    schedule 03.03.2017
comment
Ленни, посмотри мой ответ. Вы можете использовать explorerResourceIsFolder - person mdickin; 12.03.2017

Сообщение об этой функции можно найти здесь. Но в основном:

  • когда совпадает с сочетаниями клавиш-когда и может использовать те же клавиши
  • когда можно использовать два новых ключа resourceScheme и resourceLangId, которые доступны без редактора - подумайте о контекстном меню проводника
  • когда может быть логическим значением конфигурации, например config.editor.lineNumbers

Мое меню:

"menus":{
    "explorer/context": [
        {
            "when": "resourceLangId == sql",
            "command": "extension.myCmd"
        }
    ]
person ozczecho    schedule 09.07.2016
comment
Я все еще не вижу полного списка. Отражают ли сочетания клавиш все доступные параметры? также можно ли использовать resourceScheme или resourceLangId, чтобы различать файл и папку? - person bingles; 09.07.2016
comment
@bingles см. мой ответ для списка идентификаторов языков. Я до сих пор не понял, как, к сожалению, определить, является ли этот элемент папкой. - person Lenny; 03.03.2017
comment
Не знаю, догадались ли вы уже об этом, но теперь доступен enablement: explorerResourceIsFolder - person Daniel; 09.04.2020