aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Jerrell <jacob.jerrell@gmail.com>2018-08-28 18:48:41 -0500
committerDrashna Jaelre <drashna@live.com>2018-08-28 16:48:41 -0700
commit444def8411d6ac67203c14ec92f8e33d77330895 (patch)
treea1edcf1984b5653c2e9f0b79a88ce289fc7cbdb3
parentfdd0f915271f79b104aa5d216566bcc3fd134e85 (diff)
downloadqmk_firmware-444def8411d6ac67203c14ec92f8e33d77330895.tar.gz
qmk_firmware-444def8411d6ac67203c14ec92f8e33d77330895.zip
Keymap: Bocaj - Create Userspace and Ergodox Layout (#3750)
* Bocaj Layout Revamp * Pull in Upstream (#1) * Various tweaks for some Input:Club build processes * change KEYMAP to LAYOUT for all new keyboards made using this script * Add support for rev3 of the Atom47 (#2672) * Added support for rev3 of the Atom47 * Updated Atom47 readme's * Fix redefine error on rev2 and add maartenwut's keymap * Fix redefine error on LEdiodes keymap * Add Nyquist keymap (#2692) * nyquist * danielhklein nyquist setup * shift left controls * remove readme * cleanup before pr * ready for pr * Adds Phantom TKL support (#2696) * Add an info.json to phantom keyboard * Add layouts - KEYMAP_WINKEYLESS - KEYMAP_7BIT - KEYMAP_ISO - KEYMAP_ISO_WINKEYLESS * Add key_counts * Add 2 missing F-Row keys * Add TKC1800 info.json Created an info.json for the tkc1800. * Clueboard 60 info.json - adds - LAYOUT_60_ansi - LAYOUT_60_iso - KEYMAP_AEK - KEYMAP - LAYOUT_60_ansi_split_bs_rshift * Add the Speedo keyboard * Fix KC60 info.json file (#2707) * change KEYMAP to LAYOUT in all the KC60 files * Redo the info.json file * Small fixes to TKC1800 - adjust F-row to use 0.25 spacing - split left shift - add key_count * Fix some Configurator Warnings regarding LAYOUT vs KEYMAP (#2708) * change diverge 3 KC_KEYMAP to LAYOUT * Change KEYMAP to LAYOUT for handwired arrow pad * change M10A to LAYOUT for m10-a * Change KC_KEYMAP to LAYOUT_kc and KEYMAP to LAYOUT for mf68 * change KC_KEYMAP to LAYOUT for nano * Refactor to LAYOUT * refactor to LAYOUT-ansi and LAYOUT_iso for s65 * LAYOUT conversions for lfkkeyboards * missed a few renames * mini1800 for lfkeyobards support of LAYOUT * Improve state/chord handling and clean up namespace Some values that can never, ever, change were held in local variables, rather than in PROGMEM. Fixed. Change "pressed" to a signed int so the test for < 0 makes sense, and to avoid possible weird failure modes in the case where a key release comes in when pressed is already zero. (Shouldn't happen, sure, but computers are weird.) A lot of things in process_steno had external linkage for no particular reason. They've been marked static. Stuff still builds. Distinguish between currently-held keys and keys that have been held, and expose these values through a nicely-named API so other code could, say, check on the current set of steno chording in order to make displays. Also in passing fix up the "state" value having external linkage so it could clash with other people's variable declarations. The API also provides hooks for key processing and steno chord events, so you can monitor those events without having to run in matrix_scan_user and recheck the values directly. Also document these. There is no path through processing a key that doesn't end with a return false, so the nested return foo() are gone and we just return false. * Pull information from config.h and rules.mk (#2711) * Pull information from config.h and rules.mk * Readd the kbd75 maintainer * Remove obsolete info.json entries (#2712) * Clean up some long-standing errors when populating the API (#2715) * More Configurator Warning Fixes (#2716) * mf68_ble did not have the correct .c and .h files * Fix JC65 KEYMAP to LAYOUT * Change KEYMAP to LAYOUT for s60_x * Convert KEYMAP to LAYOUT for lets_split boards * Convert KEYMAP to LAYOUT * more fixes to keymap for iris * convert KEYMAP to LAYOUT for levinson keyboard * change losinggeneration's KEYMAP to LAYOUT * convert KEYMAP to LAYOUT * convert KEYMAP to LAYOUT for nyquist * convert KEYMAP to LAYOUT * convert KEYMAP to LAYOUT for viterbi * convert KEYMAP to LAYOUT * convert KEYMAP and its subsidiries to the LAYOUT standard * convert KEYMAP and its subsidiries to the new LAYOUT standard * Normacos keymap for let's split keyboard (#2691) * Cheers let's split keymap * fixed typo on norman layer of cheers keymap for let's split * fixed right handed mappings for home row * cheers keymap for let's split redefinition * updated Cheers keymap for let's split * cheers keymap for let's split updated with some terminal macros * renamed cheers let's split keymap to a more appropriate normacos * updated normacos keymap doc / removed non functional keys * reset let's split rules to default values * added more spotlight search macros * normalized keymap comments * Moved numpad on lower layer * hhkb jp personal keymap (#2698) * Add JJ40 Cockpit personal keymap (#2713) * Add JJ40 Cockpit keymap * Fix lower layer symbols * Add readme for "major" keyboards to eliminate more QMK Configurator errors (#2718) * add readme to ktype keyboard * add readme to m10a * add readme to mini1800 * add readme to parent directory * Revert "Pull in Upstream (#1)" This reverts commit eeba0cec17ccb636e4225eed88aeae72b99f5e45. * Updates to Bocaj Files - Gave up on Tap Dance for ' -> ' + Added another 'Secret' + Add ' -> ' to the Swap Hands key + Add Swap Hands to the ' -> ' key + Made Hand Swapping a momentary toggle - Removed Auto Shift + Added Layer Toggle to KC_QUOTE for the _TOOLS layer - Disabled Tap Dance * Merge remote-tracking branch 'upstream/master' * Updates to Bocaj Added Game Layers, Removed Unused Macros * Removed 'secrets.h' * Updates to Bocaj Remove 'secrets'. Remove 'sendstring_workman.h' and set related layer back to qwerty due to macro compatibility issues * Total revisioning of keymap and layout structure * Missed readme.md file * Bocaj - Permissive Hold setting enabled * Switching from ErgoDox EZ centric configuration to the layout/user approach * Bocaj - Create Userspace and Ergodox layout * Update settings.json
-rw-r--r--keyboards/ergodox_ez/keymaps/bocaj/config.h21
-rw-r--r--keyboards/ergodox_ez/keymaps/bocaj/keymap.c340
-rw-r--r--keyboards/ergodox_ez/keymaps/bocaj/readme.md48
-rw-r--r--layouts/community/ergodox/bocaj/config.h6
-rw-r--r--layouts/community/ergodox/bocaj/keymap.c246
-rw-r--r--layouts/community/ergodox/bocaj/rules.mk (renamed from keyboards/ergodox_ez/keymaps/bocaj/rules.mk)1
-rw-r--r--users/bocaj/bocaj.c177
-rw-r--r--users/bocaj/bocaj.h (renamed from keyboards/ergodox_ez/keymaps/bocaj/bocaj.h)119
-rw-r--r--users/bocaj/config.h33
-rw-r--r--users/bocaj/readme.md14
-rw-r--r--users/bocaj/rules.mk5
-rw-r--r--users/bocaj/tap_dances.c65
-rw-r--r--users/bocaj/tap_dances.h7
13 files changed, 611 insertions, 471 deletions
diff --git a/keyboards/ergodox_ez/keymaps/bocaj/config.h b/keyboards/ergodox_ez/keymaps/bocaj/config.h
deleted file mode 100644
index 59605bc25..000000000
--- a/keyboards/ergodox_ez/keymaps/bocaj/config.h
+++ /dev/null
@@ -1,21 +0,0 @@
1#ifndef USERSPACE_CONFIG_H
2 #define USERSPACE_CONFIG_H
3
4 #ifndef QMK_KEYS_PER_SCAN
5 #define QMK_KEYS_PER_SCAN 4
6 #endif // QMK KEYS PER SCAN
7
8 // this makes it possible to do rolling combos (zx) with keys that
9 // convert to other keys on hold (z becomes ctrl when you hold it,
10 // and when this option isn't enabled, z rapidly followed by x
11 // actually sends Ctrl-x. That's bad.)
12 #define IGNORE_MOD_TAP_INTERRUPT
13 #define PERMISSIVE_HOLD
14 #undef PREVENT_STUCK_MODIFIERS
15
16 // Disable action_get_macro and fn_actions, since we don't use these
17 // and it saves on space in the firmware.
18 #define NO_ACTION_MACRO
19 #define NO_ACTION_FUNCTION
20
21#endif // !USERSPACE_CONFIG_H
diff --git a/keyboards/ergodox_ez/keymaps/bocaj/keymap.c b/keyboards/ergodox_ez/keymaps/bocaj/keymap.c
deleted file mode 100644
index 07117f116..000000000
--- a/keyboards/ergodox_ez/keymaps/bocaj/keymap.c
+++ /dev/null
@@ -1,340 +0,0 @@
1/*
2Copyright 2018 Jacob Jerrell <jacob.jerrell@gmail.com>
3This program is free software: you can redistribute it and/or modify
4it under the terms of the GNU General Public License as published by
5the Free Software Foundation, either version 2 of the License, or
6(at your option) any later version.
7This program is distributed in the hope that it will be useful,
8but WITHOUT ANY WARRANTY; without even the implied warranty of
9MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10GNU General Public License for more details.
11You should have received a copy of the GNU General Public License
12along with this program. If not, see <http://www.gnu.org/licenses/>.
13*/
14#include QMK_KEYBOARD_H
15#include "bocaj.h"
16
17#ifdef UNICODEMAP_ENABLE
18#include "bocaj_unicode.h"
19#endif // UNICODEMAP_ENABLE
20
21const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
22/* Software Workman / QWERTY - http://www.keyboard-layout-editor.com/#/gists/b6c016a22a9d31381a276a603a42fe5f
23 .---------------------------------------------. .---------------------------------------------.
24 | ESC | 1 | 2 | 3 | 4 | 5 | -> | ! - | 6 | 7 | 8 | 9 | 0 | = |
25 !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
26 | DEL | Q | W | E | R | T | ( | ! ) | Y | U | I | O | P | \ |
27 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
28 | ADJST | A | S | D | F | G |-------! !-------! H | J | K | L | ; | ' |
29 !-------+-----+-----+-----x-----x-----! HYP ! ! MEH !-----x-----x-----+-----+-----+-------!
30 | SHIFT | Z | X | C | V | B | { | ! } | N | M | , | . | / | SHIFT |
31 '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
32 | GAME | NUM | VRS | UP | LFT | .---------------. .---------------. ! RGT | DWN | RSE | LWR | ADJ |
33 '------------------------------' | APP | HOME | ! PGUP | ESC | '------------------------------'
34 .-------+-------+-------! !-------+-------+-------.
35 ! SPACE ! | END | ! PGDN | ! ENTER !
36 ! / ! BSPCE !-------! !-------! TAB ! / !
37 | LOWER | | COPY | ! PASTE | | RAISE |
38 '-----------------------' '-----------------------'
39*/
40 [_SWRKMN] = LAYOUT_ergodox_pretty_wrapper(
41 KC_ESC, ______________________NUMBER_LEFT________________________, JJ_ARRW, KC_MINUS, ______________________NUMBER_RIGHT_______________________, KC_EQUAL,
42 KC_DEL, _______________________SWORKMAN_L1_______________________, KC_LPRN, KC_RPRN, _______________________SWORKMAN_R1_______________________, KC_BSLS,
43 KC_ADJS,_______________________SWORKMAN_L2_______________________, _______________________SWORKMAN_R2_______________________, KC_QUOTE,
44 KC_LSFT,_______________________SWORKMAN_L3_______________________, HYP_LBK, MEH_RBK, _______________________SWORKMAN_R3_______________________, KC_RSFT,
45 ___________________ERGODOX_BOTTOM_LEFT___________________, ___________________ERGODOX_BOTTOM_RIGHT__________________,
46 ______________________ERGODOX_THUMBS_____________________
47 ),
48/* Hardware Workman - http://www.keyboard-layout-editor.com/#/gists/7a07cb982ec3597ba3e3d947554225f1
49 .---------------------------------------------. .---------------------------------------------.
50 | ESC | 1 | 2 | 3 | 4 | 5 | -> | ! - | 6 | 7 | 8 | 9 | 0 | = |
51 !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
52 | DEL | Q | D | R | W | B | ( | ! ) | J | F | U | P | ; | \ |
53 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
54 | ADJST | A | S | H | T | G |-------! !-------! Y | N | E | O | I | ' |
55 !-------+-----+-----+-----x-----x-----! HYP ! ! MEH !-----x-----x-----+-----+-----+-------!
56 | SHIFT | Z | X | M | C | V | { | ! } | K | L | , | . | / | SHIFT |
57 '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
58 | GAME | NUM | VRS | UP | LFT | .---------------. .---------------. ! RGT | DWN | RSE | LWR | ADJ |
59 '------------------------------' | APP | HOME | ! PGUP | ESC | '------------------------------'
60 .-------+-------+-------! !-------+-------+-------.
61 ! SPACE ! | END | ! PGDN | ! ENTER !
62 ! / ! BSPCE !-------! !-------! TAB ! / !
63 | LOWER | | COPY | ! PASTE | | RAISE |
64 '-----------------------' '-----------------------'
65*/
66 [_HWRKMN] = LAYOUT_ergodox_pretty_wrapper(
67 KC_ESC, ______________________NUMBER_LEFT________________________, JJ_ARRW, KC_MINUS, ______________________NUMBER_RIGHT_______________________, KC_EQUAL,
68 KC_DEL, _______________________HWORKMAN_L1_______________________, KC_LPRN, KC_RPRN, _______________________HWORKMAN_R1_______________________, KC_BSLS,
69 KC_ADJS,_______________________HWORKMAN_L2_______________________, _______________________HWORKMAN_R2_______________________, KC_QUOTE,
70 KC_LSFT,_______________________HWORKMAN_L3_______________________, HYP_LBK, MEH_RBK, _______________________HWORKMAN_R3_______________________, KC_RSFT,
71 ___________________ERGODOX_BOTTOM_LEFT___________________, ___________________ERGODOX_BOTTOM_RIGHT__________________,
72 ______________________ERGODOX_THUMBS_____________________
73 ),
74/* Lower - http://www.keyboard-layout-editor.com/#/gists/f1d745a88d1c48ab55e095efd9e7a43a
75 .---------------------------------------------. .---------------------------------------------.
76 | | F1 | F2 | F3 | F4 | F5 | | ! | F6 | F7 | F8 | F9 | F10 | |
77 !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
78 | ` | 1 | 2 | 3 | 4 | 5 | | ! | 6 | 7 | 8 | 9 | 0 | |
79 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
80 | | | | | | |-------! !-------! | | | | | |
81 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
82 | | | | | | | | ! | | | | | | |
83 '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
84 | | | | | | .---------------. .---------------. ! | | | | |
85 '------------------------------' | | | ! | | '------------------------------'
86 .-------+-------+-------! !-------+-------+-------.
87 ! ! | | ! | ! !
88 ! ! !-------! !-------! ! !
89 | | | | ! | | |
90 '-----------------------' '-----------------------'
91*/
92 [_LOWER] = LAYOUT_ergodox_pretty_wrapper(
93 _______,_______________________FUNC_LEFT_________________________, _______, _______, _______________________FUNC_RIGHT________________________, _______,
94 KC_GRV ,______________________NUMBER_LEFT________________________, _______, _______, ______________________NUMBER_RIGHT_______________________, _______,
95 _______,_________________________________________________________, _________________________________________________________, _______,
96 _______,_________________________________________________________, _______, _______, _________________________________________________________, _______,
97 _________________________________________________________, _________________________________________________________,
98 ______________________ERGODOX_THUMBS_____________________
99 ),
100/* Raise - http://www.keyboard-layout-editor.com/#/gists/e0f591ec2ce9f24675a02d15c7048b25
101 .---------------------------------------------. .---------------------------------------------.
102 | | F1 | F2 | F3 | F4 | F5 | | ! _ | F6 | F7 | F8 | F9 | F10 | |
103 !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
104 | ~ | ! | @ | # | $ | % | | ! | ^ | & | * | ( | ) | |
105 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
106 | | | | | | |-------! !-------! | | | | | |
107 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
108 | | | | | | | | ! | | | | | | |
109 '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
110 | | | | | | .---------------. .---------------. ! | | | | |
111 '------------------------------' | | | ! | | '------------------------------'
112 .-------+-------+-------! !-------+-------+-------.
113 ! ! | | ! | ! !
114 ! ! !-------! !-------! ! !
115 | | | | ! | | |
116 '-----------------------' '-----------------------'
117*/
118 [_RAISE] = LAYOUT_ergodox_pretty_wrapper(
119 _______,_______________________FUNC_LEFT_________________________, _______, KC_UNDS, _______________________FUNC_RIGHT________________________, _______,
120 KC_TILD,______________________SPECIAL_LEFT_______________________, _______, _______, ______________________SPECIAL_RIGHT______________________, _______,
121 _______,_________________________________________________________, _________________________________________________________, _______,
122 _______,_________________________________________________________, _______, _______, _________________________________________________________, _______,
123 _________________________________________________________, _________________________________________________________,
124 ______________________ERGODOX_THUMBS_____________________
125 ),
126 /* Adjust - http://www.keyboard-layout-editor.com/#/gists/dedeae17b35a5d5f745a42aaea78f007
127 .---------------------------------------------. .---------------------------------------------.
128 | | | | | | | EPRM | ! EPRM | | | | | | |
129 !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
130 | | | | | | | | ! | | 7 | 8 | 9 | * | |
131 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
132 | | 🔇 | 🔉 | 🔊 | LCK | |-------! !-------! | 4 | 5 | 6 | + | SWRKM |
133 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
134 | | | | | | | | ! | | 1 | 2 | 3 | - | HWRKM |
135 '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
136 | | | | | | .---------------. .---------------. ! 0 | . | , | = | |
137 '------------------------------' | | | ! | | '------------------------------'
138 .-------+-------+-------! !-------+-------+-------.
139 ! ! | | ! | ! !
140 ! ! !-------! !-------! ! !
141 | | | | ! | | |
142 '-----------------------' '-----------------------'
143*/
144 [_ADJUST] = LAYOUT_ergodox_pretty_wrapper(
145 XXXXXXX,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, KC_EPRM, KC_EPRM, XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX,
146 XXXXXXX,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_PAST, XXXXXXX,
147 _______,KC__MUTE, KC__VOLDOWN, KC__VOLUP, MC_LOCK, XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_SWRK,
148 XXXXXXX,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PMNS, KC_HWRK,
149 XXXXXXX,_______,XXXXXXX,XXXXXXX,XXXXXXX, KC_KP_0, KC_PDOT, KC_COMM, KC_PEQL, _______,
150 ______________________ERGODOX_THUMBS_____________________
151 ),
152// Diablo - http://www.keyboard-layout-editor.com/#/gists/28476e4237e77d4835ac8a9d7e5f9b2c
153 [_DIABLO] = LAYOUT_ergodox_pretty_wrapper(
154 KC_ESC , KC_V , KC_D ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
155 KC_TAB , KC_S , KC_I , KC_F , KC_T , KC_J ,XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, XXXXXXX, XXXXXXX,
156 KC_Q , KC_1 , KC_2 , KC_3 , KC_4 , KC_M , XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, XXXXXXX, XXXXXXX,
157 KC_LSFT,KC_D3_1 ,KC_D3_2 ,KC_D3_3 ,KC_D3_4 ,XXXXXXX ,XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, XXXXXXX, XXXXXXX,
158 _______,ALT_T(KC_Z) ,KC_G ,KC_Y ,XXXXXXX , KC_KP_0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
159 XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,
160 XXXXXXX, XXXXXXX,
161 KC_BTN1,KC_BTN2,KC_DIABLO_CLEAR, XXXXXXX,XXXXXXX,XXXXXXX
162 )
163};
164
165// Defines actions for my custom keycodes
166bool process_record_user(uint16_t keycode, keyrecord_t *record) {
167 switch (keycode) {
168 // KC_COPY and KC_PASTE have problems with different hardware/software mappings
169 // e.g. If the mappings conflict, KC_COPY will send Cmd+M which minimizes the
170 // window and is very annoying. JJ_COPY and JJ_PASTE fix this by sending the
171 // raw character rather than the KC_* code
172 case JJ_COPY:
173 if (!record->event.pressed) {
174 SEND_STRING(SS_LGUI("c"));
175 }
176 return false;
177 break;
178 case JJ_PASTE:
179 if (!record->event.pressed) {
180 SEND_STRING(SS_LGUI("v"));
181 }
182 return false;
183 break;
184 case JJ_ARRW:
185 if (!record->event.pressed) {
186 SEND_STRING("->");
187 }
188 return false;
189 break;
190 case KC_SWRK:
191 if (!record->event.pressed) {
192 set_single_persistent_default_layer(_SWRKMN);
193 layer_move(_SWRKMN);
194 ergodox_blink_all_leds();
195 ergodox_blink_all_leds();
196 }
197 return false;
198 break;
199 case KC_HWRK:
200 if (!record->event.pressed) {
201 set_single_persistent_default_layer(_HWRKMN);
202 layer_move(_HWRKMN);
203 ergodox_blink_all_leds();
204 ergodox_blink_all_leds();
205 }
206 return false;
207 break;
208 case KC_EPRM:
209 if (!record->event.pressed) {
210 ergodox_blink_all_leds();
211 eeconfig_init();
212 }
213 return false;
214 break;
215 case MC_LOCK:
216 if (!record->event.pressed) {
217 layer_move(_HWRKMN);
218 SEND_STRING(SS_LCTRL(SS_LGUI("q")));
219 }
220 return false;
221 break;
222 case KC_DIABLO_CLEAR:
223#ifdef TAP_DANCE_ENABLE
224 if (record->event.pressed) {
225 uint8_t dtime;
226 for (dtime = 0; dtime < 4; dtime++) {
227 diablo_key_time[dtime] = diablo_times[0];
228 }
229 }
230#endif // TAP_DANCE_ENABLE
231 return false;
232 break;
233 }
234 return true;
235}
236
237void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); };
238
239// Diablo III Fun stuff
240//define diablo macro timer variables
241uint16_t diablo_timer[4];
242uint8_t diablo_times[] = { 0, 1, 3, 5, 10, 30 };
243uint8_t diablo_key_time[4];
244
245// has the correct number of seconds elapsed (as defined by diablo_times)
246bool check_dtimer(uint8_t dtimer) { return (timer_elapsed(diablo_timer[dtimer]) < (diablo_key_time[dtimer] * 1000)) ? false : true; };
247
248// Cycle through the times for the macro, starting at 0, for disabled.
249// Max of six values, so don't exceed
250void diablo_tapdance_master(qk_tap_dance_state_t *state, void *user_data, uint8_t diablo_key) {
251 if (state->count >= 7) {
252 diablo_key_time[diablo_key] = diablo_times[0];
253 reset_tap_dance(state);
254 } else {
255 diablo_key_time[diablo_key] = diablo_times[state->count - 1];
256 }
257}
258
259// Would rather have one function for all of this, but no idea how to do that...
260void diablo_tapdance1(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 0); }
261void diablo_tapdance2(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 1); }
262void diablo_tapdance3(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 2); }
263void diablo_tapdance4(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 3); }
264
265//Tap Dance Definitions
266qk_tap_dance_action_t tap_dance_actions[] = {
267 // tap once to disable, and more to enable timed micros
268 [TD_D3_1] = ACTION_TAP_DANCE_FN(diablo_tapdance1),
269 [TD_D3_2] = ACTION_TAP_DANCE_FN(diablo_tapdance2),
270 [TD_D3_3] = ACTION_TAP_DANCE_FN(diablo_tapdance3),
271 [TD_D3_4] = ACTION_TAP_DANCE_FN(diablo_tapdance4),
272};
273
274// Sends the key press to system, but only if on the Diablo layer
275void send_diablo_keystroke(uint8_t diablo_key) {
276 if (biton32(layer_state) == _DIABLO) {
277 switch (diablo_key) {
278 case 0:
279 tap(KC_1); break;
280 case 1:
281 tap(KC_2); break;
282 case 2:
283 tap(KC_3); break;
284 case 3:
285 tap(KC_4); break;
286 }
287 }
288}
289
290// Checks each of the 4 timers/keys to see if enough time has elapsed
291// Runs the "send string" command if enough time has passed, and resets the timer.
292void run_diablo_macro_check(void) {
293 uint8_t dtime;
294 for (dtime = 0; dtime < 4; dtime++) {
295 if (check_dtimer(dtime) && diablo_key_time[dtime]) {
296 diablo_timer[dtime] = timer_read();
297 send_diablo_keystroke(dtime);
298 }
299 }
300}
301
302void matrix_scan_user(void) {
303 uint8_t layer = biton32(layer_state);
304 ergodox_board_led_off();
305 ergodox_right_led_1_off();
306 ergodox_right_led_2_off();
307 ergodox_right_led_3_off();
308 switch (layer) {
309 /*
310 Lights are treated as binary here for easy identification.
311 LED1 = 4; LED2 = 2; LED1 = 1
312 This allows for up to 8 identified layers (default layers being no lights on)
313 Which is way more than I should ever need
314 */
315 case _LOWER:
316 ergodox_right_led_3_on();
317 ergodox_right_led_3_set(10); // Default brightness is deadly in a dark room
318 break;
319 case _RAISE:
320 ergodox_right_led_2_on();
321 ergodox_right_led_2_set(10);
322 break;
323 case _ADJUST:
324 ergodox_right_led_2_on();
325 ergodox_right_led_2_set(10);
326 ergodox_right_led_3_on();
327 ergodox_right_led_3_set(10);
328 break;
329 case _DIABLO:
330 ergodox_right_led_1_on();
331 ergodox_right_led_1_set(10);
332 break;
333 default:
334 // none
335 break;
336 }
337 #ifdef TAP_DANCE_ENABLE
338 run_diablo_macro_check();
339 #endif
340};
diff --git a/keyboards/ergodox_ez/keymaps/bocaj/readme.md b/keyboards/ergodox_ez/keymaps/bocaj/readme.md
deleted file mode 100644
index 9d5aa6050..000000000
--- a/keyboards/ergodox_ez/keymaps/bocaj/readme.md
+++ /dev/null
@@ -1,48 +0,0 @@
1# Ergodox EZ Layout by JacobJerrell
2
3My personal Ergodox EZ layout.
4
5## Summary
6
7Contains two base layers because I carry my keyboard between different machines and occassionally use the machines without this keyboard. A side-effect to using it in this manner (with a non-QWERTY layout) is that software/hardware mappings conflict so this allows a quick (2-buttons) to get the keyboard to a compatible layer
8
9## Layers
10
11| Layer | Purpose |
12| ----- | ------- |
13| 0 | [Hardware Workman](#hardware-workman) - For OS mapped to QWERTY |
14| 1 | [Software Workman](#software-workman) - For OS mapped to Workman |
15| 2 | [Lower](#lower) |
16| 3 | [Raise](#raise) |
17| 4 | [Adjust](#adjust) |
18| 5 | [Diablo III](#diablo-iii) |
19
20### Hardware Workman
21
22For easy plug and play into QWERTY machines
23![Hardware Workman](https://imgur.com/HHMIOEf.png)
24
25### Software Workman
26
27To switch to when I was previously using the laptop keyboard with software mapped to Workman. Or so other people can take the Ergodox for a spin.
28![Software Workman](https://imgur.com/WnSci7o.png)
29
30### Lower
31
32Reveals F1-12 keys and brings numkeys down.
33![Lowered](https://imgur.com/mGfjwcn.png)
34
35### Raise
36
37Reveals F1-F12 keys and gives shifted numkeys.
38![Raised](https://imgur.com/NC96Jus.png)
39
40### Adjust
41
42Numpad, Wipe EEPROM, OSX Volume Control, OSX Lockscreen, and Default Layer Switching.
43![Adjusted](https://imgur.com/aQtOxZU.png)
44
45### Diablo III
46
47Arranged to make playing on a laptop much more enjoyable. Credit for the D1-4 macros (as well as much of the ideas in this layout goes to Drashna)
48![Diablo III](https://imgur.com/5eQcDOQ.png)
diff --git a/layouts/community/ergodox/bocaj/config.h b/layouts/community/ergodox/bocaj/config.h
new file mode 100644
index 000000000..78350f603
--- /dev/null
+++ b/layouts/community/ergodox/bocaj/config.h
@@ -0,0 +1,6 @@
1#pragma once
2
3#include QMK_KEYBOARD_CONFIG_H
4
5#undef PRODUCT
6#define PRODUCT BocajEZ - Frankensteined ErgoDox EZ
diff --git a/layouts/community/ergodox/bocaj/keymap.c b/layouts/community/ergodox/bocaj/keymap.c
new file mode 100644
index 000000000..fbe0fca65
--- /dev/null
+++ b/layouts/community/ergodox/bocaj/keymap.c
@@ -0,0 +1,246 @@
1/*
2Copyright 2018 Jacob Jerrell jacob.jerrell@gmail.com @JacobJerrell
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17#include QMK_KEYBOARD_H
18#include "bocaj.h"
19
20const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
21 /* Hardware Workman - http://www.keyboard-layout-editor.com/#/gists/7a07cb982ec3597ba3e3d947554225f1
22 .---------------------------------------------. .---------------------------------------------.
23 | ESC | 1 | 2 | 3 | 4 | 5 | -> | ! - | 6 | 7 | 8 | 9 | 0 | = |
24 !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
25 | DEL | Q | D | R | W | B | ( | ! ) | J | F | U | P | ; | \ |
26 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
27 | NUMS | A | S | H | T | G |-------! !-------! Y | N | E | O | I | ' |
28 !-------+-----+-----+-----x-----x-----! HYP ! ! MEH !-----x-----x-----+-----+-----+-------!
29 | SHIFT | Z | X | M | C | V | [ | ! ] | K | L | , | . | / | SHIFT |
30 '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
31 | GAME | NUM | LWR | UP | LFT | .---------------. .---------------. ! RGT | DWN | | | ADJ |
32 '------------------------------' | APP | HOME | ! PGUP | ESC | '------------------------------'
33 .-------+-------+-------! !-------+-------+-------.
34 ! ! | END | ! PGDN | ! ENTER !
35 ! SPACE ! BSPCE !-------! !-------! TAB ! / !
36 | | | COPY | ! PASTE | | LOWER |
37 '-----------------------' '-----------------------'
38*/
39 [_HWRKMN] = LAYOUT_ergodox_pretty_wrapper(
40 KC_ESC, _______________________NUMBER_LEFT_______________________, JJ_ARRW, KC_MINUS,_______________________NUMBER_RIGHT______________________, KC_EQUAL,
41 KC_DEL, _______________________HWORKMAN_L1_______________________, KC_LPRN, KC_RPRN, _______________________HWORKMAN_R1_______________________, KC_BSLS,
42 KC_NUMS,_______________________HWORKMAN_L2_______________________, _______________________HWORKMAN_R2_______________________, KC_QUOTE,
43 KC_LSFT,_______________________HWORKMAN_L3_______________________, HYP_LBK, MEH_RBK, _______________________HWORKMAN_R3_______________________, KC_RSFT,
44 ___________________ERGODOX_BOTTOM_LEFT___________________, ___________________ERGODOX_BOTTOM_RIGHT__________________,
45 ______________________ERGODOX_THUMBS_____________________
46 ),
47/* Software Workman / QWERTY - http://www.keyboard-layout-editor.com/#/gists/b6c016a22a9d31381a276a603a42fe5f
48 .---------------------------------------------. .---------------------------------------------.
49 | ESC | 1 | 2 | 3 | 4 | 5 | -> | ! - | 6 | 7 | 8 | 9 | 0 | = |
50 !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
51 | DEL | Q | W | E | R | T | ( | ! ) | Y | U | I | O | P | \ |
52 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
53 | NUMS | A | S | D | F | G |-------! !-------! H | J | K | L | ; | ' |
54 !-------+-----+-----+-----x-----x-----! HYP ! ! MEH !-----x-----x-----+-----+-----+-------!
55 | SHIFT | Z | X | C | V | B | [ | ! ] | N | M | , | . | / | SHIFT |
56 '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
57 | GAME | NUM | LWR | UP | LFT | .---------------. .---------------. ! RGT | DWN | | | ADJ |
58 '------------------------------' | APP | HOME | ! PGUP | ESC | '------------------------------'
59 .-------+-------+-------! !-------+-------+-------.
60 ! ! | END | ! PGDN | ! ENTER !
61 ! SPACE ! BSPCE !-------! !-------! TAB ! / !
62 | | | COPY | ! PASTE | | LOWER |
63 '-----------------------' '-----------------------'
64*/
65 [_SWRKMN] = LAYOUT_ergodox_pretty_wrapper(
66 KC_ESC, _______________________NUMBER_LEFT_______________________, JJ_ARRW, KC_MINUS,_______________________NUMBER_RIGHT______________________, KC_EQUAL,
67 KC_DEL, _______________________SWORKMAN_L1_______________________, KC_LPRN, KC_RPRN, _______________________SWORKMAN_R1_______________________, KC_BSLS,
68 KC_NUMS,_______________________SWORKMAN_L2_______________________, _______________________SWORKMAN_R2_______________________, KC_QUOTE,
69 KC_LSFT,_______________________SWORKMAN_L3_______________________, HYP_LBK, MEH_RBK, _______________________SWORKMAN_R3_______________________, KC_RSFT,
70 ___________________ERGODOX_BOTTOM_LEFT___________________, ___________________ERGODOX_BOTTOM_RIGHT__________________,
71 ______________________ERGODOX_THUMBS_____________________
72 ),
73/* Lower - http://www.keyboard-layout-editor.com/#/gists/f1d745a88d1c48ab55e095efd9e7a43a
74 .---------------------------------------------. .---------------------------------------------.
75 | ESC | | | | | | -> | ! - | | | | | | = |
76 !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
77 | DEL | ! | @ | # | $ | % | ( | ! ) | ^ | & | * | ( | ) | \ |
78 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
79 | ` | 1 | 2 | 3 | 4 | 5 |-------! !-------! 6 | 7 | 8 | 9 | 0 | ' |
80 !-------+-----+-----+-----x-----x-----! HYP ! ! MEH !-----x-----x-----+-----+-----+-------!
81 | SHIFT | | | | | | [ | ! ] | | | | | | SHIFT |
82 '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
83 | GAME | NUM | LWR | UP | LFT | .---------------. .---------------. ! RGT | DWN | | | ADJ |
84 '------------------------------' | APP | HOME | ! PGUP | ESC | '------------------------------'
85 .-------+-------+-------! !-------+-------+-------.
86 ! ! | END | ! PGDN | ! ENTER !
87 ! SPACE ! BSPCE !-------! !-------! TAB ! / !
88 | | | COPY | ! PASTE | | LOWER |
89 '-----------------------' '-----------------------'
90*/
91 [_LOWER] = LAYOUT_ergodox_pretty_wrapper(
92 _______,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, _______, _______, XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, _______,
93 _______,_______________________SPECIAL_LEFT______________________, _______, _______, _______________________SPECIAL_RIGHT_____________________, _______,
94 KC_GRV ,_______________________NUMBER_LEFT_______________________, _______________________NUMBER_RIGHT______________________, _______,
95 _______,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, _______, _______, XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, _______,
96 _________________________________________________________, _________________________________________________________,
97 ______________________ERGODOX_THUMBS_____________________
98 ),
99 /* Adjust - http://www.keyboard-layout-editor.com/#/gists/dedeae17b35a5d5f745a42aaea78f007
100 .---------------------------------------------. .---------------------------------------------.
101 | | | | | | | EPRM | ! EPRM | | | | | | |
102 !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
103 | | | | | | | | ! | | | | | | |
104 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
105 | | 🔇 | 🔉 | 🔊 | LCK | |-------! !-------! | | | | | SWRKM |
106 !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
107 | | | | | | | | ! | | | | | | HWRKM |
108 '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
109 | | | | | | .---------------. .---------------. ! | | | | |
110 '------------------------------' | | | ! | | '------------------------------'
111 .-------+-------+-------! !-------+-------+-------.
112 ! ! | | ! | ! !
113 ! ! !-------! !-------! ! !
114 | | | | ! | | |
115 '-----------------------' '-----------------------'
116*/
117 [_ADJUST] = LAYOUT_ergodox_pretty_wrapper(
118 XXXXXXX,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, KC_EPRM, KC_EPRM, XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX,
119 XXXXXXX,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
120 XXXXXXX,KC__MUTE, KC__VOLDOWN, KC__VOLUP, MC_LOCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SWRK,
121 XXXXXXX,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HWRK,
122 XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
123 ______________________ERGODOX_THUMBS_____________________
124 ),
125 [_NUMS] = LAYOUT_ergodox_pretty_wrapper(
126 XXXXXXX,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX,
127 XXXXXXX,XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_PAST, XXXXXXX,
128 _______,XXXXXXX, KC_LEFT, KC_DOWN, KC_RIGHT, XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, XXXXXXX,
129 LM_SHFT,XXXXXXX, XXXXXXX, XXXXXXX, JJ_COPY, JJ_PSTE, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PMNS, XXXXXXX,
130 XXXXXXX,_______,XXXXXXX,XXXXXXX,XXXXXXX, KC_KP_0, KC_PDOT, KC_COMM, KC_PEQL, XXXXXXX,
131 _______, _______, _______,_______,
132 _______, _______,
133 KC_LALT,KC_LGUI,_______, _______,_______,_______
134 ),
135 [_NMOD] = LAYOUT_ergodox_pretty_wrapper(
136 XXXXXXX,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX,
137 XXXXXXX,XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, XXXXXXX,
138 XXXXXXX,XXXXXXX, _______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, XXXXXXX,
139 LM_SHFT,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, XXXXXXX,
140 XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, _______, _______, _______, _______, XXXXXXX,
141 XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,
142 XXXXXXX, XXXXXXX,
143 KC_LALT,KC_LGUI,XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX
144 ),
145// Diablo - http://www.keyboard-layout-editor.com/#/gists/28476e4237e77d4835ac8a9d7e5f9b2c
146 [_DIABLO] = LAYOUT_ergodox_pretty_wrapper(
147 KC_ESC , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
148 KC_TAB , KC_Q ,ALT_T(KC_S), KC_I , KC_F , KC_J ,KC_MINS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
149 KC_LOCK, KC_1 , KC_2 , KC_3 , KC_4 ,KC_DCLR , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
150 KC_LSFT, KC_D3_1 , KC_D3_2 , KC_D3_3 , KC_D3_4 , KC_T ,KC_MINS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
151 _______, XXXXXXX , XXXXXXX , XXXXXXX , KC_M , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
152 XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,
153 XXXXXXX, XXXXXXX,
154 KC_BTN1,KC_BTN2,KC_ENTER, XXXXXXX,XXXXXXX,XXXXXXX
155 )
156};
157
158bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
159 uint8_t default_layer = 0;
160 default_layer = eeconfig_read_default_layer();
161 switch (keycode) {
162 case KC_SWRK:
163 if (!record->event.pressed) {
164 set_single_persistent_default_layer(_SWRKMN);
165 layer_move(default_layer);
166 ergodox_blink_all_leds();
167 ergodox_blink_all_leds();
168 }
169 return false;
170 break;
171 case KC_HWRK:
172 if (!record->event.pressed) {
173 set_single_persistent_default_layer(_HWRKMN);
174 layer_move(default_layer);
175 ergodox_blink_all_leds();
176 ergodox_blink_all_leds();
177 }
178 return false;
179 break;
180 case KC_EPRM:
181 if (!record->event.pressed) {
182 ergodox_blink_all_leds();
183 eeconfig_init();
184 }
185 return false;
186 break;
187 case MC_LOCK:
188 if (!record->event.pressed) {
189 layer_move(default_layer);
190 SEND_STRING(SS_LCTRL(SS_LGUI("q")));
191 }
192 return false;
193 break;
194 }
195 return true;
196}
197
198void matrix_init_keymap(void) {};
199
200void matrix_scan_keymap(void) {
201 uint8_t layer = biton32(layer_state);
202 ergodox_board_led_off();
203 ergodox_right_led_1_off();
204 ergodox_right_led_2_off();
205 ergodox_right_led_3_off();
206 switch (layer) {
207 /*
208 Lights are treated as binary here for easy identification.
209 LED1 = 4; LED2 = 2; LED1 = 1
210 This allows for up to 8 identified layers (default layers being no lights on)
211 Which is way more than I should ever need
212 */
213 case _LOWER:
214 ergodox_right_led_3_on();
215 ergodox_right_led_3_set(10); // Default brightness is deadly in a dark room
216 break;
217 case _ADJUST:
218 ergodox_right_led_2_on();
219 ergodox_right_led_2_set(10);
220 break;
221 case _NUMS:
222 ergodox_right_led_2_on();
223 ergodox_right_led_2_set(10);
224 ergodox_right_led_3_on();
225 ergodox_right_led_3_set(10);
226 break;
227 case _NMOD:
228 ergodox_right_led_1_on();
229 ergodox_right_led_1_set(10);
230 ergodox_right_led_2_on();
231 ergodox_right_led_2_set(10);
232 ergodox_right_led_3_on();
233 ergodox_right_led_3_set(10);
234 break;
235 case _DIABLO:
236 ergodox_right_led_1_on();
237 ergodox_right_led_1_set(10);
238 break;
239 default:
240 // none
241 break;
242 }
243 /* #ifdef TAP_DANCE_ENABLE
244 run_diablo_macro_check();
245 #endif */
246};
diff --git a/keyboards/ergodox_ez/keymaps/bocaj/rules.mk b/layouts/community/ergodox/bocaj/rules.mk
index b667841a1..037bca2b6 100644
--- a/keyboards/ergodox_ez/keymaps/bocaj/rules.mk
+++ b/layouts/community/ergodox/bocaj/rules.mk
@@ -3,3 +3,4 @@ COMMAND_ENABLE = no
3SWAP_HANDS_ENABLE = no 3SWAP_HANDS_ENABLE = no
4TAP_DANCE_ENABLE = yes 4TAP_DANCE_ENABLE = yes
5EXTRAKEY_ENABLE = no 5EXTRAKEY_ENABLE = no
6KEY_LOCK_ENABLE = yes
diff --git a/users/bocaj/bocaj.c b/users/bocaj/bocaj.c
new file mode 100644
index 000000000..6df6e3bbf
--- /dev/null
+++ b/users/bocaj/bocaj.c
@@ -0,0 +1,177 @@
1#include "bocaj.h"
2#include "eeprom.h"
3#include "version.h"
4#include "tap_dances.h"
5
6static uint16_t copy_paste_timer;
7userspace_config_t userspace_config;
8
9/* *** *** *** *** *
10 * Helper Functions *
11 * *** *** *** *** */
12void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); };
13
14// Add reconfigurable functions here, for keymap customization
15// This allows for a global, userspace functions, and continued
16// customization of the keymap. Use _keymap instead of _user
17// functions in the keymaps
18__attribute__ ((weak))
19void matrix_init_keymap(void) {}
20
21__attribute__ ((weak))
22void startup_keymap(void) {}
23
24__attribute__ ((weak))
25void suspend_power_down_keymap(void) {}
26
27__attribute__ ((weak))
28void suspend_wakeup_init_keymap(void) {}
29
30__attribute__ ((weak))
31void matrix_scan_keymap(void) {}
32
33__attribute__ ((weak))
34bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
35 return true;
36}
37
38__attribute__ ((weak))
39bool process_record_secrets(uint16_t keycode, keyrecord_t *record) {
40 return true;
41}
42
43
44__attribute__ ((weak))
45uint32_t layer_state_set_keymap (uint32_t state) {
46 return state;
47}
48
49__attribute__ ((weak))
50uint32_t default_layer_state_set_keymap (uint32_t state) {
51 return state;
52}
53
54__attribute__ ((weak))
55void led_set_keymap(uint8_t usb_led) {}
56
57// Call user matrix init, set default RGB colors and then
58// call the keymap's init function
59void matrix_init_user(void) {
60 userspace_config.raw = eeprom_read_byte(EECONFIG_USERSPACE);
61 matrix_init_keymap();
62}
63
64void startup_user (void) {
65 startup_keymap();
66}
67
68void suspend_power_down_user(void)
69{
70 suspend_power_down_keymap();
71}
72
73void suspend_wakeup_init_user(void)
74{
75 suspend_wakeup_init_keymap();
76 #ifdef KEYBOARD_ergodox_ez
77 wait_ms(10);
78 #endif
79}
80
81// No global matrix scan code, so just run keymap's matrix
82// scan function
83void matrix_scan_user(void) {
84 static bool has_ran_yet;
85 if (!has_ran_yet) {
86 has_ran_yet = true;
87 startup_user();
88 }
89
90#ifdef TAP_DANCE_ENABLE // Run Diablo 3 macro checking code.
91 run_diablo_macro_check();
92#endif // TAP_DANCE_ENABLE
93
94 matrix_scan_keymap();
95}
96
97bool process_record_user(uint16_t keycode, keyrecord_t *record) {
98 /* uint8_t default_layer = 0;
99 default_layer = eeconfig_read_default_layer(); */
100 switch (keycode) {
101 case JJ_COPY:
102 if (!record->event.pressed) {
103 SEND_STRING(SS_LGUI("c"));
104 }
105 return false;
106 break;
107 case JJ_PSTE:
108 if (!record->event.pressed) {
109 SEND_STRING(SS_LGUI("v"));
110 }
111 return false;
112 break;
113 case JJ_ARRW:
114 if (!record->event.pressed) {
115 SEND_STRING("->");
116 }
117 return false;
118 break; /*
119 case KC_SWRK:
120 if (!record->event.pressed) {
121 set_single_persistent_default_layer(_SWRKMN);
122 layer_move(default_layer);
123 //ergodox_blink_all_leds();
124 //ergodox_blink_all_leds();
125 }
126 return false;
127 break;
128 case KC_HWRK:
129 if (!record->event.pressed) {
130 set_single_persistent_default_layer(_HWRKMN);
131 layer_move(default_layer);
132 //ergodox_blink_all_leds();
133 //ergodox_blink_all_leds();
134 }
135 return false;
136 break;
137 case KC_EPRM:
138 if (!record->event.pressed) {
139 //ergodox_blink_all_leds();
140 eeconfig_init();
141 }
142 return false;
143 break;
144 case MC_LOCK:
145 if (!record->event.pressed) {
146 layer_move(default_layer);
147 SEND_STRING(SS_LCTRL(SS_LGUI("q")));
148 }
149 return false;
150 break; */
151 case KC_DCLR:
152#ifdef TAP_DANCE_ENABLE
153 if (record->event.pressed) {
154 uint8_t dtime;
155 for (dtime = 0; dtime < 4; dtime++) {
156 diablo_key_time[dtime] = diablo_times[0];
157 }
158 }
159#endif // !TAP_DANCE_ENABLE
160 return false;
161 break;
162 case KC_CCCV:
163 if (record->event.pressed) {
164 copy_paste_timer = timer_read();
165 } else {
166 if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy
167 SEND_STRING(SS_LGUI("c"));
168 } else {
169 SEND_STRING(SS_LGUI("v"));
170 }
171 }
172 return false;
173 break;
174 }
175 return process_record_keymap(keycode, record);
176}
177
diff --git a/keyboards/ergodox_ez/keymaps/bocaj/bocaj.h b/users/bocaj/bocaj.h
index 2c41c01aa..7b537397f 100644
--- a/keyboards/ergodox_ez/keymaps/bocaj/bocaj.h
+++ b/users/bocaj/bocaj.h
@@ -1,94 +1,89 @@
1/* 1#ifndef USERSPACE
2Copyright 2018 Jacob Jerrell <jacob.jerrell@gmail.com> 2#define USERSPACE
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17 3
18#include "quantum.h" 4#include "quantum.h"
19 5
20// Layers 6/* *** *** *** *** *** *
21enum layers { 7 * Define layer names *
22 _SWRKMN = 0, 8 * *** *** *** *** *** */
23 _HWRKMN, 9enum userspace_layers {
10 _HWRKMN = 0,
11 _SWRKMN,
24 _LOWER, 12 _LOWER,
25 _RAISE,
26 _ADJUST, 13 _ADJUST,
14 _NUMS,
15 _NMOD,
27 _DIABLO 16 _DIABLO
28}; 17};
29 18
19#define EECONFIG_USERSPACE (uint8_t *)19
20typedef union {
21 uint8_t raw;
22} userspace_config_t;
30 23
31 24/* *** *** *** *** *** *** *
32enum custom_keycodes { 25 * Define Custom Keycodes *
33 KC_EPRM = SAFE_RANGE, 26 * *** *** *** *** *** *** */
27enum userspace_custom_keycodes {
28 KC_EPRM = SAFE_RANGE, // can always be here
34 KC_SWRK, 29 KC_SWRK,
35 KC_HWRK, 30 KC_HWRK,
36 KC_VRSN, 31 KC_VRSN,
37 JJ_COPY, 32 JJ_COPY,
38 JJ_PASTE, 33 JJ_PSTE,
39 JJ_ARRW, 34 JJ_ARRW,
35 KC_CCCV,
40 MC_LOCK, 36 MC_LOCK,
41 KC_DIABLO_CLEAR, 37 KC_DCLR,
42 KC_NMPD 38 NEW_SAFE_RANGE //use "NEWPLACEHOLDER for keymap specific codes
43// UC_FLIP
44}; 39};
45 40
46// Space Cadet Hyper/Meh and [/] 41// Space Cadet Hyper/Meh and [/]
47#define HYP_LBK ALL_T(KC_LBRACKET) 42#define HYP_LBK ALL_T(KC_LBRACKET)
48#define MEH_RBK MEH_T(KC_RBRACKET) 43#define MEH_RBK MEH_T(KC_RBRACKET)
49 44
50#define KC_LWSP LT(_LOWER, KC_SPACE) 45// Layout beauti-/simpli-fication
51#define KC_RSEN LT(_RAISE, KC_ENTER) 46#define KC_LWEN LT(_LOWER, KC_ENTER)
52#define KC_ADJS TT(_ADJUST) 47#define KC_ADJS TT(_ADJUST)
53 48#define KC_NUMS TT(_NUMS)
49#define LM_SHFT LM(_NMOD, MOD_LSFT)
54#define XXXXXXX KC_NO 50#define XXXXXXX KC_NO
55#define _______ KC_TRNS 51#define _______ KC_TRNS
56 52
53void tap(uint16_t keycode);
54
55/* *** *** *** *** *** *** *
56 * Diablo 3 Macro Handling *
57 * *** *** *** *** *** *** */
58
59// If Tap Dancing is enabled, we manage that here.
60// If it is not, then we define the KC_D3_# codes gracefully
57#ifdef TAP_DANCE_ENABLE 61#ifdef TAP_DANCE_ENABLE
58enum { 62enum {
59 TD_D3_1 = 0, 63 TD_D3_1 = 0,
60 TD_D3_2, 64 TD_D3_2,
61 TD_D3_3, 65 TD_D3_3,
62 TD_D3_4 66 TD_D3_4,
63}; 67};
64#endif // TAP_DANCE_ENABLE
65 68
66// Custom Keycodes for Diablo 3 layer
67// But since TD() doesn't work when tap dance is disabled
68// We use custom codes here, so we can substitute the right stuff
69#ifdef TAP_DANCE_ENABLE
70#define KC_D3_1 TD(TD_D3_1) 69#define KC_D3_1 TD(TD_D3_1)
71#define KC_D3_2 TD(TD_D3_2) 70#define KC_D3_2 TD(TD_D3_2)
72#define KC_D3_3 TD(TD_D3_3) 71#define KC_D3_3 TD(TD_D3_3)
73#define KC_D3_4 TD(TD_D3_4) 72#define KC_D3_4 TD(TD_D3_4)
74#else // TAP_DANCE_ENABLE 73#else // !TAP_DANCE_ENABLE
75#define KC_D3_1 KC_1 74#define KC_D3_1 KC_1
76#define KC_D3_2 KC_2 75#define KC_D3_2 KC_2
77#define KC_D3_3 KC_3 76#define KC_D3_3 KC_3
78#define KC_D3_4 KC_4 77#define KC_D3_4 KC_4
79#endif // TAP_DANCE_ENABLE 78#endif // TAP_DANCE_ENABLE
80 79
81//define diablo macro timer variables 80// Wrapper for handling of keymap 'blocks'
82extern uint16_t diablo_timer[4]; 81// not 100% sure what this first part does. Credit to Drashna
83extern uint8_t diablo_times[]; 82#if (!defined(LAYOUT) && defined(KEYMAP))
84extern uint8_t diablo_key_time[4]; 83#define LAYOUT KEYMAP
85 84#endif
86
87void run_diablo_macro_check(void);
88
89 85
90#define LAYOUT_ergodox_pretty_wrapper(...) LAYOUT_ergodox_pretty(__VA_ARGS__) 86#define LAYOUT_ergodox_pretty_wrapper(...) LAYOUT_ergodox_pretty(__VA_ARGS__)
91
92/* Pretty Layout 87/* Pretty Layout
93.---------------------------------------------. .---------------------------------------------. 88.---------------------------------------------. .---------------------------------------------.
94| 1 | 2 | 3 | 4 | 5 | 6 | 7 | ! 8 | 9 | 10 | 11 | 12 | 13 | 14 | 89| 1 | 2 | 3 | 4 | 5 | 6 | 7 | ! 8 | 9 | 10 | 11 | 12 | 13 | 14 |
@@ -108,18 +103,6 @@ void run_diablo_macro_check(void);
108 '-----------------------' '-----------------------' 103 '-----------------------' '-----------------------'
109*/ 104*/
110 105
111#define ______________________NUMBER_LEFT________________________ KC_1, KC_2, KC_3, KC_4, KC_5
112#define ______________________NUMBER_RIGHT_______________________ KC_6, KC_7, KC_8, KC_9, KC_0
113
114#define ______________________SPECIAL_LEFT_______________________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC
115#define ______________________SPECIAL_RIGHT______________________ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
116
117#define _______________________FUNC_LEFT_________________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
118#define _______________________FUNC_RIGHT________________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
119
120#define _________________________________________________________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
121#define XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
122
123#define _______________________SWORKMAN_L1_______________________ KC_Q, KC_W, KC_E, KC_R, KC_T 106#define _______________________SWORKMAN_L1_______________________ KC_Q, KC_W, KC_E, KC_R, KC_T
124#define _______________________SWORKMAN_L2_______________________ KC_A, SFT_T(KC_S), GUI_T(KC_D), ALT_T(KC_F), KC_G 107#define _______________________SWORKMAN_L2_______________________ KC_A, SFT_T(KC_S), GUI_T(KC_D), ALT_T(KC_F), KC_G
125#define _______________________SWORKMAN_L3_______________________ CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B 108#define _______________________SWORKMAN_L3_______________________ CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B
@@ -137,10 +120,22 @@ void run_diablo_macro_check(void);
137#define _______________________HWORKMAN_R2_______________________ KC_Y, ALT_T(KC_N), GUI_T(KC_E), SFT_T(KC_O), KC_I 120#define _______________________HWORKMAN_R2_______________________ KC_Y, ALT_T(KC_N), GUI_T(KC_E), SFT_T(KC_O), KC_I
138#define _______________________HWORKMAN_R3_______________________ KC_K, KC_L, KC_COMM, KC_DOT, CTL_T(KC_SLASH) 121#define _______________________HWORKMAN_R3_______________________ KC_K, KC_L, KC_COMM, KC_DOT, CTL_T(KC_SLASH)
139 122
140#define ___________________ERGODOX_BOTTOM_LEFT___________________ TT(_DIABLO), TT(_ADJUST), XXXXXXX, KC_UP, KC_LEFT 123#define ___________________ERGODOX_BOTTOM_LEFT___________________ TT(_DIABLO), KC_NUMS, TT(_LOWER), KC_UP, KC_LEFT
141#define ___________________ERGODOX_BOTTOM_RIGHT__________________ KC_RIGHT, KC_DOWN, TT(_RAISE), TT(_LOWER), TT(_ADJUST) 124#define ___________________ERGODOX_BOTTOM_RIGHT__________________ KC_RIGHT, KC_DOWN, XXXXXXX, XXXXXXX, TT(_ADJUST)
125
126#define _______________________NUMBER_LEFT_______________________ KC_1, KC_2, KC_3, KC_4, KC_5
127#define _______________________NUMBER_RIGHT______________________ KC_6, KC_7, KC_8, KC_9, KC_0
128
129#define _______________________SPECIAL_LEFT______________________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC
130#define _______________________SPECIAL_RIGHT_____________________ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
131
132#define _________________________________________________________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
133#define XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
142 134
143// LEFT | RIGHT 135// LEFT | RIGHT
144#define ______________________ERGODOX_THUMBS_____________________ KC_APP,KC_HOME, KC_PGUP,KC_ESC, \ 136#define ______________________ERGODOX_THUMBS_____________________ KC_APP,KC_HOME, KC_PGUP,KC_ESC, \
145 KC_END, KC_PGDOWN, \ 137 KC_END, KC_PGDOWN, \
146 KC_LWSP,KC_BSPACE,JJ_COPY, JJ_PASTE,KC_TAB,KC_RSEN 138 KC_SPACE,KC_BSPACE,JJ_COPY, JJ_PSTE,KC_TAB,KC_LWEN
139
140
141#endif // !USERSPACE
diff --git a/users/bocaj/config.h b/users/bocaj/config.h
new file mode 100644
index 000000000..ce5ec65d6
--- /dev/null
+++ b/users/bocaj/config.h
@@ -0,0 +1,33 @@
1#pragma once
2
3#ifndef QMK_KEYS_PER_SCAN
4 #define QMK_KEYS_PER_SCAN 4
5#endif // QMK KEYS PER SCAN
6
7// this makes it possible to do rolling combos (zx) with keys that
8// convert to other keys on hold (z becomes ctrl when you hold it,
9// and when this option isn't enabled, z rapidly followed by x
10// actually sends Ctrl-x. That's bad.)
11#define IGNORE_MOD_TAP_INTERRUPT
12#undef PERMISSIVE_HOLD
13#define PREVENT_STUCK_MODIFIERS
14
15#ifdef TAPPING_TERM
16#undef TAPPING_TERM
17#endif // TAPPING_TERM
18#define TAPPING_TERM 175
19
20// Disable action_get_macro and fn_actions, since we don't use these
21// and it saves on space in the firmware.
22#ifndef NO_DEBUG
23#define NO_DEBUG
24#endif // !NO_DEBUG
25#if !defined(NO_PRINT) && !defined(CONSOLE_ENABLE)
26#define NO_PRINT
27#endif // !NO_PRINT
28#define NO_ACTION_MACRO
29#define NO_ACTION_FUNCTION
30
31#define DISABLE_LEADER
32
33#define MACRO_TIMER 5
diff --git a/users/bocaj/readme.md b/users/bocaj/readme.md
new file mode 100644
index 000000000..bab6d7337
--- /dev/null
+++ b/users/bocaj/readme.md
@@ -0,0 +1,14 @@
1Copyright 2018 Jacob Jerrell jacob.jerrell@gmail.com @JacobJerrell
2
3This program is free software: you can redistribute it and/or modify
4it under the terms of the GNU General Public License as published by
5the Free Software Foundation, either version 2 of the License, or
6(at your option) any later version.
7
8This program is distributed in the hope that it will be useful,
9but WITHOUT ANY WARRANTY; without even the implied warranty of
10MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11GNU General Public License for more details.
12
13You should have received a copy of the GNU General Public License
14along with this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/users/bocaj/rules.mk b/users/bocaj/rules.mk
new file mode 100644
index 000000000..17d2772a7
--- /dev/null
+++ b/users/bocaj/rules.mk
@@ -0,0 +1,5 @@
1SRC += bocaj.c
2
3ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
4 SRC += tap_dances.c
5endif
diff --git a/users/bocaj/tap_dances.c b/users/bocaj/tap_dances.c
new file mode 100644
index 000000000..10767db45
--- /dev/null
+++ b/users/bocaj/tap_dances.c
@@ -0,0 +1,65 @@
1#include "bocaj.h"
2#include "tap_dances.h"
3
4
5//define diablo macro timer variables
6uint16_t diablo_timer[4];
7uint8_t diablo_times[] = { 0, 1, 3, 5, 10, 30 };
8uint8_t diablo_key_time[4];
9
10// has the correct number of seconds elapsed (as defined by diablo_times)
11bool check_dtimer(uint8_t dtimer) { return (timer_elapsed(diablo_timer[dtimer]) < (diablo_key_time[dtimer] * 1000)) ? false : true; };
12
13// Cycle through the times for the macro, starting at 0, for disabled.
14// Max of six values, so don't exceed
15void diablo_tapdance_master(qk_tap_dance_state_t *state, void *user_data, uint8_t diablo_key) {
16 if (state->count >= 7) {
17 diablo_key_time[diablo_key] = diablo_times[0];
18 reset_tap_dance(state);
19 } else {
20 diablo_key_time[diablo_key] = diablo_times[state->count - 1];
21 }
22}
23
24// Would rather have one function for all of this, but no idea how to do that...
25void diablo_tapdance1(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 0); }
26void diablo_tapdance2(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 1); }
27void diablo_tapdance3(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 2); }
28void diablo_tapdance4(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 3); }
29
30//Tap Dance Definitions
31qk_tap_dance_action_t tap_dance_actions[] = {
32 // tap once to disable, and more to enable timed micros
33 [TD_D3_1] = ACTION_TAP_DANCE_FN(diablo_tapdance1),
34 [TD_D3_2] = ACTION_TAP_DANCE_FN(diablo_tapdance2),
35 [TD_D3_3] = ACTION_TAP_DANCE_FN(diablo_tapdance3),
36 [TD_D3_4] = ACTION_TAP_DANCE_FN(diablo_tapdance4),
37};
38
39// Sends the key press to system, but only if on the Diablo layer
40void send_diablo_keystroke(uint8_t diablo_key) {
41 if (biton32(layer_state) == _DIABLO) {
42 switch (diablo_key) {
43 case 0:
44 tap(KC_1); break;
45 case 1:
46 tap(KC_2); break;
47 case 2:
48 tap(KC_3); break;
49 case 3:
50 tap(KC_4); break;
51 }
52 }
53}
54
55// Checks each of the 4 timers/keys to see if enough time has elapsed
56// Runs the "send string" command if enough time has passed, and resets the timer.
57void run_diablo_macro_check(void) {
58 uint8_t dtime;
59 for (dtime = 0; dtime < 4; dtime++) {
60 if (check_dtimer(dtime) && diablo_key_time[dtime]) {
61 diablo_timer[dtime] = timer_read();
62 send_diablo_keystroke(dtime);
63 }
64 }
65}
diff --git a/users/bocaj/tap_dances.h b/users/bocaj/tap_dances.h
new file mode 100644
index 000000000..8935753f6
--- /dev/null
+++ b/users/bocaj/tap_dances.h
@@ -0,0 +1,7 @@
1//define diablo macro timer variables
2extern uint16_t diablo_timer[4];
3extern uint8_t diablo_times[];
4extern uint8_t diablo_key_time[4];
5
6
7void run_diablo_macro_check(void);