(vc-root-dir) selectively work depending on buffer mode. I need root based on
authorOleksandr Gavenko <gavenkoa@gmail.com>
Thu, 23 Feb 2017 08:19:21 +0200
changeset 1496 4b336f352950
parent 1495 d76487c37e61
child 1497 9a881de3da24
(vc-root-dir) selectively work depending on buffer mode. I need root based on default-directory... Fix: switch to necessary directory before running process.
ag.el
--- a/ag.el	Thu Feb 23 07:35:48 2017 +0200
+++ b/ag.el	Thu Feb 23 08:19:21 2017 +0200
@@ -79,11 +79,23 @@
   (display-buffer my/ag-buffer))
 
 (defun my/ag-run (regex)
-  (make-process
-   :name "ag"
-   :buffer my/ag-buffer
-   :filter 'my/ag-filter
-   :command (list "ag" "--group" "--nocolor" regex)))
+  (let ( (default-directory (buffer-local-value 'default-directory my/ag-buffer)) )
+    (make-process
+     :name "ag"
+     :buffer my/ag-buffer
+     :filter 'my/ag-filter
+     :command (list "ag" "--group" "--nocolor" regex))))
+
+(defun my/ag-project-root ()
+  (let ( (backend (vc-responsible-backend default-directory)) )
+    (if backend
+        (condition-case err
+            (vc-call-backend backend 'root default-directory)
+          (vc-not-supported
+           (unless (eq (cadr err) 'root)
+             (signal (car err) (cdr err)))
+           nil))
+      default-directory)))
 
 ;;;###autoload
 (defun my/ag (regex)
@@ -95,7 +107,7 @@
      (list (read-string
             (if part (format "Regex [%s]: " part) "Regex: ")
             ""  'my/ag-regex-history  def  t))))
-  (my/ag-setup-buffer (if current-prefix-arg default-directory (or (ignore-errors (vc-root-dir)) default-directory)))
+  (my/ag-setup-buffer (if current-prefix-arg default-directory (my/ag-project-root)))
   (my/ag-run regex))
 
 (provide 'ag)