Emacs Lisp: लोड-पथ में एक फ़ोल्डर और उसके सभी प्रथम स्तर के सब-फ़ोल्डर्स को कैसे जोड़ें




elisp (4)

अगर मेरे पास इस तरह की एक फ़ोल्डर संरचना है:

~/Projects
    emacs
        package1
            package1-helpers
        package2
            package2-helpers
            package2-more-helpers
        package3
            package3-helpers

मैं इन फ़ोल्डर्स को कैसे जोड़ूं?

  • ~ / परियोजनाएं / Emacs
  • ~ / परियोजनाएं / Emacs / package1
  • ~ / परियोजनाएं / Emacs / package2
  • ~ / परियोजनाएं / Emacs / package3

... मेरे .emacs फ़ाइल से load-path ?

मैं मूल रूप से इस कोड का एक छोटा स्वचालित संस्करण की आवश्यकता है:

(add-to-list 'load-path "~/Projects/emacs")
(add-to-list 'load-path "~/Projects/emacs/package1")
(add-to-list 'load-path "~/Projects/emacs/package2")
(add-to-list 'load-path "~/Projects/emacs/package3")

मैं आपको subdirs.el का उपयोग करने का सुझाव देता हूं


(let ((base "~/Projects/emacs"))
  (add-to-list 'load-path base)
  (dolist (f (directory-files base))
    (let ((name (concat base "/" f)))
      (when (and (file-directory-p name) 
                 (not (equal f ".."))
                 (not (equal f ".")))
        (add-to-list 'load-path name)))))

यह मेरा हैक किया हुआ संस्करण है: पी

(defun add-to-list-with-subdirs (base exclude-list include-list)
  (dolist (f (directory-files base))
 (let ((name (concat base "/" f)))
   (when (and (file-directory-p name)
     (not (member f exclude-list)))
  (add-to-list 'load-path name)
  (when (member f include-list)
   (add-to-list-with-subdirs name exclude-list include-list)))))
  (add-to-list 'load-path base))

यह आधार से सभी प्रथम स्तर के डायर जोड़ देगा और बहिष्कृत सूची में शामिल नहीं किए जाएंगे, जबकि डायर के लिए सूची में शामिल होंगे, यह उस पहले के सभी प्रथम स्तर के डायरों को भी जोड़ देगा।

(add-to-list-with-subdirs "~/.emacs.d" '("." ".." "backup") '("vendor" "my-lisp"))

यह फ़ंक्शन पहले स्तर के उप-फ़ोल्डरों और फ़ाइलों को बेस-पैट में मैप करेगा और इसे लोड-लिस्ट में जोड़ देगा यदि यह एक निर्देशिका है (निर्देशिका "।" और ".." को छोड़कर)

(defun add-subdirs-to-load-path (base-path)
  "Adds first level subfolders to LOAD-PATH.
BASE-PATH must not end with a '/'"
  (mapc (lambda (attr)
          (let ((name (car attr))
                (folder-p (cadr attr)))
            (unless (or (not folder-p)
                        (equal name ".")
                        (equal name ".."))
              (add-to-list 'load-path (concat base-path "/" name)))))
        (directory-files-and-attributes base-path)))




elisp