In mutt , è possibile utilizzare un browser di file come vifm o ranger (possibilmente in una divisione tmux ) invece del browser di file predefinito per selezionare un file da allegare a un'e-mail?
In mutt , è possibile utilizzare un browser di file come vifm o ranger (possibilmente in una divisione tmux ) invece del browser di file predefinito per selezionare un file da allegare a un'e-mail?
Risposte:
Puoi aprire ranger in una suddivisione tmux (una possibilità che hai suggerito), selezionare il file da allegare, copiare il nome del file con il suo percorso usando yp
e quindi tornare alla finestra di collegamento di mutt, premere a
e incollare il percorso dell'allegato e il nome del file nella linea che si apre nella parte inferiore della finestra di collegamento e premere Enter
.
Per quanto riguarda il problema degli spazi nel nome del file (in risposta al commento di @Rastapopolous), mi sono reso conto che ho una forte abitudine di non usarli, ma riesaminando il metodo sopra per incollare il percorso dal ranger, trovo che quando il il nome del file ha spazi, per qualche motivo, il nome dell'allegato incollato in mutt ha una ripetizione di parte del nome aggiunto! Si può backspace per rimuovere l '"appendice" e l'allegato viene prontamente inviato anche con gli spazi non fuggiti. Ho testato la copia del percorso da ranger in vim e incolla correttamente, ma non in mutt.
Dato che uso abitualmente tmux, trovo questo un metodo relativamente semplice.
In alternativa e indipendentemente da tmux, ho anche il seguente script nel mio .bashrc:
# email an attachment
function mail_attach ()
{
mutt -F ~/.muttrc -a "$@" -- myemail@gmail.com;
}
export -f mail_attach
Questo è utile quando sai che ti allego prima di scrivere un'email. Quindi, all'interno di ranger, si seleziona semplicemente un file, si digita s
per aprire una riga di comando della shell e si indica il file selezionato con %f
, cioè:
:shell mail_attach %f
Premendo Enter
si aprirà l'editor mutt per la composizione di una e-mail che ha già allegato il file selezionato. Tuttavia, è necessario modificare l'indirizzo e-mail del destinatario con quello desiderato. Forse c'è un modo per cambiare la funzione per aprire l'editor di posta elettronica con un campo "A" vuoto, ma non ne so abbastanza. Tuttavia, non lo trovo un grosso problema.
Per più file, se si trovano nella stessa cartella, li seleziono tutti e quindi premo @
quale è un collegamento ranger per aprire la riga di comando della shell in questo modo dove %s
è un riferimento ai file selezionati:
:shell %s
Quindi si inserisce semplicemente mail_attach
prima %s
e premendo Invio si aprirà mutt per comporre l'e-mail che ha già tutti i file selezionati allegati. Se vuoi allegare file da cartelle diverse, non so come fare a parte raccoglierli nella stessa cartella.
Vorrei dare credito a chiunque abbia creato la funzione, ma non so più da dove provenga. So che non sono stato io.
:shell mutt -a %f
direttamente da ranger
.
La risposta di @ John Flood mi ha ispirato a riflettere un po 'di più su questo, e ho trovato la seguente soluzione alternativa, che sembra funzionare abbastanza bene.
Salvare il seguente script come mutt_attach
da qualche parte in $PATH
, con il Return
carattere letterale invece di ^M
(in vim
, questo si ottiene premendo <c-v><Return>
in modalità di inserimento).
#!/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"
In .muttrc
, definire
macro compose \CA "!mutt_attach\n"
Ora se si apre mutt
nel primo riquadro della finestra Email
in una tmux
sessione denominata email
(creata con, ad esempio, il comando tmux new -s email
. Specificare la sessione, la finestra e il riquadro è utile principalmente per scopi di debug) e si preme Control+A
nel menu di composizione, vifm
si aprirà in choose-files
modalità e il file selezionato verrà automaticamente allegato.
Meglio ancora, questo ti permette di taggare diversi file vifm
nell'uso t
(o nella modalità visiva), ranger
nell'uso Space
e allegarli tutti allo stesso tempo!
EDIT : Ho notato che il codice non funziona per i nomi di file che contengono spazi bianchi, in quanto sembra impossibile digitare uno spazio nel menu di composizione degli allegati nella mia versione di mutt ... Ecco una soluzione (un po 'brutta):
#!/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"