Como posso criar um buffer direcionado listando todos os arquivos abertos?


9

Eu tenho um mecanismo para gravar itens em disco de um diredbuffer. Infelizmente, os arquivos que eu corrigi estão espalhados pelo sistema de arquivos. Como posso criar um diredbuffer de todos os arquivos abertos?



@ Drew eu não argumentaria uma duplicata, pelo menos não estritamente. Essa pergunta simplesmente se tornaria 'Como obtenho uma lista de todos os buffers abertos vinculados aos arquivos?'.
Sean Allred

@Drew Especificamente:(sort (remove nil (mapcar #'buffer-file-name (buffer-list))) #'string<)
Sean Allred

As informações adicionadas são as que buffer-listexistem (que eu sabia) e que buffer-file-nameretornam nilquando não há arquivo (que eu não sabia). Sua duplicata proposta não contém essas informações ou precisa disso.
Sean Allred

11
@ Drew Na minha experiência, tentar tornar todas as perguntas o mais modular possível é uma desvantagem e não uma vantagem. Isso diminui a utilidade para as pessoas que se deparam com isso do Google e nunca se registram simplesmente porque usaram o caso de uso do Google . Se eu quisesse passar por todas as perguntas do TeX.SE e enganar as perguntas que tivessem as mesmas respostas conceituais, a moderação se tornaria um pesadelo e o site mergulharia na escuridão.
Sean Allred

Respostas:


12

O diredcomando aceita uma lista de nomes de arquivos como argumento. Basta criar um e passar para ele:

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

Eu acho que isso falta um arquivo: quando você passa uma lista para direcionar o primeiro elemento nessa lista é tomado como o nome do diretório, o restante como os arquivos. Como sobre isso:(dired (cons "*Open Files*" (sort (remove nil (mapcar #'buffer-file-name (buffer-list))) #'string<)))
glucas

Apenas uma observação: isso ocorrerá se houver um buffer associado ao arquivo que ainda não foi salvo no disco.
Sean Allred

1

Basta fornecer uma lista de strings, para a função dired, exemplo:

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

EDITAR

A resposta @ Malabarba é o melhor caminho a percorrer.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.