muttからのメールをきれいに印刷しますか?


16

Muttで印刷コマンドを設定できることを知っています.muttrc。例:

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

しかし、きれいな印刷にはどの印刷コマンドを使用する必要がありますか?

ショートカットを使用a2psしても、出力は少し質素に見え-=mailます。UTF8はサポートしいませんpapsPangoを使用したUTF-8からPostScriptへのコンバーター」と説明されているものがありますが、現在はマージンやメールレイアウトなどのサポートは含まれていません。

mp:素敵なデフォルトのヘッダー。繰り返しますが、UTF8はサポートされていません。デフォルトのマージンはとてつもなく小さいです-マージンを広く指定すると、本文テキストがフッターの後ろに印刷されます。

enscript-G派手なページヘッダーは確かに派手です。UTF8 サポートなし

Muttからのメールを印刷するために21世紀に何を使用しますか?

(PSおよび/またはPDFとしてUTF8、DIN A4出力をサポートする必要があります)


muttはMIME情報をにパイプしないため、MIMEに関するメモを削除しましたprint_command。したがって、|muttで(パイプ)コマンドを使用してprint_commandsをテストするだけでは不十分です。
maxschlepzig

コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
テルドン

回答:


19

Muttprintあります。それはありませんサポートUTF-8を、その出力は、デフォルトではまともに見えます。MuttprintはLaTeXを使用し、カスタマイズ用のフックを提供します。

さまざまな環境からメールを印刷しているため、デフォルトのプリンターを使用できません。したがって、私は(を介して~/.muttrc)PDFビューアを使用するように設定し、そこでプリンタを動的に選択できます。

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

Mktempは/tmpデフォルトでを使用します。カスタムキャッシュディレクトリを使用する場合:

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

ところで、print_decodeprint_commandがMIMEやエンコードなどを単独でデコードできるかどうかをmuttrc内で設定できます。デフォルトでは、などのyesコマンドに適した設定に設定されています。muttprintenscript

a2ps、enscript、およびmpのUTF-8の問題に関しては、それらは時代遅れと見なされるべきであると結論付けることができます。実際、メンテナンスされていないように見えるプロジェクトページを見ると(たとえば、mpページの最後のニュース項目は2002年のものであり、Sunにあるメーリングリストに言及しています)。


これはセキュリティ上の欠陥につながります:/tmp/$USER.ps他のユーザーが非常に予測しやすいです。mktemp一時ファイルの作成を使用してください!(私の答えをご覧ください)。
F.ハウリ

@ F.Hauri、はい、頼るの/tmp/$USER.psはばかげています。回答を更新しました。
maxschlepzig

ファイルが既に存在する場合、またはディレクトリが存在しない場合、mktempは失敗します。失敗すると、キャッシュディレクトリに不要な印刷メールがいっぱいになります。これが、/tmp/*再起動時に削除される主な理由です。
F.ハウリ

@ F.Hauri、mktemp「存在理由」はファイル名の衝突を避けることです。ただし、他の理由で失敗する場合があります。mktempが成功した場合のみmuttprintが実行されるようにコマンドを変更しました(muttprint fが空の場合、デフォルトで他のファイル名になると思われます)。したがって、今では、evinceまたはrmが失敗した場合にのみ、一時的な一時ファイルが残ります。私はこれは考えにくい-そして、もしそうなら、問題のあるファイルが問題をデバッグするための助けを保持することを考慮する。確かに、/tmp自動的にクリーンアップされます。しかし、$HOME暗号化されているが暗号化されてい/tmpない機密文書には有利です。
maxschlepzig

mktemp -p $HOME/.cache/mutt-XXXXXXXXXXこの場合に使用しますが、これmktempは正しいツールです。
F.ハウリ

3

UTF-8でエンコードされたファイルを読み取り、ファイルのPostScript言語レンダリングを生成するpapsの使用を検討することもできます。レンダリングは、pango ft2バックエンドを介してアウトライン曲線を作成することにより行われます。


3

より安全で少ない紙を使用して、以下を作成しますwrapper

私の印刷コマンドがあります.muttrc

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

そしてのコンテンツがあります "$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

この意志

  • 現在の印刷メールを保存する一時ディレクトリを安全に作成し、
  • それらをポストスクリプトに変換しますが、
    • 複数のページがある場合、
    • それらを再度変換しますが、シートごとに2ページ置きます。
  • 実行しgv、私はそれが好きなので、しかし、あなたは他のツールを実行することができます。
  • 終了時に一時ディレクトリを削除します。

持っているread tmpdir < <(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)利点を超えますかtmpdir=$(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)
maxschlepzig

@maxschlepzigは、実際にはそうではありませんが、1変数のみです。この構文は、一度に多くの変数を割り当てるのに役立ちます。read host foo foo ip < <(host google.com); echo $ip $host
F. HAURI

1

以下は、さまざまなUNIXで使用する簡単なレシピです。

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

ここ••My_printer••で、プリンタの名前です。


基本的なLatin-1レパートリー以外のすべてのUnicode文字をつぶすことは、おそらくOPが探しているものではないように思われます。
トリプリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.