Довольно печатать письма от дурака?

16

Я знаю, что могу настроить команду печати в Mutt через .muttrc, например:

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

Но какую команду печати я должен использовать для довольно печати?

Ну, a2psвывод кажется немного спартанским, даже с -=mailярлыком. Он не поддерживает UTF8 . Существует papsописание, которое называется « конвертер UTF-8 в PostScript с использованием Pango » и в настоящее время не включает поддержку полей, макета электронной почты или чего-то в этом роде.

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

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

Что вы используете в 21-м веке для печати ваших писем от Матта?

(Он должен поддерживать UTF8, вывод DIN A4 в формате PS и / или PDF)

maxschlepzig
источник
Я удалил заметки о MIME, потому что Mutt не передает информацию MIME в print_command. Таким образом, недостаточно протестировать команды print_comm с помощью команды |(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"'

Кстати, вы можете установить print_decodeвнутри muttrc конфигурацию, если print_command способен самостоятельно декодировать MIME, кодировки и т. Д. По умолчанию установлено, yesчто это правильная настройка для таких команд, как muttprint,enscript т. Д.

Относительно UTF-8 проблем a2ps, enscript и mp можно просто сделать вывод, что их следует считать устаревшими. Действительно, если смотреть на страницы проекта, они, похоже, не поддерживаются (например, последняя новость на странице mp относится к 2002 году и упоминает список рассылки, расположенный в Sun).

maxschlepzig
источник
Это приводит к недостатку безопасности: /tmp/$USER.psэто очень предсказуемо для других пользователей. Используйте mktempсоздание временных файлов! (См. Мой ответ ).
Ф. Хаури
@ Ф.Хаури, да, полагаться на /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

Вы также можете использовать paps , который читает файл в кодировке 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••имя принтера.

Дан
источник
Сжатие всех символов Юникода за пределами основного репертуара Latin-1 кажется, вероятно, не тем, что ищет OP, и так в прошлом тысячелетии.
tripleee