Function: grep-read-files

grep-read-files is a byte-compiled function defined in grep.el.gz.

Signature

(grep-read-files REGEXP)

Documentation

Read a file-name pattern arg for interactive grep.

The pattern can include shell wildcards. As SPC can triggers completion when entering a pattern, including it requires quoting, e.g. C-q (quoted-insert)<space>.

REGEXP is used as a string in the prompt.

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/grep.el.gz
(defun grep-read-files (regexp)
  "Read a file-name pattern arg for interactive grep.
The pattern can include shell wildcards.  As SPC can triggers
completion when entering a pattern, including it requires
quoting, e.g. `\\[quoted-insert]<space>'.

REGEXP is used as a string in the prompt."
  (let* ((bn (funcall grep-read-files-function))
	 (fn (and bn
		  (stringp bn)
		  (file-name-nondirectory bn)))
	 (default-alias
	   (and fn
		(let ((aliases (remove (assoc "all" grep-files-aliases)
				       grep-files-aliases))
		      alias)
		  (while aliases
		    (setq alias (car aliases)
			  aliases (cdr aliases))
		    (if (string-match (mapconcat
				       #'wildcard-to-regexp
				       (split-string (cdr alias) nil t)
				       "\\|")
				      fn)
			(setq aliases nil)
		      (setq alias nil)))
		  (cdr alias))))
	 (default-extension
	   (and fn
		(let ((ext (file-name-extension fn)))
		  (and ext (concat "*." ext)))))
	 (default
	   (or default-alias
	       default-extension
	       (car grep-files-history)
	       (car (car grep-files-aliases))))
	 (defaults
	   (delete-dups
	    (delq nil
		  (append (list default default-alias default-extension)
			  (mapcar #'car grep-files-aliases)))))
         (files (completing-read
                 (format-prompt "Search for \"%s\" in files matching wildcard"
                                default regexp)
                 (completion-table-merge defaults #'completion-file-name-table)
		 nil nil nil 'grep-files-history defaults)))
    (and files
	 (or (cdr (assoc files grep-files-aliases))
	     files))))