summary refs log tree commit diff
diff options
context:
space:
mode:
authorFranck Cuny <franckcuny@gmail.com>2016-12-15 11:30:23 -0800
committerFranck Cuny <franckcuny@gmail.com>2016-12-15 11:30:23 -0800
commit8997e69e63d19d833e7ec748f2aec5fdc5d7cf80 (patch)
treeb736218bec088344e6431dd86091a05ede84baf7
parentI think this bury the compilation buffer correctly. (diff)
downloadpants.el-8997e69e63d19d833e7ec748f2aec5fdc5d7cf80.tar.gz
Try to do the right thing for the default-directory.
When getting the list of targets, or running an action, the value for
the default directory should not be changed. Until now, if you were to
open a file, then get the list of targets, then open a new file,
you'll be prompted for a new file with a starting directory set by the
value of `pants--get-source-tree`.

We now set a value for `default-directory` as a local variable when
running an action.
-rw-r--r--pants.el31
1 files changed, 19 insertions, 12 deletions
diff --git a/pants.el b/pants.el
index 9fe23a9..0cb2fb2 100644
--- a/pants.el
+++ b/pants.el
@@ -85,10 +85,10 @@
 
 (defun pants--python-repl-action (target)
   "Starts a Python REPL."
-  (let ((pants-repl-command (format "%s repl %s" (pants--build-command) target)))
-    (set (make-local-variable 'default-directory) pants-source-tree-root)
-    (set (make-local-variable 'python-shell-exec-path) '(pants-source-tree-root))
-    (set (make-local-variable 'python-shell-interpreter) pants-source-tree-root)
+  (let ((pants-repl-command (format "%s repl %s" (pants--build-command) target))
+        (default-directory (pants--get-source-tree)))
+    (set (make-local-variable 'python-shell-exec-path) '(pants--get-source-tree))
+    (set (make-local-variable 'python-shell-interpreter) (pants--get-source-tree))
     (set (make-local-variable 'python-shell-interpreter-args) pants-repl-command)
     (set (make-local-variable 'python-shell-prompt-detect-failure-warning) nil)
     (run-python pants-repl-command t)
@@ -130,7 +130,8 @@
 
 (defun pants--complete-read (prompt choices action)
   "Generates a list of existing targets"
-  (let (res)
+  (let ((default-directory (pants--get-source-tree))
+        res)
     (setq res
           (cond
            ((eq pants-completion-system 'ivy)
@@ -164,18 +165,24 @@
 
 (defun pants--get-targets ()
   "Get the targets for the current file."
-  (let ((build-file (pants--get-build-file-for-current-buffer)))
-    (let ((build-command (format "%s list %s:" (pants--build-command) build-file))
-          targets target)
-      (set (make-local-variable 'default-directory) (pants--get-source-tree))
-      (with-temp-buffer
+  (let ((build-command (format "%s list %s:"
+                               (pants--build-command)
+                               (pants--get-build-file-for-current-buffer)))
+        (default-directory (pants--get-source-tree))
+        targets)
+    (with-temp-buffer
+      (let (target)
         (insert
          (shell-command-to-string build-command))
         (goto-char (point-min))
         (while (re-search-forward "^\\(.+\\)$" nil t)
           (setq target (match-string 1))
-          (push target targets)))
-      targets)))
+          (push target targets))))
+    (push (format "%s::" (string-remove-prefix
+                          (pants--get-source-tree)
+                          (pants--get-build-file-for-current-buffer)))
+          targets)
+    targets))
 
 (define-compilation-mode pants-mode "pants"
   (set (make-local-variable 'compilation-process-setup-function)