summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.config/emacs/init.el29
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