diff options
Diffstat (limited to 'layouts/community/ergodox/ordinary_osx/keymap.c')
| -rw-r--r-- | layouts/community/ergodox/ordinary_osx/keymap.c | 288 | 
1 files changed, 22 insertions, 266 deletions
| diff --git a/layouts/community/ergodox/ordinary_osx/keymap.c b/layouts/community/ergodox/ordinary_osx/keymap.c index 17c1c837da..5f794cbba1 100644 --- a/layouts/community/ergodox/ordinary_osx/keymap.c +++ b/layouts/community/ergodox/ordinary_osx/keymap.c @@ -1,34 +1,12 @@  #include QMK_KEYBOARD_H -#include "led.h" -#include "mousekey.h" -#include "debug.h" -#include "action_layer.h" -#include "action_util.h" - -#define BASE   0 // default layer -#define SYMB   1 // symbols layer -#define MDIA   2 // media layer -#define SPEC   3 // special layer -#define RBASE  4 // reverse default layer - -#define LSymb 10 // left symbol-shift key -#define LMdia 11 // left media-shift key -#define LSpec 12 // left special-shift key -#define RSymb 13 // right symbol-shift key -#define RMdia 14 // right media-shift key -#define RSpec 15 // right special-shift key - -#define NotEq 16 // != macro -#define GrtEq 17 // >= macro -#define LesEq 18 // <= macro -#define DeRef 19 // -> macro - -#define MUL   20 // mouse up left -#define MUR   21 // mouse up right -#define MDL   22 // mouse down left -#define MDR   23 // mouse down right - +enum layer_names { +    BASE, // default layer +    SYMB, // symbols layer +    MDIA, // media layer +    SPEC, // special layer +    RBASE // reverse default layer +};  /*   * The Ordinary Layout for the Ergodox EZ keyboard, v5 @@ -69,18 +47,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {   */  [BASE] = LAYOUT_ergodox(  // left hand - F(LSpec)  ,KC_1           ,KC_2   ,KC_3   ,KC_4  ,KC_5  ,KC_ESC -,F(LMdia)  ,KC_Q           ,KC_W   ,KC_E   ,KC_R  ,KC_T  ,LSFT(KC_TAB) -,M(LSymb)  ,LT(RBASE, KC_A),KC_S   ,KC_D   ,LT(RBASE, KC_F)  ,KC_G + KC_NO     ,KC_1           ,KC_2   ,KC_3   ,KC_4  ,KC_5  ,KC_ESC +,KC_NO     ,KC_Q           ,KC_W   ,KC_E   ,KC_R  ,KC_T  ,LSFT(KC_TAB) +,KC_NO     ,LT(RBASE, KC_A),KC_S   ,KC_D   ,LT(RBASE, KC_F)  ,KC_G  ,KC_LSFT   ,KC_Z           ,KC_X   ,KC_C   ,KC_V  ,KC_B  ,KC_LBRC  ,KC_LEFT   ,KC_RIGHT       ,KC_LCTL,KC_LALT,KC_LGUI                                           ,KC_HOME,KC_END                                                   ,KC_PGUP                                   ,KC_BSPC,KC_DEL ,KC_PGDN                                                                    // right hand -                                                                 ,KC_MINS ,KC_6 ,KC_7           ,KC_8   ,KC_9   ,KC_0             ,F(RSpec) -                                                                 ,KC_TAB  ,KC_Y ,KC_U           ,KC_I   ,KC_O   ,KC_P             ,F(RMdia) -                                                                          ,KC_H ,LT(RBASE, KC_J),KC_K   ,KC_L   ,LT(RBASE,KC_SCLN),F(RSymb) +                                                                 ,KC_MINS ,KC_6 ,KC_7           ,KC_8   ,KC_9   ,KC_0             ,KC_NO +                                                                 ,KC_TAB  ,KC_Y ,KC_U           ,KC_I   ,KC_O   ,KC_P             ,KC_NO +                                                                          ,KC_H ,LT(RBASE, KC_J),KC_K   ,KC_L   ,LT(RBASE,KC_SCLN),KC_NO                                                                   ,KC_RBRC ,KC_N ,KC_M           ,KC_COMM,KC_DOT ,KC_SLSH          ,KC_RSFT                                                                                  ,KC_RGUI        ,KC_RALT,KC_RCTL,KC_UP            ,KC_DOWN                                                                   ,KC_LEFT ,KC_RGHT @@ -116,9 +94,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {  ,KC_TRNS ,KC_HASH     ,KC_DLR       ,KC_LPRN ,KC_RPRN ,KC_GRV  ,KC_TRNS ,KC_PERC     ,KC_CIRC      ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_QUOT  ,KC_SCLN ,KC_AMPR     ,KC_ASTR ,LSFT(KC_COMM),LSFT(KC_DOT) -                                                      ,M(GrtEq),M(LesEq) +                                                      ,KC_NO,KC_NO                                                                 ,KC_NO -                                             ,KC_PLUS ,KC_EQL  ,M(NotEq) +                                             ,KC_PLUS ,KC_EQL  ,KC_NO                                                                   // right hand                                                                   ,KC_MINS     ,KC_F6        ,KC_F7 ,KC_F8  ,KC_F9 ,KC_F10  ,KC_TRNS                                                                   ,LSFT(KC_DOT),KC_PIPE      ,KC_7  ,KC_8   ,KC_9  ,KC_SLSH ,KC_TRNS @@ -127,7 +105,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {                                                                                              ,KC_0  ,KC_DOT ,KC_EQL,KC_PLUS ,KC_ENT                                                                   ,KC_NO       ,KC_NO                                                                   ,KC_NO -                                                                 ,M(DeRef)    ,LSFT(KC_MINS),KC_MINS +                                                                 ,KC_NO    ,LSFT(KC_MINS),KC_MINS  ),  /******* Media Layer ******************************************************************************************************* @@ -154,9 +132,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {  [MDIA] = LAYOUT_ergodox(  // left hand   KC_TRNS ,KC_F11   ,KC_F12  ,KC_F13   ,KC_F14  ,KC_F15  ,KC_ESC -,KC_TRNS ,KC_POWER ,M(MUL)  ,KC_MS_U  ,M(MUR)  ,KC_VOLU ,KC_WH_U +,KC_TRNS ,KC_POWER ,KC_NO   ,KC_MS_U  ,KC_NO   ,KC_VOLU ,KC_WH_U  ,KC_TRNS ,KC_SLEP  ,KC_MS_L ,KC_MS_D  ,KC_MS_R ,KC_VOLD -,KC_TRNS ,KC_NO    ,M(MDL)  ,KC_MS_D  ,M(MDR)  ,KC_MUTE ,KC_WH_D +,KC_TRNS ,KC_NO    ,KC_NO   ,KC_MS_D  ,KC_NO   ,KC_MUTE ,KC_WH_D  ,KC_NO ,KC_NO   ,KC_BTN3 ,KC_BTN1  ,KC_BTN2                                                 ,KC_WSTP ,KC_WREF                                                          ,KC_WSCH @@ -257,248 +235,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {  )  }; -const uint16_t PROGMEM fn_actions[] = { -     // the faux shift keys are implemented as macro taps -     [LSymb] = ACTION_MACRO_TAP(LSymb) -    ,[LMdia] = ACTION_MACRO_TAP(LMdia) -    ,[LSpec] = ACTION_MACRO_TAP(LSpec) -    ,[RSymb] = ACTION_MACRO_TAP(RSymb) -    ,[RMdia] = ACTION_MACRO_TAP(RMdia) -    ,[RSpec] = ACTION_MACRO_TAP(RSpec) -}; - -uint16_t symb_shift = 0; -uint16_t mdia_shift = 0; -uint16_t spec_shift = 0; - -bool mdia_lock = false; -bool symb_lock = false; - -const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) -{ -    switch(id) { -        // There are two shift keys for each layer so we increment a layer_shift var when one -        // is pressed and decrement when one is released. The shift counts are bound between 0 and 2 -        // only because sometimes rapid pressing led to irregular events; this way the states -        // are self healing during use. - -        case LSymb:                                               // -        if (record->event.pressed) {                              // when the LSymb button is pressed -            if(++symb_shift > 2) symb_shift = 2;                  // increment the symb shift count, max two -            if(spec_shift) symb_lock = !symb_lock;                // if the Special layer is on, toggle the shift lock -            layer_on(SYMB);                                       // in any case, turn on the Symbols layer -        } else {                                                  // when the LSymb button is released -            if(--symb_shift < 0) symb_shift = 0;                  // decrement the shift count, minimum zero -            if((!symb_shift) && (!symb_lock)) layer_off(SYMB);    // if both shifts are released and the lock is off, turn off the Symbols layer -        } -        break; - -        case LMdia: -        if (record->event.pressed) { -           if (record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) { -                register_code(KC_TAB); -            } else { -                if(spec_shift) mdia_lock = !mdia_lock; -                if(++mdia_shift > 2) mdia_shift = 2; -                layer_on(MDIA); -            } -        } else { -            if(record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) { -                unregister_code(KC_TAB); -            } else { -                if(--mdia_shift < 0) mdia_shift = 0; -                if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA); -            } -        } -        break; - -        case LSpec: -        if (record->event.pressed) {                                     // when the LSpec button is pressed -            if(symb_shift) symb_lock = !symb_lock;                       // if another layer button is engaged, then -            else if(mdia_shift) mdia_lock = !mdia_lock;                  // lock that layer, be it caps or symb or mdia -            else if (record->tap.count && !record->tap.interrupted && (!spec_shift)) { -                register_code(KC_GRV);                                   // otherwise, if it's an uninterrupted tap, emit a char -            } else { -                if(++spec_shift > 2) spec_shift = 2; -                layer_on(SPEC);                                          // otherwise, turn on the Special layer -            } -        } else { -            if(record->tap.count && !record->tap.interrupted && (!spec_shift)) { -                unregister_code(KC_GRV); -            } else { -                if(--spec_shift < 0) spec_shift = 0; -                if(!spec_shift) layer_off(SPEC); -            } -        } -        break; - -        case RSymb: -        if (record->event.pressed) { -            if (record->tap.count && (!symb_shift) && (!symb_lock) && (!spec_shift)) { -                register_code(KC_QUOT); -            } else { -                if(++symb_shift > 2) symb_shift = 2; -                if(spec_shift) symb_lock = !symb_lock; -                layer_on(SYMB); -            } -        } else { -            if(record->tap.count && (!symb_shift) && (!symb_lock) && (!spec_shift)) { -                unregister_code(KC_QUOT); -            } else { -                if(--symb_shift < 0) symb_shift = 0; -                if((!symb_shift) && (!symb_lock)) layer_off(SYMB); -            } -        } -        break; - -        case RMdia: -        if (record->event.pressed) { -            if (record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) { -                register_code(KC_BSLS); -            } else { -                if(++mdia_shift > 2) mdia_shift = 2; -                if(spec_shift) mdia_lock = !mdia_lock; -                layer_on(MDIA); -            } -        } else { -            if(record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) { -                unregister_code(KC_BSLS); -            } else { -                if(--mdia_shift < 0) mdia_shift = 0; -                if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA); -            } -        } -        break; - -        case RSpec: -        if (record->event.pressed) { -            if(symb_shift) symb_lock = !symb_lock; -            else if(mdia_shift) mdia_lock = !mdia_lock; -            else if (record->tap.count && !record->tap.interrupted && (!spec_shift)) { -                register_code(KC_EQL); -            } else { -                if(++spec_shift > 2) spec_shift = 2; -                layer_on(SPEC); -            } -        } else { -            if(record->tap.count && !record->tap.interrupted && (!spec_shift)) { -                unregister_code(KC_EQL); -            } else { -                if(--spec_shift < 0) spec_shift = 0; -                if(!spec_shift) layer_off(SPEC); -            } -        } -        break; - -        case NotEq: -        if (record->event.pressed) { -            return MACRO( I(10), D(LSFT), T(1), U(LSFT), T(EQL), END  ); // != -        } -        break; - -        case GrtEq: -        if (record->event.pressed) { -            return MACRO( I(10), D(LSFT), T(COMM), U(LSFT), T(EQL), END  ); // <= -        } -        break; - -        case LesEq: -        if (record->event.pressed) { -            return MACRO( I(10), D(LSFT), T(DOT), U(LSFT), T(EQL), END  ); // >= -        } -        break; - -        case DeRef: -        if (record->event.pressed) { -            return MACRO( I(10), T(MINS), D(LSFT), T(DOT), U(LSFT), END  ); // -> -        } -        break; - -        // mouse diagonals - -        case MUL: // mouse up left -        if (record->event.pressed) { -            mousekey_on(KC_MS_UP); -            mousekey_on(KC_MS_LEFT); -            mousekey_send(); -        } else { -            mousekey_off(KC_MS_UP); -            mousekey_off(KC_MS_LEFT); -            mousekey_send(); -        } -        break; - -        case MUR: // mouse up right -        if (record->event.pressed) { -            mousekey_on(KC_MS_UP); -            mousekey_on(KC_MS_RIGHT); -            mousekey_send(); -        } else { -            mousekey_off(KC_MS_UP); -            mousekey_off(KC_MS_RIGHT); -            mousekey_send(); -        } -        break; - -        case MDL: // mouse down left -        if (record->event.pressed) { -            mousekey_on(KC_MS_DOWN); -            mousekey_on(KC_MS_LEFT); -            mousekey_send(); -        } else { -            mousekey_off(KC_MS_DOWN); -            mousekey_off(KC_MS_LEFT); -            mousekey_send(); -        } -        break; - -        case MDR: // mouse down right -        if (record->event.pressed) { -            mousekey_on(KC_MS_DOWN); -            mousekey_on(KC_MS_RIGHT); -            mousekey_send(); -        } else { -            mousekey_off(KC_MS_DOWN); -            mousekey_off(KC_MS_RIGHT); -            mousekey_send(); -        } -        break; - -        default: -            // none -            break; -    } - -    return MACRO_NONE; -}; - -// Runs just one time when the keyboard initializes. -void matrix_init_user(void) { - -}; -  // Runs constantly in the background, in a loop.  void matrix_scan_user(void) {      // shift or caps lock turns on red light -    if((keyboard_report->mods & MOD_BIT(KC_LSFT)) -    || (keyboard_report->mods & MOD_BIT(KC_RSFT)) -    || (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK))) { +    if ((keyboard_report->mods & MOD_BIT(KC_LSFT)) || (keyboard_report->mods & MOD_BIT(KC_RSFT)) || (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK))) {          ergodox_right_led_1_on();      } else {          ergodox_right_led_1_off();      }      // Symbol layer turns on green light -    if(layer_state & (1UL<<SYMB)) { +    if (layer_state & (1UL<<SYMB)) {          ergodox_right_led_2_on();      } else {          ergodox_right_led_2_off();      }      // Media layer turns on blue light -    if(layer_state & (1UL<<MDIA)) { +    if (layer_state & (1UL<<MDIA)) {          ergodox_right_led_3_on();      } else {          ergodox_right_led_3_off();      } -}; +} | 
