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)
    ),
};
  • obosobM
    link
    fedilink
    English
    arrow-up
    2
    ·
    10 months ago

    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 calling update_tri_layer_state as documented here