Як я можу створити переповнений буфер із переліком усіх відкритих файлів?


9

У мене є механізм запису елементів на диск з diredбуфера. На жаль, файл, який я виправили, розміщений по всій файловій системі. Як я можу створити diredбуфер з усіх відкритих файлів?



@Drew Я б заперечував не дублікат, принаймні не строго. Це питання стане просто "Як отримати список усіх відкритих буферів, пов'язаних з файлами?".
Шон Аллред

@Drew конкретно:(sort (remove nil (mapcar #'buffer-file-name (buffer-list))) #'string<)
Шон Аллред

Додана інформація полягає в тому, що buffer-listіснує (що я знав) і buffer-file-nameповертається, nilколи немає файлу (який я не знав). Ваш запропонований дублікат не містить цієї інформації або не потребує цього.
Шон Аллред

1
@Drew На моєму досвіді, намагатися зробити кожне питання максимально модульним - це скоріше мінус, а не перевага. Це зменшує корисність для людей, які натрапляють на це від Google, і ніколи не реєструватимуться просто тому, що вони використали б Google . Якщо я хочу через кожне запитання щодо TeX.SE та dupe'd питань, які мали однакові концептуальні відповіді, помірність стане кошмаром, і сайт зануриться у темряву.
Шон Аллред

Відповіді:


12

diredКоманда приймає список файлових імен в якості аргументу. Просто створіть його та перейдіть до нього:

(dired
 (cons
  "Open Files"
  (sort (remove nil (mapcar #'buffer-file-name (buffer-list)))
       #'string<))) 

Я думаю, що це не вистачає одного файлу: коли ви передаєте список для перенаправлення, перший елемент у цьому списку приймається як ім'я каталогу, а решта - як файли. Як щодо цього:(dired (cons "*Open Files*" (sort (remove nil (mapcar #'buffer-file-name (buffer-list))) #'string<)))
glucas

Лише зауваження: це станеться помилкою, якщо є буфер, пов’язаний з файлом, який ще не був збережений на диску.
Шон Аллред

1

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

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

EDIT

@Malabarba відповідь - це найкращий шлях.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.