2009-09-16 16 views
8

Ich mache kleine Änderungen an SLIME, damit ich alle aktuell geladenen Symbole aus Lisp bekommen kann, analysiere sie und mache sie mit font-lock fonfig.Aktualisieren von Font-Lock-Schlüsselwörtern in Emacs ohne Major-Modus reload

Ich habe es geschafft, alle diese Schritte, aber ich habe ein kleines Problem - wenn Keyword-Liste in Schriftart-Sperre ändert der Puffer wird nicht aktualisiert, es sei denn, Sie starten den Major Lisp-Modus. Ich möchte den Lisp-Modus nicht jedes Mal neu starten, wenn ich Schlüsselwörter aktualisiere, weil ich mehrere Haken im Lisp-Modus habe, die ich nur ausführen möchte, wenn ich die Datei zum ersten Mal lade.

Gibt es eine andere Möglichkeit, Font-Lock zu aktualisieren, so dass es alle dann neue Schlüsselwörter liest und den Puffer entsprechend kennzeichnet? Das Ausschalten von Font-Lock und die Verwendung von font-lock-fontify-buffer ist nicht sinnvoll.

UPD: Zusätzliche Prämie - die Frage ist noch offen. Ich brauche eine Möglichkeit, das Schlüsselwort font-lock neu zu laden, ohne den Hauptmodus neu zu laden.

Antwort

5

Ok, wie wäre es damit statt:

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

Super, das scheint zu funktionieren! – freiksenet

1

Das Triggern des Major-Modus ist nicht das, was Font-Lock dazu bringt, sein Ding zu machen. Ich bin nicht vertraut mit den Interna von SLIME oder Lisp-Modus, aber nur die Variable setzen sollte es funktionieren. Wenn Sie den Font-Lock-Modus aktivieren, wird die Font-Lock-Funktion mit den neuen Keywords neu formatiert, ebenso wie die font-lock-fontify-buffer.

Ich hack auf cperl-Modus, meist, und es ist eine einfache Angelegenheit von cperl-init-faces (die die internen Font-Lock-Variablen setzt) ​​und einen Neustart der Schriftart-Sperre. lisp-mode sollte nicht viel anders sein, außer für keinen Anruf an cperl-init-faces;)

Edit: einige Experimente mit lisp-interaction-mode zeigt, dass sogar Neustart Font-Lock-Modus ist nicht unbedingt notwendig. Das Ändern von Font-Lock-Keywords ist ausreichend, solange Sie die Fontification irgendwie erneut auslösen. (Bearbeiten von Text, Schriftart-Lock-fontify-Puffer, etc.)

+0

Das ist sehr seltsam. Was verwendest du zum Ändern von Keywords? Ich benutze "font-lock-add-keywords". – freiksenet

+0

Font-Lock-Neustart hilft auch nicht zum Beispiel für den Python-Modus. Vielleicht ist es meine Version von Emacs? Welche Version hast du? Ich habe GNU Emacs 23.1.50.1 auf x86-64 Ubuntu. – freiksenet

1

Sie vorübergehend den Modus Haken Variable löschen konnte, und starten Sie es:

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

Cool, ich werde das versuchen. Ich frage mich, warum es nicht funktioniert wie jrockway standardmäßig beschrieben :) – freiksenet

+0

Okay, das ist besser, aber dies deaktiviert alle Haken, einschließlich Schleim Haken zum Beispiel, die nicht gut ist :(Ich frage mich wirklich, ob es möglich ist zu tun ohne Neustart des Modus – freiksenet