IntelliJ Platform SDK DevGuide

1. Adding Live Template Support

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.

import com.intellij.codeInsight.template.impl.DefaultLiveTemplatesProvider;
import org.jetbrains.annotations.Nullable;

public class MarkdownTemplateProvider implements DefaultLiveTemplatesProvider {
    @Override
    public String[] getDefaultLiveTemplateFiles()
    {
        return new String[] {"liveTemplates/Markdown"};
    }

    @Nullable
    @Override
    public String[] getHiddenLiveTemplateFiles() {
        return new String[0];
    }
}

Implement TemplateContextType

A TemplateContextType tells us where the live template is applicible.

import com.intellij.codeInsight.template.impl.DefaultLiveTemplatesProvider;
import org.jetbrains.annotations.Nullable;

public class MarkdownTemplateProvider implements DefaultLiveTemplatesProvider {
    @Override
    public String[] getDefaultLiveTemplateFiles()
    {
        return new String[] {"liveTemplates/Markdown"};
    }

    @Nullable
    @Override
    public String[] getHiddenLiveTemplateFiles() {
        return new String[0];
    }
}

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>

Register Extension Points

<idea-plugin version="2">
  <id>live_templates</id>
  <name>live_templates</name>
  <version>1.0</version>
  <vendor email="support@yourcompany.com" url="http://www.yourcompany.com">YourCompany</vendor>

  <description><![CDATA[
      Enter short description for your plugin here.<br>
      <em>most HTML tags may be used</em>
    ]]></description>

  <change-notes><![CDATA[
      Add change notes here.<br>
      <em>most HTML tags may be used</em>
    ]]>
  </change-notes>

  <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
  <idea-version since-build="141.0"/>

  <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
       on how to target different products -->
  <!-- uncomment to enable plugin in all products
  <depends>com.intellij.modules.lang</depends>
  -->

  <extensions defaultExtensionNs="com.intellij">
    <defaultLiveTemplatesProvider implementation="MarkdownTemplateProvider"/>
    <liveTemplateContext implementation="MarkdownContext"/>

  </extensions>

  <actions>
    <!-- Add your actions here -->
  </actions>

</idea-plugin>

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.

Last modified: