Ładne maile z nadrukiem?

16

Wiem, że mogę skonfigurować polecenie drukowania w Mutt za pomocą .muttrcnp .:

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

Ale jakiego polecenia drukowania powinienem używać do ładnego drukowania?

Cóż, a2pswynik wydaje się nieco spartański, nawet za pomocą -=mailskrótu. Nie obsługuje UTF8 . Jest to, papsco jest opisane jako „ Konwerter UTF-8 na PostScript przy użyciu Pango ” i obecnie nie obejmuje obsługi marginesów, układu wiadomości e-mail ani czegoś takiego.

mp: ładny domyślny nagłówek. Ponownie brak obsługi UTF8. Domyślne marginesy są absurdalnie małe - jeśli określisz szersze marginesy, tekst podstawowy zostanie wydrukowany za stopką.

enscript: -Gdla fantazyjnych nagłówki stron są naprawdę fantazyjne. Brak obsługi UTF8 .

Czego używasz w XXI wieku do drukowania maili od Mutt?

(Powinien obsługiwać wyjście UTF8, DIN A4 jako PS i / lub PDF)

maxschlepzig
źródło
Usunąłem notatki o MIME, ponieważ mutt nie przesyła informacji MIME do print_command. W związku z tym nie wystarczy przetestować komend print_poland za pomocą polecenia |(pipe) w mutt.
maxschlepzig
Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
terdon

Odpowiedzi:

19

Istnieje również Muttprint . To nie obsługuje UTF-8 i jego wyjście wygląda przyzwoity domyślnie. Muttprint korzysta z LaTeX i zapewnia haki do personalizacji.

Ponieważ drukuję wiadomości e-mail z różnych środowisk, nie mogę używać domyślnej drukarki. Dlatego skonfigurowałem (za pomocą ~/.muttrc), aby korzystać z przeglądarki PDF, w której mogę dynamicznie wybierać drukarkę:

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

Domyślnie Mktemp używa /tmp. Aby użyć niestandardowego katalogu pamięci podręcznej:

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

Przy okazji, możesz ustawić print_decodewewnątrz muttrc, aby skonfigurować, czy komenda print_ jest w stanie samodzielnie dekodować MIME, kodowanie itp. Domyślnie jest on ustawiony do yesktórych jest właściwym ustawieniem dla poleceń, takich jak muttprint, enscriptetc.

Jeśli chodzi o kwestie UTF-8 a2ps, enscript i mp, można po prostu stwierdzić, że należy je uznać za przestarzałe. Rzeczywiście, patrząc na strony projektu, wydaje się, że nie są utrzymywane (np. Ostatni news strony mp pochodzi z 2002 roku i wspomina o liście mailingowej znajdującej się w Sun).

maxschlepzig
źródło
Prowadzi to do usterki bezpieczeństwa: /tmp/$USER.psjest wysoce przewidywalna dla innych użytkowników. Użyj mktemptworzenia plików tymczasowych! (Zobacz moją odpowiedź ).
F. Hauri
@ F.Hauri, tak, poleganie na /tmp/$USER.psjest głupie. Zaktualizowałem swoją odpowiedź.
maxschlepzig
mktemp zakończy się niepowodzeniem, jeśli plik już istnieje lub katalog nie istnieje. W przypadku awarii katalog pamięci podręcznej wypełni się niechcianymi wydrukowanymi wiadomościami e-mail. Jest to główny powód, dla którego /tmp/*jest usuwany przy ponownym uruchomieniu.
F. Hauri
@ F.Hauri, mktempracją bytu jest unikanie kolizji nazw plików. Może jednak zawieść z innych powodów. Zmieniłem polecenie tak, aby muttprint był wykonywany tylko wtedy, gdy mktemp się powiódł (podejrzewam, że muttprint domyślnie będzie używał innej nazwy pliku, gdy fbędzie pusty). Tak więc teraz kończysz się plikiem tymczasowym, jeśli evince lub rm zawiedzie. Uważam to za mało prawdopodobne - a jeśli tak, to uważam, że problematyczny plik zachował pomoc przy debugowaniu problemu. Jasne, /tmpjest automatycznie czyszczony. Jest $HOMEto jednak korzystne dla poufnych dokumentów, gdy jest szyfrowane, ale /tmpnie jest.
maxschlepzig
Użyj mktemp -p $HOME/.cache/mutt-XXXXXXXXXXw tym przypadku, ale mktempjest to właściwe narzędzie.
F. Hauri
3

Możesz także rozważyć użycie paps , który odczytuje plik zakodowany w UTF-8 i generuje renderowanie pliku w języku PostScript. Renderowanie odbywa się poprzez tworzenie krzywych konturu poprzez backend pango ft2.

Aaron Massey
źródło
3

Bardziej bezpieczne i zużywające mniej papieru, utwórz wrapper:

Istnieje moje polecenie drukowania dla .muttrc:

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

I jest treść "$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

To będzie

  • bezpiecznie utwórz tymczasowy katalog do przechowywania bieżącej poczty do drukowania,
  • przekonwertować je na PostScript, ale
    • jeśli jest więcej niż 1 strona,
    • przekonwertuj je ponownie, ale umieszczając 2 strony na arkuszu.
  • uruchom, gvbo mi się podoba, ale możesz uruchomić dowolne inne narzędzie.
  • usuń katalog tymczasowy przy wyjściu.
F. Hauri
źródło
Czy read tmpdir < <(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)ma przewagę tmpdir=$(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)?
maxschlepzig
@maxschlepzig tylko dla 1 zmiennej, nie do końca. Ta składnia może być przydatna do przypisywania wielu zmiennych jednocześnie:read host foo foo ip < <(host google.com); echo $ip $host
F. Hauri
1

Oto prosty przepis, którego używam w różnych systemach UNIX:

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

gdzie ••My_printer••jest nazwa drukarki.

dan
źródło
Wyciąganie wszystkich znaków Unicode poza podstawowy repertuar Latin-1 wydaje się prawdopodobnie nie tym, czego szuka OP, i tak w ostatnim tysiącleciu.
tripleee