[Keymap] fix NKRO - switch to get_mods() and refactor encoder action code (#14278)
Co-authored-by: Jonavin <=>
This commit is contained in:
		| @@ -78,6 +78,43 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||
| #endif // COLEMAK_LAYER_ENABLE | ||||
| }; | ||||
|  | ||||
| #if defined(ENCODER_ENABLE) && !defined(ENCODER_DEFAULTACTIONS_ENABLE)     // Encoder Functionality when not using userspace defaults | ||||
|     void encoder_action_rgbhue(bool clockwise) { | ||||
|         if (clockwise) | ||||
|             rgblight_increase_hue_noeeprom(); | ||||
|         else | ||||
|             rgblight_decrease_hue_noeeprom(); | ||||
|     } | ||||
|  | ||||
|     bool encoder_update_user(uint8_t index, bool clockwise) { | ||||
|         uint8_t mods_state = get_mods(); | ||||
|         if (mods_state & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, encoder changes layers | ||||
|             encoder_action_layerchange(clockwise); | ||||
|         } else if (mods_state & MOD_BIT(KC_RSFT) ) { // If you are holding R shift, Page up/dn | ||||
|             unregister_mods(MOD_BIT(KC_RSFT)); | ||||
|             encoder_action_navpage(clockwise); | ||||
|             register_mods(MOD_BIT(KC_RSFT)); | ||||
|         } else if (mods_state & MOD_BIT(KC_LCTL)) {  // if holding Left Ctrl, navigate next/prev word | ||||
|             encoder_action_navword(clockwise); | ||||
|         } else if (mods_state & MOD_BIT(KC_RCTL)) {  // if holding Right Ctrl, change rgb hue/colour | ||||
|             encoder_action_rgbhue(clockwise); | ||||
|         } else if (mods_state & MOD_BIT(KC_LALT)) {  // if holding Left Alt, change media next/prev track | ||||
|             encoder_action_mediatrack(clockwise); | ||||
|         } else  { | ||||
|             switch(get_highest_layer(layer_state)) { | ||||
|             case _FN1: | ||||
|                 #ifdef IDLE_TIMEOUT_ENABLE | ||||
|                     timeout_update_threshold(clockwise); | ||||
|                 #endif | ||||
|                 break; | ||||
|             default: | ||||
|                 encoder_action_volume(clockwise);       // Otherwise it just changes volume | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         return true; | ||||
|     } | ||||
| #endif // ENCODER_ENABLE && !ENCODER_DEFAULTACTIONS_ENABLE | ||||
|  | ||||
| #ifdef RGB_MATRIX_ENABLE | ||||
|     // Capslock, Scroll lock and Numlock  indicator on Left side lights. | ||||
|   | ||||
| @@ -12,6 +12,7 @@ | ||||
|     - holding Left shift, change layers | ||||
|     - holding right shift, Navigate page up/down | ||||
|     - holding Left Ctrl, navigate prev/next word | ||||
|     - holding Right Ctrl, changes RGB hue/colour | ||||
|     - holding Left Alt, change media prev/next track | ||||
|     - default is change volume | ||||
|      | ||||
|   | ||||
| @@ -6,6 +6,6 @@ BOOTMAGIC_ENABLE = lite     # Enable Bootmagic Lite | ||||
| TD_LSFT_CAPSLOCK_ENABLE = yes | ||||
| IDLE_TIMEOUT_ENABLE = yes | ||||
| STARTUP_NUMLOCK_ON = yes | ||||
| ENCODER_DEFAULTACTIONS_ENABLE = yes | ||||
| ENCODER_DEFAULTACTIONS_ENABLE = no | ||||
|  | ||||
| COLEMAK_LAYER_ENABLE = yes  #Enable Colemak layer / set to no to disable | ||||
|   | ||||
| @@ -57,46 +57,31 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { | ||||
| }; | ||||
|  | ||||
| #ifdef ENCODER_ENABLE       // Encoder Functionality | ||||
| bool encoder_update_user(uint8_t index, bool clockwise) { | ||||
|     switch (index) | ||||
|     { | ||||
|     bool encoder_update_user(uint8_t index, bool clockwise) { | ||||
|         uint8_t mods_state = get_mods(); | ||||
|         switch (index) { | ||||
|         case 0:  // first encoder (Left Macro set) | ||||
|             if (clockwise) { | ||||
|             tap_code(KC_PGDN); | ||||
|         }  else { | ||||
|             tap_code(KC_PGUP); | ||||
|         } | ||||
|             encoder_action_navpage(clockwise); | ||||
|             break; | ||||
|  | ||||
|         default: // other encoder (Top right) | ||||
|         if ( clockwise ) { | ||||
|             if (keyboard_report->mods & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, Page up | ||||
|                 unregister_mods(MOD_BIT(KC_LSFT)); | ||||
|                 register_code(KC_PGDN); | ||||
|                 register_mods(MOD_BIT(KC_LSFT)); | ||||
|             } else if (keyboard_report->mods & MOD_BIT(KC_LCTL)) {  // if holding Left Ctrl, navigate next word | ||||
|                     tap_code16(LCTL(KC_RGHT)); | ||||
|             } else if (keyboard_report->mods & MOD_BIT(KC_LALT)) {  // if holding Left Alt, change media next track | ||||
|                 tap_code(KC_MEDIA_NEXT_TRACK); | ||||
|             if (mods_state & MOD_BIT(KC_LSFT) ) { // If you are holding Left shift, change layers | ||||
|                 encoder_action_layerchange(clockwise); | ||||
|             } else if (mods_state & MOD_BIT(KC_RSFT) ) { // If you are holding Right shift, Page up | ||||
|                 unregister_mods(MOD_BIT(KC_RSFT)); | ||||
|                 encoder_action_navpage(clockwise); | ||||
|                 register_mods(MOD_BIT(KC_RSFT)); | ||||
|             } else if (mods_state & MOD_BIT(KC_LCTL)) {  // if holding Left Ctrl, navigate next/prev word | ||||
|                 encoder_action_navword(clockwise); | ||||
|             } else if (mods_state & MOD_BIT(KC_LALT)) {  // if holding Left Alt, change media next/prev track | ||||
|                 encoder_action_mediatrack(clockwise); | ||||
|             } else  { | ||||
|                 tap_code(KC_VOLU);                                                   // Otherwise it just changes volume | ||||
|             } | ||||
|         } else { | ||||
|             if (keyboard_report->mods & MOD_BIT(KC_LSFT) ) { | ||||
|                 unregister_mods(MOD_BIT(KC_LSFT)); | ||||
|                 register_code(KC_PGUP); | ||||
|                 register_mods(MOD_BIT(KC_LSFT)); | ||||
|             } else if (keyboard_report->mods & MOD_BIT(KC_LCTL)) {  // if holding Left Ctrl, navigate previous word | ||||
|                 tap_code16(LCTL(KC_LEFT)); | ||||
|             } else if (keyboard_report->mods & MOD_BIT(KC_LALT)) {  // if holding Left Alt, change media previous track | ||||
|                 tap_code(KC_MEDIA_PREV_TRACK); | ||||
|             } else { | ||||
|                 tap_code(KC_VOLD); | ||||
|             } | ||||
|                 encoder_action_volume(clockwise);     // Otherwise it just changes volume | ||||
|             } | ||||
|             break; | ||||
|         } | ||||
|         return true; | ||||
| } | ||||
|     } | ||||
| #endif | ||||
|  | ||||
| #ifdef RGBLIGHT_ENABLE | ||||
|   | ||||
| @@ -106,18 +106,7 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { | ||||
|  | ||||
|  | ||||
| #ifdef ENCODER_ENABLE       // Encoder Functionality | ||||
|     uint8_t selected_layer = 0; | ||||
|  | ||||
|     bool encoder_update_user(uint8_t index, bool clockwise) { | ||||
|         #ifdef OLED_ENABLE | ||||
|             oled_clear(); | ||||
|             oled_render(); | ||||
|         #endif | ||||
|         switch (index) { | ||||
|             case 0:         // This is the only encoder right now, keeping for consistency | ||||
|                 switch(get_highest_layer(layer_state)){  // special handling per layer | ||||
|                 case _FN1:  // on Fn layer select what the encoder does when pressed | ||||
|                     if (!keyboard_report->mods) { | ||||
|     void encoder_action_selectkey(bool clockwise) { | ||||
|         if ( clockwise ) { | ||||
|             if ( selectedkey_idx  < MAX_KEYSELECTION-1) { | ||||
|                 selectedkey_idx ++; | ||||
| @@ -132,37 +121,33 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { | ||||
|             } | ||||
|         } | ||||
|         set_selectedkey(selectedkey_idx); | ||||
|     } | ||||
|  | ||||
|     bool encoder_update_user(uint8_t index, bool clockwise) { | ||||
|         #ifdef OLED_ENABLE | ||||
|             oled_clear(); | ||||
|             oled_render(); | ||||
|         #endif | ||||
|         uint8_t mods_state = get_mods(); | ||||
|         switch (index) { | ||||
|             case 0:         // This is the only encoder right now, keeping for consistency | ||||
|                 switch(get_highest_layer(layer_state)){  // special handling per layer | ||||
|                 case _FN1:  // on Fn layer select what the encoder does when pressed | ||||
|                     if (!mods_state) { | ||||
|                         encoder_action_selectkey(clockwise); | ||||
|                         break; | ||||
|                     } else { | ||||
|                            // continue to default | ||||
|                     } | ||||
|                 default:   // all other layers | ||||
|                     if ( clockwise ) { | ||||
|                         if (keyboard_report->mods & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, encoder changes layers | ||||
|                             if(selected_layer  < 3) { | ||||
|                                 selected_layer ++; | ||||
|                                 layer_move(selected_layer); | ||||
|                             } | ||||
|                         } else if (keyboard_report->mods & MOD_BIT(KC_LCTL)) {  // if holding Left Ctrl, navigate next word | ||||
|                              tap_code16(LCTL(KC_RGHT)); | ||||
|                         } else if (keyboard_report->mods & MOD_BIT(KC_LALT)) {  // if holding Left Alt, change media next track | ||||
|                             tap_code(KC_MEDIA_NEXT_TRACK); | ||||
|                     if (mods_state & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, encoder changes layers | ||||
|                         encoder_action_layerchange(clockwise); | ||||
|                     } else if (mods_state & MOD_BIT(KC_LCTL)) {  // if holding Left Ctrl, navigate next/prev word | ||||
|                         encoder_action_navword(clockwise); | ||||
|                     } else if (mods_state & MOD_BIT(KC_LALT)) {  // if holding Left Alt, change media next/prev track | ||||
|                         encoder_action_mediatrack(clockwise); | ||||
|                     } else  { | ||||
|                             tap_code(KC_VOLU);                                                   // Otherwise it just changes volume | ||||
|                         } | ||||
|                     } else if ( !clockwise ) { | ||||
|                         if (keyboard_report->mods & MOD_BIT(KC_LSFT) ) { | ||||
|                             if (selected_layer  > 0) { | ||||
|                                 selected_layer --; | ||||
|                                 layer_move(selected_layer); | ||||
|                             } | ||||
|                         } else if (keyboard_report->mods & MOD_BIT(KC_LCTL)) {  // if holding Left Ctrl, navigate previous word | ||||
|                             tap_code16(LCTL(KC_LEFT)); | ||||
|                         } else if (keyboard_report->mods & MOD_BIT(KC_LALT)) {  // if holding Left Alt, change media previous track | ||||
|                             tap_code(KC_MEDIA_PREV_TRACK); | ||||
|                         } else { | ||||
|                             tap_code(KC_VOLD); | ||||
|                         } | ||||
|                         encoder_action_volume(clockwise);   // Otherwise it just changes volume | ||||
|                     } | ||||
|                     break; | ||||
|                 } | ||||
| @@ -205,7 +190,7 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { | ||||
|  | ||||
|     void oled_task_user(void) { | ||||
|  | ||||
|         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 ) { | ||||
|         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 ) { | ||||
|             render_name(); | ||||
|             clear_screen = true; | ||||
|         } else { | ||||
| @@ -217,7 +202,7 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { | ||||
|             render_logo(); | ||||
|             oled_set_cursor(8,2); | ||||
|             char fn_str[12]; | ||||
|             switch(selected_layer){ | ||||
|             switch(get_selected_layer()){ | ||||
|                 case 0: | ||||
|                     oled_write_P(PSTR("BASE"), false); | ||||
|                     break; | ||||
| @@ -237,7 +222,7 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { | ||||
|             } | ||||
|             oled_write_P(keymap_config.no_gui ? PSTR(" WL") : PSTR("   "), false); | ||||
|             oled_set_cursor(8,3); | ||||
|             if (get_highest_layer(layer_state) == selected_layer) { | ||||
|             if (get_highest_layer(layer_state) == get_selected_layer()) { | ||||
|                 oled_write_P(PSTR("             "), false); | ||||
|             } else { | ||||
|                 switch (get_highest_layer(layer_state)) { | ||||
|   | ||||
| @@ -144,18 +144,7 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { | ||||
|  | ||||
|  | ||||
| #ifdef ENCODER_ENABLE       // Encoder Functionality | ||||
|     uint8_t selected_layer = 0; | ||||
|  | ||||
|     bool encoder_update_user(uint8_t index, bool clockwise) { | ||||
|         #ifdef OLED_ENABLE | ||||
|             oled_clear(); | ||||
|             oled_render(); | ||||
|         #endif | ||||
|         switch (index) { | ||||
|             case 0:         // This is the only encoder right now, keeping for consistency | ||||
|                 switch(get_highest_layer(layer_state)){  // special handling per layer | ||||
|                 case _FN1:  // on Fn layer select what the encoder does when pressed | ||||
|                     if (!keyboard_report->mods) { | ||||
|     void encoder_action_selectkey(bool clockwise) { | ||||
|         if ( clockwise ) { | ||||
|             if ( selectedkey_idx  < MAX_KEYSELECTION-1) { | ||||
|                 selectedkey_idx ++; | ||||
| @@ -170,37 +159,33 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { | ||||
|             } | ||||
|         } | ||||
|         set_selectedkey(selectedkey_idx); | ||||
|     } | ||||
|  | ||||
|     bool encoder_update_user(uint8_t index, bool clockwise) { | ||||
|         #ifdef OLED_ENABLE | ||||
|             oled_clear(); | ||||
|             oled_render(); | ||||
|         #endif | ||||
|         uint8_t mods_state = get_mods(); | ||||
|         switch (index) { | ||||
|             case 0:         // This is the only encoder right now, keeping for consistency | ||||
|             switch(get_highest_layer(layer_state)){  // special handling per layer | ||||
|             case _FN1:  // on Fn layer select what the encoder does when pressed | ||||
|                 if (!mods_state) { | ||||
|                     encoder_action_selectkey(clockwise); | ||||
|                     break; | ||||
|                 } else { | ||||
|                         // continue to default | ||||
|                 } | ||||
|             default:   // all other layers | ||||
|                     if ( clockwise ) { | ||||
|                         if (keyboard_report->mods & MOD_BIT(KC_RSFT) ) { // If you are holding Right Shift, encoder changes layers | ||||
|                             if(selected_layer  < (DYNAMIC_KEYMAP_LAYER_COUNT-1)) { | ||||
|                                 selected_layer ++; | ||||
|                                 layer_move(selected_layer); | ||||
|                             } | ||||
|                         } else if (keyboard_report->mods & MOD_BIT(KC_RCTL)) {  // if holding Right Ctrl, navigate next word | ||||
|                              tap_code16(LCTL(KC_RGHT)); | ||||
|                         } else if (keyboard_report->mods & MOD_BIT(KC_RALT)) {  // if holding Right Alt, change media next track | ||||
|                             tap_code(KC_MEDIA_NEXT_TRACK); | ||||
|                 if (mods_state & MOD_BIT(KC_RSFT) ) { // If you are holding R shift, encoder changes layers | ||||
|                     encoder_action_layerchange(clockwise); | ||||
|                 } else if (mods_state & MOD_BIT(KC_RCTL)) {  // if holding Right Ctrl, navigate next/prev word | ||||
|                     encoder_action_navword(clockwise); | ||||
|                 } else if (mods_state & MOD_BIT(KC_RALT)) {  // if holding Right Alt, change media next/prev track | ||||
|                     encoder_action_mediatrack(clockwise); | ||||
|                 } else  { | ||||
|                             tap_code(KC_VOLU);                                                   // Otherwise it just changes volume | ||||
|                         } | ||||
|                     } else if ( !clockwise ) { | ||||
|                         if (keyboard_report->mods & MOD_BIT(KC_RSFT) ) { | ||||
|                             if (selected_layer  > 0) { | ||||
|                                 selected_layer --; | ||||
|                                 layer_move(selected_layer); | ||||
|                             } | ||||
|                         } else if (keyboard_report->mods & MOD_BIT(KC_RCTL)) {  // if holding Right Ctrl, navigate previous word | ||||
|                             tap_code16(LCTL(KC_LEFT)); | ||||
|                         } else if (keyboard_report->mods & MOD_BIT(KC_RALT)) {  // if holding Right Alt, change media previous track | ||||
|                             tap_code(KC_MEDIA_PREV_TRACK); | ||||
|                         } else { | ||||
|                             tap_code(KC_VOLD); | ||||
|                         } | ||||
|                     encoder_action_volume(clockwise);   // Otherwise it just changes volume | ||||
|                 } | ||||
|                 break; | ||||
|             } | ||||
| @@ -232,7 +217,7 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { | ||||
|  | ||||
|         render_logo(); | ||||
|         oled_set_cursor(8,2); | ||||
|         switch(selected_layer){ | ||||
|         switch(get_selected_layer()){ | ||||
|             case _BASE: | ||||
|                 oled_write_P(PSTR("BASE"), false); | ||||
|                 break; | ||||
| @@ -257,7 +242,7 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { | ||||
|         } | ||||
|         oled_write_P(keymap_config.no_gui ? PSTR(" WL") : PSTR("   "), false); | ||||
|         oled_set_cursor(8,3); | ||||
|         if (get_highest_layer(layer_state) == selected_layer) { | ||||
|         if (get_highest_layer(layer_state) == get_selected_layer()) { | ||||
|             oled_write_P(PSTR("             "), false); | ||||
|         } else { | ||||
|             switch (get_highest_layer(layer_state)) { | ||||
|   | ||||
| @@ -104,7 +104,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
| #endif // IDLE_TIMEOUT_ENABLE | ||||
|  | ||||
|  | ||||
| #if defined(ENCODER_ENABLE) && defined(ENCODER_DEFAULTACTIONS_ENABLE)       // Encoder Functionality | ||||
| #ifdef ENCODER_ENABLE | ||||
|     #ifndef DYNAMIC_KEYMAP_LAYER_COUNT | ||||
|         #define DYNAMIC_KEYMAP_LAYER_COUNT 4  //default in case this is not already defined elsewhere | ||||
|     #endif | ||||
| @@ -112,67 +112,86 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
|         #define ENCODER_DEFAULTACTIONS_INDEX 0  // can select encoder index if there are multiple encoders | ||||
|     #endif | ||||
|  | ||||
| uint8_t selected_layer = 0; | ||||
|     void encoder_action_volume(bool clockwise) { | ||||
|         if (clockwise) | ||||
|             tap_code(KC_VOLU); | ||||
|         else | ||||
|             tap_code(KC_VOLD); | ||||
|     } | ||||
|  | ||||
| __attribute__((weak)) bool encoder_update_keymap(uint8_t index, bool clockwise) { return true; } | ||||
|     void encoder_action_mediatrack(bool clockwise) { | ||||
|         if (clockwise) | ||||
|             tap_code(KC_MEDIA_NEXT_TRACK); | ||||
|         else | ||||
|             tap_code(KC_MEDIA_PREV_TRACK); | ||||
|     } | ||||
|  | ||||
| bool encoder_update_user(uint8_t index, bool clockwise) { | ||||
|     if (!encoder_update_keymap(index, clockwise)) { return false; } | ||||
|     if (index != ENCODER_DEFAULTACTIONS_INDEX) {return true;}  // exit if the index doesn't match | ||||
|         if ( clockwise ) { | ||||
|             if (keyboard_report->mods & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, encoder changes layers | ||||
|     void encoder_action_navword(bool clockwise) { | ||||
|         if (clockwise) | ||||
|             tap_code16(LCTL(KC_RGHT)); | ||||
|         else | ||||
|             tap_code16(LCTL(KC_LEFT)); | ||||
|     } | ||||
|  | ||||
|     void encoder_action_navpage(bool clockwise) { | ||||
|         if (clockwise) | ||||
|             tap_code16(KC_PGUP); | ||||
|         else | ||||
|             tap_code16(KC_PGDN); | ||||
|     } | ||||
|  | ||||
|     // LAYER HANDLING | ||||
|     uint8_t selected_layer = 0; | ||||
|  | ||||
|     uint8_t get_selected_layer(void) { | ||||
|         return selected_layer; | ||||
|     } | ||||
|  | ||||
|     void encoder_action_layerchange(bool clockwise) { | ||||
|         if (clockwise) { | ||||
|             if(selected_layer  < (DYNAMIC_KEYMAP_LAYER_COUNT - 1)) { | ||||
|                 selected_layer ++; | ||||
|                 layer_move(selected_layer); | ||||
|             } | ||||
|             } else if (keyboard_report->mods & MOD_BIT(KC_RSFT) ) { // If you are holding R shift, Page up | ||||
|                 unregister_mods(MOD_BIT(KC_RSFT)); | ||||
|                 register_code(KC_PGDN); | ||||
|                 register_mods(MOD_BIT(KC_RSFT)); | ||||
|             } else if (keyboard_report->mods & MOD_BIT(KC_LCTL)) {  // if holding Left Ctrl, navigate next word | ||||
|                     tap_code16(LCTL(KC_RGHT)); | ||||
|             } else if (keyboard_report->mods & MOD_BIT(KC_LALT)) {  // if holding Left Alt, change media next track | ||||
|                 tap_code(KC_MEDIA_NEXT_TRACK); | ||||
|         } else { | ||||
|                 switch (selected_layer) { | ||||
|                 case _FN1: | ||||
|                     #ifdef IDLE_TIMEOUT_ENABLE | ||||
|                         timeout_update_threshold(true); | ||||
|                     #endif | ||||
|                     break; | ||||
|                 default: | ||||
|                     tap_code(KC_VOLU);       // Otherwise it just changes volume | ||||
|                     break; | ||||
|                 } | ||||
|             } | ||||
|         } else { | ||||
|             if (keyboard_report->mods & MOD_BIT(KC_LSFT) ) { | ||||
|             if (selected_layer  > 0) { | ||||
|                 selected_layer --; | ||||
|                 layer_move(selected_layer); | ||||
|             } | ||||
|             } else if (keyboard_report->mods & MOD_BIT(KC_RSFT) ) { | ||||
|         } | ||||
|     } | ||||
| #endif // ENCODER_ENABLE | ||||
|  | ||||
| #if defined(ENCODER_ENABLE) && defined(ENCODER_DEFAULTACTIONS_ENABLE)       // Encoder Functionality | ||||
|  | ||||
|     __attribute__((weak)) bool encoder_update_keymap(uint8_t index, bool clockwise) { return true; } | ||||
|  | ||||
|     bool encoder_update_user(uint8_t index, bool clockwise) { | ||||
|         if (!encoder_update_keymap(index, clockwise)) { return false; } | ||||
|         if (index != ENCODER_DEFAULTACTIONS_INDEX) {return true;}  // exit if the index doesn't match | ||||
|         uint8_t mods_state = get_mods(); | ||||
|         if (mods_state & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, encoder changes layers | ||||
|             encoder_action_layerchange(clockwise); | ||||
|         } else if (mods_state & MOD_BIT(KC_RSFT) ) { // If you are holding R shift, Page up/dn | ||||
|             unregister_mods(MOD_BIT(KC_RSFT)); | ||||
|                 register_code(KC_PGUP); | ||||
|             encoder_action_navpage(clockwise); | ||||
|             register_mods(MOD_BIT(KC_RSFT)); | ||||
|             } else if (keyboard_report->mods & MOD_BIT(KC_LCTL)) {  // if holding Left Ctrl, navigate previous word | ||||
|                 tap_code16(LCTL(KC_LEFT)); | ||||
|             } else if (keyboard_report->mods & MOD_BIT(KC_LALT)) {  // if holding Left Alt, change media previous track | ||||
|                 tap_code(KC_MEDIA_PREV_TRACK); | ||||
|         } else if (mods_state & MOD_BIT(KC_LCTL)) {  // if holding Left Ctrl, navigate next/prev word | ||||
|             encoder_action_navword(clockwise); | ||||
|         } else if (mods_state & MOD_BIT(KC_LALT)) {  // if holding Left Alt, change media next/prev track | ||||
|             encoder_action_mediatrack(clockwise); | ||||
|         } else  { | ||||
|                 switch (selected_layer) { | ||||
|             switch(get_highest_layer(layer_state)) { | ||||
|             case _FN1: | ||||
|                 #ifdef IDLE_TIMEOUT_ENABLE | ||||
|                         timeout_update_threshold(false); | ||||
|                     timeout_update_threshold(clockwise); | ||||
|                 #endif | ||||
|                 break; | ||||
|             default: | ||||
|                     tap_code(KC_VOLD); | ||||
|                 encoder_action_volume(clockwise);       // Otherwise it just changes volume | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         } | ||||
|  | ||||
|         return true; | ||||
|     } | ||||
| #endif // ENCODER_ENABLE | ||||
|   | ||||
| @@ -58,6 +58,18 @@ enum custom_user_keycodes { | ||||
| #endif // TD_LSFT_CAPSLOCK_ENABLE | ||||
|  | ||||
|  | ||||
| // ENCODER ACTIONS | ||||
| #ifdef ENCODER_ENABLE | ||||
|     void encoder_action_volume(bool clockwise); | ||||
|     void encoder_action_mediatrack(bool clockwise); | ||||
|     void encoder_action_navword(bool clockwise); | ||||
|     void encoder_action_navpage(bool clockwise); | ||||
|  | ||||
|     uint8_t get_selected_layer(void); | ||||
|     void encoder_action_layerchange(bool clockwise); | ||||
| #endif // ENCODER_ENABLE | ||||
|  | ||||
|  | ||||
| #ifdef RGB_MATRIX_ENABLE | ||||
| //RGB custom colours | ||||
|     #define RGB_GODSPEED 0x00, 0xE4, 0xFF // colour for matching keycaps | ||||
|   | ||||
| @@ -65,11 +65,10 @@ KEYMAP LEVEL ADDITIONAL PROCESSING FUNCTIONS | ||||
|     void keyboard_post_init_keymap(void) | ||||
|  | ||||
| LIST OF COMPATIBLE KEYMAPS | ||||
|     - gmmk/pro | ||||
|     - gmmk/pro/ansi | ||||
|     - keebio/quefrency/rev3 | ||||
|     - mechwild/mercutio | ||||
|     - mechwild/murphpad (*) | ||||
|     - mechwild/murphpad | ||||
|     - mechwild/OBE (*) | ||||
|     - nopunin10did/kastenwagen (*) | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user