qwerty_code_friendly: minor updates (#2494)
* qwerty_code_friendly: minor updates - Correct mistake in ascii keymap. - Make lower right key delete again, but make it configurable. - Make double shift for double quotes optional. * qwerty_code_friendly: shift users title-caps
This commit is contained in:
parent
3313473004
commit
0603dcb1be
@ -12,6 +12,9 @@
|
||||
/* Personal preference (enable by passing EXTRAFLAGS=... to make). */
|
||||
/* #define CFQ_USE_MOMENTARY_LAYER_KEYS */
|
||||
|
||||
/* Holding right/left or left/right shift for single or double quote pair */
|
||||
/* #define CFQ_USE_SHIFT_QUOTES */
|
||||
|
||||
#define CFQ_USE_DYNAMIC_MACRO
|
||||
|
||||
#if !defined(CFQ_USER_KEY0)
|
||||
@ -21,10 +24,10 @@
|
||||
# define CFQ_USER_KEY1 CFQ_KC_FN1
|
||||
#endif
|
||||
#if !defined(CFQ_USER_KEY2)
|
||||
# define CFQ_USER_KEY2 KC_LT
|
||||
# define CFQ_USER_KEY2 KC_INS
|
||||
#endif
|
||||
#if !defined(CFQ_USER_KEY3)
|
||||
# define CFQ_USER_KEY3 KC_GT
|
||||
# define CFQ_USER_KEY3 KC_NLCK
|
||||
#endif
|
||||
#if !defined(CFQ_USER_KEY4)
|
||||
# define CFQ_USER_KEY4 KC_BSPC
|
||||
@ -38,6 +41,9 @@
|
||||
#if !defined(CFQ_USER_KEY7)
|
||||
# define CFQ_USER_KEY7 CFQ_KC_FN3
|
||||
#endif
|
||||
#if !defined(CFQ_USER_KEY8)
|
||||
# define CFQ_USER_KEY8 KC_DEL
|
||||
#endif
|
||||
|
||||
#ifndef CFQ_WORD_A
|
||||
#define CFQ_WORD_A ""
|
||||
@ -118,14 +124,29 @@
|
||||
#define CFQ_WORD_Z ""
|
||||
#endif
|
||||
|
||||
static const char *cfq_word_lut[26] = {
|
||||
CFQ_WORD_A, CFQ_WORD_B, CFQ_WORD_C, CFQ_WORD_D, CFQ_WORD_E, CFQ_WORD_F,
|
||||
CFQ_WORD_G, CFQ_WORD_H, CFQ_WORD_I, CFQ_WORD_J, CFQ_WORD_K, CFQ_WORD_L,
|
||||
CFQ_WORD_M, CFQ_WORD_N, CFQ_WORD_O, CFQ_WORD_P, CFQ_WORD_Q, CFQ_WORD_R,
|
||||
CFQ_WORD_S, CFQ_WORD_T, CFQ_WORD_U, CFQ_WORD_V, CFQ_WORD_W, CFQ_WORD_X,
|
||||
CFQ_WORD_Y, CFQ_WORD_Z,
|
||||
/* lower and title capitals versions (setup at start). */
|
||||
static char *cfq_word_lut[2][26] = {
|
||||
{
|
||||
CFQ_WORD_A, CFQ_WORD_B, CFQ_WORD_C, CFQ_WORD_D, CFQ_WORD_E, CFQ_WORD_F,
|
||||
CFQ_WORD_G, CFQ_WORD_H, CFQ_WORD_I, CFQ_WORD_J, CFQ_WORD_K, CFQ_WORD_L,
|
||||
CFQ_WORD_M, CFQ_WORD_N, CFQ_WORD_O, CFQ_WORD_P, CFQ_WORD_Q, CFQ_WORD_R,
|
||||
CFQ_WORD_S, CFQ_WORD_T, CFQ_WORD_U, CFQ_WORD_V, CFQ_WORD_W, CFQ_WORD_X,
|
||||
CFQ_WORD_Y, CFQ_WORD_Z,
|
||||
},
|
||||
{NULL}
|
||||
};
|
||||
|
||||
/* Storage for title-caps strings. */
|
||||
static char cfq_word_lut_title_caps[
|
||||
sizeof(CFQ_WORD_A) + sizeof(CFQ_WORD_B) + sizeof(CFQ_WORD_C) + sizeof(CFQ_WORD_D) +
|
||||
sizeof(CFQ_WORD_E) + sizeof(CFQ_WORD_F) + sizeof(CFQ_WORD_G) + sizeof(CFQ_WORD_H) +
|
||||
sizeof(CFQ_WORD_I) + sizeof(CFQ_WORD_J) + sizeof(CFQ_WORD_K) + sizeof(CFQ_WORD_L) +
|
||||
sizeof(CFQ_WORD_M) + sizeof(CFQ_WORD_N) + sizeof(CFQ_WORD_O) + sizeof(CFQ_WORD_P) +
|
||||
sizeof(CFQ_WORD_Q) + sizeof(CFQ_WORD_R) + sizeof(CFQ_WORD_S) + sizeof(CFQ_WORD_T) +
|
||||
sizeof(CFQ_WORD_U) + sizeof(CFQ_WORD_V) + sizeof(CFQ_WORD_W) + sizeof(CFQ_WORD_X) +
|
||||
sizeof(CFQ_WORD_Y) + sizeof(CFQ_WORD_Z)
|
||||
];
|
||||
|
||||
#define BASE 0 /* default layer */
|
||||
#define SYMB 1 /* symbols */
|
||||
#define MDIA 2 /* media keys */
|
||||
@ -186,13 +207,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* |--------+------+------+------+------+------| [ | | ] |------+------+------+------+------+--------|
|
||||
* | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | LCtl |Super | Alt | ~L1 |Space | | Left | Down | Up |Right | Ins |
|
||||
* | LCtl |Super | Alt | ~L1 |Space | | Left | Down | Up |Right | Del |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | < | > | | Home | End |
|
||||
* | Ins |NumClk| | Home | End |
|
||||
* ,------+------+------| |------+------+------.
|
||||
* | | |CapsLk| | PgUp | | |
|
||||
* |BSpace| Del |------| |------| ~L2 |Space |
|
||||
* |BSpace| Del |------| |------| ~L2 |Enter |
|
||||
* | | | ~L3 | | PgDn | | |
|
||||
* `--------------------' `--------------------'
|
||||
*
|
||||
@ -207,7 +228,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
* | | | | | | | | | | | | | | | |
|
||||
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
* | | | | USR1 | | | | | | | |
|
||||
* | | | | USR1 | | | | | | | USR8 |
|
||||
* `----------------------------------' `----------------------------------'
|
||||
* ,-------------. ,-------------.
|
||||
* | USR2 | USR3 | | | |
|
||||
@ -235,7 +256,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_RPRN, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
|
||||
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
|
||||
KC_RBRC, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_LEFT, KC_DOWN,KC_UP, KC_RGHT, KC_INS,
|
||||
KC_LEFT, KC_DOWN,KC_UP, KC_RGHT, CFQ_USER_KEY8,
|
||||
KC_HOME, KC_END,
|
||||
KC_PGUP,
|
||||
KC_PGDN, CFQ_KC_FN2, KC_ENT
|
||||
@ -380,6 +401,15 @@ const uint16_t PROGMEM fn_actions[] = {
|
||||
[3] = ACTION_LAYER_TAP_TOGGLE(WORD), /* FN3 - Momentary Layer 3 (Words) */
|
||||
};
|
||||
|
||||
|
||||
#define WITHOUT_MODS(...) \
|
||||
do { \
|
||||
uint8_t _real_mods = get_mods(); \
|
||||
clear_mods(); \
|
||||
{ __VA_ARGS__ } \
|
||||
set_mods(_real_mods); \
|
||||
} while (0)
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
#ifdef CFQ_USE_DYNAMIC_MACRO
|
||||
if (!process_record_dynamic_macro(keycode, record)) {
|
||||
@ -468,27 +498,33 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
#ifdef CFQ_USE_SHIFT_QUOTES
|
||||
case KC_LSHIFT: /* '' */
|
||||
if (record->event.pressed && (keyboard_report->mods & (MOD_BIT(KC_RSFT)))) {
|
||||
clear_mods();
|
||||
SEND_STRING("''" SS_TAP(X_LEFT) SS_DOWN(X_RSHIFT) SS_DOWN(X_LSHIFT));
|
||||
WITHOUT_MODS({
|
||||
SEND_STRING("''" SS_TAP(X_LEFT) SS_DOWN(X_RSHIFT) SS_DOWN(X_LSHIFT));
|
||||
});
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case KC_RSHIFT: /* "" */
|
||||
if (record->event.pressed && (keyboard_report->mods & (MOD_BIT(KC_LSFT)))) {
|
||||
clear_mods();
|
||||
SEND_STRING("\x22\x22" SS_TAP(X_LEFT) SS_DOWN(X_LSHIFT) SS_DOWN(X_RSHIFT));
|
||||
WITHOUT_MODS({
|
||||
SEND_STRING("\x22\x22" SS_TAP(X_LEFT) SS_DOWN(X_LSHIFT) SS_DOWN(X_RSHIFT));
|
||||
});
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
|
||||
#endif /* CFQ_USE_SHIFT_QUOTES */
|
||||
case M_WORD_A...M_WORD_Z:
|
||||
{
|
||||
const char *word = cfq_word_lut[keycode - M_WORD_A];
|
||||
uint8_t shift_index = (keyboard_report->mods & (MOD_BIT(KC_RSFT) | MOD_BIT(KC_LSFT))) ? 1 : 0;
|
||||
const char *word = cfq_word_lut[shift_index][keycode - M_WORD_A];
|
||||
if (record->event.pressed) {
|
||||
if (*word) {
|
||||
send_string(word);
|
||||
WITHOUT_MODS({
|
||||
send_string(word);
|
||||
});
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -502,6 +538,31 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
/* Runs just one time when the keyboard initializes. */
|
||||
void matrix_init_user(void) {
|
||||
|
||||
/* Duplicate 'cfq_word_lut[0][...]' into 'cfq_word_lut[1][...]' */
|
||||
{
|
||||
char *d = cfq_word_lut_title_caps;
|
||||
for (uint16_t i = 0; i < 26; i++) {
|
||||
char *s = cfq_word_lut[0][i];
|
||||
cfq_word_lut[1][i] = d;
|
||||
while ((*d++ = *s++)) {}
|
||||
}
|
||||
}
|
||||
/* Title caps. */
|
||||
for (uint16_t i = 0; i < 26; i++) {
|
||||
char *w = cfq_word_lut[1][i];
|
||||
bool prev_is_alpha = false;
|
||||
if (*w) {
|
||||
while (*w) {
|
||||
bool is_lower = (*w >= 'a' && *w <= 'z');
|
||||
bool is_upper = (*w >= 'A' && *w <= 'Z');
|
||||
if (prev_is_alpha == false && is_lower) {
|
||||
*w -= ('a' - 'A');
|
||||
}
|
||||
prev_is_alpha = is_lower || is_upper;
|
||||
w++;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/* Runs constantly in the background, in a loop. */
|
||||
|
@ -3,6 +3,9 @@
|
||||
- This layout aims to balance muscle memory from a typical QWERTY layout
|
||||
with having keys used for software development easily accessible.
|
||||
|
||||
The this layout is a normalized qwerty,
|
||||
with some configurable keys left thumb cluster so you can use it more as needed.
|
||||
|
||||
- Arrow keys follow VIM convention
|
||||
(the media layer even uses arrow keys for HJKL).
|
||||
|
||||
@ -21,13 +24,6 @@
|
||||
however using the larger thumb cluster
|
||||
ended up being more of a reach while typing.
|
||||
|
||||
- There is a handy shortcut for writing quotes that inserts the cursor
|
||||
between the quotation marks.
|
||||
|
||||
Holding LShift, then RShift types: "" (then presses left).
|
||||
|
||||
Holding RShift, then LShift types: '' (then presses left).
|
||||
|
||||
## Configuration
|
||||
|
||||
Some optional behavior is configurable without editing the code
|
||||
@ -37,6 +33,14 @@ using `CFQ_` prefixed defines which can be set by passing `EXTRAFLAGS` to make.
|
||||
(0..7) are used for custom-keys
|
||||
- `CFQ_USE_MOMENTARY_LAYER_KEYS`
|
||||
is used to prevent layer keys from toggling when tapped.
|
||||
- `CFQ_USE_SHIFT_QUOTES`
|
||||
an optional handy shortcut for writing quotes that inserts the
|
||||
cursor between the quotation marks.
|
||||
|
||||
Holding LShift, then RShift types: "" (then presses left).
|
||||
|
||||
Holding RShift, then LShift types: '' (then presses left).
|
||||
|
||||
- `CFQ_WORD_[A-Z]`
|
||||
defines can bind a key to an entire user defined word.
|
||||
|
||||
@ -54,13 +58,13 @@ using `CFQ_` prefixed defines which can be set by passing `EXTRAFLAGS` to make.
|
||||
|--------+------+------+------+------+------| [ | | ] |------+------+------+------+------+--------|
|
||||
| LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
|
||||
`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
| LCtl |Super | Alt | ~L1 |Space | | Left | Down | Up |Right | Ins |
|
||||
| LCtl |Super | Alt | ~L1 |Space | | Left | Down | Up |Right | Del |
|
||||
`----------------------------------' `----------------------------------'
|
||||
,-------------. ,-------------.
|
||||
| < | > | | Home | End |
|
||||
| Ins |NumClk| | Home | End |
|
||||
,------+------+------| |------+------+------.
|
||||
| | |CapsLk| | PgUp | | |
|
||||
|BSpace| Del |------| |------| ~L2 |Space |
|
||||
|BSpace| Del |------| |------| ~L2 |Enter |
|
||||
| | | ~L3 | | PgDn | | |
|
||||
`--------------------' `--------------------'
|
||||
|
||||
@ -75,7 +79,7 @@ Optional overrides: see CFQ_USER_KEY# defines.
|
||||
|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
|
||||
| | | | | | | | | | | | | | | |
|
||||
`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
|
||||
| | | | USR1 | | | | | | | |
|
||||
| | | | USR1 | | | | | | | USR8 |
|
||||
`----------------------------------' `----------------------------------'
|
||||
,-------------. ,-------------.
|
||||
| USR2 | USR3 | | | |
|
||||
@ -166,6 +170,12 @@ eg: `-DCFQ_WORD_E=\"my@email.com\"`
|
||||
|
||||
## Changelog
|
||||
|
||||
- 2018/03/08
|
||||
Add `CFQ_USE_SHIFT_QUOTES` option.
|
||||
Add `CFQ_USER_KEY8` key.
|
||||
|
||||
When holding shift `CFQ_WORD_[A-Z]` use title caps.
|
||||
|
||||
- 2018/03/06
|
||||
Add layer for user defined words (replaces `CFQ_USE_EXPEREMENTAL_LAYER`).
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user