[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/iterators 56d200f 06/14: New function iterator-of-direc
From: |
Stefan Monnier |
Subject: |
[elpa] externals/iterators 56d200f 06/14: New function iterator-of-directory-files |
Date: |
Tue, 1 Dec 2020 16:07:24 -0500 (EST) |
branch: externals/iterators
commit 56d200f548fe0981e669646f908a395fadb50c92
Author: Michael Heerdegen <michael_heerdegen@web.de>
Commit: Michael Heerdegen <michael_heerdegen@web.de>
New function iterator-of-directory-files
---
iterators.el | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/iterators.el b/iterators.el
index 5ed1e8a..23fcedd 100644
--- a/iterators.el
+++ b/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
- [elpa] branch externals/iterators created (now a06700c), Stefan Monnier, 2020/12/01
- [elpa] externals/iterators 812e31f 01/14: new package: iterators/iterators.el, Stefan Monnier, 2020/12/01
- [elpa] externals/iterators 0991313 03/14: * iterators/iterators.el: Don't need cl-lib at run-time., Stefan Monnier, 2020/12/01
- [elpa] externals/iterators d2760c5 04/14: iterators.el: fix two typos, Stefan Monnier, 2020/12/01
- [elpa] externals/iterators 0569b79 05/14: iterators.el: fix comments, Stefan Monnier, 2020/12/01
- [elpa] externals/iterators f39f78a 08/14: Fix some quoting problems in doc strings, Stefan Monnier, 2020/12/01
- [elpa] externals/iterators d07eb57 02/14: iterators.el: copyright to FSF, Stefan Monnier, 2020/12/01
- [elpa] externals/iterators 56d200f 06/14: New function iterator-of-directory-files,
Stefan Monnier <=
- [elpa] externals/iterators 4465c79 07/14: add TODO section, Stefan Monnier, 2020/12/01
- [elpa] externals/iterators 4c922af 10/14: Update copyrights of some packages, Stefan Monnier, 2020/12/01
- [elpa] externals/iterators 99bdcc8 11/14: Optimize order of iterator-of-directory-files yield elements, Stefan Monnier, 2020/12/01
- [elpa] externals/iterators decd6c5 13/14: Update copyright years of some packages, Stefan Monnier, 2020/12/01
- [elpa] externals/iterators a06700c 14/14: * .gitignore: New file, Stefan Monnier, 2020/12/01
- [elpa] externals/iterators 024ab91 12/14: Update copyrights of some packages, Stefan Monnier, 2020/12/01
- [elpa] externals/iterators f835c47 09/14: Update some copyrights, Stefan Monnier, 2020/12/01