พิมพ์จดหมายสวย ๆ จาก mutt ไหม?


16

ฉันรู้ว่าฉันสามารถกำหนดค่าคำสั่งการพิมพ์ใน Mutt ผ่าน.muttrcเช่น:

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

แต่ฉันควรใช้คำสั่ง print สำหรับการพิมพ์ที่สวย

ดีa2psเอาท์พุทดูเหมือนว่าสปาร์ตันนิด ๆ หน่อย ๆ แม้จะมี-=mailทางลัด มันไม่สนับสนุน UTF8 มีpapsซึ่งจะอธิบายว่า ' UTF-8 เพื่อแปลง PostScript ใช้ Pangoและขณะนี้ไม่รวมถึงการสนับสนุนสำหรับอัตรากำไรขั้นต้นหรือรูปแบบอีเมล์หรือสิ่งที่ต้องการ

mp: ส่วนหัวเริ่มต้นที่ดี ไม่มีการรองรับ UTF8 อีกครั้ง ระยะขอบเริ่มต้นมีขนาดเล็กขัน - หากคุณระบุระยะขอบที่กว้างขึ้นข้อความร่างกายจะถูกพิมพ์ด้านหลังส่วนท้าย

enscript: -Gสำหรับส่วนหัวของหน้าแฟนซีเป็นแฟนซีแน่นอน ไม่มี UTF8 สนับสนุน

คุณใช้อะไรในศตวรรษที่ 21 เพื่อพิมพ์จดหมายจาก Mutt

(ควรสนับสนุน UTF8, DIN A4 เอาต์พุตเป็น PS และ / หรือ PDF)


ฉันลบบันทึกเกี่ยวกับ MIME เพราะโง่ไม่ได้ข้อมูล MIME print_commandท่อไป ดังนั้นจึงไม่เพียงพอที่จะทดสอบ|คำสั่งprint_ ผ่านคำสั่ง (pipe) ในรูปแบบ 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"'

อย่างไรก็ตามคุณสามารถตั้งค่าprint_decodeภายใน muttrc เพื่อกำหนดค่าหาก print_command สามารถถอดรหัส MIME การเข้ารหัสและอื่น ๆ ได้ด้วยตัวเอง โดยค่าเริ่มต้นมันเป็นชุดyesซึ่งเป็นที่เหมาะสมสำหรับการตั้งค่าคำสั่งเช่นmuttprint, enscriptฯลฯ

เกี่ยวกับปัญหา UTF-8 ของ a2ps, enscript และ mp one สามารถสรุปได้ว่าพวกเขาควรได้รับการพิจารณาว่าล้าสมัย ที่จริงแล้วการดูหน้าโครงการที่ดูเหมือนจะไม่ได้รับการดูแลรักษา (เช่นรายการข่าวล่าสุดของหน้า mp คือจากปี 2002 และกล่าวถึงรายชื่อผู้รับจดหมายที่ Sun)


สิ่งนี้นำไปสู่ข้อบกพร่องด้านความปลอดภัย: /tmp/$USER.psคาดการณ์ได้สูงจากผู้ใช้รายอื่น ใช้mktempสร้างไฟล์ชั่วคราว! (ดูคำตอบของฉัน )
F. Hauri

@ F.Hauri ใช่พึ่ง/tmp/$USER.psเป็นคนโง่ ฉันอัพเดตคำตอบแล้ว
maxschlepzig

mktemp จะล้มเหลวหากไฟล์มีอยู่แล้วหรือหากไดเร็กทอรีไม่มี เมื่อล้มเหลวไดเรกทอรีแคชของคุณจะเต็มไปด้วยอีเมลที่ไม่พึงประสงค์ นี่คือเหตุผลหลักว่าทำไม/tmp/*ถูกลบเมื่อรีบูต
F. Hauri

@ F.Hauri, mktempraison d'êtreคือการหลีกเลี่ยงการชนกันของชื่อไฟล์ มันอาจล้มเหลวด้วยเหตุผลอื่นแม้ว่า ฉันได้เปลี่ยนคำสั่งเช่นว่า muttprint จะทำงานเฉพาะเมื่อ mktemp ประสบความสำเร็จ (ฉันสงสัยว่า muttprint จะใช้ชื่อไฟล์อื่นfเป็นค่าเริ่มต้นเมื่อว่างเปล่า) ดังนั้นตอนนี้คุณจะจบลงด้วยไฟล์ temp ที่เหลือหาก evince หรือ rm ล้มเหลว ฉันพิจารณาเรื่องนี้ไม่น่า - และหากพวกเขาพิจารณาว่าไฟล์ที่มีปัญหายังคงมีความช่วยเหลือในการแก้ไขข้อบกพร่อง แน่นอนว่าได้/tmpรับการทำความสะอาดโดยอัตโนมัติ แต่$HOMEจะเป็นประโยชน์สำหรับเอกสารสำคัญเมื่อถูกเข้ารหัส แต่/tmpไม่ใช่
maxschlepzig

ใช้mktemp -p $HOME/.cache/mutt-XXXXXXXXXXในกรณีนี้ แต่mktempเป็นเครื่องมือที่ถูกต้อง
F. Hauri

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

นี่จะ

  • สร้าง dir ชั่วคราวอย่างปลอดภัยเพื่อเก็บจดหมายการพิมพ์ปัจจุบัน
  • แปลงเป็น postscript แต่
    • หากมีมากกว่า 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
F. Hauri

1

นี่คือสูตรง่าย ๆ ที่ฉันใช้กับยูนิกซ์ที่ต่างกัน:

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

ที่••My_printer••เป็นชื่อของเครื่องพิมพ์


การแยกอักขระ Unicode ทั้งหมดออกจากรายการ Latin-1 พื้นฐานดูเหมือนว่าอาจไม่ใช่สิ่งที่ OP กำลังมองหาและเป็นสหัสวรรษที่ผ่านมา
tripleee
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.