똥에서 예쁜 메일을 인쇄?


16

나는 다음을 통해 Mutt에서 인쇄 명령을 구성 할 수 있음을 알고 있습니다 .muttrc.

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

그러나 예쁜 인쇄를 위해 어떤 인쇄 명령을 사용해야 합니까?

글쎄, a2ps출력은 -=mail지름길 조차도 약간 스파르타 인 것 같습니다 . 그것은 UTF8을 지원하지 않습니다 . 이 paps'로 설명되는 Pango가를 사용하여 포스트 스크립트 변환기 UTF-8 '현재 마진에 대한 지원 또는 이메일 레이아웃이나 그런 일을 포함하지 않습니다.

mp: 좋은 기본 헤더. UTF8도 지원하지 않습니다. 기본 여백은 엄청나게 작습니다. 더 큰 여백을 지정하면 본문 텍스트가 바닥 글 뒤에 인쇄됩니다.

enscript: -G멋진 페이지 헤더의 경우 실제로 훌륭합니다. UTF8이 지원 되지 않습니다 .

Mutt에서 메일을 인쇄하기 위해 21 세기에 무엇을 사용하십니까?

(PS 및 / 또는 PDF로 UTF8, DIN A4 출력을 지원해야합니다)


mutt이 MIME 정보를에 파이프하지 않기 때문에 MIME에 대한 메모를 삭제했습니다 print_command. 따라서 |(pipe) 명령을 통해 print_commands를 mutt 으로 테스트하는 것만으로는 충분하지 않습니다 .
maxschlepzig

의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
terdon

답변:


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_decodeprint_command가 자체적으로 MIME, 인코딩 등을 디코딩 할 수 있는지 구성하기 위해 muttrc 내부를 설정할 수 있습니다. 기본적으로는로 설정되어 yes있는 같은 명령에 적합한 설정입니다 muttprint, enscript

a2ps, enscript 및 mp의 UTF-8 문제와 관련하여 그것들은 쓸모없는 것으로 간주되어야한다고 결론 지을 수 있습니다. 실제로, 유지되지 않는 프로젝트 페이지를 보면 (예 : mp 페이지의 최신 뉴스 항목은 2002 년이며 Sun에있는 메일 링리스트를 언급합니다).


이로 인해 보안 결함 /tmp/$USER.ps이 발생합니다. 다른 사용자가 예측할 수 있습니다. mktemp임시 파일 작성을 사용하십시오 ! ( 내 답변 참조 ).
F. Hauri

@ F.Hauri, 의지하는 /tmp/$USER.ps것은 바보입니다. 내 답변을 업데이트했습니다.
maxschlepzig

파일이 이미 존재하거나 디렉토리가 없으면 mktemp가 실패합니다. 실패하면 캐시 디렉토리가 원치 않는 인쇄 된 메일로 채워집니다. 이것이 /tmp/*재부팅시 삭제 되는 주된 이유 입니다.
F. Hauri

@ F.Hauri, mktemp'raison d' être는 파일 이름 충돌을 피하는 것입니다. 그러나 다른 이유로 실패 할 수 있습니다. mktemp가 성공한 경우에만 muttprint가 실행되도록 명령을 변경했습니다 ( f비어 있을 때 muttprint가 다른 파일 이름으로 기본 설정되어 있다고 생각합니다 ). 따라서 이제 evince 또는 rm이 실패하면 남은 임시 파일 만 남게됩니다. 나는 이것을 가능성이 거의 없다고 생각한다. 만약 그들이 문제가된다면 문제가있는 파일이 문제 디버깅을위한 도움을 유지하는 것을 고려한다. 물론 /tmp자동으로 정리됩니다. 그러나 $HOME민감한 문서는 암호화되었지만 /tmp그렇지 않은 경우에 유리합니다 .
maxschlepzig 16:25에

사용 mktemp -p $HOME/.cache/mutt-XXXXXXXXXX이 경우,하지만 mktemp올바른 도구입니다.
F. Hauri

3

UTF-8로 인코딩 된 파일을 읽고 파일의 포스트 스크립트 언어 렌더링을 생성하는 paps 사용을 고려할 수도 있습니다 . 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

이것은 것입니다

  • 현재 인쇄 메일을 저장할 임시 디렉토리를 안전하게 작성하십시오.
  • 포스트 스크립트로 변환하지만
    • 페이지가 두 개 이상인 경우
    • 다시 변환하지만 한 장에 2 페이지를 넣습니다.
  • gv내가 좋아하기 때문에 실행 하지만 다른 도구를 실행할 수 있습니다.
  • 종료시 임시 디렉토리를 삭제하십시오.

가지고 read tmpdir < <(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)보다 유리한 tmpdir=$(mktemp -d /tmp/print_preview-$USER-XXXXXXXX)?
maxschlepzig 21:53에

실제로는 아니지만 1 개의 변수에 대해서만 @maxschlepzig. 이 구문은 한 번에 많은 변수를 할당하는 데 유용 할 수 있습니다.read host foo foo ip < <(host google.com); echo $ip $host
F. Hauri

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.