Karabiner-Elementsでcaps lockで修飾キー全押し、caps lock + 修飾キーで押したキー以外の修飾キーを押す方法(reverseキー)

タイトルだけだと、理解できない人もいるかもしませんが、下記の挙動をするキーをKarabiner-Elementsで作成します。
| 押すキー | 押されたことになるキー |
|---|---|
| caps lock | control + option + shift + command |
| caps lock + control | option + shift + command |
| caps lock + option | control + shift + command |
| caps lock + shift | control + option + command |
| caps lock + command | control + option + shift |
本来であれば、control + option + shift + commandは4つのキーを同時に押す必要がありますが、caps lockを1つ押すだけで済みます。
さらに、caps lockと他の修飾キーを一緒に押すと、4つの修飾キーの中から押されたキーを引いたキーが押されたことになります。
この挙動も本来は3つのキーを同時に押す必要があるところを2つで済むようになります。
このような挙動をするキーを勝手に「reverseキー」と呼んでいます。
Karabiner-Elementsの設定
下記のパスに新しい.jsonを作成して、Karabiner-Elementsに独自ルールを追加します。
/Users/ユーザ名/.config/karabiner/assets/complex_modificationsかなり長いですが、ファイルの中身は下記のJSONを貼り付けて保存します(もっとスマートなやり方があるかもしれません)。
{
"title": "reverse key",
"rules": [
{
"description": "Change caps_lock key to reverse key",
"manipulators": [
{
"type": "basic",
"from": {
"key_code": "caps_lock"
},
"to": [
{
"key_code": "left_shift",
"lazy": true,
"modifiers": [
"left_command",
"left_control",
"left_option"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"shift"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"key_code": "left_command",
"lazy": true,
"modifiers": [
"left_option",
"left_control"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"command"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"key_code": "left_shift",
"lazy": true,
"modifiers": [
"left_control",
"left_option"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"option"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"key_code": "left_shift",
"lazy": true,
"modifiers": [
"left_command",
"left_control"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"control"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"key_code": "left_shift",
"lazy": true,
"modifiers": [
"left_command",
"left_option"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"shift",
"command"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"key_code": "left_option",
"lazy": true,
"modifiers": [
"left_control"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"shift",
"option"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"key_code": "left_command",
"lazy": true,
"modifiers": [
"left_control"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"shift",
"control"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"key_code": "left_command",
"lazy": true,
"modifiers": [
"left_option"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"command",
"option"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"key_code": "left_shift",
"lazy": true,
"modifiers": [
"left_control"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"command",
"control"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"key_code": "left_shift",
"lazy": true,
"modifiers": [
"left_option"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"control",
"option"
],
"optional": [
"caps_lock"
]
}
},
"to": [
{
"key_code": "left_shift",
"lazy": true,
"modifiers": [
"left_command"
]
}
]
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"command",
"option",
"control"
],
"optional": [
"caps_lock"
]
}
},
"to": {
"key_code": "left_shift",
"lazy": true
}
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"command",
"option",
"shift"
],
"optional": [
"caps_lock"
]
}
},
"to": {
"key_code": "left_control",
"lazy": true
}
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"command",
"control",
"shift"
],
"optional": [
"caps_lock"
]
}
},
"to": {
"key_code": "left_option",
"lazy": true
}
},
{
"type": "basic",
"from": {
"key_code": "caps_lock",
"modifiers": {
"mandatory": [
"option",
"control",
"shift"
],
"optional": [
"caps_lock"
]
}
},
"to": {
"key_code": "left_command",
"lazy": true
}
}
]
}
]
}保存したら、Karabiner-Elementsを起動して[Complex modifications]→[Rules]の「Add rule」で「Change caps_lock key to reverse key」を追加(Enable)します。

キーを押す順番
caps lockは他の修飾キーとは違う特殊なキーのため、ショートカットキーを押す順番が制限されてしまいます。
具体的には「修飾キー → caps lock → 他のキー」と入力しないとreverseキーの挙動になりません。
逆に「caps lock → 修飾キー → →他のキー」の場合は修飾キー全押し判定になってしまいます。

Google DriveのmacOSアプリ「バックアップと同期」のインストールと最低限の設定方法
作業効率化に大きく貢献してくれているMacのアプリ達
Adobe XD × Keyboard Maestroでここまでできる!ショートカットキーであらゆることを実現するマクロサンプル
Apple Watchの余計な通知を来ないようにして快適にする方法
PNG画像の圧縮をpngquantとAutomatorを使って右クリックメニューからできるようにする
Alfredのスニペット機能を便利に使いこなすための管理方法
知っていると作業が少しラクになるMacの豆知識 #1日1Tips – 2019年12月
MAMPでhtdocs内に複数のローカルホストを作成する方法
Path Finder9.0.7からドロップスタックを折りたたまない設定が追加!
Macのホームディレクトリにある設定ファイルをDropboxで管理する
AirPodsで片耳を外しても再生が止まらないようにする方法
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
Visual Studio CodeでMovable TypeのMTMLファイルを開く拡張機能「Movable Type Markup Language Syntax」
コーディングで「スペース」と「タブ」のどちらを使えばいいのか?
iCLUSTA+でWordPressのアップロード容量を上げたいときのメモ
SourceTreeで環境設定の「カスタムアクション」「アップデート」「高度な設定」が選択できない
散らかりがちなMacのメニューバーをBartender 3でキレイに整理する
Apple WatchでiPhoneやMacのロック解除を行う方法
Visual Studio CodeのEasy Sassを使って簡単にSassのコンパイルを行う方法
Path Finder 9.3.5のアップデート内容はラベル・タグ周りの修正!そしていつの間にかカラーラベルのカスタマイズが可能に!
ウインドウリサイズ系のアプリMagnet・ShiftIt・BetterTouchToolの比較
Fantastical 2 for Macでスムーズにカレンダーの登録を行う