A print filter for e-mail that relies on a2ps and uses no temp files. The result of this application would be that an email message, read on stdin, would be formatted and then output (via the pipe to a2ps) to your system's printer.
#!/bin/sh # \ exec tclsh $0 ${1+"$@"} # Fun little mail message formatting tool. # Relies on a2ps. set data [ read stdin ] set output <html> set sig 0 set header 1 set recipients 0 set hpat {<b>\1</b><i>\2</i><br>} set spat {<b>\1</b><i><b>\2</b></i><br>} # the name of the print queue to use set printer hpmlknco1 # if you want a graphic in the upper right corner # of page 1. set graphic /home/pehrens/public_html/mutt_letter.gif if { [ file readable $graphic ] } { lappend output "<img align=right src=$graphic>" } foreach line [ split $data "\n" ] { set done 0 if { $header } { # handle header lines. if { [ regsub -nocase {^(Date:|Sent:|From:)(.+)$} $line $hpat line ] } { set recipients 0 set done 1 } # might be a long list of recipients... if { [ regsub -nocase {^(To:|Cc:)(.+)$} $line $hpat line ] } { set recipients 1 set done 1 } # will be the last line of contained message headers if { [ regsub -nocase {^(Subject:)(.+)$} $line $spat line ] } { set recipients 0 set done 1 } # will generally be the last line of the header if { [ regsub -nocase {^(X-mailer:)(.+)$} $line $hpat line ] } { set recipients 0 set done 1 } # if we had a long recipients list in the "To:" or # "Cc:" field if { ! $done && $recipients && ! [ regexp : $line ] } { set line <i>$line</i><br> set done 1 } else { set recipients 0 } # horizontal rule and blank line after header if { ! $done && $header } { set header 0 lappend output <hr><p><pre> } } # we have reached a quoted line if { [ regexp {^(>.+)$} $line ] } { set done 1 } # we have reached a line consisting solely of dashes. # this should signal the start of the signature if { [ regexp -- {^(-+)$} $line ] } { set line <p><p><pre><b> set sig 1 set done 1 } # we are in the body of the sig... if { $sig && ! [ string equal <p><p><pre><b> $line ] } { set done 1 } if { ! $done } { set line <b>$line</b> } # collect htmlized lines lappend output $line } set output [ join $output "\n" ] set out [ open "|a2ps --printer=$printer --pretty-print=html" a+ ] puts $out $output catch { close $out }
Looks nice to me, but I don't know anything about TCL. I'd like to use this is a filter, i.e. writing to STDOUT instead of printing. Replacing --printer=$printer by --output=- doesn't seem to work. Can someone help me? Thanks, Jan