見出し画像

Karabiner-Elementsで自作キーボードのレイヤー機能を再現する方法

記事通りに進めると、スペースを押しながらテンキーの数字キーや、スクショコマンドが打てるレイヤーが実装できるはずです。

⓪Karabiner-Elementsをダウンロード

ダウンロード後、案内の通りに権限を与えてください。SimpleModificationでキーの書き換えができることを確認したらOK!

①テンプレートファイルをダウンロード

②ファイルを移動

~/.config/karabiner/assets/complex_modifications

上記のパスにファイルを移動してください。
パスをコピーしてFinderを開き「⇧⌘G」でフォルダに移動。ファイルをドラドロ。完了するとこんな感じになります。

MacBook本体キーボードなら何も変更しなくても多分大丈夫ですが、他のキーボードの場合はKarabiner-ElementsでIDを確認、VisualCodeなどのエディタで変更をしてください。
これは特定のデバイスのみでキーの変更が行われるようにするために必要です。

③Karabiner-Elementsで設定をインポート

Karabiner-Elementsを開いてComplexModificationsからAdd predefined ruleをクリック
layerSpacebarのEnableAllをクリック
これで完了
上から書き換えが実行されていきます。

スペースを押しながらASDFあたりを押してみて数字が入力されれば成功です。

VSCodeで自分なりにカスタマイズしてみましょう!

④自分で好きなコマンドを好きな位置に入れてみよう

VisualStudioCodeなどのエディタでファイルを編集します。入ってなければダウンロードしましょう。

さっきのcomplex_modificationsフォルダをエディタで開いて、編集します。

開くとこんな感じ。

LayerSpacebar.jsonには2つの書き換えルールがあります。

                            "to": [
                        {
                            "set_variable": {
                                "name": "layerSpacebar",
                                "value": 1
                            }
                        }
                    ],
                    "to_if_alone": [
                        {
                            "key_code": "spacebar"
                        }
                    ],
                    "to_after_key_up": [
                        {
                            "set_variable": {
                                "name": "layerSpacebar",
                                "value": 0
                            }
                        }
                    ]

1つ目のルールはスペースを押すと変数の値を変更して、もしスペースしか押されなかった時はスペースを出力し、キーが持ち上がったら変数の値を戻すものです。
この変数を条件付けに使用してレイヤー機能を擬似的に再現できます。これはフォロイーに教えてもらった。

2つ目のルールはキーマップ分あるのでかなり長いです。

例えばスペースを押しながら「1」を押した時の挙動はこうなってる。

大体こんな意味だと思います。僕もよくわかってない。
Device_ifの部分はMacBookの本体キーボードのIDなので、他の自分のキーボードでやりたい場合はそのIDに書き換える必要があります。

vk_noneは虚無のキーコードです。
ここを書き換えればスペース押しながら押した時に出力されるキーが変えられます。コピーのコマンド⌘Cを入れたかったら

"key_code": "c", "modifiers": "left_command"

みたいに"to"の中身を書けば良いわけです。2つ以上の修飾キーなら[]でくくる感じ。スクショのコマンドを真似すればおっけい。
キーの綴りやがわからないときはEvent Viewerかググるか。

EventViewerはここから
ここでキーの出力、キーコードが確認できる。

って感じでテンプレファイルを自由にカスタマイズしていってください!

JISの場合キーコードと名前が異なるところがあるので注意。

終わり

どうでしょうか?
好きなコマンドを親指ともう一つの指だけで完結できるのはかなり便利なはずです。
また、アプリを識別する条件もつけられるのでアプリ別にショートカットを構築するのも可能です。

この記事ではレイヤ機能を再現しましたが、Tap・Hold、ダブルタップ、コンボ(同時押し)なども可能です。サンプルファイルはここに置いておいたので、よければ使ってみてください。

最強すぎるKarabiner-Elements。

僕もあんまりわかってないままこの記事を書いているので、より良い書き換え方法があったら教えてください!多分動きはします。
皆さんのキーボード環境が良くなれば幸いです。それでは〜