Emacs lisp файлы с расширением glob
Есть ли библиотека или функция, которая выполняет bash -подобное расширение glob для emacs lisp?
Например:
(directory-files-glob "~/Desktop/*")
> ("/home/user/Desktop/file1" "/home/user/Desktop/file2")
Если такой функции нет, есть подсказка о том, как ее реализовать?
EDIT:
Я нашел в docs также полезную функцию, которая делает именно это:
файл-расширяющие-символы: Эта функция расширяет шаблон шаблона подстановки, возвращая список имен файлов, которые соответствуют ему.
Ответы
Ответ 1
Ознакомьтесь с документацией для directory-files
:
(directory-files "~/Desktop" nil ".")
Примечание. Третий аргумент - это регулярное выражение, а не глобус.
Прямо перевернуть шаблоны глобусов в регулярные выражения. eshell поставляется с пакетом перевода, который вы можете использовать:
(require 'em-glob)
(defun directory-files-glob (path)
(directory-files (file-name-directory path)
nil
(eshell-glob-regexp (file-name-nondirectory path))))
И, если вы хотите полностью разобраться с globing (с каталогами) в eshell, возможно, есть способ получить это. Вышеприведенное предполагает, что часть globbing находится в некаталограммной части пути.
Ответ 2
Не уверен, почему это было упущено, может быть, это было не в emacs в 2010 году, а в текущем emacs, по крайней мере, есть функция file-expand-wildcards
(file-expand-wildcards "~/Desktop/*")
который делает именно то, что вы хотите сделать.
Ответ 3
Пакет f
добавляет огромное количество функций манипуляции файлами и файловыми файлами в соответствии с последовательной схемой именования. Он имеет функцию f-glob
, которая делает именно это:
(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")