Hübsche Print-Mails von Mutt?

16

Ich weiß, dass ich in Mutt einen Druckbefehl konfigurieren kann über .muttrczB:

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

Aber welchen Druckbefehl soll ich für hübsches Drucken verwenden?

Nun, die a2psAusgabe erscheint trotz der -=mailVerknüpfung ein wenig spartanisch . Es ist nicht UTF8 unterstützt . Es gibt einen paps' UTF-8 in PostScript-Konverter mit Pango ', der derzeit keine Unterstützung für Ränder, E-Mail-Layout oder ähnliches bietet.

mp: Nizza Standard-Header. Wieder keine UTF8-Unterstützung. Standardränder sind lächerlich klein - wenn Sie breitere Ränder angeben, wird der Haupttext hinter der Fußzeile gedruckt.

enscript: -Gfür ausgefallene Kopfzeilen ist das in der Tat ausgefallen. Keine UTF8- Unterstützung .

Was verwenden Sie im 21. Jahrhundert, um Ihre Mails von Mutt zu drucken?

(Es sollte UTF8, DIN A4 Ausgabe als PS und / oder PDF unterstützen)

maxschlepzig
quelle
Ich habe die Notizen zu MIME gelöscht, weil mutt keine MIME-Informationen an die weiterleitet print_command. Daher reicht es nicht aus, print_commands über den |Befehl (pipe) in mutt zu testen .
maxschlepzig
Kommentare sind nicht für eine längere Diskussion gedacht. Diese Unterhaltung wurde in den Chat verschoben .
terdon

Antworten:

19

Es gibt auch Muttprint . Es tut Unterstützung UTF-8 und seine Ausgabe sieht standardmäßig anständig. Muttprint verwendet LaTeX und stellt Hooks zur Anpassung bereit.

Da ich Mails aus verschiedenen Umgebungen drucke, kann ich keinen Standarddrucker verwenden. Daher habe ich es so eingerichtet (via ~/.muttrc), dass es einen PDF-Viewer verwendet, in dem ich dynamisch einen Drucker auswählen kann:

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

Mktemp verwendet /tmpstandardmäßig. So verwenden Sie ein benutzerdefiniertes Cache-Verzeichnis:

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

Übrigens können Sie print_decodein muttrc konfigurieren, ob der Befehl print_command MIME, Codierungen usw. selbst decodieren kann. Standardmäßig ist festgelegt, yeswelche Einstellung für Befehle wie usw. die richtige muttprintist enscript.

In Bezug auf die UTF-8-Ausgaben von a2ps, enscript und mp kann man nur den Schluss ziehen, dass sie als veraltet gelten sollten. Betrachtet man die Projektseiten, so scheinen diese nicht gepflegt zu sein (zB die letzte Nachricht auf der mp-Seite stammt aus dem Jahr 2002 und erwähnt eine Mailingliste bei Sun).

maxschlepzig
quelle
Dies führt zu einer Sicherheitslücke: /tmp/$USER.psist für andere Benutzer sehr vorhersehbar. Verwenden Sie mktemptemporäre Dateien erstellen! (Siehe meine Antwort ).
F. Hauri
@ F.Hauri, ja, sich darauf zu verlassen /tmp/$USER.psist doof . Ich habe meine Antwort aktualisiert.
Maxschlepzig
mktemp schlägt fehl, wenn die Datei bereits existiert oder das Verzeichnis nicht existiert. Bei einem Fehler wird Ihr Cache-Verzeichnis mit unerwünschten gedruckten Mails gefüllt. Dies ist der Hauptgrund, warum /tmp/*beim Neustart gelöscht wird.
F. Hauri
@ F.Hauri, mktempdas Ziel ist es, Kollisionen mit Dateinamen zu vermeiden. Es kann jedoch aus anderen Gründen fehlschlagen. Ich habe den Befehl so geändert, dass muttprint nur ausgeführt wird, wenn mktemp erfolgreich war (ich vermute, dass muttprint standardmäßig einen anderen Dateinamen verwendet, wenn fleer ist). Somit haben Sie nur dann eine übrig gebliebene temporäre Datei, wenn evince oder rm fehlschlagen. Ich halte dies für unwahrscheinlich - und wenn doch, halte ich die problematische Datei für eine Hilfe beim Debuggen des Problems. Klar, /tmpwird automatisch aufgeräumt. Ist $HOMEaber für sensible Dokumente von Vorteil, wenn es verschlüsselt ist aber /tmpnicht.
Maxschlepzig
Verwenden Sie mktemp -p $HOME/.cache/mutt-XXXXXXXXXXin diesem Fall aber mktempdas richtige Werkzeug.
F. Hauri
3

Sie können auch die Verwendung von paps in Betracht ziehen , das eine UTF-8-codierte Datei liest und ein PostScript-Rendering der Datei generiert. Das Rendern erfolgt durch Erstellen von Umrisskurven über das pango ft2-Backend.

Aaron Massey
quelle
3

Erstellen Sie sicherer und mit weniger Papier Folgendes wrapper:

Es gibt meinen Druckbefehl für .muttrc:

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

Und da ist der Inhalt von "$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

Dieser Wille

  • sichere Erstellung eines temporären Verzeichnisses zum Speichern der aktuellen Druckmail,
  • konvertieren sie nach postscript, aber
    • Wenn es mehr als eine Seite gibt,
    • konvertiere sie erneut, aber lege 2 Seiten pro Blatt.
  • laufe gvweil es mir gefällt, aber du könntest jedes andere tool laufen lassen.
  • Temporäres Verzeichnis beim Beenden löschen.
F. Hauri
quelle
Hat read tmpdir < <(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)einen Vorteil gegenüber tmpdir=$(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)?
Maxschlepzig
@maxschlepzig für nur 1 Variable, nicht wirklich. Diese Syntax kann nützlich sein, um viele Variablen gleichzeitig zuzuweisen:read host foo foo ip < <(host google.com); echo $ip $host
F. Hauri,
1

Hier ist ein einfaches Rezept, das ich unter verschiedenen UNIX-Betriebssystemen verwende:

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

wo ••My_printer••ist der Name des Druckers.

Dan
quelle
Das Zerquetschen aller Unicode-Zeichen außerhalb des grundlegenden Latin-1-Repertoires scheint wahrscheinlich nicht das zu sein, wonach das OP sucht, und somit das letzte Jahrtausend.
Tripleee