8
votes

Mise à jour des mots-clés de police-verrouillage dans emacs sans rechargement de mode majeur

Je fais de la petite modification à la boue, de sorte que je puisse obtenir tous les symboles actuellement chargés de LISP, les analyser et faire les polices à policier les policiers.

J'ai réussi à faire toutes ces étapes, mais j'ai un petit problème - lorsque la liste des mots-clés change dans Font-Lock, le tampon n'est pas mis à jour, sauf si vous redémarrez le principal mode LISP. Je ne veux pas redémarrer le mode Lisp à chaque fois que je mettez à jour les mots-clés, car j'ai plusieurs hameçons sur le mode LISP que je veux exécuter uniquement lorsque je charge le fichier pour la première fois.

Y a-t-il une autre façon de mettre à jour Font-Lock afin qu'il lit tous les nouveaux mots-clés et concefe le tampon en conséquence? Éteindre la poly-verrouillage et utiliser Font-Lock-Fontify-tampon ne fait pas le tour.

Upd: Bounty ajouté - La question est toujours en place. J'ai besoin d'un moyen de recharger le mot-clé de frein de police sans recharger le mode majeur.


0 commentaires

3 Réponses :


1
votes

Déclenchement du mode majeur n'est pas ce qui fait que Font-Lock fait sa chose. Je ne connais pas intimement les internes du mode SLIME ou LISP, mais il suffit de définir la variable devrait le faire fonctionner. Basculer le mode de police-verrouillage fabriquera de la Font-Lock Démarrer la réfonte avec les nouveaux mots-clés à l'esprit, de même que Font-Lock-Fontyy-Buffer .

i pirater sur le mode CERL, principalement et c'est une simple question de cperl-init-init-faces (qui définit les variables de polices internes) et un redémarrage de Font-Lock. Le mode LISP ne doit pas être très différent, à l'exception de ne pas avoir besoin d'un appel à CERL-INIT-FACES ;)

Edit: Certaines expérimentations avec le mode d'interaction LISP révèlent que même le redémarrage du mode de polices-verrouillage n'est pas strictement nécessaire. Il suffit de changer de mots-clés de police-verrous suffit, tant que vous réécrivez la fontiditation en quelque sorte. (Modification du texte, de la polices-serrure-fontify-tampon, etc.)


2 commentaires

C'est très étrange. Qu'est-ce que vous utilisez pour modifier les mots-clés? J'utilise "Font-Lock-Ajout-Mots-clés".


Le redémarrage de la free-verrouillage n'a également pas d'aide pour le 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.



2
votes

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

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


3 commentaires

Cool, je vais essayer ceci. Je me demande pourquoi cela ne fonctionne pas comme Jrockway décrit par défaut :)


D'accord, c'est mieux, mais cela désactive tous les crochets, y compris le crochet SLime, par exemple, ce qui n'est pas bon :( Je me demande vraiment s'il est possible de le faire sans redémarrer le mode.


C'est la seule suggestion qui a fonctionné pour moi. Les propositions de Jrockway et Scottfrazer n'ont fait aucune différence sur mon système (GNU EMACS 25.3 avec la personnalisation AQUAMACS).



5
votes

OK, comment de cela à la place:

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


0 commentaires