AIM Style Emoticon Keyboard Shortcuts in Pidgin

Directions
Have to start with the meat… Here’s how you get AIM style emoticon shortcuts in Pidgin.

  1. Download the file gtkrc-2.0 or copy the text from the end of this post
  2. Put or create the file in your .purple directory. “C:\Documents and settings\Username\Application Data\.purple” for Windows users, “/home/username/.purple” for you Unix/Linux folks. NOTE: The file must be named “gtkrc-2.0” with no file extension
  3. Start or re-start Pidgin and enjoy the old-school AIM-style emoticon keyboard shortcuts!!!

The Backstory
Back in the good ol’ days of late 90’s early 2000’s, it seemed like everyone was signing up for Aol’s Instant Messenger. It brought everyone some enjoyable times with a revolutionary emoticon set and user warning system. The AIM software became ad-ridden and bloated while more chat protocols surfaced – so the community embraced replacements and combination appliations such as DeadAim, Gaim (now Pidgin), Adium, and so on.

One of the more efficient and beneficial functions of these applications, including Aol’s official AIM client, was the ctrl-x keyboard shortcuts for each emoticon. E.G.: Ctrl+6 was the “kissy face”, Ctrl+7 was the “angry face”, etc.

As time has progressed, Pidgin ceased the emulation of AIM’s ctrl+x keyboard shortcuts for emoticons. Myself and most of my friends used this feature EXTENSIVELY for worthy communication, and it became frustrating to click/move the mouse to find the correct emoticons. Time evolved my skills and I was able to become somewhat proficient in just typing the actual characters to build the emoticons manually… But it was still a long shot away from matching the ctrl+x shortcuts.

Meanwhile, Russellteee visited my family lifespace to meet my newborn child. Somehow during his visit, we arrived on the subject of discussing these former shortcuts and how awesome they made our respective lives. We vowed to construct a plugin to re-insert these plugins into Pidgin.

The week continued and I discussed this scenario with my coworker chouse. He was immediately gripped with the idea of getting this set up with a config file. Within just a few minutes, he formulated a working solution by creating the file called “gtkrc-2.0” and putting that file into “C:\Documents and Settings\username\Application Data\.purple” directory. They keymap functionality in gtk2.0 is a little wierd – we had to work pretty hard to get ALL of the keyboard shortcuts to work. When you have the ctrl+shift modifier, it forces you to use the rendered value of the keys pressed.

For exampe: “ctrl + shift + 1” is actually just “ctrl + !” as the shift key changes the output. But, those key symbols are special ascii characters that you have to actually put by name into your key bindings file. With a bit more research, I was able to find most of these pretty quickly. The caret (“^”) gave me the most trouble; for some reason the ascii hex code of 5E is rendered as “asciicircum” in the GTK keymap. Seems like some programmer has made a joke pertaining to the caret and circumcision. One would expect “caret” would be fine; but whatever. I found it via Ascii -> hex -> keymap.h translation.

What beholds from this immense display of teamwork and coordination is a result that is literally too pristine to describe in written english verbiage. I can only give you directions.

Here is the text that goes into the file, if you prefer to create it manually.

binding "faces"
{
bind "<ctrl>1" { "insert-at-cursor" (":-)") }
bind "<ctrl>2" { "insert-at-cursor" (":-(") }
bind "<ctrl>3" { "insert-at-cursor" (";-)") }
bind "<ctrl>4" { "insert-at-cursor" (":-P") }
bind "<ctrl>5" { "insert-at-cursor" ("=-O") }
bind "<ctrl>6" { "insert-at-cursor" (":-*") }
bind "<ctrl>7" { "insert-at-cursor" (">:O") }
bind "<ctrl>8" { "insert-at-cursor" ("8-)") }
bind "<ctrl>exclam" { "insert-at-cursor" (":-$") }
bind "<ctrl>at" { "insert-at-cursor" (":-!") }
bind "<ctrl>numbersign" { "insert-at-cursor" (":-[") }
bind "<ctrl>dollar" { "insert-at-cursor" ("O:-)") }
bind "<ctrl>percent" { "insert-at-cursor" (":-/") }
bind "<ctrl>asciicircum" { "insert-at-cursor" (":'(") }
bind "<ctrl>ampersand" { "insert-at-cursor" (":-X") }
bind "<ctrl>asterisk" { "insert-at-cursor" (":-D") }
}
widget "*pidgin_conv_entry" binding "faces"