Dalam mutt , apakah mungkin menggunakan browser file seperti vifm atau ranger (mungkin dalam split tmux ) alih-alih browser file default untuk memilih file yang akan dilampirkan ke email?
Dalam mutt , apakah mungkin menggunakan browser file seperti vifm atau ranger (mungkin dalam split tmux ) alih-alih browser file default untuk memilih file yang akan dilampirkan ke email?
Jawaban:
Anda dapat membuka ranger dalam split tmux (kemungkinan Anda disarankan), pilih file yang akan dilampirkan, salin nama file dengan jalurnya menggunakan yp
dan kemudian kembali ke jendela mutt attach, tekan a
dan tempel path lampiran dan nama file di baris yang terbuka di bagian bawah jendela lampiran dan tekan Enter
.
Mengenai masalah spasi pada nama file (sebagai tanggapan atas komentar @Rastapopolous), saya menyadari bahwa saya memiliki kebiasaan kuat untuk tidak menggunakannya, tetapi menguji kembali metode di atas untuk menempelkan path dari ranger, saya menemukan bahwa ketika nama file memiliki spasi, untuk beberapa alasan, nama lampiran yang disisipkan di mutt memiliki pengulangan bagian dari nama yang ditambahkan! Seseorang dapat mundur ruang untuk menghapus "embel-embel" dan lampiran siap dikirim bahkan dengan ruang tidak lolos. Saya menguji path copy dari ranger di vim dan menempel dengan benar, tetapi tidak di mutt.
Karena saya terbiasa menggunakan tmux, saya menemukan ini metode yang relatif sederhana.
Sebagai alternatif dan tidak tergantung pada tmux, saya juga memiliki skrip berikut di .bashrc saya:
# email an attachment
function mail_attach ()
{
mutt -F ~/.muttrc -a "$@" -- myemail@gmail.com;
}
export -f mail_attach
Ini berguna ketika Anda tahu Anda akan melampirkan sebelum menulis email. Jadi, dari dalam ranger, seseorang cukup memilih file, ketik s
untuk membuka baris perintah shell dan menunjukkan file yang dipilih %f
, yaitu:
:shell mail_attach %f
Menekan Enter
akan membuka editor mutt untuk menulis email yang sudah dilampirkan file yang dipilih. Namun, seseorang kemudian harus mengubah alamat email penerima ke yang diinginkan. Mungkin ada cara untuk mengubah fungsi untuk membuka editor email dengan bidang "To" kosong, tapi saya tidak cukup tahu. Namun, saya tidak menemukan ini masalah besar.
Untuk beberapa file, jika mereka berada di folder yang sama, saya memilih semuanya dan kemudian tekan @
yang merupakan jalan pintas ranger untuk membuka baris perintah shell seperti ini di mana %s
referensi ke file yang dipilih:
:shell %s
Maka seseorang cukup menyisipkan mail_attach
sebelumnya %s
dan menekan enter akan membuka mutt untuk menulis email yang sudah memiliki semua file yang dipilih terpasang. Jika Anda ingin melampirkan file dari folder yang berbeda, saya tidak tahu bagaimana melakukannya selain mengumpulkannya ke folder yang sama.
Saya ingin memberikan penghargaan kepada siapa pun yang menciptakan fungsi, tetapi saya tidak lagi tahu dari mana asalnya. Saya tahu itu bukan saya.
:shell mutt -a %f
langsung dari ranger
.
Jawaban dari @John Flood mengilhami saya untuk berpikir lebih banyak tentang ini, dan saya datang dengan solusi berikut ini, yang tampaknya bekerja dengan cukup baik.
Simpan skrip berikut mutt_attach
di suatu tempat $PATH
, dengan Return
karakter litteral alih-alih ^M
(in vim
, ini dicapai dengan menekan <c-v><Return>
dalam mode insert).
#!/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"
Di .muttrc
, tentukan
macro compose \CA "!mutt_attach\n"
Sekarang jika Anda membuka mutt
di panel pertama jendela Email
dalam tmux
sesi bernama email
(dibuat dengan, misalnya, perintah tmux new -s email
. Menentukan sesi, jendela dan panel nyaman terutama untuk keperluan debugging) dan tekan Control+A
di menu penulisan, vifm
akan terbuka dalam choose-files
mode , dan file yang dipilih akan dilampirkan secara otomatis.
Lebih baik lagi, ini memungkinkan Anda menandai beberapa file vifm
menggunakan t
(atau mode visual), dan ranger
menggunakan Space
, dan melampirkan semuanya pada saat yang sama!
EDIT : Saya perhatikan bahwa kode tidak berfungsi untuk nama file yang berisi spasi putih, karena sepertinya tidak mungkin untuk mengetik spasi di menu penulisan lampiran dalam versi mutt saya ... Ini adalah solusi (agak jelek):
#!/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"