এটি করার একটি আলাদা উপায় এখানে।
আমি একটি ফাংশন সংজ্ঞায়িত করি যা বর্তমান ডিরেক্টরি শ্রেণিবদ্ধের সমস্ত ডিরেক্টরিগুলির তালিকা তৈরি করে।
(defun file-name-directory-nesting-helper (name previous-name accumulator)
(if (string= name previous-name)
accumulator ; stop when names stop changing (at the top)
(file-name-directory-nesting-helper
(directory-file-name (file-name-directory name))
name
(cons name accumulator))))
(defun file-name-directory-nesting (name)
(file-name-directory-nesting-helper (expand-file-name name) "" ()))
একটি উদাহরণ ক্রমযুক্ত:
(file-name-directory-nesting "/foo/bar/baz/quux/foo.el")
;; => ("/" "/foo" "/foo/bar" "/foo/bar/baz" "/foo/bar/baz/quux" "/foo/bar/baz/quux/foo.el")
এখন hack-dir-local-variables
এটিকে "ভান" করার পরামর্শের জন্য আমি যুক্ত করতে পারি যে আমরা গাছের একেবারে শীর্ষে একটি ফাইল পরিদর্শন করছি, ডিরেক্টরি-স্থানীয় সেটিংস প্রয়োগ করব, তারপরে এক স্তর থেকে নীচে নামব, আবার সেটিংস প্রয়োগ করুন এবং এই জাতীয় কিছু।
(defun hack-dir-local-variables-chained-advice (orig)
"Apply dir-local settings from the whole directory hierarchy,
from the top down."
(let ((original-buffer-file-name (buffer-file-name))
(nesting (file-name-directory-nesting (or (buffer-file-name)
default-directory))))
(unwind-protect
(dolist (name nesting)
;; make it look like we're in a directory higher up in the
;; hierarchy; note that the file we're "visiting" does not
;; have to exist
(setq buffer-file-name (expand-file-name "ignored" name))
(funcall orig))
;; cleanup
(setq buffer-file-name original-buffer-file-name))))
(advice-add 'hack-dir-local-variables :around
#'hack-dir-local-variables-chained-advice)
.dir-locals
পারি? ।