Aquí es una adaptación de la respuesta de Jouni que utiliza una función auxiliar que se puede adaptar.
Una ventaja de la función auxiliar es que puede rastrear cuando hace algo inesperado, porque es una función pura, por lo que no tiene efectos secundarios en la ruta de carga. Intenté usar la ruta normal-nivel-superior-agregar-subdirectorios-a-carga, pero todo en ella es tan secundario y dependiente de variables especiales impredecibles, que era más fácil escribir algo nuevo que estaba limpio. Tenga en cuenta que mi respuesta no utiliza inodos, por lo que puede ser menos eficiente.
Una segunda ventaja de este enfoque es que le permite adaptar los archivos que desea ignorar.
(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)))
@Nicholas: Gracias por señalarlo! –
Soy bastante nuevo en Lisp. ¿Qué significa * en tu código? –
@Nicholas: ¿Por qué usas la estrella? –