首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >emacs主要模式:字体锁定仅在第一次加载文件时发生。

emacs主要模式:字体锁定仅在第一次加载文件时发生。
EN

Stack Overflow用户
提问于 2013-10-27 21:01:04
回答 2查看 150关注 0票数 0

我刚开始玩emacs模式。我做了一个派生模式(从text-mode),它为不同的情况做简单的颜色修改。例如,所有等号行(=)上方的文本被转换为品红,这是使用以下代码完成的:

代码语言:javascript
复制
(make-face 'heading-face1)
(set-face-foreground 'heading-face1 "brightmagenta")
(set-face-attribute 'heading-face1 nil :weight 'ultra-bold)                                                                                                                                                           
(setq font-lock-heading-face1 'heading-face1)

(font-lock-add-keywords nil '(("\\(.*\n=\\{5,\\}.*\\)"
                           1 font-lock-heading-face1 prepend)))

当我第一次打开包含这样文本的文件时,它的颜色是适当的;但是如果我添加了一个额外的=,或者创建了一个新的=============行,它们就会转到正常的文本颜色。

其他字体锁动态工作。例如,数字会立即使用不同的颜色.

什么会导致模式与文件第一次打开时不同的动态匹配?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-27 23:26:00

您面临的问题是在处理多行关键字时,字体锁需要特别小心。

当您第一次打开文件时,字体锁以相当大的块(~500字节IIRC)进行高亮显示,但在缓冲区以某种方式更改后,字体锁默认情况下只会根据优化的原因逐行重新突出显示,这意味着当它考虑标题行时,它的工作区域甚至不会包括执行匹配的下一行。

一个快速的解决方法是向font-lock-extend-region-functions添加一个钩子,如果您的特殊={5,}.*行是该区域的第一行或该区域之后的第一行,该钩子将扩展您的重新突出显示区域。这并不是唯一的(也可能不是最理想的)方法,但它应该有效。

有关更多信息,请参见多行字体锁构造手册的EmacsLisp部分。

票数 2
EN

Stack Overflow用户

发布于 2013-10-27 22:14:01

如果多个模式匹配,则字体锁定关键字的顺序很重要。尝试使用t而不是prepend

关于它在文件第一次打开时工作的原因:也许当您第一次打开该文件时,它首先会正常地锁定字体,然后添加新规则。

(FWIW:您不需要变量font-lock-heading-face1,至少对于显示的代码不需要--只需使用face符号即可。并考虑使用defface定义face )。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19623503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档