Mise à jour des mots-clés Font-Lock dans emacs sans rechargement majeur du mode
-
07-07-2019 - |
Question
Je suis en train de modifier légèrement SLIME pour pouvoir obtenir tous les symboles actuellement chargés de Lisp, les analyser et les rendre police de caractères à police verrouillée.
J'ai réussi à faire toutes ces étapes, mais j'ai un petit problème: quand la liste des mots-clés change dans font-lock, la mémoire tampon n'est pas mise à jour à moins que vous ne redémarriez le mode lisp principal. Je ne souhaite pas redémarrer le mode lisp à chaque fois que je mets à jour des mots-clés, car plusieurs points d'accrochage en mode lisp que je souhaite exécuter uniquement lorsque je charge le fichier pour la première fois.
Existe-t-il un autre moyen de mettre à jour font-lock afin de lire tous les nouveaux mots-clés, puis de définir le tampon en conséquence? Désactiver font-lock et utiliser font-lock-fontify-buffer
ne fait pas l'affaire.
UPD: Bounty: la question est toujours d'actualité. J'ai besoin d'un moyen de recharger le mot clé Font-Lock sans recharger le mode majeur.
La solution
Ok, que diriez-vous de cela plutôt:
(defun my-font-lock-restart ()
(interactive)
(setq font-lock-mode-major-mode nil)
(font-lock-fontify-buffer))
Autres conseils
Déclencher le mode majeur n’est pas ce qui fait que font-lock fait son travail. Je ne connais pas très bien les éléments internes de SLIME ou de lisp-mode, mais il suffit de définir la variable pour que cela fonctionne. Si vous activez le mode font-lock, Font-lock se remodellisera avec les nouveaux mots-clés, tout comme font-lock-fontify-buffer
.
Je pirate en mode cperl, principalement, et c’est une simple question de cperl-init-faces
(qui définit les variables internes de police-lock) et un redémarrage de police-lock. Le mode lisp ne devrait pas être très différent, sauf qu'il n'est pas nécessaire d'appeler cperl-init-faces
;)
Modifier: certaines expériences avec le mode lisp-interaction-révèlent que même le redémarrage du mode font-lock-mode n’est pas strictement nécessaire. Il suffit de changer les mots-clés font-lock-aussi longtemps que vous relancez la fontification. (Édition de texte, font-lock-fontify-buffer, etc.)
Vous pouvez effacer temporairement la variable de hook de mode et la redémarrer:
(defun my-restart-lisp-mode ()
(interactive)
(let ((lisp-mode-hook nil))
(normal-mode)))