Ecco un adattamento della risposta di Jouni che utilizza una funzione di supporto che è possibile personalizzare.
Un vantaggio della funzione di supporto è che è possibile rintracciarlo quando fa qualcosa di inaspettato, perché è una funzione pura, quindi non ha effetti collaterali sul percorso di carico. Ho provato ad usare il normale-top-level-add-subdirs-to-load-path, ma tutto in esso è così efficace e dipendente da variabili speciali imprevedibili, che è stato semplicemente più facile scrivere qualcosa di fresco che fosse pulito. Nota che la mia risposta non usa gli inode, quindi potrebbe essere meno efficiente.
Un secondo vantaggio di questo approccio è che consente di personalizzare i file che si desidera ignorare.
(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)))
fonte
2010-03-09 19:28:35
@Nicholas: Grazie per la segnalazione! –
Sono piuttosto nuovo in Lisp. Cosa significa let * nel tuo codice? –
@Nicholas: Perché usi la stella? –