Aktualisieren font-lock Schlüsselwörter in Emacs ohne größeren Modus reload
-
07-07-2019 - |
Frage
Ich mache kleine Änderung SLIME, so dass ich alle aktuell geladene Symbole von Lisp bekommen, analysieren und font-lock fontify sie machen.
ich es geschaffen, all diese Schritte zu tun, aber ich habe ein kleines Problem - wenn Keyword-Liste Änderungen in font-Sperre wird der Puffer nicht aktualisiert, wenn Sie den großen Lisp-Modus neu starten. Ich will nicht Lisp-Modus ich Keywords aktualisieren jedes Mal neu zu starten, weil ich mehrere Haken an Lisp-Modus haben, die ich will nur laufen, wenn ich die Datei zum ersten Mal laden.
Gibt es eine andere Art und Weise font-lock zu aktualisieren, so dass es alle dann neue Keywords liest und fontifies die Puffer entsprechend? Ausschalten font-lock und mit font-lock-fontify-buffer
den Trick nicht tun.
UPD: hinzugefügt Bounty - die Frage ist nach wie vor hoch. Ich muß einen Weg font-lock Schlüsselwort laden ohne großen Modus neu zu laden.
Lösung
Ok, wie wäre es damit statt:
(defun my-font-lock-restart ()
(interactive)
(setq font-lock-mode-major-mode nil)
(font-lock-fontify-buffer))
Andere Tipps
den Haupt-Modus Auslösung ist nicht das, was macht font-Sperre nicht sein Ding. Ich bin nicht vertraut mit den Interna von SLIME oder Lisp-Modus, sondern nur die variable Einstellung sollte es funktioniert. Makel font-Lock-Modus wird font-lock machen beginnt mit den neuen Keywords im Auge refontifying, wie sollte font-lock-fontify-buffer
.
I hack auf cperl-Modus, vor allem, und es ist einfach eine Frage der cperl-init-faces
und einen Neustart von font-lock (die die internen font-lock-Variablen setzen). Lisp-Modus sollte nicht viel anders sein, mit Ausnahme nicht um einen Anruf cperl-init-faces
benötigen;)
Edit: einige Experimente mit Lisp-Interaktion-Modus zeigen, dass auch font-Lock-Modus Neustart nicht unbedingt erforderlich ist. Nur font-lock-Keywords zu ändern ist genug, so lange wie Sie fontification-Trigger wieder irgendwie. (Bearbeiten von Text, Schriftart-Lock-fontify-Puffer, etc.)
Sie können vorübergehend den Modus Haken Variable löschen und neu starten:
(defun my-restart-lisp-mode ()
(interactive)
(let ((lisp-mode-hook nil))
(normal-mode)))