![](/img/trans.png)
[英]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.