W mutt , czy można użyć przeglądarki plików, takiej jak vifm lub ranger (być może w tmux split) zamiast domyślnej przeglądarki plików, aby wybrać plik do załączenia do wiadomości e-mail?
W mutt , czy można użyć przeglądarki plików, takiej jak vifm lub ranger (być może w tmux split) zamiast domyślnej przeglądarki plików, aby wybrać plik do załączenia do wiadomości e-mail?
Odpowiedzi:
Możesz otworzyć ranger w tmuxie (opcja, którą zasugerowałeś), wybierz plik do załączenia, skopiuj nazwę pliku wraz ze ścieżką, yp
a następnie wróć do okna dołączania mutt, naciśnij a
i wklej ścieżkę załącznika i nazwę pliku w linia, która otwiera się na dole okna dołączania i naciśnij Enter
.
Jeśli chodzi o kwestię spacji w nazwie pliku (w odpowiedzi na komentarz @Rastapopolous), zdałem sobie sprawę, że mam silny nawyk nieużywania ich, ale ponowne testowanie powyższej metody wklejania ścieżki od tropiciela, stwierdzam, że gdy nazwa pliku ma spacje, z jakiegoś powodu nazwa załącznika wklejonego w mutt ma powtórzenie części nazwy dołączone! Można cofnąć się, aby usunąć „dodatek”, a załącznik jest łatwo wysyłany nawet bez spacji. Przetestowałem kopię ścieżki z tropiciela w vimie i wkleja się poprawnie, ale nie w mutcie.
Ponieważ zwykle używam tmux, uważam to za stosunkowo prostą metodę.
Alternatywnie i niezależnie od tmux, mam również następujący skrypt w moim .bashrc:
# email an attachment
function mail_attach ()
{
mutt -F ~/.muttrc -a "$@" -- myemail@gmail.com;
}
export -f mail_attach
Jest to przydatne, gdy wiesz, że dołączysz przed utworzeniem wiadomości e-mail. Tak więc z poziomu rangera wystarczy s
wybrać plik %f
, wpisać , aby otworzyć wiersz poleceń powłoki i wskazać wybrany plik za pomocą :
:shell mail_attach %f
Naciśnięcie Enter
spowoduje otwarcie edytora mutt do redagowania wiadomości e-mail z załączonym zaznaczonym plikiem. Należy jednak zmienić adres e-mail odbiorcy na żądany. Być może istnieje sposób na zmianę funkcji, aby otworzyć edytor wiadomości e-mail z pustym polem „Do”, ale nie wiem wystarczająco. Jednak nie uważam tego za coś wielkiego.
W przypadku wielu plików, jeśli znajdują się one w tym samym folderze, zaznaczam je wszystkie, a następnie naciskam @
skrót do rangera, aby otworzyć wiersz poleceń powłoki w ten sposób, gdzie %s
jest odwołanie do wybranych plików:
:shell %s
Następnie wystarczy po prostu wstawić mail_attach
przed %s
i naciśnięcie Enter otworzy mutt do redagowania wiadomości e-mail, do której są już dołączone wszystkie wybrane pliki. Jeśli chcesz załączyć pliki z różnych folderów, nie wiem, jak to zrobić, oprócz zebrania ich w tym samym folderze.
Chciałbym wyrazić uznanie dla każdego, kto stworzył tę funkcję, ale nie wiem już, skąd ona pochodzi. Wiem, że to nie byłem ja.
:shell mutt -a %f
bezpośrednio z ranger
.
Odpowiedź @John Flood zainspirowała mnie do zastanowienia się nad tym i wymyśliłem następujące obejście, które wydaje się działać całkiem dobrze.
Zapisz poniższy skrypt jako mutt_attach
gdzieś w $PATH
środku, z literą Return
zamiast ^M
(w vim
, można to osiągnąć przez naciśnięcie <c-v><Return>
w trybie wstawiania).
#!/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"
W .muttrc
, zdefiniuj
macro compose \CA "!mutt_attach\n"
Teraz, jeśli otworzysz mutt
w pierwszym panelu okna Email
w tmux
sesji o nazwie email
(utworzonej na przykład za pomocą polecenia tmux new -s email
. Określenie sesji, okna i panelu jest wygodne głównie do celów debugowania) i naciśniesz Control+A
w menu tworzenia, vifm
otworzy się w choose-files
trybie , a wybrany plik zostanie automatycznie dołączony.
Co więcej, pozwala to na oznaczenie kilku plików w vifm
użyciu t
(lub w trybie wizualnym), w ranger
użyciu Space
i dołączanie ich wszystkich jednocześnie!
EDYCJA : Zauważyłem, że kod nie działa dla nazw plików zawierających białe spacje, ponieważ wydaje się niemożliwe wpisanie spacji w menu tworzenia załączników w mojej wersji mutt ... Oto (nieco brzydkie) obejście:
#!/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"