Karabinerのprivate.xmlを設定してみる

Karabinerのprivate.xmlを設定してみる。

private.xml

[Misc & Uninstall]メニューの[Open private.xml]のボタンを押し、

エディタで開いて編集する。

基本的に、下記のような感じで記入していく。

<?xml version="1.0"?>
<root>
  <item>
    <name>設定名</name>
    <identifier>この設定のID(「private.XXXXX」の形式で記述するのが推奨されてるみたい)</identifier>
    <autogen>設定内容</autogen>
    ・・・
  </item>
  ・・・
</root>

詳しくは公式のマニュアルに載っている(英語)。

private.xml Reference Manual
https://pqrs.org/osx/karabiner/xml.html.ja

キーコードは下記にまとまっている。

KeyCode
https://github.com/tekezo/Karabiner/blob/master/src/bridge/generator/keycode/data/KeyCode.data

ModifierFlag
https://github.com/tekezo/Karabiner/blob/master/src/bridge/generator/keycode/data/ModifierFlag.data

最初からある設定を見たい場合は、下記に各設定のXMLがある。

Karabiner/src/core/server/Resources/include/checkbox
https://github.com/tekezo/Karabiner/tree/master/src/core/server/Resources/include/checkbox


以下、設定例

キーの変換

Aを押すと、Bが入力される。

<autogen>
  __KeyToKey__
  KeyCode::A,
  KeyCode::B
</autogen>

Control+Aを押すと、Command+Aが入力される。

<autogen>
  __KeyToKey__
  KeyCode::A, ModifierFlag::CONTROL_L,
  KeyCode::A, ModifierFlag::COMMAND_L
</autogen>

Control+Shift+Aを押すと、Command+Shift+Aが入力される。

<autogen>
  __KeyToKey__
  KeyCode::A, ModifierFlag::CONTROL_L | ModifierFlag::SHIFT_L,
  KeyCode::A, ModifierFlag::COMMAND_L | ModifierFlag::SHIFT_L
</autogen>

ControlとCommandを入れ替える。

<autogen>
  __KeyToKey__
  KeyCode::CONTROL_L,
  KeyCode::COMMAND_L
</autogen>
<autogen>
  __KeyToKey__
  KeyCode::COMMAND_L,
  KeyCode::CONTROL_L
</autogen>

ワンショットモディファイア

Aを単体で押した場合はAが入力され、 Aと別のキーを押した場合は、Commandキーとして働く。

<autogen>
  __KeyOverlaidModifier__
  KeyCode::A,
  KeyCode::COMMAND_L,
  KeyCode::A
</autogen>

Controlと別のキーを一緒に押した場合は、Controlとして機能し、 Control単体で押した場合は、Command+Aになる。

<autogen>
  __KeyOverlaidModifier__
  KeyCode::CONTROL_L,
  KeyCode::CONTROL_L,
  KeyCode::A, ModifierFlag::COMMAND_L
</autogen>

連打

「A」を押すと、「B」が入力される。 「AA」と連続で押すと、「BBC」と入力される。

<autogen>
  __DoublePressModifier__
  KeyCode::A,
  KeyCode::B,
  KeyCode::C,
</autogen>

Control連打でCommand+Aが入力される。

<autogen>
  __DoublePressModifier__
  KeyCode::CONTROL_L,
  KeyCode::CONTROL_L,
  KeyCode::A, ModifierFlag::COMMAND_L
</autogen>

URLを開く

Aを押すと、Yahoo!のサイトが開く。

<vkopenurldef>
  <name>KeyCode::VK_OPEN_URL_WEB_Yahoo</name>
  <url>http://www.yahoo.co.jp</url>
</vkopenurldef>
<autogen>
  __KeyToKey__
  KeyCode::A,
  KeyCode::VK_OPEN_URL_WEB_Yahoo
</autogen>

Aを押すと、Atomのエディタが起動する。

<vkopenurldef>
  <name>KeyCode::VK_OPEN_URL_APP_Atom</name>
  <url type="file">/Applications/Atom.app</url>
</vkopenurldef>
<autogen>
  __KeyToKey__
  KeyCode::A,
  KeyCode::VK_OPEN_URL_APP_Atom
</autogen>

Aを押すと、ファイルが開く。

<vkopenurldef>
  <name>KeyCode::VK_OPEN_URL_SHELL_FileOpen</name>
  <url type="shell">
    <![CDATA[ open hoge.txt ]]>
  </url>
</vkopenurldef>
<autogen>
  __KeyToKey__
  KeyCode::A,
  KeyCode::VK_OPEN_URL_SHELL_FileOpen
</autogen>

特定のアプリケーション

onlyタグにアプリ名を指定すると、そのアプリのみ対象となり、
notタグにアプリ名を指定すると、そのアプリのみ対象外となる。

指定できるアプリ名は、たぶん下記に定義されてるやつだと思われる。

appdef.xml
https://github.com/tekezo/Karabiner/blob/master/src/core/server/Resources/appdef.xml

ChromeFireFoxのみ対象。

<only>GOOGLE_CHROME, FIREFOX</only>
<autogen>
  __KeyToKey__
  KeyCode::A,
  KeyCode::B
</autogen>

ChromeFireFoxのみ対象外。

<not>GOOGLE_CHROME, FIREFOX</not>
<autogen>
  __KeyToKey__
  KeyCode::A,
  KeyCode::B
</autogen>

定義されていないアプリケーションの場合は、
Karabinerのメニューから、EventViewrを起動して、

IDを確認し、

下記のような感じで定義を追加すればOK。

<appdef>
  <appname>APPSTORE</appname>
  <equal>com.apple.appstore</equal>
</appdef>