Utilice un selector de archivos alternativo en mutt

13

En mutt , ¿es posible usar un navegador de archivos como vifm o ranger (posiblemente en una división tmux ) en lugar del navegador de archivos predeterminado para seleccionar un archivo para adjuntarlo a un correo electrónico?

Rastapopoulos
fuente
3
Algunas ideas: mutt-users.mutt.narkive.com/IG5uScnD/external-file-manager
Arkadiusz Drabczyk el
1
Relevante tema de Mutt.
Matthias Braun

Respuestas:

2

Puede abrir el guardabosques en una división tmux (una posibilidad que sugirió), seleccionar el archivo que se adjuntará, copiar el nombre del archivo con su ruta usando ypy luego regresar a la ventana adjuntar mutt, presionar ay pegar la ruta del archivo adjunto y el nombre del archivo en el línea que se abre en la parte inferior de la ventana adjunta y presiona Enter.

Con respecto al tema de los espacios en el nombre del archivo (en respuesta al comentario de @Rastapopolous), me di cuenta de que tengo la fuerte costumbre de no usarlos, pero al volver a probar el método anterior de pegar la ruta del guardabosques, encuentro que cuando El nombre del archivo tiene espacios, por alguna razón, el nombre del archivo adjunto pegado en mutt tiene una repetición de parte del nombre adjunto. Uno puede retroceder para eliminar el "apéndice" y el archivo adjunto se envía fácilmente incluso con los espacios sin escapar. Probé la copia de ruta del guardabosques en vim y se pega correctamente, pero no en mutt.

Como uso habitualmente tmux, considero que este es un método relativamente simple.

Alternativamente e independientemente de tmux, también tengo el siguiente script en mi .bashrc:

# email an attachment
function mail_attach ()
{
    mutt -F ~/.muttrc -a "$@" -- [email protected];
}

export -f mail_attach

Esto es útil cuando sabe que lo adjuntará antes de redactar un correo electrónico. Entonces, desde dentro del guardabosques, uno simplemente selecciona un archivo, escribe spara abrir una línea de comando de shell e indica el archivo seleccionado con %f, es decir:

:shell mail_attach %f

Al presionar Enterse abrirá el editor mutt para componer un correo electrónico que ya tenga adjunto el archivo seleccionado. Sin embargo, uno debe cambiar la dirección de correo electrónico del destinatario a la deseada. Quizás haya una manera de cambiar la función para abrir el editor de correo electrónico con un campo "Para" en blanco, pero no sé lo suficiente. Sin embargo, no me parece un gran problema.

Para varios archivos, si están en la misma carpeta, los selecciono todos y luego presiono @cuál es un acceso directo de guardabosques para abrir la línea de comando de la shell como esta, donde %shay una referencia a los archivos seleccionados:

:shell %s

Luego uno simplemente inserta mail_attachantes %sy presionando enter abrirá mutt para componer el correo electrónico que ya tiene todos los archivos seleccionados adjuntos. Si desea adjuntar archivos de diferentes carpetas, no sé cómo hacerlo, aparte de reunirlos en la misma carpeta.

Me gustaría dar crédito a quien creó la función, pero ya no sé de dónde vino. Sé que no fui yo.

John Flood
fuente
¡Gracias por tu respuesta! Acabo de publicar un método alternativo, un poco más simplificado, que puede resultarle interesante.
Rastapopoulos
¡Muchas gracias por la alternativa, sin embargo, creo que estoy demasiado casado con el guardabosques y, al mismo tiempo, me faltan las habilidades para adaptar su guión al guardabosques!
John Flood
He adaptado el guión que publiqué para Ranger. El único inconveniente es que no parece funcionar para nombres de archivos con espacios en ellos. (¿Es solo mi versión de mutt, o es imposible escribir un carácter <Space> en el menú de composición 'Adjuntar archivo'?
Rastapopoulos
Buen truco, y también puedes hacerlo :shell mutt -a %fdirectamente desde ranger.
Rastapopoulos
1
¡Su explicación del "carácter de retorno literal" hizo el truco! Tu guión original ahora funciona para mí. Gracias @Rastapopoulos!
John Flood
1

La respuesta de @John Flood me inspiró a pensar un poco más sobre esto, y se me ocurrió la siguiente solución, que parece funcionar bastante bien.

Guarde el siguiente script como mutt_attachen algún lugar $PATH, con el Returncarácter literal en lugar de ^M(en vim, esto se logra presionando <c-v><Return>en modo de inserción).

#!/usr/bin/env bash

tmp=$(mktemp)

vifm "$HOME" -c "set nohlsearch" --choose-files "$tmp"
# ranger "$HOME" --choosefiles="$tmp"

while IFS="" read -r file; do
    tmux send-keys -t email:Email.0 -l "a$file^M";
done < "$tmp"

En .muttrcdefinir

macro compose \CA "!mutt_attach\n"

Ahora, si abre mutten el primer panel de la ventana Emailen una tmuxsesión llamada email(creada con, por ejemplo, el comando tmux new -s email. Especificar la sesión, la ventana y el panel es conveniente principalmente para fines de depuración) y presiona Control+Aen el menú de redacción, vifmse abrirá en choose-filesmodo , y el archivo seleccionado se adjuntará automáticamente.

Mejor aún, esto le permite etiquetar varios archivos en vifmuso t(o modo visual), y en rangeruso Space, ¡y adjuntarlos todos al mismo tiempo!

EDITAR : Noté que el código no funciona para los nombres de archivo que contienen espacios en blanco, ya que parece imposible escribir un espacio en el menú de compilación de archivos adjuntos en mi versión de mutt ... Aquí hay una solución (algo fea):

#!/usr/bin/env bash

# File in which to store the list of filenames to attach
tmp=$(mktemp)

vifm "$HOME" -c "set nohlsearch" --choose-files "$tmp"
# ranger "$HOME" --choosefiles="$tmp"

while IFS="" read -r file; do

    # Workaround for filenames that contain spaces
    if [[ "$file" = *" "* ]]; then
        file_no_space=/tmp/$(basename "$file" | sed 's/ /_/g')
        ln -s -f "$file" "$file_no_space"
        file="$file_no_space"
    fi

    tmux send-keys -t email:Email.0 -l "a$file^M";
done < "$tmp"
Rastapopoulos
fuente