diff options
| author | Dusty Pomerleau <dustypomerleau@users.noreply.github.com> | 2019-02-13 11:46:40 +1100 |
|---|---|---|
| committer | Drashna Jaelre <drashna@live.com> | 2019-02-12 16:46:40 -0800 |
| commit | 15297bcfce016b8f03c2004b3db5a26e38cf994e (patch) | |
| tree | 785a37a3fd2e4d423f22e49937178080935f2521 | |
| parent | d3f7910e680379edd80f8fbe76dd756f7f35c0f3 (diff) | |
| download | qmk_firmware-15297bcfce016b8f03c2004b3db5a26e38cf994e.tar.gz qmk_firmware-15297bcfce016b8f03c2004b3db5a26e38cf994e.zip | |
[Keymap] Add Minidox keymap by dustypomerleau (#5101)
* add dusty keymap
* change keymap folder to match my github username
* initial keymap completed in comments only
* layout without NAV completed in comments only
* disable Command to prevent interference with Space Cadet keys
* switch _ and \ in the symbol layer
* Layers complete through _NAV
* add thumb keys to _NAV
* complete _NUM
* all layouts complete; still needs `process_user_record()`
* completed first draft of keymap; still needs config.h to match
* corrected keycodes for Mac macro-volume keys
* fix Mac mute keycode
* add missing Mac keycodes for previous and next track
* placeholder for qwerty layout, not yet completed;
remove unnecessary breaks;
add todos
* eliminate Preonic branch before switching to Minidox branch:
• delete dustypomerleau Preonic keymap folder
• complete keymap.c (QWERTY layer, vanilla numbers layer)
TODO:
• add preferences to config.h
• complete the README
* edit commented keymap diagrams for clarity in dual function keys
* define initial config.h and add rules.mk for mouse key support
* fix redundant line after implementation of tap_code()
* fixed key_timer declaration, added README and rules
* formatting of keymap
* add CTPC to config
* cycle thumb keys to favor center position
* modify config.h for temporary Pro Micro compatibility
* remove superfluous call to use serial; homebrewed mod tap keys are still broken with OSL
* merge _SYS and _MEDIA on new Z_SYS key
* ALT_OP example of new MT macro complete
* initial narze-inspired MT fixes in PRU
* add (currently superfluous) custom keycode for the _SYS layer
* rudimentary `OSL` symbol macros that immediately register the mod and fail to reset the oneshot layer, but do output the proper keys—fix both of these things
* remove permissive hold to improve tapping performance
* remove calls to `clear_oneshot_layer_state()`, as they have no effect inside `process_record_user()`. Tapdance appears to be the way forward.
* final commit before tapdance code; correct layout in comments
* initial tapdance code for shifted mod taps
* add numeric and ergo NUM layers and pinky shifts for keycuts
* add TD() wrappers to tapdance codes and clean up commented layout guides
* add faux return to cur_dance to allow compilation - TODO: research what the default clause should be in cur_dance
* update commented schematics for better readability
* add backspace and delete to lockable layers, Z_SYS -> SYS_Z for consistency, fix schematic errors
* add `DOUBLE_SINGLE_TAP` to tapdance cases to allow doubling of the single tap character without waiting tapping term
* remove reduced oneshot tapping toggles
* update README
* newline tweak :)
* Update keyboards/minidox/keymaps/dustypomerleau/keymap.c
Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>
* Update keyboards/minidox/keymaps/dustypomerleau/config.h
Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>
* Update keyboards/minidox/keymaps/dustypomerleau/config.h
Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>
* Update keyboards/minidox/keymaps/dustypomerleau/config.h
Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>
* Update keyboards/minidox/keymaps/dustypomerleau/config.h
Co-Authored-By: dustypomerleau <dustypomerleau@users.noreply.github.com>
* remove `PREVENT_STUCK_MODIFIERS`, as this is default behavior
| -rw-r--r-- | keyboards/minidox/keymaps/dustypomerleau/README.md | 28 | ||||
| -rw-r--r-- | keyboards/minidox/keymaps/dustypomerleau/config.h | 26 | ||||
| -rw-r--r-- | keyboards/minidox/keymaps/dustypomerleau/keymap.c | 489 | ||||
| -rw-r--r-- | keyboards/minidox/keymaps/dustypomerleau/rules.mk | 4 |
4 files changed, 547 insertions, 0 deletions
diff --git a/keyboards/minidox/keymaps/dustypomerleau/README.md b/keyboards/minidox/keymaps/dustypomerleau/README.md new file mode 100644 index 000000000..b2ec77125 --- /dev/null +++ b/keyboards/minidox/keymaps/dustypomerleau/README.md | |||
| @@ -0,0 +1,28 @@ | |||
| 1 | ## dustypomerleau, Minidox layout | ||
| 2 | |||
| 3 | The rationale behind my layout can be summarized as follows: | ||
| 4 | |||
| 5 | - Symmetry is important because use-cases are hard to predict. Whenever possible, modifiers and layer keys should be available from either hand. | ||
| 6 | - Inward rolls should be leveraged not just for alphas (Colemak DHm), but also for coding/symbols. | ||
| 7 | - Number order—like alpha order—should be designed to favor use of the strongest fingers. | ||
| 8 | - One-shot keys can greatly reduce the strain of typing, and should be leveraged. | ||
| 9 | |||
| 10 | Some aspects of my layout are optimized for macOS (order of modifiers, manner of producing en and em dashes, coding of micro-volume adjustments, etc.), but can be easily tweaked for the OS of your choice. | ||
| 11 | |||
| 12 | Shift can be a tricky modifier when used in `MT()` combinations, particularly for fast typists on split boards using serial. This can be partially mitigated with options in `config.h`, but still requires a relatively strict typing style/accuracy from the fast typist. The tendency is for faster typists to combat mod/tap mistakes by using very short intervals for `TAPPING_TERM`, but this can introduce its own set of complications. Shift is also one of the highest-yield opportunities to use `OSM()`. For these reasons, I pulled Shift onto dedicated keys in the thumbs for use during regular typing (the home row Shifts have been left in place for use during selection and keycuts). | ||
| 13 | |||
| 14 | The tapdance code that I used to create mod/tap keys inside my symbol layer allows up to 2 consecutive symbols within `TAPPING_TERM`. If you think you will need to quickly nest more than that, feel free to add more `case`s. | ||
| 15 | |||
| 16 | ### Special thanks | ||
| 17 | |||
| 18 | - Everyone on the QMK Discord, for helping me work out the code for mod/tap keys using shifted symbols. | ||
| 19 | - Everyone on the Colemak Discord, for their initial feedback on the layout. | ||
| 20 | - @stevep and @DreymaR, for their work on Colemak DH(m), a truly awesome typing experience (and of course Shai Coleman, for starting it all off!). | ||
| 21 | - @ckofy, for offering a dramatic improvement on Dvorak's original number order. | ||
| 22 | - u/That-Canadian, for designing this awesome keyboard. | ||
| 23 | |||
| 24 | ### Questions or comments? | ||
| 25 | |||
| 26 | - GitHub @dustypomerleau | ||
| 27 | - Twitter @duspom | ||
| 28 | - Discord @dusty#8897 | ||
diff --git a/keyboards/minidox/keymaps/dustypomerleau/config.h b/keyboards/minidox/keymaps/dustypomerleau/config.h new file mode 100644 index 000000000..5166e06d8 --- /dev/null +++ b/keyboards/minidox/keymaps/dustypomerleau/config.h | |||
| @@ -0,0 +1,26 @@ | |||
| 1 | // dustypomerleau, Minidox config | ||
| 2 | |||
| 3 | #pragma once | ||
| 4 | |||
| 5 | |||
| 6 | #define EE_HANDS | ||
| 7 | #define IGNORE_MOD_TAP_INTERRUPT | ||
| 8 | #define ONESHOT_TIMEOUT 1000 | ||
| 9 | #define TAPPING_TERM 200 | ||
| 10 | #define USE_SERIAL | ||
| 11 | |||
| 12 | // optional configuration: | ||
| 13 | |||
| 14 | // #define CONVERT_TO_PROTON_C | ||
| 15 | // #define ONESHOT_TAP_TOGGLE 2 // not compatible with TAPPING_FORCE_HOLD | ||
| 16 | // #define PERMISSIVE_HOLD | ||
| 17 | // #define TAPPING_FORCE_HOLD // allows rapid mod use after tap event, but sacrifices double-tap to repeat | ||
| 18 | |||
| 19 | // #define MOUSEKEY_DELAY 0 // delay before cursor movement (high feels sluggish, low makes fine movement difficult) | ||
| 20 | // #define MOUSEKEY_INTERVAL 20 // time between movement reports - low settings feel like high mouse speed | ||
| 21 | // #define MOUSEKEY_MAX_SPEED 10 | ||
| 22 | // #define MOUSEKEY_TIME_TO_MAX 60 | ||
| 23 | // #define MOUSEKEY_WHEEL_DELAY 0 | ||
| 24 | // #define MOUSEKEY_WHEEL_MAX_SPEED 8 | ||
| 25 | // #define MOUSEKEY_WHEEL_TIME_TO_MAX 4 | ||
| 26 | |||
diff --git a/keyboards/minidox/keymaps/dustypomerleau/keymap.c b/keyboards/minidox/keymaps/dustypomerleau/keymap.c new file mode 100644 index 000000000..13b84d64d --- /dev/null +++ b/keyboards/minidox/keymaps/dustypomerleau/keymap.c | |||
| @@ -0,0 +1,489 @@ | |||
| 1 | // Minidox keymap by dustypomerleau | ||
| 2 | // Thanks for checking out my keymap. The rationale behind the layout is described in the README. | ||
| 3 | |||
| 4 | #include QMK_KEYBOARD_H | ||
| 5 | |||
| 6 | extern keymap_config_t keymap_config; | ||
| 7 | |||
| 8 | enum custom_layers { | ||
| 9 | _CMK_DHM, | ||
| 10 | _QWERTY, | ||
| 11 | _SYS, | ||
| 12 | _NAV, | ||
| 13 | _NUM_E, | ||
| 14 | _NUM_N, | ||
| 15 | _SYM | ||
| 16 | }; | ||
| 17 | |||
| 18 | enum custom_keycodes { | ||
| 19 | CMK_DHM = SAFE_RANGE, | ||
| 20 | QWERTY, | ||
| 21 | SYS, | ||
| 22 | NAV, | ||
| 23 | NUM_E, | ||
| 24 | NUM_N, | ||
| 25 | SYM | ||
| 26 | }; | ||
| 27 | |||
| 28 | typedef struct { | ||
| 29 | bool is_press_action; | ||
| 30 | int state; | ||
| 31 | } tap; | ||
| 32 | |||
| 33 | enum { | ||
| 34 | SINGLE_TAP = 1, | ||
| 35 | SINGLE_HOLD = 2, | ||
| 36 | DOUBLE_SINGLE_TAP = 3 | ||
| 37 | }; | ||
| 38 | |||
| 39 | enum { | ||
| 40 | ALT_OP = 0, | ||
| 41 | CTL_CCB, | ||
| 42 | GUI_CP, | ||
| 43 | SFT_OCB, | ||
| 44 | SFT_PLS | ||
| 45 | }; | ||
| 46 | |||
| 47 | int cur_dance (qk_tap_dance_state_t *state); | ||
| 48 | void altop_finished (qk_tap_dance_state_t *state, void *user_data); | ||
| 49 | void altop_reset (qk_tap_dance_state_t *state, void *user_data); | ||
| 50 | void ctlccb_finished (qk_tap_dance_state_t *state, void *user_data); | ||
| 51 | void ctlccb_reset (qk_tap_dance_state_t *state, void *user_data); | ||
| 52 | void guicp_finished (qk_tap_dance_state_t *state, void *user_data); | ||
| 53 | void guicp_reset (qk_tap_dance_state_t *state, void *user_data); | ||
| 54 | void sftocb_finished (qk_tap_dance_state_t *state, void *user_data); | ||
| 55 | void sftocb_reset (qk_tap_dance_state_t *state, void *user_data); | ||
| 56 | void sftpls_finished (qk_tap_dance_state_t *state, void *user_data); | ||
| 57 | void sftpls_reset (qk_tap_dance_state_t *state, void *user_data); | ||
| 58 | |||
| 59 | #define _______ KC_TRNS | ||
| 60 | #define ALT_2 LALT_T(KC_2) | ||
| 61 | #define ALT_3 LALT_T(KC_3) | ||
| 62 | #define ALT_8 LALT_T(KC_8) | ||
| 63 | #define ALT_D LALT_T(KC_D) | ||
| 64 | #define ALT_E LALT_T(KC_E) | ||
| 65 | #define ALT_K LALT_T(KC_K) | ||
| 66 | #define ALT_OB LALT_T(KC_LBRC) | ||
| 67 | #define ALT_S LALT_T(KC_S) | ||
| 68 | #define CTRL_2 LCTL_T(KC_2) | ||
| 69 | #define CTRL_4 LCTL_T(KC_4) | ||
| 70 | #define CTRL_5 LCTL_T(KC_5) | ||
| 71 | #define CTRL_9 LCTL_T(KC_9) | ||
| 72 | #define CTRL_EQ LCTL_T(KC_EQL) | ||
| 73 | #define CTRL_I LCTL_T(KC_I) | ||
| 74 | #define CTRL_L LCTL_T(KC_L) | ||
| 75 | #define CTRL_R LCTL_T(KC_R) | ||
| 76 | #define CTRL_S LCTL_T(KC_S) | ||
| 77 | #define GUI_0 LGUI_T(KC_0) | ||
| 78 | #define GUI_1 LGUI_T(KC_1) | ||
| 79 | #define GUI_4 LGUI_T(KC_4) | ||
| 80 | #define GUI_7 LGUI_T(KC_7) | ||
| 81 | #define GUI_CB LGUI_T(KC_RBRC) | ||
| 82 | #define GUI_F LGUI_T(KC_F) | ||
| 83 | #define GUI_J LGUI_T(KC_J) | ||
| 84 | #define GUI_N LGUI_T(KC_N) | ||
| 85 | #define GUI_TEA LGUI_T(KC_T) | ||
| 86 | #define MAC_EM S(LALT(KC_MINS)) | ||
| 87 | #define MAC_EN LALT(KC_MINS) | ||
| 88 | #define NAV_BK LT(_NAV, KC_BSPC) | ||
| 89 | #define NAV_LK TG(_NAV) | ||
| 90 | #define NUME_SPC LT(_NUM_E, KC_SPC) | ||
| 91 | #define NUMLK_E TG(_NUM_E) | ||
| 92 | #define NUMLK_N TG(_NUM_N) | ||
| 93 | #define NUMN_SPC LT(_NUM_N, KC_SPC) | ||
| 94 | #define SFT_0 LSFT_T(KC_0) | ||
| 95 | #define SFT_1 LSFT_T(KC_1) | ||
| 96 | #define SFT_6 LSFT_T(KC_6) | ||
| 97 | #define SFT_7 LSFT_T(KC_7) | ||
| 98 | #define SFT_A LSFT_T(KC_A) | ||
| 99 | #define SFT_O LSFT_T(KC_O) | ||
| 100 | #define SFT_OS OSM(MOD_LSFT) | ||
| 101 | #define SFT_QOT LSFT_T(KC_QUOT) | ||
| 102 | #define SYM_OS OSL(_SYM) | ||
| 103 | #define SYS_Z LT(_SYS, KC_Z) | ||
| 104 | #define VOL_DN S(LALT(KC__VOLDOWN)) | ||
| 105 | #define VOL_UP S(LALT(KC__VOLUP)) | ||
| 106 | |||
| 107 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
| 108 | |||
| 109 | /* Colemak DHm | ||
| 110 | * | ||
| 111 | * ,----------------------------------. ,----------------------------------. | ||
| 112 | * | Q | W | F | P | B | | J | L | U | Y | ' | | ||
| 113 | * |------+------+------+------+------| |------+------+------+------+------| | ||
| 114 | * | SFT/A| CTL/R| ALT/S| GUI/T| G | | M | GUI/N| ALT/E| CTL/I| SFT/O| | ||
| 115 | * |------+------+------+------+------| |------+------+------+------+------| | ||
| 116 | * | SYS/Z| X | C | D | V | | K | H | , | . | ; | | ||
| 117 | * `----------------------------------' `----------------------------------' | ||
| 118 | * ,--------------------. ,--------------------. | ||
| 119 | * |SFT/OS|NAV/BK| | | |NUM/SP|SFT/OS| | ||
| 120 | * `------+------|SYM/OS| |SYM/OS|------+------' | ||
| 121 | * | | | | | ||
| 122 | * `------' `------' | ||
| 123 | */ | ||
| 124 | [_CMK_DHM] = LAYOUT( \ | ||
| 125 | KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, \ | ||
| 126 | SFT_A, CTRL_R, ALT_S, GUI_TEA, KC_G, KC_M, GUI_N, ALT_E, CTRL_I, SFT_O, \ | ||
| 127 | SYS_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SCLN, \ | ||
| 128 | SFT_OS, NAV_BK, SYM_OS, SYM_OS, NUME_SPC, SFT_OS \ | ||
| 129 | ), | ||
| 130 | |||
| 131 | /* QWERTY | ||
| 132 | * | ||
| 133 | * ,----------------------------------. ,----------------------------------. | ||
| 134 | * | Q | W | E | R | T | | Y | U | I | O | P | | ||
| 135 | * |------+------+------+------+------| |------+------+------+------+------| | ||
| 136 | * | SFT/A| CTL/S| ALT/D| GUI/F| G | | H | GUI/J| ALT/K| CTL/L| SFT/'| | ||
| 137 | * |------+------+------+------+------| |------+------+------+------+------| | ||
| 138 | * | SYS/Z| X | C | V | B | | N | M | , | . | ; | | ||
| 139 | * `----------------------------------' `----------------------------------' | ||
| 140 | * ,--------------------. ,--------------------. | ||
| 141 | * |SFT/OS|NAV/BK| | | |NUM/SP|SFT/OS| | ||
| 142 | * `------+------|SYM/OS| |SYM/OS|------+------' | ||
| 143 | * | | | | | ||
| 144 | * `------' `------' | ||
| 145 | */ | ||
| 146 | [_QWERTY] = LAYOUT( \ | ||
| 147 | KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \ | ||
| 148 | SFT_A, CTRL_S, ALT_D, GUI_F, KC_G, KC_H, GUI_J, ALT_K, CTRL_L, SFT_QOT, \ | ||
| 149 | SYS_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SCLN, \ | ||
| 150 | SFT_OS, NAV_BK, SYM_OS, SYM_OS, NUMN_SPC, SFT_OS \ | ||
| 151 | ), | ||
| 152 | |||
| 153 | /* System, media, and layer lock keys | ||
| 154 | * If you use QWERTY + the Vanilla numbers primarily, change NUMLK_E to NUMLK_N here. | ||
| 155 | * | ||
| 156 | * ,----------------------------------. ,----------------------------------. | ||
| 157 | * | RESET|DEBUG |QWERTY|CMKDHM| | | | VOL--| VOL++| | | | ||
| 158 | * |------+------+------+------+------| |------+------+------+------+------| | ||
| 159 | * | SHIFT| CTRL | ALT | GUI |NAV LK| | POWER| VOL- | VOL+ | MUTE | MPLY | | ||
| 160 | * |------+------+------+------+------| |------+------+------+------+------| | ||
| 161 | * | | |AU OFF| AU ON| | | |NUM LK| MRWD | MFFD | | | ||
| 162 | * `----------------------------------' `----------------------------------' | ||
| 163 | * ,--------------------. ,------,-------------. | ||
| 164 | * | | | | | | | | | ||
| 165 | * `-------------| | | |------+------. | ||
| 166 | * | | | | | ||
| 167 | * `------' `------' | ||
| 168 | */ | ||
| 169 | [_SYS] = LAYOUT( \ | ||
| 170 | RESET, DEBUG, QWERTY, CMK_DHM, _______, _______, KC__VOLDOWN, KC__VOLUP, _______, _______, \ | ||
| 171 | KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, NAV_LK, KC_POWER, VOL_DN, VOL_UP, KC__MUTE, KC_MPLY, \ | ||
| 172 | _______, _______, AU_OFF, AU_ON, _______, _______, NUMLK_E, KC_MRWD, KC_MFFD, _______, \ | ||
| 173 | _______, _______, _______, _______, _______, _______ \ | ||
| 174 | ), | ||
| 175 | |||
| 176 | /* Navigation + mouse keys | ||
| 177 | * | ||
| 178 | * ,----------------------------------. ,----------------------------------. | ||
| 179 | * | PSCR | | WH U | WH D | | | BSPC | PGDN | PGUP | HOME | END | | ||
| 180 | * |------+------+------+------+------| |------+------+------+------+------| | ||
| 181 | * | SHIFT| CTRL | ALT | GUI |NAV LK| | CAPS | LEFT | DOWN | UP | RIGHT| | ||
| 182 | * |------+------+------+------+------| |------+------+------+------+------| | ||
| 183 | * | | ACL0 | ACL1 | ACL2 | BTN2 | | BTN1 | MS L | MS D | MS U | MS R | | ||
| 184 | * `----------------------------------' `----------------------------------' | ||
| 185 | * ,--------------------. ,--------------------. | ||
| 186 | * | | | | | | ENTER| | | ||
| 187 | * `------+------| ESC | | DEL |------+------' | ||
| 188 | * | | | | | ||
| 189 | * `------' `------' | ||
| 190 | */ | ||
| 191 | [_NAV] = LAYOUT( \ | ||
| 192 | KC_PSCR, _______, KC_WH_U, KC_WH_D, _______, KC_BSPC, KC_PGDN, KC_PGUP, KC_HOME, KC_END, \ | ||
| 193 | KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, NAV_LK, KC_CAPS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, \ | ||
| 194 | _______, KC_ACL0, KC_ACL1, KC_ACL2, KC_BTN2, KC_BTN1, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, \ | ||
| 195 | _______, _______, KC_ESC, KC_DEL, KC_ENT, _______ \ | ||
| 196 | ), | ||
| 197 | |||
| 198 | /* Number + function keys (ergonomic number order - default pairing with Colemak) | ||
| 199 | * | ||
| 200 | * ,----------------------------------. ,----------------------------------. | ||
| 201 | * | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | | ||
| 202 | * |------+------+------+------+------| |------+------+------+------+------| | ||
| 203 | * | SFT/7| CTL/5| ALT/3| GUI/1| 9 | | 8 | GUI/0| ALT/2| CTL/4| SFT/6| | ||
| 204 | * |------+------+------+------+------| |------+------+------+------+------| | ||
| 205 | * | | | F11 | F12 | BSPC | | DEL |NUM LK| | | | | ||
| 206 | * `----------------------------------' `----------------------------------' | ||
| 207 | * ,--------------------. ,--------------------. | ||
| 208 | * | | TAB | | | | | | | ||
| 209 | * `------+------| ESC | | |------+------' | ||
| 210 | * | | | | | ||
| 211 | * `------' `------' | ||
| 212 | */ | ||
| 213 | [_NUM_E] = LAYOUT( \ | ||
| 214 | KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, \ | ||
| 215 | SFT_7, CTRL_5, ALT_3, GUI_1, KC_9, KC_8, GUI_0, ALT_2, CTRL_4, SFT_6, \ | ||
| 216 | _______, _______, KC_F11, KC_F12, KC_BSPC, KC_DEL, NUMLK_E, _______, _______, _______, \ | ||
| 217 | _______, KC_TAB, KC_ESC, _______, _______, _______ \ | ||
| 218 | ), | ||
| 219 | |||
| 220 | /* Number + function keys (numeric number order - default pairing with QWERTY) | ||
| 221 | * | ||
| 222 | * ,----------------------------------. ,----------------------------------. | ||
| 223 | * | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | | ||
| 224 | * |------+------+------+------+------| |------+------+------+------+------| | ||
| 225 | * | SFT/1| CTL/2| ALT/3| GUI/4| 5 | | 6 | GUI/7| ALT/8| CTL/9| SFT/0| | ||
| 226 | * |------+------+------+------+------| |------+------+------+------+------| | ||
| 227 | * | | | F11 | F12 | BSPC | | DEL |NUM LK| | | | | ||
| 228 | * `----------------------------------' `----------------------------------' | ||
| 229 | * ,--------------------. ,--------------------. | ||
| 230 | * | | TAB | | | | | | | ||
| 231 | * `------+------| ESC | | |------+------' | ||
| 232 | * | | | | | ||
| 233 | * `------' `------' | ||
| 234 | */ | ||
| 235 | [_NUM_N] = LAYOUT( \ | ||
| 236 | KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, \ | ||
| 237 | SFT_1, CTRL_2, ALT_3, GUI_4, KC_5, KC_6, GUI_7, ALT_8, CTRL_9, SFT_0, \ | ||
| 238 | _______, _______, KC_F11, KC_F12, KC_BSPC, KC_DEL, NUMLK_N, _______, _______, _______, \ | ||
| 239 | _______, KC_TAB, KC_ESC, _______, _______, _______ \ | ||
| 240 | ), | ||
| 241 | |||
| 242 | |||
| 243 | /* Symbols | ||
| 244 | * | ||
| 245 | * ,----------------------------------. ,----------------------------------. | ||
| 246 | * | ! | @ | # | $ | % | | ^ | & | * | ? | ' | | ||
| 247 | * |------+------+------+------+------| |------+------+------+------+------| | ||
| 248 | * | SFT/+| CTL/=| ALT/(| GUI/)| " | | : | GUI/]| ALT/[| CTL/}| SFT/{| | ||
| 249 | * |------+------+------+------+------| |------+------+------+------+------| | ||
| 250 | * | < | | | - | > | \ | | ` | _ | / | ~ | ; | | ||
| 251 | * `----------------------------------' `----------------------------------' | ||
| 252 | * ,--------------------. ,--------------------. | ||
| 253 | * | |ENDASH| | | |EMDASH| | | ||
| 254 | * `------+------| | | |------+------' | ||
| 255 | * | | | | | ||
| 256 | * `------' `------' | ||
| 257 | */ | ||
| 258 | [_SYM] = LAYOUT( \ | ||
| 259 | KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_QUES, KC_QUOT, \ | ||
| 260 | TD(SFT_PLS), CTRL_EQ, TD(ALT_OP), TD(GUI_CP), KC_DQT, KC_COLN, GUI_CB, ALT_OB, TD(CTL_CCB), TD(SFT_OCB), \ | ||
| 261 | KC_LT, KC_PIPE, KC_MINS, KC_GT, KC_BSLS, KC_GRV, KC_UNDS, KC_SLSH, KC_TILD, KC_SCLN, \ | ||
| 262 | _______, MAC_EN, _______, _______, MAC_EM, _______ \ | ||
| 263 | ) | ||
| 264 | |||
| 265 | }; | ||
| 266 | |||
| 267 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||
| 268 | switch (keycode) { | ||
| 269 | case CMK_DHM: | ||
| 270 | if (record->event.pressed) { | ||
| 271 | set_single_persistent_default_layer(_CMK_DHM); | ||
| 272 | } | ||
| 273 | return false; | ||
| 274 | case QWERTY: | ||
| 275 | if (record->event.pressed) { | ||
| 276 | set_single_persistent_default_layer(_QWERTY); | ||
| 277 | } | ||
| 278 | return false; | ||
| 279 | default: | ||
| 280 | return true; | ||
| 281 | } | ||
| 282 | }; | ||
| 283 | |||
| 284 | int cur_dance (qk_tap_dance_state_t *state) { | ||
| 285 | if (state->count == 1) { | ||
| 286 | if (state->interrupted || !state->pressed) return SINGLE_TAP; | ||
| 287 | else return SINGLE_HOLD; | ||
| 288 | } | ||
| 289 | if (state->count == 2) return DOUBLE_SINGLE_TAP; | ||
| 290 | else return 8; | ||
| 291 | } | ||
| 292 | |||
| 293 | static tap altop_tap_state = { | ||
| 294 | .is_press_action = true, | ||
| 295 | .state = 0 | ||
| 296 | }; | ||
| 297 | |||
| 298 | void altop_finished (qk_tap_dance_state_t *state, void *user_data) { | ||
| 299 | altop_tap_state.state = cur_dance(state); | ||
| 300 | switch (altop_tap_state.state) { | ||
| 301 | case SINGLE_TAP: | ||
| 302 | register_mods(MOD_BIT(KC_LSFT)); | ||
| 303 | register_code(KC_9); | ||
| 304 | break; | ||
| 305 | case SINGLE_HOLD: | ||
| 306 | register_mods(MOD_BIT(KC_LALT)); | ||
| 307 | break; | ||
| 308 | case DOUBLE_SINGLE_TAP: | ||
| 309 | register_mods(MOD_BIT(KC_LSFT)); | ||
| 310 | tap_code(KC_9); | ||
| 311 | register_code(KC_9); | ||
| 312 | } | ||
| 313 | } | ||
| 314 | |||
| 315 | void altop_reset (qk_tap_dance_state_t *state, void *user_data) { | ||
| 316 | switch (altop_tap_state.state) { | ||
| 317 | case SINGLE_TAP: | ||
| 318 | unregister_code(KC_9); | ||
| 319 | unregister_mods(MOD_BIT(KC_LSFT)); | ||
| 320 | break; | ||
| 321 | case SINGLE_HOLD: | ||
| 322 | unregister_mods(MOD_BIT(KC_LALT)); | ||
| 323 | break; | ||
| 324 | case DOUBLE_SINGLE_TAP: | ||
| 325 | unregister_code(KC_9); | ||
| 326 | unregister_mods(MOD_BIT(KC_LSFT)); | ||
| 327 | } | ||
| 328 | altop_tap_state.state = 0; | ||
| 329 | } | ||
| 330 | |||
| 331 | static tap ctlccb_tap_state = { | ||
| 332 | .is_press_action = true, | ||
| 333 | .state = 0 | ||
| 334 | }; | ||
| 335 | |||
| 336 | void ctlccb_finished (qk_tap_dance_state_t *state, void *user_data) { | ||
| 337 | ctlccb_tap_state.state = cur_dance(state); | ||
| 338 | switch (ctlccb_tap_state.state) { | ||
| 339 | case SINGLE_TAP: | ||
| 340 | register_mods(MOD_BIT(KC_LSFT)); | ||
| 341 | register_code(KC_RBRC); | ||
| 342 | break; | ||
| 343 | case SINGLE_HOLD: | ||
| 344 | register_mods(MOD_BIT(KC_LCTL)); | ||
| 345 | break; | ||
| 346 | case DOUBLE_SINGLE_TAP: | ||
| 347 | register_mods(MOD_BIT(KC_LSFT)); | ||
| 348 | tap_code(KC_RBRC); | ||
| 349 | register_code(KC_RBRC); | ||
| 350 | } | ||
| 351 | } | ||
| 352 | |||
| 353 | void ctlccb_reset (qk_tap_dance_state_t *state, void *user_data) { | ||
| 354 | switch (ctlccb_tap_state.state) { | ||
| 355 | case SINGLE_TAP: | ||
| 356 | unregister_code(KC_RBRC); | ||
| 357 | unregister_mods(MOD_BIT(KC_LSFT)); | ||
| 358 | break; | ||
| 359 | case SINGLE_HOLD: | ||
| 360 | unregister_mods(MOD_BIT(KC_LCTL)); | ||
| 361 | break; | ||
| 362 | case DOUBLE_SINGLE_TAP: | ||
| 363 | unregister_code(KC_RBRC); | ||
| 364 | unregister_mods(MOD_BIT(KC_LSFT)); | ||
| 365 | } | ||
| 366 | ctlccb_tap_state.state = 0; | ||
| 367 | } | ||
| 368 | |||
| 369 | static tap guicp_tap_state = { | ||
| 370 | .is_press_action = true, | ||
| 371 | .state = 0 | ||
| 372 | }; | ||
| 373 | |||
| 374 | void guicp_finished (qk_tap_dance_state_t *state, void *user_data) { | ||
| 375 | guicp_tap_state.state = cur_dance(state); | ||
| 376 | switch (guicp_tap_state.state) { | ||
| 377 | case SINGLE_TAP: | ||
| 378 | register_mods(MOD_BIT(KC_LSFT)); | ||
| 379 | register_code(KC_0); | ||
| 380 | break; | ||
| 381 | case SINGLE_HOLD: | ||
| 382 | register_mods(MOD_BIT(KC_LGUI)); | ||
| 383 | break; | ||
| 384 | case DOUBLE_SINGLE_TAP: | ||
| 385 | register_mods(MOD_BIT(KC_LSFT)); | ||
| 386 | tap_code(KC_0); | ||
| 387 | register_code(KC_0); | ||
| 388 | } | ||
| 389 | } | ||
| 390 | |||
| 391 | void guicp_reset (qk_tap_dance_state_t *state, void *user_data) { | ||
| 392 | switch (guicp_tap_state.state) { | ||
| 393 | case SINGLE_TAP: | ||
| 394 | unregister_code(KC_0); | ||
| 395 | unregister_mods(MOD_BIT(KC_LSFT)); | ||
| 396 | break; | ||
| 397 | case SINGLE_HOLD: | ||
| 398 | unregister_mods(MOD_BIT(KC_LGUI)); | ||
| 399 | break; | ||
| 400 | case DOUBLE_SINGLE_TAP: | ||
| 401 | unregister_code(KC_0); | ||
| 402 | unregister_mods(MOD_BIT(KC_LSFT)); | ||
| 403 | } | ||
| 404 | guicp_tap_state.state = 0; | ||
| 405 | } | ||
| 406 | |||
| 407 | static tap sftocb_tap_state = { | ||
| 408 | .is_press_action = true, | ||
| 409 | .state = 0 | ||
| 410 | }; | ||
| 411 | |||
| 412 | void sftocb_finished (qk_tap_dance_state_t *state, void *user_data) { | ||
| 413 | sftocb_tap_state.state = cur_dance(state); | ||
| 414 | switch (sftocb_tap_state.state) { | ||
| 415 | case SINGLE_TAP: | ||
| 416 | register_mods(MOD_BIT(KC_LSFT)); | ||
| 417 | register_code(KC_LBRC); | ||
| 418 | break; | ||
| 419 | case SINGLE_HOLD: | ||
| 420 | register_mods(MOD_BIT(KC_LSFT)); | ||
| 421 | break; | ||
| 422 | case DOUBLE_SINGLE_TAP: | ||
| 423 | register_mods(MOD_BIT(KC_LSFT)); | ||
| 424 | tap_code(KC_LBRC); | ||
| 425 | register_code(KC_LBRC); | ||
| 426 | } | ||
| 427 | } | ||
| 428 | |||
| 429 | void sftocb_reset (qk_tap_dance_state_t *state, void *user_data) { | ||
| 430 | switch (sftocb_tap_state.state) { | ||
| 431 | case SINGLE_TAP: | ||
| 432 | unregister_code(KC_LBRC); | ||
| 433 | unregister_mods(MOD_BIT(KC_LSFT)); | ||
| 434 | break; | ||
| 435 | case SINGLE_HOLD: | ||
| 436 | unregister_mods(MOD_BIT(KC_LSFT)); | ||
| 437 | break; | ||
| 438 | case DOUBLE_SINGLE_TAP: | ||
| 439 | unregister_code(KC_LBRC); | ||
| 440 | unregister_mods(MOD_BIT(KC_LSFT)); | ||
| 441 | } | ||
| 442 | sftocb_tap_state.state = 0; | ||
| 443 | } | ||
| 444 | |||
| 445 | static tap sftpls_tap_state = { | ||
| 446 | .is_press_action = true, | ||
| 447 | .state = 0 | ||
| 448 | }; | ||
| 449 | |||
| 450 | void sftpls_finished (qk_tap_dance_state_t *state, void *user_data) { | ||
| 451 | sftpls_tap_state.state = cur_dance(state); | ||
| 452 | switch (sftpls_tap_state.state) { | ||
| 453 | case SINGLE_TAP: | ||
| 454 | register_mods(MOD_BIT(KC_LSFT)); | ||
| 455 | register_code(KC_EQL); | ||
| 456 | break; | ||
| 457 | case SINGLE_HOLD: | ||
| 458 | register_mods(MOD_BIT(KC_LSFT)); | ||
| 459 | break; | ||
| 460 | case DOUBLE_SINGLE_TAP: | ||
| 461 | register_mods(MOD_BIT(KC_LSFT)); | ||
| 462 | tap_code(KC_EQL); | ||
| 463 | register_code(KC_EQL); | ||
| 464 | } | ||
| 465 | } | ||
| 466 | |||
| 467 | void sftpls_reset (qk_tap_dance_state_t *state, void *user_data) { | ||
| 468 | switch (sftpls_tap_state.state) { | ||
| 469 | case SINGLE_TAP: | ||
| 470 | unregister_code(KC_EQL); | ||
| 471 | unregister_mods(MOD_BIT(KC_LSFT)); | ||
| 472 | break; | ||
| 473 | case SINGLE_HOLD: | ||
| 474 | unregister_mods(MOD_BIT(KC_LSFT)); | ||
| 475 | break; | ||
| 476 | case DOUBLE_SINGLE_TAP: | ||
| 477 | unregister_code(KC_EQL); | ||
| 478 | unregister_mods(MOD_BIT(KC_LSFT)); | ||
| 479 | } | ||
| 480 | sftpls_tap_state.state = 0; | ||
| 481 | } | ||
| 482 | |||
| 483 | qk_tap_dance_action_t tap_dance_actions[] = { | ||
| 484 | [ALT_OP] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altop_finished, altop_reset), | ||
| 485 | [CTL_CCB] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctlccb_finished, ctlccb_reset), | ||
| 486 | [GUI_CP] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, guicp_finished, guicp_reset), | ||
| 487 | [SFT_OCB] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, sftocb_finished, sftocb_reset), | ||
| 488 | [SFT_PLS] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, sftpls_finished, sftpls_reset) | ||
| 489 | }; | ||
diff --git a/keyboards/minidox/keymaps/dustypomerleau/rules.mk b/keyboards/minidox/keymaps/dustypomerleau/rules.mk new file mode 100644 index 000000000..5ed4c5446 --- /dev/null +++ b/keyboards/minidox/keymaps/dustypomerleau/rules.mk | |||
| @@ -0,0 +1,4 @@ | |||
| 1 | # dustypomerleau, Minidox rules | ||
| 2 | |||
| 3 | MOUSEKEY_ENABLE = yes | ||
| 4 | TAP_DANCE_ENABLE = yes | ||
