@ -4,25 +4,27 @@
# include "action_layer.h"
# include "action_layer.h"
# include "action_util.h"
# include "action_util.h"
# define BASE 0 // default layer
# define BASE 0 // default layer
# define SYMB 1 // symbols layer
# define SYMB 1 // symbols layer
# define MDIA 2 // media layer
# define MDIA 2 // media layer
# define LOCK 3 // shift-lock layer
# define LOCK 3 // shift-lock layer
# define LSymb 0 // left symbol-shift key
# define LCaps 10 // left caps-shift key
# define LMdia 1 // left media-shift key
# define LSymb 11 // left symbol-shift key
# define LLock 2 // left shift-lock key
# define LMdia 12 // left media-shift key
# define RSymb 3 // right symbol-shift key
# define LLock 13 // left shift-lock key
# define RMdia 4 // right media-shift key
# define RCaps 20 // right caps-shift key
# define RLock 5 // right shift-lock key
# define RSymb 21 // right symbol-shift key
# define RMdia 22 // right media-shift key
# define MUL 6 // mouse up left
# define RLock 23 // right shift-lock key
# define MUR 7 // mouse up right
# define MDL 8 // mouse down left
# define MUL 30 // mouse up left
# define MDR 9 // mouse down right
# define MUR 31 // mouse up right
# define MDL 32 // mouse down left
# define MDR 33 // mouse down right
/*
/*
* The Ordinary Layout for the Ergodox EZ keyboard , v3 .14
* The Ordinary Layout for the Ergodox EZ keyboard , v3 .14 1
*
*
* Modifications from default by Nicholas Keene ergodoxez @ nicholaskeene . com
* Modifications from default by Nicholas Keene ergodoxez @ nicholaskeene . com
*
*
@ -41,7 +43,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | | | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - |
* | - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | | | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - |
* | Symbol | A | S | D | F | G | - - - - - - | | - - - - - - | H | J | K | L | ; | ' " Symbol |
* | Symbol | A | S | D | F | G | - - - - - - | | - - - - - - | H | J | K | L | ; | ' " Symbol |
* | - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | Shift | | Tab | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - |
* | - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | Shift | | Tab | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - |
* | LShift | Z | X | C | V | B | - Tab | | | N | M | , | . | / | R Shift |
* | LShift | Z | X | C | V | B | - Tab | | | N | M | , | . | / | L Shift |
* ` - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - '
* ` - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - '
* | LCtrl | Meh | Hyper | LAlt | LGui | | RGui | RAlt | Hyper | Meh | RCtrl |
* | LCtrl | Meh | Hyper | LAlt | LGui | | RGui | RAlt | Hyper | Meh | RCtrl |
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
@ -50,7 +52,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* , - - - - - - | - - - - - - | - - - - - - | | - - - - - - + - - - - - - + - - - - - - .
* , - - - - - - | - - - - - - | - - - - - - | | - - - - - - + - - - - - - + - - - - - - .
* | | | PgUp | | Up | | |
* | | | PgUp | | Up | | |
* | Backsp | Del | - - - - - - | | - - - - - - | Enter | Space |
* | Backsp | Del | - - - - - - | | - - - - - - | Enter | Space |
* | | | PgDn | | Down | | |
* | | | PgDn | | Down | | | Aa
* ` - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - '
* ` - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - '
*/
*/
[ BASE ] = KEYMAP (
[ BASE ] = KEYMAP (
@ -58,7 +60,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
F ( LLock ) , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_ESC
F ( LLock ) , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_ESC
, F ( LMdia ) , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_LBRC
, F ( LMdia ) , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_LBRC
, M ( LSymb ) , KC_A , KC_S , KC_D , KC_F , KC_G
, M ( LSymb ) , KC_A , KC_S , KC_D , KC_F , KC_G
, KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , LSFT ( KC_TAB )
, M ( LCaps ) , KC_Z , KC_X , KC_C , KC_V , KC_B , LSFT ( KC_TAB )
, KC_LCTL , KC_MEH , KC_HYPR , KC_LALT , KC_LGUI
, KC_LCTL , KC_MEH , KC_HYPR , KC_LALT , KC_LGUI
, KC_HOME , KC_END
, KC_HOME , KC_END
, KC_PGUP
, KC_PGUP
@ -67,7 +69,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
, KC_MINS , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , F ( RLock )
, KC_MINS , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , F ( RLock )
, KC_RBRC , KC_Y , KC_U , KC_I , KC_O , KC_P , F ( RMdia )
, KC_RBRC , KC_Y , KC_U , KC_I , KC_O , KC_P , F ( RMdia )
, KC_H , KC_J , KC_K , KC_L , KC_SCLN , F ( RSymb )
, KC_H , KC_J , KC_K , KC_L , KC_SCLN , F ( RSymb )
, KC_TAB , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , KC_RSFT
, KC_TAB , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , M ( RCaps )
, KC_RGUI , KC_RALT , KC_HYPR , KC_MEH , KC_RCTL
, KC_RGUI , KC_RALT , KC_HYPR , KC_MEH , KC_RCTL
, KC_LEFT , KC_RGHT
, KC_LEFT , KC_RGHT
, KC_UP
, KC_UP
@ -125,7 +127,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - | Up | | Up | - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - |
* | - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - | Up | | Up | - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - |
* | | Sleep | MouseLeft | MouseDown | MouseRght | Volume Dn | - - - - - - | | - - - - - - | Num Lock | Left | Down | Right | MyComp | |
* | | Sleep | MouseLeft | MouseDown | MouseRght | Volume Dn | - - - - - - | | - - - - - - | Num Lock | Left | Down | Right | MyComp | |
* | - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - | Scroll | | Scroll | - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - |
* | - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - | Scroll | | Scroll | - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - |
* | | | MouseDnLf | MouseDown | MouseDnRg | Mute | Down | | Down | | End | Down | PgDn | | |
* | | | MouseDnLf | MouseDown | MouseDnRg | Mute | Down | | Down | | End | Down | PgDn | RShift | |
* ` - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - '
* ` - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - - - - + - - - - - - '
* | LCtrl | Meh | MClick | LClick | R Click | | Cmd / Insrt | Optn / Del | Hyper | Meh | RCtrl |
* | LCtrl | Meh | MClick | LClick | R Click | | Cmd / Insrt | Optn / Del | Hyper | Meh | RCtrl |
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
@ -151,7 +153,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
, KC_NO , KC_F16 , KC_F17 , KC_F18 , KC_F19 , KC_F20 , KC_TRNS
, KC_NO , KC_F16 , KC_F17 , KC_F18 , KC_F19 , KC_F20 , KC_TRNS
, KC_WH_U , KC_PSCR , KC_HOME , KC_UP , KC_PGUP , KC_MAIL , KC_TRNS
, KC_WH_U , KC_PSCR , KC_HOME , KC_UP , KC_PGUP , KC_MAIL , KC_TRNS
, KC_NLCK , KC_LEFT , KC_DOWN , KC_RIGHT , KC_MYCM , KC_TRNS
, KC_NLCK , KC_LEFT , KC_DOWN , KC_RIGHT , KC_MYCM , KC_TRNS
, KC_WH_D , KC_NO , KC_END , KC_DOWN , KC_PGDN , KC_ NO , KC_TRNS
, KC_WH_D , KC_NO , KC_END , KC_DOWN , KC_PGDN , KC_ RSFT , KC_TRNS
, GUI_T ( KC_INS ) , ALT_T ( KC_DEL ) , KC_HYPR , KC_MEH , KC_RCTL
, GUI_T ( KC_INS ) , ALT_T ( KC_DEL ) , KC_HYPR , KC_MEH , KC_RCTL
, KC_MPRV , KC_MNXT
, KC_MPRV , KC_MNXT
, KC_VOLU
, KC_VOLU
@ -213,6 +215,7 @@ const uint16_t PROGMEM fn_actions[] = {
, [ RLock ] = ACTION_MACRO_TAP ( RLock )
, [ RLock ] = ACTION_MACRO_TAP ( RLock )
} ;
} ;
uint16_t caps_shift = 0 ;
uint16_t symb_shift = 0 ; // there are two shift keys for each layer, and two lock
uint16_t symb_shift = 0 ; // there are two shift keys for each layer, and two lock
uint16_t mdia_shift = 0 ; // keys; we increment a counter for each key pressed and
uint16_t mdia_shift = 0 ; // keys; we increment a counter for each key pressed and
uint16_t shift_lock = 0 ; // decrement when released.
uint16_t shift_lock = 0 ; // decrement when released.
@ -223,15 +226,30 @@ bool mdia_lock = false; // key the lock flag is toggled
const macro_t * action_get_macro ( keyrecord_t * record , uint8_t id , uint8_t opt )
const macro_t * action_get_macro ( keyrecord_t * record , uint8_t id , uint8_t opt )
{
{
switch ( id ) {
switch ( id ) {
// shift and lock between layers
// shift and lock between layers?L?
case LCaps : // both caps-shift keys trigger Left Shift
case RCaps : // so they don't interfere with the magic combo
if ( record - > event . pressed & & ! record - > tap . count ) {
if ( + + caps_shift > 2 ) caps_shift = 2 ;
if ( shift_lock ) {
register_code ( KC_CAPS ) ;
unregister_code ( KC_CAPS ) ;
}
register_code ( KC_LSFT ) ;
} else {
if ( - - caps_shift < 0 ) caps_shift = 0 ;
if ( ! caps_shift ) unregister_code ( KC_LSFT ) ;
}
break ;
case LSymb :
case LSymb :
if ( record - > event . pressed ) {
if ( record - > event . pressed ) {
symb_shift + + ;
if ( + + symb_shift > 2 ) symb_shift = 2 ;
if ( shift_lock ) symb_lock = ! symb_lock ;
if ( shift_lock ) symb_lock = ! symb_lock ;
layer_on ( SYMB ) ;
layer_on ( SYMB ) ;
} else {
} else {
symb_shift - - ;
if ( - - symb_shift < 0 ) symb_shift = 0 ;
if ( ( ! symb_shift ) & & ( ! symb_lock ) ) layer_off ( SYMB ) ;
if ( ( ! symb_shift ) & & ( ! symb_lock ) ) layer_off ( SYMB ) ;
}
}
break ;
break ;
@ -241,7 +259,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
if ( record - > tap . count & & ! shift_lock ) {
if ( record - > tap . count & & ! shift_lock ) {
register_code ( KC_TAB ) ;
register_code ( KC_TAB ) ;
} else {
} else {
mdia_shift + + ;
if ( + + mdia_shift > 2 ) mdia_shift = 2 ;
if ( shift_lock ) mdia_lock = ! mdia_lock ;
if ( shift_lock ) mdia_lock = ! mdia_lock ;
layer_on ( MDIA ) ;
layer_on ( MDIA ) ;
}
}
@ -249,7 +267,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
if ( record - > tap . count & & ! shift_lock ) {
if ( record - > tap . count & & ! shift_lock ) {
unregister_code ( KC_TAB ) ;
unregister_code ( KC_TAB ) ;
} else {
} else {
mdia_shift - - ;
if ( - - mdia_shift < 0 ) mdia_shift = 0 ;
if ( ( ! mdia_shift ) & & ( ! mdia_lock ) ) layer_off ( MDIA ) ;
if ( ( ! mdia_shift ) & & ( ! mdia_lock ) ) layer_off ( MDIA ) ;
}
}
}
}
@ -257,20 +275,20 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
case LLock :
case LLock :
if ( record - > event . pressed ) {
if ( record - > event . pressed ) {
shift_lock + + ;
if ( + + shift_lock > 2 ) shift_lock = 2 ;
if ( symb_shift ) symb_lock = ! symb_lock ;
if ( caps_shift ) {
if ( mdia_shift ) mdia_lock = ! mdia_lock ;
if ( ! record - > tap . count & & ( keyboard_report - > mods & ( MOD_BIT ( KC_LSFT ) | MOD_BIT ( KC_RSFT ) ) ) ) {
register_code ( KC_CAPS ) ;
register_code ( KC_CAPS ) ;
unregister_code ( KC_CAPS ) ;
unregister_code ( KC_CAPS ) ;
}
}
if ( symb_shift ) symb_lock = ! symb_lock ;
if ( mdia_shift ) mdia_lock = ! mdia_lock ;
layer_on ( LOCK ) ;
layer_on ( LOCK ) ;
} else {
} else {
if ( record - > tap . count & & ! record - > tap . interrupted & & ! symb_shift & & ! mdia_shift ) {
if ( record - > tap . count & & ! record - > tap . interrupted & & ! symb_shift & & ! mdia_shift ) {
register_code ( KC_GRV ) ;
register_code ( KC_GRV ) ;
unregister_code ( KC_GRV ) ;
unregister_code ( KC_GRV ) ;
}
}
shift_lock - - ;
if ( - - shift_lock < 0 ) shift_lock = 0 ;
if ( ! shift_lock ) layer_off ( LOCK ) ;
if ( ! shift_lock ) layer_off ( LOCK ) ;
}
}
break ;
break ;
@ -280,7 +298,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
if ( record - > tap . count & & ! shift_lock ) {
if ( record - > tap . count & & ! shift_lock ) {
register_code ( KC_QUOT ) ;
register_code ( KC_QUOT ) ;
} else {
} else {
symb_shift + + ;
if ( + + symb_shift > 2 ) symb_shift = 2 ;
if ( shift_lock ) symb_lock = ! symb_lock ;
if ( shift_lock ) symb_lock = ! symb_lock ;
layer_on ( SYMB ) ;
layer_on ( SYMB ) ;
}
}
@ -288,7 +306,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
if ( record - > tap . count & & ! shift_lock ) {
if ( record - > tap . count & & ! shift_lock ) {
unregister_code ( KC_QUOT ) ;
unregister_code ( KC_QUOT ) ;
} else {
} else {
symb_shift - - ;
if ( - - symb_shift < 0 ) symb_shift = 0 ;
if ( ( ! symb_shift ) & & ( ! symb_lock ) ) layer_off ( SYMB ) ;
if ( ( ! symb_shift ) & & ( ! symb_lock ) ) layer_off ( SYMB ) ;
}
}
}
}
@ -299,7 +317,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
if ( record - > tap . count & & ! shift_lock ) {
if ( record - > tap . count & & ! shift_lock ) {
register_code ( KC_BSLS ) ;
register_code ( KC_BSLS ) ;
} else {
} else {
mdia_shift + + ;
if ( + + mdia_shift > 2 ) mdia_shift = 2 ;
if ( shift_lock ) mdia_lock = ! mdia_lock ;
if ( shift_lock ) mdia_lock = ! mdia_lock ;
layer_on ( MDIA ) ;
layer_on ( MDIA ) ;
}
}
@ -307,7 +325,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
if ( record - > tap . count & & ! shift_lock ) {
if ( record - > tap . count & & ! shift_lock ) {
unregister_code ( KC_BSLS ) ;
unregister_code ( KC_BSLS ) ;
} else {
} else {
mdia_shift - - ;
if ( - - mdia_shift < 0 ) mdia_shift = 0 ;
if ( ( ! mdia_shift ) & & ( ! mdia_lock ) ) layer_off ( MDIA ) ;
if ( ( ! mdia_shift ) & & ( ! mdia_lock ) ) layer_off ( MDIA ) ;
}
}
}
}
@ -315,20 +333,20 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
case RLock :
case RLock :
if ( record - > event . pressed ) {
if ( record - > event . pressed ) {
shift_lock + + ;
if ( + + shift_lock > 2 ) shift_lock = 2 ;
if ( caps_shift ) {
register_code ( KC_CAPS ) ;
unregister_code ( KC_CAPS ) ;
}
if ( symb_shift ) symb_lock = ! symb_lock ;
if ( symb_shift ) symb_lock = ! symb_lock ;
if ( mdia_shift ) mdia_lock = ! mdia_lock ;
if ( mdia_shift ) mdia_lock = ! mdia_lock ;
if ( ! record - > tap . count & & ( keyboard_report - > mods & ( MOD_BIT ( KC_LSFT ) | MOD_BIT ( KC_RSFT ) ) ) ) {
register_code ( KC_CAPS ) ;
unregister_code ( KC_CAPS ) ;
}
layer_on ( LOCK ) ;
layer_on ( LOCK ) ;
} else {
} else {
if ( record - > tap . count & & ! record - > tap . interrupted & & ! symb_shift & & ! mdia_shift ) {
if ( record - > tap . count & & ! record - > tap . interrupted & & ! symb_shift & & ! mdia_shift ) {
register_code ( KC_EQL ) ;
register_code ( KC_EQL ) ;
unregister_code ( KC_EQL ) ;
unregister_code ( KC_EQL ) ;
}
}
shift_lock - - ;
if ( - - shift_lock < 0 ) shift_lock = 0 ;
if ( ! shift_lock ) layer_off ( LOCK ) ;
if ( ! shift_lock ) layer_off ( LOCK ) ;
}
}
break ;
break ;