Tho*_*ser 7 url visual-studio-code
在我们的软件中,我们使用自定义协议处理程序。该协议的 URL 如下所示:
xyz://foo/bar/action?SnVzdCBhIGR1bW15IHRleHQgZm9yIG15IFNPIFBvc3Q=
Run Code Online (Sandbox Code Playgroud)
当我在系统上的任何浏览器中输入此 URL 时,我们的软件都会正确处理它。现在,我想使用Alt+ 单击从 VS Code 中打开该 URL,就像使用https-Links 所做的那样。
不幸的是 VS Code 无法将其识别为 URL。有什么办法告诉它上面是一个可点击的URL吗?
您可以编写 VS Code 扩展,在其中注册您自己的链接提供程序vscode.languages.registerDocumentLinkProvider。链接提供者将返回链接列表。
由于链接中不允许使用自定义协议,因此您可以使用“命令 URI”来代替。例如:
const args = encodeURIComponent(JSON.stringify({x: ..., y: ...}));
const link = new vscode.DocumentLink(
range, vscode.Uri.parse(`command:helloworld.mycmd?${args}`)
));
Run Code Online (Sandbox Code Playgroud)
该command:部分是固定的,而helloworld.mycmd是需要注册的命令
vscode.commands.registerCommand('helloworld.mycmd', myCmdHandler);
Run Code Online (Sandbox Code Playgroud)
您可以控制发送到命令的参数,并且可以在命令中执行任何操作,因此您可以使用xyz://以下shell函数直接调用与之关联的应用程序:
import * as cp from 'child_process';
function shell(cmd: string) {
return new Promise<void>((res, rej) => {
cp.exec(cmd, (err, stdout, stderr) => {
console.log('--- stdout ---\n' + stdout);
console.log('--- stderr ---\n' + stderr);
if (err) {
rej(err);
} else {
res();
}
});
});
}
Run Code Online (Sandbox Code Playgroud)
当然,请随意修改它。
编辑:您也可以让操作系统处理 URI。例如,在 Windows 上您可以执行 shell 命令start "" "xyz://..."。也许node.js 可以以一种更加独立于平台的方式做同样的事情。
希望我已经给了你足够的指导。您可以使用链接模式扩展的源代码作为起点。
| 归档时间: |
|
| 查看次数: |
907 次 |
| 最近记录: |