rewrite the function that add directory to load-path

This commit is contained in:
zedhugh committed 2024-09-14 22:26:17 +08:00
1 parent eee2444a8c
commit b526e6b731
1 file changed
+28 -28
+28 -28
View File
@@ -69,40 +69,40 @@ If freezing sometimes, decrease it. If stuttering, increase it.")
"Package directory.") "Package directory.")
(require 'cl-lib) (require 'cl-lib)
(require 'subr-x)
(defun add-subdirs-to-load-path (search-dir) (defun add-dir-and-subdirs-to-load-path (dir)
(interactive) "Add directory and its subdirectoris to `load-path'.
(let* ((dir (file-name-as-directory search-dir))) Detect whether there are any loadable module in DIR, if so, add DIR to `load-path'.
(dolist (subdir Do this recursively for subdirectories of DIR."
;; 过滤出不必要的目录,提升Emacs启动速度 (unless (file-directory-p dir)
(cl-remove-if (error "%s is not a directory" dir))
#'(lambda (subdir)
(or (let ((subdirs nil)
;; 不是目录的文件都移除 (files nil)
(not (file-directory-p (concat dir subdir))) (temp-filepath nil)
;; 父目录、 语言相关和版本控制目录都移除 ;; (loadable-suffixes (get-load-suffixes))
(member subdir '("." ".." (load-extension (mapcar (lambda (str) (string-remove-prefix "." str)) load-suffixes))
(exclude-dirs '("." ".."
"dist" "node_modules" "__pycache__" "dist" "node_modules" "__pycache__"
"RCS" "CVS" "rcs" "cvs" ".git" ".github")))) "RCS" "CVS" "rcs" "cvs" ".git" ".github")))
(directory-files dir)))
(let ((subdir-path (concat dir (file-name-as-directory subdir))))
;; 目录下有 .el .so .dll 文件的路径才添加到 `load-path' 中,提升Emacs启动速度
(when (cl-some #'(lambda (subdir-file)
(and (file-regular-p (concat subdir-path subdir-file))
;; .so .dll 文件指非Elisp语言编写的Emacs动态库
(member (file-name-extension subdir-file) '("el" "so" "dll"))))
(directory-files subdir-path))
;; 注意:`add-to-list' 函数的第三个参数必须为 t ,表示加到列表末尾 (dolist (filename (directory-files dir))
;; 这样Emacs会从父目录到子目录的顺序搜索Elisp插件,顺序反过来会导致Emacs无法正常启动 (setq temp-filepath (file-name-concat dir filename))
(add-to-list 'load-path subdir-path t)) (if (file-directory-p temp-filepath)
(unless (member filename exclude-dirs)
(add-to-list 'subdirs temp-filepath t))
(when (file-regular-p temp-filepath)
(add-to-list 'files temp-filepath t))))
;; 继续递归搜索子目录 (when (cl-some (lambda (file)
(add-subdirs-to-load-path subdir-path))))) (member (file-name-extension file) load-extension))
files)
(add-to-list 'load-path dir t))
(mapc #'add-dir-and-subdirs-to-load-path subdirs)))
(add-to-list 'load-path (expand-file-name "lisp" creature/config-dir) t) (add-to-list 'load-path (expand-file-name "lisp" creature/config-dir) t)
(add-to-list 'load-path creature/pkg-dir t) (add-dir-and-subdirs-to-load-path creature/pkg-dir)
(add-subdirs-to-load-path creature/pkg-dir)
(require 'init-built-in) (require 'init-built-in)