配色方案管理
配色方案管理
前言
IntelliJ IDEA 12.1 中的配色方案管理已更改,以简化方案设计人员的工作,并使配色方案自动适配不同的编程语言。以前的语言插件仍然使用不兼容的固定默认颜色,例如,暗黑配色方案。
新的配色方案可以不指定语言,通过标准的文本属性关联配色方案。
如果需要的话,配色方案也可以指定语言。新的配色方案为了避免混淆与旧平台版本的兼容性问题,有一个新的 .icls (Idea CoLor Scheme) 扩展名:如果只设置了标准属性,这些属性在12.1之前的版本中将不能被使用,因为可能会导致颜色混乱
插件开发者
文本属性key
最优的指定高亮文本属性的方案是,在 DefaultLanguageHighlighterColors 里定义关键字的key,代码如下:
static final TextAttributesKey MY_KEYWORD =
TextAttributesKey.createTextAttributesKey("MY_KEYWORD", DefaultLanguageHighlighterColors.KEYWORD);
显示的时候,会查找为 MY_KEYWORD关键字指定的第一个属性,如果没有明确的定义,或者所有的属性都未定义,他会查找并使用 DEFAULT_KEYWORD关键字的属性,如果还是没有,将会使用默认配色。、
文本属性可以链式配置,代码如下:
static final TextAttributesKey MY_PREDEFINED_SYMBOL =
TextAttributesKey.createTextAttributesKey("MY_PREDEFINED_SYMBOL", MY_KEYWORD);
规则是一样的,先查找 MY_PREDEFINED_SYMBOL 的配置,如果没有,则找 MY_KEYWORD的配置,如果还没有,则使用 DEFAULT_KEYWORD 的配置
提示
强烈建议不要使用固定的默认属性。
链式设置文本属性的时候,如果不确定要使用哪个基本属性,最好选择最通用的一个,例如 DefaultLanguageHighlighterColors.IDENTIFIER 。 需要强调的是使用固定的默认属性将会强制要求配色设计人员明确指定这个元素的颜色。否则,它的默认颜色可能会与配色方案冲突。
为特定方案提供属性
一个语言插件需要为 Default 和 Darcula 配色方案提供默认文本属性。
如果知道其它配色方案的名称,也可以为该配色方案指定文本属性。 可以在 plugin.xml 增加 com.intellij.additionalTextAttributes 扩展点,来指定配色属性的存储文件,如下:
<extensions defaultExtensionNs="com.intellij">
...
<additionalTextAttributes
scheme="Default"
file="colorSchemes/MyLangDefault.xml"/>
...
</extensions>
IDE必须能找到 colorSchemes/MyLangDefault.xml 文件。注意:文件路径是相对路径,并且文件的名称必须是唯一的。因此推荐给文件加上一个前缀,例如 "MyLang"
colorSchemes/MyLangDefault.xml 文件内容示例如下:
<?xml version='1.0'?>
<list>
<option name="MY_VAR">
<value>
<option name="FOREGROUND" value="660000"/>
</value>
</option>
<option name="MY_SPECIAL_CHAR">
<value>
<option name="FOREGROUND" value="008000"/>
<option name="BACKGROUND" value="e3fcff"/>
<option name="FONT_TYPE" value="1"/>
</value>
</option>
</list>
注意:当通过“另存为...”复制方案时,其所有属性,包括在扩展中定义的属性,都将被复制到新方案中。方案设计人员需要检查这些属性保持不会跟自己设计的属性相冲突,如果不检查,插件也能正常安装,也可能不会引起问题。
无论如何,如果可能的话,尽量坚持一个简单的键依赖(注意它对“Darcula”很有效)并且只在必要时提供显式属性。
方案设计人员
如何创建新配色方案
选择一个已有的方案,比如 "Default"
选择 导出(export) ,为自己的新方案起一个名字
- 首先在 General 部分设置属性,可以继续使用 Defaults
<scheme name="IntelliJ Light" version="142" parent_scheme="Default"></scheme>
如果有必要的话,可以调整所有的属性,但是大部分情况下不需要。有2种情况需要有额外的操作
有一个不使用新的配色方案管理 API 的过时插件,因此不能使用“Language Defaults”中设置的属性。理想情况下,这个插件的作者会根据生成的报告修复这个问题
插件有意设置一些默认颜色,如果方案是从默认颜色创建的,则颜色将复制到新创建的方案中。这可以通过重置所有属性以恢复从语言默认值(见下文)的继承或通过设置适合该方案的其他颜色来解决。第一种方法更可取,因为以后更改配色方案所需的工作更少
文本属性继承
For many language text attributes that do not have any values, there will be a line indicating that the attributes are inherited from a specific section/attributes, such as "Keyword (Language Defaults)". If an element has any attributes set, only these attributes are used. All attributes from the base element are ignored. To restore the inheritance, unchecks all the boxes, and click Apply.