I've currently got a custom function that I use to grep through files in helm.
;; Search for the thing that the cursor is on or that's already hilighted. If there's nothing,
;; switch back to searching for text interactively.
(defun search-for-region-or-word()
"Uses helm to search for the currently marked region, or the word under the cursor."
(interactive)
(require 'helm-files)
(let ((search-text nil))
;; If the region isn't active, activated it by selecting the word under the cursor.
(if (not (region-active-p))
(setq search-text (thing-at-point 'word 1))
(setq search-text (buffer-substring-no-properties (region-beginning) (region-end)))
)
(deactivate-mark)
(if (not (string= search-text ""))
(helm-do-grep-1 (list "e:/path/to-files/") '(4) nil '("*.cpp" "*.h" "*.foop" "*.moo") nil search-text)
(project-search)
)
)
)
I'd like to keep using helm-do-grep-1, but I'd like to use sift or ag instead of grep. helm-do-ag doesn't seem to have support for feeding it arguments like the search text non-interactively.
I've tried swapping the other search methods in, but all I ever end up with is a blank search that never terminates on its own, so I suspect that I'm giving helm-grep output in a way that it can't parse properly. (Alternately, I'd take advice on how to make helm-do-ag do what I want. It's not a very well documented extension, unfortunately, and I don't really want to pick apart the elisp myself. :P)
Edit: Here's the grep command:
grep -a -d recurse %e -n%cH -e %p %f
Here's what I'm trying for the sift command:
sift -ars --line-numbers --nogroup --stats -e %p -f %f
I've also tried:
sift -ars --line-numbers --nogroup --stats %s %s (this works in helm-do-ag)