summaryrefslogtreecommitdiffstats
path: root/lisp/init-grep.el
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2021-06-22 17:26:30 +0200
committerMartin Polden <mpolden@mpolden.no>2021-06-22 17:40:00 +0200
commitd8e9953bf2266c48e01d99d95dfa6e7b6f32fcec (patch)
tree1754dc92b36f28c97919961aba643110805e82a7 /lisp/init-grep.el
parentca2a625e378f2946da39917280bb05d6f5f8224f (diff)
grep: Use ripgrep
Diffstat (limited to 'lisp/init-grep.el')
-rw-r--r--lisp/init-grep.el38
1 files changed, 31 insertions, 7 deletions
diff --git a/lisp/init-grep.el b/lisp/init-grep.el
index 87444f7..621597d 100644
--- a/lisp/init-grep.el
+++ b/lisp/init-grep.el
@@ -2,6 +2,17 @@
;;; Commentary:
;;; Code:
+(defvar mpolden/rg-template "rg -nH --no-heading <C> -e <R> -- "
+ "The grep template use when rg (ripgrep) is installed.")
+
+(defun mpolden/grep ()
+ "Run grep interactively in `default-directory' or current VC tree."
+ (interactive)
+ (let ((vc-root-dir (vc-root-dir)))
+ (if vc-root-dir
+ (vc-git-grep (grep-read-regexp) "" vc-root-dir)
+ (lgrep (grep-read-regexp) "" default-directory))))
+
(defun mpolden/grep-visit-buffer-other-window (&optional result noselect)
"Visit grep RESULT in another window.
If NOSELECT is non-nil, do not select the window."
@@ -18,13 +29,26 @@ If NOSELECT is non-nil, do not select the window."
(use-package grep
:commands grep-read-regexp
- :bind (:map grep-mode-map
- ;; make C-o and o behave as in dired
- ("o" . mpolden/grep-visit-buffer-other-window)
- ("C-o" . mpolden/grep-visit-buffer-other-window-noselect)
- ;; n and p changes line as in ag-mode
- ("n" . compilation-next-error)
- ("p" . compilation-previous-error)))
+ :config
+ (when (executable-find "rg")
+ ;; never use null device with ripgrep
+ (setq grep-use-null-device nil)
+ (grep-apply-setting 'grep-template mpolden/rg-template))
+ :bind (;; C-c g runs git grep in current vc tree
+ ("C-c g" . mpolden/grep)
+ :map grep-mode-map
+ ;; make C-o and o behave as in dired
+ ("o" . mpolden/grep-visit-buffer-other-window)
+ ("C-o" . mpolden/grep-visit-buffer-other-window-noselect)
+ ;; n and p changes line as in ag-mode
+ ("n" . compilation-next-error)
+ ("p" . compilation-previous-error)))
+
+(use-package vc-git
+ :commands vc-git-grep
+ :init
+ (when (executable-find "rg")
+ (setq vc-git-grep-template mpolden/rg-template)))
(provide 'init-grep)