lexarcana1 · 2022-04-16 21:33
You will need some version of [my xkb configuration](http://cgit.lexarcana.com/cgit.cgi/dotemacs/tree/xkb/ergodox.xkb) to map all 5 modifiers, along with my keymap below for TMK firmware:
static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Default Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | Escape | Fn0 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | _- | Del | BkSp |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | F3 | 1 | W | E | R | T | ? | | " | Y | U | I | O | += | F4 |
* |--------+------+------+------+------+------| / | | ' |------+------+------+------+------+--------|
* | ~` | Q | S | D | F | G |------| |------| H | J | K | L | P | |\ |
* |--------+------+------+------+------+------| F1 | | F2 |------+------+------+------+------+--------|
* | LShift | A | X | C | V | B | +RAlt| | +RAlt| N | M | <, | >. | :; | RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | F5 | Z | F6 | LGui | LAlt | | LAlt | Left | Up | Dn | Rght |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | Home | End | | PgUp | PgDn |
* ,------|------|------| |------+------+------.
* | | Fn3 | Play | | Fn1 | Fn4 | |
* | Space| Tab+ |------| |------| Enter| Space|
* | | LCtl | Fn6 | | Fn7 | +LCtl| |
* `--------------------' `--------------------'
*/
KEYMAP( // layout: layer 0: default
// left hand
ESC, FN0, 2, 3, 4, 5, 6,
F3, 1, W, E, R, T, SLSH,
GRV, Q, S, D, F, G,
LSFT,A, X, C, V, B, FN2,
F5, Z, F6, LGUI,LALT,
HOME, END,
MPLY,
SPC,FN3, FN6,
// right hand
7,8, 9, 0,MINS, DEL, BSPC,
QUOT,Y, U, I, O, EQL, F4,
H, J, K, L, P, BSLS,
FN8, N, M, COMM,DOT, SCLN,RSFT,
LALT,LEFT,DOWN,UP ,RGHT,
PGUP,PGDN,
FN1,
FN7,FN4, SPC
),
KEYMAP( // layout: layer 1: F-keys + mouse + media
// left hand
TRNS,TRNS, F2, F3, F4, F5, F6,
TRNS, F1,TRNS,TRNS,TRNS,TRNS,TRNS,
FN5,MS_L,MS_U,MS_D,MS_R,PAUS,
CAPS, FN9,TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS,PSCR, INS,TRNS,TRNS,
TRNS,TRNS,
TRNS,
TRNS,TRNS,TRNS,
// right hand
F7, F8, F9, F10, F11,TRNS,TRNS,
TRNS,TRNS,TRNS,TRNS,TRNS, F12,TRNS,
BTN1,BTN2,BTN3,BTN4,BTN5,TRNS,
TRNS,TRNS,TRNS,TRNS,TRNS,VOLU,TRNS,
TRNS,TRNS,MPRV,VOLD,MNXT,
TRNS,TRNS,
TRNS,
TRNS,TRNS,TRNS
),
KEYMAP( // layout: layer 2: dealing with Windows
// left hand
ESC, FN0, 2, 3, 4, 5, 6,
F3, 1, W, E, R, T, SLSH,
GRV, Q, S, D, F, G,
LSFT,A, X, C, V, B, FN2,
F5, Z, F6, LGUI,LALT,
HOME, END,
FN12,
SPC,FN3,FN10,
// right hand
7,8, 9, 0,MINS, DEL, BSPC,
QUOT,Y, U, I, O, EQL, F4,
H, J, K, L, P, BSLS,
FN8, N, M, COMM,DOT, SCLN,RSFT,
LALT,LEFT,DOWN,UP ,RGHT,
PGUP,PGDN,
FN1,
FN11,FN4, SPC
),
};
/* id for user defined functions */
enum function_id {
TEENSY_KEY,
};
/*
* Fn action definition
*/
static const uint16_t PROGMEM fn_actions[] = {
ACTION_LAYER_TAP_KEY(1,KC_F7), // FN0 - momentary switch to Layer1/F7
ACTION_LAYER_TOGGLE(1), // FN1 - toggle Layer1
ACTION_MODS_TAP_KEY(MOD_RALT, KC_F1), // FN2 - right alt on hold, F1 on tap
ACTION_MODS_TAP_KEY(MOD_LCTL, KC_TAB), // FN3 - left control on hold, tab on tap
ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ENT), // FN4 - left control on hold, enter on tap
ACTION_FUNCTION(TEENSY_KEY), // FN5 - Teensy key
ACTION_MODS_TAP_KEY(MOD_RGUI, KC_LBRC ), // FN6 - right gui on hold, left bracket on tap
ACTION_MODS_TAP_KEY(MOD_RGUI, KC_RBRC ), // FN7 - right gui on hold, right bracket on tap
ACTION_MODS_TAP_KEY(MOD_RALT, KC_F2), // FN8 - right alt on hold, F2 on tap
ACTION_LAYER_TOGGLE(2), // FN9 - toggle Layer2
ACTION_MODS_TAP_KEY(MOD_RCTL, KC_LBRC ), // FN10 - right control on hold, left bracket on tap
ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RBRC ), // FN11 - right control on hold, right bracket on tap
ACTION_LAYER_TOGGLE(0), // FN12 - toggle Layer0
};
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");
}
}