emacs:如何更改高光的前景色(例如,点结束的链接)?

时间:2011-12-28 22:36:36

标签: emacs highlight emacs-faces

我有一个颜色主题文件(类似于gruber-darker.el),我想调整一个特定的颜色。此颜色可以描述如下:通过M-x org-agenda a更改为组织议程(组织模式议程缓冲区)。然后将光标移动到Scheduled TODO项目上(这是指向议程文件中相应条目的链接)。当光标在这样的项目上时,您会看到带有背景颜色和前景色的突出显示形式的项目。背景颜色很好,但前景色为白色。我想将此前景颜色调整为类似:foreground nil的颜色,以便它不再是白色;相反,光标所在项目的自然颜色是继承的。 我通常使用M-x describe-face RET来确定我必须改变的元素。但是,这在这里不起作用,因为我只获得游标所在项目的颜色/元素名称。

更新1: 我刚刚意识到我对emacs中的所有链接都有相同的行为(不仅仅是在org-mode中)。我发现(highlight ((t (:background "#453D41"))))给了我一个棕色背景条作为突出显示的区域。但是一旦光标位于突出显示的区域上,我就会获得白色前景色而不是原始色。即使(highlight ((t (:background "#453D41" :foreground nil))))也没有给我光标所在项目的原始颜色。我怎样才能做到这一点?

更新2: 我发现(highlight ((t (:foreground "#000000" :background "#453D41"))))确实给出了黑色前景色而不是白色。但我不知道如何获得光标所在项目的“继承”前景色。

3 个答案:

答案 0 :(得分:2)

尝试使用describe-char代替describe-face。这应该会为您提供有关正在使用的各种面孔的更多信息。

交互式地,该函数在点使用角色,但你也可以将它传递给一个位置,所以如果你发现将光标放在有问题的角色上是一个问题(例如它将突出显示更改为其他东西),你可以做像这样的东西:

  1. 将点移动到附近的非冲突位置(假设您感兴趣的角色前面有3个字符)。
  2. M - : (describe-char (+ 3 (point))) RET

答案 1 :(得分:1)

通过使用 M-x customize-face,我无法在不使前景色与我的主题字体锁定发生冲突的情况下为突出显示面定义背景色。

但是,我通过在加载我的 emacs 主题之前定义高光面自定义,设法为高光面定义了一个继承的前景色。

我使用 dracula-theme,您会在下面找到我的 init.el 文件第一行的示例,它解决了这个精确的需求。

(custom-set-faces
 '(highlight ((t (:background "#222222" :foreground nil))))

;; Setting personal theme
(unless (package-installed-p 'dracula-theme)
  (package-install 'dracula-theme))

(load-theme 'dracula t)

我重新启动了 emacs 实例(在我的例子中是守护进程)以应用更改,它终于起作用了。

答案 2 :(得分:0)

你发现的是它无法完成。首先,mouse-face text属性独立于face属性。另一方面,面部属性是静态定义的;它们不能动态继承。

考虑使用highlight为此类功能(不限于mouse-faceM-x report-emacs-bug等)提交Emacs增强请求。 (是的,该命令也适用于增强请求。)