@ -10,12 +10,13 @@
# define HALFQWERTY 1 // mirrored qwerty layer
# define HALFQWERTY 1 // mirrored qwerty layer
# define DVORAK 2 // dvorak layer
# define DVORAK 2 // dvorak layer
# define HALFDVORAK 3 // mirrored dvorak layer
# define HALFDVORAK 3 // mirrored dvorak layer
//no layer 4
# define SYMB 5 // symbols
# define SYMB 5 // symbols
# define HALFSYMB 6 // media keys
# define HALFSYMB 6 // media keys
# define PLVR 7 // steno plover layout
# define PLVR 7 // steno plover layout
# define SHORTCUTS 8 //layer with shortcut keys
# define SHORTCUTS 8 //layer with shortcut keys and other layer nav
# define MDIA 9
# define FUNCTION 9 //all F-keys, all day
# define PROPERSTENO 10 //real steno layout
enum custom_keycodes {
enum custom_keycodes {
PLACEHOLDER = SAFE_RANGE , // can always be here
PLACEHOLDER = SAFE_RANGE , // can always be here
@ -28,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: qwerty
/* Keymap 0: qwerty
*
*
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
* | ESC | 1 | 2 | 3 | 4 | 5 | ` | | \ | 6 | 7 | 8 | 9 | 0 | BSPC |
* | ESC | 1 | 2 | 3 | 4 | 5 | RMB | | \ | 6 | 7 | 8 | 9 | 0 | BSPC |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - - - | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - - - | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | TAB | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | ' |
* | TAB | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | ' |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | | | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | | | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
@ -39,7 +40,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | LCTRL | ALT | CTLShTab | CTL - TAB | LGui | | RGui | UP | DOWN | ALT | RCTRL |
* | LCTRL | ALT | CTLShTab | CTL - TAB | LGui | | RGui | UP | DOWN | ALT | RCTRL |
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
* , - - - - - - - - - - - - - . , - - - - - - - - - - - - - .
* , - - - - - - - - - - - - - . , - - - - - - - - - - - - - .
* | Symbol | Dvorak | | Plover | HalfSymb |
* | Symbol | LMB | | Plover | HalfSymb |
* , - - - - - - | - - - - - - | - - - - - - | | - - - - - - + - - - - - - - - + - - - - - - .
* , - - - - - - | - - - - - - | - - - - - - | | - - - - - - + - - - - - - - - + - - - - - - .
* | | | MU_TOG | | PgUp | | |
* | | | MU_TOG | | PgUp | | |
* | Space | DELETE | - - - - - - | | - - - - - - | Tab | Enter |
* | Space | DELETE | - - - - - - | | - - - - - - | Tab | Enter |
@ -50,21 +51,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Otherwise, it needs KC_*
// Otherwise, it needs KC_*
[ QWERTY ] = LAYOUT_ergodox ( // layer 0 : default
[ QWERTY ] = LAYOUT_ergodox ( // layer 0 : default
// left hand
// left hand
KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_ GRAVE ,
KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_ BTN2 ,
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_ LBRC ,
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_ EQ L,
KC_BSPC , KC_A , KC_S , KC_D , KC_F , KC_G ,
KC_BSPC , KC_A , KC_S , KC_D , KC_F , KC_G ,
KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_MINUS ,
KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_MINUS ,
KC_LCTRL , KC_LALT , LCTL ( LSFT ( KC_TAB ) ) , LCTL ( KC_TAB ) , MO ( SHORTCUTS ) ,
KC_LCTRL , KC_LALT , LCTL ( LSFT ( KC_TAB ) ) , LCTL ( KC_TAB ) , MO ( SHORTCUTS ) ,
TG ( SYMB ) , TG ( DVORAK ) ,
KC_LGUI , KC_BTN1 ,
MU_ON ,
MU_ON ,
LT ( HALFQWERTY , KC_SPACE ) , KC_DEL , KC_END ,
KC_SPACE , KC_DEL , KC_END ,
// right hand
// right hand
KC_B SLS , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC ,
KC_B TN2 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC ,
KC_RBRC , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_SLASH ,
KC_RBRC , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_SLASH ,
KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_ENT ,
KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_ENT ,
KC_EQL , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLASH , KC_RSFT ,
KC_EQL , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLASH , KC_RSFT ,
MO ( MDIA ) , KC_UP , KC_DOWN , KC_RALT , KC_RCTRL ,
MO ( SHORTCUTS ) , KC_UP , KC_DOWN , KC_RALT , KC_RCTRL ,
TG ( PLVR ) , TG ( MDIA ) ,
KC_BTN1 , KC_RGUI ,
MU_OFF ,
MU_OFF ,
KC_PGDN , KC_TAB , LT ( HALFQWERTY , KC_ENT )
KC_PGDN , KC_TAB , LT ( HALFQWERTY , KC_ENT )
) ,
) ,
@ -93,25 +94,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Otherwise, it needs KC_*
// Otherwise, it needs KC_*
[ HALFQWERTY ] = LAYOUT_ergodox ( // layer 0 : default
[ HALFQWERTY ] = LAYOUT_ergodox ( // layer 0 : default
// left hand
// left hand
KC_BSPC , KC_0 , KC_9 , KC_8 , KC_7 , KC_6 , KC_ BSL S,
KC_BSPC , KC_0 , KC_9 , KC_8 , KC_7 , KC_6 , KC_ TRN S,
KC_BSLS , KC_P , KC_O , KC_I , KC_U , KC_Y , KC_ R BRC,
KC_BSLS , KC_P , KC_O , KC_I , KC_U , KC_Y , KC_ L BRC,
KC_ENT , KC_SCLN , KC_L , KC_K , KC_J , KC_H ,
KC_ENT , KC_SCLN , KC_L , KC_K , KC_J , KC_H ,
KC_LSFT , KC_SLASH , KC_DOT , KC_COMM , KC_M , KC_N , KC_ EQL ,
KC_LSFT , KC_SLASH , KC_DOT , KC_COMM , KC_M , KC_N , KC_ RBRC ,
KC_LCTRL , KC_LALT , LCTL ( LSFT ( KC_TAB ) ) , LCTL ( KC_TAB ) , KC_TRNS ,
KC_LCTRL , KC_LALT , LCTL ( LSFT ( KC_TAB ) ) , LCTL ( KC_TAB ) , KC_TRNS ,
KC_TRNS , KC_TR A NSPARENT ,
KC_TRNS , KC_TR NS,
KC_TRNS ,
KC_TRNS ,
KC_TRANSPARENT , KC_DEL , KC_END ,
KC_TRANSPARENT , KC_DEL , KC_END ,
// right hand
// right hand
KC_ GRAVE , KC_5 , KC_4 , KC_3 , KC_2 , KC_1 , KC_BSPC ,
KC_ TRNS , KC_5 , KC_4 , KC_3 , KC_2 , KC_1 , KC_BSPC ,
KC_ LBRC , KC_T , KC_R , KC_E , KC_W , KC_Q , KC_BSLS ,
KC_ MINUS , KC_T , KC_R , KC_E , KC_W , KC_Q , KC_BSLS ,
KC_G , KC_F , KC_D , KC_S , KC_A , KC_ENT ,
KC_G , KC_F , KC_D , KC_S , KC_A , KC_ENT ,
KC_ MINUS , KC_B , KC_V , KC_C , KC_X , KC_Z , KC_RSFT ,
KC_ EQL , KC_B , KC_V , KC_C , KC_X , KC_Z , KC_RSFT ,
KC_TRNS , KC_UP , KC_DOWN , KC_RALT , KC_RCTRL ,
KC_TRNS , KC_UP , KC_DOWN , KC_RALT , KC_RCTRL ,
KC_TRANSPARENT , KC_TRNS ,
KC_TRANSPARENT , KC_TRNS ,
KC_TRNS ,
KC_TRNS ,
KC_PGDN , KC_TAB , KC_TRANSPARENT
KC_PGDN , KC_TAB , KC_TRANSPARENT
) ,
) ,
/* Keymap 3 : dvorak
/* Keymap 2 : dvorak
*
*
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
* | ESC | 1 | 2 | 3 | 4 | 5 | ` | | \ | 6 | 7 | 8 | 9 | 0 | BSPC |
* | ESC | 1 | 2 | 3 | 4 | 5 | ` | | \ | 6 | 7 | 8 | 9 | 0 | BSPC |
@ -134,24 +135,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
// Otherwise, it needs KC_*
[ DVORAK ] = LAYOUT_ergodox ( // layer 0 : default
[ DVORAK ] = LAYOUT_ergodox ( // layer 2 : dvorak
// left hand
// left hand
KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_ GRAVE ,
KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_ TRNS ,
KC_TAB , KC_QUOTE , KC_COMM , KC_DOT , KC_P , KC_Y , KC_ LBRC ,
KC_TAB , KC_QUOTE , KC_COMM , KC_DOT , KC_P , KC_Y , KC_ MINUS ,
KC_BSPC , KC_A , KC_O , KC_E , KC_U , KC_I ,
KC_BSPC , KC_A , KC_O , KC_E , KC_U , KC_I ,
KC_LSFT , KC_SCLN , KC_Q , KC_J , KC_K , KC_X , KC_ MINUS ,
KC_LSFT , KC_SCLN , KC_Q , KC_J , KC_K , KC_X , KC_ EQL ,
KC_LCTRL , KC_LALT , LCTL ( LSFT ( KC_TAB ) ) , LCTL ( KC_TAB ) , KC_TRNS ,
KC_LCTRL , KC_LALT , LCTL ( LSFT ( KC_TAB ) ) , LCTL ( KC_TAB ) , KC_TRNS ,
TG ( SYMB ) , KC_TRANSPARENT ,
KC_TRNS , KC_TRANSPARENT ,
KC_ TRNS ,
KC_ UP ,
LT ( HALFDVORAK , KC_SPACE ) , KC_DEL , KC_ END ,
LT ( HALFDVORAK , KC_SPACE ) , KC_DEL , KC_ DOWN ,
// right hand
// right hand
KC_ BSL S, KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC ,
KC_ TRN S, KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC ,
KC_ R BRC, KC_F , KC_G , KC_C , KC_R , KC_L , KC_SLASH ,
KC_ L BRC, KC_F , KC_G , KC_C , KC_R , KC_L , KC_SLASH ,
KC_D , KC_H , KC_T , KC_N , KC_S , KC_ENT ,
KC_D , KC_H , KC_T , KC_N , KC_S , KC_ENT ,
KC_ EQL , KC_B , KC_M , KC_W , KC_V , KC_Z , KC_RSFT ,
KC_ RBRC , KC_B , KC_M , KC_W , KC_V , KC_Z , KC_RSFT ,
KC_TRNS , KC_UP , KC_DOWN , KC_RALT , KC_RCTRL ,
KC_TRNS , KC_UP , KC_DOWN , KC_RALT , KC_RCTRL ,
KC_TRANSPARENT , TG ( MDIA ) ,
KC_TRANSPARENT , KC_TRANSPARENT ,
KC_ TRNS ,
KC_ PGUP ,
KC_PGDN , KC_TAB , LT ( HALFDVORAK , KC_ENT )
KC_PGDN , KC_TAB , LT ( HALFDVORAK , KC_ENT )
) ,
) ,
/* Keymap 3: mirrored dvorak
/* Keymap 3: mirrored dvorak
@ -179,23 +180,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Otherwise, it needs KC_*
// Otherwise, it needs KC_*
[ HALFDVORAK ] = LAYOUT_ergodox ( // layer 0 : default
[ HALFDVORAK ] = LAYOUT_ergodox ( // layer 0 : default
// left hand
// left hand
KC_BSPC , KC_0 , KC_9 , KC_8 , KC_7 , KC_6 , KC_ BSL S,
KC_BSPC , KC_0 , KC_9 , KC_8 , KC_7 , KC_6 , KC_ TRN S,
KC_SLASH , KC_L , KC_R , KC_C , KC_G , KC_F , KC_ R BRC,
KC_SLASH , KC_L , KC_R , KC_C , KC_G , KC_F , KC_ L BRC,
KC_ENT , KC_S , KC_N , KC_T , KC_H , KC_D ,
KC_ENT , KC_S , KC_N , KC_T , KC_H , KC_D ,
KC_LSFT , KC_Z , KC_V , KC_W , KC_M , KC_B , KC_ EQL ,
KC_LSFT , KC_Z , KC_V , KC_W , KC_M , KC_B , KC_ RBRC ,
KC_LCTRL , KC_LALT , LCTL ( LSFT ( KC_TAB ) ) , LCTL ( KC_TAB ) , KC_TRNS ,
KC_LCTRL , KC_LALT , LCTL ( LSFT ( KC_TAB ) ) , LCTL ( KC_TAB ) , KC_TRNS ,
KC_TRANSPARENT , KC_TRANSPARENT ,
KC_TRANSPARENT , KC_TRANSPARENT ,
KC_TRNS ,
KC_TRNS ,
KC_TRANSPARENT , KC_ DEL, KC_END ,
KC_TRANSPARENT , KC_ ENT, KC_TRNS ,
// right hand
// right hand
KC_ GRAVE , KC_5 , KC_4 , KC_3 , KC_2 , KC_5 , KC_ESC ,
KC_ TRNS , KC_5 , KC_4 , KC_3 , KC_2 , KC_5 , KC_ESC ,
KC_ LBRC , KC_Y , KC_P , KC_DOT , KC_COMM , KC_P , KC_TAB ,
KC_ MINUS , KC_Y , KC_P , KC_DOT , KC_COMM , KC_P , KC_TAB ,
KC_I , KC_U , KC_E , KC_O , KC_A , KC_BSPC ,
KC_I , KC_U , KC_E , KC_O , KC_A , KC_BSPC ,
KC_ MINUS , KC_X , KC_K , KC_J , KC_Q , KC_SCLN , KC_RSFT ,
KC_ EQL , KC_X , KC_K , KC_J , KC_Q , KC_SCLN , KC_RSFT ,
KC_TRNS , KC_UP , KC_DOWN , KC_RALT , KC_RCTRL ,
KC_TRNS , KC_UP , KC_DOWN , KC_RALT , KC_RCTRL ,
KC_TRANSPARENT , KC_TRNS ,
KC_TRANSPARENT , KC_TRNS ,
KC_TRNS ,
KC_TRNS ,
KC_ PGDN , KC_TAB , KC_TRANSPARENT
KC_ TRNS , KC_TAB , KC_TRANSPARENT
) ,
) ,
/* Keymap 5: Symbol Layer
/* Keymap 5: Symbol Layer
*
*
@ -235,8 +236,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_DOWN , KC_KP_4 , KC_KP_5 , KC_KP_6 , KC_KP_MINUS , KC_KP_ENTER ,
KC_DOWN , KC_KP_4 , KC_KP_5 , KC_KP_6 , KC_KP_MINUS , KC_KP_ENTER ,
KC_NO , KC_AMPR , KC_KP_1 , KC_KP_2 , KC_KP_3 , KC_KP_PLUS , KC_NO ,
KC_NO , KC_AMPR , KC_KP_1 , KC_KP_2 , KC_KP_3 , KC_KP_PLUS , KC_NO ,
KC_TRNS , KC_DOT , KC_0 , KC_KP_EQUAL , KC_NO ,
KC_TRNS , KC_DOT , KC_0 , KC_KP_EQUAL , KC_NO ,
KC_NO , KC_TRNS ,
BL_OFF , KC_TRNS ,
KC_NO ,
BL_ON ,
KC_NO , KC_NO , LT ( HALFSYMB , KC_ENT )
KC_NO , KC_NO , LT ( HALFSYMB , KC_ENT )
) ,
) ,
/* Keymap 6: Mirrored Symbol Layer
/* Keymap 6: Mirrored Symbol Layer
@ -263,7 +264,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// SYMBOLS
// SYMBOLS
[ HALFSYMB ] = LAYOUT_ergodox (
[ HALFSYMB ] = LAYOUT_ergodox (
// left hand
// left hand
KC_BSPC , KC_F12 , KC_F11 , KC_F10 , KC_F9 , KC_F8 , KC_F7 ,
KC_BSPC , KC_F13 , KC_F14 , KC_F15 , KC_F16 , KC_F17 , KC_F18 ,
KC_NO , KC_NO , KC_KP_7 , KC_KP_8 , KC_KP_9 , KC_KP_ASTERISK , KC_KP_SLASH ,
KC_NO , KC_NO , KC_KP_7 , KC_KP_8 , KC_KP_9 , KC_KP_ASTERISK , KC_KP_SLASH ,
KC_ENTER , KC_NO , KC_KP_4 , KC_KP_5 , KC_KP_6 , KC_KP_MINUS ,
KC_ENTER , KC_NO , KC_KP_4 , KC_KP_5 , KC_KP_6 , KC_KP_MINUS ,
KC_NO , KC_NO , KC_KP_1 , KC_KP_2 , KC_KP_3 , KC_KP_PLUS , KC_KP_ENTER ,
KC_NO , KC_NO , KC_KP_1 , KC_KP_2 , KC_KP_3 , KC_KP_PLUS , KC_KP_ENTER ,
@ -272,7 +273,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS ,
KC_TRNS ,
KC_TRANSPARENT , KC_NO , KC_NO ,
KC_TRANSPARENT , KC_NO , KC_NO ,
// right hand
// right hand
KC_F 6, KC_F5 , KC_F4 , KC_F3 , KC_F2 , KC_F1 , KC_BSPC ,
KC_F 19, KC_F20 , KC_F21 , KC_F22 , KC_F23 , KC_F24 , KC_BSPC ,
KC_NO , KC_PIPE , KC_LCBR , KC_RCBR , KC_SLASH , KC_BSLS , KC_NO ,
KC_NO , KC_PIPE , KC_LCBR , KC_RCBR , KC_SLASH , KC_BSLS , KC_NO ,
KC_GRV , KC_LPRN , KC_RPRN , KC_SCLN , KC_QUOT , KC_NO ,
KC_GRV , KC_LPRN , KC_RPRN , KC_SCLN , KC_QUOT , KC_NO ,
KC_NO , KC_TILD , KC_LBRC , KC_RBRC , KC_EQL , KC_MINUS , KC_NO ,
KC_NO , KC_TILD , KC_LBRC , KC_RBRC , KC_EQL , KC_MINUS , KC_NO ,
@ -281,7 +282,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS ,
KC_TRNS ,
KC_NO , KC_NO , KC_TRANSPARENT
KC_NO , KC_NO , KC_TRANSPARENT
) ,
) ,
/* Keymap 7: Steno for Plover from https://github.com/shayneholmes/tmk_keyboard/commit/11290f8489013018f778627db725160c745e75bd
/* Keymap 7: Steno for Plover from https://github.com/shayneholmes/tmk_keyboard/commit/11290f8489013018f778627db725160c745e75bd
*
*
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
@ -304,26 +304,27 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ` - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - '
* ` - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - '
*/
*/
[ PLVR ] = LAYOUT_ergodox( // layout: layer 4 : Steno for Plover
[ PLVR ] = KEYMAP( // layout: layer 7 : Steno for Plover
// left hand
// left hand
KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO ,
KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO ,
STN_N1, STN_N2 , STN_N3 , STN_N4 , STN_N5 , STN_N6 , KC_NO ,
KC_NO, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_TRNS ,
STN_FN, STN_S1 , STN_TL , STN_PL , STN_HL , STN_ST1 ,
KC_NO, KC_Q , KC_W , KC_E , KC_R , KC_T ,
KC_NO , STN_S2, STN_KL , STN_WL , STN_RL , STN_ST2 , KC_NO ,
KC_NO , KC_A, KC_S , KC_D , KC_F , KC_G , KC_NO ,
KC_NO , KC_NO , KC_NO , KC_NO , KC_NO ,
KC_NO , KC_NO , KC_NO , KC_NO , KC_NO ,
KC_TRNS , KC_TRNS ,
KC_TRNS , KC_TRNS ,
KC_ TRNS ,
KC_ NO ,
STN_A, STN_O , KC_NO ,
KC_C, KC_V , KC_NO ,
// right hand
// right hand
KC_TRNS , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_TRNS ,
KC_TRNS , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_TRNS ,
KC_TRNS , STN_N7 , STN_N8 , STN_N9 , STN_NA , STN_NB , STN_NC ,
KC_TRNS , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_TRNS ,
STN_ST3 , STN_FR , STN_PR , STN_LR , STN_TR , STN_DR ,
KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC ,
KC_NO , STN_ST4 , STN_RR , STN_BR , STN_GR , STN_SR , STN_ZR ,
KC_NO , KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_QUOT ,
KC_TRNS , KC_TRNS , KC_NO , KC_NO , KC_NO ,
KC_TRNS , KC_TRNS , KC_NO , KC_NO , KC_NO ,
KC_TRNS , KC_TRNS ,
KC_TRNS , KC_TRNS ,
KC_TRNS ,
KC_TRNS ,
KC_NO , STN_E, STN_U
KC_NO , KC_N, KC_M
) ,
) ,
/* Keymap 8: shortcuts
/* Keymap 8: shortcuts
*
*
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
@ -338,7 +339,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | LCTRL | ALT | CTLShTab | CTL - TAB | | | RGui | UP | DOWN | ALT | RCTRL |
* | LCTRL | ALT | CTLShTab | CTL - TAB | | | RGui | UP | DOWN | ALT | RCTRL |
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
* , - - - - - - - - - - - - - . , - - - - - - - - - - - - - .
* , - - - - - - - - - - - - - . , - - - - - - - - - - - - - .
* | Alt | Dvorak | | Plover | Alt |
* | SYMBOLS | Dvorak | | Steno | Plover |
* , - - - - - - | - - - - - - | - - - - - - | | - - - - - - + - - - - - - - - + - - - - - - .
* , - - - - - - | - - - - - - | - - - - - - | | - - - - - - + - - - - - - - - + - - - - - - .
* | | | Home | | PgUp | | |
* | | | Home | | PgUp | | |
* | Space | DELETE | - - - - - - | | - - - - - - | Tab | Enter |
* | Space | DELETE | - - - - - - | | - - - - - - | Tab | Enter |
@ -349,35 +350,35 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Otherwise, it needs KC_*
// Otherwise, it needs KC_*
[ SHORTCUTS ] = LAYOUT_ergodox ( // layer 0 : default
[ SHORTCUTS ] = LAYOUT_ergodox ( // layer 0 : default
// left hand
// left hand
KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_ NO ,
RGB_MODE_KNIGHT , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_ LEFT ,
KC_TAB , LCTL ( KC_Q ) , LCTL ( KC_W ) , LCTL ( KC_E ) , LCTL ( KC_R ) , LCTL ( KC_T ) , KC_NO ,
KC_TAB , LCTL ( KC_Q ) , LCTL ( KC_W ) , LCTL ( KC_E ) , LCTL ( KC_R ) , LCTL ( KC_T ) , KC_NO ,
KC_BSPC , LCTL ( KC_A ) , LCTL ( KC_S ) , LCTL ( KC_D ) , LCTL ( KC_F ) , LCTL ( KC_G ) ,
KC_BSPC , LCTL ( KC_A ) , LCTL ( KC_S ) , LCTL ( KC_D ) , LCTL ( KC_F ) , LCTL ( KC_G ) ,
KC_LSFT , LCTL ( KC_Z ) , LCTL ( KC_X ) , LCTL ( KC_C ) , LCTL ( KC_V ) , LCTL ( KC_B ) , KC_MINUS ,
KC_LSFT , LCTL ( KC_Z ) , LCTL ( KC_X ) , LCTL ( KC_C ) , LCTL ( KC_V ) , LCTL ( KC_B ) , KC_MINUS ,
KC_LCTRL , KC_LALT , LCTL ( LSFT ( KC_TAB ) ) , LCTL ( KC_TAB ) , KC_TRANSPARENT ,
RESET , KC_LALT , LCTL ( LSFT ( KC_TAB ) ) , LCTL ( KC_TAB ) , KC_TRANSPARENT ,
KC_NO , KC_NO ,
TG ( SYMB ) , TG ( DVORAK ) ,
KC_NO ,
TG ( FUNCTION ) ,
KC_NO , KC_NO , KC_NO ,
KC_NO , KC_NO , KC_NO ,
// right hand
// right hand
KC_RGHT , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC ,
KC_RGHT , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC ,
TG ( SYMB ) , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSLS ,
TG ( SYMB ) , LCTL ( KC_Y ) , LCTL ( KC_U ) , LCTL ( KC_I ) , LCTL ( KC_O ) , LCTL ( KC_P ) , KC_BSLS ,
KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_ENT ,
LCTL ( KC_H ) , LCTL ( KC_J ) , LCTL ( KC_K ) , LCTL ( KC_L ) , LCTL ( KC_SCLN ) , KC_ENT ,
KC_EQL , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLASH , KC_RSFT ,
KC_EQL , LCTL ( KC_N ) , LCTL ( KC_M ) , LCTL ( KC_COMM ) , LCTL ( KC_DOT ) , LCTL ( KC_SLASH ) , KC_RSFT ,
KC_TRNS , KC_UP , KC_DOWN , KC_RALT , KC_RCTRL ,
KC_TRNS , KC_UP , KC_DOWN , KC_RALT , RESET ,
KC_NO , KC_TRNS ,
TG ( PROPERSTENO ) , TG ( PLVR ) ,
KC_NO ,
KC_NO ,
KC_NO , KC_NO , KC_NO
KC_NO , KC_NO , KC_NO
) ,
) ,
/* Keymap 2: Media and mouse key s
/* Keymap 9: Function s
*
*
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
* | | | | | | | | | | | | | | | |
* | F1 | F2 | F3 | F4 | F5 | F6 | | | | F1 | F2 | F3 | F4 | F5 | F6 |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - - - | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - - - | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | | | LClick | MsUp | RClick | | | | | | LClick | MsUp | RClick | | |
* | F7 | F8 | F9 | F10 | F11 | F12 | | | | F7 | F8 | F9 | F10 | F11 | F12 |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | | | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | | | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | | | MsLeft | MsDown | MsRght | | - - - - - - | | - - - - - - | | MsLeft | MsDown | MsRght | | |
* | F13 | F14 | F15 | F16 | F17 | F18 | - - - - - - | | - - - - - - | F13 | F14 | F15 | F16 | F17 | F18 |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | | | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | | | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | | | | | | | | | | | | | | | |
* | F19 | F20 | F21 | F22 | F23 | F24 | | | | F19 | F20 | F21 | F22 | F23 | F24 |
* ` - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - '
* ` - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - '
* | | | | | | | | | | | |
* | | | | | | | | | | | |
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
@ -385,74 +386,74 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | |
* | | | | | |
* , - - - - - - | - - - - - - | - - - - - - | | - - - - - - + - - - - - - + - - - - - - .
* , - - - - - - | - - - - - - | - - - - - - | | - - - - - - + - - - - - - + - - - - - - .
* | | | | | | | |
* | | | | | | | |
* | | | - - - - - - | | - - - - - - | | |
* | c | v | - - - - - - | | - - - - - - | n | m |
* | | | | | | | |
* | | | | | | | |
* ` - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - '
* ` - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - '
*/
*/
// MEDIA AND MOUSE
[ MDIA ] = LAYOUT_ergodox (
[ FUNCTION ] = LAYOUT_ergodox ( // layout: layer 9
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS ,
// left hand
KC_TRNS , KC_TRNS , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_TRNS , KC_WH_U ,
KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_NO ,
KC_TRNS , KC_TRNS , KC_MS_L , KC_MS_D , KC_MS_R , KC_TRNS ,
KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_NO ,
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_WH_D ,
KC_F13 , KC_F14 , KC_F15 , KC_F16 , KC_F17 , KC_F18 ,
KC_TRNS , KC_TRNS , KC_TRNS , KC_BTN1 , KC_BTN2 ,
KC_F19 , KC_F20 , KC_F21 , KC_F22 , KC_F23 , KC_F24 , KC_NO ,
KC_TRNS , KC_TRNS ,
KC_NO , KC_NO , KC_NO , KC_NO , KC_TRNS ,
KC_TRNS ,
KC_TRNS , KC_TRNS ,
KC_WH_L , KC_WH_R , KC_TRNS ,
KC_TRNS ,
// right hand
KC_NO , KC_NO , KC_NO ,
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS ,
// right hand
KC_WH_U , KC_TRNS , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_TRNS , KC_TRNS ,
KC_TRNS , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 ,
KC_TRNS , KC_MS_L , KC_MS_D , KC_MS_R , KC_TRNS , KC_TRNS ,
KC_TRNS , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 ,
KC_WH_D , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS ,
KC_F13 , KC_F14 , KC_F15 , KC_F16 , KC_F17 , KC_F18 ,
KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS , KC_TRNS ,
KC_NO , KC_F19 , KC_F20 , KC_F21 , KC_F22 , KC_F23 , KC_F24 ,
KC_TRNS , KC_TRNS ,
KC_TRNS , KC_TRNS , KC_NO , KC_NO , KC_NO ,
KC_TRNS ,
KC_TRNS , KC_TRNS ,
KC_TRNS , KC_WH_L , KC_WH_R
KC_TRNS ,
KC_NO , KC_NO , KC_NO
) ,
) ,
/* Keymap 8: shortcuts
/* Keymap 10: Steno
*
*
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
* , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .
* | ESC | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT | 6 | 7 | 8 | 9 | 0 | BSPC |
* | | | | | | | | | | | | | | | |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - - - | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - - - | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | TAB | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
* | | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | | | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | | | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | BkSp | A | S | D | F | G | - - - - - - | | - - - - - - | H | J | K | L | ; | ENTER |
* | | q | w | e | r | t | - - - - - - | | - - - - - - | y | u | i | o | p | [ |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | - | | = | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - | | | | - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - |
* | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
* | | a | s | d | f | g | | | | h | j | k | l | ; | ' |
* ` - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - '
* ` - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - + - - - - - - - - '
* | LCTRL | ALT | CTLShTab | CTL - TAB | | | RGui | UP | DOWN | ALT | RCTRL |
* | | | | | | | | | | | |
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
* ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
* , - - - - - - - - - - - - - . , - - - - - - - - - - - - - .
* , - - - - - - - - - - - - - . , - - - - - - - - - - - - - .
* | Alt | Dvorak | | Plover | Alt |
* | | | | | |
* , - - - - - - | - - - - - - | - - - - - - | | - - - - - - + - - - - - - -- +- - - - - - .
* , - - - - - - | - - - - - - | - - - - - - | | - - - - - - + - - - - - - +- - - - - - .
* | | | Home | | PgUp | | |
* | | | | | | | |
* | Space | DELETE | - - - - - - | | - - - - - - | Tab | Enter |
* | c | v | - - - - - - | | - - - - - - | n | m |
* | mirror | | End | | PgDn | | mirror |
* | | | | | | | |
* ` - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - - - '
* ` - - - - - - - - - - - - - - - - - - - - ' ` - - - - - - - - - - - - - - - - - - - - '
*/
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
// Otherwise, it needs KC_*
[ SHORTCUTS ] = LAYOUT_ergodox ( // layer 0 : default
// left hand
KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_NO ,
KC_TAB , LCTL ( KC_Q ) , LCTL ( KC_W ) , LCTL ( KC_E ) , LCTL ( KC_R ) , LCTL ( KC_T ) , KC_NO ,
KC_BSPC , LCTL ( KC_A ) , LCTL ( KC_S ) , LCTL ( KC_D ) , LCTL ( KC_F ) , LCTL ( KC_G ) ,
KC_LSFT , LCTL ( KC_Z ) , LCTL ( KC_X ) , LCTL ( KC_C ) , LCTL ( KC_V ) , LCTL ( KC_B ) , KC_MINUS ,
KC_LCTRL , KC_LALT , LCTL ( LSFT ( KC_TAB ) ) , LCTL ( KC_TAB ) , KC_TRANSPARENT ,
KC_NO , KC_NO ,
KC_NO ,
[ PROPERSTENO ] = LAYOUT_ergodox ( // layout: layer 10
KC_NO , KC_NO , KC_NO ,
// left hand
KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO ,
STN_N1 , STN_N2 , STN_N3 , STN_N4 , STN_N5 , STN_N6 , KC_NO ,
STN_FN , STN_S1 , STN_TL , STN_PL , STN_HL , STN_ST1 ,
KC_NO , STN_S2 , STN_KL , STN_WL , STN_RL , STN_ST2 , KC_NO ,
KC_NO , KC_NO , KC_NO , KC_NO , KC_TRNS ,
KC_TRNS , KC_TRNS ,
KC_TRNS ,
STN_A , STN_O , KC_NO ,
// right hand
// right hand
KC_RGHT , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC ,
KC_TRNS , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_TRNS ,
TG ( SYMB ) , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSLS ,
KC_TRNS , STN_N7 , STN_N8 , STN_N9 , STN_NA , STN_NB , STN_NC ,
KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_ENT ,
STN_ST3 , STN_FR , STN_PR , STN_LR , STN_TR , STN_DR ,
KC_EQL , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLASH , KC_RSFT ,
KC_NO , STN_ST4 , STN_RR , STN_BR , STN_GR , STN_SR , STN_ZR ,
KC_RGUI , KC_UP , KC_DOWN , KC_RALT , KC_RCTRL ,
KC_TRNS , KC_TRNS , KC_NO , KC_NO , KC_NO ,
KC_NO , KC_NO ,
KC_TRNS , KC_TRNS ,
KC_NO ,
KC_TRNS ,
KC_NO , KC_NO , KC_NO
KC_NO , STN_E , STN_U
) ,
) ,
} ;
} ;
const uint16_t PROGMEM fn_actions [ ] = {
const uint16_t PROGMEM fn_actions [ ] = {