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?'.
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:
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:
(sort (remove nil (mapcar #'buffer-file-name (buffer-list))) #'string<)
buffer-list
existem (que eu sabia) e quebuffer-file-name
retornamnil
quando não há arquivo (que eu não sabia). Sua duplicata proposta não contém essas informações ou precisa disso.Respostas:
O
dired
comando aceita uma lista de nomes de arquivos como argumento. Basta criar um e passar para ele:fonte
(dired (cons "*Open Files*" (sort (remove nil (mapcar #'buffer-file-name (buffer-list))) #'string<)))
Basta fornecer uma lista de strings, para a função dired, exemplo:
EDITAR
A resposta @ Malabarba é o melhor caminho a percorrer.
fonte