从当前用户选择的主题中获取颜色
Getting colors from current user selected theme
我开始在 Java 中制作一个 IntelliJ 插件,想知道是否有办法以编程方式从中获取某些颜色
当前 IDE 主题,例如获取洋红色终端前景色。
目前我只实现了浅色主题的浅色和深色主题的深色。
我的目标是从用户安装的配色方案中获取精确的颜色。例如,我使用插件商店中的 Atom One Dark
主题。
我正在寻找当前选择的 ColorScheme 中的颜色,主题中的所有颜色都按以下格式存储到 .icls
文件中:
<option name="CONSOLE_ERROR_OUTPUT">
<value>
<option name="FOREGROUND" value="e06c75" />
</value>
</option>
我想通过其 name
属性获取颜色。
感谢您的帮助,祝您有愉快的一天。
你可以检查 class:例如 UIUtil UIUtil.getTreeTextBackground() 它应该 return 颜色
非常感谢你们引导我朝着正确的方向前进!
我找到了我要找的东西。
你可以在这个 post.
的底部获取我收集配色方案颜色的功能
解决方案是:
ColorSchemes 文件或 .icls
文件如下所示:
<scheme name="ThemeName" version="142" parent_scheme="Darcula">
<metaInfo>
</metaInfo>
<colors>
<option name="ADDED_LINES_COLOR" value="98c379" />
</colors>
<attributes>
<option name="ABSTRACT_CLASS_NAME_ATTRIBUTES">
<value>
<option name="FOREGROUND" value="e6c07b" />
</value>
</option>
</attributes>
</scheme>
您可以通过编程方式获取这些颜色,在 java 中(抱歉,我不知道如何在 Kotlin 中执行此操作)您可以通过以下操作获取当前配色方案:
EditorColorsScheme colorsScheme = EditorColorsManager.getInstance().getSchemeForCurrentUITheme();
或者您可以通过以下方式获取默认配色方案:
EditorColorsScheme colorsScheme = = EditorColorsManager.getInstance().getScheme(EditorColorsManager.getInstance().getAllSchemes()[0].getName());
据此,我制作了一个简单的函数,可以通过名称(属性和颜色)获取特定颜色。如果给定的名称与 中定义的颜色不对应,它将在 部分中查找。如果您特别想要属性的背景颜色,您也可以精确。
函数如下:
public Color fetchIJColor(String name, boolean isBackground){
Color c = colorsScheme.getAttributes(TextAttributesKey.createTextAttributesKey(name)).getForegroundColor();
if(c == null || isBackground){
c = colorsScheme.getAttributes(TextAttributesKey.createTextAttributesKey(name)).getBackgroundColor();
}
if(c == null){
c = colorsScheme.getColor(ColorKey.createColorKey(name));
}
return c;
}
我开始在 Java 中制作一个 IntelliJ 插件,想知道是否有办法以编程方式从中获取某些颜色 当前 IDE 主题,例如获取洋红色终端前景色。
目前我只实现了浅色主题的浅色和深色主题的深色。
我的目标是从用户安装的配色方案中获取精确的颜色。例如,我使用插件商店中的 Atom One Dark
主题。
我正在寻找当前选择的 ColorScheme 中的颜色,主题中的所有颜色都按以下格式存储到 .icls
文件中:
<option name="CONSOLE_ERROR_OUTPUT">
<value>
<option name="FOREGROUND" value="e06c75" />
</value>
</option>
我想通过其 name
属性获取颜色。
感谢您的帮助,祝您有愉快的一天。
你可以检查 class:例如 UIUtil UIUtil.getTreeTextBackground() 它应该 return 颜色
非常感谢你们引导我朝着正确的方向前进! 我找到了我要找的东西。 你可以在这个 post.
的底部获取我收集配色方案颜色的功能解决方案是:
ColorSchemes 文件或 .icls
文件如下所示:
<scheme name="ThemeName" version="142" parent_scheme="Darcula">
<metaInfo>
</metaInfo>
<colors>
<option name="ADDED_LINES_COLOR" value="98c379" />
</colors>
<attributes>
<option name="ABSTRACT_CLASS_NAME_ATTRIBUTES">
<value>
<option name="FOREGROUND" value="e6c07b" />
</value>
</option>
</attributes>
</scheme>
您可以通过编程方式获取这些颜色,在 java 中(抱歉,我不知道如何在 Kotlin 中执行此操作)您可以通过以下操作获取当前配色方案:
EditorColorsScheme colorsScheme = EditorColorsManager.getInstance().getSchemeForCurrentUITheme();
或者您可以通过以下方式获取默认配色方案:
EditorColorsScheme colorsScheme = = EditorColorsManager.getInstance().getScheme(EditorColorsManager.getInstance().getAllSchemes()[0].getName());
据此,我制作了一个简单的函数,可以通过名称(属性和颜色)获取特定颜色。如果给定的名称与
函数如下:
public Color fetchIJColor(String name, boolean isBackground){
Color c = colorsScheme.getAttributes(TextAttributesKey.createTextAttributesKey(name)).getForegroundColor();
if(c == null || isBackground){
c = colorsScheme.getAttributes(TextAttributesKey.createTextAttributesKey(name)).getBackgroundColor();
}
if(c == null){
c = colorsScheme.getColor(ColorKey.createColorKey(name));
}
return c;
}