4

我有一个颜色主题文件(类似于 gruber-darker.el),我想调整一个特定的颜色。这种颜色可以描述如下: 通过 . 更改为 Org Agenda(组织模式议程缓冲区)M-x org-agenda a。然后将光标移到计划的 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"))))确实给出了黑色前景色而不是白色。但我不知道如何获取光标所在项目的“继承”前景色。

4

3 回答 3

2

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

该函数以交互方式使用点处的字符,但您也可以将其传递给一个位置,因此如果您发现将光标放在相关字符上是一个问题(例如,它将突出显示更改为其他内容),您可以执行类似这样的操作:

  1. 将点移动到附近的非冲突位置(假设您感兴趣的角色之前的 3 个字符)。
  2. M-: (describe-char (+ 3 (point))) RET
于 2011-12-29T20:51:05.643 回答
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 实例(在我的例子中是守护进程)以应用更改,它终于工作了。

于 2021-04-11T14:45:24.010 回答
0

你发现它是做不到的。一方面,mouse-face文本属性独立于face属性。另一方面,人脸属性是静态定义的;它们不能动态继承。

考虑使用. highlight_ (是的,该命令也用于增强请求。)mouse-faceM-x report-emacs-bug

于 2012-01-03T22:17:52.980 回答