¿Cómo puedo crear un búfer directo que enumere todos los archivos abiertos?

9

Tengo un mecanismo para grabar elementos en un disco desde un diredbúfer. Desafortunadamente, los archivos que he parchado están esparcidos por todo el sistema de archivos. ¿Cómo puedo crear un diredbúfer a partir de todos los archivos abiertos?

Sean Allred
fuente
@Drew argumentaría que no es un duplicado, al menos no estrictamente. Esta pregunta simplemente se convertiría en '¿Cómo obtengo una lista de todos los buffers abiertos vinculados a archivos?'.
Sean Allred
@Drew Específicamente:(sort (remove nil (mapcar #'buffer-file-name (buffer-list))) #'string<)
Sean Allred
La información agregada es que buffer-listexiste (que sí sabía) y que buffer-file-namevuelve nilcuando no hay ningún archivo (que no sabía). Su duplicado propuesto no contiene esta información ni tiene ninguna necesidad de hacerlo.
Sean Allred
1
@Drew En mi experiencia, tratar de hacer que cada pregunta sea lo más modular posible es una desventaja más que una ventaja. Disminuye la utilidad con las personas que se topan con esto de Google y nunca se registrarán simplemente porque Google usaron su caso de uso . Si quiero a través de cada pregunta en TeX.SE y preguntas engañadas que tienen las mismas respuestas conceptuales, la moderación se convertiría en una pesadilla y el sitio se hundiría en la oscuridad.
Sean Allred

Respuestas:

12

El diredcomando acepta una lista de nombres de archivo como argumento. Simplemente cree uno y páselo:

(dired
 (cons
  "Open Files"
  (sort (remove nil (mapcar #'buffer-file-name (buffer-list)))
       #'string<))) 
Malabarba
fuente
Creo que esto pierde un archivo: cuando pasa una lista para dirigir el primer elemento de esa lista se toma como el nombre del directorio, el resto como los archivos. Qué tal esto:(dired (cons "*Open Files*" (sort (remove nil (mapcar #'buffer-file-name (buffer-list))) #'string<)))
glucas
Solo una nota: esto errará si hay un búfer asociado a un archivo que aún no se ha guardado en el disco.
Sean Allred el
1

Solo proporcione una lista de cadenas, a la función dired, por ejemplo:

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

EDITAR

La respuesta de @Malabarba es la mejor manera de hacerlo.

Nsukami _
fuente