Como você recarrega as variáveis locais do diretório? Gostaria de modificar um .dir-locals.el
e aplicar essas alterações à sessão atual do Emacs.
Como você recarrega as variáveis locais do diretório? Gostaria de modificar um .dir-locals.el
e aplicar essas alterações à sessão atual do Emacs.
Respostas:
Esta função irá reler o arquivo dir-locals e definir os novos valores para o buffer atual:
(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 você deseja recarregar dir-locals para cada buffer no diretório atual do buffer:
(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)))))
Você pode fazer com que todos os dirs locais sejam atualizados sempre que salvar um arquivo dir-locals adicionando after-save-hook
aos buffers .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))))
É claro que isso pode ter conseqüências não intencionais, pois redefinirá os valores das variáveis, independentemente de terem sido alteradas em outro local, portanto, use por seu próprio risco.
Você também pode usar: M-: (hack-dir-local-variables-non-file-buffer)
Para verificar se funciona : em um buffer (um arquivo no modo organizacional, por exemplo), digite M-x add-dir-local-variable
, valide (modo organizacional padrão), digite demo RET e depois RET "this is a demo".
Seu arquivo .dir-locals.el aparecerá em um buffer:
;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")
((org-mode
(demo . "this is a demo")))
Você precisa salvá-lo: C-x C-s
Em seguida, volte para o buffer do modo organizacional e verifique se a variável demo não está definida ( C-h C-v demo
)
Aqui você pode usar o truque: M-: (hack-dir-local-variables-non-file-buffer)
Agora C-h C-v demo
será impresso:
O valor da demo é "esta é uma demo" Local em buffer poub.org; globalmente nulo
O valor dessa variável é diretório-local, definido pelo arquivo
'/home/picaud/Temp/.dir-locals.el'.Documentação: Não documentado como uma variável.
buffer-list
.