首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从悬停在VSCode extension中打开另一个文档

从悬停在VSCode extension中打开另一个文档
EN

Stack Overflow用户
提问于 2021-07-09 23:00:39
回答 2查看 91关注 0票数 0

我尝试在VSCode扩展中从Hover打开一个文档。

此时将出现悬停,显示链接和URI,但当我单击时,什么也没有发生。调试控制台中有一条输出,指出在开发人员工具控制台中该命令是未知的。

我做错了什么?以下是代码,稍微简化了一点

代码语言:javascript
代码运行次数:0
运行
复制
context.subscriptions.push(
        vscode.languages.registerHoverProvider({pattern: '**/*.{ttp,tts}'}, {
            provideHover(document, position, token) {
                
                const linkPosition = new vscode.Position(10, 1);
                const range = new vscode.Range(position, position);
                
                const opts: vscode.TextDocumentShowOptions = {
                    selection: range,
                    viewColumn: vscode.ViewColumn.Beside
                };
                
                const workspace = vscode.workspace.workspaceFolders?.find(e => e.uri.fsPath.endsWith("workspace"));
                const uri = vscode.Uri.file(`${workspace?.uri.path}/_global.tt/ercdata/ttc.properties`);

                const args = [{ uri: uri , options: opts}];  

                const stageCommandUri = vscode.Uri.parse(
                    `command:window.showTextDocument?${encodeURIComponent(JSON.stringify(args))}`
                );
                let link = new vscode.MarkdownString(`[Open...](${stageCommandUri})`);
                link.isTrusted = true;

                let hover: vscode.Hover = {
                    contents: [link]
                };
                return hover;

                let x = properties.getHoverFor(document, position, path.basename(document.uri.fsPath).replace(".tts","").replace(".ttp","").toLowerCase()); 
                return  x;
            }
        }));

下面是悬停的渲染方式:

以下是dev控制台的输出:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-09 23:42:33

您应该使用一个真正的命令,如this article中记录的vscode.open,或者使用您自己的命令。

window.showTextDocument本身就是一个扩展应用程序接口。

票数 1
EN

Stack Overflow用户

发布于 2021-07-10 12:47:12

李雷克斯为我指明了正确的方向,谢谢。

将openTextDocument任务封装到我自己的命令中,并从悬停中寻址此命令解决了这个问题:

代码语言:javascript
代码运行次数:0
运行
复制
context.subscriptions.push(vscode.commands.registerCommand('estudio.internal.open', (uri: vscode.Uri, options: vscode.TextDocumentShowOptions) => {
            logger.info("Opening a document");
            vscode.window.showTextDocument(uri, options);
        }));

比编写Hover的使用

代码语言:javascript
代码运行次数:0
运行
复制
const stageCommandUri = vscode.Uri.parse(
                    `command:estudio.internal.open?${encodeURIComponent(JSON.stringify(args))}`

做到了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68318892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档