IM tips

This page shows some examples on how to configure awesome for use with certain IM clients.

CenterIM
CenterIM is a terminal based IM program supporting a bunch of protocols.

Finch
A terminal based IM program alternative to Pidgin. It uses existing Pidgin configuration files and the libpurple library. This comes in especially handy if you're migrating from a different window manager environment and have Pidgin already configured.

Great guide to get you started.

Pidgin
By default Pidgin doesn't set urgent hints on its windows when new message arrives. But it could be enabled via standard plug-in: go to Tools -> Plugins (or press Ctrl-U) -> Message Notification -> and check Set window manager "URGENT" hint combobox.

Gajim
Recent versions of Gajim have a very useful feature for use with tiling window managers; it can keep the roster and chats in a single window (much like Tkabber does). To enable this feature go to: Preferences -> General -> Window behaviour and select: Single window for everything.

If for some reason you want to separate the roster from your chat windows here are some tips to get you started. First one being to dedicate a whole tag to Gajim - even though it supports tabbed windows when you open service discovery, have some file transfers, check user info etc. it can clutter your screen fast.

Tag settings
Once you dedicate a tag to Gajim you can setup a custom mwfact (master width factor) for it in the tag creation loop, to reserve a narrow space for your roster. I (User:anrxc) have a resolution of 1280x800 and find 0.13 to be a good value for the tile layout (where 'N' is the tag number):

awful.tag.setproperty(tags[s][N], "mwfact", 0.13)

Rules
The above tag property works best if you use setslave, so that the chat and other windows don't hijack this narrow space you reserved for your roster. If you decided to dedicate a tag to Gajim you also need a rule that will automatically move all your Gajim windows to that tag. We can solve both of these usability problems in the awful.rules.rules table (where 'S' is the screen number and 'N' the tag number):

{ rule      = { class = "Gajim.py" }, properties = { tag  = tags[S][N] }, callback  = awful.client.setslave },

Tag settings
I (User:DsTr) use these tag settings (where 'N' is the tag number):

awful.tag.setncol(2, tags[s][N]) awful.tag.setnmaster (1, tags[s][N]) awful.tag.setmwfact (0.2, tags[s][N])

Rules:

{ rule = { class = "psi" }, properties = { tag = tags[s][N] } }, { rule = { class = "Qutim" }, properties = { tag = tags[s][N] } },

Manage signal/hook
if c.class == "psi" and not c.name:find("Psi") then awful.client.setslave(c) end if c.class == "Qutim" and not c.role:find("contactlist") then awful.client.setslave(c) end

On lastest versions of awesome3 can use "new" signal

Additional rule
An alternative to using the 'manage' signal is to add a second rule below the ones above:

{ rule_any = { class = { "psi", "Psi" } }, except = { instance = "main" }, callback = awful.client.setslave },

This makes all Psi windows slaves, except the contact list. This may be slightly more efficient, since the code in the 'manage' signal is run more frequently than the rules are checked.

Freetalk
For freetalk one can use a hook like this (requires wmctrl and freetalk windows title to contain "freetalk"):

(add-hook! ft-message-receive-hook     (lambda (time from nickname message) (system "for w in $(wmctrl -l|grep freetalk|awk '{print $4}'); do wmctrl -r $w -b add,demands_attention; done")))

P.S. Still wondering if there's a better solution.