javascript - 如何将异步命令发送到 VSCode 编辑器的扩展

标签 javascript visual-studio-code vscode-extensions

我想让 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 执行的任务处理程序。

最佳答案

在 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) ;
}

关于javascript - 如何将异步命令发送到 VSCode 编辑器的扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65313832/

相关文章:

javascript - 使用 javascript 完全生成 html 的优缺点

javascript - 为什么要在字符串中分割脚本结束标记?

windows - Docker xDebug 未连接到 VSCode

android - Gradle任务AssembleDebug失败

dart - 分析器无法在Visual Studio Code中工作……还是吗?

visual-studio-code - VSCode 和 Windows 终端预览

javascript - "rejected promise not handled within 1 second"vscode 扩展 API

javascript - Angularjs 允许字母字符和特殊字符,但不允许数字

oracle - VS Code Oracle Developer 在结果窗口中隐藏 SQL

如果子数组包含项目,Javascript 将过滤 JSON 对象