From 2739aa8d780a8210eac30a284786d60dedc671bc Mon Sep 17 00:00:00 2001 From: Erez Zukerman Date: Wed, 28 Oct 2015 02:55:28 +0200 Subject: [PATCH] Initial working version of ErgoDox EZ layout using new syntax --- keyboard/ergodox_ez/README.md | 10 +- keyboard/ergodox_ez/ergodox_ez.h | 6 +- keyboard/ergodox_ez/ergodox_ez.hex | Bin 0 -> 65976 bytes keyboard/ergodox_ez/keymaps/keymap_default.c | 176 +++++++++++++----- .../ergodox_ez/keymaps/keymap_ergodox_ez.c | 2 +- quantum/keymap_common.h | 13 +- 6 files changed, 149 insertions(+), 58 deletions(-) create mode 100644 keyboard/ergodox_ez/ergodox_ez.hex diff --git a/keyboard/ergodox_ez/README.md b/keyboard/ergodox_ez/README.md index f750d8dbec..5280698a62 100644 --- a/keyboard/ergodox_ez/README.md +++ b/keyboard/ergodox_ez/README.md @@ -1 +1,9 @@ -// TODO: Make up a proper readme for the ErgoDox EZ. +# Some tips on navigating the Quantum codebase + +## These are the keycodes you're looking for + +Let's say you want a certain key in your layout to send a colon; to figure out what keycode to use to make it do that, you're going to need `quantum/keymap_common.h`. + +That file contains a big list of all of the special, fancy keys (like, being able to shend % on its own and whatnot). + +If you want to send a plain vanilla key, you can look up its code under `doc/keycode.txt`. That's where all the boring keys hang out. diff --git a/keyboard/ergodox_ez/ergodox_ez.h b/keyboard/ergodox_ez/ergodox_ez.h index 9d0691dfe2..219b4bd0b6 100644 --- a/keyboard/ergodox_ez/ergodox_ez.h +++ b/keyboard/ergodox_ez/ergodox_ez.h @@ -1,5 +1,5 @@ -#ifndef PLANCK_H -#define PLANCK_H +#ifndef ERGODOX_EZ_H +#define ERGODOX_EZ_H #include "matrix.h" #include "keymap_common.h" @@ -142,4 +142,4 @@ void * matrix_scan_user(void); -#endif \ No newline at end of file +#endif diff --git a/keyboard/ergodox_ez/ergodox_ez.hex b/keyboard/ergodox_ez/ergodox_ez.hex new file mode 100644 index 0000000000000000000000000000000000000000..21b6a9f916f92b410f543ae8d84ff47d1c581cec GIT binary patch literal 65976 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 literal 0 HcmV?d00001 diff --git a/keyboard/ergodox_ez/keymaps/keymap_default.c b/keyboard/ergodox_ez/keymaps/keymap_default.c index 98cc9c5a6f..2965dc74ef 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_default.c +++ b/keyboard/ergodox_ez/keymaps/keymap_default.c @@ -3,63 +3,141 @@ #include "action_layer.h" // TODO: Define layer names that make sense for the ErgoDox EZ. -#define DEFAULT_LAYER 0 -#define COLEMAK_LAYER 1 -#define DVORAK_LAYER 2 -#define LOWER_LAYER 1 -#define RAISE_LAYER 4 +#define BASE 0 // default layer +#define SYMB 1 // symbols +#define MDIA 2 // media keys const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -[DEFAULT_LAYER] = KEYMAP( // layer 0 : default +/* Keymap 0: Basic layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | Del | Q | W | E | R | T | Tab | | : | Y | U | I | O | P | \ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2| ' | + * |--------+------+------+------+------+------| : | | L1 |------+------+------+------+------+--------| + * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * |Grv/L1|AltSft| TAB | Left | Right| | Up | Down | [ | ] | ~L1 | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | Rclk | LGui | | Alt |Ctrl/Esc| + * ,------|------|------| |------+--------+------. + * | | | Home | | PgUp | | | + * | Space|Backsp|------| |------| Tab |Enter | + * | |ace | End | | PgDn | | | + * `--------------------' `----------------------' + */ +// If it accepts an argument (i.e, is a function), it doesn't need KC_. +// Otherwise, it needs KC_* +[BASE] = KEYMAP( // layer 0 : default // left hand - KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, - KC_BSLS,KC_Q, KC_W, KC_E, KC_R, KC_T, KC_FN2, - KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_FN1, - KC_LGUI,KC_GRV, KC_BSLS,KC_LEFT,KC_RGHT, - KC_LCTL,KC_LALT, - KC_HOME, - KC_BSPC,KC_DEL, KC_END, + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, + KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TAB, + KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_COLN, + LT(SYMB,KC_GRV),LALT(KC_LSFT),KC_TAB, KC_LEFT,KC_RGHT, + KC_MENU,KC_LGUI, + KC_HOME, + KC_SPC,KC_BSPC,KC_END, // right hand - KC_FN3, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - KC_LBRC,KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RBRC, - KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, - KC_FN1, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, - KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,KC_RGUI, - KC_RALT,KC_RCTL, - KC_PGUP, - KC_PGDN,KC_ENT, KC_SPC + KC_RGHT,KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_COLN,KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_QUOT, + TG(1), KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + KC_UP, KC_DOWN,KC_RBRC,KC_LBRC, KC_FN1, + KC_RALT, CTL_T(KC_ESC), + KC_PGUP, + KC_PGDN,KC_TAB, KC_ENT ), -[LOWER_LAYER] = KEYMAP( // layer 0 : default - // left hand - KC_EQL, KC_1, KC_2, KC_3, LALT(KC_TAB), KC_5, KC_ESC, - KC_BSLS,KC_Q, S(KC_W), KC_E, KC_R, KC_T, KC_FN2, - KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, - KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_FN1, - KC_LGUI,KC_GRV, KC_BSLS,KC_LEFT,KC_RGHT, - KC_LCTL,KC_LALT, - KC_HOME, - KC_BSPC,KC_DEL, KC_END, - // right hand - KC_FN3, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, - KC_LBRC,KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RBRC, - KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, - KC_FN1, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, - KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,KC_RGUI, - KC_RALT,KC_RCTL, - KC_PGUP, - KC_PGDN,KC_ENT, KC_SPC - ) +/* Keymap 1: Symbol Layer + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | Flash | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | : | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | | | | | . | 0 | = | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// SYMBOLS +[SYMB] = KEYMAP( + // left hand + RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, + KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS, + KC_COLN,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV, + KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, + KC_TRNS,KC_TRNS, + KC_TRNS, + KC_TRNS,KC_TRNS,KC_TRNS, + // right hand + KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, + KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS, + KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS, + KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS +), +/* Keymap 2: Media and mouse keys + * + * ,--------------------------------------------------. ,--------------------------------------------------. + * | | | | | | | | | | | | | | | | + * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| + * | | | MsUp | | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | |MsLeft|MsDown|MsRght| | |------| |------| | | | Play | | Mute | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | | | | | | | | | | | | Prev | Next | | | + * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' + * | | | | Lclk | Rclk | |VolUp |VolDn | | | | + * `----------------------------------' `----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | |Brwser| + * | | |------| |------| |Back | + * | | | | | | | | + * `--------------------' `--------------------' + */ +// MEDIA AND MOUSE +KEYMAP( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN3, KC_BTN2, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, + // right hand + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_MUTE, + KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, + KC_VOLU, KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, + KC_TRNS, + KC_TRNS, KC_TRNS, KC_WBAK +), }; const uint16_t PROGMEM fn_actions[] = { - - [1] = ACTION_LAYER_MOMENTARY(LOWER_LAYER), // to RAISE - [2] = ACTION_LAYER_MOMENTARY(LOWER_LAYER), // to LOWER - - [3] = ACTION_DEFAULT_LAYER_SET(DEFAULT_LAYER), - [4] = ACTION_DEFAULT_LAYER_SET(COLEMAK_LAYER), - [5] = ACTION_DEFAULT_LAYER_SET(DVORAK_LAYER), + [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols) }; const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) diff --git a/keyboard/ergodox_ez/keymaps/keymap_ergodox_ez.c b/keyboard/ergodox_ez/keymaps/keymap_ergodox_ez.c index bab16ece53..84c61320ac 100644 --- a/keyboard/ergodox_ez/keymaps/keymap_ergodox_ez.c +++ b/keyboard/ergodox_ez/keymaps/keymap_ergodox_ez.c @@ -101,7 +101,7 @@ static const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | | MsUp | | | | | | | | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | |MsLeft|MsDown|MsRght| | |------| |------| | | | Play | | | + * | |MsLeft|MsDown|MsRght| | |------| |------| | | | Play | | Mute | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | | | | | | | | | | Prev | Next | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' diff --git a/quantum/keymap_common.h b/quantum/keymap_common.h index e93e864833..5735631d95 100644 --- a/quantum/keymap_common.h +++ b/quantum/keymap_common.h @@ -117,8 +117,13 @@ extern const uint16_t fn_actions[]; #define KC_RCBR LSFT(KC_RBRC) // } #define KC_RIGHT_CURLY_BRACE KC_RCBR +#define KC_COLN LSFT(KC_SCLN) // : +#define KC_COLON KC_COLN + #define KC_PIPE LSFT(KC_SLSH) // | +#define KC_DELT KC_DELETE // Del key (four letter code) + // Alias for function layers than expand past FN31 #define FUNC(kc) kc | 0x2000 @@ -179,10 +184,10 @@ extern const uint16_t fn_actions[]; // M-od, T-ap - 256 keycode max #define MT(mod, kc) (kc | 0x7000 | ((mod & 0xF) << 8)) -#define CTL_T(kc) HT(0x1, kc) -#define SFT_T(kc) HT(0x2, kc) -#define ALT_T(kc) HT(0x4, kc) -#define GUI_T(kc) HT(0x8, kc) +#define CTL_T(kc) MT(0x1, kc) +#define SFT_T(kc) MT(0x2, kc) +#define ALT_T(kc) MT(0x4, kc) +#define GUI_T(kc) MT(0x8, kc) // L-ayer, T-ap - 256 keycode max, 16 layer max #define LT(layer, kc) (kc | 0x7000 | ((layer & 0xF) << 8))