Pergunta sobre copy-paste, org-mode, emacs – emacs - salva a lista de buffer atual em um arquivo de texto

9

Muitas vezes eu preciso obter uma cópia simples de texto dos meus arquivos abertos no momento. As razões são geralmente:

Eu quero enviar a lista para um colegaQuero documentar tudo o que estou trabalhando (geralmente em um documento organizacional)Eu quero agir em um dos meus arquivos atualmente abertos, no shell. Eu preciso copiar e colar o nome do caminho para isso.

O fato é que o habitualbuffer-menu oulist-buffers fornecer um menu conveniente para navegar pelos buffers abertos, mas é muito inconveniente copiar e colar no terminal os nomes dos arquivos abertos ou executar qualquer uma das ações mencionadas acima. Por exemplo: não consigo clicar duas vezes em uma linha para selecionar o nome completo do caminho e não posso usar okill/yank Sequência do emacs para copiar em torno do nome do caminho.

Resumo: Eu gostaria de uma maneira de exportar para um arquivo de texto (ou para um novo buffer) a lista de arquivos abertos, sem outros dados; nenhum tamanho de arquivo, modo ou qualquer outro metadado do emacs.

Existe um comando para isso? Um pacote extra que posso instalar?

EDITAR

Adicionando solução por Trey Jackson, modificada para fornecer algum feedback do que foi feito:

<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>

Sua resposta

3   a resposta
9

Este comando fará o trabalho para você:

<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")))
</code>
É isso! Eu posso colar o kill-ring facilmente onde quer que eu esteja trabalhando, e de lá para o shell se for necessário. dangonfast
6

*Buffer List* amortecedor. Por padrão, ele estará no modoBuffer Menu, mas mudando paratext-mode oufundamental-mode removerá todo o comportamento especial, permitindo que você copie e cole como se fosse um buffer regular. Os metadados podem ser facilmente cortados comdelete-rectangle.

Como alternativa, você pode acessar a lista de buffer programaticamente com elisp:

<code>(dolist (buffer (buffer-list))
  (when (buffer-file-name buffer)
    (insert (buffer-file-name buffer) "\n")))
</code>
Embora isso seja uma solução viável, significa muitos pressionamentos de tecla para torná-lo prático. Eu estou usando isso com muita freqüência. dangonfast
1

s.

por exemplo. copie tudo comCxhM-w e, em seguida, puxar para um novo buffer para edição.

Perguntas relacionadas