(vc-root-dir) selectively work depending on buffer mode. I need root based on
default-directory...
Fix: switch to necessary directory before running process.
--- 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)