Abbastanza stampa mail da Mutt?


16

So che posso configurare un comando di stampa in Mutt tramite .muttrc, ad esempio:

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

Ma quale comando di stampa dovrei usare per una stampa carina ?

Bene, l' a2psoutput sembra un po 'spartano, anche con la -=mailscorciatoia. Non supporta UTF8 . C'è quello papsche è descritto come " convertitore da UTF-8 a PostScript usando Pango " e attualmente non include il supporto per i margini, il layout e-mail o qualcosa del genere.

mp: bella intestazione predefinita. Ancora una volta nessun supporto UTF8. I margini predefiniti sono ridicolmente piccoli: se si specificano margini più ampi, il testo del corpo viene stampato dietro il piè di pagina.

enscript: -Gper le intestazioni di pagina fantasiose è davvero fantasia. Nessun supporto UTF8 .

Cosa usi nel 21 ° secolo per stampare le tue mail da Mutt?

(Dovrebbe supportare l'uscita UTF8, DIN A4 come PS e / o PDF)


Ho eliminato le note su MIME perché mutt non reindirizza le informazioni MIME a print_command. Pertanto, non è sufficiente testare i |comandi di stampa tramite il comando (pipe) in mutt.
maxschlepzig,

I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
terdon

Risposte:


19

C'è anche Muttprint . Si fa il supporto UTF-8 e la sua uscita sembra decente per impostazione predefinita. Muttprint utilizza LaTeX e fornisce hook per la personalizzazione.

Dal momento che sto stampando mail da diversi ambienti non posso usare una stampante predefinita. Quindi l'ho impostato (tramite ~/.muttrc) per utilizzare un visualizzatore PDF in cui posso selezionare dinamicamente una stampante:

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

Mktemp utilizza /tmp, per impostazione predefinita. Per utilizzare una directory cache personalizzata:

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

A proposito, puoi impostare print_decodedentro muttrc per configurare se il comando print_ è in grado di decodificare MIME, codifiche ecc. Da solo. Per impostazione predefinita, è impostato su yesquale è l'impostazione corretta per comandi come muttprint, enscriptecc.

Per quanto riguarda le questioni UTF-8 di a2ps, enscript e mp si può semplicemente concludere che dovrebbero essere considerate obsolete. In effetti, guardando le pagine del progetto non sembrano essere mantenute (ad esempio l'ultima notizia della pagina mp è del 2002 e menziona una mailing list situata su Sun).


Ciò ha portato a un difetto di sicurezza: /tmp/$USER.psè altamente prevedibile da altri utenti. Usa mktempcrea file temporanei! (Vedi la mia risposta ).
F. Hauri,

@ F.Hauri, sì, basandosi su /tmp/$USER.psè sciocco. Ho aggiornato la mia risposta.
maxschlepzig

mktemp fallirà se il file già esiste o se directory non fare. In caso di fallimento, la directory della cache si riempirà di mail indesiderate a stampa. Questo è il motivo principale per cui /tmp/*viene eliminato al riavvio.
F. Hauri,

@ F.Hauri, mktempla ragion d'essere è quella di evitare le collisioni di nomi di file. E potrebbe non riuscire per altri motivi, però. Ho cambiato il comando in modo tale che muttprint venga eseguito solo se mktemp ha avuto successo (sospetto che muttprint verrebbe automaticamente impostato su un altro nome file quando fè vuoto). Pertanto, ora si finisce con un file temporaneo rimasto solo se evince o rm falliscono. Lo considero improbabile e, se lo fanno, considero che il file problematico mantenga un aiuto per il debug del problema. Certo, /tmpviene pulita automaticamente. Ma $HOMEè vantaggioso per i documenti sensibili quando è crittografato ma /tmpnon lo è.
maxschlepzig,

Utilizzare mktemp -p $HOME/.cache/mutt-XXXXXXXXXXin questo caso, ma mktempè lo strumento corretto.
F. Hauri,

3

Si potrebbe anche considerare l'utilizzo di mammelle , che legge un file codificato UTF-8 e genera un rendering linguaggio PostScript del file. Il rendering viene eseguito creando curve di contorno attraverso il backend ft2 di pango.


3

Più sicuro e usando meno carta, crea un wrapper:

C'è il mio comando di stampa per .muttrc:

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

E c'è il contenuto di "$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

Questo sarà

  • creare in modo sicuro dir temporaneo per archiviare la posta di stampa corrente,
  • convertili in Postscript, ma
    • se c'è più di 1 pagina,
    • convertili di nuovo, ma inserendo 2 pagine per foglio.
  • corri gvperché mi piace, ma potresti eseguire qualsiasi altro strumento.
  • elimina la directory temporanea all'uscita.

Ha read tmpdir < <(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)un vantaggio rispetto tmpdir=$(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)?
maxschlepzig,

@maxschlepzig per 1 sola variabile, non proprio. Questa sintassi potrebbe essere utile per assegnare più variabili contemporaneamente:read host foo foo ip < <(host google.com); echo $ip $host
F. Hauri,

1

Ecco una semplice ricetta che uso su diversi UNIX:

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

dove ••My_printer••è il nome della stampante.


Spremere tutti i personaggi Unicode al di fuori del repertorio di base di Latin-1 sembra probabilmente non quello che l'OP sta cercando, e quindi lo scorso millennio.
tripleee
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.