Emacs:如何更改高亮的前景色(例如,指针所在位置的链接)?

4
我有一个颜色主题文件(类似于gruber-darker.el),我想要调整特定的颜色。这种颜色可以描述为:通过M-x org-agenda a,进入Org Agenda(org-mode日程表缓冲区)。然后将光标移动到已安排的待办事项上(这是对应日程表文件的链接)。当光标停留在此类项目上时,您会看到该项目以高亮形式呈现,具有背景颜色和前景颜色。背景颜色很好,但是前景颜色是白色。我想将此前景颜色调整为像: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个回答

2
尝试使用describe-char而不是describe-face。这样可以提供更多有关正在使用的各种面的信息。
交互地,该函数使用光标所在位置的字符,但您也可以传递一个位置,因此如果您发现将光标放在问题字符上是一个问题(例如,它会将高亮显示更改为其他内容),您可以执行以下操作:
1. 将光标移动到附近的非冲突位置(假设是在您感兴趣的字符之前的3个字符)。 2. M-: (describe-char (+ 3 (point))) RET

亲爱的phils,谢谢,这很有趣。正如我在更新中所指出的那样,我知道highlight面决定了颜色,只是我不知道如何调整highlight-entry的foreground颜色,以便它使用项目原本具有的实际颜色。我可以将其更改为“始终为黑色”(使用上述命令)或“始终为蓝色”,但我无法调整它以使其采用底层文本的颜色(我认为:foreground nil应该有效,但它并没有)。 - Marius Hofert

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实例(在我的情况下是守护进程),最终它起作用了。


0
你所发现的是无法实现的。首先,mouse-face文本属性与face属性是独立的。其次,面部属性是静态定义的;它们不能动态继承。
考虑为这样的功能提交Emacs增强请求(它不仅限于highlightmouse-face等),使用M-x report-emacs-bug。(是的,该命令也适用于增强请求。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接