Function for killing process. Simplify code. Limit search for current
authorOleksandr Gavenko <gavenkoa@gmail.com>
Thu, 23 Feb 2017 00:40:50 +0200
changeset 1493 d242edfd1321
parent 1492 8ebcfb7fc718
child 1494 874f705f7be4
Function for killing process. Simplify code. Limit search for current directory with prefix.
ag.el
--- 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