我想让 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/