-
Notifications
You must be signed in to change notification settings - Fork 35.7k
Description
From #22836
Feature
Allow extensions to enhance to VSCode's builtin markdown preview, such as adding math support for example
Working Draft of API
Extensions can enhance VSCode's markdown preview by:
- Providing stylesheets for the preview page
- Providing markdown-it plugins that add support for new markdown syntax
- Provide scripts that run on the preview page
Changing the Styling of the Markdown Preview
To change the styling of markdown preview page, just add a markdown.preview entry to the contributes section of your extension's package.json, like so:
{
"contributes": {
"markdown.preview": {
"styles": ["./my_custom_style.css"]
}
}
}styles should be an array of extension relative paths to CSS files. These stylesheets will be included on the markdown preview page, and will be included after the default markdown preview stylings but before the user's custom stylesheets.
Using Markdown-It Plugins to Support New Markdown Syntax
To support new markdown syntax, first add markdown-it.plugins entry in the extension's package.json
{
"contributes": {
"markdown-it.plugins": true
}
}This tells VSCode that your extension provides markdown-it plugins and that it should be activated before the markdown preview is shown.
To register the plugins themselves, in your extension's activate function, just return an object with an extendMarkdownIt method. This method takes a markdown-it instance and must return a modified version of that instance.
export function activate(context: vscode.ExtensionContext) {
return {
extendMarkdownIt(md: any): any {
return md.use(require('markdown-it-emoji'))
}
}
}VSCode's markdown extension will invoke extendMarkdownIt when the markdown preview is shown for the first time.
🎵 Note: Your extension can still use other activation points that are triggered before a markdown preview is ever shown. The
pluginsentry only means that your extension will be activated when the preview is first shown if it has not already been activated previously.
Adding a Script that is Run in the Markdown Preview
If you need further customization, you can also inject a script into the markdown preview page:
{
"contributes": {
"markdown.preview": {
"scripts": ["./my_custom_script.js"]
}
}
}scripts should be an array of extension relative paths to javascript files. These scripts will be included on the markdown preview page. Scripts should only be used if a common mark plugin will not work