美文网首页
编写一个自己的插件!

编写一个自己的插件!

作者: BoomHe | 来源:发表于2017-09-28 13:23 被阅读38次

    开发插件原由

    近期项目组考虑到编写代码的时候有个繁琐的工作

    • class -> className
    • for -> htmlFor
    • style

    就是遇到类似上面这些字符的时候得转换成相应的字符

    开发插件的步骤

    1、Step 新建插件项目

    开发工具是 IDEA

    选择 File->New->Project 选择 IntelliJ Platform Plugin

    新建项目.png

    如图:选好 JDK 就可以了

    2、Step

    编写 plugin.xml

      <actions>
        <group id="StringConversion.Generate" text="StringConversion" description="对 JS 文件中的特需字符转换">
          <action id="StringConversion.StringAction"
                  class="com.caituo.plugin.StringConversion"
                  text="StringConversion" description="StringConversion">
            <add-to-group group-id="EditMenu" anchor="first"/>
            <add-to-group group-id="EditorPopupMenu" anchor="first"/>
            <keyboard-shortcut keymap="$default" first-keystroke="shift ctrl P"/>
          </action>
        </group>
      </actions>
    

    actions节点理解成 Android Studio XML 文件里的application
    group id节点理解成 Android Studio XML 文件里的activity
    add-to-group group-id 导航栏设置
    keyboard-shortcut 快捷键设置

    3、Step

    编写类继承com.intellij.openapi.actionSystem.AnAction

        /**
         * 执行插件的入口,相当于java中的main方法
         *
         * @param anActionEvent
         */
        @Override
        public void actionPerformed(AnActionEvent anActionEvent) {
            if (!isFastClick(1000)) {
                Logger.init(getClass().getSimpleName(), Logger.DEBUG);
            }
            Editor editor = anActionEvent.getData(PlatformDataKeys.EDITOR);
            if (editor == null) {
                return;
            }
            SelectionModel model = editor.getSelectionModel();
            String text = model.getSelectedText();
            if (TextUtils.isEmpty(text)) {
                return;
            }
            Logger.debug(text);
    
            //下面这句话也可以使用 lambda 语法写:Runnable runnable = () -> editor.getDocument().replaceString(selectionModel.getSelectionStart(), selectionModel.getSelectionEnd(), TransitionUtils.spacingText(selectedText));
            Runnable runnable = new Runnable() {
                @Override
                public void run() {
                    //先对空格、制表符进行换掉,然后再重新进行分隔处理。其中分行不处理,因为在写文章的时候复制的一些内容分行是有意义的。
                    editor.getDocument().replaceString(model.getSelectionStart(),
                            model.getSelectionEnd(),
                            TransitionUtils.spacingText(RegexExpressionUtils.replace(text, "\\f|\\r|\\t", "")));
                }
            };
    
            WriteCommandAction.runWriteCommandAction(anActionEvent.getData(PlatformDataKeys.PROJECT), runnable);
        }
    

    4、Step

    打包生成 .jar 文件

    GitHub 地址:Conversion

    相关文章

      网友评论

          本文标题:编写一个自己的插件!

          本文链接:https://www.haomeiwen.com/subject/gdrmextx.html