【问题标题】:How to send asynchronous command to VSCode Editor's Extension如何向 VSCode 编辑器的扩展发送异步命令
【发布时间】:2021-03-26 13:22:31
【问题描述】:

我想让 3D 绘图程序 Sketchup 向 VSCode 编辑器发送命令以保存全部。 我熟悉 Sketchup 的扩展开发,并且可以为 Sketchup 扩展编写几乎任何 C++ 通信代码。它使用 Sketchup 的 Ruby 语言版本更容易编程扩展,其中包括 TCPsocket 和 HTTP 请求对象。

一种解决方案是让发送应用程序找到并获取 VSCode 可执行文件的句柄,然后发送所需菜单选项的键盘快捷键。 这不是最简洁的方法,Mac OS 需要不同的代码。

在 VSCode 方面,我不熟悉 VSCode 配置和扩展。 VSCode 似乎提供了一个 JavaScript API,包括“激活事件”:

https://code.visualstudio.com/api/references/activation-events

我没有看到任何满足我需求的东西。 EXTENSION GUIDES 子选项 Webview 最接近:

https://code.visualstudio.com/api/extension-guides/webview

在上面的 URL 中,“将消息从 webview 传递到扩展”小节允许处理来自 webview 的消息,但它似乎需要从 createWebviewPanel 引用 WebView 对话框。

我不知道该怎么做。 请注意,我不是在问如何使用 VS Code 来编辑和开发 Sketchup 扩展,而是如何创建一个 VS Code 扩展或 VS Code 执行的任务处理程序。

【问题讨论】:

  • 如果你可以从 Node.js 中做到这一点,你可以在 VSC 中尝试同样的事情,它在 Node.js 上运行
  • 如果您找不到其他方法,“另一种选择”是使用 Sketchup 创建一个 vscode 命令文件。然后,您可以在 VSCode 中为 Sketchup 命令文件更改时创建文件观察器。

标签: javascript visual-studio-code vscode-extensions


【解决方案1】:

在 vscode 扩展中运行的vscode.workspace.createFileSystemWatcher 文件观察器可以工作。您只能观看项目工作区中的文件。 Sketchup 将写入项目工作区中的文件。然后 vscode 扩展将执行workbench.action.files.saveAll 命令。

export async function register_fileWatcher( )
{
  if ( vscode.workspace.workspaceFolders )
  {
    const wsFolder = vscode.workspace.workspaceFolders[0].uri.fsPath;
    let pattern = path.join( wsFolder, '*.txt');
    let watcher = vscode.workspace.createFileSystemWatcher(
      pattern, false, false, false);

    watcher.onDidChange(_watcherChangeApplied);
    watcher.onDidCreate(_watcherChangeApplied);
    watcher.onDidDelete(_watcherChangeApplied);
  }
}

// ----------------------------- _watcherChangeApplied -----------------------------
function _watcherChangeApplied(e: vscode.Uri)
{
  vscode.commands.executeCommand('workbench.action.files.saveAll');
}
// ----------------------------------- activate -----------------------------------
export function activate(context: vscode.ExtensionContext)
{
    register_fileWatcher(context) ;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 2017-03-13
    • 2017-08-17
    • 2019-07-09
    • 2019-02-02
    • 2020-04-12
    • 1970-01-01
    相关资源
    最近更新 更多