Macのキーバインドをいろいろ設定できるKarabiner-Elementsが、Version 11.6でついに修飾キー以外の同時押しにも対応してくれました。これでついにEl Capitanからおさらばできる!と思ってKarabinerの設定をKarabiner-Elementsに移植しようと思ったのですが、同時押しパターンの多さから定義ファイルを一から書くのにくじけました。それでKE-complex_modificationsを使って.erbファイルを使って楽をしようと思ったのですが、KE-complex_modificationsはキー同時押しの記述を実装していなかったので、実装してみた次第です。
リポジトリ
https://github.com/Shinichi-Ohki/KE-complex_modifications にあります。使い方は本家のKE-complex_modificationsと同じく、src/json/内に.json.erbファイルを置いてmakeするとdocs/json/内に.jsonが生成されます。
やったこと
KE-complex_modificationsのerb2json.rbにはeach_keyというメソッドが用意されています。(参考:each_key)
これはsource_keys_listとdest_keys_listというArrayに入力と出力を羅列することでcomplex_modificationsの設定を一度に書けるメソッドです。ここにarrayの要素としてarrayを書いたらいいのでは、と思うのですが、例えば
source_keys_list: [["f","j"]],
と書いても
"from": {
"key_code": [
"f",
"j"
],
と展開されてしまいます。
これを
"from": {
"simultaneous": [
{
"key_code": "f"
},
{
"key_code": "j"
}
],
と展開されるようにしました。
また、出力側も
dest_keys_list: [["g","h"]],
と書いたら
"to": [
{
"key_code": [
"g",
"h"
]
}
]
となってしまうのを
"to": [
{
"key_code": "g"
},
{
"key_code": "h"
}
]
と展開されるようにしました。これでキーを複数続けて出力するのも記述できます。ただし修飾キー付きで複数キーの連続出力することはなさそうだったのでそっちは実装してません。
具体的にどう書いたかはリポジトリのdiffを見てもらうのがわかりやすくてよいかと思います。
https://github.com/Shinichi-Ohki/KE-complex_modifications/commit/dca19ed8e783f71490f39000b4f05b39d325384c#diff-ec216709002c75751c08467fb890337a
(もっとエレガントな書き方があったらこっそり教えてください)
参考
KE-complex_modificationsを使ってKarabiner-Elementsの設定を楽にする方法
Karabiner-Elementsの設定項目をまとめました