QMKで単押し時のみレイヤをトグルする
たとえば,以下のような動作をさせたいとする
Fn を押して離す → 次に Fn を押して離すまでレイヤが有効になる(トグル動作)
Fn を押しながら何かキーを押す → Fn を離したらレイヤが無効になる(モメンタリ動作)
安直に LT(_NUM, TG(_NUM)) ではダメだった
Tap Dance を使った実装
公式的にはこうして欲しいらしい hsgw.icon
自前実装した例
入力が時間依存になるのが気になったので以下のように書いた.あまりベストプラクティスではないかもlunar0.icon
code:keymap.c
uint16_t prev_press = 0x00;
bool is_NUM_on = false;
bool process_r ecord_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
// Toggle Num layer based on previous key stroke and current layer state
case CK_NUM:
if (record->event.pressed) {
layer_on(_NUM);
} else {
if (prev_press == CK_NUM) {
if (is_NUM_on) {
layer_off(_NUM);
is_NUM_on = false;
} else {
is_NUM_on = true;
}
} else {
layer_off(_NUM);
}
}
break;
}
// Store previous key press
if (record -> event.pressed) {
prev_press = keycode;
}
return true;
}