2009-04-26 9 views
5

Die Frage ist ähnlich wie one.Konnte kein Verzeichnis und alle Unterverzeichnisse in Emacs zum Ladepfad hinzufügen

Es unterscheidet sich jedoch darin, alle Unterverzeichnisse in dem Ordner zu erreichen.

Jouni Code, welche Ordner

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

Wie kann man ein Verzeichnis und alle Unterverzeichnisse zu laden-Pfad in Emacs setzen erreichbar ersten Ebene setzt?

Antwort

9

Meine answer in der anderen Frage behandelt mehrere Ebenen von Unterverzeichnissen.

Der Code als Referenz ist

(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: Vielen Dank, dass für den Hinweis auf! –

+0

Ich bin ziemlich neu in Lisp. Was bedeutet * in deinem Code? –

+0

@Nicholas: Warum benutzt du den Stern? –

1

Hier eine Adaption von Jouni Antwort, die eine Hilfsfunktion verwendet, die Sie anpassen können.

Ein Vorteil der Hilfsfunktion ist, dass Sie sie verfolgen können, wenn sie etwas Unerwartetes tut, weil es eine reine Funktion ist, also keinen Nebeneffekt in Ihren Ladepfad hat. Ich habe versucht, den Normal-Top-Level-Add-Subdirs-to-Load-Pfad verwenden, aber alles darin ist so Nebeneffekt und abhängig von unvorhersehbaren Sondervariablen, dass es einfacher war, etwas frisches zu schreiben, das sauber war. Beachten Sie, dass meine Antwort keine Inodes verwendet und daher weniger effizient ist.

Ein zweiter Vorteil dieses Ansatzes besteht darin, dass Sie damit bestimmen können, welche Dateien Sie ignorieren möchten.

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

Einfache Antwort:

(normal-top-level-add-subdirs-to-load-path) 
Verwandte Themen