Last active
June 1, 2023 21:21
-
-
Save jglick/bd7ba2ffb2b0ed155f0d38bf4c1ba5e1 to your computer and use it in GitHub Desktop.
Emacs command to look for a regexp among versioned files in a Git repo
This file contains hidden or 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 --recurse-submodules -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