Gunakan pemilih file alternatif di mutt

13

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?

Rastapopoulos
sumber
1
Masalah yang relevan untuk Mutt.
Matthias Braun

Jawaban:

2

Anda dapat membuka ranger dalam split tmux (kemungkinan Anda disarankan), pilih file yang akan dilampirkan, salin nama file dengan jalurnya menggunakan ypdan kemudian kembali ke jendela mutt attach, tekan adan 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 "$@" -- [email protected];
}

export -f mail_attach

Ini berguna ketika Anda tahu Anda akan melampirkan sebelum menulis email. Jadi, dari dalam ranger, seseorang cukup memilih file, ketik suntuk membuka baris perintah shell dan menunjukkan file yang dipilih %f, yaitu:

:shell mail_attach %f

Menekan Enterakan 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 %sreferensi ke file yang dipilih:

:shell %s

Maka seseorang cukup menyisipkan mail_attachsebelumnya %sdan 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.

John Flood
sumber
Terima kasih atas jawaban anda! Saya baru saja memposting metode alternatif, sedikit lebih ramping, yang mungkin menarik bagi Anda.
Rastapopoulos
Terima kasih banyak atas alternatifnya, namun, saya pikir saya terlalu terikat dengan ranger dan, pada saat yang sama, tidak memiliki keterampilan untuk menyesuaikan skrip Anda dengan ranger!
John Flood
Saya telah mengadaptasi skrip yang saya posting untuk ranger. Satunya downside adalah tampaknya tidak bekerja untuk nama file dengan spasi di dalamnya. (Apakah ini hanya versi mutt saya, atau apakah tidak mungkin untuk mengetik karakter <Space> dalam menu penulisan 'Attach file'?
Rastapopoulos
Trik yang bagus, dan Anda juga bisa melakukannya :shell mutt -a %flangsung dari ranger.
Rastapopoulos
1
Penjelasan Anda tentang "karakter literal kembali" berhasil! Skrip asli Anda sekarang berfungsi untuk saya. Terima kasih @Rastapopoulos!
John Flood
1

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_attachdi suatu tempat $PATH, dengan Returnkarakter 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 muttdi panel pertama jendela Emaildalam tmuxsesi bernama email(dibuat dengan, misalnya, perintah tmux new -s email. Menentukan sesi, jendela dan panel nyaman terutama untuk keperluan debugging) dan tekan Control+Adi menu penulisan, vifmakan terbuka dalam choose-filesmode , dan file yang dipilih akan dilampirkan secara otomatis.

Lebih baik lagi, ini memungkinkan Anda menandai beberapa file vifmmenggunakan t(atau mode visual), dan rangermenggunakan 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"
Rastapopoulos
sumber