自从用上 Macbook Air 之后,一直使用外接显示器和外接键盘,平时 MBA 都是合上盖子放在旁边。

我使用的外接键盘是 Filco 87圣手,在使用中一直纠结不能使用 MBA 自带键盘那快捷的音量控制键,在 V2EX 问了一下之后,都推荐用 Karabiner(原名KeyRemap4MacBook) 这个键盘映射软件来解决这个问题,通过研究发现这软件果然是神器,不仅解决了音量控制键的问题,还把键盘上没用到的 Application 键也派上了用场。

2015年底用上了 HHKB,以下配置也加入了对于 HHKB 的键位设置,解决部分问题。

目标

  • 使用 Insert/Home/PageUp 控制音量的 减小/增大/静音
  • 用 右Application键 切换输入法(双手放在键盘上后,正好用小指的根部按压 右Application键) for Windows
  • 使用 Command+Esc 来反向切换打开的应用(与 Command+Tab 对应,用来替换 Command+`) for HHKB
  • 使用 O+[自定义键] 来启动/切换指定应用

实现

  • 下载安装 Karabiner 并重启,然后启动软件
  • 在菜单栏右边找到图标,右击 -> Preferences
  • 切换到 Misc & Uninstall 标签
  • 点击 Open private.xml 按钮,并在 root 节点内粘贴如下代码:
<!-- 使用 Insert/Home/PageUp 来 减小/增大/静音 音量 -->
<item>
  <name>Volume Keys</name>
  <appendix>Up, Down, Mute</appendix>
  <identifier>remap.volumeKeys</identifier>
  <autogen>
    --KeyToConsumer--
    KeyCode::PC_INSERT,
    ConsumerKeyCode::VOLUME_DOWN
  </autogen>
  <autogen>
    --KeyToConsumer--
    KeyCode::HOME,
    ConsumerKeyCode::VOLUME_UP
  </autogen>
  <autogen>
    --KeyToConsumer-- KeyCode::PAGEUP,
    ConsumerKeyCode::VOLUME_MUTE
  </autogen>
</item>

<!-- 使用 CMD+ESC 来反向切换已打开的程序  -->
<item>
  <name>Clone Command + Shift + Tab to Command + Esc</name>
  <identifier>private.remap.cmd_esc_to_cmd_shift_tab</identifier>
  <autogen>
    __KeyToKey__
    KeyCode::ESCAPE, ModifierFlag::COMMAND_L,
    KeyCode::TAB, ModifierFlag::COMMAND_L | ModifierFlag::SHIFT_L
  </autogen>
</item>

<!-- 使用 右Application键 来切换输入法 -->
<item>
  <name>Switch Input Source</name>
  <identifier>private.remap.input_source</identifier>
  <autogen>
  __KeyToKey__
  KeyCode::PC_APPLICATION,
  KeyCode::SPACE, ModifierFlag::COMMAND_L
  </autogen>
</item>

<!-- 使用快捷键( O + [指定键] )打开应用程序 -->
<vkopenurldef>
  <name>KeyCode::VK_OPEN_URL_APP_Chrome</name>
  <url type="file">/Applications/Google Chrome.app</url>
</vkopenurldef>

<vkopenurldef>
  <name>KeyCode::VK_OPEN_URL_APP_Iterm</name>
  <url type="file">/Applications/iTerm.app</url>
</vkopenurldef>

<vkopenurldef>
  <name>KeyCode::VK_OPEN_URL_APP_Macvim</name>
  <url type="file">/Applications/MacVim.app</url>
</vkopenurldef>

<vkopenurldef>
  <name>KeyCode::VK_OPEN_URL_APP_Youdao</name>
  <url type="file">/Applications/有道词典.app</url>
</vkopenurldef>

<vkopenurldef>
  <name>KeyCode::VK_OPEN_URL_APP_SublimeText</name>
  <url type="file">/Applications/Sublime Text.app</url>
</vkopenurldef>

<vkopenurldef>
  <name>KeyCode::VK_OPEN_URL_APP_Twitter</name>
  <url type="file">/Applications/Tweetbot.app</url>
</vkopenurldef>

<vkopenurldef>
  <name>KeyCode::VK_OPEN_URL_APP_Telegram</name>
  <url type="file">/Applications/Telegram.app</url>
</vkopenurldef>

<vkopenurldef>
  <name>KeyCode::VK_OPEN_URL_APP_Qq</name>
  <url type="file">/Applications/QQ.app</url>
</vkopenurldef>

<replacementdef>
  <replacementname>LAUNCHER_MODE_V2_EXTRA</replacementname>
  <replacementvalue>
    <![CDATA[
      <autogen>
        __KeyDownUpToKey__
        KeyCode::A,
        KeyCode::VK_OPEN_URL_APP_Chrome,
      </autogen>

      <autogen>
        __KeyDownUpToKey__
        KeyCode::S,
        KeyCode::VK_OPEN_URL_APP_Iterm,
      </autogen>

      <autogen>
        __KeyDownUpToKey__
        KeyCode::D,
        KeyCode::VK_OPEN_URL_APP_Macvim,
      </autogen>

      <autogen>
        __KeyDownUpToKey__
        KeyCode::F,
        KeyCode::VK_OPEN_URL_APP_SublimeText,
      </autogen>

      <autogen>
        __KeyDownUpToKey__
        KeyCode::Q,
        KeyCode::VK_OPEN_URL_APP_Twitter,
      </autogen>

      <autogen>
        __KeyDownUpToKey__
        KeyCode::W,
        KeyCode::VK_OPEN_URL_APP_Telegram,
      </autogen>

      <autogen>
        __KeyDownUpToKey__
        KeyCode::E,
        KeyCode::VK_OPEN_URL_APP_Qq,
      </autogen>

      <autogen>
        __KeyDownUpToKey__
        KeyCode::R,
        KeyCode::VK_OPEN_URL_APP_Youdao,
      </autogen>
    ]]>
  </replacementvalue>
</replacementdef>
  • 保存,然后回到 Preferences 界面,切换到 Change Key 标签,点击 ReloadXML 按钮
  • 勾选出现的 Volume Keys 和 Switch Input Source 项
  • 搜索launcher, 勾选 Launcher Mode
  • 关闭窗口,搞定

karabiner

参考

更新

  • 2016.12.19

升级OSX到10.12后,karabiner没办法使用了,官方正在开发karabiner-elements,目前只是一个基础版本,更没有 Launcher Mode 这么好用的功能,下面是一个简单的过渡配置:

.karabiner.d/configuration/karabiner.json

{
    "profiles": [
        {
            "devices": [],
            "name": "Default profile",
            "selected": true,
            "simple_modifications": {
                "caps_lock": "left_control",
                "left_command": "left_option",
                "left_option": "left_command",
                "home": "mute",
                "page_down": "volume_down",
                "page_up": "volume_up",
                "right_command": "right_option",
                "right_option": "right_command"
            }
        }
    ]
}