Pregunta sobre copy-paste, emacs, org-mode – emacs - guardar la lista actual de búfer en un archivo de texto

9

Muy a menudo necesito obtener una copia de texto simple de mis archivos abiertos actualmente. Las razones suelen ser:

Quiero enviar la lista a un colegaQuiero documentar en lo que estoy trabajando (normalmente en un documento de la organización)Quiero actuar en uno de mis archivos abiertos actualmente, en el shell. Necesito copiar y pegar la ruta para eso.

El hecho es que lo habitual.buffer-menu olist-buffers proporcione un menú conveniente para navegar por los buffers abiertos, pero es muy incómodo copiar y pegar al terminal los nombres de los archivos abiertos, o realizar cualquiera de las acciones mencionadas anteriormente. Por ejemplo: no puedo hacer doble clic en una línea para seleccionar el nombre de ruta completo, y no puedo usar elkill/yank Secuencia de emacs para copiar alrededor del nombre de la ruta.

Resumen: Me gustaría una forma de exportar a un archivo de texto (oa un nuevo búfer) la lista de archivos abiertos, sin otros datos; sin tamaño de archivo, modo, o cualquier otro metadata de emacs.

¿Hay un comando para eso? ¿Un paquete extra que puedo instalar?

EDITAR

Añadiendo una solución de Trey Jackson, modificada para proporcionar información sobre lo que se ha hecho:

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

Tu respuesta

3   la respuesta
9

Este comando hará el trabajo por usted:

<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>
¡Eso es todo! Puedo pegar fácilmente el kill-ring dondequiera que esté trabajando, y desde allí a la cáscara si es necesario. dangonfast
6

Puedes cambiar el modo de tu*Buffer List* buffer. Por defecto, estará en modo.Buffer Menu, pero cambiándolo atext-mode ofundamental-mode eliminará todo el comportamiento especial que le permite cortarlo y pegarlo como si fuera un búfer regular. Los metadatos se pueden cortar fácilmente condelete-rectangle.

Alternativamente, puede acceder a la lista de búferes programáticamente con elisp:

<code>(dolist (buffer (buffer-list))
  (when (buffer-file-name buffer)
    (insert (buffer-file-name buffer) "\n")))
</code>
Aunque esa sería una solución viable, significa demasiadas pulsaciones para hacerlo práctico. Estoy usando esto muy a menudo. dangonfast
1

Ciertamente, debería poder copiar y extraer de la lista de búferes.

p.ej. copiar todo conC-xhM-w y luego tirar en un nuevo búfer para editar.

Preguntas relacionadas