mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-05 11:45:45 +00:00
Speed up dired-do-find-regexp
* lisp/dired-aux.el (dired-do-find-regexp): Speed up (bug#36857). Previously, 'find' was called for every marked file (for plain files and directories both). Now 'find' is only called for directories.
This commit is contained in:
parent
7edb1f0773
commit
ccd7cd2c51
@ -2957,6 +2957,8 @@ with the command \\[tags-loop-continue]."
|
||||
|
||||
(declare-function xref--show-xrefs "xref")
|
||||
(declare-function xref-query-replace-in-results "xref")
|
||||
(declare-function project--files-in-directory "project")
|
||||
(declare-function project--find-regexp-in-files "project")
|
||||
|
||||
;;;###autoload
|
||||
(defun dired-do-find-regexp (regexp)
|
||||
@ -2975,19 +2977,24 @@ REGEXP should use constructs supported by your local `grep' command."
|
||||
(require 'xref)
|
||||
(defvar grep-find-ignored-files)
|
||||
(declare-function rgrep-find-ignored-directories "grep" (dir))
|
||||
(let* ((files (dired-get-marked-files nil nil nil nil t))
|
||||
(let* ((marks (dired-get-marked-files nil nil nil nil t))
|
||||
(ignores (nconc (mapcar
|
||||
#'file-name-as-directory
|
||||
(rgrep-find-ignored-directories default-directory))
|
||||
grep-find-ignored-files))
|
||||
(fetcher
|
||||
(lambda ()
|
||||
(let ((xrefs (mapcan
|
||||
(lambda (file)
|
||||
(xref-collect-matches regexp "*" file
|
||||
(and (file-directory-p file)
|
||||
ignores)))
|
||||
files)))
|
||||
(let (files xrefs)
|
||||
(mapc
|
||||
(lambda (mark)
|
||||
(if (file-directory-p mark)
|
||||
(setq files (nconc
|
||||
(project--files-in-directory mark ignores "*")
|
||||
files))
|
||||
(push mark files)))
|
||||
(nreverse marks))
|
||||
(setq xrefs
|
||||
(project--find-regexp-in-files regexp files))
|
||||
(unless xrefs
|
||||
(user-error "No matches for: %s" regexp))
|
||||
xrefs))))
|
||||
|
Loading…
Reference in New Issue
Block a user