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 | ||