Usa un selettore di file alternativo in mutt


Risposte:


2

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 ype quindi tornare alla finestra di collegamento di mutt, premere ae 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 sper aprire una riga di comando della shell e si indica il file selezionato con %f, cioè:

:shell mail_attach %f

Premendo Entersi 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_attachprima %se 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.


Grazie per la tua risposta! Ho appena pubblicato un metodo alternativo, leggermente più snello, che potresti trovare interessante.
Rastapopoulos,

Grazie mille per l'alternativa, tuttavia, penso di essere troppo sposato per ranger e, allo stesso tempo, non ho le competenze per adattare la tua sceneggiatura a ranger!
John Flood,

Ho adattato la sceneggiatura che ho pubblicato per ranger. L'unico aspetto negativo è che non sembra funzionare con nomi di file con spazi all'interno. (È solo la mia versione di mutt o è impossibile digitare un carattere <Spazio> nel menu di composizione 'Allega file'?
Rastapopoulos,

Bel trucco, e potresti anche farlo :shell mutt -a %fdirettamente da ranger.
Rastapopoulos,

1
La tua spiegazione del "personaggio letterale di ritorno" ha funzionato! La tua sceneggiatura originale ora funziona per me. Grazie @Rastapopoulos!
John Flood,

1

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_attachda qualche parte in $PATH, con il Returncarattere 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 muttnel primo riquadro della finestra Emailin una tmuxsessione 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+Anel menu di composizione, vifmsi aprirà in choose-filesmodalità e il file selezionato verrà automaticamente allegato.

Meglio ancora, questo ti permette di taggare diversi file vifmnell'uso t(o nella modalità visiva), rangernell'uso Spacee 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"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.