从 Hover 打开 VSCode 扩展中的另一个文档
Open another document in VSCode extension from Hover
我尝试在 VSCode 扩展中通过悬停打开文档。
出现悬停,显示 link 以及 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;
}
}));
悬停的呈现方式如下:
这是开发控制台的输出:
您应该使用 this article 中记录的真实命令,例如 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))}`
做到了。
我尝试在 VSCode 扩展中通过悬停打开文档。
出现悬停,显示 link 以及 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;
}
}));
悬停的呈现方式如下:
这是开发控制台的输出:
您应该使用 this article 中记录的真实命令,例如 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))}`
做到了。