IntelliJ IDE 插件开发 | (十)主题插件开发入门

news2024/11/24 6:10:19

系列文章

本系列文章已收录到专栏,交流群号:689220994,也可点击链接加入。

前言

在前面的章节中,我们介绍的都是功能性插件的开发内容,本文则会介绍一下主题类插件的开发方式。不过本文也只是带大家入个门,目前插件市场存在很多开源的主题插件,还是建议大家在开发不同类型的插件前,参考相应的源码进行学习和个人定制,另外本文所涉及到的完整代码也已上传到GitHub。

创建项目

主题类插件的创建方式和功能性插件步骤一样,如果不清楚的话参考本系列的第一篇文章即可,不过创建完项目后需要创建主题文件:

image-20240405175231763

选择完毕后会出现以下弹框:

image-20240405184323085

点击 OK 后,会发现 plugin.xml 中多了几行配置,同时还会有两个配置文件:

image-20240405184640722

这里以.theme.json结尾的文件用于保存编辑器配置文件位置和其它各类组建的样式配置:

image-20240405185637523

这里editorScheme配置的就是用于控制编辑器内部样式的文件位置,xml 文件初始内容如下:

image-20240405185747515

点击上方的运行还可以预览主题效果:

动画

自定义颜色

在开发主题前,我们可以先自定义命名一些颜色,只需要在.theme.json文件里配置在colors属性下即可:

{
  "name": "demo",
  "dark": true,
  "author": "butterfly",
  "editorScheme": "/demo.xml",
  
  "colors": {
    "demoColor": "#409EFF"
  },
  
  "ui": {
    "RunWidget.foreground": "demoColor"
  }
}

想要修改某个元素的颜色,只需要在 ui 属性中配置相应的键值即可。

如上所示,demoColor就是我们自定义的颜色,然后使用的时候直接用引号包围即可,如上就是把运行配置的前景色设置为了#409EFF(蓝色),效果如下:

image-20240621131525455

那我们是如何知道界面上的某个元素,例如RunWidget.foreground用于配置运行配置的前景色呢?这里就使用到了内部模式文章中提到的UI Inspector这个工具,如下图所示:

image-20240621131925062

可以看到在我们选中了运行配置这个元素后,foreground属性里包含属性名RunWidget.foreground

同时,ui 属性配置也支持通配符符批量设置颜色,例如我们去把所有的前景色都设置为蓝色:

{
  "name": "demo",
  "dark": true,
  "author": "butterfly",
  "editorScheme": "/demo.xml",
  
  "colors": {
    "demoColor": "#409EFF"
  },
  
  "ui": {
    "*": {
      "foreground": "demoColor"
    }
  }
}

可以看到(尤其是项目文件部分样式最明显)所有的前景色都变为了蓝色:

image-20240621132703721

除了上述直接设置的颜色,还有类似 Tab 栏在各种状态下的颜色,例如设置编辑器 Tab 栏的悬浮色:

image-20240621140058386

当我们不知道某个元素包含哪些样式设置的时候,也可以根据提示进行选择:

image-20240621140148233

自定义图标

自定义图标颜色

自定义图标包含自定义图标颜色和图标内容两方面,首先展示一下自定义图标颜色:

{
  "name": "demo",
  "dark": true,
  "author": "butterfly",
  "editorScheme": "/demo.xml",
  "colors": {
    "demoColor": "#409EFF"
  },
  "ui": {
  },
  "icons": {
    "ColorPalette": {
      "#AFB1B3": "demoColor",
      "Actions.Red": "#67C23A",
      "Objects.Blue": "#F56C6C"
    }
  }
}

其中icons.ColorPalette的内容用于自定义图标颜色,这里展示了两种处理方式,首先看第一行,#AFB1B3是灰色,这里将 IDE 的所有灰色按钮改为了demoColor即蓝色。然后是第二和第三行,这里的ActionsObjects是 IDE 内部对图标的分类,Actions主要包括编译、运行、调试等按钮,Objects则包含文件,运行配置等图标。下面直接展示效果会比较清晰:

image-20240621155820907

可以和默认样式进行对比:

image-20240621155855314

需要注意的是,想要看到自定义图标的效果,需要我们在设置中选择自定义的主题:

image-20240621155951973

自定义图标内容

自定义图标内容很简单,只需要配置图标的源路径和目标路径即可,可以看一个例子:

{
  "name": "demo",
  "dark": true,
  "author": "butterfly",
  "editorScheme": "/demo.xml",
  "colors": {
    "demoColor": "#409EFF"
  },
  "ui": {
  },
  "icons": {
    "ColorPalette": {
      "#AFB1B3": "demoColor",
      "Actions.Red": "#67C23A",
      "Objects.Blue": "#F56C6C"
    },
    "/actions/execute.svg": "/demo.svg",
    "/run/run.svg": "/demo.svg"
  }
}

上述的"/actions/execute.svg"即是将原本的运行按钮替换为我们自己的图标demo.svg(相对于 resources 文件夹的路径),而/actions/execute.svg这个路径则是通过前文提到的内部工具进行获取:

