idea 欢迎界面项目列表右键打开终端
效果、仓库
插件安装包插件说明
很简单的一小功能,仅仅是增加一个打开终端的功能而已,可在获取项目路径上走了很多坑,查阅了很多资料。在idea2023.1版本之前,至少2022.4获取Project对象仅仅需要RecentProjectsWelcomeScreenActionBase
类或 AnActionEvent
类的getData
方法加上几个字段(CommonDataKeys, PlatformDataKeys, LangDataKeys类常量
)即可获取。在2023版本只能获取到null
1 2 3
| public @Nullable <T> T getData(@NotNull DataKey<T> key) { return getDataContext().getData(key); }
|
查阅了官方文档、Google、百度等信息,均无法解决获取Project对象的存储路径信息。在2023.1版本扩展组WelcomeScreenRecentProjectActionGroup的RecentProjectsWelcomeScreenActionBase等
项目的代码均用kotlin重写,也边学边用kotlin进行扩展,最终因技术有限也未能找到获取Project相关信息的方法。
突然想到kotlin和Java是可以互相调用的,于是有了如下的代码。相当的简陋,仅仅满足自己的需求。今后会不会完善并发布到插件平台待定。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
Class<?> RecentProjectsWelcomeScreenActionBase$Companion = Class.forName ("com.intellij.openapi.wm.impl.welcomeScreen.projectActions.RecentProjectsWelcomeScreenActionBase$Companion"); Constructor<?> CompanionConstructor = RecentProjectsWelcomeScreenActionBase$Companion.getDeclaredConstructor (); CompanionConstructor.setAccessible (true); Object companion = CompanionConstructor.newInstance ();
Method getSelectedItem$intellijPlatformIdeImpl = RecentProjectsWelcomeScreenActionBase$Companion.getMethod ("getSelectedItem$intellij_platform_ide_impl", AnActionEvent.class);
Object invoke = getSelectedItem$intellijPlatformIdeImpl.invoke (companion, e); Method getProjectPath = invoke.getClass ().getMethod ("getProjectPath"); String projectPath = String.valueOf (getProjectPath.invoke (invoke));
ProcessBuilder executeCommand = new ProcessBuilder ("open", "-a", "/Applications/iTerm.app", projectPath); executeCommand.start ();
|
1 2 3 4 5 6 7
| com.intellij.openapi.wm.impl.welcomeScreen.projectActions.CopyProjectPathAction 父类---内部类:com.intellij.openapi.wm.impl.welcomeScreen.projectActions.RecentProjectsWelcomeScreenActionBase$Companion 获取内部类--- 方法名|类型:getRECENT_PROJECT_TREE_KEY$intellij_platform_ide_impl | 无参 获取内部类--- 方法名|类型:getTree | com.intellij.openapi.actionSystem.AnActionEvent 获取内部类--- 方法名|类型:getSelectedItem$intellij_platform_ide_impl | com.intellij.openapi.actionSystem.AnActionEvent 获取内部类--- 方法名|类型:getRECENT_PROJECT_SELECTED_ITEM_KEY$intellij_platform_ide_impl | 无参 路径:/UsersDesktop/Temp/未命名文件夹
|
插件项目结构
使用idea自带Plugin DevKit 创建项目,默认Gradle 不是Groovy有些可惜。
plugin.xml 、build.gradle 文件比较重要。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| ├── README.md ├── build.gradle.kts ├── gradle │ └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── settings.gradle.kts └── src └── main ├── java ├── kotlin └── resources └── META-INF ├── plugin.xml #插件配置文件 └── pluginIcon.svg #插件图标
|
增加扩展点