visual-studio-code - 如何向 VS Code 资源管理器标题栏或命令面板贡献一个命令,该命令仅在我的 webview 获得焦点时才处于事件状态?

标签 visual-studio-code vscode-extensions

我正在编写一个使用 VS Code 的 webview api 的扩展.我的扩展程序还注册了一个更新 web View 内容的 refresh preview 命令。我怎样才能做到:

  • 刷新预览 命令仅在我的 webview 获得焦点时显示在命令面板中?

  • 刷新预览 命令显示在 webview 的编辑器标题栏中?

最佳答案

首先,创建自定义 context key跟踪您的 WebView 何时聚焦。使用 VS Code 的 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);
});

然后在扩展的 menus contribution pointwhen 子句中使用上下文键

对于 ID 为 myExtension.refreshPreview 的命令,要确保该命令仅在您的 webview 获得焦点时显示在命令面板中,请使用以下内容:

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

要向 webview 的编辑器标题栏添加命令(可能带有图标),请使用 editor/title 贡献点:

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

查看 VS Code's built-in markdown extension有关此的更高级示例。

关于visual-studio-code - 如何向 VS Code 资源管理器标题栏或命令面板贡献一个命令,该命令仅在我的 webview 获得焦点时才处于事件状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54917748/

相关文章:

visual-studio-code - 为什么 VSCode 是 "Unable to open Extension. An unknown error occurred."?

visual-studio-code - VS 代码 : Is it possible to have an extension with user interface (Html/css/JS)?

visual-studio-code - vs代码: zoom code tab only

visual-studio-code - 调试崩溃的语言服务器

visual-studio-code - 将图标添加到快速选择列表

javascript - StatusBarItem 的注册命令

visual-studio-code - 如何为 Visual Studio 代码扩展创建文件?

visual-studio-code - 在不安装 Visual Studio 2015 的情况下为 Visual Studio Code 安装 .NET core 1.0.1?

html 没有链接到 Visual Studio Code 中的 css 文件

visual-studio-code - VSCode如何全局清除workspaceState数据?