如何在带有 vscode API 的悬停消息上应用样式和 html 标签?
How to apply styling and html tags on hover message with vscode API?
我正在尝试使用 MarkdownString
设置悬停消息的样式或格式,但它总是导致空 space 或转义所有内容,但我发现您可以使用 span
设置样式它但是你只能用这个 PR.
应用 color
和 background-color
现在,纯文本可能很难看,甚至使用 table markdown 也不起作用。有什么办法可以改善吗?
我是这样写的:
const markdown = new MarkdownString(`<p> Some label: <code>${value}</code></p>`);
markdown.isTrusted = true;
return new Hover(markdown, range);
使用 v1.61,您将有更多 markdownString
选项。将支持这些 html 标签:
allowedTags: ['ul', 'li', 'p', 'code', 'blockquote', 'ol', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'em', 'pre', 'table', 'thead', 'tbody', 'tr', 'th', 'td', 'div', 'del', 'a', 'strong', 'br', 'img', 'span'],
因此,使用 b
、h1
等,您可以获得一些额外的“样式”。
/**
* Indicates that this markdown string can contain raw html tags. Default to false.
*
* When `supportHtml` is false, the markdown renderer will strip out any raw html tags
* that appear in the markdown text. This means you can only use markdown syntax for rendering.
*
* When `supportHtml` is true, the markdown render will also allow a safe subset of html tags
* and attributes to be rendered. See https://github.com/microsoft/vscode/blob/6d2920473c6f13759c978dd89104c4270a83422d/src/vs/base/browser/markdownRenderer.ts#L296
* for a list of all supported tags and attributes.
*/
supportHtml?: boolean;
一些示例代码:
const value = "Jello";
const content = new vscode.MarkdownString(`<span style="color:#000;background-color:#fff;">Howdy there.</span>`);
content.appendMarkdown(`<p><b> Some label: <code>${value}</code></b></p>`)
content.supportHtml = true;
content.isTrusted = true;
return new vscode.Hover(content, new vscode.Range(position, position));
在我的测试中你仍然只能使用
<span style="color:#000;background-color:#fff;">
除 color
和 background-color
外没有其他样式。
这里有一些适合我做样式、markdown tables、代码块等的选项:
vscode.languages.registerHoverProvider('javascript', {
provideHover(document, position, token) {
// a markdown table, wrapping in a styled span did not work
// had to style each "cell" separately
// html entity works
const markdown = new vscode.MarkdownString(`
| <span style="color:#ff0;background-color:#000;"> Table </span>| Header |
| :----: | :----: |
|first cell |second cell |
|third cell |<span style="color:#f00;background-color:#fff;"> fourth cell </span> |
\n\n\n`); // the newline is necessary for any following appends to work correctly, multiple newlines are reduced to one
const styledString = `<span style="color:#fff;background-color:#666;"> NASA code follows: </span>`;
const codeBlock = `const a = 12;
if (a) return;`; // any preceding tabs will be rendered in a template literal, so flush left
// const codeBlock2 = `const c = 12;\nif (c) return;`; // works, alternate form with newline
markdown.appendText("______________________________\n"); // a fake separator
markdown.appendMarkdown(styledString);
markdown.appendCodeblock(codeBlock, "javascript");
markdown.appendMarkdown(
`**Bold Text**
* some note
* another note
* final note`
);
markdown.isTrusted = true;
return new vscode.Hover(markdown, new vscode.Range(position, position));
}
- 注意:出于某种原因,降价 table 没有任何单元格或 table 分隔线。
我正在尝试使用 MarkdownString
设置悬停消息的样式或格式,但它总是导致空 space 或转义所有内容,但我发现您可以使用 span
设置样式它但是你只能用这个 PR.
color
和 background-color
现在,纯文本可能很难看,甚至使用 table markdown 也不起作用。有什么办法可以改善吗?
我是这样写的:
const markdown = new MarkdownString(`<p> Some label: <code>${value}</code></p>`);
markdown.isTrusted = true;
return new Hover(markdown, range);
使用 v1.61,您将有更多 markdownString
选项。将支持这些 html 标签:
allowedTags: ['ul', 'li', 'p', 'code', 'blockquote', 'ol', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'em', 'pre', 'table', 'thead', 'tbody', 'tr', 'th', 'td', 'div', 'del', 'a', 'strong', 'br', 'img', 'span'],
因此,使用 b
、h1
等,您可以获得一些额外的“样式”。
/**
* Indicates that this markdown string can contain raw html tags. Default to false.
*
* When `supportHtml` is false, the markdown renderer will strip out any raw html tags
* that appear in the markdown text. This means you can only use markdown syntax for rendering.
*
* When `supportHtml` is true, the markdown render will also allow a safe subset of html tags
* and attributes to be rendered. See https://github.com/microsoft/vscode/blob/6d2920473c6f13759c978dd89104c4270a83422d/src/vs/base/browser/markdownRenderer.ts#L296
* for a list of all supported tags and attributes.
*/
supportHtml?: boolean;
一些示例代码:
const value = "Jello";
const content = new vscode.MarkdownString(`<span style="color:#000;background-color:#fff;">Howdy there.</span>`);
content.appendMarkdown(`<p><b> Some label: <code>${value}</code></b></p>`)
content.supportHtml = true;
content.isTrusted = true;
return new vscode.Hover(content, new vscode.Range(position, position));
在我的测试中你仍然只能使用
<span style="color:#000;background-color:#fff;">
除 color
和 background-color
外没有其他样式。
这里有一些适合我做样式、markdown tables、代码块等的选项:
vscode.languages.registerHoverProvider('javascript', {
provideHover(document, position, token) {
// a markdown table, wrapping in a styled span did not work
// had to style each "cell" separately
// html entity works
const markdown = new vscode.MarkdownString(`
| <span style="color:#ff0;background-color:#000;"> Table </span>| Header |
| :----: | :----: |
|first cell |second cell |
|third cell |<span style="color:#f00;background-color:#fff;"> fourth cell </span> |
\n\n\n`); // the newline is necessary for any following appends to work correctly, multiple newlines are reduced to one
const styledString = `<span style="color:#fff;background-color:#666;"> NASA code follows: </span>`;
const codeBlock = `const a = 12;
if (a) return;`; // any preceding tabs will be rendered in a template literal, so flush left
// const codeBlock2 = `const c = 12;\nif (c) return;`; // works, alternate form with newline
markdown.appendText("______________________________\n"); // a fake separator
markdown.appendMarkdown(styledString);
markdown.appendCodeblock(codeBlock, "javascript");
markdown.appendMarkdown(
`**Bold Text**
* some note
* another note
* final note`
);
markdown.isTrusted = true;
return new vscode.Hover(markdown, new vscode.Range(position, position));
}
- 注意:出于某种原因,降价 table 没有任何单元格或 table 分隔线。