Bagaimana Anda memuat ulang variabel direktori-lokal? Saya ingin memodifikasi .dir-locals.el
dan menerapkan perubahan tersebut pada sesi Emacs saat ini.
Bagaimana Anda memuat ulang variabel direktori-lokal? Saya ingin memodifikasi .dir-locals.el
dan menerapkan perubahan tersebut pada sesi Emacs saat ini.
Jawaban:
Fungsi ini akan membaca kembali file dir-locals dan mengatur nilai baru untuk buffer saat ini:
(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)))
Dan jika Anda ingin memuat ulang dir-local untuk setiap buffer di direktori buffer Anda saat ini:
(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)))))
Anda bisa membuat semua dir lokal menyegarkan setiap kali Anda menyimpan file dir-lokal dengan menambahkan after-save-hook
buffer .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))))
Tentu saja ini bisa memiliki konsekuensi yang tidak diinginkan karena akan mereset nilai variabel terlepas dari apakah mereka telah diubah di tempat lain, jadi gunakan dengan risiko Anda sendiri.
Anda juga bisa menggunakan: M-: (hack-dir-local-variables-non-file-buffer)
Untuk memeriksanya berfungsi : dari buffer (misalnya file mode org), ketik M-x add-dir-local-variable
, lalu validasi (mode org default), lalu ketik demo RET, lalu "ini adalah demo" RET.
Anda .dir-locals.el file yang akan muncul dalam buffer:
;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")
((org-mode
(demo . "this is a demo")))
Anda harus menyimpannya: C-x C-s
Kemudian kembali ke buffer mode org Anda dan periksa apakah variabel demo tidak ditentukan ( C-h C-v demo
)
Di sini Anda dapat menggunakan triknya: M-: (hack-dir-local-variables-non-file-buffer)
Sekarang C-h C-v demo
akan dicetak:
nilai demo adalah "ini demo" Lokal di buffer poub.org; batal secara global
Nilai variabel ini adalah direktori-lokal, yang ditetapkan oleh file
'/ home / home_Temp/.dir-locals.el'.Dokumentasi: Tidak didokumentasikan sebagai variabel.
buffer-list
.