Wie lade ich verzeichnislokale Variablen neu? Ich möchte eine ändern .dir-locals.el
und möchte, dass solche Änderungen auf die aktuelle Emacs-Sitzung angewendet werden.
Wie lade ich verzeichnislokale Variablen neu? Ich möchte eine ändern .dir-locals.el
und möchte, dass solche Änderungen auf die aktuelle Emacs-Sitzung angewendet werden.
Antworten:
Diese Funktion liest die dir-locals-Datei erneut und legt die neuen Werte für den aktuellen Puffer fest:
(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)))
Und wenn Sie dir-locals für jeden Puffer im Verzeichnis Ihres aktuellen Puffers neu laden möchten:
(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)))))
Sie können alle after-save-hook
Verzeichnis-Locals jedes Mal aktualisieren lassen, wenn Sie eine Verzeichnis-Locals -Datei speichern, indem Sie einen Puffer zu .dir-locals.el hinzufügen.
(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))))
Dies könnte natürlich unbeabsichtigte Konsequenzen haben, da die Variablenwerte zurückgesetzt werden, unabhängig davon, ob sie an anderer Stelle geändert wurden. Verwenden Sie sie daher auf eigenes Risiko.
Sie können auch verwenden: M-: (hack-dir-local-variables-non-file-buffer)
Um zu überprüfen, ob es funktioniert : Geben Sie in einem Puffer (z. B. eine Datei im Organisationsmodus) Folgendes ein M-x add-dir-local-variable
, und validieren Sie ihn (Standard-Organisationsmodus). Geben Sie dann demo RET ein und dann "this is a demo" RET.
Ihre .dir-locals.el- Datei wird in einem Puffer angezeigt :
;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")
((org-mode
(demo . "this is a demo")))
Sie müssen es speichern: C-x C-s
Kehren Sie dann zu Ihrem Organisationsmodus-Puffer zurück und prüfen Sie, ob die Demovariable nicht definiert ist ( C-h C-v demo
)
Hier kannst du den Trick anwenden: M-: (hack-dir-local-variables-non-file-buffer)
Nun C-h C-v demo
wird gedruckt:
der Wert von demo ist "das ist eine Demo" Lokal in buffer poub.org; global nichtig
Der Wert dieser Variablen ist verzeichnislokal und wird in der Datei
'/home/picaud/Temp/.dir-locals.el' festgelegt.Dokumentation: Nicht als Variable dokumentiert.
buffer-list
.