簡體   English   中英

從 Hover 在 VSCode 擴展中打開另一個文檔

[英]Open another document in VSCode extension from Hover

我嘗試從 VSCode 擴展中的懸停打開文檔。

出現懸停,顯示鏈接和 URI,但是當我單擊時,沒有任何反應。 調試控制台中有一個輸出,該命令在開發人員工具控制台中未知。

我做錯了什么? 這是代碼,稍微簡化了一點

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

這是 Hover 的渲染方式:

在此處輸入圖片說明

這是開發控制台的輸出:

在此處輸入圖片說明

你應該使用一個真正的命令一樣vscode.open在記錄這篇文章,或您自己的命令。

window.showTextDocument本身就是一個擴展 API。

Lex Li 為我指明了正確的方向,謝謝。

將 openTextDocument 任務包裝到我自己的命令中並從 Hover 處理此命令可以解決問題:

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 使用

const stageCommandUri = vscode.Uri.parse(
                    `command:estudio.internal.open?${encodeURIComponent(JSON.stringify(args))}`

做到了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM