来自mutt的漂亮印刷邮件?


16

我知道我可以通过Mutt在Mutt中配置打印命令.muttrc,例如:

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

但是,我应该使用哪种打印命令进行漂亮的打印?

好吧,a2ps即使有-=mail捷径,输出也似乎是斯巴达式的。它不支持UTF8。还有paps这是“描述为利用攀高UTF-8成PostScript转换器 ”,目前不包括利润支持,或通过电子邮件布局或类似的东西。

mp:漂亮的默认标题。同样,不支持UTF8。默认页边距太小了-如果您指定较大的页边距,则正文文本将打印在页脚后面。

enscript-G对于精美的页面标题确实是不错的。 支持UTF8

您在21世纪用什么来打印Mutt的邮件?

(它应支持UTF8,DIN A4输出为PS和/或PDF)


我删除了有关MIME的注释,因为mutt不会将MIME信息传递给print_command。因此,仅通过|mutt中的(pipe)命令测试print_commands是不够的。
maxschlepzig 2011年

评论不作进一步讨论;此对话已转移至聊天
terdon

Answers:


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_decode在muttrc内部进行设置,以配置print_command是否能够自行解码MIME,编码等。默认情况下,它被设置为yes这对于喜欢命令右侧的设置muttprintenscript等等。

关于a2ps的UTF-8问题,enscript和mp可以仅得出结论,认为它们已过时。确实,查看项目页面似乎并没有维护它们(例如mp页面的最新新闻是2002年的,它提到了位于Sun的邮件列表)。


这导致一个安全漏洞:/tmp/$USER.ps其他用户可以高度预测。使用mktemp创建临时文件!(请参阅我的答案)。
F. Hauri

@ F.Hauri,是的,依靠/tmp/$USER.ps是愚蠢的。我已经更新了答案。
maxschlepzig

如果文件已经存在或目录不存在,则mktemp将失败。失败时,您的缓存目录将充满不需要的打印邮件。这是为什么/tmp/*在重新启动时被删除的主要原因。
F. Hauri

@ F.Hauri,mktemp'raison d'être是为了避免文件名冲突。但是,它可能由于其他原因而失败。我已经更改了命令,使得仅当mktemp成功时才执行muttprint(我怀疑muttprint f为空时会默认使用其他文件名)。因此,现在只有evince或rm失败时,您才得到一个剩余的临时文件。我认为这不太可能-如果可以,我认为保留有问题的文件可以帮助调试问题。当然,/tmp会自动清理。但是,$HOME如果对敏感文档进行加密/tmp而不进行加密,则对它有利。
maxschlepzig

mktemp -p $HOME/.cache/mutt-XXXXXXXXXX在这种情况下使用,但这mktemp是正确的工具。
F. Hauri

3

您可能还考虑使用paps,它读取UTF-8编码的文件并生成该文件的PostScript语言呈现。通过在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••打印机的名称在哪里。


将所有Unicode字符挤入基本的Latin-1曲目之外,这似乎不是OP所需要的,因此在上一个千年。
三点
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.