From b28f8bd63788c4aaf8a935132ca67cdf2448c6f9 Mon Sep 17 00:00:00 2001 From: tmk Date: Mon, 29 Sep 2014 10:12:58 +0900 Subject: [PATCH] Add action 'Momentary switching with Modifiers' --- common/action.c | 10 ++++++++++ common/action_code.h | 3 ++- doc/keymap.md | 7 +++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/common/action.c b/common/action.c index fddb97c5..83bc8a61 100644 --- a/common/action.c +++ b/common/action.c @@ -237,6 +237,16 @@ void process_action(keyrecord_t *record) case ACT_LAYER_TAP: case ACT_LAYER_TAP_EXT: switch (action.layer_tap.code) { + case 0xe0 ... 0xef: + /* layer On/Off with modifiers(left only) */ + if (event.pressed) { + layer_on(action.layer_tap.val); + register_mods(action.layer_tap.code & 0x0f); + } else { + layer_off(action.layer_tap.val); + unregister_mods(action.layer_tap.code & 0x0f); + } + break; case OP_TAP_TOGGLE: /* tap toggle */ if (event.pressed) { diff --git a/common/action_code.h b/common/action_code.h index 50112d4d..bc40e2c6 100644 --- a/common/action_code.h +++ b/common/action_code.h @@ -71,7 +71,7 @@ along with this program. If not, see . * * ACT_LAYER_TAP(101x): * 101E|LLLL| keycode On/Off with tap key - * 101E|LLLL|1110 xxxx Reserved(0xE0-EF) + * 101E|LLLL|1110 mods On/Off with modifiers(0xE0-EF) * 101E|LLLL|1111 0000 Invert with tap toggle(0xF0) * 101E|LLLL|1111 0001 On/Off * 101E|LLLL|1111 0010 Off/On @@ -266,6 +266,7 @@ enum layer_pram_tap_op { #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) /* 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) diff --git a/doc/keymap.md b/doc/keymap.md index 11feeac2..9d986a8c 100644 --- a/doc/keymap.md +++ b/doc/keymap.md @@ -497,6 +497,13 @@ Number of taps can be configured with `TAPPING_TOGGLE` in `config.h`, `5` by def +### 3.5 Momentary switching with Modifiers +This registers modifier key(s) simultaneously with layer switching. + + ACTION_LAYER_MODS(2, MOD_LSFT | MOD_LALT) + + + ## 4. Tapping Tapping is to press and release a key quickly. Tapping speed is determined with setting of `TAPPING_TERM`, which can be defined in `config.h`, 200ms by default.