Ced*_*tin 2 emacs colors emacs-faces
(我不知道这个问题的标题是否正确)
当使用几种次要模式同时改变"颜色"时,是什么决定了哪种模式显示了什么?例如,我正试图同时使用highlight-changes-mode和rainbow-mode:http://julien.danjou.info/projects/emacs-packages
我的问题是,当我在缓冲区进入一个新的颜色(比如#306090),也看不到的背景颜色#306090字符作为彩虹模式会希望它是,我看到的背景颜色(的整条线)改变了(因为我正在使用highlight-changes-mode,我很喜欢).
我的问题有点类似:决定在哪里解决"订单"冲突的原因是什么?它取决于各种模式的加载顺序吗?
它不依赖于模式的加载顺序.它取决于模式用于应用面部的相应机制.
rainbow-mode用于font-lock突出显示文本,而文本又使用所谓的文本属性.文本属性是字符串对象的固有属性,可以属于不属于任何缓冲区的字符串对象.(例如,文本属性可以在剪切和粘贴中存活.)
highlight-changes-mode相反,使用"叠加",可以将其视为虚拟文本属性:叠加是缓冲区中间隔的规范,以及一个或多个属性的规范,该间隔应该像它具有的那样; 叠加可以指定的属性中的一个是面.叠加属性不是字符串本身的属性(因此不能在剪切和粘贴后继续存在).
如果缓冲子字符串的text属性和覆盖该子字符串的叠加层指定了不兼容的面属性,则叠加优先.(如果面部属性不兼容 - 如文本属性指定前景色但没有背景色,而叠加层仅指定背景色 - 那么它们将以您期望的方式合并.)
通常,合并面的规则很复杂,因为叠加层本身可以指定要在缓冲区位置显示的字符串,这些字符串又可以具有自己的文本属性,并且不同的规则控制着这些情况; 此外,某些内置面部,如鼠标高亮和模式线面,都受其自身规则的约束.如果您想了解更多信息,请参阅信息节点"(elisp)Faces"和"(elisp)Overlays".有关完整的故事,您需要查看显示例程的源代码(可能从xdisp.c中的handle_face_prop和xfaces.c中的face_at_string_position开始).
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |