Mercurial > emacs
changeset 23942:8fa87eee9ae5
(file-expand-wildcards): Handle wildcards in directory name.
Be careful about whether to return a relative file name,
and if so, relative to what directory.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 26 Dec 1998 05:14:48 +0000 |
parents | 7da919fff9be |
children | 7555c77bc4f0 |
files | lisp/files.el |
diffstat | 1 files changed, 34 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/files.el Fri Dec 25 19:34:43 1998 +0000 +++ b/lisp/files.el Sat Dec 26 05:14:48 1998 +0000 @@ -3064,9 +3064,40 @@ (defun file-expand-wildcards (pattern &optional full) "Expand wildcard pattern PATTERN. -This returns a list of file names which match the pattern." - (directory-files (file-name-directory pattern) full - (wildcard-to-regexp (file-name-nondirectory pattern)))) +This returns a list of file names which match the pattern. + +If PATTERN is written as an absolute relative file name, +the values are absolute also. + +If PATTERN is written as a relative file name, it is interpreted +relative to the current default directory, `default-directory'. +The file names returned are normally also relative to the current +default directory. However, if FULL is non-nil, they are absolute." + (let* ((nondir (file-name-nondirectory pattern)) + (dirpart (file-name-directory pattern)) + ;; A list of all dirs that DIRPART specifies. + ;; This can be more than one dir + ;; if DIRPART contains wildcards. + (dirs (if (and dirpart (string-match "[[.*+\\^$?]" dirpart)) + (mapcar 'file-name-as-directory + (file-expand-wildcards (directory-file-name dirpart))) + (list dirpart))) + contents) + (while dirs + (when (or (null (car dirs)) ; Possible if DIRPART is not wild. + (file-directory-p (directory-file-name (car dirs)))) + (let ((this-dir-contents + (directory-files (or (car dirs) ".") full + (wildcard-to-regexp nondir)))) + (setq contents + (nconc + (if (and (car dirs) (not full)) + (mapcar (function (lambda (name) (concat (car dirs) name))) + this-dir-contents) + this-dir-contents) + contents)))) + (setq dirs (cdr dirs))) + contents)) (defun list-directory (dirname &optional verbose) "Display a list of files in or matching DIRNAME, a la `ls'.