Function for killing process. Simplify code. Limit search for current
directory with prefix.
--- a/ag.el Wed Feb 22 23:58:21 2017 +0200
+++ b/ag.el Thu Feb 23 00:40:50 2017 +0200
@@ -1,3 +1,7 @@
+;;; ag.el --- Ag frontend
+
+;;; Commentary:
+;;
(defun my/ag-goto ()
(interactive)
@@ -17,9 +21,17 @@
(find-file-other-window (match-string 0))
(goto-line lineno)))))
+(defun my/ag-kill-process ()
+ (interactive)
+ (let ( (proc (get-buffer-process (current-buffer))) )
+ (if proc
+ (interrupt-process proc)
+ (error "The %s process is not running" (downcase mode-name)))))
+
(defvar my/ag-mode-map (make-sparse-keymap))
(define-key my/ag-mode-map (kbd "RET") 'my/ag-goto)
+(define-key my/ag-mode-map (kbd "C-c C-k") 'my/ag-kill-process)
(defface my/ag-lineno-face
'((t :inherit warning))
@@ -58,6 +70,22 @@
(defvar my/ag-regex-history nil)
+(defun my/ag-setup-buffer (dir)
+ (setq my/ag-buffer (get-buffer-create my/ag-buffer-name))
+ (with-current-buffer my/ag-buffer
+ (setq default-directory dir)
+ (erase-buffer)
+ (my/ag-mode))
+ (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)))
+
+;;;###autoload
(defun my/ag (regex)
(interactive
(let* ( (def (when my/ag-regex-history (car my/ag-regex-history)))
@@ -67,15 +95,9 @@
(list (read-string
(if part (format "Regex [%s]: " part) "Regex: ")
"" 'my/ag-regex-history def t))))
- (let ( proc (dir default-directory) )
- (setq my/ag-buffer (get-buffer-create my/ag-buffer-name))
- (with-current-buffer my/ag-buffer
- (setq default-directory dir)
- (erase-buffer)
- (my/ag-mode))
- (display-buffer my/ag-buffer)
- (setq proc (make-process
- :name "ag"
- :buffer my/ag-buffer
- :filter 'my/ag-filter
- :command (list "ag" "--group" "--nocolor" regex))) ))
+ (my/ag-setup-buffer (if current-prefix-arg default-directory (or (ignore-errors (vc-root-dir)) default-directory)))
+ (my/ag-run regex))
+
+(provide 'ag)
+
+;;; ag.el ends here