summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--emacs.d/core/core-bindings.el4
-rw-r--r--emacs.d/core/core-defun.el52
2 files changed, 46 insertions, 10 deletions
diff --git a/emacs.d/core/core-bindings.el b/emacs.d/core/core-bindings.el
index a9d1b4d..53bc847 100644
--- a/emacs.d/core/core-bindings.el
+++ b/emacs.d/core/core-bindings.el
@@ -8,6 +8,8 @@
(global-set-key (kbd "s-N") 'fcuny/switch-to-scratch)
-(global-set-key (kbd "C-c t") 'fcuny/jump-to-build-file)
+(global-set-key (kbd "C-c b") 'fcuny/find-build-file)
+
+(global-set-key (kbd "C-c r") 'fcuny/build-run-target)
(provide 'core-bindings)
diff --git a/emacs.d/core/core-defun.el b/emacs.d/core/core-defun.el
index be7899f..6544815 100644
--- a/emacs.d/core/core-defun.el
+++ b/emacs.d/core/core-defun.el
@@ -39,33 +39,67 @@
(ansi-term (getenv "SHELL")))
(switch-to-buffer-other-window "*ansi-term*")))
-;; jump to the BUILD file
+;; this functions are to make it easy to work with `pants'
+(defvar fcuny/build-command "cd ~/src/source && ./pants --no-colors"
+ "Command to use to execute the target")
+
(defvar fcuny/build-file "BUILD"
"Name of the file containing our build targets")
-(defun fcuny/find-root-directory-for-build-file (file)
- "Find the root."
+(defun fcuny/--find-directory-containing-build-file (file)
+ "Find the directory containing the build file."
(let ((root nil)
try)
(while (not (or root
(null file)
(string-match locate-dominating-stop-dir-regexp file)))
(setq try (if (stringp fcuny/build-file)
- (file-exists-p (expand-file-name fcuny/build-file file))
- (message "found file exists -> %s" file)))
+ (file-exists-p (expand-file-name fcuny/build-file file))))
(cond (try (setq root file))
((equal file (setq file (file-name-directory
(directory-file-name file))))
(setq file nil))))
(and root (expand-file-name (file-name-as-directory root)))))
-(defun fcuny/jump-to-build-file ()
- "Open the BUILD file in a buffer if it exists."
+(defun fcuny/--build-action (target)
+ (compile (format "%s binary %s" fcuny/build-command target)))
+
+(defun fcuny/--build-target-list (file)
+ "Generate a list of existing targets"
+ (let ((build-command (format "%s list %s:" fcuny/build-command file))
+ targets target)
+ (with-temp-buffer
+ (insert
+ (shell-command-to-string build-command))
+ (goto-char (point-min))
+ (while (re-search-forward "^\\(.+\\)$" nil t)
+ (setq target (match-string 1))
+ (unless (or (save-excursion
+ (goto-char (match-beginning 0))
+ (forward-line -1)
+ (looking-at "^# Not a target:"))
+ (string-match "^\\." target))
+ (push target targets))))
+ (helm
+ (helm :sources
+ `((name . "Targets")
+ (candidates . ,targets)
+ (action . fcuny/build-action))))))
+
+(defun fcuny/find-build-file ()
+ "Find the build file and if it exists, open it."
(interactive)
- (let ((build-file (fcuny/find-root-directory-for-build-file (file-name-directory (buffer-file-name)))))
- (message "found a file %s" build-file)
+ (let ((build-file (fcuny/find-directory-containing-build-file (file-name-directory (buffer-file-name)))))
(if build-file
(find-file (concat build-file fcuny/build-file))
(error "Could not find %s" fcuny/build-file))))
+(defun fcuny/build-run-target ()
+ "List the targets for a BUILD file."
+ (interactive)
+ (let ((build-file (fcuny/find-root-directory-for-build-file (file-name-directory (buffer-file-name)))))
+ (if build-file
+ (fcuny/build-target-list build-file)
+ (error "Could not find %s" fcuny/build-file))))
+
(provide 'core-defun)