¿Bastante imprimir correos de mutt?

16

Sé que puedo configurar un comando de impresión en Mutt a través de .muttrc, por ejemplo:

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

Pero, ¿qué comando de impresión debo usar para una impresión bonita ?

Bueno, la a2pssalida parece un poco espartana, incluso con el -=mailatajo. No es compatible con UTF8 . Existe el papsque se describe como ' Convertidor UTF-8 a PostScript usando Pango ' y actualmente no incluye soporte para márgenes, o diseño de correo electrónico o algo así.

mp: bonito encabezado predeterminado. Nuevamente no hay soporte para UTF8. Los márgenes predeterminados son ridículamente pequeños: si especifica márgenes más amplios, el texto del cuerpo se imprime detrás del pie de página.

enscript: -Gpara encabezados de página elegantes es realmente elegante. No hay soporte UTF8 .

¿Qué utilizas en el siglo XXI para imprimir tus correos de Mutt?

(Debe admitir UTF8, salida DIN A4 como PS y / o PDF)

maxschlepzig
fuente
Eliminé las notas sobre MIME porque mutt no canaliza información MIME al print_command. Por lo tanto, no es suficiente probar print_commands a través del |comando (pipe) en mutt.
maxschlepzig
Los comentarios no son para discusión extendida; Esta conversación se ha movido al chat .
terdon

Respuestas:

19

También hay Muttprint . Se hace de soporte UTF-8 y su salida se ve decente por defecto. Muttprint usa LaTeX y proporciona ganchos para la personalización.

Como estoy imprimiendo correos de diferentes entornos, no puedo usar una impresora predeterminada. Por lo tanto, lo configuré (a través de ~/.muttrc) para usar un visor de PDF donde puedo seleccionar dinámicamente una impresora:

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

Mktemp utiliza /tmp, por defecto. Para usar un directorio de caché personalizado:

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

Por cierto, puede configurar print_decodedentro de muttrc para configurar si print_command puede decodificar MIME, codificaciones, etc. por sí solo. De forma predeterminada, se establece yescuál es la configuración correcta para comandos como muttprint, enscriptetc.

Con respecto a los problemas de UTF-8 de a2ps, enscript y mp uno pueden concluir que deberían considerarse obsoletos. De hecho, al mirar las páginas del proyecto, parece que no se mantienen (por ejemplo, la última noticia de la página mp es de 2002 y menciona una lista de correo ubicada en Sun).

maxschlepzig
fuente
Esto conduce a una falla de seguridad: /tmp/$USER.pses altamente predecible por otros usuarios. Utilice mktempcrear archivos temporales! (Ver mi respuesta ).
F. Hauri
@ F.Hauri, sí, confiar /tmp/$USER.pses una tontería. He actualizado mi respuesta.
maxschlepzig
mktemp fallará si el archivo ya existe o si el directorio no. En caso de falla, su directorio de caché se llenará de correos impresos no deseados. Esta es la razón principal por la que /tmp/*se elimina al reiniciar.
F. Hauri
@ F.Hauri, mktempla razón de ser es evitar las colisiones de nombres de archivos. Sin embargo, puede fallar por otras razones. Cambié el comando de modo que muttprint solo se ejecute si mktemp fue exitoso (sospecho que muttprint usaría de manera predeterminada algún otro nombre de archivo cuando festé vacío). Por lo tanto, ahora solo termina con un archivo temporal sobrante si evince o rm fallan. Considero que esto es poco probable, y si lo hacen, considero que el archivo problemático conserve una ayuda para depurar el problema. Claro, /tmpse limpia automáticamente. Pero $HOMEes ventajoso para documentos confidenciales cuando está encriptado pero /tmpno lo está.
maxschlepzig
Úselo mktemp -p $HOME/.cache/mutt-XXXXXXXXXXen este caso, pero mktempes la herramienta correcta.
F. Hauri
3

También puede considerar el uso de paps , que lee un archivo codificado UTF-8 y genera una representación del archivo en lenguaje PostScript. El renderizado se realiza creando curvas de contorno a través del backend pango ft2.

Aaron Massey
fuente
3

Más seguro y con menos papel, cree un wrapper:

Hay mi comando de impresión para .muttrc:

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

Y existe el contenido 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

Esta voluntad

  • cree de forma segura el directorio temporal para almacenar el correo de impresión actual,
  • convertirlos a postscript, pero
    • si hay más de 1 página,
    • conviértalos nuevamente, pero poniendo 2 páginas por hoja.
  • ejecutar gvporque me gusta, pero podrías ejecutar cualquier otra herramienta.
  • Eliminar directorio temporal al salir.
F. Hauri
fuente
Tiene read tmpdir < <(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)una ventaja sobre tmpdir=$(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)?
maxschlepzig
@maxschlepzig para solo 1 variable, no realmente. Esta sintaxis podría ser útil para asignar muchas variables a la vez:read host foo foo ip < <(host google.com); echo $ip $host
F. Hauri
1

Aquí hay una receta simple que uso en diferentes UNIX:

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

donde ••My_printer••está el nombre de la impresora.

dan
fuente
Es probable que aplastar a todos los caracteres Unicode fuera del repertorio básico de Latin-1 probablemente no sea lo que está buscando el OP, y por lo tanto el último milenio.
tripleee