summaryrefslogtreecommitdiff
path: root/quantum/keymap_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/keymap_common.c')
-rw-r--r--quantum/keymap_common.c40
1 files changed, 34 insertions, 6 deletions
diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c
index b4feb39739..7b863af3b5 100644
--- a/quantum/keymap_common.c
+++ b/quantum/keymap_common.c
@@ -80,14 +80,20 @@ action_t action_for_keycode(uint16_t keycode) {
action.code = ACTION_MODS_KEY(mod_config(QK_MODS_GET_MODS(keycode)), keycode_config(QK_MODS_GET_BASIC_KEYCODE(keycode))); // adds modifier to key
#endif // LEGACY_MAGIC_HANDLING
break;
-#ifndef NO_ACTION_LAYER
case QK_LAYER_TAP ... QK_LAYER_TAP_MAX:
+#if !defined(NO_ACTION_LAYER) && !defined(NO_ACTION_TAPPING)
# ifdef LEGACY_MAGIC_HANDLING
action.code = ACTION_LAYER_TAP_KEY(QK_LAYER_TAP_GET_LAYER(keycode), QK_LAYER_TAP_GET_TAP_KEYCODE(keycode));
# else // LEGACY_MAGIC_HANDLING
action.code = ACTION_LAYER_TAP_KEY(QK_LAYER_TAP_GET_LAYER(keycode), keycode_config(QK_LAYER_TAP_GET_TAP_KEYCODE(keycode)));
# endif // LEGACY_MAGIC_HANDLING
+#else
+ // pass through keycode_config again, since it previously missed it
+ // and then only send as ACTION_KEY to bypass most of action.c handling
+ action.code = ACTION_KEY(keycode_config(QK_LAYER_TAP_GET_TAP_KEYCODE(keycode)));
+#endif
break;
+#ifndef NO_ACTION_LAYER
case QK_TO ... QK_TO_MAX:;
// Layer set "GOTO"
action_layer = QK_TO_GET_LAYER(keycode);
@@ -115,32 +121,54 @@ action_t action_for_keycode(uint16_t keycode) {
action_layer = QK_ONE_SHOT_LAYER_GET_LAYER(keycode);
action.code = ACTION_LAYER_ONESHOT(action_layer);
break;
+#endif // NO_ACTION_ONESHOT
case QK_ONE_SHOT_MOD ... QK_ONE_SHOT_MOD_MAX:;
// OSM(mod) - One-shot mod
- mod = mod_config(QK_ONE_SHOT_MOD_GET_MODS(keycode));
+ mod = mod_config(QK_ONE_SHOT_MOD_GET_MODS(keycode));
+#if defined(NO_ACTION_TAPPING) || defined(NO_ACTION_ONESHOT)
+ action.code = ACTION_MODS(mod);
+#else // defined(NO_ACTION_TAPPING) || defined(NO_ACTION_ONESHOT)
action.code = ACTION_MODS_ONESHOT(mod);
+#endif // defined(NO_ACTION_TAPPING) || defined(NO_ACTION_ONESHOT)
break;
-#endif
#ifndef NO_ACTION_LAYER
case QK_LAYER_TAP_TOGGLE ... QK_LAYER_TAP_TOGGLE_MAX:
+# ifndef NO_ACTION_TAPPING
action.code = ACTION_LAYER_TAP_TOGGLE(QK_LAYER_TAP_TOGGLE_GET_LAYER(keycode));
+# else // NO_ACTION_TAPPING
+# ifdef NO_ACTION_TAPPING_TAP_TOGGLE_MO
+ action.code = ACTION_LAYER_MOMENTARY(QK_LAYER_TAP_TOGGLE_GET_LAYER(keycode));
+# else // NO_ACTION_TAPPING_TAP_TOGGLE_MO
+ action.code = ACTION_LAYER_TOGGLE(QK_LAYER_TAP_TOGGLE_GET_LAYER(keycode));
+# endif // NO_ACTION_TAPPING_TAP_TOGGLE_MO
+# endif // NO_ACTION_TAPPING
break;
case QK_LAYER_MOD ... QK_LAYER_MOD_MAX:
mod = mod_config(QK_LAYER_MOD_GET_MODS(keycode));
action_layer = QK_LAYER_MOD_GET_LAYER(keycode);
action.code = ACTION_LAYER_MODS(action_layer, (mod & 0x10) ? mod << 4 : mod);
break;
-#endif
-#ifndef NO_ACTION_TAPPING
+#endif // NO_ACTION_LAYER
case QK_MOD_TAP ... QK_MOD_TAP_MAX:
+#ifndef NO_ACTION_TAPPING
mod = mod_config(QK_MOD_TAP_GET_MODS(keycode));
# ifdef LEGACY_MAGIC_HANDLING
action.code = ACTION_MODS_TAP_KEY(mod, QK_MOD_TAP_GET_TAP_KEYCODE(keycode));
# else // LEGACY_MAGIC_HANDLING
action.code = ACTION_MODS_TAP_KEY(mod, keycode_config(QK_MOD_TAP_GET_TAP_KEYCODE(keycode)));
# endif // LEGACY_MAGIC_HANDLING
+#else // NO_ACTION_TAPPING
+# ifdef NO_ACTION_TAPPING_MODTAP_MODS
+ // pass through mod_config again, since it previously missed it
+ // and then only send as ACTION_KEY to bypass most of action.c handling
+ action.code = ACTION_MODS(mod_config(QK_MOD_TAP_GET_MODS(keycode)));
+# else // NO_ACTION_TAPPING_MODTAP_MODS
+ // pass through keycode_config again, since it previously missed it
+ // and then only send as ACTION_KEY to bypass most of action.c handling
+ action.code = ACTION_KEY(keycode_config(QK_MOD_TAP_GET_TAP_KEYCODE(keycode)));
+# endif // NO_ACTION_TAPPING_MODTAP_MODS
+#endif // NO_ACTION_TAPPING
break;
-#endif
#ifdef SWAP_HANDS_ENABLE
case QK_SWAP_HANDS ... QK_SWAP_HANDS_MAX:
# ifdef LEGACY_MAGIC_HANDLING