core: Change MOD_* definition to make OR(|) usable
https://github.com/tmk/tmk_keyboard/issues/448#issuecomment-285066234
This commit is contained in:
parent
44fc56a869
commit
a71a0ef9d5
2 changed files with 41 additions and 32 deletions
|
@ -200,26 +200,26 @@ typedef union {
|
||||||
* bit 4 +----- LR flag(Left:0, Right:1)
|
* bit 4 +----- LR flag(Left:0, Right:1)
|
||||||
*/
|
*/
|
||||||
enum mods_bit {
|
enum mods_bit {
|
||||||
MOD_NONE = 0x00,
|
MOD_NONE = 0x0000,
|
||||||
MOD_LCTL = 0x01,
|
MOD_LCTL = 0x0100,
|
||||||
MOD_LSFT = 0x02,
|
MOD_LSFT = 0x0200,
|
||||||
MOD_LALT = 0x04,
|
MOD_LALT = 0x0400,
|
||||||
MOD_LGUI = 0x08,
|
MOD_LGUI = 0x0800,
|
||||||
MOD_RCTL = 0x11,
|
MOD_RCTL = 0x1100,
|
||||||
MOD_RSFT = 0x12,
|
MOD_RSFT = 0x1200,
|
||||||
MOD_RALT = 0x14,
|
MOD_RALT = 0x1400,
|
||||||
MOD_RGUI = 0x18,
|
MOD_RGUI = 0x1800,
|
||||||
};
|
};
|
||||||
enum mods_codes {
|
enum mods_codes {
|
||||||
MODS_ONESHOT = 0x00,
|
MODS_ONESHOT = 0x00,
|
||||||
MODS_TAP_TOGGLE = 0x01,
|
MODS_TAP_TOGGLE = 0x01,
|
||||||
};
|
};
|
||||||
#define ACTION_KEY(key) ACTION(ACT_MODS, (key))
|
#define ACTION_KEY(key) ACTION(ACT_MODS, (key))
|
||||||
#define ACTION_MODS(mods) ACTION(ACT_MODS, ((mods)&0x1f)<<8 | 0)
|
#define ACTION_MODS(mods) ACTION(ACT_MODS, ((mods)&0x1f00) | 0)
|
||||||
#define ACTION_MODS_KEY(mods, key) ACTION(ACT_MODS, ((mods)&0x1f)<<8 | (key))
|
#define ACTION_MODS_KEY(mods, key) ACTION(ACT_MODS, ((mods)&0x1f00) | (key))
|
||||||
#define ACTION_MODS_TAP_KEY(mods, key) ACTION(ACT_MODS_TAP, ((mods)&0x1f)<<8 | (key))
|
#define ACTION_MODS_TAP_KEY(mods, key) ACTION(ACT_MODS_TAP, ((mods)&0x1f00) | (key))
|
||||||
#define ACTION_MODS_ONESHOT(mods) ACTION(ACT_MODS_TAP, ((mods)&0x1f)<<8 | MODS_ONESHOT)
|
#define ACTION_MODS_ONESHOT(mods) ACTION(ACT_MODS_TAP, ((mods)&0x1f00) | MODS_ONESHOT)
|
||||||
#define ACTION_MODS_TAP_TOGGLE(mods) ACTION(ACT_MODS_TAP, ((mods)&0x1f)<<8 | MODS_TAP_TOGGLE)
|
#define ACTION_MODS_TAP_TOGGLE(mods) ACTION(ACT_MODS_TAP, ((mods)&0x1f00) | MODS_TAP_TOGGLE)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -271,7 +271,7 @@ enum layer_pram_tap_op {
|
||||||
#define ACTION_LAYER_ON_OFF(layer) ACTION_LAYER_TAP((layer), OP_ON_OFF)
|
#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_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_SET_CLEAR(layer) ACTION_LAYER_TAP((layer), OP_SET_CLEAR)
|
||||||
#define ACTION_LAYER_MODS(layer, mods) ACTION_LAYER_TAP((layer), 0xc0 | ((mods)&0x1f))
|
#define ACTION_LAYER_MODS(layer, mods) ACTION_LAYER_TAP((layer), 0xc0 | ((mods>>8)&0x1f))
|
||||||
/* With Tapping */
|
/* With Tapping */
|
||||||
#define ACTION_LAYER_TAP_KEY(layer, key) ACTION_LAYER_TAP((layer), (key))
|
#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)
|
#define ACTION_LAYER_TAP_TOGGLE(layer) ACTION_LAYER_TAP((layer), OP_TAP_TOGGLE)
|
||||||
|
|
|
@ -250,21 +250,30 @@ You can define these actions on *'A'* key and *'left shift'* modifier with:
|
||||||
ACTION_KEY(KC_LSFT)
|
ACTION_KEY(KC_LSFT)
|
||||||
|
|
||||||
#### 2.1.2 Modified key
|
#### 2.1.2 Modified key
|
||||||
This action is comprised of strokes of modifiers and a key. `Macro` action is needed if you want more complex key strokes.
|
This action is comprised of modifiers and a key.
|
||||||
|
|
||||||
Say you want to assign a key to `Shift + 1` to get character *'!'* or `Alt + Tab` to switch application windows.
|
Modified keys can be defined as below. Say you want to assign a key to `Shift + 1` to get character *'!'* or `Alt + Tab` to switch application windows.
|
||||||
|
|
||||||
ACTION_MODS_KEY(MOD_LSFT, KC_1)
|
ACTION_MODS_KEY(MOD_LSFT, KC_1)
|
||||||
ACTION_MODS_KEY(MOD_LALT, KC_TAB)
|
ACTION_MODS_KEY(MOD_LALT, KC_TAB)
|
||||||
|
|
||||||
Or `Alt,Shift + Tab` can be defined. `ACTION_MODS_KEY(mods, key)` requires **4-bit modifier state** and a **keycode** as arguments. See `keycode.h` for `MOD_BIT()` macro.
|
|
||||||
|
|
||||||
ACTION_MODS_KEY(MOD_LALT | MOD_LSFT, KC_TAB)
|
ACTION_MODS_KEY(MOD_LALT | MOD_LSFT, KC_TAB)
|
||||||
|
|
||||||
|
These are identical to examples above.
|
||||||
|
|
||||||
|
ACTION_KEY(MOD_LSFT | KC_1)
|
||||||
|
ACTION_KEY(MOD_LALT | KC_TAB)
|
||||||
|
ACTION_KEY(MOD_LSFT | MOD_LALT | KC_TAB)
|
||||||
|
|
||||||
#### 2.1.3 Multiple Modifiers
|
#### 2.1.3 Multiple Modifiers
|
||||||
Registers multiple modifiers with pressing a key. To specify multiple modifiers use `|`.
|
Registers multiple modifiers with pressing a key. To specify multiple modifiers use `|`.
|
||||||
|
|
||||||
ACTION_MODS(MOD_ALT | MOD_LSFT)
|
ACTION_MODS(MOD_LALT | MOD_LSFT)
|
||||||
|
ACTION_MODS(MOD_LALT | MOD_LSFT | MOD_LCTL)
|
||||||
|
|
||||||
|
These are identical to examples above.
|
||||||
|
|
||||||
|
ACTION_KEY(MOD_LALT | MOD_LSFT, KC_NO)
|
||||||
|
ACTION_KEY(MOD_LALT | MOD_LSFT | MOD_LCTL, KC_NO)
|
||||||
|
|
||||||
#### 2.1.3 Modifier with Tap key([Dual role][dual_role])
|
#### 2.1.3 Modifier with Tap key([Dual role][dual_role])
|
||||||
Works as a modifier key while holding, but registers a key on tap(press and release quickly).
|
Works as a modifier key while holding, but registers a key on tap(press and release quickly).
|
||||||
|
|
Reference in a new issue