Dans mutt , est-il possible d'utiliser un navigateur de fichiers tel que vifm ou ranger (éventuellement dans un split tmux ) au lieu du navigateur de fichiers par défaut pour sélectionner un fichier à joindre à un e-mail?
Dans mutt , est-il possible d'utiliser un navigateur de fichiers tel que vifm ou ranger (éventuellement dans un split tmux ) au lieu du navigateur de fichiers par défaut pour sélectionner un fichier à joindre à un e-mail?
Réponses:
Vous pouvez ouvrir ranger dans un split tmux (une possibilité que vous avez suggérée), sélectionner le fichier à joindre, copier le nom du fichier avec son chemin d'accès yp
puis revenir à la fenêtre d'attachement mutt, appuyer a
et coller le chemin d'accès et le nom du fichier dans le ligne qui s'ouvre au bas de la fenêtre d'attachement et appuyez sur Enter
.
En ce qui concerne le problème des espaces dans le nom du fichier (en réponse au commentaire de @Rastapopolous), je me suis rendu compte que j'avais l'habitude de ne pas les utiliser, mais en retestant la méthode ci-dessus pour coller le chemin depuis Ranger, je trouve que lorsque le le nom du fichier a des espaces, pour une raison quelconque, le nom de la pièce jointe collé dans mutt a une répétition d'une partie du nom ajouté! On peut reculer pour supprimer "l'appendice" et la pièce jointe est facilement envoyée même avec les espaces non échappés. J'ai testé la copie du chemin de ranger dans vim et ça colle correctement, mais pas dans mutt.
Comme j'utilise habituellement tmux, je trouve que c'est une méthode relativement simple.
Alternativement et indépendamment de tmux, j'ai également le script suivant dans mon .bashrc:
# email an attachment
function mail_attach ()
{
mutt -F ~/.muttrc -a "$@" -- myemail@gmail.com;
}
export -f mail_attach
Ceci est utile lorsque vous savez que vous allez joindre avant de rédiger un e-mail. Donc, depuis ranger, on sélectionne simplement un fichier, tape s
pour ouvrir une ligne de commande shell et indique le fichier sélectionné avec %f
, c'est-à-dire:
:shell mail_attach %f
Appuyez sur Enter
pour ouvrir l'éditeur mutt pour composer un e-mail contenant déjà le fichier sélectionné en pièce jointe. Cependant, il faut ensuite changer l'adresse e-mail du destinataire en celle souhaitée. Il y a peut-être un moyen de changer la fonction pour ouvrir l'éditeur d'e-mails avec un champ "À" vide, mais je n'en sais pas assez. Cependant, je ne trouve pas cela important.
Pour plusieurs fichiers, s'ils se trouvent dans le même dossier, je les sélectionne tous, puis j'appuie sur @
ce qui est un raccourci Ranger pour ouvrir la ligne de commande du shell comme celle-ci, où se %s
trouve une référence aux fichiers sélectionnés:
:shell %s
Ensuite, il suffit d'insérer mail_attach
avant %s
et d'appuyer sur Entrée ouvrira mutt pour composer l'e-mail qui contient déjà tous les fichiers sélectionnés. Si vous souhaitez joindre des fichiers de différents dossiers, je ne sais pas comment le faire à part les rassembler dans le même dossier.
Je voudrais rendre hommage à celui qui a créé la fonction, mais je ne sais plus d'où elle vient. Je sais que ce n'était pas moi.
:shell mutt -a %f
directement depuis ranger
.
La réponse de @John Flood m'a inspiré à réfléchir un peu plus à ce sujet, et j'ai trouvé la solution de contournement suivante, qui semble fonctionner assez bien.
Enregistrez le script suivant comme mutt_attach
quelque part dans $PATH
, avec le Return
caractère littéral au lieu de ^M
(dans vim
, ceci est obtenu en appuyant sur <c-v><Return>
en mode insertion).
#!/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"
Dans .muttrc
, définir
macro compose \CA "!mutt_attach\n"
Maintenant, si vous ouvrez mutt
dans le premier volet de la fenêtre Email
dans une tmux
session nommée email
(créée avec, par exemple, la commande tmux new -s email
. Spécifier la session, la fenêtre et le volet est pratique principalement à des fins de débogage) et appuyez sur Control+A
dans le menu de composition, vifm
s'ouvrira en choose-files
mode et le fichier sélectionné sera automatiquement joint.
Mieux encore, cela vous permet de baliser plusieurs fichiers en vifm
utilisant t
(ou en mode visuel), et en les ranger
utilisant Space
, et les attacher tous en même temps!
EDIT : J'ai remarqué que le code ne fonctionne pas pour les noms de fichiers qui contiennent des espaces, car il semble impossible de taper un espace dans le menu de composition des pièces jointes dans ma version de mutt ... Voici une solution de contournement (quelque peu moche):
#!/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"