Aggiornamento delle parole chiave di blocco dei caratteri in emacs senza ricaricare la modalità principale

StackOverflow https://stackoverflow.com/questions/1431843

Domanda

Sto apportando piccole modifiche a SLIME, in modo da poter ottenere tutti i simboli attualmente caricati da Lisp, analizzarli e fare in modo che il blocco dei caratteri li risolva.

Sono riuscito a fare tutti questi passaggi, ma ho un piccolo problema: quando l'elenco delle parole chiave cambia nel blocco dei caratteri, il buffer non viene aggiornato a meno che non si riavvii la modalità lisp principale. Non voglio riavviare lisp-mode ogni volta che aggiorno parole chiave, perché ho diversi hook sulla modalità lisp che voglio eseguire solo quando carico il file per la prima volta.

Esiste un altro modo per aggiornare il blocco dei caratteri in modo che legga tutte le nuove parole chiave e risolva il buffer di conseguenza? Disattivare il blocco dei caratteri e usare font-lock-fontify-buffer non fa il trucco.

UPD: aggiunta taglia - la domanda è ancora in sospeso. Ho bisogno di un modo per ricaricare la parola chiave lock-font senza ricaricare la modalità principale.

È stato utile?

Soluzione

Ok, che ne dici invece di questo:

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

Altri suggerimenti

L'attivazione della modalità principale non è ciò che fa bloccare i caratteri. Non ho molta familiarità con gli interni di SLIME o lisp-mode, ma solo l'impostazione della variabile dovrebbe farlo funzionare. L'attivazione di font-lock-mode farà in modo che il font-lock inizi a rifiorire con le nuove parole chiave in mente, così come font-lock-fontify-buffer .

Ho hackerato su cperl-mode, principalmente, ed è una semplice questione di cperl-init-faces (che imposta le variabili interne di blocco dei caratteri) e un riavvio di blocco dei caratteri. lisp-mode non dovrebbe essere molto diverso, tranne per non aver bisogno di una chiamata a cperl-init-faces ;)

Modifica: alcune sperimentazioni con la modalità interazione lisp rivelano che non è strettamente necessario nemmeno il riavvio della modalità blocco caratteri. Basta cambiare font-lock-parole chiave, basta che in qualche modo si riattivi la fontificazione. (Modifica del testo, font-lock-fontify-buffer, ecc.)

È possibile cancellare temporaneamente la variabile hook di modalità e riavviarla:

(defun my-restart-lisp-mode ()
  (interactive)
  (let ((lisp-mode-hook nil))
    (normal-mode)))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top