【发布时间】:2017-01-19 20:54:45
【问题描述】:
我正在尝试覆盖 org-mode 和 org-agenda-mode 缓冲区中的默认语法突出显示。
澄清我的意图:我目前这样做的原因是根据标签突出显示标题(或标题的一部分)。内置变量org-tag-faces 只允许自定义标签本身,而不是包含标签的标题。
参考以下相关问题:
Emacs font lock mode: provide a custom color instead of a face
https://emacs.stackexchange.com/questions/8211/color-code-a-new-generic-character-combination
在线程 2 中,接受的答案是为此目的使用 font-lock。
在线程 3 中,我试图实现与海报完全相反的效果。 Jordon Biondo 的最后一条评论说:
从关键字中取出 t,t 指定的是 font-lock 应该覆盖已经着色的东西。
由于我想覆盖已在 t 中添加的颜色,但据我所知,org-mode 突出显示仍在覆盖我的自定义面孔。
在org-mode 缓冲区中,这表现为标题文本的主体被更改,但任何其他项目(例如待办事项状态、日期、标签等)都保留了现有的面孔。
在org-agenda-mode 缓冲区中,它完全无法修改匹配行的任何方面。
通过一个简单的例子,这里有一些代码,我试图用它来将 org-mode 缓冲区中包含 :TT: 的任何行设置为红色:
(add-hook 'org-mode-hook
(lambda ()
(font-lock-add-keywords
'org-mode
'(
("^.*:TT:.*$" 0 '(:foreground "#FF0000") t)
))))
【问题讨论】:
-
只是好奇,为什么要更改
org-mode和org-agenda-mode的默认语法高亮显示? -
我希望能够根据标签更改项目的颜色。使用 font-lock 是emacs.stackexchange.com/questions/8211/… 中公认的答案。
-
org-agenda-mode不使用font-lock,因此任何整合该功能的努力都不会奏效。相反,org-agenda-mode涉及在从主缓冲区收集项目时放置带有面的文本属性。 -
不幸的是,在
org-agenda-mode缓冲区中对text-property位置的修改太复杂而无法放入答案中,因为有多个函数可用于收集数据并将人脸放置为@987654341 @ 模式缓冲区正在创建中。如果您真的有动力并且想要使用text-properties的最简单方法,您可以修改org-format-item,这是在填充缓冲区之前进行更改的最后努力。最好的方法是定位和修改收集数据的函数。 -
@lawlist 我认为您的 cmets 应该是公认的答案 - 您可以重新发布作为答案以便我接受吗?
标签: emacs colors org-mode font-lock