markdown-toc
以前写过一个 java 项目,专门用于生成文件的目录。
现在学习 idea 插件开发,刚好可以用这个尝试。
开发内容
plugin.xml
<idea-plugin>
<id>com.github.com.houbb.markdown-toc-idea-plugin</id>
<name>Markdown-TOC</name>
<vendor email="houbinbin.echo@gmail.com" url="https://github.com/houbb/markdown-toc">老马啸西风</vendor>
<description><![CDATA[
Generate markdown toc for file.<br>
<em>most HTML tags may be used</em>
]]></description>
<!-- please see https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
on how to target different products -->
<depends>com.intellij.modules.platform</depends>
<extensions defaultExtensionNs="com.intellij">
<!-- Add your extensions here -->
</extensions>
<actions>
<!-- Add your actions here -->
<action id="markdownTocIn" class="com.github.houbb.markdown.toc.idea.plugin.action.FileInsideRightClickAction"
text="MarkdownTocGen" description="Generate markdown toc inside">
<add-to-group group-id="EditorPopupMenu" anchor="first"/>
</action>
<action id="markdownTocOut" class="com.github.houbb.markdown.toc.idea.plugin.action.FileOutsideRightClickAction"
text="MarkdownTocGen" description="Generate markdown toc outside">
<add-to-group group-id="ProjectViewPopupMenu" anchor="first"/>
</action>
</actions>
</idea-plugin>
我们定义 2 个 action。
markdownTocIn:在文件内右键。
markdownTocOut:idea project 视图,在文件上右键。
代码
package com.github.houbb.markdown.toc.idea.plugin.action;
import com.github.houbb.markdown.toc.core.impl.AtxMarkdownToc;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.vfs.VirtualFile;
public class BasicMarkdownTocGenAction extends AnAction {
@Override
public void actionPerformed(AnActionEvent e) {
// TODO: insert action logic here
Project project = e.getProject();
VirtualFile file = e.getData(CommonDataKeys.VIRTUAL_FILE);
if (file != null && !file.isDirectory()) {
String filePath = file.getPath();
// 使用 filePath 进行后续操作
try {
AtxMarkdownToc.newInstance().genTocFile(filePath);
} catch (Exception exception) {
//显示对话框并展示对应的信息
Messages.showInfoMessage("执行异常" + exception.getMessage(), "提示");
}
} else {
//显示对话框并展示对应的信息
Messages.showInfoMessage("必须选择一个 markdown 文件!", "提示");
}
}
}
非常的简单,我们获取当前文件的路径,然后直接调用以前的生成方法即可。
剩下的 2 个 action 直接继承这个基础类即可。
/**
* 文件内部右键
* @since 1.0.0
*/
public class FileInsideRightClickAction extends BasicMarkdownTocGenAction {
}