aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--layouts/community/ergodox/qwerty_code_friendly/keymap.c364
-rw-r--r--layouts/community/ergodox/qwerty_code_friendly/readme.md187
2 files changed, 326 insertions, 225 deletions
diff --git a/layouts/community/ergodox/qwerty_code_friendly/keymap.c b/layouts/community/ergodox/qwerty_code_friendly/keymap.c
index f79a17290..a3b23979a 100644
--- a/layouts/community/ergodox/qwerty_code_friendly/keymap.c
+++ b/layouts/community/ergodox/qwerty_code_friendly/keymap.c
@@ -9,14 +9,22 @@
9 * See `readme.md` for notes on each define. 9 * See `readme.md` for notes on each define.
10 */ 10 */
11 11
12/* Personal preference (enable by passing EXTRAFLAGS=... to make). */ 12/**
13 * Optionally support 80 key layout.
14 *
15 * No default keys defined: use 'CFQ_USER_K80_L0K0' .. etc.
16 */
17/* #define CFQ_USE_80_KEYS */
18
19/** Personal preference (enable by passing 'EXTRAFLAGS=...' to make). */
13/* #define CFQ_USE_MOMENTARY_LAYER_KEYS */ 20/* #define CFQ_USE_MOMENTARY_LAYER_KEYS */
14 21
15/* Holding right/left or left/right shift for single or double quote pair */ 22/** Holding right/left or left/right shift for single or double quote pair */
16/* #define CFQ_USE_SHIFT_QUOTES */ 23/* #define CFQ_USE_SHIFT_QUOTES */
17 24
18#define CFQ_USE_DYNAMIC_MACRO 25#define CFQ_USE_DYNAMIC_MACRO
19 26
27
20#if !defined(CFQ_USER_KEY0) 28#if !defined(CFQ_USER_KEY0)
21# define CFQ_USER_KEY0 KC_BSPC 29# define CFQ_USER_KEY0 KC_BSPC
22#endif 30#endif
@@ -45,6 +53,91 @@
45# define CFQ_USER_KEY8 KC_DEL 53# define CFQ_USER_KEY8 KC_DEL
46#endif 54#endif
47 55
56#ifdef CFQ_USE_80_KEYS
57# define LAYOUT_ergodox_76_or_80 KEYMAP_80
58# define K80(a) CFQ_USER_K80_##a
59#else
60# define LAYOUT_ergodox_76_or_80( \
61 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, \
62 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \
63 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, \
64 k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, \
65 \
66 k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, \
67 k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, \
68 k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, \
69 k70, k71, k72, k73, k74, k75, k76, k77, k78, k79) \
70 LAYOUT_ergodox( \
71 k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, \
72 k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \
73 k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, \
74 k30, k31, k32, k33, k36, k37, k38, k39, \
75 \
76 k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, \
77 k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, \
78 k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, \
79 k70, k71, k72, k73, k76, k77, k78, k79)
80# define K80(a) KC_TRNS
81#endif
82
83/**
84 * Used to generate lines below:
85 * \code{.py}
86 * text = '# ifndef CFQ_USER_K80_L0K0\n# define CFQ_USER_K80_L0K0 KC_TRNS\n# endif'
87 * print('\n'.join([text.replace('L0', f'L{l}').replace('K0', f'K{k}') for l in range(3) for k in range(4)]))
88 * \endcode
89 */
90#ifdef CFQ_USE_80_KEYS
91# ifndef CFQ_USER_K80_L0K0
92# define CFQ_USER_K80_L0K0 KC_TRNS
93# endif
94# ifndef CFQ_USER_K80_L0K1
95# define CFQ_USER_K80_L0K1 KC_TRNS
96# endif
97# ifndef CFQ_USER_K80_L0K2
98# define CFQ_USER_K80_L0K2 KC_TRNS
99# endif
100# ifndef CFQ_USER_K80_L0K3
101# define CFQ_USER_K80_L0K3 KC_TRNS
102# endif
103# ifndef CFQ_USER_K80_L1K0
104# define CFQ_USER_K80_L1K0 KC_TRNS
105# endif
106# ifndef CFQ_USER_K80_L1K1
107# define CFQ_USER_K80_L1K1 KC_TRNS
108# endif
109# ifndef CFQ_USER_K80_L1K2
110# define CFQ_USER_K80_L1K2 KC_TRNS
111# endif
112# ifndef CFQ_USER_K80_L1K3
113# define CFQ_USER_K80_L1K3 KC_TRNS
114# endif
115# ifndef CFQ_USER_K80_L2K0
116# define CFQ_USER_K80_L2K0 KC_TRNS
117# endif
118# ifndef CFQ_USER_K80_L2K1
119# define CFQ_USER_K80_L2K1 KC_TRNS
120# endif
121# ifndef CFQ_USER_K80_L2K2
122# define CFQ_USER_K80_L2K2 KC_TRNS
123# endif
124# ifndef CFQ_USER_K80_L2K3
125# define CFQ_USER_K80_L2K3 KC_TRNS
126# endif
127# ifndef CFQ_USER_K80_L3K0
128# define CFQ_USER_K80_L3K0 KC_TRNS
129# endif
130# ifndef CFQ_USER_K80_L3K1
131# define CFQ_USER_K80_L3K1 KC_TRNS
132# endif
133# ifndef CFQ_USER_K80_L3K2
134# define CFQ_USER_K80_L3K2 KC_TRNS
135# endif
136# ifndef CFQ_USER_K80_L3K3
137# define CFQ_USER_K80_L3K3 KC_TRNS
138# endif
139#endif
140
48#ifndef CFQ_WORD_A 141#ifndef CFQ_WORD_A
49#define CFQ_WORD_A "" 142#define CFQ_WORD_A ""
50#endif 143#endif
@@ -147,10 +240,10 @@ static char cfq_word_lut_title_caps[
147 sizeof(CFQ_WORD_Y) + sizeof(CFQ_WORD_Z) 240 sizeof(CFQ_WORD_Y) + sizeof(CFQ_WORD_Z)
148]; 241];
149 242
150#define BASE 0 /* default layer */ 243#define LAYER_BASE 0 /* default layer */
151#define SYMB 1 /* symbols */ 244#define LAYER_SYMB 1 /* symbols */
152#define MDIA 2 /* media keys */ 245#define LAYER_MDIA 2 /* media keys */
153#define WORD 3 /* experimental keys */ 246#define LAYER_FKEY 3 /* F-Keys & Words */
154 247
155enum custom_keycodes { 248enum custom_keycodes {
156 PLACEHOLDER = SAFE_RANGE, /* can always be here */ 249 PLACEHOLDER = SAFE_RANGE, /* can always be here */
@@ -183,7 +276,14 @@ enum custom_keycodes {
183}; 276};
184 277
185#ifdef CFQ_USE_DYNAMIC_MACRO 278#ifdef CFQ_USE_DYNAMIC_MACRO
186#include "dynamic_macro.h" 279# include "dynamic_macro.h"
280#else
281 /* avoid ifdef's in keymap */
282# define DYN_REC_START1 KC_TRNS
283# define DYN_REC_START2 KC_TRNS
284# define DYN_REC_PLAY1 KC_TRNS
285# define DYN_REC_PLAY2 KC_TRNS
286# define DYN_REC_STOP KC_TRNS
187#endif 287#endif
188 288
189#ifdef CFQ_USE_MOMENTARY_LAYER_KEYS 289#ifdef CFQ_USE_MOMENTARY_LAYER_KEYS
@@ -198,50 +298,50 @@ enum custom_keycodes {
198 298
199const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 299const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
200/* Keymap 0: Basic layer 300/* Keymap 0: Basic layer
201 * ,--------------------------------------------------. ,--------------------------------------------------. 301 * .--------------------------------------------------. .--------------------------------------------------.
202 * | Grave | ! | @ | # | $ | % | { | | } | ^ | & | * | - | = | BSpace | 302 * | Grave | ! | @ | # | $ | % | { | | } | ^ | & | * | - | = | BSpace |
203 * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| 303 * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
204 * | Tab | Q | W | E | R | T | ( | | ) | Y | U | I | O | P | \ | 304 * | Tab | Q | W | E | R | T | ( | | ) | Y | U | I | O | P | \ |
205 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 305 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
206 * | Esc | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | 306 * | Esc | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
207 * |--------+------+------+------+------+------| [ | | ] |------+------+------+------+------+--------| 307 * |--------+------+------+------+------+------| [ | | ] |------+------+------+------+------+--------|
208 * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | 308 * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
209 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' 309 * '--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
210 * | LCtl |Super | Alt | ~L1 |Space | | Left | Down | Up |Right | Del | 310 * | LCtl |Super | Alt | ~L1 |Space | | Left | Down | Up |Right | Del |
211 * `----------------------------------' `----------------------------------' 311 * '----------------------------------' '----------------------------------'
212 * ,-------------. ,-------------. 312 * .-------------. .-------------.
213 * | Ins |NumClk| | Home | End | 313 * | Ins |NumClk| | Home | End |
214 * ,------+------+------| |------+------+------. 314 * .------+------+------| |------+------+------.
215 * | | |CapsLk| | PgUp | | | 315 * | | |CapsLk| | PgUp | | |
216 * |BSpace| Del |------| |------| ~L2 |Enter | 316 * |BSpace| Del |------| |------| ~L2 |Enter |
217 * | | | ~L3 | | PgDn | | | 317 * | | | ~L3 | | PgDn | | |
218 * `--------------------' `--------------------' 318 * '--------------------' '--------------------'
219 * 319 *
220 * Optional overrides: see CFQ_USER_KEY# defines. 320 * Optional overrides: see CFQ_USER_KEY# defines.
221 * 321 *
222 * ,--------------------------------------------------. ,--------------------------------------------------. 322 * .--------------------------------------------------. .--------------------------------------------------.
223 * | | | | | | | | | | | | | | | USR0 | 323 * | | | | | | | | | | | | | | | USR0 |
224 * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| 324 * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
225 * | | | | | | | | | | | | | | | | 325 * | | | | | | | | | | | | | | | |
226 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 326 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
227 * | | | | | | |------| |------| | | | | | | 327 * | | | | | | |------| |------| | | | | | |
228 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 328 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
229 * | | | | | | | | | | | | | | | | 329 * | | | | | | | | | | | | | | | |
230 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' 330 * '--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
231 * | | | | USR1 | | | | | | | USR8 | 331 * | | | | USR1 | | | | | | | USR8 |
232 * `----------------------------------' `----------------------------------' 332 * '----------------------------------' '----------------------------------'
233 * ,-------------. ,-------------. 333 * .-------------. .-------------.
234 * | USR2 | USR3 | | | | 334 * | USR2 | USR3 | | | |
235 * ,------+------+------| |------+------+------. 335 * .------+------+------| |------+------+------.
236 * | | | USR6 | | | | | 336 * | | | USR6 | | | | |
237 * | USR4 | USR5 |------| |------| | | 337 * | USR4 | USR5 |------| |------| | |
238 * | | | USR7 | | | | | 338 * | | | USR7 | | | | |
239 * `--------------------' `--------------------' 339 * '--------------------' '--------------------'
240 */ 340 */
241 341
242/* If it accepts an argument (i.e, is a function), it doesn't need KC_. 342/* If it accepts an argument (i.e, is a function), it doesn't need KC_.
243 * Otherwise, it needs KC_* */ 343 * Otherwise, it needs KC_* */
244[BASE] = LAYOUT_ergodox( /* layer 0 : default */ 344[LAYER_BASE] = LAYOUT_ergodox_76_or_80( /* layer 0 : default */
245 /* left hand */ 345 /* left hand */
246 KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_LCBR, 346 KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_LCBR,
247 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LPRN, 347 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LPRN,
@@ -249,7 +349,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
249 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, 349 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC,
250 KC_LCTL, KC_LGUI, KC_LALT, CFQ_USER_KEY1, KC_SPC, 350 KC_LCTL, KC_LGUI, KC_LALT, CFQ_USER_KEY1, KC_SPC,
251 CFQ_USER_KEY2, CFQ_USER_KEY3, 351 CFQ_USER_KEY2, CFQ_USER_KEY3,
252 CFQ_USER_KEY6, 352 K80(L0K0), K80(L0K1), CFQ_USER_KEY6,
253 CFQ_USER_KEY4, CFQ_USER_KEY5, CFQ_USER_KEY7, 353 CFQ_USER_KEY4, CFQ_USER_KEY5, CFQ_USER_KEY7,
254 /* right hand */ 354 /* right hand */
255 KC_RCBR, KC_CIRC, KC_AMPR, KC_ASTR,KC_MINS, KC_EQL, CFQ_USER_KEY0, 355 KC_RCBR, KC_CIRC, KC_AMPR, KC_ASTR,KC_MINS, KC_EQL, CFQ_USER_KEY0,
@@ -258,46 +358,41 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
258 KC_RBRC, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, 358 KC_RBRC, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
259 KC_LEFT, KC_DOWN,KC_UP, KC_RGHT, CFQ_USER_KEY8, 359 KC_LEFT, KC_DOWN,KC_UP, KC_RGHT, CFQ_USER_KEY8,
260 KC_HOME, KC_END, 360 KC_HOME, KC_END,
261 KC_PGUP, 361 KC_PGUP, K80(L0K2), K80(L0K3),
262 KC_PGDN, CFQ_KC_FN2, KC_ENT 362 KC_PGDN, CFQ_KC_FN2, KC_ENT
263),/* Keymap 1: KeyPad, Macro Record 363),
364/* Keymap 1: KeyPad, Macro Record
264 * 365 *
265 * ,--------------------------------------------------. ,--------------------------------------------------. 366 * .--------------------------------------------------. .--------------------------------------------------.
266 * | | | | | | | {} | | }{ | |NumLck| / | * | - | | 367 * | | | | | | | {} | | }{ | |NumLck| / | * | - | |
267 * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| 368 * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
268 * | | | | | | => | () | | )( | <= | 7 | 8 | 9 | + | | 369 * | | | | | | => | () | | )( | <= | 7 | 8 | 9 | + | |
269 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 370 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
270 * | | | | | | -> |------| |------| <- | 4 | 5 | 6 | + | | 371 * | | | | | | -> |------| |------| <- | 4 | 5 | 6 | + | |
271 * |--------+------+------+------+------+------| [] | | ][ |------+------+------+------+------+--------| 372 * |--------+------+------+------+------+------| [] | | ][ |------+------+------+------+------+--------|
272 * | | | | | | <> | | | | >< | 1 | 2 | 3 | Enter| | 373 * | | | | | | <> | | | | >< | 1 | 2 | 3 | Enter| |
273 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' 374 * '--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
274 * | | | | | | | 0 | | . | Enter| | 375 * | | | | | | | 0 | | . | Enter| |
275 * `----------------------------------' `----------------------------------' 376 * '----------------------------------' '----------------------------------'
276 * ,-------------. ,--------------. 377 * .-------------. .-------------.
277 * |Start1|Start2| | | | 378 * |Start1|Start2| | | |
278 * ,------+------+------| |------+-------+------. 379 * .------+------+------| |------+------+------.
279 * | | | Stop | | | | | 380 * | | | Stop | | | | |
280 * |Play1 |Play2 |------| |------| | | 381 * |Play1 |Play2 |------| |------| | |
281 * | | | | | | | | 382 * | | | | | | | |
282 * `--------------------' `---------------------' 383 * '--------------------' '--------------------'
283 */ 384 */
284/* SYMBOLS */ 385/* SYMBOLS */
285[SYMB] = LAYOUT_ergodox( 386[LAYER_SYMB] = LAYOUT_ergodox_76_or_80(
286 /* left hand */ 387 /* left hand */
287 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M_BRACKET_IN_CBR, 388 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M_BRACKET_IN_CBR,
288 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M_ARROW_REQL, M_BRACKET_IN_PRN, 389 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M_ARROW_REQL, M_BRACKET_IN_PRN,
289 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M_ARROW_RMINUS, 390 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M_ARROW_RMINUS,
290 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M_BRACKET_IN_ANG, M_BRACKET_IN_BRC, 391 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M_BRACKET_IN_ANG, M_BRACKET_IN_BRC,
291 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 392 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
292#ifdef CFQ_USE_DYNAMIC_MACRO 393 DYN_REC_START1, DYN_REC_START2,
293 DYN_REC_START1, DYN_REC_START2, 394 K80(L1K0), K80(L1K1), DYN_REC_STOP,
294 DYN_REC_STOP, 395 DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, KC_TRNS,
295 DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, KC_TRNS,
296#else
297 KC_TRNS, KC_TRNS,
298 KC_TRNS,
299 KC_TRNS, KC_TRNS, KC_TRNS,
300#endif
301 /* right hand */ 396 /* right hand */
302 M_BRACKET_OUT_CBR, KC_TRNS, KC_NLCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, KC_TRNS, 397 M_BRACKET_OUT_CBR, KC_TRNS, KC_NLCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, KC_TRNS,
303 M_BRACKET_OUT_PRN, M_ARROW_LEQL, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, KC_TRNS, 398 M_BRACKET_OUT_PRN, M_ARROW_LEQL, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, KC_TRNS,
@@ -305,41 +400,41 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
305 M_BRACKET_OUT_BRC, M_BRACKET_OUT_ANG, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, KC_TRNS, 400 M_BRACKET_OUT_BRC, M_BRACKET_OUT_ANG, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, KC_TRNS,
306 KC_KP_0, KC_TRNS, KC_KP_DOT, KC_KP_ENTER, KC_TRNS, 401 KC_KP_0, KC_TRNS, KC_KP_DOT, KC_KP_ENTER, KC_TRNS,
307 KC_TRNS, KC_TRNS, 402 KC_TRNS, KC_TRNS,
308 KC_TRNS, 403 KC_TRNS, K80(L1K2), K80(L1K3),
309 KC_TRNS, KC_TRNS, KC_TRNS 404 KC_TRNS, KC_TRNS, KC_TRNS
310), 405),
311/* Keymap 2: F-Keys, media and mouse keys 406/* Keymap 2: F-Keys, media and mouse keys
312 * 407 *
313 * ,--------------------------------------------------. ,--------------------------------------------------. 408 * .--------------------------------------------------. .--------------------------------------------------.
314 * | | | | | | | | | | | | | | | | 409 * | | | | | | | | | | | | | | | |
315 * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| 410 * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
316 * | | | | MsUp | | |MWhlUp| | | | | | | | | 411 * | | | | MsUp | | |MWhlUp| | | | | | | | |
317 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 412 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
318 * | | |MsLeft|MsDown|MsRght| |------| |------| Left | Down | Up |Right | | | 413 * | | |MsLeft|MsDown|MsRght| |------| |------| Left | Down | Up |Right | | |
319 * |--------+------+------+------+------+------|MWhlDn| | |------+------+------+------+------+--------| 414 * |--------+------+------+------+------+------|MWhlDn| | |------+------+------+------+------+--------|
320 * | | | Rclk | Mclk | Lclk | | | | | | | | | | | 415 * | | | Rclk | Mclk | Lclk | | | | | | | | | | |
321 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' 416 * '--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
322 * | | | | | | | | | | | | 417 * | | | | | | | | | | | |
323 * `----------------------------------' `----------------------------------' 418 * '----------------------------------' '----------------------------------'
324 * ,-------------. ,-------------. 419 * .-------------. .-------------.
325 * | MRwd | MFwd | | MPrv | MNxt | 420 * | MRwd | MFwd | | MPrv | MNxt |
326 * ,------+------+------| |------+------+------. 421 * .------+------+------| |------+------+------.
327 * | | | | |VolUp | | | 422 * | | | | |VolUp | | |
328 * | Mute | |------| |------| | Play | 423 * | Mute | |------| |------| | Play |
329 * | | | | |VolDn | | | 424 * | | | | |VolDn | | |
330 * `--------------------' `--------------------' 425 * '--------------------' '--------------------'
331 */ 426 */
332/* MEDIA AND MOUSE */ 427/* MEDIA AND MOUSE */
333[MDIA] = LAYOUT_ergodox( 428[LAYER_MDIA] = LAYOUT_ergodox_76_or_80(
334 /* left hand */ 429 /* left hand */
335 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 430 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
336 KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_WH_U, 431 KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_WH_U,
337 KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, 432 KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
338 KC_TRNS, KC_TRNS, KC_BTN2, KC_BTN3, KC_BTN1, KC_TRNS, KC_WH_D, 433 KC_TRNS, KC_TRNS, KC_BTN2, KC_BTN3, KC_BTN1, KC_TRNS, KC_WH_D,
339 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 434 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
340 KC_MRWD, KC_MFFD, 435 KC_MRWD, KC_MFFD,
341 KC_TRNS, 436 K80(L2K0), K80(L2K1), KC_TRNS,
342 KC_MUTE, KC_TRNS, KC_TRNS, 437 KC_MUTE, KC_TRNS, KC_TRNS,
343 /* right hand */ 438 /* right hand */
344 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 439 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
345 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 440 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -347,42 +442,42 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
347 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 442 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
348 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 443 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
349 KC_MPRV, KC_MNXT, 444 KC_MPRV, KC_MNXT,
350 KC_VOLU, 445 KC_VOLU, K80(L2K2), K80(L1K3),
351 KC_VOLD, KC_TRNS, KC_MPLY 446 KC_VOLD, KC_TRNS, KC_MPLY
352), 447),
353/* Keymap 3: Entire Words (one for each key) 448/* Keymap 3: Entire Words (one for each key)
354 * 449 *
355 * ,--------------------------------------------------. ,--------------------------------------------------. 450 * .--------------------------------------------------. .--------------------------------------------------.
356 * | | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | | 451 * | | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | |
357 * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| 452 * |--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
358 * | | Q | W | E | R | T | | | | Y | U | I | O | P | | 453 * | | Q | W | E | R | T | | | | Y | U | I | O | P | |
359 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 454 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
360 * | | A | S | D | F | G |------| |------| H | J | K | L | | | 455 * | | A | S | D | F | G |------| |------| H | J | K | L | | |
361 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 456 * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
362 * | | Z | X | C | V | B | | | | N | M | | | | | 457 * | | Z | X | C | V | B | | | | N | M | | | | |
363 * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' 458 * '--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
364 * | | | | | | | | | | | | 459 * | | | | | | | | | | | |
365 * `----------------------------------' `----------------------------------' 460 * '----------------------------------' '----------------------------------'
366 * ,-------------. ,-------------. 461 * .-------------. .-------------.
367 * | | | | | | 462 * | | | | | |
368 * ,------+------+------| |------+------+------. 463 * .------+------+------| |------+------+------.
369 * | | | | | | | | 464 * | | | | | | | |
370 * | | |------| |------| | | 465 * | | |------| |------| | |
371 * | | | | | | | | 466 * | | | | | | | |
372 * `--------------------' `--------------------' 467 * '--------------------' '--------------------'
373 */ 468 */
374 469
375/* WORDS */ 470/* FKEY & WORDS */
376[WORD] = LAYOUT_ergodox( 471[LAYER_FKEY] = LAYOUT_ergodox_76_or_80(
377 /* left hand */ 472 /* left hand */
378 KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, 473 KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11,
379 KC_TRNS, M_WORD_Q, M_WORD_W, M_WORD_E, M_WORD_R, M_WORD_T, KC_TRNS, 474 KC_TRNS, M_WORD_Q, M_WORD_W, M_WORD_E, M_WORD_R, M_WORD_T, KC_TRNS,
380 KC_TRNS, M_WORD_A, M_WORD_S, M_WORD_D, M_WORD_F, M_WORD_G, 475 KC_TRNS, M_WORD_A, M_WORD_S, M_WORD_D, M_WORD_F, M_WORD_G,
381 KC_TRNS, M_WORD_Z, M_WORD_X, M_WORD_C, M_WORD_V, M_WORD_B, KC_TRNS, 476 KC_TRNS, M_WORD_Z, M_WORD_X, M_WORD_C, M_WORD_V, M_WORD_B, KC_TRNS,
382 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 477 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
383 KC_TRNS, KC_TRNS, 478 KC_TRNS, KC_TRNS,
384 KC_TRNS, 479 K80(L3K0), K80(L3K1), KC_TRNS,
385 KC_TRNS, KC_TRNS, KC_TRNS, 480 KC_TRNS, KC_TRNS, KC_TRNS,
386 /* right hand */ 481 /* right hand */
387 KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS, 482 KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
388 KC_TRNS, M_WORD_Y, M_WORD_U, M_WORD_I, M_WORD_O, M_WORD_P, KC_TRNS, 483 KC_TRNS, M_WORD_Y, M_WORD_U, M_WORD_I, M_WORD_O, M_WORD_P, KC_TRNS,
@@ -390,25 +485,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
390 KC_TRNS, M_WORD_N, M_WORD_M, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 485 KC_TRNS, M_WORD_N, M_WORD_M, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
391 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 486 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
392 KC_TRNS, KC_TRNS, 487 KC_TRNS, KC_TRNS,
393 KC_TRNS, 488 KC_TRNS, K80(L3K2), K80(L3K3),
394 KC_TRNS, KC_TRNS, KC_TRNS 489 KC_TRNS, KC_TRNS, KC_TRNS
395), 490),
396}; 491};
397 492
398const uint16_t PROGMEM fn_actions[] = { 493const uint16_t PROGMEM fn_actions[] = {
399 [1] = ACTION_LAYER_TAP_TOGGLE(SYMB), /* FN1 - Momentary Layer 1 (Symbols) */ 494 [1] = ACTION_LAYER_TAP_TOGGLE(LAYER_SYMB), /* FN1 - Momentary Layer 1 (Symbols) */
400 [2] = ACTION_LAYER_TAP_TOGGLE(MDIA), /* FN2 - Momentary Layer 2 (Media) */ 495 [2] = ACTION_LAYER_TAP_TOGGLE(LAYER_MDIA), /* FN2 - Momentary Layer 2 (Media) */
401 [3] = ACTION_LAYER_TAP_TOGGLE(WORD), /* FN3 - Momentary Layer 3 (Words) */ 496 [3] = ACTION_LAYER_TAP_TOGGLE(LAYER_FKEY), /* FN3 - Momentary Layer 3 (FKey's & Words) */
402}; 497};
403 498
404 499#define WITHOUT_MODS(...) \
405 #define WITHOUT_MODS(...) \ 500 do { \
406 do { \ 501 uint8_t _real_mods = get_mods(); \
407 uint8_t _real_mods = get_mods(); \ 502 clear_mods(); \
408 clear_mods(); \ 503 { __VA_ARGS__ } \
409 { __VA_ARGS__ } \ 504 set_mods(_real_mods); \
410 set_mods(_real_mods); \ 505 } while (0)
411 } while (0)
412 506
413bool process_record_user(uint16_t keycode, keyrecord_t *record) { 507bool process_record_user(uint16_t keycode, keyrecord_t *record) {
414#ifdef CFQ_USE_DYNAMIC_MACRO 508#ifdef CFQ_USE_DYNAMIC_MACRO
diff --git a/layouts/community/ergodox/qwerty_code_friendly/readme.md b/layouts/community/ergodox/qwerty_code_friendly/readme.md
index 29a04e689..d800a0a02 100644
--- a/layouts/community/ergodox/qwerty_code_friendly/readme.md
+++ b/layouts/community/ergodox/qwerty_code_friendly/readme.md
@@ -44,50 +44,54 @@ using `CFQ_` prefixed defines which can be set by passing `EXTRAFLAGS` to make.
44- `CFQ_WORD_[A-Z]` 44- `CFQ_WORD_[A-Z]`
45 defines can bind a key to an entire user defined word. 45 defines can bind a key to an entire user defined word.
46 46
47- `CFQ_USE_80_KEYS`
48 enables 80 key layout, none of the extra keys are bound,
49 they need to be set with defines: `CFQ_USER_K80_L0K0` .. `CFQ_USER_K80_L3K4`.
50 Where `L#` is the layer and `K#` is the key.
47 51
48 52
49## Keymap 0: Basic layer 53## Keymap 0: Basic layer
50 54
51``` 55```
52,--------------------------------------------------. ,--------------------------------------------------. 56.--------------------------------------------------. .--------------------------------------------------.
53| Grave | ! | @ | # | $ | % | { | | } | ^ | & | * | - | = | BSpace | 57| Grave | ! | @ | # | $ | % | { | | } | ^ | & | * | - | = | BSpace |
54|--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| 58|--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
55| Tab | Q | W | E | R | T | ( | | ) | Y | U | I | O | P | \ | 59| Tab | Q | W | E | R | T | ( | | ) | Y | U | I | O | P | \ |
56|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 60|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
57| Esc | A | S | D | F | G |------| |------| H | J | K | L | ; | ' | 61| Esc | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
58|--------+------+------+------+------+------| [ | | ] |------+------+------+------+------+--------| 62|--------+------+------+------+------+------| [ | | ] |------+------+------+------+------+--------|
59| LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift | 63| LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
60`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' 64'--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
61 | LCtl |Super | Alt | ~L1 |Space | | Left | Down | Up |Right | Del | 65 | LCtl |Super | Alt | ~L1 |Space | | Left | Down | Up |Right | Del |
62 `----------------------------------' `----------------------------------' 66 '----------------------------------' '----------------------------------'
63 ,-------------. ,-------------. 67 .-------------. .-------------.
64 | Ins |NumClk| | Home | End | 68 | Ins |NumClk| | Home | End |
65 ,------+------+------| |------+------+------. 69 .------+------+------| |------+------+------.
66 | | |CapsLk| | PgUp | | | 70 | | |CapsLk| | PgUp | | |
67 |BSpace| Del |------| |------| ~L2 |Enter | 71 |BSpace| Del |------| |------| ~L2 |Enter |
68 | | | ~L3 | | PgDn | | | 72 | | | ~L3 | | PgDn | | |
69 `--------------------' `--------------------' 73 '--------------------' '--------------------'
70 74
71Optional overrides: see CFQ_USER_KEY# defines. 75Optional overrides: see CFQ_USER_KEY# defines.
72 76
73,--------------------------------------------------. ,--------------------------------------------------. 77.--------------------------------------------------. .--------------------------------------------------.
74| | | | | | | | | | | | | | | USR0 | 78| | | | | | | | | | | | | | | USR0 |
75|--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| 79|--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
76| | | | | | | | | | | | | | | | 80| | | | | | | | | | | | | | | |
77|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 81|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
78| | | | | | |------| |------| | | | | | | 82| | | | | | |------| |------| | | | | | |
79|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 83|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
80| | | | | | | | | | | | | | | | 84| | | | | | | | | | | | | | | |
81`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' 85'--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
82 | | | | USR1 | | | | | | | USR8 | 86 | | | | USR1 | | | | | | | USR8 |
83 `----------------------------------' `----------------------------------' 87 '----------------------------------' '----------------------------------'
84 ,-------------. ,-------------. 88 .-------------. .-------------.
85 | USR2 | USR3 | | | | 89 | USR2 | USR3 | | | |
86 ,------+------+------| |------+------+------. 90 .------+------+------| |------+------+------.
87 | | | USR6 | | | | | 91 | | | USR6 | | | | |
88 | USR4 | USR5 |------| |------| | | 92 | USR4 | USR5 |------| |------| | |
89 | | | USR7 | | | | | 93 | | | USR7 | | | | |
90 `--------------------' `--------------------' 94 '--------------------' '--------------------'
91``` 95```
92 96
93## Keymap 1: KeyPad, Macro Record 97## Keymap 1: KeyPad, Macro Record
@@ -98,47 +102,47 @@ Notes:
98- The left thumb cluster is used for macro record/replay. 102- The left thumb cluster is used for macro record/replay.
99 103
100``` 104```
101,--------------------------------------------------. ,--------------------------------------------------. 105.--------------------------------------------------. .--------------------------------------------------.
102| | | | | | | {} | | }{ | |NumLck| / | * | - | | 106| | | | | | | {} | | }{ | |NumLck| / | * | - | |
103|--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| 107|--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
104| | | | | | => | () | | )( | <= | 7 | 8 | 9 | + | | 108| | | | | | => | () | | )( | <= | 7 | 8 | 9 | + | |
105|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 109|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
106| | | | | | -> |------| |------| <- | 4 | 5 | 6 | + | | 110| | | | | | -> |------| |------| <- | 4 | 5 | 6 | + | |
107|--------+------+------+------+------+------| [] | | ][ |------+------+------+------+------+--------| 111|--------+------+------+------+------+------| [] | | ][ |------+------+------+------+------+--------|
108| | | | | | <> | | | | >< | 1 | 2 | 3 | Enter| | 112| | | | | | <> | | | | >< | 1 | 2 | 3 | Enter| |
109`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' 113'--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
110 | | | | | | | 0 | | . | Enter| | 114 | | | | | | | 0 | | . | Enter| |
111 `----------------------------------' `----------------------------------' 115 '----------------------------------' '----------------------------------'
112 ,-------------. ,--------------. 116 .-------------. .-------------.
113 |Start1|Start2| | | | 117 |Start1|Start2| | | |
114 ,------+------+------| |------+-------+------. 118 .------+------+------| |------+------+------.
115 | | | Stop | | | | | 119 | | | Stop | | | | |
116 |Play1 |Play2 |------| |------| | | 120 |Play1 |Play2 |------| |------| | |
117 | | | | | | | | 121 | | | | | | | |
118 `--------------------' `---------------------' 122 '--------------------' '--------------------'
119``` 123```
120 124
121## Keymap 2: Keymap 2: Media and mouse keys 125## Keymap 2: Keymap 2: Media and mouse keys
122 126
123``` 127```
124,--------------------------------------------------. ,--------------------------------------------------. 128.--------------------------------------------------. .--------------------------------------------------.
125| | | | | | | | | | | | | | | | 129| | | | | | | | | | | | | | | |
126|--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| 130|--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
127| | | | MsUp | | |MWhlUp| | | | | | | | | 131| | | | MsUp | | |MWhlUp| | | | | | | | |
128|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 132|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
129| | |MsLeft|MsDown|MsRght| |------| |------| Left | Down | Up |Right | | | 133| | |MsLeft|MsDown|MsRght| |------| |------| Left | Down | Up |Right | | |
130|--------+------+------+------+------+------|MWhlDn| | |------+------+------+------+------+--------| 134|--------+------+------+------+------+------|MWhlDn| | |------+------+------+------+------+--------|
131| | | Rclk | Mclk | Lclk | | | | | | | | | | | 135| | | Rclk | Mclk | Lclk | | | | | | | | | | |
132`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' 136'--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
133 | | | | | | | | | | | | 137 | | | | | | | | | | | |
134 `----------------------------------' `----------------------------------' 138 '----------------------------------' '----------------------------------'
135 ,-------------. ,-------------. 139 .-------------. .-------------.
136 | MRwd | MFwd | | MPrv | MNxt | 140 | MRwd | MFwd | | MPrv | MNxt |
137 ,------+------+------| |------+------+------. 141 .------+------+------| |------+------+------.
138 | | | | |VolUp | | | 142 | | | | |VolUp | | |
139 | Mute | |------| |------| | Play | 143 | Mute | |------| |------| | Play |
140 | | | | |VolDn | | | 144 | | | | |VolDn | | |
141 `--------------------' `--------------------' 145 '--------------------' '--------------------'
142``` 146```
143 147
144## Keymap 3: K-Keys & User defined words 148## Keymap 3: K-Keys & User defined words
@@ -148,28 +152,31 @@ You can define the arguments (which must be quoted) using: `CFQ_WORD_[A-Z]`
148eg: `-DCFQ_WORD_E=\"my@email.com\"` 152eg: `-DCFQ_WORD_E=\"my@email.com\"`
149 153
150``` 154```
151,--------------------------------------------------. ,--------------------------------------------------. 155.--------------------------------------------------. .--------------------------------------------------.
152| | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | | 156| | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | |
153|--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------| 157|--------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
154| | Q | W | E | R | T | | | | Y | U | I | O | P | | 158| | Q | W | E | R | T | | | | Y | U | I | O | P | |
155|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 159|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
156| | A | S | D | F | G |------| |------| H | J | K | L | | | 160| | A | S | D | F | G |------| |------| H | J | K | L | | |
157|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| 161|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
158| | Z | X | C | V | B | | | | N | M | | | | | 162| | Z | X | C | V | B | | | | N | M | | | | |
159`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' 163'--------+------+------+------+------+-------------' '-------------+------+------+------+------+--------'
160 | | | | | | | | | | | | 164 | | | | | | | | | | | |
161 `----------------------------------' `----------------------------------' 165 '----------------------------------' '----------------------------------'
162 ,-------------. ,-------------. 166 .-------------. .-------------.
163 | | | | | | 167 | | | | | |
164 ,------+------+------| |------+------+------. 168 .------+------+------| |------+------+------.
165 | | | | | | | | 169 | | | | | | | |
166 | | |------| |------| | | 170 | | |------| |------| | |
167 | | | | | | | | 171 | | | | | | | |
168 `--------------------' `--------------------' 172 '--------------------' '--------------------'
169``` 173```
170 174
171## Changelog 175## Changelog
172 176
177- 2018/04/14
178 Add `CFQ_USE_80_KEYS` to optionally support an 80 key layout.
179
173- 2018/03/08 180- 2018/03/08
174 Add `CFQ_USE_SHIFT_QUOTES` option. 181 Add `CFQ_USE_SHIFT_QUOTES` option.
175 Add `CFQ_USER_KEY8` key. 182 Add `CFQ_USER_KEY8` key.