Вопрос по – emacs - сохранить текущий список буферов в текстовый файл

9

Довольно часто мне нужно получить простую текстовую копию моих текущих открытых файлов. Причины обычно:

I want to send the list to a colleague I want to document whatever I am working on (usually in an org document) I want to act on one of my currently opened files, on the shell. I need to copy-paste the pathname for that.

Дело в том, что обычныйbuffer-menu или жеlist-buffers предоставить удобное меню для навигации по открытым буферам, но очень неудобно копировать-вставлять в терминал имена открытых файлов или выполнять какие-либо действия, упомянутые выше. Например: я не могу дважды щелкнуть по строке, чтобы выбрать полное имя пути, и я не могу использоватьkill/yank Последовательность Emacs для копирования вокруг имени пути.

Резюме: я хотел бы, чтобы способ экспортировать в текстовый файл (или в новый буфер) список открытых файлов без других данных; нет размера файла, режима или каких-либо других метаданных emacs.

Есть ли команда для этого? Дополнительный пакет, который я могу установить?

EDIT

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

<code>(defun copy-open-files ()
  "Add paths to all open files to kill ring"
  (interactive)
  (kill-new (mapconcat 'identity 
                       (delq nil (mapcar 'buffer-file-name (buffer-list))) 
                       "\n"))
  (message "List of files copied to kill ring"))
</code>

Ваш Ответ

3   ответа
9

Эта команда сделает всю работу за вас:

(defun copy-open-files ()
  "Add paths to all open files to kill ring"
  (interactive)
  (kill-new (mapconcat 'identity 
                       (delq nil (mapcar 'buffer-file-name (buffer-list))) 
                       "\n")))
Это оно! Я могу легко вставить kill-ring везде, где я работаю, и оттуда в оболочку, если это будет необходимо. dangonfast
1

Вы, безусловно, должны быть в состоянии скопировать и восстановить из списка буферов.

например скопировать все сC-xhM-w а затем вставьте в новый буфер для редактирования.

6

Вы можете изменить режим вашего*Buffer List* буфер. По умолчанию это будет в режимеBuffer Menu, но меняя его наtext-mode или жеfundamental-mode удалит все специальное поведение, позволяющее вам вырезать и вставлять из него, как обычный буфер. Метаданные можно легко отрубить с помощьюdelete-rectangle.

Кроме того, вы можете получить программный доступ к списку буферов с помощью elisp:

(dolist (buffer (buffer-list))
  (when (buffer-file-name buffer)
    (insert (buffer-file-name buffer) "\n")))
Хотя это было бы работоспособным решением, для его практического применения требуется слишком много нажатий клавиш. Я использую это очень часто. dangonfast

Похожие вопросы