ag.el
changeset 1562 df57aca81e75
parent 1561 0876ef9be273
child 1563 bc9da63949f1
equal deleted inserted replaced
1561:0876ef9be273 1562:df57aca81e75
    78     (setq default-directory dir)
    78     (setq default-directory dir)
    79     (erase-buffer)
    79     (erase-buffer)
    80     (my-ag-mode))
    80     (my-ag-mode))
    81   (display-buffer my-ag/buffer))
    81   (display-buffer my-ag/buffer))
    82 
    82 
    83 (defun my-ag/run (regex)
    83 (defun my-ag/run (regex &optional args)
    84   (let ( (default-directory (buffer-local-value 'default-directory my-ag/buffer)) )
    84   (let ((default-directory (buffer-local-value 'default-directory my-ag/buffer))
       
    85         (cmd (list "ag" "--group" "--nocolor")))
       
    86     (when args
       
    87       (nconc cmd (split-string args)))
       
    88     (nconc cmd (list "--" regex))
    85     (make-process
    89     (make-process
    86      :name "ag"
    90      :name "ag"
    87      :buffer my-ag/buffer
    91      :buffer my-ag/buffer
    88      :filter 'my-ag/filter
    92      :filter 'my-ag/filter
    89      :command (list "ag" "--group" "--nocolor" regex))))
    93      :command cmd)))
    90 
    94 
    91 (defun my-ag/project-root ()
    95 (defun my-ag/project-root ()
    92   (condition-case err
    96   (condition-case err
    93       (let ( backend )
    97       (let ( backend )
    94         (setq backend (vc-responsible-backend default-directory))
    98         (setq backend (vc-responsible-backend default-directory))
   104                             (concat (substring def 0 20) "...")))) )
   108                             (concat (substring def 0 20) "...")))) )
   105     (read-string
   109     (read-string
   106      (if part (format "Regex [%s]: " part) "Regex: ")
   110      (if part (format "Regex [%s]: " part) "Regex: ")
   107      ""  'my-ag/regex-history  def  t)))
   111      ""  'my-ag/regex-history  def  t)))
   108 
   112 
       
   113 (defvar my-ag/extra-history nil)
       
   114 
       
   115 (defun my-ag/read-extra ()
       
   116   (let* ( (def (when my-ag/extra-history (car my-ag/extra-history)))
       
   117           (part (when def (if (< (length def) 20)
       
   118                               def
       
   119                             (concat (substring def 0 20) "...")))) )
       
   120     (read-string
       
   121      (if part (format "Extra args [%s]: " part) "Extra args: ")
       
   122      ""  'my-ag/extra-history  def  t)))
       
   123 
   109 ;;;###autoload
   124 ;;;###autoload
   110 (defun my-ag (regex)
   125 (defun my-ag (regex &optional args)
   111   "Search in 'ag' recursively from VCS root directory and fall to
   126   "Search in 'ag' recursively from VCS root directory and fall to
   112 current directory if VCS root is not defined."
   127 current directory if VCS root is not defined."
   113   (interactive (list (my-ag/read-regex)))
   128   (interactive (if (equal current-prefix-arg '(16))
       
   129                    (list (my-ag/read-regex) (my-ag/read-extra))
       
   130                  (list (my-ag/read-regex))))
   114   (my-ag/setup-buffer (if current-prefix-arg default-directory (my-ag/project-root)))
   131   (my-ag/setup-buffer (if current-prefix-arg default-directory (my-ag/project-root)))
   115   (my-ag/run regex))
   132   (my-ag/run regex args))
   116 
   133 
   117 ;;;###autoload
   134 ;;;###autoload
   118 (defun my-ag-default-directory (regex)
   135 (defun my-ag-default-directory (regex)
   119   "Search in 'ag' recursively from current directory."
   136   "Search in 'ag' recursively from current directory."
   120   (interactive (list (my-ag/read-regex)))
   137   (interactive (list (my-ag/read-regex)))