layer_state variable not seem to reflect currently active momentary layers, I am using 20160525 downloaded codes not latest
[1] = ACTION_LAYER_TAP_KEY(2, KC_SPC) //momentary layer
[11] = ACTION_LAYER_TOGGLE(2), //toggle layer, which works fine
below is my code, see LSFT_DQT
#include "keymap_common.h"
#include "action_util.h"
#include "action_layer.h"
const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
KEYMAP_ALL(
F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
FN6, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, MENU,UNDO,
FN5,A, S, D, F, G, H, J, K, L, SCLN,QUOT, NUHS,ENT, P4, P5, P6, PCMM, SLCT,COPY,
FN7,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RO, FN8, UP, P1, P2, P3, PEQL, EXEC,PSTE,
LCTL,LGUI,LALT,FN2,HANJ, FN1, HAEN,FN0, FN3,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND, CUT
),
[1] = \
KEYMAP_ALL(
F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, FN0,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
TRNS, TRNS, FN15, E, FN19, T, Y, U, I, O, P, LBRC,RBRC, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, MENU,UNDO,
CAPS,FN18, FN17, D, F, G, H, J, K, L, SCLN,QUOT, NUHS,ENT, P4, P5, P6, PCMM, SLCT,COPY,
TRNS,TRNS,FN10, TRNS, FN16, V, B, N, M, COMM,DOT, SLSH, RO, FN8, UP, P1, P2, P3, PEQL, EXEC,PSTE,
TRNS,TRNS,TRNS,MHEN,TRNS, FN11, TRNS,TRNS, FN3,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND, CUT
),
[2] = \
KEYMAP(
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PSCR,SLCK,BRK,
TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
TRNS, ESC,FN15,PGUP, FN4,F12, JYEN,PGUP,TRNS,HOME, TRNS, TRNS, TRNS, TRNS, DEL, END, PGDN, P7, P8, P9,
TRNS,TRNS, LEFT,PGDN,RGHT,TRNS, LEFT,DOWN,UP, RGHT,KP_PLUS, TRNS, TRNS, P4, P5, P6, PPLS,
FN7,FN10, DEL, EQL, TRNS, BSPC, END,FN9,FN13,FN14, TRNS, TRNS, UP, P1, P2, P3,
FN20,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS, TRNS, LEFT,DOWN,RGHT, P0, PDOT,PENT
),
[3] = \
KEYMAP(
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PSCR,SLCK,BRK,
TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
TRNS, TRNS,TRNS,TRNS, TRNS,TRNS, TRNS,TRNS,F4,TRNS, TRNS, TRNS, TRNS, TRNS, DEL, END, PGDN, P7, P8, P9,
TRNS,TRNS, FN12,DOWN,TAB,TRNS, FN12,DOWN,UP, TAB,TRNS, TRNS, TRNS, P4, P5, P6, PPLS,
TRNS,TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,TRNS,TRNS,TRNS, TRNS, TRNS, UP, P1, P2, P3,
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS, TRNS, FN12,DOWN,TAB, P0, PDOT,PENT
),
[4] = \
KEYMAP(
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PSCR,SLCK,BRK,
TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
TRNS, TRNS,TRNS,TRNS, TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS, TRNS, TRNS, TRNS, DEL, END, PGDN, P7, P8, P9,
TRNS,TRNS, LEFT,DOWN,RGHT,TRNS, LEFT,DOWN,UP, RIGHT,TRNS, TRNS, TRNS, P4, P5, P6, PPLS,
TRNS,TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,TRNS,TRNS,TRNS, TRNS, TRNS, UP, P1, P2, P3,
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS, TRNS, LEFT,DOWN,RGHT, P0, PDOT,PENT
),
[5] = \
KEYMAP(
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PSCR,SLCK,BRK,
TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
NO, FN9, NO, NO, TRNS, NO, WH_L,WH_D,MS_U,WH_U,WH_R,WBAK,WFWD,NO, DEL, END, PGDN, P7, P8, P9,
LCTL,ACL0,ACL1,ACL2,ACL2,NO, MS_L,MS_D,MS_U,MS_R,TRNS,NO, ENT, P4, P5, P6, PPLS,
LSFT,FN10, NO, NO, NO, BTN3,BTN2,FN10,BTN4,BTN5,NO, RSFT, UP, P1, P2, P3,
LCTL,LGUI,LALT, BTN1, RALT,TRNS,TRNS,RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
),
[6] = \
KEYMAP(
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PSCR,SLCK,BRK,
TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
TRNS, ESC,TRNS,PGUP, FN4,F12, JYEN,PGUP,TRNS,HOME, TRNS, TRNS, TRNS, TRNS, DEL, END, PGDN, P7, P8, P9,
TRNS,TRNS, LEFT,PGDN,RGHT,TRNS, LEFT,DOWN,UP, RGHT,KP_PLUS, TRNS, TRNS, P4, P5, P6, PPLS,
TRNS,FN10, DEL, EQL, TRNS, BSPC, END,FN9,FN13,FN14, TRNS, TRNS, UP, P1, P2, P3,
TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS, TRNS, LEFT,DOWN,RGHT, P0, PDOT,PENT
)
};
enum function_id {
LALT_TAB,
LSFT_DQT,
TGGL_MOD,
};
const uint16_t fn_actions[] PROGMEM = {
[0] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),
[1] = ACTION_LAYER_TAP_KEY(2, KC_SPC) ,
[2] = ACTION_MODS_TAP_KEY(MOD_LALT, KC_RO),
[3] = ACTION_LAYER_TAP_KEY(1, KC_BSPC) ,
[4] = ACTION_LAYER_TOGGLE(6),
[5] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_RBRC),
[6] = ACTION_FUNCTION_TAP(LALT_TAB),
[7] = ACTION_FUNCTION_TAP(LSFT_DQT),
[8] = ACTION_MODS_TAP_TOGGLE(MOD_RSFT),
[9] = ACTION_LAYER_TOGGLE(5),
[10] = ACTION_LAYER_SET_CLEAR(0),
[11] = ACTION_LAYER_TOGGLE(2),
[12] = ACTION_MODS_KEY(MOD_RSFT, KC_TAB),
[13] = ACTION_MODS_KEY(MOD_RSFT | MOD_RCTL, KC_TAB),
[14] = ACTION_MODS_KEY(MOD_RCTL, KC_TAB),
[15] = ACTION_FUNCTION_OPT(TGGL_MOD, MOD_LGUI),
[16] = ACTION_FUNCTION_OPT(TGGL_MOD, MOD_LCTL),
[17] = ACTION_FUNCTION_OPT(TGGL_MOD, MOD_LSFT),
[18] = ACTION_FUNCTION_OPT(TGGL_MOD, MOD_LALT),
[19] = ACTION_LAYER_TAP_KEY(5, KC_R),
[20] = ACTION_MODS_KEY(MOD_LALT, KC_PSCR)
};
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch (id) {
case LALT_TAB:
if (record->event.pressed) {
if (record->tap.count > 0 && !record->tap.interrupted) {
if (record->tap.interrupted) {
layer_on(3);
register_mods(MOD_BIT(KC_LALT));
register_code(KC_TAB);
unregister_code(KC_TAB);
}
} else {
layer_on(3);
register_mods(MOD_BIT(KC_LALT));
register_code(KC_TAB);
unregister_code(KC_TAB);
}
} else {
if (record->tap.count > 0 && !(record->tap.interrupted)) {
register_code(KC_TAB);
unregister_code(KC_TAB);
record->tap.count = 0;
} else {
unregister_mods(MOD_BIT(KC_LALT));
layer_off(3);
}
}
break;
case TGGL_MOD:
if (record->event.pressed) {
if (opt & get_mods()) {
unregister_mods(opt);
} else {
register_mods(opt);
}
}
break;
case LSFT_DQT:
if (record->event.pressed) {
if (record->tap.count > 0 && !record->tap.interrupted) {
if (record->tap.interrupted) {
register_mods(MOD_BIT(KC_LSHIFT));
}
} else {
register_mods(MOD_BIT(KC_LSHIFT));
}
} else {
if (record->tap.count > 0 && !(record->tap.interrupted)) {
add_weak_mods(MOD_BIT(KC_LSHIFT));
if(2 & layer_state)
{
register_code(KC_2);
unregister_code(KC_2);
}
else
{
register_code(KC_7);
unregister_code(KC_7);
}
del_weak_mods(MOD_BIT(KC_LSHIFT));
record->tap.count = 0;
} else {
unregister_mods(MOD_BIT(KC_LSHIFT));
}
}
break;
}
}