单击 VSCode 的 activity 栏中的扩展程序图标后如何执行特定命令?

How to execute a particular command after clicking an extension's icon in VSCode's activity bar?

我正在开发 VSCode 扩展程序,并且刚刚将图标添加到 activity 栏。我想要做的是,每当用户单击该图标时执行命令。这是我试过的:

Package.json

"viewsContainers": {
      "activitybar": [
        {
          "id": "myID",
          "title": "Testing",
          "icon": "res/logo.svg"
        }
      ]
    },
    "views": {
      "myID": [
        {
          "id": "Explorer",
          "name": "Browse contents",
          "commands": "vscode-myorg.getContents"
        }
      ]
    }

但是,vscode-myorg.getContents 命令在单击该图标后并未执行。我怎样才能做到这一点?

您必须定义您的任何新命令。

 "commands": [

      {
        "command": "vscode-workat.getProblems",
        "title": "Get Problems"
      },
]

并在扩展中注册。

正在查看已关闭的 Feature Request: Add an API event to indicate when the sidebar viewlet changes,因为它正在等待 getContext 上另一个仍未解决的问题得到解决。并且在 package.json 中使用 intellisense 除了 idtitleicon 之外没有其他键。所以你不能在那里放一个 command 条目(我试过了,但什么也没发生。)

还有一些其他选项可能适合您:

如果您的视图由 TreeView 填充,那么您可以检测到树视图的 visibility 何时发生变化:

myTree.onDidChangeVisibility(ev => {
    console.log(ev);                      // ev.visibiltiy = true/false
})

因此您可以检测视图何时因为 Activity 栏图标被单击而变得可见。那确实有效。但是,当视图已经打开并且用户只是折叠或展开该单个视图时,也会触发此事件。而且我认为真的没有办法区分这两种情况。

如果您使用 WebView 填充您的视图,那么还有一个 onDidChangeVisibility 事件。


有一个视图激活的激活事件:

"activationEvents": [
  "onView:package-dependencies"
]

但这只会在第一次激活视图时触发 - 并启动您的扩展程序的 activate 功能,因此可能不是您要找的。