This update is mainly needed because Ergodox's layout should be as much possible closer to original QWERTY layout, to not break XKB layout in XOrg for Russian language. Also, because Ergodox's switches SW5.7 and SW5.8 are not as convenient as I'd like to - additional mappings were added on Layer7 for following symbols: ^ ' " \
359 lines
17 KiB
C
359 lines
17 KiB
C
static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|
/*
|
|
* Keymap: Default Layer in QWERTY
|
|
*
|
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
|
* | ~ | 1 | 2 | 3 | 4 | 5 | \ | | - | 6 | 7 | 8 | 9 | 0 | = |
|
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
|
* | Tab | Q | W | E | R | T | ~L1 | | ~L3 | Y | U | I | O | P | [ |
|
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
|
* | LShift | A | S | D | F | G |------| |------| H | J | K | L | ; | ' FN14 |
|
|
* |--------+------+------+------+------+------| L0 | | ~L4 |------+------+------+------+------+--------|
|
|
* | LCtrl | Z | X | C | V | B | | | | N | M | , | . | / | ] FN15 |
|
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
|
* | ~L1 | ~L2 | Caps | LAlt | LGui | | Lft | Up | Dn | Rght | ~L4 |
|
|
* `----------------------------------' `----------------------------------'
|
|
* ,-------------. ,-------------.
|
|
* | +L2 | Home | | PgUp | Del |
|
|
* ,------|------|------| |------+------+------.
|
|
* | | | End | | PgDn | | |
|
|
* | BkSp | ESC |------| |------| Enter| Space|
|
|
* | | | Spc | | Ins | | |
|
|
* `--------------------' `--------------------'
|
|
*
|
|
*
|
|
*
|
|
****************************************************************************************************
|
|
*
|
|
* Under XOrg, I use my own mapping from QWERTY to "Workman for Programmers"
|
|
* See XOrg files in ./addons/ subdirectory.
|
|
*
|
|
* I have to do so, because of two things:
|
|
* 1) my native language is Russian, and XOrg keymap for it is based on QWERTY layout
|
|
* 2) I want to have non-standart shifted keys, like $ (as normal) and @ (as shifted), or _ and -
|
|
*
|
|
* And even if (2) could be solved using FN* keys (but there is limit in firmware for only 32 such
|
|
* keys), then (1) can't be solved at firmware level at all.
|
|
*
|
|
* So, I have to stick with QWERTY as my main layout + my own XOrg keyboard layout for English.
|
|
* But sometimes I have to input something when XOrg is not active - for example, in Linux console,
|
|
* or in firmware console (while debugging firmware), or when keyboard is connected to not my computer.
|
|
*
|
|
* For such cases I have Layer5 :)
|
|
* // hint: switch to Layer5 is only at Layer4
|
|
*
|
|
****************************************************************************************************
|
|
*
|
|
*
|
|
*
|
|
* Keymap: Default Layer in Workman
|
|
*
|
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
|
* | ~ | ; | ! | # | { | } | ' | | ^ | [ | ] | * | ( | ) | = |
|
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
|
* | Tab | Q | D | R | W | B | ~L1 | | ~L3 | J | F | U | P | $ | : |
|
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
|
* | LShift | A | S | H | T | G |------| |------| Y | N | E | O | I | - FN14 |
|
|
* |--------+------+------+------+------+------| L0 | | ~L4 |------+------+------+------+------+--------|
|
|
* | LCtrl | Z | X | M | C | V | | | | K | L | , | . | / | | FN15 |
|
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
|
* | ~L1 | ~L2 | Caps | LAlt | LGui | | Lft | Up | Dn | Rght | ~L4 |
|
|
* `----------------------------------' `----------------------------------'
|
|
* ,-------------. ,-------------.
|
|
* | +L2 | Home | | PgUp | Del |
|
|
* ,------|------|------| |------+------+------.
|
|
* | | | End | | PgDn | | |
|
|
* | BkSp | ESC |------| |------| Enter| Space|
|
|
* | | | Spc | | Ins | | |
|
|
* `--------------------' `--------------------'
|
|
*
|
|
* Keymap: Default Layer in Workman / with Shift
|
|
*
|
|
* ,--------------------------------------------------. ,--------------------------------------------------.
|
|
* | ` | 1 | 2 | 3 | 4 | 5 | " | | \ | 6 | 7 | 8 | 9 | 0 | + |
|
|
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
|
|
* | Tab | Q | D | R | W | B | ~L1 | | ~L3 | J | F | U | P | @ | % |
|
|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
|
* | LShift | A | S | H | T | G |------| |------| Y | N | E | O | I | _ FN14 |
|
|
* |--------+------+------+------+------+------| L0 | | ~L4 |------+------+------+------+------+--------|
|
|
* | LCtrl | Z | X | M | C | V | | | | K | L | , | . | / | & FN15 |
|
|
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
|
* | ~L1 | ~L2 | Caps | LAlt | LGui | | Lft | Up | Dn | Rght | ~L4 |
|
|
* `----------------------------------' `----------------------------------'
|
|
* ,-------------. ,-------------.
|
|
* | +L2 | Home | | PgUp | Del |
|
|
* ,------|------|------| |------+------+------.
|
|
* | | | End | | PgDn | | |
|
|
* | BkSp | ESC |------| |------| Enter| Space|
|
|
* | | | Spc | | Ins | | |
|
|
* `--------------------' `--------------------'
|
|
*
|
|
*/
|
|
|
|
KEYMAP( // layout: layer 0: default
|
|
// left hand
|
|
GRV, 1, 2, 3, 4, 5, BSLS,
|
|
TAB, Q, W, E, R, T, FN1,
|
|
FN16,FN20,S, D, F, G,
|
|
LCTL,Z, X, C, FN19,B, FN0,
|
|
FN1, FN6, CAPS,LALT,FN17,
|
|
FN2, HOME,
|
|
END,
|
|
FN8, FN9, FN10,
|
|
// right hand
|
|
MINS,6, 7, 8, 9, 0, EQL,
|
|
FN3, Y, U, I, O, P, LBRC,
|
|
FN18,J, K, L, FN21,FN14,
|
|
FN4, N, M, COMM,DOT, SLSH,FN15,
|
|
LEFT,UP, DOWN,RGHT,FN4,
|
|
PGUP,DEL,
|
|
PGDN,
|
|
FN11,FN12,FN13
|
|
),
|
|
|
|
KEYMAP( // layout: layer 1: F-keys instead of numbers
|
|
// left hand
|
|
TRNS,F1, F2, F3, F4, F5, F6,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,
|
|
TRNS,
|
|
TRNS,TRNS,TRNS,
|
|
// right hand
|
|
F7, F8, F9, F10, F11, F12, TRNS,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,
|
|
TRNS,
|
|
TRNS,TRNS,TRNS
|
|
),
|
|
|
|
KEYMAP( // layout: layer 2: mouse + numpad
|
|
// left hand
|
|
TRNS,NO, NO, NO, NO, PAUS,PSCR,
|
|
TRNS,WH_L,WH_U,WH_D,WH_R,BTN2,TRNS,
|
|
TRNS,MS_L,MS_U,MS_D,MS_R,BTN1,
|
|
TRNS,NO, NO, NO, TRNS,BTN3,TRNS,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,
|
|
TRNS,
|
|
TRNS,TRNS,TRNS,
|
|
// right hand
|
|
SLCK,NLCK,PSLS,PAST,PAST,PMNS,BSPC,
|
|
TRNS,NO, P7, P8, P9, PMNS,BSPC,
|
|
TRNS,P4, P5, P6, PPLS,PENT,
|
|
TRNS,NO, P1, P2, P3, PPLS,PENT,
|
|
P0, PDOT,SLSH,PENT,PENT,
|
|
TRNS,TRNS,
|
|
TRNS,
|
|
TRNS,TRNS,TRNS
|
|
),
|
|
|
|
KEYMAP( // layout: layer 3: F-keys only
|
|
// left hand
|
|
TRNS,NO, NO, NO, NO, NO, NO,
|
|
TRNS,F13, F14, F15, F16, NO, TRNS,
|
|
TRNS,F17, F18, F19, F20, NO,
|
|
TRNS,F21, F22, F23, F24, NO, TRNS,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,
|
|
TRNS,
|
|
TRNS,TRNS,TRNS,
|
|
// right hand
|
|
NO, NO, NO, NO, NO, NO, TRNS,
|
|
TRNS,NO, F1, F2, F3, F4, TRNS,
|
|
NO, F5, F6, F7, F8, TRNS,
|
|
TRNS,NO, F9, F10, F11, F12, TRNS,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,
|
|
TRNS,
|
|
TRNS,TRNS,TRNS
|
|
),
|
|
|
|
KEYMAP( // layout: layer 4: F-keys + cursor
|
|
// left hand
|
|
TRNS,F1, F2, F3, F4, F5, F6,
|
|
FN7, NO, PGUP,UP, PGDN,PGUP,TRNS,
|
|
TRNS,NO, LEFT,DOWN,RGHT,PGDN,
|
|
TRNS,NO, NO, END, HOME,NO, TRNS,
|
|
FN5, TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,
|
|
TRNS,
|
|
TRNS,TRNS,TRNS,
|
|
// right hand
|
|
F7, F8, F9, F10, F11, F12, MINS,
|
|
TRNS,PGUP,PGUP,UP, PGDN,NO, FN7,
|
|
PGDN,LEFT,DOWN,RGHT,NO, TRNS,
|
|
TRNS,NO, HOME,END, NO, NO, TRNS,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,
|
|
TRNS,
|
|
TRNS,TRNS,TRNS
|
|
),
|
|
|
|
KEYMAP( // layout: layer 5: Workman layout
|
|
// left hand
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,Q, D, R, W, B, TRNS,
|
|
TRNS,A, S, H, T, G,
|
|
TRNS,Z, X, M, C, V, TRNS,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,
|
|
TRNS,
|
|
TRNS,TRNS,TRNS,
|
|
// right hand
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,J, F, U, P, 4, TRNS,
|
|
Y, N, E, O, I, TRNS,
|
|
TRNS,K, L, TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,
|
|
TRNS,
|
|
TRNS,TRNS,TRNS
|
|
),
|
|
|
|
KEYMAP( // layout: layer 6: F-keys on home+1 row
|
|
// left hand
|
|
TRNS,NO, NO, NO, NO, NO, NO,
|
|
TRNS,F1, F2, F3, F4, F5, F11,
|
|
TRNS,TRNS,NO, NO, NO, NO,
|
|
TRNS,NO, NO, NO, NO, NO, TRNS,
|
|
TRNS,TRNS,TRNS,LALT,LGUI,
|
|
TRNS,TRNS,
|
|
TRNS,
|
|
LCTL,LSFT,TRNS,
|
|
// right hand
|
|
NO, NO, NO, NO, NO, NO, TRNS,
|
|
F12, F6, F7, F8, F9, F10, PGUP,
|
|
NO, NO, NO, NO, TRNS,PGDN,
|
|
TRNS,NO, NO, NO, NO, NO, TRNS,
|
|
RGUI,RALT,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,
|
|
TRNS,
|
|
TRNS,RSFT,RCTL
|
|
),
|
|
|
|
KEYMAP( // layout: layer 7: F-keys on right hand
|
|
// left hand
|
|
TRNS,NO, NO, NO, NO, NO, NO,
|
|
TRNS,NO, NO, NO, NO, NO, TRNS,
|
|
TRNS,TRNS,NO, NO, NO, NO,
|
|
TRNS,NO, NO, NO, NO, NO, TRNS,
|
|
TRNS,TRNS,TRNS,LALT,LGUI,
|
|
TRNS,TRNS,
|
|
TRNS,
|
|
LCTL,LSFT,TRNS,
|
|
// right hand
|
|
NO, NO, NO, NO, NO, NO, TRNS,
|
|
TRNS,MINS,F1, F2, F3, F4, PGUP,
|
|
BSLS,F5, F6, F7, F8, PGDN,
|
|
TRNS,FN22,F9, F10, F11, F12, FN23,
|
|
RGUI,RALT,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,
|
|
TRNS,
|
|
TRNS,RSFT,RCTL
|
|
),
|
|
|
|
/*
|
|
// templates to copy from
|
|
|
|
KEYMAP( // layout: layer N: transparent on edges, all others are empty
|
|
// left hand
|
|
TRNS,NO, NO, NO, NO, NO, NO,
|
|
TRNS,NO, NO, NO, NO, NO, TRNS,
|
|
TRNS,NO, NO, NO, NO, NO,
|
|
TRNS,NO, NO, NO, NO, NO, TRNS,
|
|
TRNS,TRNS,TRNS,LALT,LGUI,
|
|
TRNS,TRNS,
|
|
TRNS,
|
|
LCTL,LSFT,TRNS,
|
|
// right hand
|
|
NO, NO, NO, NO, NO, NO, TRNS,
|
|
TRNS,NO, NO, NO, NO, NO, TRNS,
|
|
NO, NO, NO, NO, NO, TRNS,
|
|
TRNS,NO, NO, NO, NO, NO, TRNS,
|
|
RGUI,RALT,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,
|
|
TRNS,
|
|
TRNS,RSFT,RCTL
|
|
),
|
|
KEYMAP( // layout: layer N: fully transparent
|
|
// left hand
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,
|
|
TRNS,
|
|
TRNS,TRNS,TRNS,
|
|
// right hand
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,TRNS,TRNS,TRNS,
|
|
TRNS,TRNS,
|
|
TRNS,
|
|
TRNS,TRNS,TRNS
|
|
),
|
|
*/
|
|
|
|
};
|
|
|
|
/* id for user defined functions */
|
|
enum function_id {
|
|
TEENSY_KEY,
|
|
};
|
|
|
|
/*
|
|
* Fn action definition
|
|
*/
|
|
static const uint16_t PROGMEM fn_actions[] = {
|
|
ACTION_LAYER_SET(0, ON_BOTH), // FN0 - switch to Layer0
|
|
ACTION_LAYER_MOMENTARY(1), // FN1 - push Layer1
|
|
ACTION_LAYER_SET(2, ON_BOTH), // FN2 - switch to Layer2
|
|
ACTION_LAYER_MOMENTARY(3), // FN3 - push Layer3
|
|
ACTION_LAYER_MOMENTARY(4), // FN4 - push Layer4
|
|
ACTION_LAYER_SET(5, ON_BOTH), // FN5 - switch to Layer5
|
|
ACTION_LAYER_MOMENTARY(2), // FN6 - push Layer2
|
|
ACTION_FUNCTION(TEENSY_KEY), // FN7 - Teensy key
|
|
|
|
ACTION_MODS_TAP_KEY(MOD_LCTL, KC_BSPC), // FN8 = LShift with tap BackSpace
|
|
ACTION_MODS_TAP_KEY(MOD_LSFT, KC_ESC), // FN9 = LCtrl with tap Escape
|
|
ACTION_MODS_TAP_KEY(MOD_LALT, KC_SPC), // FN10 = LAlt with tap Space
|
|
ACTION_MODS_TAP_KEY(MOD_RALT, KC_INS), // FN11 = RAlt with tap Ins
|
|
ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT), // FN12 = RShift with tap Enter
|
|
ACTION_MODS_TAP_KEY(MOD_RCTL, KC_SPC), // FN13 = RCtrl with tap Space
|
|
ACTION_MODS_TAP_KEY(MOD_RSFT, KC_QUOT), // FN14 = RShift with tap quotes
|
|
ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RBRC), // FN15 = RCtrl with tap ]
|
|
ACTION_MODS_TAP_KEY(MOD_LSFT, KC_TAB), // FN16 = LShift with tap Tab
|
|
ACTION_MODS_TAP_KEY(MOD_LGUI, KC_ESC), // FN17 = LShift with tap Escape
|
|
|
|
ACTION_LAYER_TAP_KEY(2, KC_H), // FN18 = L2 symbols on H key, to use with Mouse keys
|
|
ACTION_LAYER_TAP_KEY(2, KC_V), // FN19 = L2 symbols on V key, to use with Numpad keys
|
|
ACTION_LAYER_TAP_KEY(7, KC_A), // FN20 = L7 symbols on A key, to use with F* keys
|
|
ACTION_LAYER_TAP_KEY(6, KC_SCLN), // FN21 = L6 symbols on ; key, to use with F* keys
|
|
|
|
ACTION_MODS_KEY(MOD_LSFT, KC_BSLS), // FN22 = Shifted BackSlash // " in Workman
|
|
ACTION_MODS_KEY(MOD_LSFT, KC_MINS), // FN23 = Shifted Minus // \ in Workman
|
|
};
|
|
|
|
void action_function(keyrecord_t *event, uint8_t id, uint8_t opt)
|
|
{
|
|
print("action_function called\n");
|
|
print("id = "); phex(id); print("\n");
|
|
print("opt = "); phex(opt); print("\n");
|
|
if (id == TEENSY_KEY) {
|
|
clear_keyboard();
|
|
print("\n\nJump to bootloader... ");
|
|
_delay_ms(250);
|
|
bootloader_jump(); // should not return
|
|
print("not supported.\n");
|
|
}
|
|
}
|
|
|