+project/rgrep for nice recursive grep in a project

This commit is contained in:
2026-01-28 07:51:53 +00:00
parent 504bdc17f3
commit ef825d4544

View File

@@ -1015,40 +1015,48 @@ it takes a bit less time.
Here I: Here I:
- Bind ~project-prefix-map~ to "<leader>p" - Bind ~project-prefix-map~ to "<leader>p"
- Bind a tags generation command to "<leader>pr" which mimics - Define ~+project/generate-tags~ to generate ctags quickly (like
projectile's one =projectile=), and bind it.
- Define ~+project/rgrep~, which does an [[*Grep][rgrep]] from the
project root.
#+begin_src emacs-lisp #+begin_src emacs-lisp
(use-package project (use-package project
:straight t :straight t
:defer t :defer t
:general :general
(:keymaps 'project-prefix-map
"r" #'+project/generate-tags)
(leader (leader
"p" project-prefix-map) "p" project-prefix-map)
(:keymaps 'project-prefix-map
"r" #'+project/generate-tags
"g" #'+project/rgrep)
:config :config
(setq project-vc-extra-root-markers '(".project")) (setq project-vc-extra-root-markers '(".project"))
(defun +project/command (folder)
(format "ctags -Re -f %sTAGS %s*"
folder folder))
(defun +project/root () (defun +project/root ()
(if (project-current) (if (project-current)
(project-root (project-current)) (project-root (project-current))
default-directory)) default-directory))
(defun +project/rgrep (regexp &optional files)
(interactive
(let* ((regexp (grep-read-regexp))
(files (grep-read-files regexp)))
(list regexp files)))
(rgrep regexp files (+project/root)))
(defun +project/generate-tags () (defun +project/generate-tags ()
(interactive) (interactive)
(set-process-sentinel (let ((folder (+project/root)))
(start-process-shell-command (set-process-sentinel
"PROJECT-GENERATE-TAGS" (start-process-shell-command
"*tags*" "PROJECT-GENERATE-TAGS"
(+project/command (+project/root))) "*tags*"
(lambda (p event) (format "ctags -Re -f %sTAGS %s*" folder folder))
(when (string= event "finished\n") (lambda (p event)
(message "Finished generating tags!") (when (string= event "finished\n")
(visit-tags-table (format "%sTAGS" (+project/root)))))))) (message "Finished generating tags!")
(visit-tags-table (format "%sTAGS" folder))))))))
#+end_src #+end_src
* Aesthetics * Aesthetics
General look and feel of Emacs, perhaps the most important of all the General look and feel of Emacs, perhaps the most important of all the