aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwanleg <32079073+wanleg@users.noreply.github.com>2018-08-17 16:11:21 -0700
committerDrashna Jaelre <drashna@live.com>2018-08-17 16:11:21 -0700
commit9175eebc8796f31a481ba16b1ca2ba9e4432502e (patch)
treefe799b4792343343351be2dd3cc84715c3ffaafc
parent8007d9f3a7583adeedd26fa7ab1622e06fed8034 (diff)
downloadqmk_firmware-9175eebc8796f31a481ba16b1ca2ba9e4432502e.tar.gz
qmk_firmware-9175eebc8796f31a481ba16b1ca2ba9e4432502e.zip
Keymap: Wanleg userspace (#3670)
* configure wanleg userspace * additional layout support * additional layout support * userspace edits * fix swap hands between 30 and 40 percent * add additional keymaps * userspace edits * userspace configuration * userspace configuration * Update readme.md * userspace work * swap hands userspace fix * made requested edits * Update readme.md * use relative paths instead of copying file * Update wanleg.h * fixing layer order
-rw-r--r--keyboards/gherkin/keymaps/wanleg/config.h24
-rw-r--r--keyboards/gherkin/keymaps/wanleg/keymap.c218
-rw-r--r--keyboards/gherkin/keymaps/wanleg/rules.mk7
-rw-r--r--layouts/community/ortho_3x10/layout.json3
-rw-r--r--layouts/community/ortho_3x10/readme.md3
-rw-r--r--layouts/community/ortho_3x10/wanleg/config.h9
-rw-r--r--layouts/community/ortho_3x10/wanleg/keymap.c29
-rw-r--r--layouts/community/ortho_3x10/wanleg/readme.md (renamed from keyboards/gherkin/keymaps/wanleg/readme.md)13
-rw-r--r--layouts/community/ortho_3x10/wanleg/rules.mk3
-rw-r--r--layouts/community/ortho_4x12/wanleg/config.h15
-rw-r--r--layouts/community/ortho_4x12/wanleg/keymap.c67
-rw-r--r--layouts/community/ortho_4x12/wanleg/readme.md24
-rw-r--r--layouts/community/ortho_4x12/wanleg/rules.mk6
-rw-r--r--layouts/community/ortho_5x15/wanleg/config.h3
-rw-r--r--layouts/community/ortho_5x15/wanleg/keymap.c176
-rw-r--r--layouts/community/ortho_5x15/wanleg/rules.mk1
-rw-r--r--users/wanleg/config.h32
-rw-r--r--users/wanleg/readme.md14
-rw-r--r--users/wanleg/rules.mk19
-rw-r--r--users/wanleg/tapdances.c110
-rw-r--r--users/wanleg/wanleg.c158
-rw-r--r--users/wanleg/wanleg.h308
22 files changed, 985 insertions, 257 deletions
diff --git a/keyboards/gherkin/keymaps/wanleg/config.h b/keyboards/gherkin/keymaps/wanleg/config.h
deleted file mode 100644
index 98e2b2338..000000000
--- a/keyboards/gherkin/keymaps/wanleg/config.h
+++ /dev/null
@@ -1,24 +0,0 @@
1#ifndef CONFIG_USER_H
2#define CONFIG_USER_H
3
4#include "../../config.h"
5#endif
6
7#define PREVENT_STUCK_MODIFIERS
8
9//Tap Dance Prerequisite
10#define TAPPING_TERM 200
11
12//Mousekeys Settings
13#define MOUSEKEY_INTERVAL 16
14#define MOUSEKEY_DELAY 0
15#define MOUSEKEY_TIME_TO_MAX 60
16#define MOUSEKEY_MAX_SPEED 7
17#define MOUSEKEY_WHEEL_DELAY 0
18
19/* for QMK DFU bootloader */
20/* not required if using default ProMicro bootloader */
21/* set top left key as bootloader mode escape key */
22#define QMK_ESC_OUTPUT B4 // usually COL
23#define QMK_ESC_INPUT F7 // usually ROW
24#define QMK_LED B0 \ No newline at end of file
diff --git a/keyboards/gherkin/keymaps/wanleg/keymap.c b/keyboards/gherkin/keymaps/wanleg/keymap.c
deleted file mode 100644
index 108ed40e5..000000000
--- a/keyboards/gherkin/keymaps/wanleg/keymap.c
+++ /dev/null
@@ -1,218 +0,0 @@
1/* Copyright 2017 Brian Fong
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18// Each layer gets a name for readability, which is then used in the keymap matrix below.
19// The underscores don't mean anything - you can have a layer called STUFF or any other name.
20// Layer names don't all need to be of the same length, obviously, and you can also skip them
21// entirely and just use numbers.
22#define _QW 0
23#define DIR 1
24#define NUM 2
25#define ETC 3
26
27// Readability keycodes
28#define _______ KC_TRNS
29
30
31/////////////// TAP DANCE SECTION START ///////////////
32//Tap Dance Declarations (list of my tap dance configurations)
33enum {
34 TD_SFT_CAPS = 0
35 ,TD_Q_ESC
36 ,ENT_TAP_DANCE
37 ,DEL_TAP_DANCE
38};
39
40///// QUAD FUNCTION TAP DANCE GENERAL SETUP SECTION START /////
41///// (no need to edit this section) /////
42//Enums used to clearly convey the state of the tap dance
43enum {
44 SINGLE_TAP = 1,
45 SINGLE_HOLD = 2,
46 DOUBLE_TAP = 3,
47 DOUBLE_HOLD = 4,
48 DOUBLE_SINGLE_TAP = 5 //send SINGLE_TAP twice - NOT DOUBLE_TAP
49 // Add more enums here if you want for triple, quadruple, etc.
50};
51
52typedef struct {
53 bool is_press_action;
54 int state;
55} tap;
56
57int cur_dance (qk_tap_dance_state_t *state) {
58 if (state->count == 1) {
59 //If count = 1, and it has been interrupted - it doesn't matter if it is pressed or not: Send SINGLE_TAP
60 if (state->interrupted || !state->pressed) return SINGLE_TAP;
61 if (state->interrupted) return SINGLE_TAP;
62 else return SINGLE_HOLD;
63 }
64 //If count = 2, and it has been interrupted - assume that user is trying to type the letter associated
65 //with single tap.
66 else if (state->count == 2) {
67 if (state->interrupted) return DOUBLE_SINGLE_TAP;
68 else if (state->pressed) return DOUBLE_HOLD;
69 else return DOUBLE_TAP;
70 }
71 else return 6; //magic number. At some point this method will expand to work for more presses
72}
73///// QUAD FUNCTION TAP DANCE GENERAL SETUP SECTION END /////
74///// QUAD FUNCTION TAP DANCE PERSONALIZATION SECTION START /////
75//instantialize an instance of 'tap' for the 'ENT' tap dance.
76static tap ENTtap_state = {
77 .is_press_action = true,
78 .state = 0
79};
80
81void ENT_finished (qk_tap_dance_state_t *state, void *user_data) {
82 ENTtap_state.state = cur_dance(state);
83 switch (ENTtap_state.state) {
84 case SINGLE_TAP: register_code(KC_SPC); break;
85 case SINGLE_HOLD: register_code(KC_LSFT); break;
86 case DOUBLE_TAP: register_code(KC_ENT); break;
87 case DOUBLE_HOLD: register_code(KC_NO); break; // setting double hold to do nothing (change this if you want)
88 case DOUBLE_SINGLE_TAP: register_code(KC_SPC); unregister_code(KC_SPC); register_code(KC_SPC);
89 //Last case is for fast typing. Assuming your key is `f`:
90 //For example, when typing the word `buffer`, and you want to make sure that you send `ff` and not `Esc`.
91 //In order to type `ff` when typing fast, the next character will have to be hit within the `TAPPING_TERM`, which by default is 200ms.
92 }
93}
94
95void ENT_reset (qk_tap_dance_state_t *state, void *user_data) {
96 switch (ENTtap_state.state) {
97 case SINGLE_TAP: unregister_code(KC_SPC); break;
98 case SINGLE_HOLD: unregister_code(KC_LSFT); break;
99 case DOUBLE_TAP: unregister_code(KC_ENT); break;
100 case DOUBLE_HOLD: unregister_code(KC_NO);
101 case DOUBLE_SINGLE_TAP: unregister_code(KC_SPC);
102 }
103 ENTtap_state.state = 0;
104}
105
106//instanalize an instance of 'tap' for the 'DEL' tap dance.
107static tap DELtap_state = {
108 .is_press_action = true,
109 .state = 0
110};
111
112void DEL_finished (qk_tap_dance_state_t *state, void *user_data) {
113 DELtap_state.state = cur_dance(state);
114 switch (DELtap_state.state) {
115 case SINGLE_TAP: register_code(KC_BSPC); break;
116 case SINGLE_HOLD: register_code(KC_LCTL); break;
117 case DOUBLE_TAP: register_code(KC_DEL); break;
118 case DOUBLE_HOLD: register_code(KC_NO); break;
119 case DOUBLE_SINGLE_TAP: register_code(KC_BSPC); unregister_code(KC_BSPC); register_code(KC_BSPC);
120 }
121}
122
123void DEL_reset (qk_tap_dance_state_t *state, void *user_data) {
124 switch (DELtap_state.state) {
125 case SINGLE_TAP: unregister_code(KC_BSPC); break;
126 case SINGLE_HOLD: unregister_code(KC_LCTL); break;
127 case DOUBLE_TAP: unregister_code(KC_DEL); break;
128 case DOUBLE_HOLD: unregister_code(KC_NO);
129 case DOUBLE_SINGLE_TAP: unregister_code(KC_BSPC);
130 }
131 DELtap_state.state = 0;
132}
133///// QUAD FUNCTION TAP DANCE PERSONALIZATION SECTION END /////
134
135//Tap Dance Definitions
136//THIS SECTION HAS TO BE AT THE END OF THE TAP DANCE SECTION
137qk_tap_dance_action_t tap_dance_actions[] = {
138 [TD_SFT_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS)
139// Other declarations would go here, separated by commas, if you have them
140 ,[TD_Q_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_ESC)
141 ,[ENT_TAP_DANCE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ENT_finished, ENT_reset)
142 ,[DEL_TAP_DANCE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, DEL_finished, DEL_reset)
143};
144
145//In Layer declaration, add tap dance item in place of a key code
146//TD(TD_SFT_CAPS)
147
148///////////// TAP DANCE SECTION END ///////////////
149
150const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
151
152 /* Qwerty
153 * .-----------------------------------------------------------------------------------------.
154 * | Q//ESC | W | E | R | T | Y | U | I | O | P |
155 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
156 * | A | S | D | F | G | H | J | K | L | SPACE |
157 * | | | | | | | | | |SFThold |
158 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
159 * | Z | X | C | V/NUM | B/ETC | N | M/DIR | ,/GUI | ./ALT | BKSC |
160 * | SFThold| | | | | | | | |CTRLhold|
161 * '-----------------------------------------------------------------------------------------'
162 */
163 [_QW] = LAYOUT_ortho_3x10( /* Qwerty*/
164 TD(TD_Q_ESC), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
165 KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SFT_T(KC_SPC),
166 SFT_T(KC_Z), KC_X, KC_C, LT(NUM, KC_V), LT(ETC, KC_B), KC_N, LT(DIR, KC_M), GUI_T(KC_COMM), ALT_T(KC_DOT), CTL_T(KC_BSPC)
167 ),
168
169 /*
170 * Directional Modifiers
171 * .-----------------------------------------------------------------------------------------.
172 * | TAB | up | | INS | CTRL | SHIFT | PgUp | HOME | - | = |
173 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
174 * | left | down | right | PrScr | SHIFT | CTRL | PgDn | END | [ | ] |
175 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
176 * | P-Brk | | | | | | | RGUI | ALT | / |
177 * '-----------------------------------------------------------------------------------------'
178 */
179 [DIR] = LAYOUT_ortho_3x10( /* Directional Modifiers */
180 KC_TAB, KC_UP, _______, KC_INS, KC_LCTL, KC_RSFT, KC_PGUP, KC_HOME, KC_MINS, KC_EQL,
181 KC_LEFT, KC_DOWN, KC_RGHT, KC_PSCR, KC_LSFT, KC_RCTL, KC_PGDN, KC_END, KC_LBRC, KC_RBRC,
182 KC_PAUS, _______, _______, _______, _______, _______, _______, KC_RGUI, KC_LALT, KC_SLSH
183 ),
184
185 /*
186 * Numbers
187 * .-----------------------------------------------------------------------------------------.
188 * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 |
189 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
190 * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
191 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
192 * | F11 | F12 | | | | ENTER | SHIFT | GUI | ./ALT | BKSC |
193 * | | | | | | | | | |CTRLhold|
194 * '-----------------------------------------------------------------------------------------'
195 */
196 [NUM] = LAYOUT_ortho_3x10 ( /* Numbers */
197 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
198 KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
199 KC_F11, KC_F12, _______, _______, _______, KC_ENT, KC_RSFT, KC_RGUI, ALT_T(KC_DOT), CTL_T(KC_BSPC)
200 ),
201
202 /*
203 * ETC
204 * .-----------------------------------------------------------------------------------------.
205 * | ` | mUP | | | RESET | SHIFT | mUp | mDown | | \ |
206 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
207 * | mLeft | mDown | mRight | | SHIFT | mBtn3 | mBtn1 | mBtn2 | ; | ' |
208 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
209 * | Sft//Cp| | | | | C-A-D | mLeft | mRight | ALT | DEL |
210 * '-----------------------------------------------------------------------------------------'
211 */
212 [ETC] = LAYOUT_ortho_3x10( /* ETC */
213 KC_GRV, KC_MS_U, _______, _______, RESET, KC_RSFT, KC_WH_U, KC_WH_D, _______, KC_BSLS,
214 KC_MS_L, KC_MS_D, KC_MS_R, _______, KC_LSFT, KC_BTN3, KC_BTN1, KC_BTN2, KC_SCLN, KC_QUOT,
215 TD(TD_SFT_CAPS), _______, _______, _______, _______, LALT(LCTL(KC_DEL)), KC_WH_L, KC_WH_R, KC_LALT, KC_DEL
216 ),
217
218};
diff --git a/keyboards/gherkin/keymaps/wanleg/rules.mk b/keyboards/gherkin/keymaps/wanleg/rules.mk
deleted file mode 100644
index 7f2ff3327..000000000
--- a/keyboards/gherkin/keymaps/wanleg/rules.mk
+++ /dev/null
@@ -1,7 +0,0 @@
1TAP_DANCE_ENABLE = yes # Enable Tap Dance (comment if not being implemented)
2
3#If ProMicro has QMK DFU bootloader instead of Caterina,
4#run "make <keyboard>:<keymap> dfu=qmk" when compiling to ensure it is flagged properly after being flashed
5ifeq ($(strip $(dfu)), qmk)
6 BOOTLOADER = qmk-dfu
7endif \ No newline at end of file
diff --git a/layouts/community/ortho_3x10/layout.json b/layouts/community/ortho_3x10/layout.json
new file mode 100644
index 000000000..6600f32a6
--- /dev/null
+++ b/layouts/community/ortho_3x10/layout.json
@@ -0,0 +1,3 @@
1["","","","","","","","","",""],
2["","","","","","","","","",""],
3["","","","","","","","","",""]
diff --git a/layouts/community/ortho_3x10/readme.md b/layouts/community/ortho_3x10/readme.md
new file mode 100644
index 000000000..e0a31cdf6
--- /dev/null
+++ b/layouts/community/ortho_3x10/readme.md
@@ -0,0 +1,3 @@
1# ortho_3x10
2
3 LAYOUT_ortho_3x10
diff --git a/layouts/community/ortho_3x10/wanleg/config.h b/layouts/community/ortho_3x10/wanleg/config.h
new file mode 100644
index 000000000..6719a4591
--- /dev/null
+++ b/layouts/community/ortho_3x10/wanleg/config.h
@@ -0,0 +1,9 @@
1#pragma once
2
3//QMK DFU settings (ProMicro boards)
4// set top left key as bootloader mode escape key on Gherkin
5#if defined(KEYBOARD_gherkin)
6#define QMK_LED B0
7#define QMK_ESC_OUTPUT B4 // usually COL
8#define QMK_ESC_INPUT F7 // usually ROW
9#endif
diff --git a/layouts/community/ortho_3x10/wanleg/keymap.c b/layouts/community/ortho_3x10/wanleg/keymap.c
new file mode 100644
index 000000000..44be300a4
--- /dev/null
+++ b/layouts/community/ortho_3x10/wanleg/keymap.c
@@ -0,0 +1,29 @@
1#include QMK_KEYBOARD_H
2#include "wanleg.h"
3
4const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
5[gGK] = LAYOUT_ortho_3x10_wrapper(
6 _______________Gherkin_Row_0_______________,
7 _______________Gherkin_Row_1_______________,
8 _______________Gherkin_Row_2_______________
9),
10
11[gNUM] = LAYOUT_ortho_3x10_wrapper(
12 _______________Gherkin_NUM_0_______________,
13 _______________Gherkin_NUM_1_______________,
14 _______________Gherkin_NUM_2_______________
15),
16
17[gDIR] = LAYOUT_ortho_3x10_wrapper(
18 _______________Gherkin_DIR_0_______________,
19 _______________Gherkin_DIR_1_______________,
20 _______________Gherkin_DIR_2_______________
21),
22
23[gETC] = LAYOUT_ortho_3x10_wrapper(
24 _______________Gherkin_ETC_0_______________,
25 _______________Gherkin_ETC_1_______________,
26 _______________Gherkin_ETC_2_______________
27),
28
29};
diff --git a/keyboards/gherkin/keymaps/wanleg/readme.md b/layouts/community/ortho_3x10/wanleg/readme.md
index 0b1b099c4..ef6c1f9db 100644
--- a/keyboards/gherkin/keymaps/wanleg/readme.md
+++ b/layouts/community/ortho_3x10/wanleg/readme.md
@@ -1,7 +1,7 @@
1![Gherkin Wanleg Layout Image](https://i.imgur.com/nCPog2W.png) 1![Gherkin Wanleg Layout Image](https://i.imgur.com/nCPog2W.png)
2# Gherkin Wanleg Layout 2# Gherkin Wanleg Layout
3This is the layout I came up with to preserve a standard QWERTY 104 key ANSI layout as much as possible, in as few layers as possible for a 30 key board. 3This is the layout I came up with to preserve a standard QWERTY 104 key ANSI layout as much as possible, in as few layers as possible for a 30 key board.
4I originally set up a few Tap Dance keys, but dropped half of them in favor of chorded versions since in actual use, they tended to impede typing speed more than their current two-key versions. 4I originally set up a few Tap Dance keys, but dropped half of them in favor of chorded versions since in actual use, they tended to impede typing speed more than their current two-key versions.
5I've left them in my `keymap.c` ready for use if anyone wants to try them out: 5I've left them in my `keymap.c` ready for use if anyone wants to try them out:
6 6
7Legend Name | Single Tap | Double Tap | Hold 7Legend Name | Single Tap | Double Tap | Hold
@@ -57,7 +57,7 @@ The instructions below have been adapted from https://www.reddit.com/r/olkb/comm
57| 5V | VCC | 57| 5V | VCC |
58 58
59## Make the QMK DFU .hex 59## Make the QMK DFU .hex
603. In `config.h` add the following. This is already set up in `qmk_firmware/keyboards/gherkin/wanleg`. You only need to do this on other keymaps. 603. In `config.h` add the following. This is already set up in `qmk_firmware/layouts/community/ortho_3x10/wanleg`. You only need to do this on other keymaps.
61``` 61```
62#define QMK_ESC_OUTPUT B4 62#define QMK_ESC_OUTPUT B4
63#define QMK_ESC_INPUT F7 63#define QMK_ESC_INPUT F7
@@ -68,12 +68,10 @@ You hit the bootloader escape key to exit bootloader mode after you've hit the R
68On a Gherkin, B4/F7 corresponds to the top-left corner key. 68On a Gherkin, B4/F7 corresponds to the top-left corner key.
69`B0` is an indicator light on one of the ProMicro's onboard LEDs. With QMK DFU, it will flash to indicate the ProMicro is in bootloader mode. 69`B0` is an indicator light on one of the ProMicro's onboard LEDs. With QMK DFU, it will flash to indicate the ProMicro is in bootloader mode.
70You can add `#define QMK_SPEAKER C6` if you have a speaker hooked up to pin C6. The Gherkin PCB already uses pin C6 in its switch layout, so you cannot use a speaker on a standard Gherkin. 70You can add `#define QMK_SPEAKER C6` if you have a speaker hooked up to pin C6. The Gherkin PCB already uses pin C6 in its switch layout, so you cannot use a speaker on a standard Gherkin.
714. Also, you should add `BOOTLOADER = qmk-dfu` to your `rules.mk` file, so it is flagged properly. Again, this is already set up in `qmk_firmware/keyboards/gherkin/wanleg`. 714. Also, you should add `BOOTLOADER = qmk-dfu` to your `rules.mk` file, so it is flagged properly. Again, this is already set up in `qmk_firmware/layouts/community/ortho_3x10/wanleg`.
725. Once you've made the required edits, it's time to compile the firmware. If you use the `:production` target when compiling, it will produce the usual `.hex` file as well as `_bootloader.hex` and `_production.hex` files. The `_production.hex` will be what we want. This contains the bootloader and the firmware, so we only have to flash once (rather than flash the bootloader, and THEN flash the firmware). 725. Once you've made the required edits, it's time to compile the firmware. If you use the `:production` target when compiling, it will produce the usual `.hex` file as well as `_bootloader.hex` and `_production.hex` files. The `_production.hex` will be what we want. This contains the bootloader and the firmware, so we only have to flash once (rather than flash the bootloader, and THEN flash the firmware).
73For example 73For example
74`make <keyboard>:<keymap>:production` 74`make <keyboard>:<keymap>:production`
75For my particular keymap, for reasons listed in the **Using QMK DFU** section, you should use the following to ensure the bootloader is set properly
76`make gherkin:wanleg:production dfu=qmk`
77 75
78## Burn QMK DFU 76## Burn QMK DFU
796. Navigate to the directory with your `_production.hex` file, and burn it with the following command 776. Navigate to the directory with your `_production.hex` file, and burn it with the following command
@@ -82,5 +80,4 @@ Change `comPORT` to whatever port is used by the Arduino (e.g. `com11` in Window
82 80
83## Using QMK DFU 81## Using QMK DFU
847. Once QMK DFU is burned to your ProMicro, you can then flash subsequent hex files with 827. Once QMK DFU is burned to your ProMicro, you can then flash subsequent hex files with
85`make gherkin:<keymap>:dfu dfu=qmk` 83`make gherkin:<keymap>:dfu`
86The `dfu=qmk` conditional will set `BOOTLOADER = qmk-dfu` instead of `BOOTLOADER = caterina`
diff --git a/layouts/community/ortho_3x10/wanleg/rules.mk b/layouts/community/ortho_3x10/wanleg/rules.mk
new file mode 100644
index 000000000..90841d2ab
--- /dev/null
+++ b/layouts/community/ortho_3x10/wanleg/rules.mk
@@ -0,0 +1,3 @@
1SWAP_HANDS_ENABLE = no
2
3BOOTLOADER = qmk-dfu \ No newline at end of file
diff --git a/layouts/community/ortho_4x12/wanleg/config.h b/layouts/community/ortho_4x12/wanleg/config.h
new file mode 100644
index 000000000..2c6fcc75f
--- /dev/null
+++ b/layouts/community/ortho_4x12/wanleg/config.h
@@ -0,0 +1,15 @@
1#ifndef CONFIG_USER_H
2#define CONFIG_USER_H
3
4//QMK DFU settings (ProMicro boards)
5// set top left key as bootloader mode escape key on Lets Split rev2
6#if defined(KEYBOARD_lets_split_rev2)
7#define QMK_LED B0
8#define QMK_ESC_OUTPUT F6 // usually COL
9#define QMK_ESC_INPUT D7 // usually ROW
10#define USE_SERIAL
11#undef USE_I2C
12#define EE_HANDS
13#endif
14
15#endif
diff --git a/layouts/community/ortho_4x12/wanleg/keymap.c b/layouts/community/ortho_4x12/wanleg/keymap.c
new file mode 100644
index 000000000..43cae711a
--- /dev/null
+++ b/layouts/community/ortho_4x12/wanleg/keymap.c
@@ -0,0 +1,67 @@
1#include QMK_KEYBOARD_H
2#include "wanleg.h"
3
4const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
5#if defined(KEYBOARD_lets_split_rev2)
6[_GK] = LAYOUT_ortho_4x12_wrapper(
7 _______________GherkinLike_0_______________,
8 _______________GherkinLike_1_______________,
9 _______________GherkinLike_2_______________,
10 _______________GherkinLike_3_OneHand_______
11),
12[ONE] = LAYOUT_ortho_4x12_wrapper(
13 _______________Qwerty_Row__0_______________,
14 _______________Qwerty_Row__1_______________,
15 _______________Qwerty_Row__2_______________,
16 KC_LCTL, KC_LGUI, KC_LALT, GHERKIN, SUBTER, SH_T(KC_SPC), KC_SPC, SUPRA, KC_RGUI, KC_RALT, KC_RGUI, KC_RCTL
17),
18#else
19[_GK] = LAYOUT_ortho_4x12_wrapper(
20 _______________GherkinLike_0_______________,
21 _______________GherkinLike_1_______________,
22 _______________GherkinLike_2_______________,
23 _______________GherkinLike_3_______________
24),
25#endif
26[_QW] = LAYOUT_ortho_4x12_wrapper(
27 _______________Qwerty_Row__0_______________,
28 _______________Qwerty_Row__1_______________,
29 _______________Qwerty_Row__2_______________,
30 _______________Qwerty_Row__3_______________
31),
32
33[SUP] = LAYOUT_ortho_4x12_wrapper(
34 ________________SUPRA_Row_0________________,
35 ________________SUPRA_Row_1________________,
36 ________________SUPRA_Row_2________________,
37 ________________SUPRA_Row_3________________
38),
39
40[SUB] = LAYOUT_ortho_4x12_wrapper(
41 _______________SUBTER_Row__0_______________,
42 _______________SUBTER_Row__1_______________,
43 _______________SUBTER_Row__2_______________,
44 _______________SUBTER_Row__3_______________
45),
46
47[NUM] = LAYOUT_ortho_4x12_wrapper(
48 _______________NUMBERS_Row_0_______________,
49 _______________NUMBERS_Row_1_______________,
50 _______________NUMBERS_Row_2_______________,
51 _______________NUMBERS_Row_3_______________
52),
53
54[DIR] = LAYOUT_ortho_4x12_wrapper(
55 _____________DIRECTIONS_Row__0_____________,
56 _____________DIRECTIONS_Row__1_____________,
57 _____________DIRECTIONS_Row__2_____________,
58 _____________DIRECTIONS_Row__3_____________
59),
60
61[ETC] = LAYOUT_ortho_4x12_wrapper(
62 ______________ETCETERA_Row__0______________,
63 ______________ETCETERA_Row__1______________,
64 ______________ETCETERA_Row__2______________,
65 ______________ETCETERA_Row__3______________
66),
67};
diff --git a/layouts/community/ortho_4x12/wanleg/readme.md b/layouts/community/ortho_4x12/wanleg/readme.md
new file mode 100644
index 000000000..2f89d1de6
--- /dev/null
+++ b/layouts/community/ortho_4x12/wanleg/readme.md
@@ -0,0 +1,24 @@
1# Let's Split Flashing
2(More information at `qmk_firmware/layouts/community/ortho_3x10/wanleg/readme.md`)
3## Make the QMK DFU .hex
4`make lets_split/rev2:wanleg:production dfu=qmk`
5
6## Burning EEPROM settings and Firmware
7Navigate to the directory with your .hex file and the `eeprom-lefthand.eep` and `eeprom-righthand.eep` files in it.
8**Burn Left Side With QMK DFU and Firmware**
9`avrdude -b 19200 -c avrisp -p m32u4 -v -e -U lock:w:0x3F:m -U efuse:w:0xC3:m -U hfuse:w:0xD9:m -U lfuse:w:0x5E:m -U eeprom:w:eeprom-lefthand.eep -P comPORT -U flash:w:YOUR_production.hex:a`
10
11**Burn Right Side With QMK DFU and Firmware**
12`avrdude -b 19200 -c avrisp -p m32u4 -v -e -U lock:w:0x3F:m -U efuse:w:0xC3:m -U hfuse:w:0xD9:m -U lfuse:w:0x5E:m -U eeprom:w:eeprom-righthand.eep -P comPORT -U flash:w:YOUR_production.hex:a`
13
14Change `comPORT` to whatever port is used by the Arduino (e.g. `com11` in Windows or `/dev/ttyACM0` in Linux). Use Device Manager in Windows to find the port being used. Use `ls /dev/tty*` in Linux. Change `YOUR_production.hex` to whatever you've created in the previous step.
15
16## Using QMK DFU
17Once QMK DFU is burned to your ProMicro, you can then flash subsequent hex files with
18`make lets_split/rev2:<keymap>:dfu dfu=qmk`
19The `dfu=qmk` conditional will set `BOOTLOADER = qmk-dfu` instead of `BOOTLOADER = caterina`
20
21---
22# JJ40
23## To Do
24- [ ] Mousekeys not working with Userspace for some reason (jj40 only) \ No newline at end of file
diff --git a/layouts/community/ortho_4x12/wanleg/rules.mk b/layouts/community/ortho_4x12/wanleg/rules.mk
new file mode 100644
index 000000000..79929689c
--- /dev/null
+++ b/layouts/community/ortho_4x12/wanleg/rules.mk
@@ -0,0 +1,6 @@
1AUDIO_ENABLE = no
2SWAP_HANDS_ENABLE = yes
3
4ifeq ($(strip $(KEYBOARD)), jj40)
5 SWAP_HANDS_ENABLE = no
6endif \ No newline at end of file
diff --git a/layouts/community/ortho_5x15/wanleg/config.h b/layouts/community/ortho_5x15/wanleg/config.h
new file mode 100644
index 000000000..a55fc6a3e
--- /dev/null
+++ b/layouts/community/ortho_5x15/wanleg/config.h
@@ -0,0 +1,3 @@
1#ifndef CONFIG_USER_H
2#define CONFIG_USER_H
3#endif
diff --git a/layouts/community/ortho_5x15/wanleg/keymap.c b/layouts/community/ortho_5x15/wanleg/keymap.c
new file mode 100644
index 000000000..7731edb6a
--- /dev/null
+++ b/layouts/community/ortho_5x15/wanleg/keymap.c
@@ -0,0 +1,176 @@
1#include QMK_KEYBOARD_H
2#include "wanleg.h"
3
4#define _________________BLANK_75__________________ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
5#define _________________Num_Row_75________________ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NLCK
6
7const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
8 /* QWERTY 75
9 * .--------------------------------------------------------------------------------------------------------------------------------------.
10 * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | NUMLOCK| gherkin| | FN |
11 * |-----------------------------------------------------------------------------------------------------------+--------+--------+--------|
12 * | | 7 | 8 | 9 |
13 * | |--------+--------+--------|
14 * | 4x12 QWERTY LAYOUT | 4 | 5 | 6 |
15 * | |--------+--------+--------|
16 * | | 1 | 2 | 3 |
17 * | |--------+--------+--------|
18 * | | 0 | 0 | . |
19 * '--------------------------------------------------------------------------------------------------------------------------------------'
20 */
21[QW75] = LAYOUT_ortho_5x15_wrapper(
22 _________________Num_Row_75________________, GHERKIN75, XXXXXXX, FUNCTION75,
23 _______________Qwerty_Row__0_______________, KC_KP_7, KC_KP_8, KC_KP_9,
24 _______________Qwerty_Row__1_______________, KC_KP_4, KC_KP_5, KC_KP_6,
25 _______________Qwerty_Row__2_______________, KC_KP_1, KC_KP_2, KC_KP_3,
26 KC_LCTL, KC_LGUI, KC_LALT, KC_LALT, SUBTER75, KC_LSFT, KC_SPC, SUPRA75, KC_RGUI, KC_RALT, KC_DEL, KC_RCTL, KC_KP_0, KC_KP_0, KC_KP_DOT
27),
28
29 /* Gherkin 75
30 * .--------------------------------------------------------------------------------------------------------------------------------------.
31 * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | NUMLOCK| qwerty | | FN |
32 * |-----------------------------------------------------------------------------------------------------------+--------+--------+--------|
33 * | | 7 | 8 | 9 |
34 * | |--------+--------+--------|
35 * | 4x12 GHERKIN LAYOUT | 4 | 5 | 6 |
36 * | |--------+--------+--------|
37 * | | 1 | 2 | 3 |
38 * | |--------+--------+--------|
39 * | | 0 | 0 | . |
40 * '--------------------------------------------------------------------------------------------------------------------------------------'
41 */
42[GK75] = LAYOUT_ortho_5x15_wrapper(
43 _________________Num_Row_75________________, QWERTY75, XXXXXXX, FUNCTION75,
44 _______________GherkinLike_0_______________, KC_KP_7, KC_KP_8, KC_KP_9,
45 _______________GherkinLike_1_______________, KC_KP_4, KC_KP_5, KC_KP_6,
46 TD(TD_SFT_CAPS), SFT_T(KC_Z), KC_X, KC_C, LT(NUM75, KC_V), LT(ETC75, KC_B), KC_N, LT(DIR75, KC_M), GUI_T(KC_COMM), ALT_T(KC_DOT), CTL_T(KC_BSPC), SFT_T(KC_ENT), KC_KP_1, KC_KP_2, KC_KP_3,
47 KC_LCTL, KC_LGUI, KC_LALT, KC_LALT, NUMBER75, ETCETERA75, KC_SPC,DIRECTION75, KC_RGUI, KC_RALT, KC_DEL, KC_RCTL, KC_KP_0, KC_KP_0, KC_KP_DOT
48),
49
50 /* SUBTER75
51 * .--------------------------------------------------------------------------------------------------------------------------------------.
52 * | SUBTER ROW 0 LAYOUT | | | |
53 * |-----------------------------------------------------------------------------------------------------------+--------+-----------------|
54 * | | / | * | - |
55 * | |--------+--------+--------|
56 * | 4x12 SUBTER LAYOUT | | | + |
57 * | |--------+--------+--------|
58 * | | | | ENTER |
59 * | |--------+--------+--------|
60 * | | | | |
61 * '--------------------------------------------------------------------------------------------------------------------------------------'
62 */
63[SUB75] = LAYOUT_ortho_5x15_wrapper(
64 _______________SUBTER_Row__0_______________, _______, _______, _______,
65 _______________SUBTER_Row__0_______________, KC_PSLS, KC_PAST, KC_PMNS,
66 _______________SUBTER_Row__1_______________, _______, _______, KC_PPLS,
67 _______________SUBTER_Row__2_______________, _______, _______, KC_PENT,
68 _______, _______, GHERKIN75, _______, _______, _______, KC_ENT, KC_LSFT, _______, _______, _______, _______, _______, _______, _______
69),
70
71/* SUPRA75
72 * .--------------------------------------------------------------------------------------------------------------------------------------.
73 * | | | | | | | | | | | | | | | |
74 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
75 * | | | | |
76 * | |--------+--------+--------|
77 * | 4x12 SUPRA LAYOUT | | | |
78 * | |--------+--------+--------|
79 * | | | | |
80 * | |--------+--------+--------|
81 * | | | | |
82 * '--------------------------------------------------------------------------------------------------------------------------------------'
83 */
84[SUP75] = LAYOUT_ortho_5x15_wrapper(
85 _________________BLANK_75__________________,
86 ________________SUPRA_Row_0________________, _______, _______, _______,
87 ________________SUPRA_Row_1________________, _______, _______, _______,
88 ________________SUPRA_Row_2________________, _______, _______, _______,
89 _________________BLANK_75__________________
90),
91
92/* Gherkin 75 Numbers
93 * .--------------------------------------------------------------------------------------------------------------------------------------.
94 * | | | | | | | | | | | | | | | |
95 * |-----------------------------------------------------------------------------------------------------------|--------+-----------------|
96 * | | / | * | - |
97 * | |--------+--------+--------|
98 * | 4x12 NUMBERS LAYOUT | | | + |
99 * | |--------+--------+--------|
100 * | | | | ENTER |
101 * | |--------+--------+--------|
102 * | | | | |
103 * '--------------------------------------------------------------------------------------------------------------------------------------'
104 */
105[NUM75] = LAYOUT_ortho_5x15_wrapper(
106 _________________BLANK_75__________________,
107 _______________NUMBERS_Row_0_______________, KC_PSLS, KC_PAST, KC_PMNS,
108 _______________NUMBERS_Row_1_______________, _______, _______, KC_PPLS,
109 _______________NUMBERS_Row_2_______________, _______, _______, KC_PENT,
110 _______________NUMBERS_Row_3_______________, _______, _______, _______
111),
112
113/* Gherkin 75 Et Cetera
114 * .--------------------------------------------------------------------------------------------------------------------------------------.
115 * | | | | | | | | | | | | | | | |
116 * |-----------------------------------------------------------------------------------------------------------|--------+-----------------|
117 * | | | | |
118 * | |--------+--------+--------|
119 * | 4x12 ETCETERA LAYOUT | | | |
120 * | |--------+--------+--------|
121 * | | | | |
122 * | |--------+--------+--------|
123 * | | | | |
124 * '--------------------------------------------------------------------------------------------------------------------------------------'
125 */
126[ETC75] = LAYOUT_ortho_5x15_wrapper(
127 _________________BLANK_75__________________,
128 ______________ETCETERA_Row__0______________, _______, _______, _______,
129 ______________ETCETERA_Row__1______________, _______, _______, _______,
130 ______________ETCETERA_Row__2______________, _______, _______, _______,
131 ______________ETCETERA_Row__3______________, _______, _______, _______
132),
133
134/* Gherkin 75 Directional Keys
135 * .--------------------------------------------------------------------------------------------------------------------------------------.
136 * | | | | | | | | | | | | | | | |
137 * |-----------------------------------------------------------------------------------------------------------|--------+-----------------|
138 * | | | | |
139 * | |--------+--------+--------|
140 * | 4x12 DIRECTIONAL LAYOUT | | | |
141 * | |--------+--------+--------|
142 * | | | | |
143 * | |--------+--------+--------|
144 * | | | | |
145 * '--------------------------------------------------------------------------------------------------------------------------------------'
146 */
147[DIR75] = LAYOUT_ortho_5x15_wrapper(
148 _________________BLANK_75__________________,
149 _____________DIRECTIONS_Row__0_____________, _______, _______, _______,
150 _____________DIRECTIONS_Row__1_____________, _______, _______, _______,
151 _____________DIRECTIONS_Row__2_____________, _______, _______, _______,
152 _______, _______, QWERTY75, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
153),
154
155
156/* FUNCTION 75
157 * .--------------------------------------------------------------------------------------------------------------------------------------.
158 * | | | | | | | | | | | | | | | |
159 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
160 * | | | | | | | | | | | | | | | |
161 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
162 * | CAP LK | MS BT5 | MS BT4 | MS BT3 | MS BT2 | SLOW M | FAST M | NEXT | VOL+ | VOL- | PLAY | | | | WHEEL+ |
163 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
164 * | RGB TG | RGB MD | RGB HI | RGB HD | RGB SI | RGB SD | RGB VI | RGB VD | BL TOG | BL INC | BL DEC | | | MOUS U | WHEEL- |
165 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
166 * | | | | | | | MS BT1 | | | | | | MOUS L | MOUS D | MOUS R |
167 * '--------------------------------------------------------------------------------------------------------------------------------------'
168 */
169[FN75] = LAYOUT_ortho_5x15_wrapper(
170 _________________BLANK_75__________________,
171 _________________BLANK_75__________________,
172 KC_CAPS, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, KC_ACL0, KC_ACL2, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, _______, _______, KC_WH_U,
173 RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, BL_TOGG, BL_INC, BL_DEC, _______, _______, KC_MS_U, KC_WH_D,
174 _______, _______, _______, _______, _______, _______, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R
175),
176};
diff --git a/layouts/community/ortho_5x15/wanleg/rules.mk b/layouts/community/ortho_5x15/wanleg/rules.mk
new file mode 100644
index 000000000..e36226fb2
--- /dev/null
+++ b/layouts/community/ortho_5x15/wanleg/rules.mk
@@ -0,0 +1 @@
SWAP_HANDS_ENABLE = no \ No newline at end of file
diff --git a/users/wanleg/config.h b/users/wanleg/config.h
new file mode 100644
index 000000000..22073449b
--- /dev/null
+++ b/users/wanleg/config.h
@@ -0,0 +1,32 @@
1#ifndef USERSPACE_CONFIG_H
2#define USERSPACE_CONFIG_H
3
4#define PREVENT_STUCK_MODIFIERS
5
6//TAPPING_TERM
7#ifdef TAP_DANCE_ENABLE
8#define TAPPING_TERM 200
9#endif
10
11//Mousekey Settings
12#ifdef MOUSEKEY_ENABLE
13#define MOUSEKEY_INTERVAL 16
14#define MOUSEKEY_DELAY 0
15#define MOUSEKEY_TIME_TO_MAX 60
16#define MOUSEKEY_MAX_SPEED 7
17#define MOUSEKEY_WHEEL_DELAY 0
18#endif
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#define NO_ACTION_ONESHOT
31
32#endif // !USERSPACE_CONFIG_H
diff --git a/users/wanleg/readme.md b/users/wanleg/readme.md
new file mode 100644
index 000000000..f687b92f4
--- /dev/null
+++ b/users/wanleg/readme.md
@@ -0,0 +1,14 @@
1Copyright 2018 Brian Fong @wanleg
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/wanleg/rules.mk b/users/wanleg/rules.mk
new file mode 100644
index 000000000..8dcc911ce
--- /dev/null
+++ b/users/wanleg/rules.mk
@@ -0,0 +1,19 @@
1ifeq ($(strip $(KEYBOARD)), lets_split_rev2)
2SRC += ../../keyboards/lets_split/lets_split.c
3endif
4
5SRC += wanleg.c tapdances.c
6
7ifndef TAP_DANCE_ENABLE
8TAP_DANCE_ENABLE = yes
9endif
10
11ifndef MOUSEKEY_ENABLE
12MOUSEKEY_ENABLE = yes
13endif
14
15#If using a ProMicro and it has the QMK DFU bootloader instead of Caterina,
16#run "make <keyboard>:<keymap> dfu=qmk" when compiling to ensure it is flagged properly after being flashed
17ifeq ($(strip $(dfu)), qmk)
18 BOOTLOADER = qmk-dfu
19endif
diff --git a/users/wanleg/tapdances.c b/users/wanleg/tapdances.c
new file mode 100644
index 000000000..318810b1b
--- /dev/null
+++ b/users/wanleg/tapdances.c
@@ -0,0 +1,110 @@
1//Tap Dance Settings
2#include "wanleg.h"
3
4///// QUAD FUNCTION TAP DANCE GENERAL SETUP SECTION START /////
5///// (no need to edit this section) /////
6//Enums used to clearly convey the state of the tap dance
7enum {
8 SINGLE_TAP = 1,
9 SINGLE_HOLD = 2,
10 DOUBLE_TAP = 3,
11 DOUBLE_HOLD = 4,
12 DOUBLE_SINGLE_TAP = 5 //send SINGLE_TAP twice - NOT DOUBLE_TAP
13 // Add more enums here if you want for triple, quadruple, etc.
14};
15
16typedef struct {
17 bool is_press_action;
18 int state;
19} tap;
20
21int cur_dance (qk_tap_dance_state_t *state) {
22 if (state->count == 1) {
23 //If count = 1, and it has been interrupted - it doesn't matter if it is pressed or not: Send SINGLE_TAP
24 if (state->interrupted || !state->pressed) return SINGLE_TAP;
25 if (state->interrupted) return SINGLE_TAP;
26 else return SINGLE_HOLD;
27 }
28 //If count = 2, and it has been interrupted - assume that user is trying to type the letter associated
29 //with single tap.
30 else if (state->count == 2) {
31 if (state->interrupted) return DOUBLE_SINGLE_TAP;
32 else if (state->pressed) return DOUBLE_HOLD;
33 else return DOUBLE_TAP;
34 }
35 else return 6; //magic number. At some point this method will expand to work for more presses
36}
37///// QUAD FUNCTION TAP DANCE GENERAL SETUP SECTION END /////
38///// QUAD FUNCTION TAP DANCE PERSONALIZATION SECTION START /////
39//instantialize an instance of 'tap' for the 'ENT' tap dance.
40static tap ENTtap_state = {
41 .is_press_action = true,
42 .state = 0
43};
44
45void ENT_finished (qk_tap_dance_state_t *state, void *user_data) {
46 ENTtap_state.state = cur_dance(state);
47 switch (ENTtap_state.state) {
48 case SINGLE_TAP: register_code(KC_SPC); break;
49 case SINGLE_HOLD: register_code(KC_LSFT); break;
50 case DOUBLE_TAP: register_code(KC_ENT); break;
51 case DOUBLE_HOLD: register_code(KC_NO); break; // setting double hold to do nothing (change this if you want)
52 case DOUBLE_SINGLE_TAP: register_code(KC_SPC); unregister_code(KC_SPC); register_code(KC_SPC);
53 //Last case is for fast typing. Assuming your key is `f`:
54 //For example, when typing the word `buffer`, and you want to make sure that you send `ff` and not `Esc`.
55 //In order to type `ff` when typing fast, the next character will have to be hit within the `TAPPING_TERM`, which by default is 200ms.
56 }
57}
58
59void ENT_reset (qk_tap_dance_state_t *state, void *user_data) {
60 switch (ENTtap_state.state) {
61 case SINGLE_TAP: unregister_code(KC_SPC); break;
62 case SINGLE_HOLD: unregister_code(KC_LSFT); break;
63 case DOUBLE_TAP: unregister_code(KC_ENT); break;
64 case DOUBLE_HOLD: unregister_code(KC_NO);
65 case DOUBLE_SINGLE_TAP: unregister_code(KC_SPC);
66 }
67 ENTtap_state.state = 0;
68}
69
70//instanalize an instance of 'tap' for the 'DEL' tap dance.
71static tap DELtap_state = {
72 .is_press_action = true,
73 .state = 0
74};
75
76void DEL_finished (qk_tap_dance_state_t *state, void *user_data) {
77 DELtap_state.state = cur_dance(state);
78 switch (DELtap_state.state) {
79 case SINGLE_TAP: register_code(KC_BSPC); break;
80 case SINGLE_HOLD: register_code(KC_LCTL); break;
81 case DOUBLE_TAP: register_code(KC_DEL); break;
82 case DOUBLE_HOLD: register_code(KC_NO); break;
83 case DOUBLE_SINGLE_TAP: register_code(KC_BSPC); unregister_code(KC_BSPC); register_code(KC_BSPC);
84 }
85}
86
87void DEL_reset (qk_tap_dance_state_t *state, void *user_data) {
88 switch (DELtap_state.state) {
89 case SINGLE_TAP: unregister_code(KC_BSPC); break;
90 case SINGLE_HOLD: unregister_code(KC_LCTL); break;
91 case DOUBLE_TAP: unregister_code(KC_DEL); break;
92 case DOUBLE_HOLD: unregister_code(KC_NO);
93 case DOUBLE_SINGLE_TAP: unregister_code(KC_BSPC);
94 }
95 DELtap_state.state = 0;
96}
97///// QUAD FUNCTION TAP DANCE PERSONALIZATION SECTION END /////
98
99//Tap Dance Definitions
100//THIS SECTION HAS TO BE AT THE END OF THE TAP DANCE SECTION
101qk_tap_dance_action_t tap_dance_actions[] = {
102 [TD_SFT_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS)
103// Other declarations would go here, separated by commas, if you have them
104 ,[TD_Q_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_ESC)
105 ,[ENT_TAP_DANCE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ENT_finished, ENT_reset)
106 ,[DEL_TAP_DANCE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, DEL_finished, DEL_reset)
107};
108
109//In Layer declaration, add tap dance item in place of a key code
110//TD(TD_SFT_CAPS) \ No newline at end of file
diff --git a/users/wanleg/wanleg.c b/users/wanleg/wanleg.c
new file mode 100644
index 000000000..0175ae201
--- /dev/null
+++ b/users/wanleg/wanleg.c
@@ -0,0 +1,158 @@
1#include "wanleg.h"
2
3// Defines actions for my global custom keycodes. Defined in wanleg.h file
4// Then runs the _keymap's record handier if not processed here
5bool process_record_user(uint16_t keycode, keyrecord_t *record) {
6 switch (keycode) {
7 case QWERTY:
8 if (record->event.pressed) {
9 print("mode just switched to qwerty and this is a huge string\n");
10 set_single_persistent_default_layer(_QW);
11 }
12 return false;
13 break;
14 case GHERKIN:
15 if (record->event.pressed) {
16 set_single_persistent_default_layer(_GK);
17 }
18 return false;
19 break;
20 case gGHERKIN:
21 if (record->event.pressed) {
22 set_single_persistent_default_layer(gGK);
23 }
24 return false;
25 break;
26 case ONEHAND:
27 if (record->event.pressed) {
28 set_single_persistent_default_layer(ONE);
29 }
30 return false;
31 break;
32 case QWERTY75:
33 if (record->event.pressed) {
34 set_single_persistent_default_layer(QW75);
35 }
36 return false;
37 break;
38 case GHERKIN75:
39 if (record->event.pressed) {
40 set_single_persistent_default_layer(GK75);
41 }
42 return false;
43 break;
44 case SUBTER:
45 if (record->event.pressed) {
46 layer_on(SUB);
47 } else {
48 layer_off(SUB);
49 }
50 return false;
51 break;
52 case SUPRA:
53 if (record->event.pressed) {
54 layer_on(SUP);
55 } else {
56 layer_off(SUP);
57 }
58 return false;
59 break;
60 case NUMBER:
61 if (record->event.pressed) {
62 layer_on(NUM);
63 } else {
64 layer_off(NUM);
65 }
66 return false;
67 break;
68 case DIRECTION:
69 if (record->event.pressed) {
70 layer_on(DIR);
71 } else {
72 layer_off(DIR);
73 }
74 return false;
75 break;
76 case ETCETERA:
77 if (record->event.pressed) {
78 layer_on(ETC);
79 } else {
80 layer_off(ETC);
81 }
82 return false;
83 break;
84 case gNUMBER:
85 if (record->event.pressed) {
86 layer_on(gNUM);
87 } else {
88 layer_off(gNUM);
89 }
90 return false;
91 break;
92 case gDIRECTION:
93 if (record->event.pressed) {
94 layer_on(gDIR);
95 } else {
96 layer_off(gDIR);
97 }
98 return false;
99 break;
100 case gETCETERA:
101 if (record->event.pressed) {
102 layer_on(gETC);
103 } else {
104 layer_off(gETC);
105 }
106 return false;
107 break;
108 case SUBTER75:
109 if (record->event.pressed) {
110 layer_on(SUB75);
111 } else {
112 layer_off(SUB75);
113 }
114 return false;
115 break;
116 case SUPRA75:
117 if (record->event.pressed) {
118 layer_on(SUP75);
119 } else {
120 layer_off(SUP75);
121 }
122 return false;
123 break;
124 case NUMBER75:
125 if (record->event.pressed) {
126 layer_on(NUM75);
127 } else {
128 layer_off(NUM75);
129 }
130 return false;
131 break;
132 case DIRECTION75:
133 if (record->event.pressed) {
134 layer_on(DIR75);
135 } else {
136 layer_off(DIR75);
137 }
138 return false;
139 break;
140 case ETCETERA75:
141 if (record->event.pressed) {
142 layer_on(ETC75);
143 } else {
144 layer_off(ETC75);
145 }
146 return false;
147 break;
148 case FUNCTION75:
149 if (record->event.pressed) {
150 layer_on(FN75);
151 } else {
152 layer_off(FN75);
153 }
154 return false;
155 break;
156 }
157 return true;
158}
diff --git a/users/wanleg/wanleg.h b/users/wanleg/wanleg.h
new file mode 100644
index 000000000..da14dcdf5
--- /dev/null
+++ b/users/wanleg/wanleg.h
@@ -0,0 +1,308 @@
1#ifndef USERSPACE
2#define USERSPACE
3
4#include "quantum.h"
5
6// Define layer names and order
7#ifdef KEYBOARD_gherkin
8enum userspace_layers {
9 gGK = 0,
10 gNUM,
11 gDIR,
12 gETC,
13 _GK,
14 _QW,
15 QW75,
16 GK75,
17 ONE,
18 SUB,
19 SUP,
20 NUM,
21 DIR,
22 ETC,
23 SUB75,
24 SUP75,
25 NUM75,
26 DIR75,
27 ETC75,
28 FN75
29};
30#elif KEYBOARD_xd75
31enum userspace_layers {
32 GK75 = 0,
33 QW75,
34 SUB75,
35 SUP75,
36 NUM75,
37 DIR75,
38 ETC75,
39 FN75,
40 gGK,
41 _GK,
42 _QW,
43 ONE,
44 SUB,
45 SUP,
46 NUM,
47 DIR,
48 ETC,
49 gNUM,
50 gDIR,
51 gETC,
52};
53#else
54 enum userspace_layers {
55 _GK = 0,
56 _QW,
57 QW75,
58 GK75,
59 gGK,
60 ONE,
61 SUB,
62 SUP,
63 NUM,
64 DIR,
65 ETC,
66 gNUM,
67 gDIR,
68 gETC,
69 SUB75,
70 SUP75,
71 NUM75,
72 DIR75,
73 ETC75,
74 FN75
75};
76#endif
77
78enum userspace_custom_keycodes {
79 gGHERKIN = SAFE_RANGE,
80 GHERKIN,
81 QWERTY,
82 QWERTY75,
83 GHERKIN75,
84 ONEHAND,
85 SUBTER,
86 SUPRA,
87 NUMBER,
88 DIRECTION,
89 ETCETERA,
90 gNUMBER,
91 gDIRECTION,
92 gETCETERA,
93 SUBTER75,
94 SUPRA75,
95 NUMBER75,
96 DIRECTION75,
97 ETCETERA75,
98 FUNCTION75
99
100};
101
102//Tap Dance Declarations (list of my tap dance configurations)
103#ifdef TAP_DANCE_ENABLE
104enum {
105 TD_SFT_CAPS = 0
106 ,TD_Q_ESC
107 ,ENT_TAP_DANCE
108 ,DEL_TAP_DANCE
109};
110#endif
111
112// Since our quirky block definitions are basically a list of comma separated
113// arguments, we need a wrapper in order for these definitions to be
114// expanded before being used as arguments to the LAYOUT_xxx macro.
115#if (!defined(LAYOUT) && defined(KEYMAP))
116#define LAYOUT KEYMAP
117#endif
118
119#define KEYMAP_wrapper(...) LAYOUT(__VA_ARGS__)
120#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
121#define LAYOUT_ortho_3x10_wrapper(...) LAYOUT_ortho_3x10(__VA_ARGS__)
122#define LAYOUT_ortho_4x12_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__)
123#define LAYOUT_ortho_5x15_wrapper(...) LAYOUT_ortho_5x15(__VA_ARGS__)
124
125// Blocks for each of the major keyboard layouts
126// Organized so we can quickly adapt and modify all of them
127// at once, rather than for each keyboard, one at a time.
128// And this allows for much cleaner blocks in the keymaps.
129
130// NOTE: These are all the same length. If you do a search/replace
131// then you need to add/remove underscores to keep the
132// lengths consistent.
133
134
135/* Pure Gherkin
136 * .-----------------------------------------------------------------------------------------.
137 * | Q//ESC | W | E | R | T | Y | U | I | O | P |
138 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
139 * | A | S | D | F | G | H | J | K | L | SPACE |
140 * | | | | | | | | | |SFThold |
141 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
142 * | Z | X | C | V/gNUM | B/gETC | N | M/gDIR | ,/GUI | ./ALT | BKSC |
143 * | SFThold| | | | | | | | |CTRLhold|
144 * '-----------------------------------------------------------------------------------------'
145 */
146#define _______________Gherkin_Row_0_______________ TD(TD_Q_ESC), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P
147#define _______________Gherkin_Row_1_______________ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SFT_T(KC_SPC)
148#define _______________Gherkin_Row_2_______________ SFT_T(KC_Z), KC_X, KC_C, LT(gNUM,KC_V), LT(gETC,KC_B), KC_N, LT(gDIR,KC_M), GUI_T(KC_COMM), ALT_T(KC_DOT), CTL_T(KC_BSPC)
149
150/* Directional Keys
151 * .-----------------------------------------------------------------------------------------.
152 * | TAB | up | | INS | CTRL | SHIFT | PgUp | HOME | - | = |
153 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
154 * | left | down | right | PrScr | SHIFT | CTRL | PgDn | END | [ | ] |
155 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
156 * | P-Brk | | | | | | | RGUI | ALT | / |
157 * '-----------------------------------------------------------------------------------------'
158 */
159#define _______________Gherkin_DIR_0_______________ KC_TAB, KC_UP, _______, KC_INS, KC_LCTL, KC_RSFT, KC_PGUP, KC_HOME, KC_MINS, KC_EQL
160#define _______________Gherkin_DIR_1_______________ KC_LEFT, KC_DOWN, KC_RGHT, KC_PSCR, KC_LSFT, KC_RCTL, KC_PGDN, KC_END, KC_LBRC, KC_RBRC
161#define _______________Gherkin_DIR_2_______________ KC_PAUS, _______, _______, _______, _______, _______, _______, KC_RGUI, KC_LALT, KC_SLSH
162
163/* Numbers
164 * .-----------------------------------------------------------------------------------------.
165 * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 |
166 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
167 * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
168 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
169 * | F11 | F12 | | | | ENTER | SHIFT | GUI | ./ALT | BKSC |
170 * | | | | | | | | | |CTRLhold|
171 * '-----------------------------------------------------------------------------------------'
172 */
173#define _______________Gherkin_NUM_0_______________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
174#define _______________Gherkin_NUM_1_______________ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0
175#define _______________Gherkin_NUM_2_______________ KC_F11, KC_F12, _______,_______, _______, KC_ENT, KC_RSFT, KC_RGUI, ALT_T(KC_DOT), CTL_T(KC_BSPC)
176
177/* Et Cetera
178 * .-----------------------------------------------------------------------------------------.
179 * | ` | mUP | | | RESET | SHIFT | mScrUp | mScrDn | | \ |
180 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
181 * | mLeft | mDown | mRight | | SHIFT | mBtn3 | mBtn1 | mBtn2 | ; | ' |
182 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
183 * | Sft//Cp| | | | | C-A-D | mScrL | mScrR | ALT | DEL |
184 * '-----------------------------------------------------------------------------------------'
185 */
186#define _______________Gherkin_ETC_0_______________ KC_GRV, KC_MS_U, _______,_______, RESET, KC_RSFT, KC_WH_U, KC_WH_D, _______, KC_BSLS
187#define _______________Gherkin_ETC_1_______________ KC_MS_L, KC_MS_D, KC_MS_R,_______, KC_LSFT, KC_BTN3, KC_BTN1, KC_BTN2, KC_SCLN, KC_QUOT
188#define _______________Gherkin_ETC_2_______________ TD(TD_SFT_CAPS),_______, _______,_______, _______, LALT(LCTL(KC_DEL)), KC_WH_L, KC_WH_R, KC_LALT, KC_DEL
189
190/* Gherkin-Like
191 * .-----------------------------------------------------------------------------------------------------------.
192 * | ESC | Q//ESC | W | E | R | T | Y | U | I | O | P | BACKSP |
193 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
194 * | TAB | A | S | D | F | G | H | J | K | L | SPACE | ' |
195 * | | | | | | | | | | |SFThold | |
196 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
197 * |SFT/CAPS| Z | X | C | V/NUM | B/ETC | N | M/DIR | ,/GUI | ./ALT | BKSC | ENT/SFT|
198 * | |SFThold | | | | | | | | |CTRLhold| |
199 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
200 * | LCTRL | LGUI | ALT | ONEHAND| NUM | ETC | SPACE | DIR | RGUI | ALT | DEL | CTRL |
201 * '-----------------------------------------------------------------------------------------------------------'
202 */
203#define _______________GherkinLike_0_______________ KC_ESC, _______________Gherkin_Row_0_______________, KC_BSPC
204#define _______________GherkinLike_1_______________ KC_TAB, _______________Gherkin_Row_1_______________, KC_QUOT
205#define _______________GherkinLike_2_______________ TD(TD_SFT_CAPS), SFT_T(KC_Z), KC_X, KC_C, LT(NUM, KC_V),LT(ETC, KC_B),KC_N, LT(DIR, KC_M), GUI_T(KC_COMM), ALT_T(KC_DOT), CTL_T(KC_BSPC), SFT_T(KC_ENT)
206#define _______________GherkinLike_3_______________ KC_LCTL, KC_LGUI, KC_LALT, KC_LALT, NUMBER, ETCETERA, KC_SPC,DIRECTION, KC_RGUI, KC_RALT, KC_DEL, KC_RCTL
207#define _______________GherkinLike_3_OneHand_______ KC_LCTL, KC_LGUI, KC_LALT, ONEHAND, NUMBER, ETCETERA, KC_SPC,DIRECTION, KC_RGUI, KC_RALT, KC_DEL, KC_RCTL
208
209/* Qwerty
210 * .-------------------------------------------------------------------------------------.
211 * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
212 * |-------+------+------+------+------+-------------+------+------+------+------+-------|
213 * | Tab | A | S | D | F | G | H | J | K | L | ; | ' |
214 * |-------+------+------+------+------+------|------+------+------+------+------+-------|
215 * |Sft/Cps| Z | X | C | V | B | N | M | , | . | / |ENT/SFT|
216 * |-------+------+------+------+------+------+------+------+------+------+------+-------|
217 * | LCTRL | LGUI | ALT | ALT | SUB | SHIFT| SPACE| SUP | RGUI | RALT | DEL | CTRL |
218 * '-------------------------------------------------------------------------------------'
219 */
220#define _______________Qwerty_Row__0_______________ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC
221#define _______________Qwerty_Row__1_______________ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT
222#define _______________Qwerty_Row__2_______________ TD(TD_SFT_CAPS), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT)
223#define _______________Qwerty_Row__3_______________ KC_LCTL, KC_LGUI, KC_LALT, KC_LALT, SUBTER, KC_LSFT, KC_SPC, SUPRA, KC_RGUI, KC_RALT, KC_DEL, KC_RCTL
224
225/* SUPRA
226 * .-----------------------------------------------------------------------------------------------------------.
227 * | RESET | TAB | up | | INS | CTRL | SHIFT | PgUp | Home | - | = | DEL |
228 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
229 * | | left | down | right | PrScr | SHIFT | CTRL | PgDn | End | [ | ] | \ |
230 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
231 * | | P-Brk | | | | | | | RGUI | ALT | | |
232 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
233 * | | | | | | | | | | | | |
234 * '-----------------------------------------------------------------------------------------------------------'
235 */
236#define ________________SUPRA_Row_0________________ RESET, KC_TAB, KC_UP, _______, KC_INS, KC_LCTL, KC_RSFT, KC_PGUP, KC_HOME, KC_MINS, KC_EQL, KC_DEL
237#define ________________SUPRA_Row_1________________ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PSCR, KC_LSFT, KC_RCTL, KC_PGDN, KC_END, KC_LBRC, KC_RBRC, KC_BSLS
238#define ________________SUPRA_Row_2________________ _______, KC_PAUS, _______, _______, _______, _______, _______, _______, KC_RGUI, KC_RALT, _______, _______
239#define ________________SUPRA_Row_3________________ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
240
241/* SUBTER
242 * .-----------------------------------------------------------------------------------------------------------.
243 * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | DEL |
244 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
245 * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
246 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
247 * | | F11 | F12 | | | | | | RGUI | ./ALT | BKSC | |
248 * | | | | | | | | | | |CTRLhold| |
249 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
250 * | | | gherkin| | | | ENTER | SHIFT | | | | |
251 * '-----------------------------------------------------------------------------------------------------------'
252 */
253#define _______________SUBTER_Row__0_______________ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL
254#define _______________SUBTER_Row__1_______________ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______
255#define _______________SUBTER_Row__2_______________ _______, KC_F11, KC_F12, _______, _______, _______, _______, _______, KC_RGUI,ALT_T(KC_DOT), CTL_T(KC_BSPC), _______
256#define _______________SUBTER_Row__3_______________ _______, _______, GHERKIN, _______, _______, _______, KC_ENT, KC_LSFT, _______,_______, _______, _______
257
258/* Gherkin Numbers
259 * .-----------------------------------------------------------------------------------------------------------.
260 * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | DEL |
261 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
262 * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
263 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
264 * | | F11 | F12 | | | | ENTER | SHIFT | RGUI | ./ALT | BKSC | |
265 * | | | | | | | | | | |CTRLhold| |
266 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
267 * | | | | | | | ENTER | SHIFT | RGUI | | | |
268 * '-----------------------------------------------------------------------------------------------------------'
269 */
270#define _______________NUMBERS_Row_0_______________ _______, _______________Gherkin_NUM_0_______________, KC_DEL
271#define _______________NUMBERS_Row_1_______________ _______, _______________Gherkin_NUM_1_______________, _______
272#define _______________NUMBERS_Row_2_______________ _______, _______________Gherkin_NUM_2_______________, _______
273#define _______________NUMBERS_Row_3_______________ _______, _______, _______, _______, _______, _______, KC_ENT, KC_RSFT, KC_RGUI, _______, _______, _______
274
275
276/* Gherkin Directional Keys
277 * .-----------------------------------------------------------------------------------------------------------.
278 * | | TAB | up | | INS | CTRL | SHIFT | PgUp | HOME | - | = | DEL |
279 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
280 * | | left | down | right | PrScr | SHIFT | CTRL | PgDn | END | [ | ] | |
281 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
282 * | | P-Brk | | | | | | | RGUI | ALT | / | |
283 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
284 * | | | qwerty | | | | | | | | | |
285 * '-----------------------------------------------------------------------------------------------------------'
286 */
287#define _____________DIRECTIONS_Row__0_____________ _______, _______________Gherkin_DIR_0_______________, KC_DEL
288#define _____________DIRECTIONS_Row__1_____________ _______, _______________Gherkin_DIR_1_______________, _______
289#define _____________DIRECTIONS_Row__2_____________ _______, _______________Gherkin_DIR_2_______________, _______
290#define _____________DIRECTIONS_Row__3_____________ _______, _______, QWERTY, _______, _______, _______, _______, _______, _______, _______, _______, _______
291
292/* Gherkin Et Cetera
293 * .-----------------------------------------------------------------------------------------------------------.
294 * | | ` | mUP | | | RESET | SHIFT | mScrUp |mScrDown| | \ | DEL |
295 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
296 * | | mLeft | mDown | mRight | | SHIFT | mBtn3 | mBtn1 | mBtn2 | ; | ' | |
297 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
298 * | | Sft//Cp| | | | | C-A-D |mScrLeft| mScrRt | ALT | DEL | |
299 * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
300 * | | | | | | | C-A-D | | | | | |
301 * '-----------------------------------------------------------------------------------------------------------'
302 */
303#define ______________ETCETERA_Row__0______________ _______, _______________Gherkin_ETC_0_______________, KC_DEL
304#define ______________ETCETERA_Row__1______________ _______, _______________Gherkin_ETC_1_______________, _______
305#define ______________ETCETERA_Row__2______________ _______, _______________Gherkin_ETC_2_______________, _______
306#define ______________ETCETERA_Row__3______________ _______, _______, _______, _______, _______, _______, LALT(LCTL(KC_DEL)), _______, _______, _______, _______, _______
307
308#endif // !USERSPACE