QMKのTap Hold設定したキーでTap対象を長押しする
QMKファームウェアでは一つのキーに複数の機能を持たせる方法の一つとして、Tap Hold設定がある。例えば、
- 短く押したとき(Tap)はエスケープの動作
- 長く押したとき(Hold)は左コントロールの動作
としたいなら、keymap.cのkeymaps配列に LCTL_T(KC_ESC)
と書いておけばいい(Mod-Tap)。Remap を使って設定する場合は下図のようにHold/Tapを選択して設定する。
TapなのかHoldなのかの判定はキーを押してから上げるまでの間隔が TAPPING_TERM (デフォルト200ms) 未満かどうかで制御される。
では、Tap Hold設定をしている状況で、Tapで指定したキーの長押しの動作をさせたいならどうすればよいだろう?
自分が遭遇したのは、LT(2, KC_SPC)
という設定をしていて、Zoom で一時的にミュートを解除するときのスペース長押しができないという困りごと。
最初はTap Holdの設定を諦めて KC_SPC
に変更して回避していたのだが、それだとキー数に対して割り当てられる機能が減ってしまう。
そんな時に公式ドキュメントを読んでいて、Tap-Hold Configuration Options > Quick Tap Termを見つけてTapした直後にHoldの操作をすれば良いことを知った。つまり、LT(2, KC_SPC)
と設定したキーだと
- Tap: KC_SPC↓↑
- Hold: MO(2)↓
に加え、タターンと続けて操作した場合には
- Tap, Hold: KC_SPC↓↑, KC_SPC↓
という動作になる。ただし、Tapのキー上げからHoldのキー押しまでの間隔が QUICK_TAP_TERM (デフォルトは TAPPING_TERM と同じ) 未満であることが条件で、間隔が開いている場合には KC_SPC↓↑, MO(2)↓という動作になるので、タターンと軽やかに操作する必要があることに注意。
これを使って、LT(2, KC_SPC)
と設定したキーの操作でZoomのミュート解除ができることを確認した(一回目のKC_SPC↑でポッと余計な音がなってしまうのは許容するとして[1])。
Discussion