Jak przeładować zmienne lokalne katalogu? Chciałbym zmodyfikować .dir-locals.el
i zastosować takie zmiany w bieżącej sesji Emacsa.
Jak przeładować zmienne lokalne katalogu? Chciałbym zmodyfikować .dir-locals.el
i zastosować takie zmiany w bieżącej sesji Emacsa.
Odpowiedzi:
Ta funkcja ponownie odczyta plik dir-locals i ustawi nowe wartości dla bieżącego bufora:
(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)))
A jeśli chcesz ponownie załadować katalog-lokalny dla każdego bufora w bieżącym katalogu bufora:
(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)))))
Możesz mieć odświeżanie wszystkich katalogów lokalnych za każdym razem, gdy zapisujesz plik katalogów lokalnych przez dodanie after-save-hook
buforów .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))))
Oczywiście może to mieć niezamierzone konsekwencje, ponieważ spowoduje to zresetowanie wartości zmiennych niezależnie od tego, czy zostały one zmienione gdzie indziej, więc używaj na własne ryzyko.
Możesz także użyć: M-: (hack-dir-local-variables-non-file-buffer)
Aby sprawdzić, czy działa : z bufora (na przykład plik trybu org), wpisz M-x add-dir-local-variable
, a następnie sprawdź poprawność (domyślny tryb org), następnie wpisz demo RET, a następnie „to jest demo” RET.
Twój plik .dir-locals.el pojawi się w buforze:
;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")
((org-mode
(demo . "this is a demo")))
Musisz to zapisać: C-x C-s
Następnie wróć do bufora trybu organizacji i sprawdź, czy zmienna demonstracyjna nie jest zdefiniowana ( C-h C-v demo
)
Tutaj możesz użyć lewy: M-: (hack-dir-local-variables-non-file-buffer)
Teraz C-h C-v demo
wydrukuje:
wartość demo to „to jest demo” Lokalny w buforze poub.org; globalnie nieważne
Ta zmienna ma wartość lokalną dla katalogu, ustawioną w pliku
„/home/picaud/Temp/.dir-locals.el”.Dokumentacja: Nieudokumentowana jako zmienna.
buffer-list
.