Not too long ago I was singing the praises of creating hotkeys to switch between apps, a method I consider to be far superior to using CMD+TAB and having to cycle through open apps. I mentioned taking things a step further by utilizing the right-command (and/or right-option) key to reduce the number of keystrokes to switch apps.

Recently I finally got around to doing it, and after a few days of fighting against muscle memory, things have been glorious!

Since I had to use Karabiner to be able to utilize the right-hand keys explicitly, I thought it would be a good idea to try to shorten my stack and do everything with Karabiner instead of having Karabiner talking back to Hammerspoon. Nothing against Hammerspoon, but since I am working towards speed, I don’t want to be fighting with multiple abstraction layers.

For those that haven’t read the previous article, I created hotkeys to quickly switch between my top 3 applications. Cmd + Ctrl + 1-3 would launch or focus Terminal, Chrome or Slack (in that order). It worked, but my vision was to map Right Cmd + 1-3 to simplify things.

Once simplified, I took it a step further and added some additional hotkeys that leverage the right command button a bit more. Here’s a list of what I have going on now:

  • Right Command launches Alfred instead of Command + Space
  • Right Command + HJKL to scroll around similar to how I move in vim
  • Right Command + 1-3 jumps to Terminal, Chrome and Slack respectively

It didn’t take much to pull off, in fact, here’s my private.xml file for Karabiner:

<?xml version="1.0"?>
<root>
  <item>
    <name>Right Command => Launch Alfred</name>
    <identifier>rightCommand</identifier>
    <autogen>
      __KeyDownUpToKey__
      KeyCode::COMMAND_R,
      KeyCode::COMMAND_L, KeyCode::SPACE
    </autogen>
  </item>
  <item>
    <name>Right Command + H => Scroll Left</name>
    <identifier>rightCommandH</identifier>
    <autogen>
      __KeyDownUpToKey__
      KeyCode::H, ModifierFlag::COMMAND_R,
      KeyCode::VK_MOUSEKEY_FIXED_DISTANCE_SCROLL_LEFT
    </autogen>
  </item>
  <item>
    <name>Right Command + J => Scroll Down</name>
    <identifier>rightCommandJ</identifier>
    <autogen>
      __KeyDownUpToKey__
      KeyCode::J, ModifierFlag::COMMAND_R,
      KeyCode::VK_MOUSEKEY_FIXED_DISTANCE_SCROLL_DOWN
    </autogen>
  </item>
  <item>
    <name>Right Command + K => Scroll Up</name>
    <identifier>rightCommandK</identifier>
    <autogen>
      __KeyDownUpToKey__
      KeyCode::K, ModifierFlag::COMMAND_R,
      KeyCode::VK_MOUSEKEY_FIXED_DISTANCE_SCROLL_UP
    </autogen>
  </item>
  <item>
    <name>Right Command + L => Scroll Right</name>
    <identifier>rightCommandL</identifier>
    <autogen>
      __KeyDownUpToKey__
      KeyCode::L, ModifierFlag::COMMAND_R,
      KeyCode::VK_MOUSEKEY_FIXED_DISTANCE_SCROLL_RIGHT
    </autogen>
  </item>
  <vkopenurldef>
    <name>KeyCode::VK_OPEN_URL_APP_Terminal</name>
    <url type="file">/Applications/Utilities/Terminal.app</url>
  </vkopenurldef>
  <item>
    <name>Right Command + 1 => Launch or Focus Terminal</name>
    <identifier>rightCommand1</identifier>
    <autogen>
      --KeyToKey--
      KeyCode::1, ModifierFlag::COMMAND_R,
      KeyCode::VK_OPEN_URL_APP_Terminal
    </autogen>
  </item>
  <vkopenurldef>
    <name>KeyCode::VK_OPEN_URL_APP_Chrome</name>
    <url type="file">/Applications/Google Chrome.app</url>
  </vkopenurldef>
  <item>
    <name>Right Command + 2 => Launch or Focus Chrome</name>
    <identifier>rightCommand2</identifier>
    <autogen>
      --KeyToKey--
      KeyCode::2, ModifierFlag::COMMAND_R,
      KeyCode::VK_OPEN_URL_APP_Chrome
    </autogen>
  </item>
  <vkopenurldef>
    <name>KeyCode::VK_OPEN_URL_APP_Slack</name>
    <url type="file">/Applications/Slack.app</url>
  </vkopenurldef>
  <item>
    <name>Right Command + 3 => Launch or Focus Slack</name>
    <identifier>rightCommand3</identifier>
    <autogen>
      --KeyToKey--
      KeyCode::3, ModifierFlag::COMMAND_R,
      KeyCode::VK_OPEN_URL_APP_Slack
    </autogen>
  </item>
</root>

Still taking a bit of time to get used to, but the time saved is well worth it. You may consider saving one keystroke to be trivial, but when it’s related to somethng I am doing hundreds of times a day, it definitely adds up.

My Karabiner configuration is subject to change at any time, but you can keep up to date with the latest by starring my dotfiles out on GitHub!