首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无需重新加载主模式即可更新emacs中的字体锁关键字

无需重新加载主模式即可更新emacs中的字体锁关键字
EN

Stack Overflow用户
提问于 2009-09-16 09:07:42
回答 3查看 1.6K关注 0票数 8

我正在对SLIME做一些小的修改,这样我就可以从Lisp中获得所有当前加载的符号,分析它们,并让font-lock对它们进行字体锁定。

我设法完成了所有这些步骤,但我有一个小问题-当关键字列表在font-lock中更改时,除非重新启动主要的lisp模式,否则不会更新缓冲区。我不想在每次更新关键字时都重新启动lisp-mode,因为我在lisp-mode上有几个钩子,我只想在第一次加载文件时运行它们。

有没有其他方法可以更新font-lock,这样它就可以读取所有的新关键字,并相应地对缓冲区进行字体设置?关闭字体锁定并使用font-lock-fontify-buffer不会起到作用。

更新:增加了赏金-问题仍然存在。我需要一种方法来重新加载字体锁定关键字,而不是重新加载主要模式。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-18 15:18:25

好吧,不如这样吧:

代码语言:javascript
复制
(defun my-font-lock-restart ()
  (interactive)
  (setq font-lock-mode-major-mode nil)
  (font-lock-fontify-buffer))
票数 5
EN

Stack Overflow用户

发布于 2009-09-16 17:31:31

您可以临时清除模式钩子变量,然后重新启动它:

代码语言:javascript
复制
(defun my-restart-lisp-mode ()
  (interactive)
  (let ((lisp-mode-hook nil))
    (normal-mode)))
票数 2
EN

Stack Overflow用户

发布于 2009-09-16 09:12:24

触发主模式并不是让font-lock发挥作用的原因。我对SLIME或lisp-mode的内部原理不是很熟悉,但只需设置变量就可以使其正常工作。切换字体锁定模式将使字体锁定开始重新使用新的关键字,就像font-lock-fontify-buffer一样。

我主要使用cperl-mode,这只是一个简单的cperl-init-faces (设置内部字体锁变量)和重新启动字体锁的问题。lisp模式应该没有太大的不同,除了不需要调用cperl-init-faces ;)

编辑:对lisp-interaction-mode的一些实验表明,即使重新启动font-lock-mode也不是严格必要的。只要改变font-lock-keys.就足够了,只要你以某种方式重新触发字体。(编辑文本、font-lock-fontify-buffer等)

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

https://stackoverflow.com/questions/1431843

复制
相关文章

相似问题

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