tags:

views:

39

answers:

1

Are there any library or function that performs a bash-like glob expansion for emacs lisp?

For example:

(directory-files-glob "~/Desktop/*")
> ("/home/user/Desktop/file1" "/home/user/Desktop/file2")

If there isn't such a function are there any hint/suggestion on how to implement it?

EDIT:

I've found in the docs also an useful function that does quite exactly this:

file-expand-wildcards: This function expands the wildcard pattern pattern, returning a list of file names that match it.

+4  A: 

Check out the documentation for directory-files:

(directory-files "~/Desktop" nil ".")

Note: The third argument is a regular expression - not globbing.

It is straight forward to turn globbing patterns into regular expressions. eshell comes with a translation package which you can use:

(require 'em-glob)
(defun directory-files-glob (path)
   (directory-files (file-name-directory path) 
                    nil 
                    (eshell-glob-regexp (file-name-nondirectory path))))

And, if you want full exposure to eshell's globbing (with directories), there's probably a way to get that. The above assumes that the globbing part is in the non-directory portion of the path.

Trey Jackson
Thank you very much for the clear explanation and the further ideas!
pygabriel