Karabiner-Elementsで3連打にキーを割り当てる

# 要約
　MacのキーボードカスタムソフトKarabiner-Elementsの`to_delayed_action`機能を用い、3連打へキー割り当てをした。

# はじめに
　Karabiner-ElementsはMacの（超強力な）キーボードカスタムソフト[[1]]である。2連打へのキー割り当てはいくつも記事があるが、3連打へを割り当ての記事はない。しかし、3連打のへの割り当ても使い所があると考えたので、やってみた。

# 環境
MacOS:  12.4
Karabiner-Elements: 14.5.0

# 準備
## キーリマップを行う手順
 概略は以下。決められた書式でjsonファイルを作成し、所定の場所（`/Users/isseishitakawa/.config/karabiner/assets/complex_modifications/`）にそのjsonファイルを置き、Karabiner-ElementsのGUIで`Complex Modification -> Add rule`で作成したファイルを選択する。使い方の詳細は、公式ダウンロードサイト[[1]]に貼られている公式のGitHub[[7]]、から更に貼られている公式使い方[[8]]を参照。

## "to_delayed_action"　機能
　公式マニュアル[[8]]にもある遠り、2連打へ割り当てする時に使う。少し手を加えて3連打へ割り当てできるようにした。

# 3連打へのキー割り当て
　テンキーの4（`keypad_4`）を1回押すと`a`、2回押すと`b`、3回押すと`c`となるようにした。
　2連打への割り当てのときはフラグを1つ用いるが、3連打へはフラグを2つ用いる。

# キーイベント発火のタイミング微調整
　`to_if_invoked`が実行されるまでの時間はKarabiner-ElementsのGUI操作で`Complex Modifications -> Parameters -> to_delayed_action_delay_milliseconds`で指定できる[[3]][[8]]。デフォルトは500msecで、3連打の時はやや遅く感じる。150msecではやや早く感じる。



```json: makeTriplehitkey.json
{
    "title": "THE_KEYPAD",
         "rules": [
           {
        "description": "MAKE_TRIPLE_HIT_KEY",
             "manipulators": [
{
  "type": "basic",
  "from": { "key_code": "keypad_4" },
  "to": [{ "key_code": "c" }, { "set_variable": { "name": "Fg_2_keypad_4", "value": 0 } }],
  "conditions": [{ "type": "variable_if", "name": "Fg_2_keypad_4", "value": 1 }]
},
{
  "type": "basic",
  "from": {"key_code": "keypad_4","modifiers": { "optional": [ "any" ] }},
  "to": [ { "set_variable": { "name": "Fg_2_keypad_4", "value": 1 } } ],
  "to_delayed_action": {
    "to_if_invoked": [{ "key_code": "b" }, { "set_variable": { "name": "Fg_2_keypad_4", "value": 0 } } ],
    "to_if_canceled": [ { "set_variable": { "name": "Fg_2_keypad_4", "value": 0 } } ] },
  "conditions": [ { "type": "variable_if", "name": "Fg_1_keypad_4", "value": 1 }]
},
{
  "type": "basic",
  "from": {"key_code": "keypad_4","modifiers": { "optional": [ "any" ] }},
  "to": [ { "set_variable": { "name": "Fg_1_keypad_4", "value": 1 } } ],
  "to_delayed_action": {
    "to_if_invoked": [{ "key_code": "a" }, { "set_variable": { "name": "Fg_1_keypad_4", "value": 0 } } ],
    "to_if_canceled": [ { "set_variable": { "name": "Fg_1_keypad_4", "value": 0 } } ] },
  "conditions": [ { "type": "variable_if", "name": "Fg_1_keypad_4", "value": 0 }]
}

            ]
        }
    ]
}
```

# 考察
## 3連打への割り当ての使い所。
### テンキーの`000`キーの活用。
 テンキーでよく見かける`000`キーは`0`キーを3連打したと認識される。したがって`0`キーと`000`キーとのそれぞれに割り当てることが出来ず、`000`キーの分だけ無駄になる。3連打へを割り当てを用いれば`0`キー3連打、すなわち`000`キーも活用できる。


![51LATZ6YyML._AC_SL1000_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/444980/2450041e-0283-e568-1075-41e83055ffbe.jpeg)

(iBUFFALO テンキーボード Mac用 USB接続 スリム 独立キー シルバー BSTK08MSVアマゾンから引用[[9]])


