Thư in khá đẹp từ mutt?


16

Tôi biết rằng tôi có thể định cấu hình lệnh in trong Mutt thông qua .muttrc, ví dụ:

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

Nhưng tôi nên sử dụng lệnh in nào để in đẹp ?

Vâng, a2psđầu ra có vẻ một chút spartan, ngay cả với các -=mailphím tắt. Nó không hỗ trợ UTF8 . Có papscái được mô tả là 'Bộ chuyển đổi UTF-8 sang PostScript bằng Pango ' và hiện tại không bao gồm hỗ trợ cho lề, hoặc bố cục Email hoặc một cái gì đó tương tự.

mp: tiêu đề mặc định đẹp. Một lần nữa không hỗ trợ UTF8. Lề mặc định rất nhỏ một cách lố bịch - nếu bạn chỉ định lề rộng hơn, văn bản cơ thể được in phía sau chân trang.

enscript: -Gcho tiêu đề trang ưa thích thực sự là lạ mắt. Không hỗ trợ UTF8 .

Bạn sử dụng gì trong thế kỷ 21 để in thư từ Mutt?

(Nó nên hỗ trợ đầu ra UTF8, DIN A4 dưới dạng PS và / hoặc PDF)


Tôi đã xóa các ghi chú về MIME vì mutt không chuyển thông tin MIME sang print_command. Do đó, không đủ để kiểm tra print_commands thông qua lệnh |(pipe) trong mutt.
maxschlepzig

Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
terdon

Câu trả lời:


19

Ngoài ra còn có Muttprint . Nó không hỗ trợ UTF-8 và mặc định đầu ra của nó trông khá ổn. Muttprint sử dụng LaTeX và cung cấp các hook để tùy chỉnh.

Vì tôi đang in thư từ các môi trường khác nhau nên tôi không thể sử dụng máy in mặc định. Do đó, tôi đã thiết lập (thông qua ~/.muttrc) để sử dụng trình xem PDF nơi tôi có thể tự động chọn máy in:

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

Mktemp sử dụng /tmp, theo mặc định. Để sử dụng thư mục bộ đệm tùy chỉnh:

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

Btw, bạn có thể đặt print_decodebên trong muttrc để định cấu hình nếu print_command có thể tự giải mã MIME, mã hóa, v.v. Theo mặc định, nó được đặt thành cài đặt yesphù hợp cho các lệnh như muttprint, enscriptv.v.

Liên quan đến các vấn đề UTF-8 của a2ps, ký hiệu và mp người ta chỉ có thể kết luận rằng chúng nên được coi là lỗi thời. Thật vậy, nhìn vào các trang dự án mà chúng dường như không được duy trì (ví dụ: mục tin tức mới nhất của trang mp là từ năm 2002 và nó đề cập đến một danh sách gửi thư được đặt tại Sun).


Điều này dẫn đến một lỗ hổng bảo mật: /tmp/$USER.psrất khó dự đoán bởi những người dùng khác. Sử dụng mktemptạo tập tin tạm thời! (Xem câu trả lời của tôi ).
F. Hauri

@ F.Hauri, vâng, dựa vào /tmp/$USER.pslà ngớ ngẩn. Tôi đã cập nhật câu trả lời của mình.
maxschlepzig

mktemp sẽ thất bại nếu tập tin đã tồn tại hoặc nếu thư mục không. Khi thất bại, thư mục bộ đệm của bạn sẽ điền vào các thư in không mong muốn. Đây là lý do chính tại sao /tmp/*bị xóa khi khởi động lại.
F. Hauri

@ F.Hauri, mktempraison d'être là để tránh va chạm tên tập tin. Nó có thể thất bại vì những lý do khác. Tôi đã thay đổi lệnh sao cho muttprint chỉ được thực thi nếu mktemp thành công (tôi nghi ngờ muttprint sẽ mặc định thành một số tên tệp khác khi ftrống). Vì vậy, bây giờ bạn chỉ kết thúc với một tệp tạm thời còn sót lại nếu chứng tỏ hoặc rm không thành công. Tôi xem xét điều này là không thể - và nếu họ thực sự xem xét việc có tệp có vấn đề giữ lại trợ giúp để gỡ lỗi vấn đề. Chắc chắn, /tmpđược tự động làm sạch lên. Nhưng $HOMElà thuận lợi cho các tài liệu nhạy cảm khi nó được mã hóa nhưng /tmpkhông.
maxschlepzig

Sử dụng mktemp -p $HOME/.cache/mutt-XXXXXXXXXXtrong trường hợp này, nhưng mktemplà công cụ chính xác.
F. Hauri

3

Bạn cũng có thể cân nhắc sử dụng paps , đọc tệp được mã hóa UTF-8 và tạo kết xuất ngôn ngữ PostScript của tệp. Việc kết xuất được thực hiện bằng cách tạo các đường cong phác thảo thông qua phần phụ trợ pango ft2.


3

An toàn hơn và sử dụng ít giấy hơn, tạo wrapper:

Có lệnh in của tôi cho .muttrc:

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

Và có nội dung của "$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

Điều này sẽ

  • tạo an toàn thư mục tạm thời để lưu trữ thư in hiện tại,
  • chuyển đổi chúng thành postcript, nhưng
    • nếu có nhiều hơn 1 trang,
    • chuyển đổi chúng một lần nữa, nhưng đặt 2 trang theo tờ.
  • chạy gvvì tôi thích nó, nhưng bạn có thể chạy bất kỳ công cụ nào khác.
  • xóa thư mục tạm thời khi thoát.

read tmpdir < <(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)lợi thế hơn tmpdir=$(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)?
maxschlepzig

@maxschlepzig chỉ có 1 biến, không thực sự. Cú pháp này có thể hữu ích khi gán nhiều biến cùng một lúc:read host foo foo ip < <(host google.com); echo $ip $host
F. Hauri

1

Đây là một công thức đơn giản tôi sử dụng trên các UNIX khác nhau:

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

nơi ••My_printer••là tên của máy in.


Squishing tất cả các ký tự Unicode bên ngoài các tiết mục Latin-1 cơ bản có vẻ như có lẽ không phải là thứ mà OP đang tìm kiếm, và vì vậy thiên niên kỷ qua.
tripleee
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.