diff options
author | Samuel Jahnke <118westmaine@gmail.com> | 2019-03-17 10:22:35 -0700 |
---|---|---|
committer | Drashna Jaelre <drashna@live.com> | 2019-03-17 10:22:35 -0700 |
commit | c74b11a959f58ba52f14f4c1061abc6f84042e29 (patch) | |
tree | e03862fce9f7ed682c2a050e114a85851ba8a1f1 /keyboards/planck/keymaps/samuel/keymap.c | |
parent | fcc9b4b8e7eed87d25d744e3891baf878816d427 (diff) | |
download | firmware-c74b11a959f58ba52f14f4c1061abc6f84042e29.tar.gz firmware-c74b11a959f58ba52f14f4c1061abc6f84042e29.tar.bz2 firmware-c74b11a959f58ba52f14f4c1061abc6f84042e29.zip |
[Keymap] Improvements to Samuel's literate keymap (#5428)
* added my own keymap
* changed thing
* updated keymap Samuel
* updated laypout for better one handed use
* updated stuff I want
* happy with my lagout
* formatting
* Added new literate config
* made everything nice
* cleaned
* fixed spelling and two small bugs in macros
* Made press and lift function for modifiers
* made taps occur on press instead of release
* added oneshot keys and chars cant be negative!
* removed debug message
* Added command and qwerty layers
* fixed bug with oneshot layer
* same bug, different key
Diffstat (limited to 'keyboards/planck/keymaps/samuel/keymap.c')
-rw-r--r-- | keyboards/planck/keymaps/samuel/keymap.c | 372 |
1 files changed, 243 insertions, 129 deletions
diff --git a/keyboards/planck/keymaps/samuel/keymap.c b/keyboards/planck/keymaps/samuel/keymap.c index 53760da76..ff1424489 100644 --- a/keyboards/planck/keymaps/samuel/keymap.c +++ b/keyboards/planck/keymaps/samuel/keymap.c @@ -2,36 +2,45 @@ extern keymap_config_t keymap_config; -static uint16_t tap_timers[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - -char last_mod = -1; - -enum planck_layers { - _DVORAK, - _RISE -}; - // where the 'T_' communicates how the key does something different when tapped. enum planck_keycodes { - DVORAK = SAFE_RANGE, - KC_T_LALT, - KC_T_RALT, - KC_T_LGUI, - KC_T_RGUI, - KC_T_LCTL, - KC_T_RCTL, - KC_T_LSFT, - KC_T_RSFT, - KC_T_LRSE, - KC_T_RRSE, - KC_EZRGHT, - KC_EZLEFT, - KC_EZUP, - KC_EZDOWN, - KC_EZUNDO, - KC_EZCOPY, - KC_EZCUT, - KC_EZPSTE +//DVORAK = SAFE_RANGE, +KC_T_LALT = SAFE_RANGE, +KC_T_RALT, +KC_T_LGUI, +KC_T_RGUI, +KC_T_LCTL, +KC_T_RCTL, +KC_T_LSFT, +KC_T_RSFT, +KC_T_LRSE, +KC_T_RRSE, +KC_EZRGHT, +KC_EZLEFT, +KC_EZUP, +KC_EZDOWN, +KC_EZUNDO, +KC_EZCOPY, +KC_EZCUT, +KC_EZPSTE, +KC_EZSHFT, +KC_EZCTRL, +KC_EZGUI, +KC_EZALT, +KC_DVORAK, +KC_QWERTY, +KC_USER, +KC_EMAIL, +KC_NAME, +KC_DIR, +KC_COM +}; + +enum planck_layers { +_DVORAK, +_QWERTY, +_RISE, +_COMMAND }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { @@ -44,202 +53,307 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { { KC_T_LGUI, KC_T_LALT, KC_UP, KC_DOWN, KC_BSPC, KC_TAB, KC_ENT, KC_SPC, KC_LEFT, KC_RIGHT, KC_T_RALT, KC_T_RGUI} }, +[_QWERTY] = + +{{ KC_T_LRSE, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_T_RRSE}, +{ KC_T_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_T_RSFT}, +{ KC_T_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_QUOT, KC_T_RCTL}, +{ KC_T_LGUI, KC_T_LALT, KC_UP, KC_DOWN, KC_BSPC, KC_TAB, KC_ENT, KC_SPC, KC_LEFT, KC_RIGHT, KC_T_RALT, KC_DVORAK} +}, + [_RISE] = -{{ KC_TRANSPARENT, KC_EZUNDO, KC_EZCOPY, KC_EZCUT, KC_EZPSTE, KC_INS, KC_EQL, KC_7, KC_8, KC_9, KC_F11, KC_TRANSPARENT}, -{ KC_TRANSPARENT, KC_ESC, KC_CAPS, KC_PGUP, KC_PGDN, KC_F4, KC_ASTR, KC_4, KC_5, KC_6, KC_0, KC_TRANSPARENT}, -{ KC_TRANSPARENT, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_1, KC_2, KC_3, KC_F12, KC_TRANSPARENT}, -{ KC_TRANSPARENT, KC_TRANSPARENT, KC_EZUP, KC_EZDOWN, KC_TRANSPARENT, KC_AMPR, KC_PIPE, KC_TRANSPARENT, KC_EZLEFT, KC_EZRGHT, KC_TRANSPARENT, KC_TRANSPARENT} +{{ KC_TRANSPARENT, KC_EZUNDO, KC_EZCOPY, KC_EZCUT, KC_EZPSTE, KC_INS, KC_EQL, KC_7, KC_8, KC_9, KC_TRANSPARENT, KC_TRANSPARENT}, +{ KC_EZSHFT, KC_ESC, KC_CAPS, KC_PGUP, KC_PGDN, KC_HOME, KC_ASTR, KC_4, KC_5, KC_6, KC_0, KC_EZSHFT}, +{ KC_EZCTRL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_1, KC_2, KC_3, KC_COM, KC_EZCTRL}, +{ KC_EZGUI, KC_EZALT, KC_EZUP, KC_EZDOWN, KC_SPC, KC_AMPR, KC_PIPE, KC_END, KC_EZLEFT, KC_EZRGHT, KC_EZALT, KC_EZGUI} +}, + +[_COMMAND] = + +{{ KC_TRANSPARENT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRANSPARENT}, +{ KC_TRANSPARENT, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_TRANSPARENT}, +{ KC_TRANSPARENT, KC_F21, KC_F22, KC_F23, KC_F24, KC_QWERTY, KC_DVORAK, KC_USER, KC_EMAIL, KC_NAME, KC_TRANSPARENT, KC_TRANSPARENT}, +{ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_DIR, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT} }, }; -void mod_press(uint16_t hold_code, int id) { - tap_timers[id] = timer_read(); - last_mod = id; - register_code(hold_code); +static uint16_t tap_timer = 0; +char last_mod = 10; + +void mod_press(uint16_t tap_code, uint16_t hold_code, int id) { + // this first if body makes double modified keys impossible, but stops the + // delay when modifying a tap key which would result in the tap key not + // getting modified. + if (last_mod != id && last_mod != 10) { + tap_code16(tap_code); + last_mod = 10; + } else { + tap_timer = timer_read(); + last_mod = id; + register_code(hold_code); + } } void mod_lift(uint16_t tap_code, uint16_t hold_code, int id) { unregister_code(hold_code); - if (last_mod == id && timer_elapsed(tap_timers[id]) < TAPPING_TERM) { - tap_code16(tap_code); - last_mod = -1; + if (last_mod == id && timer_elapsed(tap_timer) < TAPPING_TERM) { + tap_code16(tap_code); + last_mod = 10; } } bool process_record_user(uint16_t keycode, keyrecord_t *record) { - switch (keycode) { - case DVORAK: - if (record->event.pressed) { - set_single_persistent_default_layer(_DVORAK); - } - return false; - break; + switch (keycode) { + +case KC_DVORAK: +if (record->event.pressed) { + set_single_persistent_default_layer(_DVORAK); +} +return true; +break; + +case KC_QWERTY: +if (record->event.pressed) { + set_single_persistent_default_layer(_QWERTY); +} +return true; +break; case KC_T_LALT: if (record->event.pressed) { - mod_press(KC_LALT, 0); - } else { - mod_lift(S(KC_9), KC_LALT, 0); - } + mod_press(S(KC_9), KC_LALT, 0); +} else { + mod_lift(S(KC_9), KC_LALT, 0); +} return false; break; case KC_T_RALT: if (record->event.pressed) { - mod_press(KC_RALT, 1); - } else { - mod_lift(S(KC_0), KC_RALT, 1); - } + mod_press(S(KC_0), KC_RALT, 1); +} else { + mod_lift(S(KC_0), KC_RALT, 1); +} return false; break; case KC_T_LGUI: if (record->event.pressed) { - mod_press(KC_LGUI, 2); - } else { - mod_lift(KC_GRAVE, KC_LGUI, 2); - } + mod_press(KC_GRAVE, KC_LGUI, 2); +} else { + mod_lift(KC_GRAVE, KC_LGUI, 2); +} return false; break; case KC_T_RGUI: if (record->event.pressed) { - mod_press(KC_RGUI, 3); - } else { - mod_lift(KC_BSLASH, KC_RGUI, 3); - } + mod_press(KC_BSLASH, KC_RGUI, 3); +} else { + mod_lift(KC_BSLASH, KC_RGUI, 3); +} return false; break; case KC_T_LCTL: if (record->event.pressed) { - mod_press(KC_LCTL, 4); - } else { - mod_lift(KC_LBRACKET, KC_LCTL, 4); - } + mod_press(KC_LBRACKET, KC_LCTL, 4); +} else { + mod_lift(KC_LBRACKET, KC_LCTL, 4); +} return false; break; case KC_T_RCTL: if (record->event.pressed) { - mod_press(KC_RCTL, 5); - } else { - mod_lift(KC_RBRACKET, KC_RCTL, 5); - } + mod_press(KC_RBRACKET, KC_RCTL, 5); +} else { + mod_lift(KC_RBRACKET, KC_RCTL, 5); +} return false; break; case KC_T_LSFT: if (record->event.pressed) { - mod_press(KC_LSFT, 6); - } else { - mod_lift(KC_EQUAL, KC_LSFT, 6); - } + mod_press(KC_EQUAL, KC_LSFT, 6); +} else { + mod_lift(KC_EQUAL, KC_LSFT, 6); +} return false; break; case KC_T_RSFT: if (record->event.pressed) { - mod_press(KC_RSFT, 7); - } else { - mod_lift(KC_MINUS, KC_RSFT, 7); - } + mod_press(KC_MINUS, KC_RSFT, 7); +} else { + mod_lift(KC_MINUS, KC_RSFT, 7); +} return false; break; case KC_T_LRSE: if (record->event.pressed) { - tap_timers[8] = timer_read(); - last_mod = 8; - layer_on(_RISE); - } else { - layer_off(_RISE); - if (last_mod == 8 && timer_elapsed(tap_timers[8]) < TAPPING_TERM) { - tap_code16(KC_DELETE); - last_mod = -1; - } - } + tap_timer = timer_read(); + last_mod = 8; + layer_on(_RISE); +} else { + layer_off(_RISE); + if (last_mod == 8 && timer_elapsed(tap_timer) < TAPPING_TERM) { + tap_code16(KC_DELETE); + last_mod = 10; + } +} return false; break; case KC_T_RRSE: if (record->event.pressed) { - tap_timers[9] = timer_read(); - last_mod = 9; - layer_on(_RISE); - } else { - layer_off(_RISE); - if (last_mod == 9 && timer_elapsed(tap_timers[9]) < TAPPING_TERM) { - tap_code16(KC_SLASH); - last_mod = -1; - } - } + tap_timer = timer_read(); + last_mod = 9; + layer_on(_RISE); +} else { + layer_off(_RISE); + if (last_mod == 9 && timer_elapsed(tap_timer) < TAPPING_TERM) { + tap_code16(KC_SLASH); + last_mod = 10; + } +} +return false; +break; + +case KC_EZSHFT: +if (record->event.pressed) { + set_oneshot_mods(MOD_LSFT); + last_mod = 10; +} +return false; +break; +case KC_EZCTRL: +if (record->event.pressed) { + set_oneshot_mods(MOD_LCTL); + last_mod = 10; +} +return false; +break; +case KC_EZALT: +if (record->event.pressed) { + set_oneshot_mods(MOD_LALT); + last_mod = 10; +} +return false; +break; +case KC_EZGUI: +if (record->event.pressed) { + set_oneshot_mods(MOD_LGUI); + last_mod = 10; +} return false; break; case KC_EZRGHT: if (record->event.pressed) { - register_code(KC_LCTL); - tap_code16(S(KC_RGHT)); - unregister_code(KC_LCTL); - last_mod = -1; - } + register_code(KC_LCTL); + tap_code16(S(KC_RGHT)); + unregister_code(KC_LCTL); + last_mod = 10; +} return false; break; case KC_EZLEFT: if (record->event.pressed) { - register_code(KC_LCTL); - tap_code16(S(KC_LEFT)); - unregister_code(KC_LCTL); - last_mod = -1; - } + register_code(KC_LCTL); + tap_code16(S(KC_LEFT)); + unregister_code(KC_LCTL); + last_mod = 10; +} return false; break; case KC_EZDOWN: if (record->event.pressed) { - register_code(KC_LCTL); - tap_code16(S(KC_DOWN)); - unregister_code(KC_LCTL); - last_mod = -1; - } + register_code(KC_LCTL); + tap_code16(S(KC_DOWN)); + unregister_code(KC_LCTL); + last_mod = 10; +} return false; break; case KC_EZUP: if (record->event.pressed) { - register_code(KC_LCTL); - tap_code16(S(KC_UP)); - unregister_code(KC_LCTL); - last_mod = -1; - } + register_code(KC_LCTL); + tap_code16(S(KC_UP)); + unregister_code(KC_LCTL); + last_mod = 10; +} return false; break; + case KC_EZUNDO: if (record->event.pressed) { - tap_code16(C(KC_Z)); - last_mod = -1; + tap_code16(C(KC_Z)); + last_mod = 10; } return false; break; case KC_EZCOPY: if (record->event.pressed) { - tap_code16(C(KC_C)); - last_mod = -1; + tap_code16(C(KC_C)); + last_mod = 10; } return false; break; case KC_EZCUT: if (record->event.pressed) { - tap_code16(C(KC_X)); - last_mod = -1; + tap_code16(C(KC_X)); + last_mod = 10; } return false; break; case KC_EZPSTE: if (record->event.pressed) { - tap_code16(C(KC_P)); - last_mod = -1; + tap_code16(C(KC_V)); + last_mod = 10; } return false; break; - } - last_mod = -1; - return true; +case KC_COM: +if (record->event.pressed) { + layer_on(_COMMAND); + set_oneshot_layer(_COMMAND, ONESHOT_START); + last_mod = 10; +} else { + clear_oneshot_layer_state (ONESHOT_PRESSED); +} +return false; +break; + +case KC_USER: +if (record->event.pressed) { + send_string("mhostley"); + last_mod = 10; +} +return true; +break; +case KC_EMAIL: +if (record->event.pressed) { + send_string("mhostley@gmail.com"); + last_mod = 10; +} +return true; +break; +case KC_NAME: +if (record->event.pressed) { + send_string("Samuel Jahnke"); + last_mod = 10; +} +return true; +break; +case KC_DIR: +if (record->event.pressed) { + send_string("home/mhostley/"); + last_mod = 10; +} +return true; +break; + +} +last_mod = 10; +return true; } |