我正在对SLIME做一些小的修改,这样我就可以从Lisp中获得所有当前加载的符号,分析它们,并让font-lock对它们进行字体锁定。
我设法完成了所有这些步骤,但我有一个小问题-当关键字列表在font-lock中更改时,除非重新启动主要的lisp模式,否则不会更新缓冲区。我不想在每次更新关键字时都重新启动lisp-mode,因为我在lisp-mode上有几个钩子,我只想在第一次加载文件时运行它们。
有没有其他方法可以更新font-lock,这样它就可以读取所有的新关键字,并相应地对缓冲区进行字体设置?关闭字体锁定并使用font-lock-fontify-buffer不会起到作用。
更新:增加了赏金-问题仍然存在。我需要一种方法来重新加载字体锁定关键字,而不是重新加载主要模式。
发布于 2009-09-18 15:18:25
好吧,不如这样吧:
(defun my-font-lock-restart ()
(interactive)
(setq font-lock-mode-major-mode nil)
(font-lock-fontify-buffer))发布于 2009-09-16 17:31:31
您可以临时清除模式钩子变量,然后重新启动它:
(defun my-restart-lisp-mode ()
(interactive)
(let ((lisp-mode-hook nil))
(normal-mode)))发布于 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等)
https://stackoverflow.com/questions/1431843
复制相似问题