2010-08-18 10 views
25

¿Hay alguna biblioteca o función que realice una expansión glob tipo bash para emacs lisp?emacs Lisp listando archivos con expansión glob

Por ejemplo:

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

Si no hay una función de este tipo hay ningún indicio/sugerencia sobre cómo implementarlo?

EDIT:

que he encontrado en el docs también una función útil que hace bastante exactamente esto:

file-expand-comodines: Esta función expande el patrón patrón de comodines, el retorno de una lista de nombres de archivos que coinciden.

+2

Gracias - file-expand-wildcards es exactamente lo que quería – Greg

Respuesta

19

Mira la documentación para directory-files:

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

Nota: El tercer argumento es una expresión regular - no globbing.

Es sencillo convertir los patrones globbing en expresiones regulares. eshell viene con un paquete de traducción que puede utilizar:

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

Y, si desea que la exposición total a eshell está globbing (con directorios), es probable que haya una manera de conseguir eso. Lo anterior supone que la parte globbing se encuentra en la parte no de directorio de la ruta.

+0

¡Muchas gracias por la explicación clara y las nuevas ideas! – pygabriel

3

El paquete f agrega una gran cantidad de funciones de manipulación de archivos y archivos en un esquema de nombres consistente. Tiene una función f-glob que hace exactamente eso:

(f-glob "~/doc/*.org") ; returns a list of files ending with ".org" 
(f-glob "*.org" "~/doc/") ; they all behave the same 
(f-glob "*.org" "~/doc") 
9
No

seguro de por qué se pasó por alto tal vez no era en emacs en 2010, pero en un emacs actuales, al menos, no es función de file-expand-wildcards

(file-expand-wildcards "~/Desktop/*") 

cuales hace exactamente lo que quiere hacer ...

+0

Oh vimos la edición de la Q que ya incluye esto, pero como lo pasé por alto aquí dejaré mi respuesta de todos modos –

Cuestiones relacionadas