{
uint8_t mods = (action.kind.id == ACT_LMODS_TAP) ? action.key.mods :
action.key.mods<<4;
- switch (action.layer_tap.code) {
+ switch (action.key.code) {
#ifndef NO_ACTION_ONESHOT
case MODS_ONESHOT:
// Oneshot modifier
case ACT_LAYER_TAP:
case ACT_LAYER_TAP_EXT:
switch (action.layer_tap.code) {
- case 0xe0 ... 0xef:
- /* layer On/Off with modifiers(left only) */
+ case 0xc0 ... 0xdf:
+ /* layer On/Off with modifiers */
if (event.pressed) {
layer_on(action.layer_tap.val);
- register_mods(action.layer_tap.code & 0x0f);
+ register_mods((action.layer_tap.code & 0x10) ?
+ (action.layer_tap.code & 0x0f) << 4 :
+ (action.layer_tap.code & 0x0f));
} else {
layer_off(action.layer_tap.val);
- unregister_mods(action.layer_tap.code & 0x0f);
+ unregister_mods((action.layer_tap.code & 0x10) ?
+ (action.layer_tap.code & 0x0f) << 4 :
+ (action.layer_tap.code & 0x0f));
}
break;
case OP_TAP_TOGGLE:
switch (action.kind.id) {
case ACT_LMODS_TAP:
case ACT_RMODS_TAP:
+ switch (action.key.code) {
+ case MODS_ONESHOT:
+ case MODS_TAP_TOGGLE:
+ case KC_A ... KC_EXSEL: // tap key
+ case KC_LCTRL ... KC_RGUI: // tap key
+ return true;
+ }
case ACT_LAYER_TAP:
case ACT_LAYER_TAP_EXT:
switch (action.layer_tap.code) {
- case KC_A ... KC_EXSEL:
- case KC_KP_00 ... KC_KP_HEXADECIMAL:
- case KC_LCTRL ... KC_RGUI:
+ case 0xc0 ... 0xdf: // with modifiers
+ return false;
+ case KC_A ... KC_EXSEL: // tap key
+ case KC_LCTRL ... KC_RGUI: // tap key
case OP_TAP_TOGGLE:
return true;
}
* 000r|0000|0000 0001 Transparent code
* 000r|0000| keycode Key
* 000r|mods|0000 0000 Modifiers
- * 000r|mods| keycode Modifiers+Key(Modified key)
+ * 000r|mods| keycode Modifiers+key(Modified key)
* r: Left/Right flag(Left:0, Right:1)
*
* ACT_MODS_TAP(001r):
- * 001r|mods|0000 0000 Modifiers with OneShot
- * 001r|mods|0000 0001 Modifiers with tap toggle
- * 001r|mods|0000 00xx (reserved)
- * 001r|mods| keycode Modifiers with Tap Key(Dual role)
+ * 001r|mods|0000 0000 Modifiers with OneShot[TAP]
+ * 001r|mods|0000 0001 Modifiers with tap toggle[TAP]
+ * 001r|mods|0000 00xx (reserved) (0x02-03)
+ * 001r|mods| keycode Modifiers with tap key(0x04-A4, E0-E7)[TAP]
+ * (reserved) (0xA5-DF, E8-FF)
*
*
* Other Keys(01xx)
* 1001|oopp|BBBB BBBB 8-bit Bitwise Operation???
*
* ACT_LAYER_TAP(101x):
- * 101E|LLLL| keycode On/Off with tap key (0x00-DF)[TAP]
- * 101E|LLLL|1110 mods On/Off with modifiers (0xE0-EF)[NOT TAP]
+ * 101E|LLLL| keycode On/Off with tap key (0x04-A4, E0-E7)[TAP]
+ * 101E|LLLL|110r mods On/Off with modifiers (0xC0-DF)[NOT TAP]
+ * r: Left/Right flag(Left:0, Right:1)
+ * (reserved) (0xA5-BF, E8-EF)
* 101E|LLLL|1111 0000 Invert with tap toggle (0xF0) [TAP]
* 101E|LLLL|1111 0001 On/Off (0xF1) [NOT TAP]
* 101E|LLLL|1111 0010 Off/On (0xF2) [NOT TAP]
* 101E|LLLL|1111 0011 Set/Clear (0xF3) [NOT TAP]
- * 101E|LLLL|1111 xxxx Reserved (0xF4-FF)
+ * 101E|LLLL|1111 xxxx (reserved) (0xF4-FF)
* ELLLL: layer 0-31(E: extra bit for layer 16-31)
*
*
#define ACTION_LAYER_ON_OFF(layer) ACTION_LAYER_TAP((layer), OP_ON_OFF)
#define ACTION_LAYER_OFF_ON(layer) ACTION_LAYER_TAP((layer), OP_OFF_ON)
#define ACTION_LAYER_SET_CLEAR(layer) ACTION_LAYER_TAP((layer), OP_SET_CLEAR)
-#define ACTION_LAYER_MODS(layer, mods) ACTION_LAYER_TAP((layer), 0xe0 | ((mods)&0x0f))
+#define ACTION_LAYER_MODS(layer, mods) ACTION_LAYER_TAP((layer), 0xc0 | ((mods)&0x1f))
/* With Tapping */
#define ACTION_LAYER_TAP_KEY(layer, key) ACTION_LAYER_TAP((layer), (key))
#define ACTION_LAYER_TAP_TOGGLE(layer) ACTION_LAYER_TAP((layer), OP_TAP_TOGGLE)