Last active
November 25, 2024 06:34
-
-
Save okapies/5d13a174cbb13ce34dbd9faede9d0b71 to your computer and use it in GitHub Desktop.
ErgoDash keymap implementing “correct” dual role RAISE/LOWER keys without `LT` advanced keycode
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include QMK_KEYBOARD_H | |
extern keymap_config_t keymap_config; | |
#define _QWERTY 0 | |
#define _LOWER 1 | |
#define _RAISE 2 | |
#define _ADJUST 16 | |
enum custom_keycodes { | |
QWERTY = SAFE_RANGE, | |
LOWER, | |
RAISE, | |
ADJUST, | |
}; | |
// Fillers to make layering more clear | |
#define _______ KC_TRNS | |
#define XXXXXXX KC_NO | |
#define EISU LALT(KC_GRV) | |
#define ALT_APP ALT_T(KC_APP) | |
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |
/* Qwerty | |
* ,----------------------------------------------------------------------------------------------------------------------. | |
* | Tab | Q | W | E | R | T | - | | = | Y | U | I | O | P | Bksp | | |
* |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| | |
* | Ctrl | A | S | D | F | G | [ | | ] | H | J | K | L | ;+ | :* | | |
* |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| | |
* | Shift| Z | X | C | V | B | MHNK | | HENK | N | M | ,< | .> | /? | \_ | | |
* |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| | |
* | Esc | Ctrl | GUI |||||||| Alt | Lower| Space| |||||||| | Enter|Raise | Left |||||||| Down | Up |Right | | |
* `---------------------------------------------------------------------------------------------------------------------- | |
*/ | |
[_QWERTY] = LAYOUT( \ | |
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS, KC_EQL , KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \ | |
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \ | |
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MHEN, KC_HENK, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO , \ | |
KC_ESC, KC_LCTL, KC_LGUI, ALT_APP, LOWER, KC_SPC, KC_SPC , KC_ENT , KC_ENT , RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \ | |
), | |
/* Lower | |
* ,----------------------------------------------------------------------------------------------------------------------. | |
* | Esc | ! | " | # | $ | % | _ | | + | & | ' | ( | ) | ~ | Bksp | | |
* |------+------+------+------+------+------+------+---------------------------+------+------+------+------+------+------| | |
* | Del | F1 | F2 | F3 | F4 | F5 | { | | } | F6 | = |JIS \ | { | } | | | |
* |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| | |
* | Shift| F7 | F8 | F9 | F10 | F11 | Space| | Enter| F12 | ` | ~ | | | \_ | | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| | |
* | Ctrl | | | | | | | |||||||| | | | Home |||||||| PgDn | PgUp | End | | |
* `----------------------------------------------------------------------------------------------------------------------' | |
*/ | |
[_LOWER] = LAYOUT( \ | |
KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_UNDS, KC_PLUS, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \ | |
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LCBR, KC_RCBR, KC_F6, KC_UNDS, KC_JYEN, KC_RCBR, KC_PIPE, _______, \ | |
KC_LSFT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_SPC , KC_ENT , KC_F12, KC_LCBR, KC_PLUS, _______, _______, _______, \ | |
KC_LCTL, _______, _______, _______, _______, _______,_______, _______,_______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END \ | |
), | |
/* Raise | |
* ,----------------------------------------------------------------------------------------------------------------------. | |
* | Esc | 1 | 2 | 3 | 4 | 5 | _ | | + | 6 | 7 | 8 | 9 | 0 | Bksp | | |
* |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------| | |
* | Del | F1 | F2 | F3 | F4 | F5 | { | | } | F6 | - |JIS | | [ | ] | | | |
* |------+------+------+------+------+------|------+--------------------+------+------+------+------+------+------+------| | |
* | Shift| F7 | F8 | F9 | F10 | F11 | Space| | Enter| F12 | @ | ^ | | | \_ | | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------| | |
* | Ctrl | | | | | | | |||||||| | | | Home |||||||| PgDn | PgUp | End | | |
* `----------------------------------------------------------------------------------------------------------------------' | |
*/ | |
[_RAISE] = LAYOUT( \ | |
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_UNDS, KC_PLUS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \ | |
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LCBR, KC_RCBR, KC_F6, KC_MINS,S(KC_JYEN),KC_RBRC, KC_BSLS, _______, \ | |
KC_LSFT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_SPC , KC_ENT , KC_F12, KC_LBRC, KC_EQL, _______, _______, _______, \ | |
KC_LCTL, _______, _______, _______, _______, _______,_______, _______,_______,_______, KC_HOME, KC_PGDN, KC_PGUP, KC_END \ | |
), | |
/* Adjust | |
* ,----------------------------------------------------------------------------------------------------------------------. | |
* | | Reset|RGB ON| MODE| HUE-| HUE+| | | | SAT-| SAT+| VAL-| VAL+| | | | |
* |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| | |
* | | | | | | | | | | | | | | | | | |
* |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------| | |
* | | | | | | | | | | | | | | | | | |
* |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------| | |
* | | | | |||||||| | | |||||||| | | |||||||| | | | | | |
* ,----------------------------------------------------------------------------------------------------------------------. | |
*/ | |
[_ADJUST] = LAYOUT( | |
_______, RESET , RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI,_______, _______, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, _______, \ | |
_______, _______, BL_TOGG, BL_BRTG, BL_INC , BL_DEC ,_______, _______, _______, _______, _______, _______, _______, _______, \ | |
_______, _______, _______, _______, _______, _______,_______, _______, _______, _______, _______, _______, _______, _______, \ | |
_______, _______, _______, _______, _______,_______,_______, _______,_______, _______, _______, _______, _______, _______ \ | |
) | |
}; | |
static bool lower_pressed = false; | |
static uint16_t lower_pressed_time = 0; | |
static bool raise_pressed = false; | |
static uint16_t raise_pressed_time = 0; | |
bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |
switch (keycode) { | |
case LOWER: | |
if (record->event.pressed) { | |
lower_pressed = true; | |
lower_pressed_time = record->event.time; | |
layer_on(_LOWER); | |
update_tri_layer(_LOWER, _RAISE, _ADJUST); | |
} else { | |
layer_off(_LOWER); | |
update_tri_layer(_LOWER, _RAISE, _ADJUST); | |
if (lower_pressed && (TIMER_DIFF_16(record->event.time, lower_pressed_time) < TAPPING_TERM)) { | |
register_code(KC_LANG2); // for macOS | |
register_code(KC_MHEN); | |
unregister_code(KC_MHEN); | |
unregister_code(KC_LANG2); | |
} | |
lower_pressed = false; | |
} | |
return false; | |
break; | |
case RAISE: | |
if (record->event.pressed) { | |
raise_pressed = true; | |
raise_pressed_time = record->event.time; | |
layer_on(_RAISE); | |
update_tri_layer(_LOWER, _RAISE, _ADJUST); | |
} else { | |
layer_off(_RAISE); | |
update_tri_layer(_LOWER, _RAISE, _ADJUST); | |
if (raise_pressed && (TIMER_DIFF_16(record->event.time, raise_pressed_time) < TAPPING_TERM)) { | |
register_code(KC_LANG1); // for macOS | |
register_code(KC_HENK); | |
unregister_code(KC_HENK); | |
unregister_code(KC_LANG1); | |
} | |
raise_pressed = false; | |
} | |
return false; | |
break; | |
case ADJUST: | |
if (record->event.pressed) { | |
layer_on(_ADJUST); | |
} else { | |
layer_off(_ADJUST); | |
} | |
return false; | |
break; | |
default: | |
if (record->event.pressed) { | |
// reset the flags | |
lower_pressed = false; | |
raise_pressed = false; | |
} | |
break; | |
} | |
return true; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment