Hello everyone, I recently bought a piantor keyboard and I am having trouble with qmk. I have configured two layer keys(num, nav) each of them switches to different layer and I want to be able to hold both of them to access fourth layer(CzechLayer), but I can't seem to figure out how to do it. Here is my keymap.c file:
#include QMK_KEYBOARD_H
#include "keymap_czech.h"
enum layers {
DefaultLayer,
NumLayer,
NavLayer,
CzechLayer,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[DefaultLayer] = LAYOUT_split_3x6_3(
KC_PIPE, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_PPLS,
KC_ESC, GUI_T(KC_A), ALT_T(KC_S), CTL_T(KC_D), LSFT_T(KC_F), KC_G, KC_H, RSFT_T(KC_J), CTL_T(KC_K), ALT_T(KC_L), GUI_T(KC_SCLN), KC_PEQL,
KC_UNDS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_PMNS,
MO(NumLayer), KC_TAB, KC_SPC, KC_BSPC, KC_ENT, MO(NavLayer)
),
[NumLayer] = LAYOUT_split_3x6_3(
KC_QUOT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PPLS,
KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_BSLS, KC_COLN, KC_PEQL,
KC_DQUO, KC_TILD, KC_LABK, KC_LCBR, KC_LBRC, KC_LPRN, KC_RPRN, KC_RBRC, KC_RCBR, KC_RABK, KC_QUES, KC_PMNS,
MO(NumLayer), KC_TAB, KC_SPC, KC_BSPC, KC_ENT, MO(NavLayer)
),
[NavLayer] = LAYOUT_split_3x6_3(
KC_BRIU, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_VOLU,
KC_ESC, KC_F11, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_F12, KC_MUTE,
KC_BRID, _______, _______, _______, _______, QK_BOOT, QK_MAKE, _______, _______, _______, _______, KC_VOLD,
MO(NumLayer), KC_TAB, KC_SPC, KC_BSPC, KC_ENT, MO(NavLayer)
),
[CzechLayer] = LAYOUT_split_3x6_3(
KC_PIPE, _______, CZ_EACU, CZ_ECAR, CZ_RCAR, KC_T, CZ_YACU, KC_U, CZ_IACU, KC_O, _______, KC_PMNS,
KC_ESC, CZ_AACU, CZ_SCAR, KC_D, _______, _______, _______, _______, _______, _______, KC_SCLN, KC_PEQL,
KC_UNDS, CZ_ZCAR, _______, CZ_CCAR, _______, _______, KC_N, _______, KC_COMM, KC_DOT, KC_SLSH, KC_PPLS,
MO(NumLayer), KC_TAB, KC_SPC, KC_BSPC, KC_ENT, MO(NavLayer)
),
};
This doesn't work perfectly, IIRC if OP presses MO(1), then MO(2), then releases MO(1) it'll stay on layer 3. The better way to do it is defining the
layer_state_set_user
function and callingupdate_tri_layer_state
as documented here