Skip to content

Instantly share code, notes, and snippets.

@jglick
Created July 24, 2012 20:46
Show Gist options
  • Save jglick/3172561 to your computer and use it in GitHub Desktop.
Save jglick/3172561 to your computer and use it in GitHub Desktop.
M-x git-grep-dired: Emacs command to search for text patterns in a Git repo à la find-grep-dired
(defun git-grep-dired (repo wildcards regexp)
"Find Git-controlled files in DIR with a name like WILDCARDS containing a regexp REGEXP and start Dired on output."
(interactive "DGit-grep (directory): \nsGit-grep (filename wildcard(s), e.g. *.xml): \nsGit-grep (grep regexp): ")
(setq repo (file-name-as-directory (expand-file-name repo)))
(switch-to-buffer (concat "*Git Grep " repo "*"))
(fundamental-mode)
(setq buffer-read-only nil)
(erase-buffer)
(setq default-directory repo)
(let ((cmd (format "git --git-dir %s/.git ls-files -z%s | xargs -0 grep -lZ -- %s | xargs -0 ls -l"
repo
(apply 'concat (mapcar (lambda (s) (concat " " (shell-quote-argument s))) (split-string wildcards)))
(shell-quote-argument regexp))))
(insert " " cmd "\n " repo ":\n")
(call-process-shell-command (concat cmd " | sed -e 's/^/ /g'") nil t))
(dired-mode)
(dired-build-subdir-alist)
(goto-line 2))
@surajacharya
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment