Template Creation
Initially, you will need to create a new Live Template from scratch. Add a new Template Group, "Markdown" and create a new Live Template under this group. Then give the template an abbreviation (ex. "[") and a description (ex. "New markdown link"). Paste the following snippet into the Template text:
[$TEXT$]($LINK$)$END$
The variables $TEXT$
and $LINK$
may be further configured in the Edit variables dialogue, to reorder their precedence and bind to functions that will invoke auto-completion at the appropriate time, among many other useful functions. Developers should become familiar with the provided functions before implementing any special functionality in a plugin, in case the desired feature is available as a predefined function.
Finally, give your new Live Template an applicable context (ie. "Everywhere" or "Other").
Export the Live Template
Once confident the Live Template produces the expected result (consider testing it inside the current editor to minimize debugging later), export the Live Template (File | Export Settings | ☑ Live Templates). Unpack the resulting archive, and inside a directory ./templates/
there will be a file called Markdown.xml
with the following contents:
<templateSet group="Markdown">
<template name="[" value="[$TEXT$]($LINK$)$END$" description="New link reference." toReformat="false" toShortenFQNames="false">
<variable name="TEXT" expression="" defaultValue="" alwaysStopAt="true" />
<variable name="LINK" expression="complete()" defaultValue="" alwaysStopAt="true" />
<context>
<option name="OTHER" value="true" />
</context>
</template>
</templateSet>
Copy this file into your plugin's resources, (eg. project/resource/liveTemplates/Markdown.xml
.
Implement DefaultLiveTemplatesProvider
The DefaultLiveTemplatesProvider
tells us where to find the Live Template settings file. Make sure to include the full path to the file, relative to the resources directory, excluding the file name.
{% include /code_samples/live_templates/src/MarkdownTemplateProvider.java %}
Implement TemplateContextType
A TemplateContextType
tells us where the live template is applicable.
{% include /code_samples/live_templates/src/MarkdownContext.java %}
Once you define the TemplateContextType
*, be sure to add the assigned context type to the previously created Live Template settings file. Under <template>...</template>
add the following context:
<context>
<option name="MARKDOWN" value=true />
</context>
*It is not always necessary to define your own TemplateContextType
, as there are many existing template contexts already defined in the IntelliJ Platform. Consider reusing one of the many existing template contexts if you are augmenting language support to an existing area.
Register Extension Points
{% include /code_samples/live_templates/resources/META-INF/plugin.xml %}
Check Plugin
Now check that the plugin is working correctly. Run the plugin and verify there is a new entry under File | Settings | Live Templates | Markdown | [. Finally, create a new file Test.md
and confirm that the Live Template works.