From 706b7aa38b1b225fb475c30b4cc316d4a0c65a5b Mon Sep 17 00:00:00 2001 From: Michael Wolf Date: Fri, 11 Aug 2023 08:34:46 -0600 Subject: [PATCH 1/6] Add functions to get lists of files deadgrep--filenames-of-open-files returns the names of the files that back open buffers. deadgrep--filenames-of-open-files-in-project returns the names of open files in the current project. --- deadgrep.el | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/deadgrep.el b/deadgrep.el index 24a5861..fe36818 100644 --- a/deadgrep.el +++ b/deadgrep.el @@ -1687,6 +1687,23 @@ This is intended for use with `next-error-function', which see." (dolist (buffer (deadgrep--buffers)) (kill-buffer buffer))) +(defun deadgrep--filenames-of-open-files () + "Get all open buffers that have a backing file" + (-map (lambda (buf) + (buffer-file-name buf)) + (-filter (lambda (buffer) (buffer-file-name buffer)) + (buffer-list)))) + +(defun deadgrep--filenames-of-open-files-in-project () + "Get all buffers that have a backing file in the current project" + (let* ((candidates (deadgrep--filenames-of-open-files)) + (prefix (cdr (project-current)))) + (-filter (lambda (path) + (if (s-starts-with? prefix path) + path + nil)) + candidates))) + (provide 'deadgrep) ;;; deadgrep.el ends here From d9a9ac5850e7b97bb7570d3955f95aebb84a5a78 Mon Sep 17 00:00:00 2001 From: Michael Wolf Date: Fri, 11 Aug 2023 10:57:27 -0600 Subject: [PATCH 2/6] Add button to set search scope --- deadgrep.el | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/deadgrep.el b/deadgrep.el index fe36818..28da5d1 100644 --- a/deadgrep.el +++ b/deadgrep.el @@ -148,6 +148,8 @@ display." (put 'deadgrep--search-case 'permanent-local t) (defvar-local deadgrep--file-type 'all) (put 'deadgrep--file-type 'permanent-local t) +(defvar-local deadgrep--search-scope 'project) +(put 'deadgrep--search-scope 'permanent-local t) (defvar-local deadgrep--context nil "When set, also show context of results. @@ -440,10 +442,19 @@ with a text face property `deadgrep-match-face'." 'case nil 'help-echo "Change case sensitivity") +(define-button-type 'deadgrep-search-scope + 'action #'deadgrep--search-scope + 'case nil + 'help-echo "Change search scope") + (defun deadgrep--case (button) (setq deadgrep--search-case (button-get button 'case)) (deadgrep-restart)) +(defun deadgrep--scope (button) + (setq deadgrep--search-scope (button-get button 'scope)) +(deadgrep-restart)) + (define-button-type 'deadgrep-context 'action #'deadgrep--context 'context nil @@ -768,6 +779,25 @@ search settings." (deadgrep--button "ignore" 'deadgrep-case 'case 'ignore)) "\n" + + (propertize "Scope: " + 'face 'deadgrep-meta-face) + (if (eq deadgrep--search-scope 'project) + "project" + (deadgrep--button "project" 'deadgrep-scope + 'scope 'project)) + " " + (if (eq deadgrep--search-scope 'project-open-buffers) + "project open buffers" + (deadgrep--button "project open buffers" 'deadgrep-scope + 'scope 'project-open-buffers)) + " " + (if (eq deadgrep--search-scope 'open-buffers) + "open buffers" + (deadgrep--button "open buffers" 'deadgrep-scope + 'scope 'open-buffers)) + + "\n" (propertize "Context: " 'face 'deadgrep-meta-face) (if deadgrep--context From ad4e5d19fc1eed420c538ab3ad3c0f6e7b59ca4d Mon Sep 17 00:00:00 2001 From: Michael Wolf Date: Fri, 11 Aug 2023 12:45:33 -0600 Subject: [PATCH 3/6] Add function and key to cycle search scope --- deadgrep.el | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/deadgrep.el b/deadgrep.el index 28da5d1..30460e1 100644 --- a/deadgrep.el +++ b/deadgrep.el @@ -994,6 +994,16 @@ Returns a list ordered by the most recently accessed." ((eq deadgrep--search-case 'ignore) (setq deadgrep--search-case 'smart))) (deadgrep-restart)) +(defun deadgrep-cycle-search-scope () + (interactive) + (message "cycling") + (cond + ((eq deadgrep--search-scope 'project) (setq deadgrep--search-scope 'project-open-buffers)) + ((eq deadgrep--search-scope 'project-open-buffers) (setq deadgrep--search-scope 'open-buffers)) + ((eq deadgrep--search-scope 'open-buffers) (setq deadgrep--search-scope 'project))) + (deadgrep-restart)) + + (defvar deadgrep-mode-map (let ((map (make-sparse-keymap))) (define-key map (kbd "RET") #'deadgrep-visit-result) @@ -1004,6 +1014,7 @@ Returns a list ordered by the most recently accessed." (define-key map (kbd "T") #'deadgrep-cycle-search-type) (define-key map (kbd "C") #'deadgrep-cycle-search-case) (define-key map (kbd "F") #'deadgrep-cycle-files) + (define-key map (kbd "K") #'deadgrep-cycle-search-scope) (define-key map (kbd "D") #'deadgrep-directory) (define-key map (kbd "^") #'deadgrep-parent-directory) (define-key map (kbd "g") #'deadgrep-restart) From 7ceea1df88f34c1a745480fdfe4dc6150b212c6e Mon Sep 17 00:00:00 2001 From: Michael Wolf Date: Fri, 11 Aug 2023 11:23:48 -0600 Subject: [PATCH 4/6] Construct list of files to search --- deadgrep.el | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/deadgrep.el b/deadgrep.el index 30460e1..1bc9b99 100644 --- a/deadgrep.el +++ b/deadgrep.el @@ -725,10 +725,28 @@ to obtain ripgrep results." (push "--" args) (push search-term args) - (push "." args) + (setq args (append + (deadgrep--shell-quote-filenames (deadgrep--files-to-search)) + args)) + + (message (format "searching this: %s" (deadgrep--files-to-search))) + (nreverse args))) +(defun deadgrep--files-to-search () + (cond + ((eq deadgrep--search-scope 'project) '(".")) + ((eq deadgrep--search-scope 'project-open-buffers) + (deadgrep--filenames-of-open-files-in-project)) + ((eq deadgrep--search-scope 'open-buffers) + (deadgrep--filenames-of-open-files)) + (t + (error "search scope wasn't set correctly!" 'deadgrep--search-scope)))) + +(defun deadgrep--shell-quote-filenames (filenames) + (-map (lambda (filename) (shell-quote-argument filename)) filenames)) + (defun deadgrep--write-heading () "Write the deadgrep heading with buttons reflecting the current search settings." From 4f4cb43f7db96cb6469f5c3806100c42db611998 Mon Sep 17 00:00:00 2001 From: Michael Wolf Date: Fri, 11 Aug 2023 13:02:15 -0600 Subject: [PATCH 5/6] Document `K' key --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3a57279..cd17cc6 100644 --- a/README.md +++ b/README.md @@ -68,6 +68,7 @@ Starting/stopping a search: | F | Cycle through file modes: all, type, glob | | I | Switch to incremental search, re-running on every keystroke | | D | Change the search directory | +| K | Cycle through scopes: directory, directory-and-open, open | | ^ | Re-run the search in the parent directory | | g | Re-run the search | | TAB | Expand/collapse results for a file | From 28594e43d93edf30b76247881051582a28a7ae9d Mon Sep 17 00:00:00 2001 From: Michael Wolf Date: Fri, 11 Aug 2023 13:33:54 -0600 Subject: [PATCH 6/6] Fix button declarations --- deadgrep.el | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/deadgrep.el b/deadgrep.el index 1bc9b99..7fe5814 100644 --- a/deadgrep.el +++ b/deadgrep.el @@ -802,17 +802,17 @@ search settings." 'face 'deadgrep-meta-face) (if (eq deadgrep--search-scope 'project) "project" - (deadgrep--button "project" 'deadgrep-scope + (deadgrep--button "project" 'deadgrep-search-scope 'scope 'project)) " " (if (eq deadgrep--search-scope 'project-open-buffers) "project open buffers" - (deadgrep--button "project open buffers" 'deadgrep-scope + (deadgrep--button "project open buffers" 'deadgrep-search-scope 'scope 'project-open-buffers)) " " (if (eq deadgrep--search-scope 'open-buffers) "open buffers" - (deadgrep--button "open buffers" 'deadgrep-scope + (deadgrep--button "open buffers" 'deadgrep-search-scope 'scope 'open-buffers)) "\n"