Mutt'tan güzel postalar mı yazdırıyorsunuz?


16

Mutt'ta bir yazdırma komutu yapılandırabileceğimi biliyorum .muttrc, örneğin:

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

Ancak güzel baskı için hangi baskı komutunu kullanmalıyım ?

Eh, a2psçıkış bile, biraz Spartalı görünüyor -=mailkısayol. Bu UTF8'i desteklemez . Orada paps'olarak tarif edilir ki Pango kullanarak PostScript dönüştürücü UTF-8 ' ve şu anda marjlar için destek, veya E-posta düzenini veya böyle bir şey içermez.

mp: güzel varsayılan başlık. Yine UTF8 desteği yok. Varsayılan kenar boşlukları gülünç derecede küçüktür - daha geniş kenar boşlukları belirtirseniz, gövde metni altbilginin arkasına yazdırılır.

enscript: -Gsüslü sayfa başlıkları için gerçekten süslüdür. UTF8 desteği yok .

21. yüzyılda postalarınızı Mutt'tan yazdırmak için ne kullanıyorsunuz?

(UTF8, DIN A4 çıktısını PS ve / veya PDF olarak desteklemelidir)


MIME ile ilgili notları sildim çünkü mutt MIME bilgisini iletmiyor print_command. Bu nedenle, print_commands |komutunun mutt (boru) komutu ile test edilmesi yeterli değildir .
maxschlepzig

Yorumlar uzun tartışmalar için değildir; bu görüşme sohbete taşındı .
terdon

Yanıtlar:


19

Muttprint de var . Bu does destek UTF-8 ve çıkış varsayılan olarak iyi görünüyor. Muttprint LaTeX kullanır ve özelleştirme için kancalar sağlar.

Farklı ortamlardan posta yazdırdığım için varsayılan yazıcı kullanamıyorum. Böylece ~/.muttrcdinamik olarak bir yazıcı seçebileceğim bir PDF görüntüleyici kullanmak için (aracılığıyla ) kurdum:

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

Mktemp /tmpvarsayılan olarak kullanır . Özel bir önbellek dizini kullanmak için:

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

Btw, print_decodeprint_command'ın MIME, kodlamalar vb. Kendi kendine kodunu çözüp çözemeyeceğini yapılandırmak için muttrc içinde ayarlayabilirsiniz . Varsayılan olarak , vb. yesGibi komutlar için doğru ayarın hangisi olduğu ayarlanır .muttprintenscript

A2ps, enscript ve mp'nin UTF-8 sorunları ile ilgili olarak bunların eskimiş sayılması gerektiği sonucuna varılabilir. Gerçekten de, proje sayfalarına bakıldığında, bakımlı görünmemektedir (örneğin, mp sayfasının son haber öğesi 2002'den alınmıştır ve Sun'da bulunan bir posta listesinden bahsedilmektedir).


Bu bir güvenlik açığına yol açar: /tmp/$USER.psdiğer kullanıcılar tarafından oldukça tahmin edilebilir. Kullanım mktempgeçici dosyaları oluşturmak! ( Cevabımı gör ).
F. Hauri

@ F.Hauri, evet, güvenmek /tmp/$USER.psaptalca. Cevabımı güncelledim.
maxschlepzig

Dosya zaten varsa veya dizin yoksa mktemp başarısız olur. Hata durumunda, önbellek dizininiz istenmeyen yazdırılmış postalarla dolar. /tmp/*Yeniden başlatma sırasında silinmesinin ana nedeni budur .
F. Hauri

@ F.Hauri, mktemp'nin varoluş nedeni dosya adı çarpışmalarından kaçınmaktır. Yine de başka nedenlerle başarısız olabilir. Muttprint'in sadece mktemp başarılı olması durumunda yürütüldüğünü (muttprint'in boşken başka bir dosya adına varsayılan olacağını sanıyorum) komutu değiştirdim f. Böylece, şimdi sadece evince veya rm başarısız olursa geçici bir geçici dosya ile sonuçlanır. Bunu pek olası görmüyorum - ve eğer yaparlarsa sorunlu dosyanın sorunu ayıklamak için bir yardım tutmasını düşünüyorum. Elbette, /tmpotomatik olarak temizlenir. Ancak $HOMEşifrelenmiş ancak şifrelenmemiş hassas dokümanlar için avantajlıdır /tmp.
maxschlepzig

mktemp -p $HOME/.cache/mutt-XXXXXXXXXXBu durumda kullanın , ancak mktempdoğru araçtır.
F.Hauri

3

Ayrıca , UTF-8 kodlu bir dosyayı okuyan ve dosyanın bir PostScript dili oluşturması oluşturan paps kullanmayı da düşünebilirsiniz . Oluşturma işlemi, pango ft2 arka ucundan anahat eğrileri oluşturularak yapılır.


3

Daha güvenli ve daha az kağıt kullanarak aşağıdakileri oluşturun wrapper:

Benim için yazdırma komutu var .muttrc:

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

Ve içeriği var "$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

Bu irade

  • geçerli yazdırma postasını saklamak için güvenli bir şekilde geçici dizin oluşturun,
  • bunları postscript'e dönüştürün, ancak
    • 1'den fazla sayfa varsa,
    • tekrar dönüştürün, ancak sayfa 2 sayfa yerleştirin.
  • çalıştırmak gvHoşuma çünkü ancak herhangi başka bir araç çalıştırabilir.
  • çıkışta geçici dizini sil.

Has read tmpdir < <(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)göre avantajlı tmpdir=$(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)?
maxschlepzig

@maxschlepzig sadece 1 değişken için, gerçekten değil. Bu sözdizimi birçok değişkeni bir kerede atamak için yararlı olabilir:read host foo foo ip < <(host google.com); echo $ip $host
F. Hauri

1

Farklı UNIX'lerde kullandığım basit bir makbuz:

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

••My_printer••yazıcının adı nerede .


Temel Latin-1 repertuarının dışındaki tüm Unicode karakterlerini ezmek, muhtemelen OP'nin aradığı şey değil ve son milenyum gibi görünüyor.
Üçlü
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.