Как я могу создать буфер с указанием всех открытых файлов?

9

У меня есть механизм для записи объектов на диск из diredбуфера. К сожалению, файл, который я пропатчил, разбросан по файловой системе. Как я могу создать diredбуфер из всех открытых файлов?

Шон Оллред
источник
возможное дублирование программной вставки файлов в буфер Dired
Drew
@ Дрю, я бы сказал, не дубликат, по крайней мере, не строго. Этот вопрос будет звучать так: «Как получить список всех открытых буферов, привязанных к файлам?».
Шон Оллред
@Drew Конкретно:(sort (remove nil (mapcar #'buffer-file-name (buffer-list))) #'string<)
Шон Оллред
Добавленная информация - это то, что buffer-listсуществует (что я знал) и buffer-file-nameвозвращается, nilкогда нет файла (которого я не знал). Ваш предложенный дубликат не содержит эту информацию или не нуждается в этом.
Шон Оллред
1
@ По моему опыту, попытка сделать каждый вопрос как можно более модульным является недостатком, а не преимуществом. Это уменьшает полезность для людей, которые наталкиваются на это от Google и никогда не будут регистрироваться просто потому, что они Google использовали их вариант использования . Если бы я хотел, чтобы каждый вопрос на TeX.SE и dupe'd вопросы с одинаковыми концептуальными ответами, модерация превратились бы в кошмар, и сайт погрузился бы в темноту.
Шон Оллред

Ответы:

12

Команда diredпринимает список имен файлов в качестве аргумента. Просто создайте один и перейдите к нему:

(dired
 (cons
  "Open Files"
  (sort (remove nil (mapcar #'buffer-file-name (buffer-list)))
       #'string<))) 
Malabarba
источник
Я думаю, что это пропускает один файл: когда вы передаете список Dired, первый элемент в этом списке принимается за имя каталога, а остальные за файлы. Как насчет этого:(dired (cons "*Open Files*" (sort (remove nil (mapcar #'buffer-file-name (buffer-list))) #'string<)))
glucas
Только примечание: это будет ошибкой, если есть связанный с файлом буфер, который еще не был сохранен на диск.
Шон Оллред
1

Просто предоставьте список строк для функции dired, например:

(dired '("custom dired" ".emacs.d/init.el" "mydotfiles/.bashrc"))

РЕДАКТИРОВАТЬ

@ Malabarba ответ - лучший путь.

Нсуками _
источник