Come ricaricare le variabili directory locali? Vorrei modificare .dir-locals.el
ae applicare tali modifiche alla sessione corrente di Emacs.
Come ricaricare le variabili directory locali? Vorrei modificare .dir-locals.el
ae applicare tali modifiche alla sessione corrente di Emacs.
Risposte:
Questa funzione rileggerà il file dir-locals e imposterà i nuovi valori per il buffer corrente:
(defun my-reload-dir-locals-for-current-buffer ()
"reload dir locals for the current buffer"
(interactive)
(let ((enable-local-variables :all))
(hack-dir-local-variables-non-file-buffer)))
E se si desidera ricaricare i dir-local per ogni buffer nella directory del buffer corrente:
(defun my-reload-dir-locals-for-all-buffer-in-this-directory ()
"For every buffer with the same `default-directory` as the
current buffer's, reload dir-locals."
(interactive)
(let ((dir default-directory))
(dolist (buffer (buffer-list))
(with-current-buffer buffer
(when (equal default-directory dir))
(my-reload-dir-locals-for-current-buffer)))))
È possibile aggiornare tutti i locali dir ogni volta che si salva un file dir-locals aggiungendo un after-save-hook
buffer .dir-locals.el.
(add-hook 'emacs-lisp-mode-hook
(defun enable-autoreload-for-dir-locals ()
(when (and (buffer-file-name)
(equal dir-locals-file
(file-name-nondirectory (buffer-file-name))))
(add-hook (make-variable-buffer-local 'after-save-hook)
'my-reload-dir-locals-for-all-buffer-in-this-directory))))
Naturalmente questo potrebbe avere conseguenze non intenzionali perché ripristinerà i valori delle variabili indipendentemente dal fatto che siano stati modificati altrove, quindi utilizzali a tuo rischio.
Puoi anche usare: M-: (hack-dir-local-variables-non-file-buffer)
Per verificare che funzioni : da un buffer (ad esempio un file in modalità org), digita M-x add-dir-local-variable
, quindi convalida (modalità org predefinita), quindi digita RET demo, quindi RET "questa è una demo".
Il tuo file .dir-locals.el apparirà in un buffer:
;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")
((org-mode
(demo . "this is a demo")))
Devi salvarlo: C-x C-s
Quindi torna al buffer della modalità organizzazione e verifica che la variabile demo non sia definita ( C-h C-v demo
)
Qui puoi usare il trucco: M-: (hack-dir-local-variables-non-file-buffer)
Ora C-h C-v demo
stamperà:
il valore della demo è "this is a demo" Local in buffer poub.org; nulla a livello globale
Il valore di questa variabile è directory-local, impostato dal file
'/home/picaud/Temp/.dir-locals.el'.Documentazione: non documentata come variabile.
buffer-list
.