如何在不影响Emacs中其他字体锁定制的情况下更改长行的面?

时间:2011-11-30 19:50:40

标签: emacs customization emacs-faces

我有一些我很久以前借来的代码,当这条线太长时会设置一条长线:

 (add-hook 'font-lock-mode-hook
           (function
            (lambda ()
              (setq font-lock-keywords
                    (append font-lock-keywords
                            '( ("^.\\{133,\\}$" (0 'my-long-line-face t))
                              )
                            )
                    )
              )
            ))

(我现在知道font-lock-add-keywords,BTW;就像我说的,这有点老了。)

问题是这改变了整条线的面貌。因此,如果我指出long-line-face是粗体,则会丢失该行的所有上下文自定义,并且它将显示在默认面中,但是显示为粗体。

我如何才能保持上下文着色,但让一切变得大胆?

2 个答案:

答案 0 :(得分:2)

您在字体锁定规范中使用t覆盖了最终状态。尝试将(0 'my-long-line-face t)更改为(0 'my-long-line-face prepend)(0 'my-long-line-face append)

答案 1 :(得分:1)

尝试对您的代码进行此修改:

(add-hook 'font-lock-mode-hook
       (function
    (lambda ()
      (setq font-lock-keywords
        (append font-lock-keywords
            '( ("^.\\{133\\}\\(.*\\)$" (1 'my-long-line-face t))
              )
            )
        )
      )
    ))

关键是你希望regexp有一个子表达式,它跟随133个不太长的字符,然后将my-long-line-face应用于后面的子表达式 - 如1所示(而不是你有的0)。有关详细信息,请参阅Search-based Fontification的信息页。