@@ -104,75 +104,94 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
104
104
#endif // IDLE_TIMEOUT_ENABLE
105
105
106
106
107
- #if defined( ENCODER_ENABLE ) && defined( ENCODER_DEFAULTACTIONS_ENABLE ) // Encoder Functionality
107
+ #ifdef ENCODER_ENABLE
108
108
#ifndef DYNAMIC_KEYMAP_LAYER_COUNT
109
109
#define DYNAMIC_KEYMAP_LAYER_COUNT 4 //default in case this is not already defined elsewhere
110
110
#endif
111
111
#ifndef ENCODER_DEFAULTACTIONS_INDEX
112
112
#define ENCODER_DEFAULTACTIONS_INDEX 0 // can select encoder index if there are multiple encoders
113
113
#endif
114
114
115
- uint8_t selected_layer = 0 ;
115
+ void encoder_action_volume (bool clockwise ) {
116
+ if (clockwise )
117
+ tap_code (KC_VOLU );
118
+ else
119
+ tap_code (KC_VOLD );
120
+ }
116
121
117
- __attribute__((weak )) bool encoder_update_keymap (uint8_t index , bool clockwise ) { return true; }
122
+ void encoder_action_mediatrack (bool clockwise ) {
123
+ if (clockwise )
124
+ tap_code (KC_MEDIA_NEXT_TRACK );
125
+ else
126
+ tap_code (KC_MEDIA_PREV_TRACK );
127
+ }
118
128
119
- bool encoder_update_user (uint8_t index , bool clockwise ) {
120
- if (!encoder_update_keymap (index , clockwise )) { return false; }
121
- if (index != ENCODER_DEFAULTACTIONS_INDEX ) {return true;} // exit if the index doesn't match
122
- if ( clockwise ) {
123
- if (keyboard_report -> mods & MOD_BIT (KC_LSFT ) ) { // If you are holding L shift, encoder changes layers
124
- if (selected_layer < (DYNAMIC_KEYMAP_LAYER_COUNT - 1 )) {
125
- selected_layer ++ ;
126
- layer_move (selected_layer );
127
- }
128
- } else if (keyboard_report -> mods & MOD_BIT (KC_RSFT ) ) { // If you are holding R shift, Page up
129
- unregister_mods (MOD_BIT (KC_RSFT ));
130
- register_code (KC_PGDN );
131
- register_mods (MOD_BIT (KC_RSFT ));
132
- } else if (keyboard_report -> mods & MOD_BIT (KC_LCTL )) { // if holding Left Ctrl, navigate next word
133
- tap_code16 (LCTL (KC_RGHT ));
134
- } else if (keyboard_report -> mods & MOD_BIT (KC_LALT )) { // if holding Left Alt, change media next track
135
- tap_code (KC_MEDIA_NEXT_TRACK );
136
- } else {
137
- switch (selected_layer ) {
138
- case _FN1 :
139
- #ifdef IDLE_TIMEOUT_ENABLE
140
- timeout_update_threshold (true);
141
- #endif
142
- break ;
143
- default :
144
- tap_code (KC_VOLU ); // Otherwise it just changes volume
145
- break ;
146
- }
129
+ void encoder_action_navword (bool clockwise ) {
130
+ if (clockwise )
131
+ tap_code16 (LCTL (KC_RGHT ));
132
+ else
133
+ tap_code16 (LCTL (KC_LEFT ));
134
+ }
135
+
136
+ void encoder_action_navpage (bool clockwise ) {
137
+ if (clockwise )
138
+ tap_code16 (KC_PGUP );
139
+ else
140
+ tap_code16 (KC_PGDN );
141
+ }
142
+
143
+ // LAYER HANDLING
144
+ uint8_t selected_layer = 0 ;
145
+
146
+ uint8_t get_selected_layer (void ) {
147
+ return selected_layer ;
148
+ }
149
+
150
+ void encoder_action_layerchange (bool clockwise ) {
151
+ if (clockwise ) {
152
+ if (selected_layer < (DYNAMIC_KEYMAP_LAYER_COUNT - 1 )) {
153
+ selected_layer ++ ;
154
+ layer_move (selected_layer );
147
155
}
148
156
} else {
149
- if (keyboard_report -> mods & MOD_BIT (KC_LSFT ) ) {
150
- if (selected_layer > 0 ) {
151
- selected_layer -- ;
152
- layer_move (selected_layer );
153
- }
154
- } else if (keyboard_report -> mods & MOD_BIT (KC_RSFT ) ) {
155
- unregister_mods (MOD_BIT (KC_RSFT ));
156
- register_code (KC_PGUP );
157
- register_mods (MOD_BIT (KC_RSFT ));
158
- } else if (keyboard_report -> mods & MOD_BIT (KC_LCTL )) { // if holding Left Ctrl, navigate previous word
159
- tap_code16 (LCTL (KC_LEFT ));
160
- } else if (keyboard_report -> mods & MOD_BIT (KC_LALT )) { // if holding Left Alt, change media previous track
161
- tap_code (KC_MEDIA_PREV_TRACK );
162
- } else {
163
- switch (selected_layer ) {
164
- case _FN1 :
165
- #ifdef IDLE_TIMEOUT_ENABLE
166
- timeout_update_threshold (false);
167
- #endif
168
- break ;
169
- default :
170
- tap_code (KC_VOLD );
171
- break ;
172
- }
157
+ if (selected_layer > 0 ) {
158
+ selected_layer -- ;
159
+ layer_move (selected_layer );
173
160
}
174
161
}
162
+ }
163
+ #endif // ENCODER_ENABLE
164
+
165
+ #if defined(ENCODER_ENABLE ) && defined(ENCODER_DEFAULTACTIONS_ENABLE ) // Encoder Functionality
175
166
167
+ __attribute__((weak )) bool encoder_update_keymap (uint8_t index , bool clockwise ) { return true; }
168
+
169
+ bool encoder_update_user (uint8_t index , bool clockwise ) {
170
+ if (!encoder_update_keymap (index , clockwise )) { return false; }
171
+ if (index != ENCODER_DEFAULTACTIONS_INDEX ) {return true;} // exit if the index doesn't match
172
+ uint8_t mods_state = get_mods ();
173
+ if (mods_state & MOD_BIT (KC_LSFT ) ) { // If you are holding L shift, encoder changes layers
174
+ encoder_action_layerchange (clockwise );
175
+ } else if (mods_state & MOD_BIT (KC_RSFT ) ) { // If you are holding R shift, Page up/dn
176
+ unregister_mods (MOD_BIT (KC_RSFT ));
177
+ encoder_action_navpage (clockwise );
178
+ register_mods (MOD_BIT (KC_RSFT ));
179
+ } else if (mods_state & MOD_BIT (KC_LCTL )) { // if holding Left Ctrl, navigate next/prev word
180
+ encoder_action_navword (clockwise );
181
+ } else if (mods_state & MOD_BIT (KC_LALT )) { // if holding Left Alt, change media next/prev track
182
+ encoder_action_mediatrack (clockwise );
183
+ } else {
184
+ switch (get_highest_layer (layer_state )) {
185
+ case _FN1 :
186
+ #ifdef IDLE_TIMEOUT_ENABLE
187
+ timeout_update_threshold (clockwise );
188
+ #endif
189
+ break ;
190
+ default :
191
+ encoder_action_volume (clockwise ); // Otherwise it just changes volume
192
+ break ;
193
+ }
194
+ }
176
195
return true;
177
196
}
178
197
#endif // ENCODER_ENABLE
0 commit comments