我要如何发布命令给VS代码浏览器标题栏或命令调色板,当我的web视图为焦点才有效?(How do I

2019-10-16 12:53发布

我正在写一个使用VS代码的一个扩展的WebView API 。 我的扩展还注册了一个refresh preview可更新的WebView内容的命令。 我怎样才能让这个:

  • refresh preview命令仅在命令面板显示出来时,我的WebView集中?

  • refresh preview命令显示在网页视图的编辑器的标题栏?

Answer 1:

首先,创建一个自定义的背景下键 ,当你的WebView集中跟踪。 使用VS代码的setContext命令,以使这种情况下,当你的WebView集中键轨道:

const myWebview = ...;

// Make the context key track when one of your webviews is focused
myWebview.onDidChangeViewState(({ webviewPanel }) => {
    vscode.commands.executeCommand('setContext',
        'myWebviewFocused',
        webviewPanel.active);
});

然后用你的背景下关键的when您的扩展的条款菜单的贡献分

为了与标识的命令myExtension.refreshPreview ,确保命令仅在当你的web视图集中,使用下面的贡献命令调色板显示出来:

{
  "contributes": {
    "menus": {
      "commandPalette": [
        {
          "command": "myExtension.refreshPreview",
          "when": "myWebviewFocused",
        }
      ]
    }
  }
}

对于添加的命令(可能带有图标)的网页视图的编辑器标题栏,使用editor/title贡献点:

{
  "contributes": {
    "menus": {
      "editor/title": [
        {
          "command": "myExtension.refreshPreview",
          "when": "myWebviewFocused",
        }
      ]
    }
  }
}

退房VS代码的内置降价扩展为这个更高级的例子。



文章来源: How do I contribute a command to the VS Code explorer title bar or command palette that is only active when my webview is focused?