### cutkey
　cutkeyとはミサワホーム総合研究所の加藤善也らが開発した、テンキーサイズのキーボードで、片手でほぼ全てのキーを打てる。いわば20%キーボードである。少ないキーで多数のアルファベットキーを打てるようにするために、学習し易さを考慮してか、複数回打ちを採用している[[10][[11]][[12]]。なお、cutkeyは複数回打ちだけでなく、自作キーボードでよく見る"レイヤーシステム" も使ってキーを稼いでいる。たとえば`NCQ`とかかれたキーを1回打つと`N`、2連打で`C`、3連打で`Q`となる。

　cutkeyは現在入手困難である。自作キーボードで作ることもできるが手間がかかるのと、それ以上に金銭的に高い。であるので、手元にある安いテンキーでcutkeyを手軽に再現できるのは便利である。

 なお、片手あるいは両手持ちでの使用を想定し、その場合は複数回打ちは非合理的と考えられ、レイヤーキー（on-shot-layer）を2つ用い、わずか24キーでほぼフルキーボードを再現する方法もある（cutkeyオマージュで'Re: CUT Key'と名づけておられている）[[14]]。


![81500e6fc831463d.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/444980/e0119924-260b-3655-da46-f8f6fc037196.gif)
(ASCII.jp[[13]])




# 参考

\[1\]閲覧日2022/07/25, Karabiner-Elements, https://karabiner-elements.pqrs.org/, https://karabiner-elements.pqrs.org

\[2\]閲覧日2022/07/25, Karabiner-Elementsを使ってキーの２連打に処理を割り当てる方法 - Qiita, https://qiita.com/s-show/items/c991327a5317c3e0cf4b

\[3\]閲覧日2022/07/25, 快適キーボード操作のためのキーカスタマイズ ～Mac編～ | さくらのナレッジ, https://knowledge.sakura.ad.jp/23355/#to_delayed_action

\[4\]閲覧日2022/07/25, 【USキーボード】Karabiner-Elementsで「英数/かな」の日本語切り替えを同一キー連打に設定する。, https://pycarnival.com/eisuukana/

\[5\]閲覧日2022/07/25, Shift キーを素早く二回押すことで Clipy を起動する - サポンテ 勉強ノート, https://saponote.hatenablog.com/entry/2020/02/17/222926

\[6\]閲覧日2022/07/25, Karabiner-Elements を使って Ctrl 2 回押しでターミナルを開く - gonzo, https://scrapbox.io/gonzoooooo/Karabiner-Elements_%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6_Ctrl_2_%E5%9B%9E%E6%8A%BC%E3%81%97%E3%81%A7%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB%E3%82%92%E9%96%8B%E3%81%8F

\[7\]閲覧日2022/07/25, pqrs-org/Karabiner-Elements: Karabiner-Elements is a powerful utility for keyboard customization on macOS Sierra (10.12) or later., https://github.com/pqrs-org/Karabiner-Elements

\[8\]閲覧日2022/07/25, Documentation | Karabiner-Elements, https://karabiner-elements.pqrs.org/docs/

\[9\]閲覧日2022/07/25, Amazon | iBUFFALO テンキーボード Mac用 USB接続 スリム 独立キー シルバー BSTK08MSV | バッファロー | 家電＆カメラ, https://www.amazon.co.jp/iBUFFALO-%E3%83%86%E3%83%B3%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89-Mac%E7%94%A8-USB%E6%8E%A5%E7%B6%9A-BSTK08MSV/dp/B0053EB6HO/ref=asc_df_B0053EB6HO/?tag=jpgo-22&linkCode=df0&hvadid=225431623414&hvpos=&hvnetw=g&hvrand=14281136794703670154&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009365&hvtargid=pla-441282628451&th=1

\[10\]閲覧日2022/07/25, ニュースリリース｜ミサワホーム：MisawaOnLine-CONTENTS, https://www.misawa.co.jp/corporate/news_release/misawa/pop-up/release-pages/2000_07_12/001226.html

\[11\]閲覧日2022/07/25, テンキー型片手打鍵文字入力方式の実験と評価 | CiNii Research, https://cir.nii.ac.jp/crid/1572261552106343040

\[12\]閲覧日2022/07/25, ASCII.jp：TODAY&#39;S NON-STOP NEWS vol.9, https://ascii.jp/elem/000/000/312/312864/

\[13\]:閲覧日2022/07/25, ASCII.jp：TODAY&#39;S NON-STOP NEWS vol.9, https://ascii.jp/elem/000/000/312/312864/

\[14\]:2022/07/25, TTTキーボード研究室/「Re: CUT Key」=CUT Keyの応用, http://tokyotanuki.jp/keyboards/recutkey.htm

[1]:https://karabiner-elements.pqrs.org
[2]:https://qiita.com/s-show/items/c991327a5317c3e0cf4b
[3]:https://knowledge.sakura.ad.jp/23355/#to_delayed_action
[4]:https://pycarnival.com/eisuukana/
[5]:https://saponote.hatenablog.com/entry/2020/02/17/222926
[6]:https://scrapbox.io/gonzoooooo/Karabiner-Elements_%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6_Ctrl_2_%E5%9B%9E%E6%8A%BC%E3%81%97%E3%81%A7%E3%82%BF%E3%83%BC%E3%83%9F%E3%83%8A%E3%83%AB%E3%82%92%E9%96%8B%E3%81%8F
[7]:https://github.com/pqrs-org/Karabiner-Elements
[8]:https://karabiner-elements.pqrs.org/docs/
[9]:https://www.amazon.co.jp/iBUFFALO-%E3%83%86%E3%83%B3%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89-Mac%E7%94%A8-USB%E6%8E%A5%E7%B6%9A-BSTK08MSV/dp/B0053EB6HO/ref=asc_df_B0053EB6HO/?tag=jpgo-22&linkCode=df0&hvadid=225431623414&hvpos=&hvnetw=g&hvrand=14281136794703670154&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009365&hvtargid=pla-441282628451&th=1
[10]:https://www.misawa.co.jp/corporate/news_release/misawa/pop-up/release-pages/2000_07_12/001226.html
[11]:https://cir.nii.ac.jp/crid/1572261552106343040
[12]:https://ascii.jp/elem/000/000/312/312864/
[13]:https://ascii.jp/elem/000/000/312/312864/
[14]:http://tokyotanuki.jp/keyboards/recutkey.htm