diff options
author | Alan Pearce | 2014-06-25 19:25:25 +0100 |
---|---|---|
committer | Alan Pearce | 2014-06-25 19:27:55 +0100 |
commit | d91dfe6c7766b4b82e886183fc8e50ed9e4cb0bf (patch) | |
tree | c5d4863f8f6643d7fd41dd7fb7621c15c74b73b0 | |
parent | 574dcaaf978438e5823bd5422b79d351b4ba73be (diff) | |
download | nixfiles-d91dfe6c7766b4b82e886183fc8e50ed9e4cb0bf.tar.lz nixfiles-d91dfe6c7766b4b82e886183fc8e50ed9e4cb0bf.tar.zst nixfiles-d91dfe6c7766b4b82e886183fc8e50ed9e4cb0bf.zip |
Emacs: Add commands to open a work or home project
Given that the projects are folders under (work|home)-project-directory which match projectile's own predicates, switch to them with projectile, even if they're not 'known' to it.
-rw-r--r-- | tag-emacs/emacs.d/init.el | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/tag-emacs/emacs.d/init.el b/tag-emacs/emacs.d/init.el index 3e241471..00d595f2 100644 --- a/tag-emacs/emacs.d/init.el +++ b/tag-emacs/emacs.d/init.el @@ -32,6 +32,9 @@ (file-name-directory (file-truename init-file)))) "Where the emacs init file really is, passing through symlinks.") +(defvar work-project-directory "~/work") +(defvar home-project-directory "~/projects") + ;;;; Package Management (add-to-list 'load-path (expand-file-name "elisp/" user-emacs-directory)) @@ -657,6 +660,34 @@ :init (projectile-global-mode) :diminish projectile-mode :config (progn + (defun ap/subfolder-projects (dir) + (--map (file-relative-name it dir) + (-filter (lambda (subdir) + (--reduce-from (or acc (funcall it subdir)) nil + projectile-project-root-files-functions)) + (-filter #'file-directory-p (directory-files dir t "\\<"))))) + + (defun ap/-add-known-subfolder-projects (dir) + (-map #'projectile-add-known-project (ap/subfolder-projects dir))) + + (defun ap/add-known-subfolder-projects () + (interactive) + (ap/-add-known-subfolder-projects (ido-read-directory-name "Add projects under: "))) + + (defun ap/open-subfolder-project (from-dir &optional arg) + (let ((project-dir (projectile-completing-read "Open project: " + (ap/subfolder-projects from-dir)))) + (projectile-switch-project-by-name (expand-file-name project-dir from-dir) arg))) + + (defun ap/open-work-project (&optional arg) + (interactive "P") + (ap/open-subfolder-project work-project-directory arg)) + + (defun ap/open-home-project (&optional arg) + (interactive "P") + (ap/open-subfolder-project home-project-directory arg)) + + (setq projectile-switch-project-action #'projectile-dired projectile-remember-window-configs t))) |