Как я могу создать буфер с указанием всех открытых файлов?
9
У меня есть механизм для записи объектов на диск из diredбуфера. К сожалению, файл, который я пропатчил, разбросан по файловой системе. Как я могу создать diredбуфер из всех открытых файлов?
@ Дрю, я бы сказал, не дубликат, по крайней мере, не строго. Этот вопрос будет звучать так: «Как получить список всех открытых буферов, привязанных к файлам?».
Добавленная информация - это то, что buffer-listсуществует (что я знал) и buffer-file-nameвозвращается, nilкогда нет файла (которого я не знал). Ваш предложенный дубликат не содержит эту информацию или не нуждается в этом.
Шон Оллред
1
@ По моему опыту, попытка сделать каждый вопрос как можно более модульным является недостатком, а не преимуществом. Это уменьшает полезность для людей, которые наталкиваются на это от Google и никогда не будут регистрироваться просто потому, что они Google использовали их вариант использования . Если бы я хотел, чтобы каждый вопрос на TeX.SE и dupe'd вопросы с одинаковыми концептуальными ответами, модерация превратились бы в кошмар, и сайт погрузился бы в темноту.
Шон Оллред
Ответы:
12
Команда diredпринимает список имен файлов в качестве аргумента. Просто создайте один и перейдите к нему:
Я думаю, что это пропускает один файл: когда вы передаете список Dired, первый элемент в этом списке принимается за имя каталога, а остальные за файлы. Как насчет этого:(dired (cons "*Open Files*" (sort (remove nil (mapcar #'buffer-file-name (buffer-list))) #'string<)))
glucas
Только примечание: это будет ошибкой, если есть связанный с файлом буфер, который еще не был сохранен на диск.
Шон Оллред
1
Просто предоставьте список строк для функции dired, например:
(sort (remove nil (mapcar #'buffer-file-name (buffer-list))) #'string<)
buffer-list
существует (что я знал) иbuffer-file-name
возвращается,nil
когда нет файла (которого я не знал). Ваш предложенный дубликат не содержит эту информацию или не нуждается в этом.Ответы:
Команда
dired
принимает список имен файлов в качестве аргумента. Просто создайте один и перейдите к нему:источник
(dired (cons "*Open Files*" (sort (remove nil (mapcar #'buffer-file-name (buffer-list))) #'string<)))
Просто предоставьте список строк для функции dired, например:
РЕДАКТИРОВАТЬ
@ Malabarba ответ - лучший путь.
источник