image-20240621160400313

可以看到只要选中了图标就可以通过 icon 属性看到其相对路径,变更效果如下:

image-20240621161104011

不过如果使用了 IDE 新版的 New UI,这里的配置会有些不同,首先看一下截图:

image-20240621161218921

这里直接先说结论,新版 UI 的图标位置都进行了变更,同时会多一个/expui前缀,在配置的时候需要去掉。因此上文中配置的是"/run/run.svg": "/demo.svg",少了/expui,最终效果如下:

image-20240621161435542

除了上述颜色和图标的设置,平台还支持一些尺寸和边框的设置,这里就不再介绍,可以参考官方提供的darcula主题样式文件内容进行一步的学习。

自定义编辑器样式

在前文中提到,生成主题文件的时候会有一个 xml 结尾的文件,这个文件就是用于自定义编辑器内的样式,例如以下配置可以修改行号的颜色和 CTRL 点击时的样式(直线变为了波浪线,通过配置 EFFECT_TYPE 为 2 实现):

<scheme name="demo" version="142" parent_scheme="Darcula">
    <colors>
        <option name="LINE_NUMBERS_COLOR" value="409EFF"/>
    </colors>
    <attributes>
        <option name="CTRL_CLICKABLE">
          <value>
            <option name="FOREGROUND" value="548af7" />
            <option name="EFFECT_COLOR" value="548af7" />
            <option name="EFFECT_TYPE" value="2" />
          </value>
        </option>
    </attributes>
</scheme>

效果如下:

image-20240621163407030

由于平台提供的配置项很多,这里就不再一一介绍,可以选择导出自带的主题文件进行学习,导出步骤如下:

image-20240621162643309

用文本文件方式打开上述文件可以看到Dark主题的编辑器样式配置:

image-20240621162921848

总结

本文介绍了主题类插件的开发流程和方式,整体内容比较简单,也只属于入门级别,建议大家在开发主题的时候还是多参考开源的主题插件源码进行学习和改造开发,如果有问题也欢迎在评论区或者讨论群进行交流讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1849968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML静态网页成品作业(HTML+CSS+JS)——动漫斗罗大陆介绍网页(3个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;使用Javacsript代码实现图片轮播和tab切换&#xff0c;共有3个页面。 …

24.3K star!一个轻量级且高度可配置的现代化命令行文本编辑器

大家好&#xff0c;今天给大家分享的是一个轻量级且高度可配置的现代化命令行文本编辑器。 micro 是一个轻量级且高度可配置的命令行文本编辑器&#xff0c;以其简洁的设计和强大的插件系统著称。该项目强调速度与效率&#xff0c;适合那些追求快速编辑体验并希望保持系统资源占…

ISO14001认证:引领企业迈向绿色未来

在当今全球环境日益恶化的背景下&#xff0c;绿色发展已成为企业和社会共同追求的目标。ISO14001环境管理体系作为由国际标准化组织&#xff08;ISO&#xff09;制定的环境管理国际标准&#xff0c;为企业提供了系统和全面的环境管理框架&#xff0c;适用于各种类型和规模的组织…

TurboWarp简单介绍

1.为什么要下载TurboWarp&#xff1f; 2.下载TurboWarp 在线版&#xff1a;TurboWarp - Run Scratch projects faster 离线版下载&#xff1a;TurboWarp Desktop - Better offline editor for Scratch 3 3.使用 界面&#xff1a; 功能&#xff1a; 上方功能条&#xff1a;…

【办公技巧】如何编辑带有限制编辑密码的PDF文件?

PDF文件打开之后发现设置了限制编辑&#xff0c;功能栏中的编辑按钮都是灰色的&#xff0c;导致PDF文件里的内容无法编辑。那么带有限制编辑的PDF文件&#xff0c;如何编辑&#xff1f;今天分享两个方法。 方法一&#xff1a; 我们可以将PDF文件转换成其他格式&#xff0c;有…

御道源码(ruoyi-vue-pro)个人使用小结

御道源码&#xff08;ruoyi-vue-pro&#xff09;个人使用小结 一、Git地址 1、平台项目简介及地址 2、开发指南&#xff0c;如图所示&#xff0c;部分功能需要收费&#xff0c;可自行了解 二、项目文件夹结构示例&#xff1a; 三、技术介绍 1.基于 Spring Boot MyBatis P…

【CT】LeetCode手撕—415. 字符串相加

目录 题目1- 思路2- 实现⭐415. 字符串相加——题解思路 3- ACM 实现 题目 原题连接&#xff1a;415. 字符串相加 1- 思路 模式识别&#xff1a;字符串相加 逆向遍历过程模拟 数据结构 ① String res &#xff1a;记录res 、② carry 记录进位值① 定义两个整数遍历 nums1 …

算法篇-二叉树

二叉树的遍历 分为前序、中序和后续的遍历&#xff0c;思想就是利用递归。 前序遍历-中左右 代码&#xff1a; public void travelTree(TreeNode node, List<Integer> resulst) {if (node null){return;}// 中resulst.add(node.val);// 左travelTree(node.left, resul…

Hive笔记-4

240618-Hive笔记-4 4.2 Insert 4.2.1 将查询结果插入表中 1) 语法 INSERT (INTO | OVERWRITE) TABLE tablename [PARTITION (partcol1val1,partcol2val2 ...)] select_stamement; 关键字说明: (1) INTO: 将结果追加到目标表 (2) OVERWRITE: 用结果覆盖原有数据 2) 案例…

