Вот адаптация ответа Джоуни, в которой используется вспомогательная функция, которую вы можете адаптировать.
Одним из преимуществ вспомогательной функции является то, что вы можете отследить ее, когда она делает что-то неожиданное, потому что это чистая функция, поэтому она не оказывает побочного эффекта на ваш путь загрузки. Я пытался использовать обычный верхний уровень-add-subdirs-to-load-path, но все в нем настолько побочно и зависит от непредсказуемых специальных переменных, что было просто легче написать что-то свежее, чистое. Обратите внимание, что в моем ответе не используются inode, поэтому он может быть менее эффективным.
Вторым преимуществом этого подхода является то, что он позволяет настроить файлы, которые вы хотели бы игнорировать.
(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)))