diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-09-23 08:57:39 +0200 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-09-23 08:57:39 +0200 |
commit | f1f25d7089afacc5de1c3b11adae9a39f1e2e4ff (patch) | |
tree | 505b9152d63cd1b47e370d7688c5842d1cfa0396 /.config | |
parent | ba8ca72373242a9b2741b8b359999ae4f3347701 (diff) |
emacs: Load all projects in $REPODIR
Diffstat (limited to '.config')
-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 |