Where There’s a Will, There’s a Kludge

dual_keyboard
What follows is a story of hope. That even when things seem their bleakest a kludge can come along and get things limping along.

For the last couple of years I’ve been dreaming of getting a second keyboard, something that will allow me to take myriad keyboard shortcuts I have now and give me one-key access to most of them. While developing in Microsoft Visual Studio, there are a lot of tasks that I perform regularly that require two hands and a bit of contortion to operate correctly. There’s only so much I can do with changing the keyboard mappings, since I have more common tasks than buttons. An example is the default keyboard shortcut to debug all of a project’s unit tests: Ctrl+T, Ctrl+A.
This is easy enough to type, but it requires two hands and 4 keystrokes. Even if I wanted to simplify it, there just aren’t many free buttons left to use.

This is exacerbated by the fact that I run my development inside of a VMWare Fusion virtual machine on an iMac. OS X takes some of my precious keys away for its own use, and I don’t want to give them all up. If you’ve ever looked at an Apple keyboard, you see that the function keys double as system keys for such things as volume control, Dashboard, and Exposé. Now I’ve got one more modifier key to worry about, the Fn key. 

I thought the solution would be a second keyboard with a bunch of keys that I could map to different functions at will. But I wasn’t sure how to do it. I didn’t want to spend money on a specialized second keyboard, they can get expensive. I was looking for a way to plug in a normal keyboard and use it’s keys as all brand new. I couldn’t figure out how to do this because a second normal keyboard just duplicates the existing keyboard. Until I figured that out I installed a program called Keyboard Maestro which at least let me use all of the extra keys on an Apple keyboard with Visual Studio (F13-F19, in particular.) But I was still running out of keys.

Then a product came to my attention called QuicKeys. It has the ability to map separate devices to different actions. I tried plugging in another Apple keyboard, just like the one I already had and it seemed to work. But unfortunately, because it was the exact same type of device, QuicKeys kept losing the new mappings and it was a chore to get it working again. I had an older Bluetooth Apple keyboard in a box, which I dusted off and tried. It worked great, now I have a whole 78 keys that I can use for single-key access instead of the carpal tunnel inducing keystrokes I was using.

Only one problem. QuicKeys, for some reason, doesn’t work with VMWare Fusion. When it sends keystrokes to Fusion the modifier keys (Shift, Ctrl, and Alt) get stripped off. Damn! I had just spent a few hours getting my new keyboard up and running and figuring out the QuicKeys mapping interface. I e-mailed support only to be told that the problem was VMWare, not QuicKeys (how many times have you heard that excuse?) That didn’t sound right, because Keyboard Maestro worked just fine.

Aha! Wait, if Keyboard Maestro works maybe I could use it along side QuicKeys. An idea so crazy that it just might work. I set it up so that QuicKeys maps a keystroke from my Bluetooth keyboard to a keystroke that Keyboard Maestro then listens for and translates it for VMWare. An example through the Kludge-o-train:The normal keystroke to build a project in Visual Studio is Ctrl+Shift+B. Not the simplest thing in the world to type, especially when you do it 5,000 times a day. So I used QuicKeys to map the second keyboard’s B key to Shift+Ctrl+Cmd+B, and then Keyboard Maestro maps Shift+Ctrl+Cmd+B to Shift+Ctrl+B and voilá I can build my projects with a single hand easily.  I use the Command key modifier for all of my QuicKeys -> Keyboard Maestro keystrokes because the Command key is rarely used in Windows with other modifier keys (it maps to the Windows key by default.)

My kludge is limping along just fine and I’ve even started to use my extra keyboard for other programs like iMovie and iPhoto.  I’m in geek heaven.