Tim Bray, that dashing man-about-town, recently sang the praises of Adium, a multi-service chat client for OS X. I’d tried it a while back, and been only marginally impressed. At the time, its presentational inflexibility was too annoying for me to take it seriously. Okay, yes: it was a damn sight better than Messenger for OS X, which is the only reason I even kept it on my hard drive. But I hardly ever log onto MSN any more, as everyone I know is on AIM. So I’d stuck with iChat AV.
Still, Tim’s word is always gold (or at least high-grade palladium) with me, and he said the magic words (“highly skinnable”), so I downloaded the latest copy and poked around for a bit.
Boy howdy! Adium has definitely come a long, long way since last I visited. You can change the appearance of your chat sessions (with “message themes”), the dock icons, the contact list, and much more. Since none of the default message themes really did it for me, I went looking for others. There are quite a few available at the Adium Xtras site, but none of them were really what I wanted either. In iChat, I cranked the graphic frippery down to zero so that the chat sessions were as compact as possible, but I still had the text look nice. If I could recreate that in Adium, it would make the migration much, much simpler.
So I dug into the package contents of a promising message theme… and found out that themes are based on nothing more than XHTML and CSS.
Seriously. The entirety of an Adium chat window is an XHTML document that’s being dynamically updated via DOM scripting—all of it pumped through WebKit, of course. In creating a message theme, you define what markup will be used, and write CSS to style it. You can even define variants on your theme by writing additional style sheets.
So with some quick hacking, I not only radically improved the markup generated during a chat (the markup I saw in the packages I downloaded was, um, sub-optimal), but I basically replicated my old iChat theme with some simple CSS. And then I created some variants that slightly modify it in various ways, mostly to prove that I could.
And given how much I love to tinker with my software, that’s like waving a bulging suitcase of money in front of a senator.
Granted, there are some things I’d like to change. For example, the markup you define in a theme is not used in saving the chat log. In a log, you just get some basic markup with a case of classitis and very, very poor semantics. It would be a lot cooler if you could define the log markup (or the log just used the markup you generate during a chat session) and the CSS to present it.
A chat log is also something that, it seems to me, cries out for a microformat. The markup I’m using for my theme is also a first effort in that direction, recycling some other microformats’ concepts (I stole a bit from hCalendar and am planning to graft in some hCard as well) and setting up some basics. If I can take this far enough, I might consider pushing to upgrade the markup Adium generates in its logs. They’re dropping a lot of information on the floor when they write out the logs, and I think that’s a shame.
But then, I can make the effort to fix that and actually have a chance of it paying dividends. The joys of open source, you know?
I’ll still use iChat AV for videoconferences, which are an essential tool for family cohesiveness when I’m on the road, as well as to keep close to my father down in Florida. For text, though—which accounts for at least 90% of my instant messaging activity—Adium is my new chat buddy.