如何使用代理ip上网移动转电信

在一些特定的工作场景中&#xff0c;比如跨网办公、数据分析等&#xff0c;我们常常需要将网络IP从一种类型转换到另一种类型。如需将移动网络转电信IP代理。那么&#xff0c;如何使用代理IP上网移动转电信呢&#xff1f;接下来&#xff0c;将为您揭示一个便捷的方法&#xff0…

火车头采集器Typecho采集发布模块插件

火车头采集器发布数据到Typecho系统网站应该怎么操作&#xff1f; 1. 火车头采集器Typecho采集发布插件下载安装&#xff1a; 火车头采集器Typecho采集发布模块插件下载地址-CSDN 2. 在火车头采集器软件导Typecho采集发布模块插件&#xff1b; 3. 填写Typecho系统文章对应的…

【Java】已解决java.lang.FileNotFoundException异常

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.lang.FileNotFoundException异常 在Java编程中&#xff0c;java.lang.FileNotFoundException是一个常见的异常&#xff0c;它通常表示程序试图打开一个不存在的文件、文…

ROS机器人虚拟仿真挑战赛持续学习笔记-20240619

cartographer 需要全手工编译……比较麻烦。 如果使用新版ceres-solver&#xff0c;版本2.x&#xff0c;需要修改源码&#xff0c;部分“接口代码”有改动。 稳妥使用ceres-solver-1.13.0&#xff0c;且需要安装abseil-cpp。 验证是否成功&#xff0c;使用roscd或roslaunch…

React+TS前台项目实战(十二)-- 全局常用组件Toast封装,以及rxjs和useReducer的使用

文章目录 前言Toast组件1. 功能分析2. 代码详细注释&#xff08;1&#xff09;建立一个reducer.ts文件&#xff0c;用于管理状态数据&#xff08;2&#xff09;自定义一个清除定时器的hook&#xff08;3&#xff09;使用rxjs封装全局变量管理hook&#xff08;4&#xff09;在to…

Java 图书管理系统功能实现

承接上一篇的 图书管理系统 &#xff0c;点击这里跳转 要实现什么功能 1.查找图书 2.增加图书 3.删除图书 4.展示图书 5.退出系统 6.借阅图书 7.归还图书 1.查找图书 要完成这个功能需要以下步骤 输入书名&#xff0c; 然后在书架里找到这本书打印出来&#xff0c;…

安装CDH时报错:Parcel 不可用于操作系统分配 RHEL7,原因与解决办法~

报错信息&#xff1a; 解决办法与思路&#xff1a; 1、检查CDH包的后缀名称&#xff0c;Redhat与Centos安装时不需要修改后缀名称&#xff0c;麒麟系统安装时才需要修改。 2、目录里面需要有xxx.parcel xxx.parcel.sha manifest.json 三个文件 缺一不可&#xff08;注&#x…

储能电池竞争出海分析

锂电池的激烈竞争进一步蔓延到储能行业。为保市场份额和现金流稳定&#xff0c;不少储能电池企业都开始大幅度降低报价只求中标储能项目。 随着6月的储能电芯的最高限价和系统报价都已经贴近成本价&#xff0c;一二三线的储能电池厂商将要如何应对&#xff1f; 1、储能规模快速…

前端核心框架Vue指令详解

目录 ▐ 关于Vue指令的介绍 ▐ v-text与v-html ▐ v-on ▐ v-model ▐ v-show与v-if ▐ v-bind ▐ v-for ▐ 前言&#xff1a;在学习Vue框架过程中&#xff0c;大家一定要多参考官方API &#xff01; Vue2官方网址https://v2.cn.vuejs.org/v2/guide/ ▐ 关于Vue指令的…

第五篇:构建与维护私有Docker Registry: 企业级实践指南

构建与维护私有Docker Registry: 企业级实践指南 1. 引言&#xff1a;解析私有Docker仓库的必要性 1.1 Docker Registry简介与私有化的好处 Docker Registry是一个用于存储和分发Docker镜像的系统。在Docker生态系统中&#xff0c;Registry扮演着至关重要的角色&#xff0c;为…

MySQL 面试突击指南:核心知识点解析2

事务并发可能引发的问题 MySQL 是一个客户端/服务器架构的软件,对于同一个服务器来说,可以有多个客户端与之连接,每个客户端与服务器连接后,可以称为一个会话(Session)。每个客户端都可以在自己的会话中向服务器发出请求语句,一个请求语句可能是某个事务的一部分,也就…