Function: find-lisp-find-files-internal
find-lisp-find-files-internal is a byte-compiled function defined in
find-lisp.el.gz.
Signature
(find-lisp-find-files-internal DIRECTORY FILE-PREDICATE DIRECTORY-PREDICATE)
Documentation
Find files under DIRECTORY which satisfy FILE-PREDICATE.
FILE-PREDICATE is a function which takes two arguments: the file and its directory.
DIRECTORY-PREDICATE is used to decide whether to descend into directories. It is a function which takes two arguments, the directory and its parent.
Source Code
;; Defined in /usr/src/emacs/lisp/find-lisp.el.gz
;; Workhorse function
(defun find-lisp-find-files-internal (directory file-predicate
directory-predicate)
"Find files under DIRECTORY which satisfy FILE-PREDICATE.
FILE-PREDICATE is a function which takes two arguments: the file and its
directory.
DIRECTORY-PREDICATE is used to decide whether to descend into directories.
It is a function which takes two arguments, the directory and its parent."
(setq directory (file-name-as-directory directory))
(let (results sub-results)
(dolist (file (directory-files directory nil nil t))
(let ((fullname (expand-file-name file directory)))
(when (file-readable-p (expand-file-name file directory))
;; If a directory, check it we should descend into it
(and (file-directory-p fullname)
(funcall directory-predicate file directory)
(progn
(setq sub-results
(find-lisp-find-files-internal
fullname
file-predicate
directory-predicate))
(if results
(nconc results sub-results)
(setq results sub-results))))
;; For all files and directories, call the file predicate
(and (funcall file-predicate file directory)
(if results
(nconc results (list fullname))
(setq results (list fullname)))))))
results))