Function: project--files-in-directory
project--files-in-directory is a byte-compiled function defined in
project.el.gz.
Signature
(project--files-in-directory DIR IGNORES &optional FILES)
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/project.el.gz
(defun project--files-in-directory (dir ignores &optional files)
(require 'find-dired)
(require 'xref)
(let* ((dir (file-name-as-directory dir))
(default-directory dir)
;; Make sure ~/ etc. in local directory name is
;; expanded and not left for the shell command
;; to interpret.
(localdir (file-name-unquote (file-local-name (expand-file-name dir))))
(command (format "%s -H . %s -type f %s -print0"
find-program
(xref--find-ignores-arguments ignores "./")
(if files
(concat (shell-quote-argument "(")
" -name "
(mapconcat
#'shell-quote-argument
(split-string files)
(concat " -o -name "))
" "
(shell-quote-argument ")"))
"")))
res)
(with-temp-buffer
(let ((status
(process-file-shell-command command nil t))
(pt (point-min)))
(unless (zerop status)
(goto-char (point-min))
(if (and
(not (eql status 127))
(search-forward "Permission denied\n" nil t))
(let ((end (1- (point))))
(re-search-backward "\\`\\|\0")
(error "File listing failed: %s"
(buffer-substring (1+ (point)) end)))
(error "File listing failed: %s" (buffer-string))))
(goto-char pt)
(while (search-forward "\0" nil t)
(push (buffer-substring-no-properties (+ pt 2) (1- (point)))
res)
(setq pt (point)))))
(if project-files-relative-names
(sort res #'string<)
(project--remote-file-names
(mapcar (lambda (s) (concat localdir s))
(sort res #'string<))))))