¿Cómo se recargan las variables locales de directorio? Me gustaría modificar .dir-locals.el
ay aplicar esos cambios a la sesión actual de Emacs.
¿Cómo se recargan las variables locales de directorio? Me gustaría modificar .dir-locals.el
ay aplicar esos cambios a la sesión actual de Emacs.
Respuestas:
Esta función volverá a leer el archivo dir-locals y establecerá los nuevos valores para el búfer actual:
(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)))
Y si desea recargar dir-locales para cada búfer en el directorio de su búfer actual:
(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)))))
Puede hacer que todos los locales dir se actualicen cada vez que guarde un archivo dir-locales agregando un after-save-hook
búfer a .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))))
Por supuesto, esto podría tener consecuencias no deseadas porque restablecerá los valores de las variables independientemente de si se han cambiado en otro lugar, así que úselo bajo su propio riesgo.
También puedes usar: M-: (hack-dir-local-variables-non-file-buffer)
Para verificar que funciona : desde un búfer (un archivo de modo de organización por ejemplo), escriba M-x add-dir-local-variable
, luego valide (modo de organización predeterminado), luego escriba demo RET, luego "esto es una demo" RET.
Su archivo .dir-locals.el aparecerá en un búfer:
;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")
((org-mode
(demo . "this is a demo")))
Tienes que guardarlo: C-x C-s
Luego, regrese al búfer de modo de organización y verifique que la variable de demostración no esté definida ( C-h C-v demo
)
Aquí puedes usar el truco: M-: (hack-dir-local-variables-non-file-buffer)
Ahora C-h C-v demo
imprimirá:
el valor de la demostración es "esto es una demostración" Local en el búfer poub.org; globalmente nulo
El valor de esta variable es directorio-local, establecido por el archivo
'/home/picaud/Temp/.dir-locals.el'.Documentación: No documentado como una variable.
buffer-list
.