mirror of
https://github.com/openstenoproject/qmk
synced 2024-11-10 18:49:08 +00:00
Change handling of adjust layer to make it more LT(...) friendly. (#1625)
* Change handling of adjust layer to make it more LT(...) friendly. * Update based on feedback from drashna. * Change handling of adjust layer to make it more LT(...) friendly. This reworks handling to make it a little more friendly to include in keymaps.
This commit is contained in:
parent
80ccbc7b54
commit
66e40529aa
3 changed files with 15 additions and 27 deletions
|
@ -34,12 +34,13 @@ enum planck_keycodes {
|
||||||
COLEMAK,
|
COLEMAK,
|
||||||
DVORAK,
|
DVORAK,
|
||||||
PLOVER,
|
PLOVER,
|
||||||
LOWER,
|
|
||||||
RAISE,
|
|
||||||
BACKLIT,
|
BACKLIT,
|
||||||
EXT_PLV
|
EXT_PLV
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define LOWER MO(_LOWER)
|
||||||
|
#define RAISE MO(_RAISE)
|
||||||
|
|
||||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
|
|
||||||
/* Qwerty
|
/* Qwerty
|
||||||
|
@ -177,6 +178,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||||
float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
|
float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
uint32_t layer_state_set_user(uint32_t state) {
|
||||||
|
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
|
||||||
|
}
|
||||||
|
|
||||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
switch (keycode) {
|
switch (keycode) {
|
||||||
case QWERTY:
|
case QWERTY:
|
||||||
|
@ -198,26 +203,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
case LOWER:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
layer_on(_LOWER);
|
|
||||||
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
|
||||||
} else {
|
|
||||||
layer_off(_LOWER);
|
|
||||||
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
case RAISE:
|
|
||||||
if (record->event.pressed) {
|
|
||||||
layer_on(_RAISE);
|
|
||||||
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
|
||||||
} else {
|
|
||||||
layer_off(_RAISE);
|
|
||||||
update_tri_layer(_LOWER, _RAISE, _ADJUST);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
case BACKLIT:
|
case BACKLIT:
|
||||||
if (record->event.pressed) {
|
if (record->event.pressed) {
|
||||||
register_code(KC_RSFT);
|
register_code(KC_RSFT);
|
||||||
|
|
|
@ -780,12 +780,14 @@ void set_single_persistent_default_layer(uint8_t default_layer) {
|
||||||
default_layer_set(1U<<default_layer);
|
default_layer_set(1U<<default_layer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t update_tri_layer_state(uint32_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
|
||||||
|
uint32_t mask12 = (1UL << layer1) | (1UL << layer2);
|
||||||
|
uint32_t mask3 = 1UL << layer3;
|
||||||
|
return (state & mask12) == mask12 ? (state | mask3) : (state & ~mask3);
|
||||||
|
}
|
||||||
|
|
||||||
void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
|
void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
|
||||||
if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
|
layer_state_set(update_tri_layer_state(layer_state, layer1, layer2, layer3));
|
||||||
layer_on(layer3);
|
|
||||||
} else {
|
|
||||||
layer_off(layer3);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void tap_random_base64(void) {
|
void tap_random_base64(void) {
|
||||||
|
|
|
@ -142,6 +142,7 @@ void send_char(char ascii_code);
|
||||||
|
|
||||||
// For tri-layer
|
// For tri-layer
|
||||||
void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3);
|
void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3);
|
||||||
|
uint32_t update_tri_layer_state(uint32_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3);
|
||||||
|
|
||||||
void set_single_persistent_default_layer(uint8_t default_layer);
|
void set_single_persistent_default_layer(uint8_t default_layer);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue