;;; init-projectile -- 项目管理的配置 ;;; Commentary: ;;; Code: ;; 这个是基础配置部分 (require 'project) ;; 配置项目根目录识别 (setq project-vc-extra-root-markers '(".project" ".git" ".hg" ".svn" "Makefile")) ;; 设置项目列表文件 (setq project-list-file "~/.emacs.d/projects") ;; 设置项目切换时的默认命令列表 (setq project-switch-commands '((project-find-file "Find file") (project-dired "Dired") (project-vc-dir "VC-Dir") (project-shell "Shell"))) ;; 自定义项目根目录识别函数 (defun my/project-try-custom-root (dir) "Define custom project roots." (let ((root (locate-dominating-file dir ".project"))) (and root (cons 'vc root)))) (add-hook 'project-find-functions #'my/project-try-custom-root) ;; 手动添加项目到 project.el 的项目列表 (defun my/add-project (dir) "手动将 DIR 添加到 project.el 的项目列表中。" (interactive "D添加项目目录: ") (let ((projects (mapcar (lambda (p) (if (listp p) p (list p))) (project-known-project-roots)))) (unless (member (list dir) projects) (setq projects (append projects (list (list dir)))) (setq project--list projects) ;; 保存到 projects 文件,而不是 custom.el (with-temp-file project-list-file (insert (prin1-to-string projects))) (message "项目 %s 已添加到 project.el 列表中" dir)))) ;; 清除不存在的项目缓存 (defun project-forget-zombie-projects () "Remove non-existing projects from the known projects list." (interactive) (setq project--list (cl-remove-if-not #'file-directory-p project--list)) (with-temp-file project-list-file (insert (prin1-to-string project--list))) (message "已移除不存在的项目")) ;; hydra配置 ;; 定义一个用于Project项目管理的 hydra (defhydra hydra-project-operations (:color blue :hint nil) " ^Project项目管理^ ^^^^^^^^^^^^^^^^^^^-------------------- _p_: 切换项目 _f_: 查找文件 _d_: 查找目录 _s_: 正则查找 _g_: 全局搜索 _b_: 切换缓冲区 _r_: 忽略项目 _a_: 添加项目 _c_: 清除缓存 " ("p" project-switch-project "切换项目") ("f" project-find-file "查找文件") ("d" project-find-dir "查找目录") ("s" project-find-regexp "正则查找") ("g" project-find-regexp "全局搜索") ("b" project-switch-to-buffer "切换缓冲区") ("r" project-forget-project "忽略项目") ("a" my/add-project "添加项目") ("c" project-forget-zombie-projects "清除缓存")) (provide 'init-project) ;;; init-project.el ends here