From 6d343f3559db895e9eb6976477a958d962f703ce Mon Sep 17 00:00:00 2001 From: Thiago Alves Date: Mon, 25 Apr 2016 23:46:37 -0700 Subject: [PATCH] Add my personal keymap for OSX use. This keymap was created to have a feel keys on a different place and to have as fewer layers as possible. Currently I have only 2 extra layers and only one of them is really required to have all possible keys available. Check out the README.md file for more information. --- keyboard/ergodox_ez/Makefile | 2 +- keyboard/ergodox_ez/config.h | 2 + .../ergodox_ez/keymaps/townk_osx/keymap.c | 287 ++++++++++++++++++ .../keymaps/townk_osx/townk_osx.hex | Bin 0 -> 51220 bytes 4 files changed, 290 insertions(+), 1 deletion(-) create mode 100644 keyboard/ergodox_ez/keymaps/townk_osx/keymap.c create mode 100644 keyboard/ergodox_ez/keymaps/townk_osx/townk_osx.hex diff --git a/keyboard/ergodox_ez/Makefile b/keyboard/ergodox_ez/Makefile index 3a07ec254f..f4a61dde4b 100644 --- a/keyboard/ergodox_ez/Makefile +++ b/keyboard/ergodox_ez/Makefile @@ -96,7 +96,7 @@ EXTRAKEY_ENABLE = yes # Audio control and System control(+450) # CONSOLE_ENABLE = yes # Console for debug(+400) COMMAND_ENABLE = yes # Commands for debug and configuration CUSTOM_MATRIX = yes # Custom matrix file for the ErgoDox EZ -SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work # MIDI_ENABLE = yes # MIDI controls # UNICODE_ENABLE = yes # Unicode diff --git a/keyboard/ergodox_ez/config.h b/keyboard/ergodox_ez/config.h index 6a391ffb54..58ba690afd 100644 --- a/keyboard/ergodox_ez/config.h +++ b/keyboard/ergodox_ez/config.h @@ -86,5 +86,7 @@ along with this program. If not, see . //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION //#define DEBUG_MATRIX_SCAN_RATE +#define ONESHOT_TAP_TOGGLE 2 +#define ONESHOT_TIMEOUT 3000 #endif diff --git a/keyboard/ergodox_ez/keymaps/townk_osx/keymap.c b/keyboard/ergodox_ez/keymaps/townk_osx/keymap.c new file mode 100644 index 0000000000..62ebc5c3ac --- /dev/null +++ b/keyboard/ergodox_ez/keymaps/townk_osx/keymap.c @@ -0,0 +1,287 @@ +#include "ergodox_ez.h" +#include "debug.h" +#include "action_layer.h" +#include "action_util.h" +#include "led.h" +#include "keymap_common.h" +#include "timer.h" + +/* + +# Why this Layout + +This layout was based on Kinesis layout and other ErgoDox user layouts +available. It's target to be used on a MacOS but I'm pretty sure it can be +addapted to Windows and/or Linux easily. + +## Function Key + +The `fn` key work almost like it would in any other keyboard with the exception +it has a semi-sticky behavior. What does that mean? + +Well, if you press the `fn` and release it, the keyboard will be put on the +_function layout_ and the next key stroke will be processed as if the `fn` key +was pressed. Aftwards, the leyout get back to _normal_. If you hold `fn` and +press any other key, when you release them, the keyboard leyout is back to +_normal_. + +While pressing the `fn` with the left hand and strikeing the other keys on the +right hand is farly easy, the same cannot being said for the other keys on the +left side. So, instead of trying to do contorcionism with my left hand, I +decided to do a semi-sticky version of `fn`. This way, I can press the `fn` +key with my pinky, release it and press the `1` key to issue an `F1` to the +operating system. + +## Key-Pad Key + +The `key pad` key is a layout switch key. If pressed, it will put the keyboard +on the _key pad layout_ and stay there until key is pressed again. + +This is used to make the keyboard behave mostly like a **num pad keyboard**. + +## Notes +- Regardless in which layout you are, keys from other layouts are not + accessible. This means that if you are on the _key pad layout_, the left hand + will be pretty much unusable. + Of course that like anything else, there are exceptions to this rule. + Modifiers should remain accessible throughout the layers. +- The _shift key_ is, like the _function key_, also configured to have a sticky + behavior. +- All sticky keys have a timeout of 3 seconds. + +*/ +#define BASE 0 +#define KEYPAD 1 +#define FN 2 + +#define MACRO_TMUX_ESC 10 +#define MACRO_SHIFT_OR_LPAREN 11 +#define MACRO_SHIFT_OR_RPAREN 12 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* Keymap 0: Base Layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | `~ | 1 | 2 | 3 | 4 | 5 | ESC | | Macro| 6 | 7 | 8 | 9 | 0 | + = | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | Tab | Q | W | E | R | T | F16 | | F17 | Y | U | I | O | P | - _ | + * |-----------+------+------+------+------+------| Meh | | Meh |------+------+------+------+------+-----------| + * | \ (Ctrl) | A | S | D | F | G |------| |------| H | J | K | L | ; | ' " (Ctrl)| + * |-----------+------+------+------+------+------| F18 | | F19 |------+------+------+------+------+-----------| + * | LShift | Z | X | C | V | B | Hyper| | Hyper| N | M | , | . | / | RShift | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | FN | No |LCtrl | LAlt | LGui | | RGui | RAlt | RCtrl| No | KPAD | + * `-----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | Left | Right| | Down | Up | + * ,------|------|------| |------+------+------. + * | | | Home | | PgUp | | | + * |Backsp| Del |------| |------| Enter| Space| + * | | | End | | PgDn | | | + * `--------------------' `--------------------' + * + * Macro = Ctrk+A Esc + * (this is used to issue the Esc key to the Tmux application) + */ +[BASE]=KEYMAP(//left half + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, MEH_T(KC_F16), + CTL_T(KC_BSLS), KC_A, KC_S, KC_D, KC_F, KC_G, + KC_FN2, KC_Z, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_F18), + KC_FN1, KC_NO, KC_LCTRL, KC_LALT, KC_LGUI, + KC_LEFT, KC_RIGHT, + KC_HOME, + KC_BSPC, KC_DELT, KC_END, + //right half + M(MACRO_TMUX_ESC), KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, + MEH_T(KC_F17), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, + KC_H, KC_J, KC_K, KC_L, KC_SCLN, CTL_T(KC_QUOT), + ALL_T(KC_F19), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_FN2, + KC_RGUI, ALT_T(KC_LBRC), CTL_T(KC_RBRC), KC_NO, TG(KEYPAD), + KC_DOWN, KC_UP, + KC_PGUP, + KC_PGDN, KC_ENT, KC_SPC), + +/* Keymap 1: KeyPad Layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | | | | | | | | | BTab | Clear| / | * | ^ | ( | LeftClick | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | M.Accel 2 | |ScrlUp| U |ScrlDn| | | | Tab | 7 | 8 | 9 | + | ) | RightClick| + * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------| + * | M.Accel 1 | | L | D | R | |------| |------| 4 | 5 | 6 | - | | MidClick | + * |-----------+------+------+------+------+------| | |Return|------+------+------+------+------+-----------| + * | M.Accel 0 | |ScrlL | |ScrlR | | | | | 1 | 2 | 3 | = | | | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | | | | | | | 0 | . | , | | KPAD | + * `-----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + */ +[KEYPAD]=KEYMAP(//left half + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_MS_WH_UP, KC_MS_U, KC_MS_WH_DOWN, KC_NO, KC_NO, + KC_NO, KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, + KC_NO, KC_NO, KC_MS_WH_LEFT, KC_NO, KC_MS_WH_RIGHT, KC_NO, KC_NO, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, + KC_NO, + KC_NO, KC_NO, KC_NO, + //right half + LSFT(KC_TAB), KC_CLEAR, KC_KP_SLASH, KC_KP_ASTERISK, KC_CIRCUMFLEX, KC_LPRN, KC_MS_BTN1, + KC_TAB, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, KC_RPRN, KC_MS_BTN2, + KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_MINUS, KC_NO, KC_MS_BTN3, + KC_KP_ENTER, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_EQUAL, KC_NO, KC_NO, + KC_KP_0, KC_KP_DOT, KC_KP_COMMA, KC_NO, KC_TRNS, + KC_NO, KC_NO, + KC_NO, + KC_NO, KC_NO, KC_NO), + +/* Keymap 2: Functions Layer + * + * ,-----------------------------------------------------. ,-----------------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | Vol. Up | + * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------| + * | | Stop | Rw | Rec | FF | | XXXX | | XXXX | | | | | | Vol. Down | + * |-----------+------+------+------+------+------| XXXX | | XXXX |------+------+------+------+------+-----------| + * | CapsLock | Eject| Prev | Play | Next | |------| |------| Left | Down | Up | Right| | Mute | + * |-----------+------+------+------+------+------| XXXX | | XXXX |------+------+------+------+------+-----------| + * | L Shift | | | | | | XXXX | | XXXX | | | | | | R Shift | + * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------' + * | XXXXX | | XXXX | XXXX | XXXX | | XXXX | XXXX | XXXX | | | + * `-----------------------------------' `-----------------------------------' + * ,-------------. ,-------------. + * | | | | | | + * ,------|------|------| |------+------+------. + * | | | | | | | | + * | | |------| |------| | | + * | | | | | | | | + * `--------------------' `--------------------' + * + * XXX = These keys are transparent keys that, when pressed, they issue the key from the previous layer. + */ +[FN]=KEYMAP(//left half + KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, + KC_NO, KC_MEDIA_STOP, KC_MEDIA_REWIND, KC_MEDIA_SELECT, KC_MEDIA_FAST_FORWARD, KC_NO, KC_TRNS, + KC_CAPS, KC_MEDIA_EJECT, KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, KC_NO, + KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, + KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, + KC_NO, KC_NO, + KC_NO, + KC_NO, KC_NO, KC_NO, + //right half + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_VOLU, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLD, + KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_NO, KC_MUTE, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_RSFT, + KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, + KC_NO, KC_NO, + KC_NO, + KC_NO, KC_NO, KC_NO)}; + +const uint16_t PROGMEM fn_actions[] = { + [1] = ACTION_LAYER_ONESHOT(FN), + [2] = ACTION_MODS_ONESHOT(MOD_LSFT), // Sticky shift light. Tap for the next keypress to be shifted. Hold for regular shift. +}; + +static uint16_t key_timer; + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { + // MACRODOWN only works in this function + switch(id) { + case MACRO_TMUX_ESC: + if (record->event.pressed) { + return MACRO(D(LCTRL), T(A), U(LCTRL), D(ESC), END); + } + return MACRO(U(ESC), END); + case MACRO_SHIFT_OR_LPAREN: { + if (record->event.pressed) { + key_timer = timer_read(); // if the key is being pressed, we start the timer. + register_code(KC_LSFT); // we're now holding down Shift. + } else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down"). + if (timer_elapsed(key_timer) < TAPPING_TERM) { // the threshhold we pick for counting something as a tap. + register_code(KC_9); // sending 9 while Shift is held down gives us an opening paren + unregister_code(KC_9); // now let's let go of that key + } + unregister_code(KC_LSFT); // let's release the Shift key now. + } + break; + } + case MACRO_SHIFT_OR_RPAREN: { + if (record->event.pressed) { + key_timer = timer_read(); // Now we're doing the same thing, only for the right shift/close paren key + register_code(KC_RSFT); + } else { + if (timer_elapsed(key_timer) < TAPPING_TERM) { + register_code(KC_0); + unregister_code(KC_0); + } + unregister_code(KC_RSFT); + } + break; + } + } + return MACRO_NONE; +}; + +// Runs just one time when the keyboard initializes. +void matrix_init_user(void) { +}; + +uint8_t current_layer = BASE; + +// Runs constantly in the background, in a loop. +void matrix_scan_user(void) { + uint8_t layer = biton32(layer_state); + + ergodox_led_all_off(); + ergodox_led_all_set(LED_BRIGHTNESS_LO); + + switch (layer) { + case BASE: + current_layer = BASE; + break; + case KEYPAD: + current_layer = KEYPAD; + break; + default: + // none + break; + } + + // layer leds + if (current_layer == KEYPAD) { + ergodox_right_led_3_on(); + } + + // capslock + if (host_keyboard_leds() & (3<mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) && // is shift pressed and there is no other + !(keyboard_report->mods & (~MOD_BIT(KC_LSFT) & ~MOD_BIT(KC_RSFT)))) || // modifier being pressed as well + (get_oneshot_mods() & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) && !has_oneshot_mods_timed_out())) { // or the one shot shift didn't timed out + ergodox_right_led_1_set(LED_BRIGHTNESS_HI); + ergodox_right_led_1_on(); + } +}; diff --git a/keyboard/ergodox_ez/keymaps/townk_osx/townk_osx.hex b/keyboard/ergodox_ez/keymaps/townk_osx/townk_osx.hex new file mode 100644 index 0000000000000000000000000000000000000000..89e9ffcce2eb60267eb89f16331418d7250f1fde GIT binary patch literal 51220 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 literal 0 HcmV?d00001