Created
July 24, 2012 20:46
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
See https://gist.github.com/4127526