从当前用户选择的主题中获取颜色

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;
}