From b151178b2e1784c4385429be23c88fd908d77e53 Mon Sep 17 00:00:00 2001 From: Martin Polden Date: Thu, 8 Jul 2021 23:29:00 +0200 Subject: grep: Better detection of Git root directory --- lisp/init-grep.el | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'lisp/init-grep.el') diff --git a/lisp/init-grep.el b/lisp/init-grep.el index 4b0d0ca..6f23f47 100644 --- a/lisp/init-grep.el +++ b/lisp/init-grep.el @@ -5,12 +5,24 @@ (defvar mpolden/rg-template "rg -nH --no-heading -e -- " "The grep template to use when rg (ripgrep) is installed.") +(defun mpolden/git-root-dir (filename) + "Return the root directory to the Git repository of FILENAME. +Return nil if FILENAME is not in a Git repository." + (let* ((dir (if (directory-name-p filename) + filename + (file-name-directory filename))) + (git-dir (expand-file-name ".git" dir))) + (cond ((file-directory-p git-dir) dir) + ((not (equal dir "/")) (mpolden/git-root-dir + (directory-file-name dir)))))) + (defun mpolden/grep () - "Run grep interactively in `default-directory' or current VC tree." + "Run grep interactively in `default-directory' or current Git repository." (interactive) - (let ((vc-root-dir (vc-root-dir))) - (if vc-root-dir - (vc-git-grep (grep-read-regexp) "" vc-root-dir) + (let ((git-root-dir (mpolden/git-root-dir (or buffer-file-name + default-directory)))) + (if git-root-dir + (vc-git-grep (grep-read-regexp) "" git-root-dir) (lgrep (grep-read-regexp) "" default-directory)))) (defun mpolden/grep-visit-buffer-other-window (&optional result noselect) -- cgit v1.2.3