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)
),
};
I'm currently assembling my crkbd, looking at the default Configs they do this like so:
MO(1)
andMO(2)
_____
andMO(3)
MO(3)
and_____
_____
and_____
That way regardless of which button you press, if you press two of them you go to a fourth layer.
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