** A new text property `inhibit-read-only' can be used in read-only
buffers to allow certain parts of the text to be writable.
-** A new function `file-tree-walk' allows to apply a certain action
-to all the files and subdirectories of a directory, similarly to the C
-library function `ftw'.
-
** A new function `directory-files-recursively' returns all matching
files (recursively) under a directory.
(lambda (f) (and (file-directory-p f) 'dir-ok)))
(error "No such directory found via CDPATH environment variable"))))
-(defun file-tree-walk (dir action &rest args)
- "Walk DIR executing ACTION on each file, with ARGS as additional arguments.
-For each file, the function calls ACTION as follows:
-
- \(ACTION DIRECTORY BASENAME ARGS\)
-
-Where DIRECTORY is the leading directory of the file,
- BASENAME is the basename of the file,
- and ARGS are as specified in the call to this function, or nil if omitted.
-
-The ACTION is applied to each subdirectory before descending into
-it, and if nil is returned at that point, the descent will be
-prevented. Directory entries are sorted with string-lessp."
- (cond ((file-directory-p dir)
- (setq dir (file-name-as-directory dir))
- (let ((lst (directory-files dir nil nil t))
- fullname file)
- (while lst
- (setq file (car lst))
- (setq lst (cdr lst))
- (cond ((member file '("." "..")))
- (t
- (and (apply action dir file args)
- (setq fullname (concat dir file))
- (file-directory-p fullname)
- (apply 'file-tree-walk fullname action args)))))))
- (t
- (apply action
- (file-name-directory dir)
- (file-name-nondirectory dir)
- args))))
-
(defsubst directory-name-p (name)
"Return non-nil if NAME ends with a slash character."
(and (> (length name) 0)