回答:
この関数は、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)))))
after-save-hook
.dir-locals.elバッファにを追加することにより、dir-localsファイルを保存するたびに、すべてのdir localsを更新できます。
(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)
動作を確認するには、バッファ(たとえば、組織モードファイル)から、を入力M-x add-dir-local-variable
してからvalidate(デフォルトの組織モード)を入力し、demo RETと入力してから、「this is a demo」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
次に、組織モードバッファに戻り、デモ変数が定義されていないことを確認します(C-h C-v demo
)
ここでは、トリックを使用できます。 M-: (hack-dir-local-variables-non-file-buffer)
これでC-h C-v demo
印刷されます:
デモの値は「this is a demo」です。バッファpoub.orgのローカル。グローバルに無効
この変数の値はディレクトリローカルで、ファイル
「/home/picaud/Temp/.dir-locals.el」によって設定されます。ドキュメント:変数としてドキュメント化されていません。
buffer-list
です。