1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Karabiner-Elements+Goku】インポート用の設定ファイルを作成する

Last updated at Posted at 2019-06-08

※使用環境: 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の設定画面からルールを追加するようにすれば、そういった問題を避けられます。

手順

  1. Gokuでルールを記述
  2. goku--dry-run-allオプションとjqを使って、インポート用設定ファイルを生成
  3. assets/complex_modificationsに配置して、Karabiner-Elementsへ反映

1. Gokuでルールを記述

  • インポート用設定ファイルにしたいルールを、Gokuを使って記述します
sample_rules.edn
{: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-alljqを使って、インポート用設定ファイルを生成

  • 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」ボタンをクリックすると、作成したルールが追加可能になっていることが確認できます。

karabiner_sample_rule2.jpg

補足

シェルスクリプト

設定ファイル名とtitle名を渡して実行すれば、Karabiner-Elementsへ反映する簡易的なシェルスクリプトです。中身はこの記事で書いている内容と同じです。使い方は-hオプションで表示されるヘルプを確認してください。

$ ./generate_json.sh -h

インポート用設定ファイルの構造

公式サイトにあるインポート用設定ファイルの中身を確認すると、JSONの構造は以下のようになっています。1

インポート用.json
{
  "title": "Sample Rules",
  "rules" : [ {
    "description" : "Rule1",
    "manipulators" : [ ... ] 
  }, {
    "description" : "Rule2",
    "manipulators" : [ ... ]
  }]
}
  • "title"はインポート用設定ファイル特有の記述で、設定画面で「Add Rule」をクリックした時に表示される
  • "rules"以下はkarabiner.jsoncomplex_modifications.rulesと同じ

karabiner.jsonの構造

"complex_modifications""rules"のみがインポート用設定ファイルに必要な箇所です。

karabiner.json
{
  "global": { ... },
  "profiles" : [ {
    "name" : "Sample1",
    "simple_modifications" : [ ... ],
    "complex_modifications" : {
      "rules" : [ {                  // <-- この"rules"だけが必要 
        "description" : "Rule1",     //
        "manipulators" : [ ... ]     //
      }, {                           //
        "description" : "Rule2",     //
        "manipulators" : [ ... ]     //
      }]                             //
    },
    ...
  }, {
    "name" : "Sample2",
    "simple_modifications" : [ ... ],
    ...
  }]
}

#参考資料

  1. 公式ドキュメントには、インポート用設定ファイルの定義についての記載はありませんでした。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?