[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master f9e73f5: New function iterator-of-directory-files
From: |
Michael Heerdegen |
Subject: |
[elpa] master f9e73f5: New function iterator-of-directory-files |
Date: |
Mon, 16 Nov 2015 14:38:23 +0000 |
branch: master
commit f9e73f5a1d83d604204f0c13d32fe64bba769ff6
Author: Michael Heerdegen <address@hidden>
Commit: Michael Heerdegen <address@hidden>
New function iterator-of-directory-files
---
packages/iterators/iterators.el | 35 +++++++++++++++++++++++++++++++++++
1 files changed, 35 insertions(+), 0 deletions(-)
diff --git a/packages/iterators/iterators.el b/packages/iterators/iterators.el
index 5ed1e8a..23fcedd 100644
--- a/packages/iterators/iterators.el
+++ b/packages/iterators/iterators.el
@@ -91,6 +91,41 @@ used between the numbers and defaults to 1."
(iter-yield (prog1 i (cl-incf i inc))))))
(iterator-make (while t (iter-yield (prog1 i (cl-incf i))))))))
+(iter-defun iterator-of-directory-files-1 (directory &optional match nosort
recurse follow-links)
+ "Helper for `iterator-of-directory-files'."
+ (when (file-accessible-directory-p directory)
+ (let ((files (directory-files directory t match nosort)) file)
+ (while (setq file (pop files))
+ (cond
+ ((not (file-directory-p file))
+ (iter-yield file))
+ ((member (file-name-nondirectory (directory-file-name file))
+ '("." "..")))
+ (t
+ (iter-yield file)
+ (when (and (or follow-links (not (file-symlink-p file)))
+ (if (functionp recurse) (funcall recurse file) recurse))
+ (iter-yield-from (iterator-of-directory-files-1
+ file match nosort recurse follow-links)))))))))
+
+(defun iterator-of-directory-files (directory &optional full match nosort
recurse follow-links)
+ "Return an iterator of names of files in DIRECTORY.
+Don't include files named \".\" or \"..\". The arguments FULL,
+MATCH and NOSORT are like in `directory-files'.
+
+Optional argument RECURSE non-nil means recurse on
+subdirectories. If RECURSE is a function, it should be a
+predicate accepting one argument, an absolute file name of a
+directory, and return non-nil when the returned iterator should
+recurse into that directory. Any other non-nil value means
+recurse into every readable subdirectory.
+
+Even with recurse non-nil, don't descent into directories by
+following symlinks unless FOLLOW-LINKS is non-nil."
+ (iterator-map
+ (lambda (file) (if full file (file-relative-name file directory)))
+ (iterator-of-directory-files-1 directory match nosort recurse
follow-links)))
+
;;;; Operations on iterators, transducers
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [elpa] master f9e73f5: New function iterator-of-directory-files,
Michael Heerdegen <=