diff options
Diffstat (limited to '.config/emacs')
-rw-r--r-- | .config/emacs/init.el | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/.config/emacs/init.el b/.config/emacs/init.el index 4d681a5..07c0395 100644 --- a/.config/emacs/init.el +++ b/.config/emacs/init.el @@ -686,13 +686,32 @@ ligatures for `c-ts-mode', the following two entries could be added: (global-ligature-mode)) ;;; Set Project List +(eval-and-compile + (require 'files)) + +(defun x-project-root-override (directory) + "Find the project root of DIRECTORY. This function works under the +assumption that projects are stored under $REPODIR in the format +OWNER/PROJECT. This would mean for example that Emacs would be located +under $REPODIR/GNU/Emacs." + (when-let* ((repo-dir (getenv "REPODIR")) + (canonical (f-canonical directory)) + (canonical-parts (f-split canonical)) + (length-dir-parts (length canonical-parts)) + (length-repo-parts (length (f-split repo-dir))) + (projectp (and (string-prefix-p repo-dir canonical) + (>= length-dir-parts (+ length-repo-parts 2))))) + (list + 'vc + (ignore-errors (vc-responsible-backend canonical)) + (apply #'f-join (take (+ length-repo-parts 2) canonical-parts))))) + (use-package project :ensure nil - :custom - (project-remember-projects-under - (or (getenv "REPODIR") - (expand-file-name "code/repo" (getenv "HOME"))) - :recursive)) + :config + (add-hook 'project-find-functions #'x-project-root-override) + (mapc #'project-remember-projects-under + (directory-files (getenv "REPODIR") :full "\\`[^.]"))) ;;; C-Style (setq-default |