2009-09-16 4 views
8

Je suis en train de faire une petite modification de SLIME, afin que je puisse obtenir tous les symboles actuellement chargés de Lisp, les analyser et les fontifier.Mise à jour des mots-clés font-lock dans emacs sans rechargement en mode majeur

J'ai réussi à faire toutes ces étapes, mais j'ai un petit problème - quand la liste de mots-clés change dans font-lock, le tampon n'est pas mis à jour sauf si vous redémarrez le mode Lisp principal. Je ne veux pas redémarrer le mode lisp chaque fois que je mets à jour des mots-clés, car j'ai plusieurs hooks en mode-lisp que je ne veux exécuter que lorsque je charge le fichier pour la première fois.

Existe-t-il un autre moyen de mettre à jour le font-lock afin qu'il lise tous les nouveaux mots-clés et fontifie le tampon en conséquence? Désactiver police-lock et en utilisant font-lock-fontify-buffer ne fait pas l'affaire.

UPD: Ajout de prime - la question est toujours en suspens. J'ai besoin d'un moyen de recharger le mot-clé font-lock sans recharger le mode majeur.

Répondre

5

Ok, que diriez-vous à la place:

(defun my-font-lock-restart() 
    (interactive) 
    (setq font-lock-mode-major-mode nil) 
    (font-lock-fontify-buffer)) 
+0

Génial, cela semble fonctionner! – freiksenet

1

Déclencher le mode majeur n'est pas ce qui fait que font-lock font sa chose. Je ne suis pas intimement familier avec les internes de SLIME ou Lisp-mode, mais juste le réglage de la variable devrait le faire fonctionner. En basculant en mode police-verrouillage, Font-Lock commencera à se refonder avec les nouveaux mots-clés en tête, tout comme font-lock-fontify-buffer.

Je hack sur cperl-mode, la plupart du temps, et c'est une simple question de cperl-init-faces (qui définit les variables internes de police-verrouillage) et un redémarrage de font-lock. Lisp-mode ne devrait pas être très différent, sauf pour ne pas avoir besoin d'un appel à cperl-init-faces;)

Editer: certaines expérimentations avec le mode d'interaction lisp révèlent que même le redémarrage du mode font-lock n'est pas strictement nécessaire. Le simple fait de changer les mots-clés de police est suffisant, à condition de re-déclencher la fontification. (Modification de texte, font-lock-fontifier-tampon, etc.)

+0

C'est très étrange. Qu'est-ce que vous utilisez pour modifier les mots-clés? J'utilise "font-lock-add-keywords". – freiksenet

+0

Le redémarrage de la fonction de verrouillage des polices ne vous aide pas non plus en mode python par exemple. Peut-être que c'est ma version d'Emacs? Quelle version avez-vous? J'ai GNU Emacs 23.1.50.1 sur x86-64 Ubuntu. – freiksenet

1

Vous pouvez temporairement effacer la variable crochet de mode et redémarrez-le:

(defun my-restart-lisp-mode() 
    (interactive) 
    (let ((lisp-mode-hook nil)) 
    (normal-mode))) 
+0

Cool, je vais essayer ça. Je me demande pourquoi ça ne fonctionne pas comme jrockway décrit par défaut :) – freiksenet

+0

D'accord, c'est mieux, mais cela désactive tous les hooks, y compris le slime hook par exemple, ce qui n'est pas bon :(Je me demande vraiment si c'est possible sans redémarrer le mode – freiksenet