2014-10-22 7 views
2

Функция (directory-files-and-attributes "~/" 'full nil t) создает несортированный список файлов и каталогов для домашнего каталога. Результат представляется в формате, аналогичном file-attributes, документация для которого может быть просмотрена по следующей ссылке: https://www.gnu.org/software/emacs/manual/html_node/elisp/File-Attributes.htmlEmacs - список каталогов/файлов по дате изменения

Цель этой темы - создать список, который сортируется по дате/времени изменения - с помощью самый новый в начале списка и самый старый в конце списка.

Наконец, я хотел бы превратить этот подробный список в простой список только абсолютных путей файлов/каталогов - поддерживая тот же порядок, который был достигнут в описанной выше сортировке.

ответ

4

directory-files-and-attributes возвращает список. К счастью, для преобразования списков существует много функций Lisp.

Сначала вы хотите получить список, отсортированный путем сравнения 6-го элемента каждой записи. Вы можете сделать это, используя родную Emacs Lisp sort функцию, которая принимает функцию сравнения в качестве второго элемента:

(sort (directory-files-and-attributes "~") 
     #'(lambda (x y) (time-less-p (nth 6 x) (nth 6 y)))) 

То же самое может быть достигнуто, возможно, более четко с помощью Common Lisp функции сортировки:

(cl-sort (directory-files-and-attributes "~") 
     #'time-less-p 
     :key #'(lambda (x) (nth 6 x))) 

Теперь вы хотите извлечь только первый элемент каждой записи - используйте mapcar для применения функции ко всем элементам списка:

(mapcar #'car 
     (sort (directory-files-and-attributes "~") 
       #'(lambda (x y) (time-less-p (nth 6 x) (nth 6 y))))) 
Смежные вопросы