Skip to content

Commit 705cd43

Browse files
authored
[Keymap] fix NKRO - switch to get_mods() and refactor encoder action code (#14278)
Co-authored-by: Jonavin <=>
1 parent 724ee24 commit 705cd43

File tree

9 files changed

+213
-190
lines changed

9 files changed

+213
-190
lines changed

keyboards/gmmk/pro/ansi/keymaps/jonavin/keymap.c

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,43 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
7878
#endif // COLEMAK_LAYER_ENABLE
7979
};
8080

81+
#if defined(ENCODER_ENABLE) && !defined(ENCODER_DEFAULTACTIONS_ENABLE) // Encoder Functionality when not using userspace defaults
82+
void encoder_action_rgbhue(bool clockwise) {
83+
if (clockwise)
84+
rgblight_increase_hue_noeeprom();
85+
else
86+
rgblight_decrease_hue_noeeprom();
87+
}
88+
89+
bool encoder_update_user(uint8_t index, bool clockwise) {
90+
uint8_t mods_state = get_mods();
91+
if (mods_state & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, encoder changes layers
92+
encoder_action_layerchange(clockwise);
93+
} else if (mods_state & MOD_BIT(KC_RSFT) ) { // If you are holding R shift, Page up/dn
94+
unregister_mods(MOD_BIT(KC_RSFT));
95+
encoder_action_navpage(clockwise);
96+
register_mods(MOD_BIT(KC_RSFT));
97+
} else if (mods_state & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next/prev word
98+
encoder_action_navword(clockwise);
99+
} else if (mods_state & MOD_BIT(KC_RCTL)) { // if holding Right Ctrl, change rgb hue/colour
100+
encoder_action_rgbhue(clockwise);
101+
} else if (mods_state & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next/prev track
102+
encoder_action_mediatrack(clockwise);
103+
} else {
104+
switch(get_highest_layer(layer_state)) {
105+
case _FN1:
106+
#ifdef IDLE_TIMEOUT_ENABLE
107+
timeout_update_threshold(clockwise);
108+
#endif
109+
break;
110+
default:
111+
encoder_action_volume(clockwise); // Otherwise it just changes volume
112+
break;
113+
}
114+
}
115+
return true;
116+
}
117+
#endif // ENCODER_ENABLE && !ENCODER_DEFAULTACTIONS_ENABLE
81118

82119
#ifdef RGB_MATRIX_ENABLE
83120
// Capslock, Scroll lock and Numlock indicator on Left side lights.

keyboards/gmmk/pro/ansi/keymaps/jonavin/readme.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
- holding Left shift, change layers
1313
- holding right shift, Navigate page up/down
1414
- holding Left Ctrl, navigate prev/next word
15+
- holding Right Ctrl, changes RGB hue/colour
1516
- holding Left Alt, change media prev/next track
1617
- default is change volume
1718

keyboards/gmmk/pro/ansi/keymaps/jonavin/rules.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ BOOTMAGIC_ENABLE = lite # Enable Bootmagic Lite
66
TD_LSFT_CAPSLOCK_ENABLE = yes
77
IDLE_TIMEOUT_ENABLE = yes
88
STARTUP_NUMLOCK_ON = yes
9-
ENCODER_DEFAULTACTIONS_ENABLE = yes
9+
ENCODER_DEFAULTACTIONS_ENABLE = no
1010

1111
COLEMAK_LAYER_ENABLE = yes #Enable Colemak layer / set to no to disable

keyboards/keebio/quefrency/keymaps/jonavin/keymap.c

Lines changed: 20 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -57,46 +57,31 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
5757
};
5858

