aboutsummaryrefslogtreecommitdiff
path: root/keyboards/kc60
diff options
context:
space:
mode:
authorJames Young <18669334+noroadsleft@users.noreply.github.com>2021-02-10 11:17:42 -0800
committerGitHub <noreply@github.com>2021-02-10 20:17:42 +0100
commit5a73558a211383cd238587369ef043a6d5b64b88 (patch)
treee9d1d0b3c104aca439911a74d6ff6b801b2e8d78 /keyboards/kc60
parent4b2ab84c71d517b718bdf4dde0e60fc71026fac6 (diff)
downloadqmk_firmware-5a73558a211383cd238587369ef043a6d5b64b88.tar.gz
qmk_firmware-5a73558a211383cd238587369ef043a6d5b64b88.zip
[Keymap] add noroadsleft userspace; add and update keymaps (#11686)
Diffstat (limited to 'keyboards/kc60')
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/config.h16
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/keymap.c421
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/readme.md21
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/readme_ch1.md15
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/readme_ch2.md30
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/readme_ch3.md37
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/readme_ch4.md100
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/readme_ch5.md125
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/rules.mk6
9 files changed, 283 insertions, 488 deletions
diff --git a/keyboards/kc60/keymaps/noroadsleft/config.h b/keyboards/kc60/keymaps/noroadsleft/config.h
index 4490a3bb7..267407ded 100644
--- a/keyboards/kc60/keymaps/noroadsleft/config.h
+++ b/keyboards/kc60/keymaps/noroadsleft/config.h
@@ -1,3 +1,19 @@
1/* Copyright 2018-2020 James Young (@noroadsleft)
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
1#pragma once 17#pragma once
2 18
3#define PERMISSIVE_HOLD // https://docs.qmk.fm/#/feature_advanced_keycodes?id=permissive-hold 19#define PERMISSIVE_HOLD // https://docs.qmk.fm/#/feature_advanced_keycodes?id=permissive-hold
diff --git a/keyboards/kc60/keymaps/noroadsleft/keymap.c b/keyboards/kc60/keymaps/noroadsleft/keymap.c
index 84aeb482d..5ad100e0e 100644
--- a/keyboards/kc60/keymaps/noroadsleft/keymap.c
+++ b/keyboards/kc60/keymaps/noroadsleft/keymap.c
@@ -1,8 +1,23 @@
1#include QMK_KEYBOARD_H 1/* Copyright 2018-2020 James Young (@noroadsleft)
2#include "version.h" 2 *
3#include <sendstring_dvorak.h> 3 * This program is free software: you can redistribute it and/or modify
4//#include <sendstring_colemak.h> 4 * it under the terms of the GNU General Public License as published by
5#include <print.h> 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
17#include "noroadsleft.h"
18#include "sendstring_dvorak.h"
19//#include "sendstring_colemak.h"
20#include "print.h"
6 21
7 22
8/********************** 23/**********************
@@ -10,83 +25,33 @@
10**********************/ 25**********************/
11enum layer_names { 26enum layer_names {
12 // BASE LAYERS 27 // BASE LAYERS
13 // SHORT CODES 28 _QW, // QWERTY
14 _QWERTY = 0, 29 _DV, // Dvorak
15 _QW = _QWERTY, 30 _CM, // Colemak
16 _DVORAK, 31 // QUAKE 2 OVERLAY
17 _DV = _DVORAK, 32 _Q2, // Quake 2
18 _COLEMAK, 33 // FUNCTION LAYER
19 _CM = _COLEMAK, 34 _FN, // Function
20 _MAC,
21 _MC = _MAC,
22 _QUAKE2,
23 _Q2 = _QUAKE2,
24 _QUAKE2_DVORAK,
25 _QD = _QUAKE2_DVORAK,
26 _QUAKE2_CONSOLE,
27 _QC = _QUAKE2_CONSOLE,
28 // FUNCTION LAYERS
29 _FUNCWIN,
30 _FW = _FUNCWIN,
31 _FUNCMAC,
32 _FM = _FUNCMAC,
33 _FUNCQ2,
34 _FQ = _FUNCQ2,
35 // OTHER LAYERS 35 // OTHER LAYERS
36 _NUMPAD, 36 _NP, // Numpad
37 _NP = _NUMPAD, 37 _MA, // Macros
38 _MACROS, 38 _SY, // System
39 _MA = _MACROS,
40 _SYSTEM,
41 _SY = _SYSTEM,
42}; 39};
43 40
44 41
45// KEYCODE DEFINITIONS 42// KEYCODE DEFINITIONS
46#define NO_CHNG KC_TRNS // Note for me for keys I need to leave as Pass-through 43#define NO_CHNG KC_TRNS // Note for me for keys I need to leave as Pass-through
47 44
48#define FW_CAPS LT(_FUNCWIN, KC_CAPS) // _FUNCWIN when held, Caps Lock when tapped 45#define FN_CAPS LT(_FN, KC_CAPS) // Function Layer when held, Caps Lock when tapped
49#define FM_CAPS LT(_FUNCMAC, KC_CAPS) // _FUNCMAC when held, Caps Lock when tapped 46#define Q2_CAPS LT(_FQ, KC_CAPS) // Quake 2 Function Layer when held, Caps Lock when tapped
50#define Q2_CAPS LT(_FUNCQ2, KC_CAPS) // _FUNCQ2 when held, Caps Lock when tapped
51
52#define WN_SALL LCTL(DV_A) // Windows/Linux Select All
53#define WN_UNDO LCTL(DV_Z) // Windows/Linux Undo
54#define WN_CUT LCTL(DV_X) // Windows/Linux Cut
55#define WN_COPY LCTL(DV_C) // Windows/Linux Copy
56#define WN_PSTE LCTL(DV_V) // Windows/Linux Paste
57 47
58#define CTL_GRV MT(MOD_LCTL, KC_GRV) // Left Control when held, Grave accent when tapped 48#define CTL_GRV MT(MOD_LCTL, KC_GRV) // Left Control when held, Grave accent when tapped
59 49
60#define MC_PSCR LGUI(LSFT(KC_3)) // MacOS Print Screen (Command + Shift + 3)
61#define MC_HOME LGUI(KC_LEFT) // MacOS Home (Command + Left Arrow)
62#define MC_END LGUI(KC_RGHT) // MacOS End (Command + Right Arrow)
63#define MC_SALL LGUI(KC_A) // MacOS Select All
64//#define MC_UNDO LGUI(KC_Z) // MacOS Undo // replaced by macro
65#define MC_CUT LGUI(KC_X) // MacOS Cut
66#define MC_COPY LGUI(KC_C) // MacOS Copy
67//#define MC_PSTE LGUI(KC_V) // MacOS Paste // replaced by macro
68
69 50
70// MACRO DEFINITIONS 51// MACRO DEFINITIONS
71enum custom_keycodes { 52enum custom_keycodes {
72 F_CAPS = SAFE_RANGE, 53 GO_Q2 = KEYMAP_SAFE_RANGE,
73 T_L3DED, 54 Q2_ENT
74 G_PUSH,
75 G_FTCH,
76 G_COMM,
77 G_RST,
78 G_C10R,
79 G_BRCH,
80 SIGNA,
81 GO_Q2,
82 Q2_ON,
83 Q2_OFF,
84 Q2_ESC,
85 Q2_GRV,
86 MC_UNDO,
87 MC_PSTE,
88 NUBS_Z,
89 VRSN
90}; 55};
91 56
92 57
@@ -94,158 +59,90 @@ enum custom_keycodes {
94** MODIFIER MASKS ** 59** MODIFIER MASKS **
95*******************/ 60*******************/
96#define MOD_MASK_RALT (MOD_BIT(KC_RALT)) 61#define MOD_MASK_RALT (MOD_BIT(KC_RALT))
62unsigned char q2InputMode = 0;
97 63
98 64
99bool process_record_user(uint16_t keycode, keyrecord_t *record) { 65bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
100 switch(keycode) { 66 switch(keycode) {
101 // these are our macros! 67 // these are our macros!
102 case F_CAPS: 68 case GO_Q2:
103 /*
104 * Objective: write a macro that checks the current layers that are
105 * enabled, and activates the appropriate function layer.
106 */
107 if ( biton32(layer_state) == _MAC ) {
108 if (record->event.pressed) {
109 layer_on(_FUNCMAC);
110 } else {
111 layer_off(_FUNCMAC);
112 }
113 } else {
114 if (record->event.pressed) {
115 layer_on(_FUNCWIN);
116 } else {
117 layer_off(_FUNCWIN);
118 }
119 };
120 return false;
121 case T_L3DED:
122 if (record->event.pressed) {
123 SEND_STRING("lavak3DED ");
124 };
125 return false;
126 case G_PUSH:
127 if (record->event.pressed) { 69 if (record->event.pressed) {
128 SEND_STRING("git push origin "); 70 //default_layer_set(_QW);
71 layer_move(_QW); // TO(_QW);
72 layer_on(_Q2);
73 //layer_off(_SY);
129 }; 74 };
130 return false; 75 return false;
131 case G_FTCH: 76 case Q2_ENT:
132 if (record->event.pressed) { 77 if (record->event.pressed) {
133 if ( get_mods() & MOD_MASK_SHIFT ) { 78 if (q2InputMode == 0) {
134 clear_mods(); 79 tap_code(KC_ENT);
135 SEND_STRING("git pull upstream "); 80 q2InputMode = 1;
81 layer_on(_DV);
82 //layer_on(_Q2);
83 } else if (q2InputMode == 1) {
84 tap_code(KC_ENT);
85 q2InputMode = 0;
86 layer_off(_DV);
136 } else { 87 } else {
137 SEND_STRING("git fetch upstream "); 88 tap_code(KC_ENT);
138 } 89 }
139 }; 90 };
140 return false; 91 return false;
141 case G_COMM: 92 case KC_ESC:
142 if (record->event.pressed) { 93 if (record->event.pressed) {
143 SEND_STRING("git commit -m \"\"" SS_TAP(X_LEFT)); 94 if (q2InputMode > 0) {
144 layer_off(_MACROS); 95 tap_code(KC_ESC);
145 }; 96 q2InputMode = 0;
146 return false; 97 layer_off(_DV);
147 case G_BRCH:
148 if (record->event.pressed) {
149 if ( get_mods() & MOD_MASK_SHIFT ) {
150 clear_mods();
151 SEND_STRING("master");
152 } else { 98 } else {
153 SEND_STRING("$(git branch-name)"); 99 tap_code(KC_ESC);
154 } 100 }
155 layer_off(_MACROS);
156 };
157 return false;
158 case SIGNA:
159 if (record->event.pressed) {
160 SEND_STRING("\\- @noroadsleft" SS_TAP(X_ENTER));
161 layer_off(_MACROS);
162 };
163 return false;
164 case GO_Q2:
165 if (record->event.pressed) {
166 //default_layer_set(_QWERTY);
167 layer_move(_QWERTY); // TO(_QWERTY);
168 layer_on(_QUAKE2);
169 //layer_off(_SYSTEM);
170 };
171 return false;
172 case Q2_ON:
173 if (record->event.pressed) {
174 SEND_STRING(SS_TAP(X_ENTER));
175 layer_on(_DVORAK);
176 layer_on(_QUAKE2_DVORAK);
177 };
178 return false;
179 case Q2_OFF:
180 if (record->event.pressed) {
181 SEND_STRING(SS_TAP(X_ENTER));
182 layer_move(_QWERTY); // TO(_QWERTY);
183 layer_on(_QUAKE2);
184 }; 101 };
185 return false; 102 return false;
186 case Q2_ESC: 103 case KC_GRV:
187 if (record->event.pressed) { 104 if (IS_LAYER_ON(_Q2) == true) {
188 SEND_STRING(SS_TAP(X_ESCAPE)); 105 if (record->event.pressed) {
189 layer_move(_QWERTY); // TO(_QWERTY); 106 if (q2InputMode == 0) {
190 layer_on(_QUAKE2); 107 tap_code(KC_GRV);
191 }; 108 q2InputMode = 2;
192 return false; 109 layer_on(_DV);
193 case Q2_GRV: 110 } else if (q2InputMode == 1) {
194 if (record->event.pressed) { 111 tap_code(KC_GRV);
195 SEND_STRING(SS_TAP(X_GRAVE)); 112 q2InputMode = 2;
196 layer_on(_DVORAK); 113 } else {
197 layer_on(_QUAKE2_DVORAK); 114 tap_code(KC_GRV);
198 layer_on(_QUAKE2_CONSOLE); 115 q2InputMode = 0;
199 }; 116 layer_off(_DV);
200 return false; 117 }
201 case MC_UNDO:
202 if (record->event.pressed) {
203 if ( get_mods() & MOD_MASK_SHIFT ) {
204 SEND_STRING( SS_DOWN(X_LSHIFT) SS_DOWN(X_LGUI) SS_TAP(X_Z) SS_UP(X_LGUI) SS_UP(X_LSHIFT) );
205 } else {
206 SEND_STRING( SS_DOWN(X_LGUI) SS_TAP(X_Z) SS_UP(X_LGUI) );
207 }
208 };
209 return false;
210 case MC_PSTE:
211 if (record->event.pressed) {
212 if ( get_mods() & MOD_MASK_SHIFT ) {
213 SEND_STRING( SS_DOWN(X_LSHIFT) SS_DOWN(X_LGUI) SS_DOWN(X_LALT) SS_TAP(X_V) SS_UP(X_LALT) SS_UP(X_LGUI) SS_UP(X_LSHIFT) );
214 } else {
215 SEND_STRING( SS_DOWN(X_LGUI) SS_TAP(X_V) SS_UP(X_LGUI) );
216 } 118 }
217 }; 119 };
218 return false; 120 return false;
219 case NUBS_Z: 121 case KC_Z:
220 if (record->event.pressed) { 122 if (record->event.pressed) {
221 if ( get_mods() & MOD_MASK_RALT ) { 123 if ( get_mods() & MOD_MASK_RALT ) {
222 SEND_STRING( SS_DOWN(X_NONUS_BSLASH) ); 124 register_code(KC_NUBS);
223 } else { 125 } else {
224 SEND_STRING( SS_DOWN(X_Z) ); 126 register_code(KC_Z);
225 } 127 }
226 } else { 128 } else {
227 if ( get_mods() & MOD_MASK_RALT ) { 129 if ( get_mods() & MOD_MASK_RALT ) {
228 SEND_STRING( SS_UP(X_NONUS_BSLASH) ); 130 unregister_code(KC_NUBS);
229 } else { 131 } else {
230 SEND_STRING( SS_UP(X_Z) ); 132 unregister_code(KC_Z);
231 } 133 }
232 }; 134 };
233 return false; 135 return false;
234 case VRSN:
235 if (record->event.pressed) {
236 SEND_STRING( QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION );
237 }
238 return false;
239 case KC_1 ... KC_0: 136 case KC_1 ... KC_0:
240 if (record->event.pressed) { 137 if (record->event.pressed) {
241 if ( get_mods() & MOD_MASK_RALT ) { 138 if ( get_mods() & MOD_MASK_RALT ) {
242 register_code( keycode + 0x3b ); 139 register_code( keycode + 0x3B );
243 } else { 140 } else {
244 register_code( keycode ); 141 register_code( keycode );
245 } 142 }
246 } else { 143 } else {
247 if ( get_mods() & MOD_MASK_RALT ) { 144 if ( get_mods() & MOD_MASK_RALT ) {
248 unregister_code( keycode + 0x3b ); 145 unregister_code( keycode + 0x3B );
249 } else { 146 } else {
250 unregister_code( keycode ); 147 unregister_code( keycode );
251 } 148 }
@@ -279,47 +176,30 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
279 ****************/ 176 ****************/
280 177
281 /* QWERTY */ 178 /* QWERTY */
282 [_QWERTY] = LAYOUT_60_ansi( 179 [_QW] = LAYOUT_60_ansi(
283 // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 180 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
284 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ 181 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
285 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \ 182 FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
286 FW_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \ 183 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
287 KC_LSFT, NUBS_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \ 184 CTL_GRV, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_MA), MO(_FN), KC_RCTL
288 CTL_GRV, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_MA), MO(_FW), KC_RCTL \
289 ), 185 ),
290 186
291 /* Dvorak */ 187 /* Dvorak */
292 [_DVORAK] = LAYOUT_60_ansi( 188 [_DV] = LAYOUT_60_ansi(
293 // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 189 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC,
294 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, \ 190 KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS,
295 KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, \ 191 FN_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT,
296 FW_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, \ 192 KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
297 KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, \ 193 CTL_GRV, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_MA), MO(_FN), KC_RCTL
298 CTL_GRV, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_MA), MO(_FW), KC_RCTL \
299 ), 194 ),
300 195
301 /* Colemak */ 196 /* Colemak */
302 [_COLEMAK] = LAYOUT_60_ansi( 197 [_CM] = LAYOUT_60_ansi(
303 // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 198 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
304 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \ 199 KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS,
305 KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, \ 200 FN_CAPS, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT,
306 FW_CAPS, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, \ 201 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
307 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \ 202 CTL_GRV, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_MA), MO(_FN), KC_RCTL
308 CTL_GRV, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_MA), MO(_FW), KC_RCTL \
309 ),
310
311 /****************
312 ** OS OVERLAYS **
313 ****************/
314
315 /* Mac */
316 [_MAC] = LAYOUT_60_ansi(
317 // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
318 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
319 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
320 FM_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
321 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
322 _______, _______, _______, _______, _______, _______, MO(_FM), _______ \
323 ), 203 ),
324 204
325 /********************* 205 /*********************
@@ -327,65 +207,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
327 *********************/ 207 *********************/
328 208
329 /* Quake 2 */ 209 /* Quake 2 */
330 [_QUAKE2] = LAYOUT_60_ansi( 210 [_Q2] = LAYOUT_60_ansi(
331 // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 211 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
332 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ 212 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
333 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ 213 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, Q2_ENT,
334 Q2_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, Q2_ON, \ 214 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
335 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ 215 KC_GRV, _______, _______, _______, _______, _______, _______, _______
336 _______, _______, _______, _______, _______, _______, MO(_FQ), _______ \
337 ),
338
339 [_QUAKE2_DVORAK] = LAYOUT_60_ansi(
340 // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
341 Q2_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
342 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
343 Q2_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, Q2_OFF, \
344 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
345 _______, _______, _______, _______, _______, _______, MO(_FQ), _______ \
346 ),
347
348 [_QUAKE2_CONSOLE] = LAYOUT_60_ansi(
349 // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
350 Q2_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
351 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
352 Q2_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_ENT, \
353 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
354 _______, _______, _______, _______, _______, _______, MO(_FQ), _______ \
355 ), 216 ),
356 217
357 /******************** 218 /********************
358 ** FUNCTION LAYERS ** 219 ** FUNCTION LAYERS **
359 ********************/ 220 ********************/
360 221
361 /* Windows Fn layer */ 222 /* Fn layer */
362 [_FUNCWIN] = LAYOUT_60_ansi( 223 [_FN] = LAYOUT_60_ansi(
363 // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 224 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
364 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \ 225 _______, KC_CALC, KC_APP, _______, _______, _______, KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_PSCR, KC_SLCK, KC_PAUS,
365 _______, KC_CALC, KC_APP, _______, _______, _______, KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_PSCR, KC_SLCK, KC_PAUS, \ 226 NO_CHNG, M_SALL, _______, _______, _______, _______, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, KC_PENT,
366 NO_CHNG, WN_SALL, _______, _______, _______, _______, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, KC_PENT, \ 227 _______, M_UNDO, M_CUT, M_COPY, M_PASTE, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, TG(_SY), _______,
367 _______, WN_UNDO, WN_CUT, WN_COPY, WN_PSTE, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, TG(_SY), _______, \ 228 _______, _______, _______, TG(_NP), _______, _______, NO_CHNG, _______
368 _______, _______, _______, TG(_NP), _______, TG(_MA), NO_CHNG, _______ \
369 ),
370
371 /* MacOS Fn layer */
372 [_FUNCMAC] = LAYOUT_60_ansi(
373 // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
374 KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
375 _______, _______, _______, _______, _______, _______, KC_INS, MC_HOME, KC_UP, MC_END, KC_PGUP, MC_PSCR, _______, _______, \
376 NO_CHNG, MC_SALL, _______, _______, _______, _______, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, \
377 _______, MC_UNDO, MC_CUT, MC_COPY, MC_PSTE, _______, _______, _______, _______, _______, TG(_SY), _______, \
378 _______, _______, _______, TG(_NP), _______, _______, NO_CHNG, _______ \
379 ),
380
381 /* Quake 2 Fn layer */
382 [_FUNCQ2] = LAYOUT_60_ansi(
383 // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
384 Q2_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
385 _______, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_PSCR, KC_SLCK, KC_PAUS, \
386 NO_CHNG, _______, _______, _______, _______, _______, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, KC_ENT, \
387 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TG(_SY), _______, \
388 _______, _______, _______, _______, _______, _______, NO_CHNG, _______ \
389 ), 229 ),
390 230
391 /***************** 231 /*****************
@@ -393,33 +233,30 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
393 *****************/ 233 *****************/
394 234
395 /* Numpad layer */ 235 /* Numpad layer */
396 [_NUMPAD] = LAYOUT_60_ansi( 236 [_NP] = LAYOUT_60_ansi(
397 // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 237 _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, _______, _______, _______, _______,
398 _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, _______, _______, _______, _______, \ 238 _______, _______, _______, _______, KC_E, KC_F, _______, KC_P4, KC_P5, KC_P6, KC_PAST, KC_PSLS, KC_PEQL, _______,
399 _______, _______, _______, _______, KC_E, KC_F, _______, KC_P4, KC_P5, KC_P6, KC_PAST, KC_PSLS, KC_PEQL, _______, \ 239 _______, _______, _______, _______, KC_C, KC_D, _______, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PMNS, KC_PENT,
400 _______, _______, _______, _______, KC_C, KC_D, _______, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PMNS, KC_PENT, \ 240 _______, _______, _______, _______, KC_A, KC_B, _______, KC_P0, _______, KC_PDOT, _______, _______,
401 _______, _______, _______, _______, KC_A, KC_B, _______, KC_P0, _______, KC_PDOT, _______, _______, \ 241 _______, _______, _______, TG(_NP), _______, _______, NO_CHNG, _______
402 _______, _______, _______, TG(_NP), _______, _______, NO_CHNG, _______ \
403 ), 242 ),
404 243
405 /* Macro layer */ 244 /* Macro layer */
406 [_MACROS] = LAYOUT_60_ansi( 245 [_MA] = LAYOUT_60_ansi(
407 // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 246 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DM_REC1, DM_REC2, _______,
408 TG(_MA), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DM_REC1, DM_REC2, _______, \ 247 _______, _______, _______, G_PUSH, _______, _______, _______, _______, _______, _______, _______, DM_PLY1, DM_PLY2, DM_RSTP,
409 _______, _______, _______, G_PUSH, _______, _______, _______, _______, _______, _______, _______, DM_PLY1, DM_PLY2, DM_RSTP, \ 248 _______, _______, _______, G_FTCH, _______, _______, _______, _______, _______, _______, _______, _______, _______,
410 _______, _______, _______, G_FTCH, G_COMM, _______, _______, _______, _______, _______, _______, _______, _______, \ 249 _______, _______, _______, _______, _______, G_BRCH, _______, _______, _______, _______, _______, _______,
411 _______, _______, _______, _______, _______, G_BRCH, SIGNA, _______, _______, _______, _______, _______, \ 250 _______, _______, _______, _______, _______, _______, NO_CHNG, _______
412 _______, _______, _______, _______, _______, _______, NO_CHNG, _______ \
413 ), 251 ),
414 252
415 /* System layer */ 253 /* System layer */
416 [_SYSTEM] = LAYOUT_60_ansi( 254 [_SY] = LAYOUT_60_ansi(
417 // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 255 TG(_SY), TO(_QW), TO(_DV), TO(_CM), GO_Q2, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, DEBUG, XXXXXXX, VRSN, XXXXXXX,
418 TG(_SY), TO(_QW), TO(_DV), TO(_CM), GO_Q2, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, DEBUG, XXXXXXX, VRSN, XXXXXXX, \ 256 XXXXXXX, XXXXXXX, M_MDSWP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
419 XXXXXXX, XXXXXXX, TG(_MC), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 257 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
420 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 258 XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_TOGG, BL_INC, BL_BRTG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
421 XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_TOGG, BL_INC, BL_BRTG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \ 259 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NO_CHNG, XXXXXXX
422 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NO_CHNG, XXXXXXX \
423 ), 260 ),
424 261
425}; 262};
diff --git a/keyboards/kc60/keymaps/noroadsleft/readme.md b/keyboards/kc60/keymaps/noroadsleft/readme.md
index 6a7ad6f65..59f4386ee 100644
--- a/keyboards/kc60/keymaps/noroadsleft/readme.md
+++ b/keyboards/kc60/keymaps/noroadsleft/readme.md
@@ -27,15 +27,12 @@ Descriptions of the physical locations of keys will use the key's function in a
27 - Layer 0: QWERTY `_QW` 27 - Layer 0: QWERTY `_QW`
28 - Layer 1: Hardware Dvorak `_DV` 28 - Layer 1: Hardware Dvorak `_DV`
29 - Layer 2: Hardware Colemak `_CM` 29 - Layer 2: Hardware Colemak `_CM`
30- [OS Overlays](./readme_ch2.md) 30- [Quake 2 Overlays](./readme_ch2.md)
31 - Layer 3: MacOS Overlay `_MC` 31 - Layers 3, 4 and 5: Quake 2 `_Q2`, Quake 2 Dvorak `_QD`, and Quake 2 Console `_QC`
32- [Quake 2 Overlays](./readme_ch3.md) 32- [Function Layers](./readme_ch3.md)
33 - Layers 4, 5 and 6: Quake 2 `_Q2`, Quake 2 Dvorak `_QD`, and Quake 2 Console `_QC` 33 - Layer 6: Fn layer `_FN`
34- [Function Layers](./readme_ch4.md) 34 - Layer 7: Quake 2 Fn layer `_FQ`
35 - Layer 7: Windows Fn layer `_FW` 35- [Other Layers](./readme_ch4.md)
36 - Layer 8: MacOS-oriented Fn layer `_FM` 36 - Layer 8: Numpad layer `_NP`
37 - Layer 9: Quake 2 Fn layer `_FQ` 37 - Layer 9: Macro layer `_MA`
38- [Other Layers](./readme_ch5.md) 38 - Layer 10: System layer `_SY`
39 - Layer 10: Numpad layer `_NP`
40 - Layer 11: Macro layer `_MA`
41 - Layer 12: System layer `_SY`
diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_ch1.md b/keyboards/kc60/keymaps/noroadsleft/readme_ch1.md
index 3872232f5..87fe99c65 100644
--- a/keyboards/kc60/keymaps/noroadsleft/readme_ch1.md
+++ b/keyboards/kc60/keymaps/noroadsleft/readme_ch1.md
@@ -2,10 +2,9 @@
2 2
3- [Table of Contents](./readme.md) 3- [Table of Contents](./readme.md)
4 1. **Base Layers** 4 1. **Base Layers**
5 2. [**OS Overlays**](./readme_ch2.md) 5 2. [Quake 2 Overlays](./readme_ch2.md)
6 3. [Quake 2 Overlays](./readme_ch3.md) 6 3. [Function Layers](./readme_ch3.md)
7 4. [Function Layers](./readme_ch4.md) 7 4. [Other Layers](./readme_ch4.md)
8 5. [Other Layers](./readme_ch5.md)
9 8
10 9
11---- 10----
@@ -19,7 +18,7 @@ Standard QWERTY layout, with four QMK features:
19- The `Caps Lock` key has been replaced with a dual function `LT()` key, which opens the Windows Fn layer when held, and is `Caps Lock` when tapped 18- The `Caps Lock` key has been replaced with a dual function `LT()` key, which opens the Windows Fn layer when held, and is `Caps Lock` when tapped
20- The Left `Control` key has been replaced with a `MT(MOD_CTRL, KC_GRV)` key, which is <code>&#96; ~</code> when tapped and `Ctrl` when held. 19- The Left `Control` key has been replaced with a `MT(MOD_CTRL, KC_GRV)` key, which is <code>&#96; ~</code> when tapped and `Ctrl` when held.
21 20
22![QWERTY layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_00.png) 21![QWERTY layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/QWERTY.png)
23 22
24 23
25---- 24----
@@ -30,7 +29,7 @@ Standard QWERTY layout, with four QMK features:
30 29
31A hardware-based Dvorak Simplified layout. At my weekend job, I use a shared computer that runs MacOS Sierra, in US QWERTY layout. In this layer, I can leave the system in QWERTY, plug my keyboard in, and still type in Dvorak. 30A hardware-based Dvorak Simplified layout. At my weekend job, I use a shared computer that runs MacOS Sierra, in US QWERTY layout. In this layer, I can leave the system in QWERTY, plug my keyboard in, and still type in Dvorak.
32 31
33![Hardware Dvorak layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_01.png) 32![Hardware Dvorak layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/Dvorak.png)
34 33
35 34
36---- 35----
@@ -41,9 +40,9 @@ A hardware-based Dvorak Simplified layout. At my weekend job, I use a shared com
41 40
42A hardware-based Colemak layout. Been thinking of trying it, so it's here. 41A hardware-based Colemak layout. Been thinking of trying it, so it's here.
43 42
44![Hardware Colemak layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_02.png) 43![Hardware Colemak layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/Colemak.png)
45 44
46 45
47---- 46----
48 47
49Next Chapter: [OS Overlays](./readme_ch2.md) 48Next Chapter: [Quake 2 Overlays](./readme_ch2.md)
diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_ch2.md b/keyboards/kc60/keymaps/noroadsleft/readme_ch2.md
index 76ab51015..427bebb9a 100644
--- a/keyboards/kc60/keymaps/noroadsleft/readme_ch2.md
+++ b/keyboards/kc60/keymaps/noroadsleft/readme_ch2.md
@@ -2,23 +2,35 @@
2 2
3- [Table of Contents](./readme.md) 3- [Table of Contents](./readme.md)
4 1. [Base Layers](./readme_ch1.md) 4 1. [Base Layers](./readme_ch1.md)
5 2. **OS Overlays** 5 2. **Quake 2 Overlays**
6 3. [Quake 2 Overlays](./readme_ch3.md) 6 3. [Function Layers](./readme_ch3.md)
7 4. [Function Layers](./readme_ch4.md) 7 4. [Other Layers](./readme_ch4.md)
8 5. [Other Layers](./readme_ch5.md)
9 8
10 9
11---- 10----
12 11
13## Layer 3: Layer 3: MacOS Overlay `_MC` 12## Layers 3, 4 and 5: Quake 2 `_Q2`, Quake 2 Dvorak `_QD`, and Quake 2 Console `_QC`
14 13
15### Toggled by holding either `Fn` and tapping `/?` key, then tapping `W`. 14### Accessed by holding either `Fn` key and tapping the `/?` key, then tapping `4$`
16 15
17This layer overrides the `Fn` keys on whichever base layer is currently enabled, sending the keyboard to the MacOS-oriented Fn layer `_FM`, instead of the Windows Fn layer `_FW`. 16These layers were born out of the confusion I have had trying to use the in-game chat and the console in [Quake 2](https://en.wikipedia.org/wiki/Quake_II). When Quake 2 came out, alternate keyboard layouts weren't really a thing. As a result, all in-game text input is hard-locked to US QWERTY, regardless of what the operating system is using for its input method.
18 17
19![MacOS Overlay](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_03.png) 18I'm attempting to solve this by some creative use of QMK's macro feature. The keycode in the System layer that enables these layers, [`GO_Q2`](./keymap.c#L387), is a [macro](./keymap.c#L101-L108) that sets the default layer to the QWERTY layer, then turns the Quake 2 layer `_Q2` on. The result is a partially-overwritten QWERTY layer, that has some keycodes with some creative layer switching.
19
20When I hit the `Enter` key (bound in-game to text chat), the [macro keycode](./keymap.c#L109-L115) I've created sends the keycode for `Enter`, then follows with enabling the Hardware Dvorak layer and its corresponding overlay. Now the game is in text chat mode, and my keyboard is in Dvorak. When I hit `Enter` again, another `Enter` [keycode macro](./keymap.c#L116-L122) is sent, which sends the message, then the macro brings me back to the standard QWERTY+Quake 2 setup. Hitting `Escape` instead runs a [macro](./keymap.c#L123-L129) that cancels the sending of the message, and undoes the layers.
21
22I have been testing this configuration for a few months. Sometimes I end up still in Dvorak mode without any text input systems (in-game chat or the console) running, but it pretty much always happens when I'm focused on the game, so I don't know the cause yet.
23
24### Layer 3: Quake 2
25![Quake 2](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/Quake%202.png)
26
27### Layer 4: Quake 2 Dvorak
28![Quake 2 Dvorak](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/Quake%202%20Dvorak.png)
29
30### Layer 5: Quake 2 Console
31![Quake 2 Console](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/Quake%202%20Console.png)
20 32
21 33
22---- 34----
23 35
24Next Chapter: [Quake 2 Overlays](./readme_ch3.md) 36Next Chapter: [Function Layers](./readme_ch3.md)
diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_ch3.md b/keyboards/kc60/keymaps/noroadsleft/readme_ch3.md
index 93c43fbf9..57c0bd490 100644
--- a/keyboards/kc60/keymaps/noroadsleft/readme_ch3.md
+++ b/keyboards/kc60/keymaps/noroadsleft/readme_ch3.md
@@ -2,36 +2,39 @@
2 2
3- [Table of Contents](./readme.md) 3- [Table of Contents](./readme.md)
4 1. [Base Layers](./readme_ch1.md) 4 1. [Base Layers](./readme_ch1.md)
5 2. [OS Overlays](./readme_ch2.md) 5 2. [Quake 2 Overlays](./readme_ch2.md)
6 3. **Quake 2 Overlays** 6 3. **Function Layers**
7 4. [Function Layers](./readme_ch4.md) 7 4. [Other Layers](./readme_ch4.md)
8 5. [Other Layers](./readme_ch5.md)
9 8
10 9
11---- 10----
12 11
13## Layers 4, 5 and 6: Quake 2 `_Q2`, Quake 2 Dvorak `_QD`, and Quake 2 Console `_QC` 12## Layer 6: Fn layer - `_FN`
14 13
15### Accessed by holding either `Fn` key and tapping the `/?` key, then tapping `4$` 14### Accessed by holding either `Fn` key from any base layer
16 15
17These layers were born out of the confusion I have had trying to use the in-game chat and the console in [Quake 2](https://en.wikipedia.org/wiki/Quake_II). When Quake 2 came out, alternate keyboard layouts weren't really a thing. As a result, all in-game text input is hard-locked to US QWERTY, regardless of what the operating system is using for its input method. 16Arrows, Navigation keys (Insert, Home, Page Up, etc.), and Function keys are here. Also has keys for Calculator, Menu, Volume Control, and shortcuts for Select All, Undo, Cut, Copy, and Paste. Numpad Enter for when I'm working in Adobe Photoshop, because it treats Numpad Enter differently from the regular Enter key.
18 17
19I'm attempting to solve this by some creative use of QMK's macro feature. The keycode in the System layer that enables these layers, [`GO_Q2`](./keymap.c#L418), is a [macro](./keymap.c#L164-L171) that sets the default layer to the QWERTY layer, then turns the Quake 2 layer `_Q2` on. The result is a partially-overwritten QWERTY layer, that has some keycodes with some creative layer switching. 18![Windows Fn layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/Fn.png)
20 19
21When I hit the `Enter` key (bound in-game to text chat), the [macro keycode](./keymap.c#L172-L178) I've created sends the keycode for `Enter`, then follows with enabling the Hardware Dvorak layer and its corresponding overlay. Now the game is in text chat mode, and my keyboard is in Dvorak. When I hit `Enter` again, another `Enter` [keycode macro](./keymap.c#L179-L185) is sent, which sends the message, then the macro brings me back to the standard QWERTY+Quake 2 setup. Hitting `Escape` instead runs a [macro](./keymap.c#L186-L192) that cancels the sending of the message, and undoes the layers.
22 20
23I have been testing this configuration for a few months. Sometimes I end up still in Dvorak mode without any text input systems (in-game chat or the console) running, but it pretty much always happens when I'm focused on the game, so I don't know the cause yet. 21----
22
23## Layer 7: Quake 2 Fn layer - `_FQ`
24
25### Accessed by holding either `Fn` key while either Quake 2 overlay is active.
26
27Based on the Windows function layer, but removes some functions that are pointless to have while in the game.
28
29![Quake 2 Fn layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/Quake%202%20Fn.png)
24 30
25### Layer 4: Quake 2 31Keycode(s) Sent | Notes
26![Quake 2](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_04.png) 32:-------------------------------- | :----
33[`Q2_GRV`](./keymap.c#L130-L137) | Sends `KC_GRV`, then enables the Dvorak, Quake 2 Dvorak, and Quake 2 Console layers.
27 34
28### Layer 5: Quake 2 Dvorak
29![Quake 2 Dvorak](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_05.png)
30 35
31### Layer 6: Quake 2 Console
32![Quake 2 Console](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_06.png)
33 36
34 37
35---- 38----
36 39
37Next Chapter: [Function Layers](./readme_ch4.md) 40Next Chapter: [Other Layers](./readme_ch4.md)
diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_ch4.md b/keyboards/kc60/keymaps/noroadsleft/readme_ch4.md
index 32ca82ce9..97fa675a9 100644
--- a/keyboards/kc60/keymaps/noroadsleft/readme_ch4.md
+++ b/keyboards/kc60/keymaps/noroadsleft/readme_ch4.md
@@ -2,51 +2,109 @@
2 2
3- [Table of Contents](./readme.md) 3- [Table of Contents](./readme.md)
4 1. [Base Layers](./readme_ch1.md) 4 1. [Base Layers](./readme_ch1.md)
5 2. [OS Overlays](./readme_ch2.md) 5 2. [Quake 2 Overlays](./readme_ch2.md)
6 3. [Quake 2 Overlays](./readme_ch3.md) 6 3. [Function Layers](./readme_ch3.md)
7 4. **Function Layers** 7 4. **Other Layers**
8 5. [Other Layers](./readme_ch5.md)
9 8
10 9
11---- 10----
12 11
13## Layer 7: Windows Fn layer - `_FW` 12## Layer 8: Numpad layer - `_NP`
14 13
15### Accessed by holding either `Fn` key in Layer 0 14### Accessed by holding either `Fn` key and tapping `Space`, from any of the Base Layers
16 15
17Arrows, Navigation keys (Insert, Home, Page Up, etc.), and Function keys are here. Also has keys for Calculator, Menu, Volume Control, and shortcuts for Select All, Undo, Cut, Copy, and Paste. Numpad Enter for when I'm working in Adobe Photoshop, because it treats Numpad Enter differently from the regular Enter key. 16Puts a Numpad on the right-hand side of the keyboard. A through F included for hexadecimal input. Tapping `Space` returns to the previous Base Layer.
18 17
19![Windows Fn layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_07.png) 18![Numpad layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/Numpad.png)
20 19
21 20
22---- 21----
23 22
24## Layer 8: MacOS-oriented Fn layer - `_FM` 23## Layer 9: Macro layer - `_MA`
25 24
26### Accessed by holding either `Fn` key in Layer 1 25### Accessed by holding the right-side `Win` key
27 26
28Based on my Windows Fn layer, but swaps a few functions for a MacOS environment. Arrow, Navigation, and Function keys are basically unchanged from Layer 2. This layer enables using either `Fn` key as a sort of simulated `Command` key, which I find easier to reach and use. 27Has some macros that I use in Git, some frequently-typed strings, and keys for use with the [Dynamic Macros feature](https://docs.qmk.fm/#/feature_dynamic_macros).
29 28
30![MacOS-oriented Fn layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_08.png) 29Tapping `Esc` exits the Macro layer, if the macro used doesn't do it automatically.
31 30
31![Macro layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/Macro.png)
32 32
33----
34 33
35## Layer 9: Quake 2 Fn layer - `_FQ` 34### Macros
35
36#### [G_PUSH](./keymap.c#L71-L75)
37
38Output: `git push origin `
39
40Everything from here down is related to Git or GitHub.
41
42#### [G_FTCH](./keymap.c#L76-L85)
43
44| Condition | Output |
45| :-------- | :----- |
46| If <kbd>Shift</kbd> is active | `git pull upstream ` |
47| Otherwise | `git fetch upstream ` |
48
49#### [G_BRCH](./keymap.c#L86-L95)
50
51| Condition | Output |
52| :-------- | :----- |
53| If <kbd>Shift</kbd> is active | `master` |
54| Otherwise | `$(git branch-name)` |
55
56`$(git branch-name)` is a [git alias](./readme_git.md) that returns the name of the current branch.
57
58#### [SIGNA](./keymap.c#L96-L100)
59
60Output: `\- @noroadsleft` <kbd>Enter</kbd>
61
62Sometimes on GitHub, I sign my comments. Types my GitHub name in Markdown syntax, and then taps the `Enter` key.
36 63
37### Accessed by holding either `Fn` key while either Quake 2 overlay is active. 64#### "Macro Mode" Macros and Customized Keycodes
38 65
39Based on the Windows function layer, but removes some functions that are pointless to have while in the game. 66Some of my macros and keycodes do different things depending on the value of the [`macroMode` variable](./keymap.c#L65), which is toggled between `0` and `1` by the [`M_MDSWP` custom keycode](./keymap.c#L238-L242). This is mainly at attempt to make various shortcuts the same key combinations between Windows/Linux and MacOS (which I use at home and work, respectively).
67
68| Keycode | `macroMode == 0` | `macroMode == 1` | `macroMode == 1` with Shift |
69| :------------------------------ | :--------------- | :--------------- | :--------------------------- |
70| [M_SALL](./keymap.c#L138-L146) | `Ctrl+A` | `Cmd+A` | `Cmd+A` |
71| [M_UNDO](./keymap.c#L147-L159) | `Ctrl+Z` | `Cmd+Z` | `Cmd+Shift+Z` |
72| [M_CUT](./keymap.c#L160-L168) | `Ctrl+X` | `Cmd+X` | `Cmd+X` |
73| [M_COPY](./keymap.c#L169-L177) | `Ctrl+C` | `Cmd+C` | `Cmd+C` |
74| [M_PASTE](./keymap.c#L178-L190) | `Ctrl+V` | `Cmd+V` | `Cmd+Shift+Opt+V` |
75| `KC_HOME` | `KC_HOME` | `Cmd+Left` | `Cmd+Left` |
76| `KC_END` | `KC_END` | `Cmd+Right` | `Cmd+Right` |
77| `KC_PSCR` | `KC_PSCR` | `Cmd+Shift+3` | `Cmd+Shift+3` |
78
79#### [Emulated Non-US Backslash](./keymap.c#L218-L232)
80
81Sometimes I type in languages from countries that use ISO layout, but my keyboard is ANSI, so I have one key fewer. This macro simulates the Non-US Backslash key if I use Right Alt + Z.
82
83#### [VRSN](./keymap.c#L233-L237)
84
85Outputs a string that tells me the Git commit from which my flashed firmware was built. Looks something like:
86
87 kc60/noroadsleft @ 0.6.326-6-gae6d7b-dirty
88
89#### [Emulated Numeric Keypad](./keymap.c#L243-L257)
90
91If I hold the Right Alt key, the number row (`KC_1` through `KC_0`) will output numpad keycodes instead of number row keycodes, enabling quicker access to characters like ™ and °.
92
93#### [Emulated Extended Function Keys](./keymap.c#L258-L272)
94
95Similar to the emulated numpad, if I hold the Right Alt key with the Fn key, the function row (`KC_F1` through `KC_F12`) will output keycodes `KC_F13` throught `KC_F24`.
96
97----
40 98
41![Quake 2 Fn layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_09.png) 99### Layer 10: System layer - `_SY`
42 100
43Keycode(s) Sent | Notes 101#### Accessed by holding either `Fn` key and tapping the `/?` key
44:-------------------------------- | :----
45[`Q2_GRV`](./keymap.c#L193-L200) | Sends `KC_GRV`, then enables the Dvorak, Quake 2 Dvorak, and Quake 2 Console layers.
46 102
103This is where I change my keyboard function. Base layer select on `1` through `3`, Backlight controls on `C` through `N`, Reset on `8*`, Debug on `0)`.
47 104
105![System layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/System.png)
48 106
49 107
50---- 108----
51 109
52Next Chapter: [Other Layers](./readme_ch5.md) 110[Back to the index.](./)
diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_ch5.md b/keyboards/kc60/keymaps/noroadsleft/readme_ch5.md
deleted file mode 100644
index cb2abbd6d..000000000
--- a/keyboards/kc60/keymaps/noroadsleft/readme_ch5.md
+++ /dev/null
@@ -1,125 +0,0 @@
1# @noroadsleft's KC60 keymap
2
3- [Table of Contents](./readme.md)
4 1. [Base Layers](./readme_ch1.md)
5 2. [OS Overlays](./readme_ch2.md)
6 3. [Quake 2 Overlays](./readme_ch3.md)
7 4. [Function Layers](./readme_ch4.md)
8 5. **Other Layers**
9
10
11----
12
13## Layer 10: Numpad layer - `_NP`
14
15### Accessed by holding either `Fn` key and tapping `Space`, from any of the Base Layers
16
17Puts a Numpad on the right-hand side of the keyboard. A through F included for hexadecimal input. Tapping `Space` returns to the previous Base Layer.
18
19![Numpad layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_10.png)
20
21
22----
23
24## Layer 11: Macro layer - `_MA`
25
26### Accessed by holding the `Fn` key and tapping the right-side `Win` key
27
28Has some macros that I use in Git, some frequently-typed strings, and keys for use with the [Dynamic Macros feature](https://docs.qmk.fm/#/feature_dynamic_macros).
29
30Tapping `Esc` exits the Macro layer, if the macro used doesn't do it automatically.
31
32![Macro layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_11.png)
33
34
35### Macros
36
37#### [G_PUSH](./keymap.c#L126-L130)
38
39Output: `git push origin `
40
41Everything from here down is related to Git or GitHub.
42
43#### [G_FTCH](./keymap.c#L131-L140)
44
45| Condition | Output |
46| :-------- | :----- |
47| If <kbd>Shift</kbd> is active | `git pull upstream ` |
48| Otherwise | `git fetch upstream ` |
49
50#### [G_COMM](./keymap.c#L141-L146)
51
52Output: `git commit -m ""` <kbd>Left</kbd>
53
54Readies a `git commit` command, moves the cursor between the quotation marks, then disables the Macro layer.
55
56#### [G_BRCH](./keymap.c#L147-L157)
57
58| Condition | Output |
59| :-------- | :----- |
60| If <kbd>Shift</kbd> is active | `master` |
61| Otherwise | `$(git branch-name)` |
62
63`$(git branch-name)` is a [git alias](./readme_git.md) that returns the name of the current branch. This macro disables the Macro layer when finished.
64
65#### [SIGNA](./keymap.c#L158-L163)
66
67Output: `\- @noroadsleft` <kbd>Enter</kbd>
68
69Sometimes on GitHub, I sign my comments. Types my GitHub name in Markdown syntax, and then taps the `Enter` key. Disables the Macro layer when finished.
70
71#### [MC_UNDO](./keymap.c#L201-L209)
72
73| Condition | Output |
74| :-------- | :----- |
75| If <kbd>Shift</kbd> is active | <kbd>Shift</kbd> + <kbd>Command</kbd> + <kbd>Z</kbd> |
76| Otherwise | <kbd>Command</kbd> + <kbd>Z</kbd> |
77
78An Undo shortcut that turns to Redo if <kbd>Shift</kbd> is being held. I'm not sure that part is required to get that behavior, but it works as desired, so I'm not messing with it.
79
80#### [MC_PSTE](./keymap.c#L210-L218)
81
82| Condition | Output |
83| :-------- | :----- |
84| If <kbd>Shift</kbd> is active | <kbd>Shift</kbd> + <kbd>Command</kbd> + <kbd>Option</kbd> + <kbd>V</kbd> |
85| Otherwise | <kbd>Command</kbd> + <kbd>V</kbd> |
86
87The program I use this in uses <kbd>Shift</kbd> + <kbd>Command</kbd> + <kbd>Option</kbd> + <kbd>V</kbd> to paste while maintaining formatting (typeface, text size, etc.). Sometimes I want this and sometimes I don't. Using <kbd>Shift</kbd> changes the behavior.
88
89#### [NUBS_Z](./keymap.c#L219-L233)
90
91| Condition | Output |
92| :-------- | :----- |
93| If Right <kbd>Alt</kbd> is active | `KC_NUBS` |
94| Otherwise | `KC_Z` |
95
96Sometimes I type in languages from countries that use ISO layout, but my keyboard is ANSI, so I have one key fewer. This macro simulates the Non-US Backslash key if I use Right Alt + Z.
97
98#### [VRSN](./keymap.c#L234-L238)
99
100Outputs a string that tells me the Git commit from which my flashed firmware was built. Looks something like:
101
102 kc60/noroadsleft @ 0.6.326-6-gae6d7b-dirty
103
104#### [Emulated Numeric Keypad](./keymap.c#L239-L253)
105
106If I hold the Right Alt key, the number row (`KC_1` through `KC_0`) will output numpad keycodes instead of number row keycodes, enabling quicker access to characters like ™ and °.
107
108#### [Emulated Extended Function Keys](./keymap.c#L254-L268)
109
110Similar to the emulated numpad, if I hold the Right Alt key with the Fn key, the function row (`KC_F1` through `KC_F12`) will output keycodes `KC_F13` throught `KC_F24`.
111
112----
113
114### Layer 12: System layer - `_SY`
115
116#### Accessed by holding either `Fn` key and tapping the `/?` key
117
118This is where I change my keyboard function. Base layer select on `1` through `3`, Backlight controls on `C` through `N`, Reset on `8*`, Debug on `0)`.
119
120![System layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/layer_12.png)
121
122
123----
124
125[Back to the index.](./)
diff --git a/keyboards/kc60/keymaps/noroadsleft/rules.mk b/keyboards/kc60/keymaps/noroadsleft/rules.mk
index 2eab7943d..cd417e76b 100644
--- a/keyboards/kc60/keymaps/noroadsleft/rules.mk
+++ b/keyboards/kc60/keymaps/noroadsleft/rules.mk
@@ -1,8 +1,6 @@
1# https://github.com/qmk/qmk_firmware/issues/3448#issuecomment-406636125
2# EXTRAFLAGS += -flto
3LTO_ENABLE = yes
4
5MOUSEKEY_ENABLE = no # Mouse keys 1MOUSEKEY_ENABLE = no # Mouse keys
6# COMMAND_ENABLE = no # Commands for debug and configuration 2# COMMAND_ENABLE = no # Commands for debug and configuration
7SPACE_CADET_ENABLE = no # Space Cadet 3SPACE_CADET_ENABLE = no # Space Cadet
8DYNAMIC_MACRO_ENABLE = yes 4DYNAMIC_MACRO_ENABLE = yes
5
6LTO_ENABLE = yes