E-mails bonitos impressos de vira-lata?

16

Eu sei que posso configurar um comando de impressão no Mutt via .muttrc, por exemplo:

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

Mas qual comando de impressão devo usar para uma impressão bonita ?

Bem, a a2psprodução parece um pouco espartana, mesmo com o -=mailatalho. Não suporta UTF8 . Existe o papsque é descrito como ' Conversor UTF-8 para PostScript usando Pango ' e atualmente não inclui suporte para margens, layout de e-mail ou algo parecido.

mp: bom cabeçalho padrão. Novamente, não há suporte para UTF8. As margens padrão são ridiculamente pequenas - se você especificar margens maiores, o texto do corpo será impresso atrás do rodapé.

enscript: -Gpara cabeçalhos de página sofisticados é realmente sofisticado. Sem suporte UTF8 .

O que você usa no século 21 para imprimir seus e-mails do Mutt?

(Ele deve suportar saída UTF8, DIN A4 como PS e / ou PDF)

maxschlepzig
fonte
Excluí as notas sobre MIME porque o mutt não canaliza informações MIME para o print_command. Portanto, não é suficiente testar os comandos print_commands através do |comando (pipe) no mutt.
maxschlepzig
Comentários não são para discussão prolongada; esta conversa foi movida para o bate-papo .
terdon

Respostas:

19

Há também Muttprint . Ele faz suporte UTF-8 e sua saída parece decente por padrão. O Muttprint usa o LaTeX e fornece ganchos para personalização.

Como estou imprimindo e-mails de diferentes ambientes, não posso usar uma impressora padrão. Assim, eu o configurei (via ~/.muttrc) para usar um visualizador de PDF, onde posso selecionar dinamicamente uma impressora:

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

O Mktemp usa /tmp, por padrão. Para usar um diretório de cache personalizado:

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

Aliás, você pode definir print_decodedentro do muttrc para configurar se o comando print_ é capaz de decodificar MIME, codificações etc. por conta própria. Por padrão, ele é definido como yesque é a configuração certa para comandos como muttprint, enscriptetc.

Com relação às questões UTF-8 de a2ps, enscript e mp, podemos concluir que elas devem ser consideradas obsoletas. De fato, olhando as páginas do projeto, elas não parecem ser mantidas (por exemplo, a última notícia da página mp é de 2002 e menciona uma lista de endereços localizada na Sun).

maxschlepzig
fonte
Isso leva a uma falha de segurança: /tmp/$USER.psé altamente previsível por outros usuários. Use mktempcriar arquivos temporários! (Veja minha resposta ).
F. Hauri
@ F.Hauri, sim, confiar /tmp/$USER.psé bobagem. Eu atualizei minha resposta.
Maxschlepzig
O mktemp falhará se o arquivo já existir ou se o diretório não existir. Em caso de falha, o diretório do cache será preenchido com mensagens impressas indesejadas. Esta é a principal razão pela qual /tmp/*é excluído na reinicialização.
F. Hauri 23/05
mktempA razão de ser de F.Hauri, é evitar colisões de nomes de arquivos. Pode falhar por outros motivos, no entanto. Alterei o comando para que o muttprint seja executado apenas se o mktemp for bem-sucedido (suspeito que o muttprint tenha como padrão outro nome de arquivo quando festiver vazio). Portanto, agora você só acaba com um arquivo temporário restante se evince ou rm falharem. Considero isso improvável - e, se considerarem, considere manter o arquivo problemático uma ajuda para depurar o problema. Claro, /tmpé limpo automaticamente. Mas $HOMEé vantajoso para documentos confidenciais quando ele é criptografado, mas /tmpnão é.
Maxschlepzig
Use mktemp -p $HOME/.cache/mutt-XXXXXXXXXXneste caso, mas mktempé a ferramenta correta.
27717 F. Hauri
3

Você também pode considerar usar paps , que lê um arquivo codificado em UTF-8 e gera uma renderização em linguagem PostScript do arquivo. A renderização é feita através da criação de curvas de estrutura de tópicos através do backend do pango ft2.

Aaron Massey
fonte
3

Mais segura e utilizando menos papel, crie um wrapper:

Existe o meu comando de impressão para .muttrc:

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

E existe o conteúdo de "$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

Isso vai

  • crie um diretório temporário com segurança para armazenar o correio de impressão atual,
  • convertê-los para postscript, mas
    • se houver mais de uma página,
    • converta-os novamente, mas colocando 2 páginas por folha.
  • executar gvporque eu gosto, mas você pode executar qualquer outra ferramenta.
  • excluir diretório temporário na saída.
F. Hauri
fonte
Tem read tmpdir < <(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)uma vantagem sobre tmpdir=$(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)?
Maxschlepzig
@maxschlepzig para apenas 1 variável, na verdade não. Essa sintaxe pode ser útil para atribuir muitas variáveis ​​de uma só vez:read host foo foo ip < <(host google.com); echo $ip $host
F. Hauri
1

Aqui está uma receita simples que eu uso em diferentes UNIXes:

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

onde ••My_printer••é o nome da impressora.

dan
fonte
Squishing de todos os caracteres Unicode fora do repertório básico do Latin-1 parece provavelmente não o que o OP está procurando, e, portanto, no último milênio.
Tripleee