5959
#ifdef ENCODER_ENABLE // Encoder Functionality
60-
bool encoder_update_user(uint8_t index, bool clockwise) {
61-
switch (index)
62-
{
63-
case 0: // first encoder (Left Macro set)
64-
if (clockwise) {
65-
tap_code(KC_PGDN);
66-
} else {
67-
tap_code(KC_PGUP);
68-
}
60+
bool encoder_update_user(uint8_t index, bool clockwise) {
61+
uint8_t mods_state = get_mods();
62+
switch (index) {
63+
case 0: // first encoder (Left Macro set)
64+
encoder_action_navpage(clockwise);
65+
break;
6966

70-
default: // other encoder (Top right)
71-
if ( clockwise ) {
72-
if (keyboard_report->mods & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, Page up
73-
unregister_mods(MOD_BIT(KC_LSFT));
74-
register_code(KC_PGDN);
75-
register_mods(MOD_BIT(KC_LSFT));
76-
} else if (keyboard_report->mods & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next word
77-
tap_code16(LCTL(KC_RGHT));
78-
} else if (keyboard_report->mods & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next track
79-
tap_code(KC_MEDIA_NEXT_TRACK);
67+
default: // other encoder (Top right)
68+
if (mods_state & MOD_BIT(KC_LSFT) ) { // If you are holding Left shift, change layers
69+
encoder_action_layerchange(clockwise);
70+
} else if (mods_state & MOD_BIT(KC_RSFT) ) { // If you are holding Right shift, Page up
71+
unregister_mods(MOD_BIT(KC_RSFT));
72+
encoder_action_navpage(clockwise);
73+
register_mods(MOD_BIT(KC_RSFT));
74+
} else if (mods_state & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next/prev word
75+
encoder_action_navword(clockwise);
76+
} else if (mods_state & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next/prev track
77+
encoder_action_mediatrack(clockwise);
8078
} else {
81-
tap_code(KC_VOLU); // Otherwise it just changes volume
82-
}
83-
} else {
84-
if (keyboard_report->mods & MOD_BIT(KC_LSFT) ) {
85-
unregister_mods(MOD_BIT(KC_LSFT));
86-
register_code(KC_PGUP);
87-
register_mods(MOD_BIT(KC_LSFT));
88-
} else if (keyboard_report->mods & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate previous word
89-
tap_code16(LCTL(KC_LEFT));
90-
} else if (keyboard_report->mods & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media previous track
91-
tap_code(KC_MEDIA_PREV_TRACK);
92-
} else {
93-
tap_code(KC_VOLD);
79+
encoder_action_volume(clockwise); // Otherwise it just changes volume
9480
}
81+
break;
9582
}
96-
break;
83+
return true;
9784
}
98-
return true;
99-
}
10085
#endif
10186

10287
#ifdef RGBLIGHT_ENABLE

keyboards/mechwild/mercutio/keymaps/jonavin/keymap.c

Lines changed: 30 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -106,63 +106,48 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
106106

107107

108108
#ifdef ENCODER_ENABLE // Encoder Functionality
109-
uint8_t selected_layer = 0;
109+
void encoder_action_selectkey(bool clockwise) {
110+
if ( clockwise ) {
111+
if ( selectedkey_idx < MAX_KEYSELECTION-1) {
112+
selectedkey_idx ++;
113+
} else {
114+
// do nothing
115+
}
116+
} else if ( !clockwise ) {
117+
if ( selectedkey_idx > 0){
118+
selectedkey_idx --;
119+
} else {
120+
// do nothing
121+
}
122+
}
123+
set_selectedkey(selectedkey_idx);
124+
}
110125

111126
bool encoder_update_user(uint8_t index, bool clockwise) {
112127
#ifdef OLED_ENABLE
113128
oled_clear();
114129
oled_render();
115130
#endif
131+
uint8_t mods_state = get_mods();
116132
switch (index) {
117133
case 0: // This is the only encoder right now, keeping for consistency
118134
switch(get_highest_layer(layer_state)){ // special handling per layer
119135
case _FN1: // on Fn layer select what the encoder does when pressed
120-
if (!keyboard_report->mods) {
121-
if ( clockwise ) {
122-
if ( selectedkey_idx < MAX_KEYSELECTION-1) {
123-
selectedkey_idx ++;
124-
} else {
125-
// do nothing
126-
}
127-
} else if ( !clockwise ) {
128-
if ( selectedkey_idx > 0){
129-
selectedkey_idx --;
130-
} else {
131-
// do nothing
132-
}
133-
}
134-
set_selectedkey(selectedkey_idx);
136+
if (!mods_state) {
137+
encoder_action_selectkey(clockwise);
135138
break;
136139
} else {
137140
// continue to default
138141
}
139142
default: // all other layers
140-
if ( clockwise ) {
141-
if (keyboard_report->mods & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, encoder changes layers
142-
if(selected_layer < 3) {
143-
selected_layer ++;
144-
layer_move(selected_layer);
145-
}
146-
} else if (keyboard_report->mods & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next word
147-
tap_code16(LCTL(KC_RGHT));
148-
} else if (keyboard_report->mods & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next track
149-
tap_code(KC_MEDIA_NEXT_TRACK);
150-
} else {
151-
tap_code(KC_VOLU); // Otherwise it just changes volume
152-
}
153-
} else if ( !clockwise ) {
154-
if (keyboard_report->mods & MOD_BIT(KC_LSFT) ) {
155-
if (selected_layer > 0) {
156-
selected_layer --;
157-
layer_move(selected_layer);
158-
}
159-
} else if (keyboard_report->mods & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate previous word
160-
tap_code16(LCTL(KC_LEFT));
161-
} else if (keyboard_report->mods & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media previous track
162-
tap_code(KC_MEDIA_PREV_TRACK);
163-
} else {
164-
tap_code(KC_VOLD);
165-
}
143+
if (mods_state & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, encoder changes layers
144+
encoder_action_layerchange(clockwise);
145+
} else if (mods_state & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next/prev word
146+
encoder_action_navword(clockwise);
147+
} else if (mods_state & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next/prev track
148+
encoder_action_mediatrack(clockwise);
149+
} else {
150+
encoder_action_volume(clockwise); // Otherwise it just changes volume
166151
}
167152
break;
168153
}
@@ -205,7 +190,7 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
205190

206191
void oled_task_user(void) {
207192

208-
if ( IS_HOST_LED_OFF(USB_LED_NUM_LOCK) && IS_HOST_LED_OFF(USB_LED_CAPS_LOCK) && selected_layer == 0 && get_highest_layer(layer_state) == 0 ) {
193+
if ( IS_HOST_LED_OFF(USB_LED_NUM_LOCK) && IS_HOST_LED_OFF(USB_LED_CAPS_LOCK) && get_selected_layer() == 0 && get_highest_layer(layer_state) == 0 ) {
209194
render_name();
210195
clear_screen = true;
211196
} else {
@@ -217,7 +202,7 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
217202
render_logo();
218203
oled_set_cursor(8,2);
219204
char fn_str[12];
220-
switch(selected_layer){
205+
switch(get_selected_layer()){
221206
case 0:
222207
oled_write_P(PSTR("BASE"), false);
223208
break;
@@ -237,7 +222,7 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
237222
}
238223
oled_write_P(keymap_config.no_gui ? PSTR(" WL") : PSTR(" "), false);
239224
oled_set_cursor(8,3);
240-
if (get_highest_layer(layer_state) == selected_layer) {
225+
if (get_highest_layer(layer_state) == get_selected_layer()) {
241226
oled_write_P(PSTR(" "), false);
242227
} else {
243228
switch (get_highest_layer(layer_state)) {

keyboards/mechwild/murphpad/keymaps/jonavin/keymap.c

Lines changed: 37 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -144,67 +144,52 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
144144

145145

146146
#ifdef ENCODER_ENABLE // Encoder Functionality
147-
uint8_t selected_layer = 0;
147+
void encoder_action_selectkey(bool clockwise) {
148+
if ( clockwise ) {
149+
if ( selectedkey_idx < MAX_KEYSELECTION-1) {
150+
selectedkey_idx ++;
151+
} else {
152+
// do nothing
153+
}
154+
} else if ( !clockwise ) {
155+
if ( selectedkey_idx > 0){
156+
selectedkey_idx --;
157+
} else {
158+
// do nothing
159+
}
160+
}
161+
set_selectedkey(selectedkey_idx);
162+
}
148163

149164
bool encoder_update_user(uint8_t index, bool clockwise) {
150165
#ifdef OLED_ENABLE
151166
oled_clear();
152167
oled_render();
153168
#endif
169+
uint8_t mods_state = get_mods();
154170
switch (index) {
155171
case 0: // This is the only encoder right now, keeping for consistency
156-
switch(get_highest_layer(layer_state)){ // special handling per layer
157-
case _FN1: // on Fn layer select what the encoder does when pressed
158-
if (!keyboard_report->mods) {
159-
if ( clockwise ) {
160-
if ( selectedkey_idx < MAX_KEYSELECTION-1) {
161-
selectedkey_idx ++;
162-
} else {
163-
// do nothing
164-
}
165-
} else if ( !clockwise ) {
166-
if ( selectedkey_idx > 0){
167-
selectedkey_idx --;
168-
} else {
169-
// do nothing
170-
}
171-
}
172-
set_selectedkey(selectedkey_idx);
173-
break;
174-
} else {
175-
// continue to default
176-
}
177-
default: // all other layers
178-
if ( clockwise ) {
179-
if (keyboard_report->mods & MOD_BIT(KC_RSFT) ) { // If you are holding Right Shift, encoder changes layers
180-
if(selected_layer < (DYNAMIC_KEYMAP_LAYER_COUNT-1)) {
181-
selected_layer ++;
182-
layer_move(selected_layer);
183-
}
184-
} else if (keyboard_report->mods & MOD_BIT(KC_RCTL)) { // if holding Right Ctrl, navigate next word
185-
tap_code16(LCTL(KC_RGHT));
186-
} else if (keyboard_report->mods & MOD_BIT(KC_RALT)) { // if holding Right Alt, change media next track
187-
tap_code(KC_MEDIA_NEXT_TRACK);
188-
} else {
189-
tap_code(KC_VOLU); // Otherwise it just changes volume
190-
}
191-
} else if ( !clockwise ) {
192-
if (keyboard_report->mods & MOD_BIT(KC_RSFT) ) {
193-
if (selected_layer > 0) {
194-
selected_layer --;
195-
layer_move(selected_layer);
196-
}
197-
} else if (keyboard_report->mods & MOD_BIT(KC_RCTL)) { // if holding Right Ctrl, navigate previous word
198-
tap_code16(LCTL(KC_LEFT));
199-
} else if (keyboard_report->mods & MOD_BIT(KC_RALT)) { // if holding Right Alt, change media previous track
200-
tap_code(KC_MEDIA_PREV_TRACK);
201-
} else {
202-
tap_code(KC_VOLD);
203-
}
204-
}
172+
switch(get_highest_layer(layer_state)){ // special handling per layer
173+
case _FN1: // on Fn layer select what the encoder does when pressed
174+
if (!mods_state) {
175+
encoder_action_selectkey(clockwise);
205176
break;
177+
} else {
178+
// continue to default
179+
}
180+
default: // all other layers
181+
if (mods_state & MOD_BIT(KC_RSFT) ) { // If you are holding R shift, encoder changes layers
182+
encoder_action_layerchange(clockwise);
183+
} else if (mods_state & MOD_BIT(KC_RCTL)) { // if holding Right Ctrl, navigate next/prev word
184+
encoder_action_navword(clockwise);
185+
} else if (mods_state & MOD_BIT(KC_RALT)) { // if holding Right Alt, change media next/prev track
186+
encoder_action_mediatrack(clockwise);
187+
} else {
188+
encoder_action_volume(clockwise); // Otherwise it just changes volume
206189
}
207190
break;
191+
}
192+
break;
208193
}
209194
return true;
210195
}
@@ -232,7 +217,7 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
232217

233218
render_logo();
234219
oled_set_cursor(8,2);
235-
switch(selected_layer){
220+
switch(get_selected_layer()){
236221
case _BASE:
237222
oled_write_P(PSTR("BASE"), false);
238223
break;
@@ -257,7 +242,7 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
257242
}
258243
oled_write_P(keymap_config.no_gui ? PSTR(" WL") : PSTR(" "), false);
259244
oled_set_cursor(8,3);
260-
if (get_highest_layer(layer_state) == selected_layer) {
245+
if (get_highest_layer(layer_state) == get_selected_layer()) {
261246
oled_write_P(PSTR(" "), false);
262247
} else {
263248
switch (get_highest_layer(layer_state)) {

0 commit comments

Comments
 (0)