This is probably old hat to most of you, but I didn't know about this nifty trick myself and discovered it worked very well with mutt. Problem: You ssh/telnet from a Windows machine and use Mutt for reading mail. You want to easily print your mail on your local Windows desktop printer. Solution: ANSI supports printing, if you use e.g. SecureCRT for ssh connection, you can have SecureCRT trap print-sequences and send them to your local printer. And if you use a2ps for formatting, it will look good too (and you can add "page 1 of 4" etc.) This is how: We found a small code-snippet in the (ugh) Pine contribution directory. We compiled it simply with "cc ansiprt.c -o lpransi". In the .muttrc file you must add something like set print_cmd="a2ps <options> | lpransi" or if you don't want postscript, simply: set print_cmd="cat - | lpransi" (do we need the "cat -", or is print_cmd="lpransi" enough?) This worked perfectly with our local printers. Note that you can use this (probably) on any system, but we only tested on Windows (probably depends on your telnet/ssh client, printer settings, and so on). This is the file ansiprt.c that we found is attached. Apologies to those who are grimacing right because this was completely mandatory to all people that use Mutt. :-) Cheers! -- Christian Stigen Larsen -- http://www.sublevel3.org [EMAIL PROTECTED] http://www.stud.ntnu.no/~chrisl/
/* * ansiprt.c * * Simple filter to wrap ANSI media copy escape sequences around * text on stdin. Writes /dev/tty to get around things that might be * trapping stdout. This is actually a feature because it was written * to be used with pine's personal print option set up to take "enscript" * output and send it displayward to be captured/printed to a postscript * device. Pine, of course, uses popen() to invoke the personal print * command, and interprets stdout as diagnostic messages from the command. * * Michael Seibel, [EMAIL PROTECTED] * * 21 Apr 92 * */ #include <stdio.h> #include <sys/file.h> #define BUFSIZ 8192 main(argc, argv) int argc; char **argv; { char c[BUFSIZ]; int n, d; int ctrld = 0; if(argc > 1){ n = 0; while(argc > ++n){ if(argv[n][0] == '-'){ switch(argv[n][1]){ case 'd': ctrld++; break; default : fprintf(stderr,"unknown option: %c\n", argv[n][1]); break; } } } } if((d=open("/dev/tty",O_WRONLY)) < 0){ perror("/dev/tty"); exit(1); } write(d,"\033[5i", 4); while((n=read(0, c, BUFSIZ)) > 0) write(d, c, n); if(ctrld) write(d, "\004", 1); write(d,"\033[4i", 4); close(d); }