Commit de238b39 authored by Christopher Thorne's avatar Christopher Thorne Committed by Juri Linkov

Fix rgrep in dired using directory for search file pattern

* lisp/progmodes/grep.el (grep-read-files): Allow major modes to
define file name to use for default search pattern.
Add non-directory file at point as default search pattern candidate.

* lisp/dired.el (dired-grep-read-files): Use non-directory file at
point for grep file name pattern.  (Bug#34621)

Copyright-paperwork-exempt: yes
parent 382a508e
Pipeline #1250 failed with stage
in 55 minutes and 8 seconds
......@@ -774,6 +774,15 @@ as an argument to `dired-goto-file'."
(file-name-as-directory (abbreviate-file-name filename))
(abbreviate-file-name filename)))))
(defun dired-grep-read-files ()
"Use file at point as the file for grep's default file-name pattern suggestion.
If a directory or nothing is found at point, return nil."
(let ((file-name (dired-file-name-at-point)))
(if (and file-name
(not (file-directory-p file-name)))
(put 'dired-mode 'grep-read-files 'dired-grep-read-files)
;;;###autoload (define-key ctl-x-map "d" 'dired)
(defun dired (dirname &optional switches)
......@@ -959,8 +959,16 @@ substitution string. Note dynamic scoping of variables.")
The pattern can include shell wildcards. As whitespace triggers
completion when entering a pattern, including it requires
quoting, e.g. `\\[quoted-insert]<space>'."
(let* ((bn (or (buffer-file-name)
(replace-regexp-in-string "<[0-9]+>\\'" "" (buffer-name))))
(let* ((grep-read-files-function (get major-mode 'grep-read-files))
(run-hook-with-args-until-success 'file-name-at-point-functions))
(bn (if grep-read-files-function
(funcall grep-read-files-function)
(or (if (and (stringp file-name-at-point)
(not (file-directory-p file-name-at-point)))
(replace-regexp-in-string "<[0-9]+>\\'" "" (buffer-name)))))
(fn (and bn
(stringp bn)
(file-name-nondirectory bn)))
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment