summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2015-05-12 21:25:20 +0900
committerSean Whitton <spwhitton@spwhitton.name>2015-05-12 21:25:20 +0900
commit9e9cf4a5ffe6df7f18865e4d725c90a2f5c2f85d (patch)
tree7a2912b67ff3df46f17bab850209124bd895ac1e
parent16c5ec74bfacc5bfb891c837390e0c65e3e1d898 (diff)
downloaddotfiles-9e9cf4a5ffe6df7f18865e4d725c90a2f5c2f85d.tar.gz
open perspectives for new programming projects
Things in ~/src that projectile doesn't know about yet.
-rw-r--r--.emacs.d/init.el30
1 files changed, 29 insertions, 1 deletions
diff --git a/.emacs.d/init.el b/.emacs.d/init.el
index 824d0af3..aecacb52 100644
--- a/.emacs.d/init.el
+++ b/.emacs.d/init.el
@@ -155,7 +155,7 @@
;;; libraries of useful lisp functions
-(use-package f :ensure) (use-package s :ensure)
+(use-package f :ensure) (use-package s :ensure) (use-package dash :ensure)
;;; instead of vim text objects
@@ -1674,6 +1674,33 @@ From <http://stackoverflow.com/a/14769115>."
(replace-match "From: Sean Whitton <spwhitton@email.arizona.edu>"))
(widen)))
+;;; Find and open projects in ~/src/ that aren't yet known to
+;;; projectile. Inspired by
+;;; <https://alanpearce.uk/post/opening-projects-with-projectile>.
+
+(defvar programming-projects-dir (expand-file-name "~/src"))
+
+(defun spw/get-programming-projects (dir)
+ "Find all projectile projects in DIR that are presently unknown to projectile."
+ (-filter (lambda (d)
+ (and (file-directory-p d)
+ (not (-contains?
+ projectile-known-projects
+ (f-slash (replace-regexp-in-string (expand-file-name "~") "~" d))))
+ (-any? (lambda (f) (funcall f d))
+ projectile-project-root-files-functions)))
+ (directory-files dir t "^[^.]")))
+
+(defun spw/open-programming-project (arg)
+ "Open a programming project that is presently unknown to projectile.
+
+Passes ARG to `projectile-switch-project-by-name'."
+ (interactive "P")
+ (let ((project-dir
+ (projectile-completing-read "open new project: "
+ (spw/get-programming-projects programming-projects-dir))))
+ (projectile-switch-project-by-name project-dir arg)))
+
;;;; ---- personal settings ----
@@ -1752,6 +1779,7 @@ BINDEE may be a command or another keymap, but whatever it is, it should not be
("q u" . persp-basewc-save)
("q q" . persp-basewc-restore)
("q C" . spw/persp-clone)
+ ("q o" . spw/open-programming-project)
;; Org-mode map
("o c" . org-capture)