Emacs

2009-04-26 16 views
5

में लोड-पथ में निर्देशिका और इसकी सभी उप-निर्देशिकाओं को जोड़ने में असमर्थ यह प्रश्न one के समान है।Emacs

हालांकि, यह फ़ोल्डर में सभी उपनिर्देशिकाओं को प्राप्त करने में भी भिन्न है।

Jouni का कोड है जो पहले के स्तर डालता प्राप्त फ़ोल्डर

(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))))) 

कैसे आप लोड-पथ के लिए Emacs में कोई निर्देशिका और उसकी सभी सबडायरेक्टरियों रख सकते हैं?

उत्तर

9

अन्य प्रश्न में मेरा answer उपनिर्देशिका के कई स्तरों को संभालता है।

कोड संदर्भ

(let* ((my-lisp-dir "~/.elisp/") 
     (default-directory my-lisp-dir) 
     (orig-load-path load-path)) 
    (setq load-path (cons my-lisp-dir nil)) 
    (normal-top-level-add-subdirs-to-load-path) 
    (nconc load-path orig-load-path)) 
+0

@Nicholas: आप उनका कहना है कि बाहर के लिए धन्यवाद! –

+0

मैं लिस्प में नया हूं। आपके कोड में * मतलब क्या है? –

+0

@ निकोलस: आप स्टार का उपयोग क्यों करते हैं? –

1

के लिए यहाँ Jouni के जवाब पर आधारित एक फिल्म एक सहायक समारोह है कि आप तैयार कर सकते हैं का उपयोग करता है है।

सहायक कार्य का एक लाभ यह है कि जब आप कुछ अप्रत्याशित करते हैं तो आप इसका पता लगा सकते हैं, क्योंकि यह एक शुद्ध कार्य है, इसलिए आपके लोड-पथ में दुष्प्रभाव नहीं होता है। मैंने सामान्य-टॉप-लेवल-एड-सबडिर्स-टू-लोड-पथ का उपयोग करने का प्रयास किया, लेकिन इसमें सबकुछ इतनी साइड-इफेक्टिंग और अप्रत्याशित विशेष चर पर निर्भर है, कि साफ-सुथरा कुछ नया लिखना आसान था। ध्यान दें कि मेरा जवाब इनोड्स का उपयोग नहीं करता है, इसलिए कम कुशल हो सकता है।

इस दृष्टिकोण का एक दूसरा लाभ यह है कि यह आपको बताता है कि आप कौन सी फाइलों को अनदेखा करना चाहते हैं।

 
(defun add-to-load-path-with-subdirs (directory &optional endp) 
    (let ((newdirs (lp-subdir-list directory))) 
    (if endp (setq load-path (append load-path newdirs)) 
     (setq load-path (nconc newdirs load-path))))) 

(defconst +lp-ignore-list+ 
    (list "CVS" ".git" ".svn" ".." ".")) 

(defun lp-subdir-list (base &optional ignore) 
    (unless ignore 
    (setq ignore +lp-ignore-list+)) 
    (let ((pending (list base)) 
(retval nil)) 
    (while pending 
     (let ((dir (pop pending))) 
(push dir retval) 
(dolist (f (directory-files dir)) 
    (let ((name (concat dir "/" f))) 
    (when (and (not (member f ignore)) 
     (file-directory-p name)) 
     (push name pending) 
     (push name retval)))))) 
    (reverse retval)))