这是一篇我从原来的老博客拷贝过来的,到今天已经 过时 的文章了。
IntelliJ IDEA 2021.2.1 版本之后已经直接有这个配置选项。
Settings -> Tools -> Terminal -> Cursor Shape
原来的时候,由于强迫症,在 Windows + WSL Terminal 上很不习惯终端里默认的方块光标样式。网上搜了一堆都没找到什么解决方案,最后在 StackOverflow 上找到了灵感 🔗
The terminal plugin uses Jediterm, a Java based terminal emulator written by JetBrains
Most of the drawing of the terminal window is handled in TerminalPanel.java and has a nested class called TerminalCursor
我理解的大意是 IDEA 自己写了一个叫 Jediterm 的终端,里面和光标有关的的渲染方法在 TerminalPanel$TerminalCursor 里面。
灵机一动,去安装目录的 lib 目录里果然找到了一个 jediterm-pty-2.32.jar (IntelliJ IDEA 2020.3.2)
把这个 jar 包反编译查看代码,找到 TerminalPanel$TerminalCursor 这个内部类
可以看到类的构造方法里写死了光标类型为 CursorShape.BLINK_BLOCK,字段虽然有 set 方法,但是并没有设置入口。
package com.jediterm.terminal.ui;
public TerminalCursor() {
this.myShape = CursorShape.BLINK_BLOCK;
this.myShouldDrawCursor = true;
this.myBlinking = true;
}
其他可选的枚举值如下
package com.jediterm.terminal;
public enum CursorShape {
BLINK_BLOCK,
STEADY_BLOCK,
BLINK_UNDERLINE,
STEADY_UNDERLINE,
BLINK_VERTICAL_BAR,
STEADY_VERTICAL_BAR;
}
于是很明显的就有了下一个思路,想办法修改 jar 包里的 class 文件
以下内容参考 How to edit class file from a jar
先备份原文件,然后把 jar 包放到一个新建文件夹里操作解包
jar xvf jediterm-pty-2.32.jar
下载 Java Bytecode Editor,运行 .\jbe.bat 启动,打开 TerminalPanel$TerminalCursor.class
按照下图修改为你想要的光标枚举值,这里我选的是 BLINK_VERTICAL_BAR,然后保存修改
把修改好的 jar 包用 IDEA 或者 jd-gui 检查下
重新打包
jar cvfm jediterm-pty-2.32.jar ./META-INF/MANIFEST.MF ./
替换原文件,重启 IDEA,发现光标样式确实变成了闪烁的竖线。