簡體   English   中英

在emacs中更新font-lock關鍵字而無需重新加載主模式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM