Проводник/контекстные меню. Можно ли изменить контекст папки в зависимости от файла внутри папки?

Итак, в настоящее время у меня есть контекстные меню, основанные на папке в VScode.

Мне интересно, могу ли я сделать контекст в зависимости от того, существует ли файл внутри папки. Например, если temp.exe не существует в папке, контекст не отображается?

Кажется, нигде в документации не найти.

Спасибо,

Трент

Это для расширения Vscode. Я пробовал только возможность получить контекст на основе типа файла.

"menus": {
            "explorer/context":[
                {
                    "when": "explorerResourceIsFolder",
                    "command": "extension.runApp",
                    "group": "vm@1"
                },
                {
                    "when":"explorerResourceIsFolder",
                    "command": "extension.provisionApp",
                    "group": "vm@2"
                }
            ]
        }

person Trent Hilliam    schedule 05.08.2019    source источник
comment
Вы можете проверить, какие контекстные ключи доступны следующим образом: stackoverflow.com/a/57245061/2631715 - я не думаю хотя любой из них действительно подходит для вашего случая.   -  person Gama11    schedule 05.08.2019
comment
Да к сожалению нет. Я думаю, мне, возможно, придется посмотреть под другим углом.   -  person Trent Hilliam    schedule 05.08.2019


Ответы (1)


Это в оператор для предложений when выглядит так, как будто это то, что вы искали. Из примечаний к выпуску v1.49:

Мы добавили новый оператор in для предложений when. Этот новый оператор позволяет осуществлять динамический поиск значения контекстного ключа в значении другого контекстного ключа. Например, если вы хотите добавить команду контекстного меню в папки, содержащие файлы определенного типа (или что-то, что не может быть известно статически), теперь вы можете использовать для этого оператор in.

vscode.executeCommand('setContext', 'ext:supportedFolders', [ 'test', 'foo', 'bar' ]);

// Note in this case (using an object), the value doesn't matter, it is based on the existence of the key in the object
vscode.executeCommand('setContext', 'ext:supportedFolders', { 'test': true, 'foo': 'anything', 'bar': false });

// Note, this assumes you have already defined a command called ext.doSpecial

"menus": {
  "explorer/context": [
    {
      "command": "ext.doSpecial",
      "when": "explorerResourceIsFolder && resourceFilename in ext:supportedFolders"
    }
  ]
}

В этом примере мы берем значение resourceFilename (в данном случае это имя папки) и проверяем его существование по значению ext:supportedFolders. Если он существует, будет показано меню.


person Mark    schedule 08.09.2020