※使用環境: Goku 0.2.5
, Karabiner-Elements 12.4.0
, jq 1.5
, macOS 10.13.6
インポート用の設定ファイルを作る理由
GUIのみでルールをON/OFFしたい
Karabiner-Elementsは、旧Karabinerと違い、設定画面から特定のルールをON/OFFする機能がありません。インポート用の設定ファイルを作って、~/.config/karabiner/assets/complex_modifications
に保存しておけば、擬似的にではありますが、設定画面からON/OFFを切り替えられるようになります。
特定のルール設定を共有したい
インポート用の設定ファイルを作っておけば、gistなどを使って簡単に設定を共有することができます。
設定ファイルの共有には、公式サイトを使う方法もありますが、結構重い手順を踏む必要があるのと、Karabiner-Elementsの以外の知識が必要になってくるため、ちょっとした設定をサクッと共有したい場合には向きません。
また複数のProfileで同じルールを共有したい場合にも活用できます。
Gokuからkarabiner.json
を直接更新したくない
既存のルールをすべてGokuに移行するまでの間は、Gokuからkarabiner.json
を直接更新してしまうと移行前のルールが消えて困ることになります。Gokuを使って記述したルールを、インポート用の設定ファイルに書き出して、Karabiner-Elementsの設定画面からルールを追加するようにすれば、そういった問題を避けられます。
手順
- Gokuでルールを記述
-
goku
の--dry-run-all
オプションとjq
を使って、インポート用設定ファイルを生成 -
assets/complex_modifications
に配置して、Karabiner-Elementsへ反映
1. Gokuでルールを記述
- インポート用設定ファイルにしたいルールを、Gokuを使って記述します
{:main [{:des "[Terminal] Cmd+S -> Ctrl+S" :rules [[:!Cs :!Ts :terminal]]}
{:des "[Terminal] Cmd+T -> Cmd+T, EISUU" :rules [[:!Ct [:!Ct :japanese_eisuu] :terminal]]}]
:applications {:terminal ["^com\\.googlecode\\.iterm2$" "^com\\.apple\\.Terminal$"]}}
2. goku --dry-run-all
とjq
を使って、インポート用設定ファイルを生成
-
goku --dry-run-all
は、生成したkarabiner.json
を標準出力に書き出します - その結果をpipeで
jq
に渡して、インポート用設定ファイルを生成します
$ GOKU_EDN_CONFIG_FILE=sample_rules.edn
$ goku --dry-run-all \
| jq --arg profile "Default" '(.profiles | map(select(.name == $profile))[0] | .complex_modifications.rules)' \
| jq --arg title "Sample Rules" '{"title": $title, "rules": .}' \
> sample_rules.json
3. Karabiner-Elementsへの反映
-
assets/complex_modifications
にインポート用設定ファイルを配置して、Karabiner-Eelementsへ反映します。
$ cp -p sample_rules.json ~/.config/karabiner/assets/complex_modifications/
- Karabiner-Elementsの設定画面から「Complex Modifications」を選択し、左下の「Add rule」ボタンをクリックすると、作成したルールが追加可能になっていることが確認できます。
補足
シェルスクリプト
設定ファイル名とtitle
名を渡して実行すれば、Karabiner-Elementsへ反映する簡易的なシェルスクリプトです。中身はこの記事で書いている内容と同じです。使い方は-h
オプションで表示されるヘルプを確認してください。
$ ./generate_json.sh -h
インポート用設定ファイルの構造
公式サイトにあるインポート用設定ファイルの中身を確認すると、JSONの構造は以下のようになっています。1
{
"title": "Sample Rules",
"rules" : [ {
"description" : "Rule1",
"manipulators" : [ ... ]
}, {
"description" : "Rule2",
"manipulators" : [ ... ]
}]
}
-
"title"
はインポート用設定ファイル特有の記述で、設定画面で「Add Rule」をクリックした時に表示される -
"rules"
以下はkarabiner.json
のcomplex_modifications.rules
と同じ
karabiner.json
の構造
"complex_modifications"
の"rules"
のみがインポート用設定ファイルに必要な箇所です。
{
"global": { ... },
"profiles" : [ {
"name" : "Sample1",
"simple_modifications" : [ ... ],
"complex_modifications" : {
"rules" : [ { // <-- この"rules"だけが必要
"description" : "Rule1", //
"manipulators" : [ ... ] //
}, { //
"description" : "Rule2", //
"manipulators" : [ ... ] //
}] //
},
...
}, {
"name" : "Sample2",
"simple_modifications" : [ ... ],
...
}]
}
#参考資料
- pqrs-org/KE-complex_modifications
- Karabiner-Elements単体で親指シフト定義ファイルを作るジェネレーター
- Karabiner-Elementsの設定項目をまとめました#設定ファイルの保存場所について
- Karabiner-Elementsの設定が超絶楽になるDSL「Goku」
- jq Manual
-
公式ドキュメントには、インポート用設定ファイルの定義についての記載はありませんでした。 ↩