Як ви перезавантажуєте локальні змінні? Я хотів би змінити .dir-locals.el
та застосувати такі зміни до поточного сеансу Emacs.
Як ви перезавантажуєте локальні змінні? Я хотів би змінити .dir-locals.el
та застосувати такі зміни до поточного сеансу Emacs.
Відповіді:
Ця функція перечитає файл dir-locals та встановить нові значення для поточного буфера:
(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)))
І якщо ви хочете перезавантажити dir-locals для кожного буфера у каталозі поточного буфера:
(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)))))
Ви можете оновлювати всіх місцевих жителів кожного разу, коли ви зберігаєте файл dir-locals, додаючи after-save-hook
до .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))))
Звичайно, це може мати непередбачувані наслідки, оскільки воно скине значення змінних незалежно від того, чи були вони змінені в іншому місці, тому використовуйте на свій страх і ризик.
Ви також можете використовувати: M-: (hack-dir-local-variables-non-file-buffer)
Щоб перевірити, чи працює : з буфера (наприклад, файл в режимі org), введіть M-x add-dir-local-variable
, а потім валідайте (org-режим за замовчуванням), потім введіть демо RET, потім RET "це демонстрація".
Ваш файл .dir-locals.el з'явиться в буфері:
;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")
((org-mode
(demo . "this is a demo")))
Ви повинні зберегти його: C-x C-s
Потім поверніться до буфера OR-режиму та перевірте, чи не визначена демо-змінна ( C-h C-v demo
)
Тут ви можете використовувати фокус: M-: (hack-dir-local-variables-non-file-buffer)
Тепер C-h C-v demo
надрукуємо:
значення демо - "це демонстрація" Місцеве в буфері poub.org; глобально нікчемний
Значення цієї змінної є локальним для каталогу, встановленим файлом
'/home/picaud/Temp/.dir-locals.el'.Документація: не задокументована як змінна.
buffer-list
.