Karabinerの設定を楽に書けるやつ作った

経緯

いろいろ思うところあってエディタを乗り換えようと思ったんだけど、キーバインドを異常にカスタマイズしているおかげで、みんなが使うはずの基本的なキーバインドが衝突して押せないという事態が発生し、Karabinerの設定を大きく変える必要が出てきた。
で、xml書いてたんだけど、xmlいじるの大変だし、Karabiner特有の識別子を知らないと書けないのでなかなか進まなかった。

そこで、Karabinerの設定を書くのが楽になるよう、RubyのDSLを書くとXMLを吐いてくれるやつを作った。

k0kubun/karabiner-dsl

どう使うのか

まず、こういうのを書いて~/.karabinerとして保存する。

item "Control+PNBF to Up/Down/Left/Right", not: "TERMINAL" do
  remap "C-p", to: "Up"
  remap "C-n", to: "Down"
  remap "C-b", to: "Left"
  remap "C-f", to: "Right"
end

で、gem install karabinerしておいて、シェルでkarabiner dslを実行する。

すると、~/Library/Application Support/Karabiner/private.xmlに以下のxmlが書き出され、Karabinerに読み込まれる。

<?xml version="1.0"?>
<root>
  <item>
    <name>Control+PNBF to Up/Down/Left/Right</name>
    <identifier>remap.control_pnbf_to_up_down_left_right</identifier>
    <not>TERMINAL</not>
    <autogen>__KeyToKey__ KeyCode::P, VK_CONTROL, KeyCode::CURSOR_UP</autogen>
    <autogen>__KeyToKey__ KeyCode::N, VK_CONTROL, KeyCode::CURSOR_DOWN</autogen>
    <autogen>__KeyToKey__ KeyCode::B, VK_CONTROL, KeyCode::CURSOR_LEFT</autogen>
    <autogen>__KeyToKey__ KeyCode::F, VK_CONTROL, KeyCode::CURSOR_RIGHT</autogen>
  </item>
</root>

何が便利か

そもそも、Karabinerにはたくさん便利なキーバインドが入っているので、普通は自分で設定を書く必要はない。
けど、たまに他の人はやらなそうなバインドをやりたくなることがあり、そういうとき設定を追加するコストが下がるのがまず便利。
これこれでは書きやすさも読みやすさも全然違う。

あと、僕はチェックをいれたい設定が多く、新しいパソコンを使いはじめるたびに設定項目を探すのは大変なので、C-p,n,b,fみたいな本家がサポートしているバインドもprivate.xmlに追加してある。
これで探すコストが減る。
(本当はもうちょっとスマートな方法で設定をONにするのを自動化したい)

最後に、設定ファイルはdotfilesというリポジトリで管理していて、統一性の問題でキーバインドの設定もドットで始まるファイル名にしたかったというのもあった。

所感

最近Goばっか書いてたけどRubyはカジュアルに美しいDSL作れるのが良いと思った