【问题标题】:Overriding emacs org-mode faces覆盖 emacs org-mode faces
【发布时间】:2017-01-19 20:54:45
【问题描述】:

我正在尝试覆盖 org-modeorg-agenda-mode 缓冲区中的默认语法突出显示。

澄清我的意图:我目前这样做的原因是根据标签突出显示标题(或标题的一部分)。内置变量org-tag-faces 只允许自定义标签本身,而不是包含标签的标题。

参考以下相关问题:

  1. Emacs font lock mode: provide a custom color instead of a face

  2. https://emacs.stackexchange.com/questions/8211/color-code-a-new-generic-character-combination

  3. https://emacs.stackexchange.com/questions/8222/how-to-make-the-custom-font-lock-keywords-not-override-the-default-major-mode-fo#comment12615_8222

在线程 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-modeorg-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


【解决方案1】:

这主要对我有用:

(add-hook 'org-mode-hook
      (lambda ()
        (font-lock-add-keywords
         'org-mode
         '(("^.*:TT:.*$" . font-lock-warning-face)))))

标题是红色的,虽然标签本身不是。

【讨论】:

  • 由于org-agenda-mode 不使用font-lock,因此该解决方案不适用于*Org Agenda* 缓冲区。如果您(require 'org-agenda),然后通过键入M-x find-function RET org-agenda-mode RET 查看org-agenda-mode 的代码,您将看到如下符号:;; Keep global-font-lock-mode from turning on font-lock-mode,下面的代码是:(org-set-local 'font-lock-global-modes (list 'not major-mode))
  • 此代码给出的结果与我在原始帖子中的代码相同:"在 org-mode 缓冲区中,这表现为标题文本的主体被更改,但任何其他项目,例如 todo - 状态、日期、标签等保留现有面孔。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-08
相关资源
最近更新 更多