Is xbiff just not quite enough for you? This is xlbiff, the X Literate Biff. Xlbiff lurks in the background, monitoring your mailbox file (normally /usr/spool/mail/). When something shows up there, it invokes the MH scan(1) command and displays the output in a window. If more mail comes in, it scans again and resizes accordingly. Clicking the left mouse button anywhere in the window causes it to vanish. It will also vanish if you inc(1) and the mailbox becomes empty. Xlbiff is modeled after xconsole -- its job is to sit invisibly and pop up only when something demands your attention. ADVANTAGES (or, Why Yet Another Biff?) Xlbiff: + occupies no screen real estate until mail comes in + lets you preview new mail to decide if you want to read it immediately + is easy to make go away INSTALLING The usual. For those that don't know what 'the usual' means: if you have a working imake, look at the Imakefile to make sure you agree with the default values in it, then type 'xmkmf'. If you don't have imake, copy the file Makefile.std to 'Makefile' and edit it to make sure everything looks good. Type 'make' and cross your fingers. If that all works, su and type `make install' or install by hand -- you should be able to figure it out. Be aware that I could be an evil master criminal person and could have inserted all sorts of {trojan horses,virii,worms} so don't just su because I say so. If the make didn't work out that well, see PORTING below. CUSTOMIZING You may want to tweak some values in the app-defaults file and/or add some resources to your .Xdefaults. You also probably want to tell your window manager not to put borders or titlebars or whatever around the xlbiff window. Finally, don't forget to add an `l' to that xbiff invocation in your .Xlogin! Note that an MH format file, xlbiff.form, is included. This form: - omits message number, which is meaningless in this context - omits message size, since `scan -file' can't figure it out - puts a `*' next to the message if your name is on the To: list (before you say "no duh", think about mailing lists and cc's) - displays the date in a friendly format - packs as much subject & body into one line as possible. Xlbiff.form was stolen & hacked from Jerry Peek's excellent Nutshell book on MH & xmh. *THINGS TO BE AWARE OF* Xlbiff invokes `scan -file xxx' by default, and thus requires MH 6.7 or above. If your MH isn't at this level, and you don't feel like upgrading, there's a really, really ugly kludge you can do with inc: inc -notruncate -silent -file %s -form xlbiff.form \ -width %d -audit /tmp/xlbiff.$$ +.null >/dev/null 2>&1; \ cat /tmp/xlbiff.$$; \ rm /tmp/xlbiff.$$ >/dev/null 2>&1; \ rmf +.null >/dev/null 2>&1 Note that this is truly bletcherous and will give you lots of headaches when new mail comes in and your MH context gets screwed up. If you're a Berkeley mail person, you can set scanCommand to: echo x | mail | grep "^.[NU]" but it sure does look ugly. Perhaps there are .mailrc settings to make it look more decent? If you use Elm you may want to use `frm' as your scanCommand. Some people seem to be very satisfied with the `fromwho' package, posted by jearls@blackbird.csc.calpoly.edu to comp.sources.unix volume 25, available on gatekeeper.dec.com or ftp.uu.net or other places Archie surely knows about. Also be aware that problems have been detected with xlbiff reading a mail file on an NFS-mounted directory. Xlbiff is not guaranteed to work under these conditions. PORTING (or, if INSTALLING didn't work) Xlbiff has been tested (to my knowledge) on a DECstation 5000/200 running Ultrix 4.2 using cc and gcc (DEC ANSI C barfs on it); Suns running SunOS 4.1.1 with cc and gcc; and even an SVR3 system. Xlbiff requires X11R4 or beyond and works best with MH 6.7 and up. On systems that don't have strerror(), eg, SunOS, you will need to uncomment the NEED_STRERROR line in Imakefile or Makefile.std. On systems that don't have memcpy, you may want to uncomment the USE_BCOPY line in Imakefile or Makefile.std. I *think* most portability bugs have been ironed out, but of course there are always a few left. If fixes are required, or if you add any whizzy features (see TODO for a partial list), please mail them to me, santiago@pa.dec.com, and I will wrap them up for future releases. BACKGROUND I wrote xlbiff because I don't always want to read my mail. Regular xbiff lets me know when I have mail but not what it is -- this makes me have to inc(1) just so I can decide if I want to bother reading it. Xlbiff gives me a much better indication of whether or not I want to take time to read a new message. If I don't, I just click it away and continue with what I'm doing. Before xlbiff, I wrote a crude hack using perl and xmessage. It worked, but I had always wanted to do it right. HISTORY The following describes changes made to xlbiff throughout its history. Where applicable, changes are attributed to the people who submitted the ideas and, in many cases, patches and source code. * Version 3.0 + miscellaneous bug fixes From Gary Weimer + add "sound" resource -- allows playing any sound on popup. From Neil O'Sullivan + add "fade" resource -- pops window down after certain time. * Version 2.1 BETA From Daren W Latham + add -refresh and -led options. + handle WM_DELETE_WINDOW. From Peter Fischman + Add some comments to Makefile.std to help out SYSV'ers From Stephen Gildea + Lots of cleanup in the default resources. From Yuan Liu + Handle remapping better, don't vanish when WM restarts. From me: + add ErrExit routine, do some more cleanup. + output error message if scan fails, but don't die. + add ledPopdown option. + add checkCommand option (after lots of pestering by Mark!) * Version 2.0 submitted for X11R5 contrib tape Fri 4 Oct 1991 + no change, just up rev level * Version 1.5 submitted for testing Thu 3 Oct 1991 From Jhon Honce + change 'maxWidth/maxHeight' to 'columns/rows'. Bottom option was broken and I hadn't even noticed! From me: + I need to track revisions better... * Version 1.4 submitted for testing Thu 3 Oct 1991 From Arthur Castonguay + ignore stat() errors, treat them as empty file. From Stephen Gildea + use XtPop{up,down} instead of {,un}mapWidget. From several or myself + change .width resource to .maxWidth to fix strange bug. + yet more portability fixes and cleanup. * Version 1.3 submitted for testing Tue 1 Oct 1991 From Stephen Gildea + use allowShellResize and {,un}map instead of {,un}realize so it tracks position changes. + clean up .ad file + raise window to top of stack on new mail. + add 'resetSaver' option. From Mike Schroeder + don't pop up if results of scanCommand are null. This is useful for mail(1)-based users since the mailbox size will normally be >0 but that may not indicate new mail. From several + remove ANSI C dependencies. + use XtAppAddTimeOut() instead of alarm()/sleep()/setjmp(). + clean up a bit. From me + add 'bottom' resource to preserve old functionality if you want to keep xlbiff at the bottom of your screen. * Version 1.0 posted to alt.sources Thu 19 Sep 1991 AUTHOR Ed Santiago Auspex Systems, Inc. Santa Clara, California, USA esm@auspex.com