+project/rgrep for nice recursive grep in a project
This commit is contained in:
@@ -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)
|
||||||
|
(let ((folder (+project/root)))
|
||||||
(set-process-sentinel
|
(set-process-sentinel
|
||||||
(start-process-shell-command
|
(start-process-shell-command
|
||||||
"PROJECT-GENERATE-TAGS"
|
"PROJECT-GENERATE-TAGS"
|
||||||
"*tags*"
|
"*tags*"
|
||||||
(+project/command (+project/root)))
|
(format "ctags -Re -f %sTAGS %s*" folder folder))
|
||||||
(lambda (p event)
|
(lambda (p event)
|
||||||
(when (string= event "finished\n")
|
(when (string= event "finished\n")
|
||||||
(message "Finished generating tags!")
|
(message "Finished generating tags!")
|
||||||
(visit-tags-table (format "%sTAGS" (+project/root))))))))
|
(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
|
||||||
|
|||||||
Reference in New Issue
Block a user