Cukup cetak mail dari mutt?

16

Saya tahu bahwa saya dapat mengonfigurasi perintah cetak di Mutt via .muttrc, mis:

set print=ask-yes
set print_command="..."

Tapi perintah cetak apa yang harus saya gunakan untuk mencetak cantik ?

Yah, a2psoutput tampaknya agak sederhana, bahkan dengan -=mailcara pintas. Itu tidak mendukung UTF8 . Ada papsyang digambarkan sebagai ' UTF-8 ke PostScript converter menggunakan Pango ' dan saat ini tidak termasuk dukungan untuk margin, atau tata letak Email atau sesuatu seperti itu.

mp: tajuk default yang bagus. Sekali lagi tidak ada dukungan UTF8. Margin default sangat kecil - jika Anda menentukan margin yang lebih luas, teks isi dicetak di belakang footer.

enscript: -Guntuk header halaman yang mewah memang mewah. Tidak ada dukungan UTF8 .

Apa yang Anda gunakan di abad ke-21 untuk mencetak surat-surat Anda dari Mutt?

(Ini harus mendukung UTF8, keluaran DIN A4 sebagai PS dan / atau PDF)

maxschlepzig
sumber
Saya menghapus catatan tentang MIME karena mutt tidak menyalurkan informasi MIME ke print_command. Dengan demikian, tidak cukup untuk menguji print_commands melalui perintah |(pipa) di mutt.
maxschlepzig
Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan .
terdon

Jawaban:

19

Ada juga Muttprint . Ini tidak mendukung UTF-8 dan output terlihat layak secara default. Muttprint menggunakan LaTeX dan menyediakan kait untuk penyesuaian.

Karena saya mencetak surat dari lingkungan yang berbeda, saya tidak dapat menggunakan printer standar. Jadi saya telah mengaturnya (via ~/.muttrc) untuk menggunakan penampil PDF di mana saya dapat memilih printer secara dinamis:

set print_command='set -e; f=`mktemp`; \
        muttprint -P A4 -p TO_FILE:"$f"; evince "$f"; rm "$f"'

Penggunaan Mktemp /tmp, secara default. Untuk menggunakan direktori cache khusus:

set print_command='set -e; f=`mktemp -p "$HOME"/.cache/mutt`; \
        muttprint -P A4 -p TO_FILE:"$f"; evince "$f"; rm "$f"'

Btw, Anda dapat mengatur print_decodedi dalam muttrc untuk mengkonfigurasi jika perintah print_command mampu mendekode MIME, meng-encode dll dengan sendirinya. Secara default diatur ke yespengaturan yang tepat untuk perintah seperti muttprint, enscriptdll.

Mengenai isu-isu UTF-8 dari a2ps, enscript dan mp satu dapat saja menyimpulkan bahwa mereka harus dianggap usang. Memang, melihat halaman proyek yang tampaknya tidak dipertahankan (misalnya item berita terakhir dari halaman mp adalah dari tahun 2002 dan menyebutkan milis yang berlokasi di Sun).

maxschlepzig
sumber
Ini menyebabkan kelemahan keamanan: /tmp/$USER.pssangat dapat diprediksi oleh pengguna lain. Gunakan mktempbuat file sementara! (Lihat jawaban saya ).
F. Hauri
@ F. Hauri, ya, mengandalkan /tmp/$USER.psitu konyol. Saya telah memperbarui jawaban saya.
maxschlepzig
mktemp akan gagal jika file sudah ada atau jika direktori tidak. Jika gagal, direktori cache Anda akan diisi dengan surat-surat tercetak yang tidak diinginkan. Ini adalah alasan utama mengapa /tmp/*dihapus saat reboot.
F. Hauri
@ F.Hauri, mktempraison d'être adalah untuk menghindari tabrakan nama file. Mungkin gagal karena alasan lain. Saya telah mengubah perintah sedemikian rupa sehingga muttprint hanya dieksekusi jika mktemp berhasil (saya menduga muttprint akan default ke beberapa nama file lain ketika fkosong). Dengan demikian, sekarang Anda hanya berakhir dengan file temp sisa jika ada atau gagal. Saya menganggap ini tidak mungkin - dan jika mereka melakukannya saya menganggap memiliki file yang bermasalah tetap membantu untuk debugging masalah. Tentu, /tmpsecara otomatis dibersihkan. Tetapi $HOMEmenguntungkan untuk dokumen sensitif ketika dienkripsi tetapi /tmptidak.
maxschlepzig
Gunakan mktemp -p $HOME/.cache/mutt-XXXXXXXXXXdalam kasus ini, tetapi mktempmerupakan alat yang benar.
F. Hauri
3

Anda mungkin juga mempertimbangkan untuk menggunakan paps , yang membaca file yang dikodekan UTF-8 dan menghasilkan rendering bahasa PostScript dari file tersebut. Render dilakukan dengan membuat kurva garis besar melalui backend pango ft2.

Aaron Massey
sumber
3

Lebih aman dan menggunakan lebih sedikit kertas, buat wrapper:

Ada perintah cetak saya untuk .muttrc:

set print_command="$HOME/bin/print_preview-wrapper.sh"

Dan ada konten "$HOME/bin/print_preview-wrapper.sh"

#!/bin/bash

read tmpdir < <(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)
cd $tmpdir || exit 1

trap "cd && rm -fR $tmpdir;exit" 0 1 2 3 6 9 15

cat >file.eml
muttprint -P A4 -p TO_FILE:file.ps <file.eml 

read numPages < <(sed '/^%%Pages/{s/%%Pages: //;q;};d' file.ps)
(( numPages > 1 )) &&
    muttprint -2 -P A4 -p TO_FILE:file.ps <file.eml 

gv file.ps

Ini akan

  • aman membuat dir sementara untuk menyimpan surat cetak saat ini,
  • mengonversinya menjadi catatan tambahan, tetapi
    • jika ada lebih dari 1 halaman,
    • konversikan lagi, tetapi letakkan 2 halaman per lembar.
  • jalankan gvkarena saya suka, tetapi Anda bisa menjalankan alat lain.
  • hapus direktori sementara saat keluar.
F. Hauri
sumber
Memiliki read tmpdir < <(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)keunggulan dibandingkan tmpdir=$(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)?
maxschlepzig
@maxschlepzig hanya 1 variabel, tidak juga. Sintaks ini dapat berguna untuk menetapkan banyak variabel sekaligus:read host foo foo ip < <(host google.com); echo $ip $host
F. Hauri
1

Berikut ini adalah resep sederhana yang saya gunakan pada UNIX yang berbeda:

set print_command="iconv --unicode-subst="_" -f utf-8 -t iso-8859-1 | enscript -P ••My_printer••"

dimana ••My_printer••nama printernya.

dan
sumber
Mempertajam semua karakter Unicode di luar repertoar Latin-1 dasar sepertinya bukan apa yang dicari OP, dan milenium terakhir.
tripleee