2010-08-18 10 views
25

Existe-t-il une bibliothèque ou une fonction qui effectue une expansion glob de type bash pour Emacs Lisp?Emacs lisp listant les fichiers avec l'extension glob

Par exemple:

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

S'il n'y a pas une telle fonction sont là aucune indication/suggestion sur la façon de le mettre en œuvre?

EDIT:

Je l'ai trouvé dans le docs également une fonction utile qui fait tout à fait exactement ceci:

fichier-expand-wildcards: Cette fonction étend le motif du caractère générique, renvoyant un liste des noms de fichiers qui lui correspondent.

+2

Merci - fichier-expand-wildcards est exactement ce que je voulais – Greg

Répondre

19

Vérifiez la documentation directory-files:

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

Note: Le troisième argument est une expression régulière - pas englobement.

Il est facile de transformer des motifs de globbing en expressions régulières. eshell est livré avec un package de traduction que vous pouvez utiliser:

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

Et, si vous voulez une exposition complète à eshell est englobement (avec des répertoires), il y a probablement un moyen d'obtenir cela. Ce qui précède suppose que la partie globbing se trouve dans la partie non-répertoire du chemin.

+0

Merci beaucoup pour l'explication claire et les autres idées! – pygabriel

3

Le package f ajoute une énorme quantité de fonctions de manipulation de fichiers et de chemins de fichiers sous un schéma de dénomination cohérent. Il a une fonction f-glob qui fait exactement cela:

(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

Je ne sais pas pourquoi cela a été négligé peut-être il n'a pas été en emacs en 2010, mais dans un emacs courant au moins il est fonction file-expand-wildcards

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

qui fait exactement ce que vous voulez faire ..

+0

Oh vu le montage du Q qui inclut déjà ceci, mais puisque je l'ai négligé ici je vais laisser ma réponse de toute façon –