The jabber.el package provides an Emacs interface to the Jabber/XMPP chatting ecosystem. I use it regularly with Google Talk and other Jabber services.
You can use commands like C-x C-j C-c to connect to a server or two, then C-x C-j C-r to visit your roster, then RET on a name to launch a chat with someone, then C-x C-j C-a to set presence status to "away", etc.
Unobtrusive IM workflow
When you've had enough chatting, and you go back to writing some code (or some email, or ...), your chat buffers become not visible anymore. Then, if you have some new incoming IM activity, be it a private message or a groupchat message or a subscription request, your Emacs mode line will gently change and display the name of the incoming contacts/groupchats that have seen new IM activity. You can then use C-x C-j C-l to switch right to the correct jabber buffer to continue the chat. After you are done, press C-x C-j C-l again to get back to coding to the very same place you had been to before answering the chat call.
This is a nicely unobtrusive way of IM operations. Work as usual, answer incoming activity requests with a keypress, and use the same keypress to get back to your work exactly where you left it.
Needless to say, one can also configure things to be as obtrusive as desired, say pop up a notification window upon receiving incoming message.
A few days ago I made a small patch for jabber.el related to activity tracking.
Consider a situation where you hack on a project in a frame located on Desktop 2 while your jabber buffers are open in another frame on Desktop 8 that you rarely visit. While hacking in Desktop 2, the jabber activity flags would not be raised in that frame's mode line, because jabber buffers are considered "visible", even though in reality they are visible on another desktop, and hence "invisible" in this desktop in this user scenario.
I've created a new custom variable jabber-activity-all-frames-visible that permits to configure the activity alarm raising behaviour on all frames. You can get the patch from http://article.gmane.org/gmane.emacs.jabber.general/913.
Groupchat history logging
Another patch I created a few days ago is related to logging chat history.
The current behaviour of the message history logger seems to be not to log groupchat messages. In my use case scenario, I would like to be able to log messages of some particular groupchats, such as our "invenio" developer chat room.
I've addressed this need by proposing a new custom variable jabber-history-enabled-groupchats that is basically a regexp of groupchats we want to enable logging for. You can get the patch from http://article.gmane.org/gmane.emacs.jabber.general/915.