@iGameRam's suggestion of KeyRemap4MacBook ended up working for me. I selected KeyRemap4MacBook because I am already using it to remap keys for me system wide. To do this I had to read the reference manual.
From the reference manual I found that there is a private.xml
file that enables me to add more remapping values to KeyRemap4MacBook. By going to the KeyRemap4MacBook pref pane, going to the "Misc & Uninstall" tab and selecting "Open private.xml" I was able to open the file.
I had to add two elements to my private.xml
. The first was:
<appdef>
<appname>SPOTIFY</appname>
<equal>com.spotify.client</equal>
</appdef>
This is because KeyRemap4MacBook does not ship with an app definition for Spotify. It does ship with many others. I need the app definition so my keyboard keybindings only apply for Spotify and are not system wide.
The second element I added was:
<item>
<name>Spotify Vim Style Nav</name>
<appendix>J and K works in Spotify</appendix>
<identifier>private.spotify.vim_style_nav</identifier>
<only>SPOTIFY</only>
<autogen>--KeyToKey-- KeyCode::J, KeyCode::CURSOR_DOWN</autogen>
<autogen>--KeyToKey-- KeyCode::K, KeyCode::CURSOR_UP</autogen>
</item>
This is the actual definition of the key bindings. The <identifier>
tag is supposed to be unique for every key mapping. The manual suggests prefixing the identifier with private.
. The <only>
tag has to match an appname defined in the private.xml
or shipped with KeyRemap4MacBook.
The <autogen>
tags are supposed to contain the mappings. The manual has many examples on what kind of mappings that can be created. The two I have map the J and K keys to the Down and Up keys respectively.
Once the file has been saved, I just needed to press the "ReloadXML" button and then my mapping appeared as an option in the menu.
After selecting it everything worked as I wanted.
Best Answer
Selecting Intractable GUI Elements with Keyboard Maestro
This is one of the most useful aspects of Keyboard Maestro, the ability to manipulate a GUI which is not easily accessed by other scripting options. I'll explain how to use this routine to solve your question, but it can be used for just about anything else.
The recycable core of the method is a sequence of three actions:
Find Image on Screen
.Use Variable
in theto set the mouse location
mode.Move or Click Mouse
relative to thecurrent mouse location
.Once these three actions are dragged into your macro, you'll need to configure them slightly:
Find Image on Screen
box.Display
box checked while the icon is on the screen.Find Image on Screen
and used byUse Variable
.And there you have it. This little block of actions is completely modular, so try to think of other fun uses. Here's my final macro: