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))) |