Add elisp function to recursively search directories
This commit is contained in:
parent
1b95189069
commit
e7f5118ab2
49
home/emacs/doom/directory-files-recursive.el
Normal file
49
home/emacs/doom/directory-files-recursive.el
Normal file
|
@ -0,0 +1,49 @@
|
|||
;;;
|
||||
;;; Recursively list files in a given directory
|
||||
;;;
|
||||
;;; Author: daniel m german dmg at uvic dot ca
|
||||
;;; Copyright: daniel m german
|
||||
;;; License: Same as Emacs
|
||||
;;;
|
||||
(defun directory-files-recursive (directory match maxdepth ignore)
|
||||
"List files in DIRECTORY and in its sub-directories.
|
||||
Return files that match the regular expression MATCH but ignore
|
||||
files and directories that match IGNORE (IGNORE is tested before MATCH.
|
||||
Recurse only to depth MAXDEPTH. If zero or negative, then do not recurse"
|
||||
(let* ((files-list '())
|
||||
(current-directory-list
|
||||
(directory-files directory t)))
|
||||
;; while we are in the current directory
|
||||
(while current-directory-list
|
||||
(let ((f (car current-directory-list)))
|
||||
(cond
|
||||
((and
|
||||
ignore ;; make sure it is not nil
|
||||
(string-match ignore f))
|
||||
; ignore
|
||||
nil
|
||||
)
|
||||
((and
|
||||
(file-regular-p f)
|
||||
(file-readable-p f)
|
||||
(string-match match f))
|
||||
(setq files-list (cons f files-list))
|
||||
)
|
||||
((and
|
||||
(file-directory-p f)
|
||||
(file-readable-p f)
|
||||
(not (string-equal ".." (substring f -2)))
|
||||
(not (string-equal "." (substring f -1)))
|
||||
(> maxdepth 0))
|
||||
;; recurse only if necessary
|
||||
(setq files-list (append files-list (directory-files-recursive f match (- maxdepth -1) ignore)))
|
||||
(setq files-list (cons f files-list))
|
||||
)
|
||||
(t)
|
||||
)
|
||||
)
|
||||
(setq current-directory-list (cdr current-directory-list))
|
||||
)
|
||||
files-list
|
||||
)
|
||||
)
|
Loading…
Reference in a new issue