[英]emacs major-mode font-lock between characters (parenthesis, quotes, etc)
[英]Updating font-lock keywords in emacs without major mode reload
我正在对SLIME进行小修改,这样我就可以从Lisp获取所有当前加载的符号,分析它们并使字体锁定为它们。
我设法完成了所有这些步骤,但是我遇到了一个小问题 - 当字体锁中的关键字列表发生更改时,缓冲区不会更新,除非您重新启动主要的lisp-mode。 每次更新关键字时我都不想重新启动lisp-mode,因为我在lisp-mode上有几个挂钩,我想在第一次加载文件时才运行它。
有没有其他方法来更新font-lock所以它会读取所有新关键字并相应地为缓冲区提供信息? 关闭字体锁并使用font-lock-fontify-buffer
不起作用。
UPD:增加赏金 - 问题依然存在。 我需要一种方法来重新加载font-lock关键字而无需重新加载主模式。
好的,相反如何:
(defun my-font-lock-restart ()
(interactive)
(setq font-lock-mode-major-mode nil)
(font-lock-fontify-buffer))
触发主模式并不是什么使得font-lock能够做到这一点。 我并不熟悉SLIME或lisp-mode的内部结构,但只是设置变量应该可以使它工作。 切换font-lock-mode将使字体锁开始使用新关键字进行重新整理, font-lock-fontify-buffer
应该font-lock-fontify-buffer
。
我主要讨论cperl-mode,这是cperl-init-faces
(设置内部字体锁定变量)和重新启动font-lock的简单问题。 lisp-mode应该没有太大的不同,除了不需要调用cperl-init-faces
;)
编辑:使用lisp-interaction-mode进行的一些实验表明,即使重新启动font-lock-mode也不是必需的。 只要你以某种方式重新触发fontification,只需更改font-lock-keywords就足够了。 (编辑文本,font-lock-fontify-buffer等)
您可以暂时清除模式挂钩变量并重新启动它:
(defun my-restart-lisp-mode ()
(interactive)
(let ((lisp-mode-hook nil))
(normal-mode)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.