Симпатична роздрукована розсилка з барта?


16

Я знаю, що можу налаштувати команду друку в Mutt через .muttrc, наприклад:

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

Але яку команду друку я повинен використовувати для гарного друку?

Що ж, a2psвихід здається трохи спартанським, навіть із -=mailярликом. Він не підтримує UTF8 . Є те, papsщо описується як " UTF-8 для перетворювача PostScript за допомогою Pango ", і наразі не включає підтримку поля, макет електронної пошти чи щось подібне.

mp: хороший заголовок за замовчуванням. Знову немає підтримки UTF8. Поля за замовчуванням смішно невелике - якщо ви вказуєте більш широкі поля, текст основного тексту друкується позаду нижнього колонтитулу.

enscript: -Gдля фантазійних заголовків сторінок це справді фантазія. Немає підтримки UTF8 .

Що ви використовуєте в 21 столітті, щоб надрукувати свої листи від Mutt?

(Він повинен підтримувати вихід UTF8, DIN A4 у форматі PS та / або PDF)


Я видалив примітки про MIME, оскільки mutt не передає інформацію про MIME до print_command. Таким чином, недостатньо для тестування print_commands за допомогою команди |(pipe) у mutt.
maxschlepzig

Коментарі не для розширеного обговорення; ця розмова була переміщена до чату .
тердон

Відповіді:


19

Також є Muttprint . Це робить підтримку UTF-8 і його вихід виглядає пристойно за замовчуванням. Muttprint використовує LaTeX і забезпечує гачки для налаштування.

Оскільки я друкую листи з різних середовищ, я не можу використовувати принтер за замовчуванням. Таким чином, я налаштував це (через ~/.muttrc) використовувати переглядач PDF, де я можу динамічно вибрати принтер:

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

Mktemp /tmpза замовчуванням використовує. Для використання спеціального каталогу кеша:

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

Btw, ви можете встановити print_decodeвсередині muttrc, щоб налаштувати, чи може print_command самостійно декодувати MIME, кодування тощо. За замовчуванням встановлено yesправильне значення для таких команд, як muttprintі enscriptт.д.

Що стосується питань UTF-8 для a2ps, enccript та mp, можна просто зробити висновок, що їх слід вважати застарілими. Дійсно, дивлячись на сторінки проекту, вони, здається, не підтримуються (наприклад, останній новинний сайт mp - це з 2002 року, і він згадує список розсилки, розміщений у Sun).


Це призводить до вад безпеки: /tmp/$USER.psдуже передбачувано іншими користувачами. Використовуйте mktempстворення тимчасових файлів! (Дивіться мою відповідь ).
Ф. Хаурі

@ F.Hauri, так, покладатися на /tmp/$USER.psглупо. Я оновив свою відповідь.
maxschlepzig

mktemp вийде з ладу, якщо файл вже існує або якщо його немає. У разі відмови ваш каталог кешу заповниться небажаними надрукованими повідомленнями. Це основна причина, чому /tmp/*видаляється при перезавантаженні.
Ф. Хаурі

@ F.Hauri, mktempпричиною цього є уникнення зіткнень імен файлів. Однак це може не вдатися з інших причин. Я змінив команду таким чином, що muttprint виконується лише в тому випадку, коли mktemp був успішним (я підозрюю, що muttprint за замовчуванням застосовується до якогось іншого імені файлу, коли fвоно порожнє). Таким чином, тепер ви закінчуєте лише тимчасовий файл, що залишився, лише якщо evince чи rm не вдалося. Я вважаю це малоймовірним - і якщо вони будуть, я вважаю, що проблемний файл збереже допомогу для налагодження проблеми. Звичайно, /tmpавтоматично прибирається. Але $HOMEце вигідно для чутливих документів, коли вони зашифровані, але /tmpце не так.
maxschlepzig

Використовуйте mktemp -p $HOME/.cache/mutt-XXXXXXXXXXв цьому випадку, але mktempце правильний інструмент.
Ф. Хаурі

3

Ви також можете скористатися папсами , які читають закодований файл UTF-8 і генерують файл, який надає мову PostScript. Візуалізація здійснюється шляхом створення контурних кривих через підсистему pango ft2.


3

Більш безпечно і використовуючи менше паперу, створіть wrapper:

Є моя команда друку для .muttrc:

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

І є зміст "$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

Це буде

  • надійно створити тимчасовий редактор для зберігання поточної поштової пошти,
  • конвертувати їх у постскрипт, але
    • якщо є більше 1 сторінки,
    • конвертуйте їх знову, але розміщуючи 2 сторінки за аркушем.
  • запустити, gvбо мені це подобається, але ти можеш запустити будь-який інший інструмент.
  • видалити тимчасовий каталог при виході.

Має read tmpdir < <(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)перевагу над tmpdir=$(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)?
maxschlepzig

@maxschlepzig лише для 1 змінної, не дуже. Цей синтаксис може бути корисним для призначення одразу багатьох змінних:read host foo foo ip < <(host google.com); echo $ip $host
Ф. Хаурі

1

Ось простий прийом, який я використовую в різних UNIX:

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

де ••My_printer••назва принтера.


Нарізка всіх символів Unicode за межами базового репертуару Latin-1 видається, ймовірно, не тим, що шукає ОП, і так минулого тисячоліття.
трійчатка
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.