如何向VSCode编辑器扩展发送异步命令

3
我希望能够使用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扩展或任务处理程序。

1
如果你可以在Node.js中做到某件事情,那么你也可以尝试在VSC中做同样的事情,因为它运行在Node.js上。 - rioV8
1
如果找不到其他方法,一个“替代方案”是使用Sketchup创建一个vscode命令文件。然后,您可以在VSCode中创建一个文件监视器,以便在Sketchup命令文件更改时进行监视。 - boocs
1个回答

2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接