How to map keyboard keys to other keyboard keys in an app specific manner

keybindingskeyboard

I would like to have some way to specify that when I am focused on Spotify.app and I press the j key that it will translate into a key and be sent to the app. I would like this because I like vim style navigation but Spotify does not support remapping keyboard shortcuts.

Best Answer

@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.

Key Remapping in Pref Pane

Related Question