From bbf7a20b33de2d203518687cb5cd1aa85005ea27 Mon Sep 17 00:00:00 2001 From: Ryan Date: Mon, 13 Feb 2023 03:19:02 +1100 Subject: Refactor Leader key feature (#19632) Co-authored-by: Drashna Jaelre --- users/kuchosauronad0/leader_user.c | 113 +++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 users/kuchosauronad0/leader_user.c (limited to 'users/kuchosauronad0/leader_user.c') diff --git a/users/kuchosauronad0/leader_user.c b/users/kuchosauronad0/leader_user.c new file mode 100644 index 0000000000..fd356021a6 --- /dev/null +++ b/users/kuchosauronad0/leader_user.c @@ -0,0 +1,113 @@ +#include "leader_user.h" +#ifdef RGBLIGHT_ENABLE +extern rgblight_config_t rgblight_config; +#endif +bool leader_succeed; + +void matrix_scan_user(void) { + static bool has_ran_yet; + if (!has_ran_yet) { + has_ran_yet = true; + startup_user(); + } +#ifdef TAP_DANCE_ENABLE // Run Diablo 3 macro checking code. +// run_diablo_macro_check(); +#endif +#ifdef RGBLIGHT_ENABLE + matrix_scan_rgb(); +#endif + +// matrix_scan_keymap(); +} + +void leader_start_user(void) { +#ifdef RGBLIGHT_ENABLE + rgblight_savebase(); + rgblight_mode_noeeprom(1); + rgblight_sethsv_noeeprom(HSV_GOLDENROD); +#endif +} + +void leader_end_user(void) { + leader_succeed = false; + + if (leader_sequence_one_key(KC_W)) { + // vim/tmux: Use in command mode in vim: write to file, switch tmux pane in the current session window and repeat the last command + SEND_STRING(":w" SS_TAP(X_ENTER)); + tmux_pane_switch_repeat(); + leader_succeed = true; + } else + if (leader_sequence_one_key(KC_T)) { + // Send the Tmux Prefix + tmux_prefix(); + leader_succeed = true; + } else + if (leader_sequence_one_key(KC_A)) { + // tmux: Send the prefix and press 'right' arrow + tmux_prefix(); + tap_code(KC_RIGHT); + leader_succeed = true; + } else + if (leader_sequence_two_keys(KC_T, KC_T)) { + // tmux: Send the prefix to a nested session + tmux_prefix(); + tmux_prefix(); + leader_succeed = true; + } else + if (leader_sequence_two_keys(KC_T, KC_R)) { + // tmux: Switch pane and repeat last action + tmux_pane_switch_repeat(); + leader_succeed = true; + } else + if (leader_sequence_two_keys(KC_V, KC_Z)){ + // vim: Zoom pane + tap_code16(LCTL(KC_W)); + tap_code16(LSFT(KC_BSLS)); + leader_succeed = true; + } else + if (leader_sequence_two_keys(KC_V, KC_R)) { + // vim: Substitute and place cursor + SEND_STRING(":%s///g" SS_TAP(X_LEFT)); + tap_code(KC_LEFT); + tap_code(KC_LEFT); + leader_succeed = true; + } else + if (leader_sequence_two_keys(KC_V, KC_T)) { + // vim: move current pane to new tab + tap_code16(LCTL(KC_W)); + tap_code16(LSFT(KC_T)); + leader_succeed = true; + } else + if (leader_sequence_one_key(KC_R)){ + // Toggle RGB Layer indicator + tap_code16(KC_RGB_T); + leader_succeed = true; + } else + if (leader_sequence_one_key(KC_SPC)){ + // One Shot Unicode layer +//TODO tap_code16(OS_UNI); + leader_succeed = true; + } else + if (leader_sequence_two_keys(KC_SPC, KC_SPC)){ + // Toggle _MODS + tap_code16(TG_MODS); + leader_succeed = true; + } else + if (leader_sequence_three_keys(KC_BSPC, KC_BSPC, KC_BSPC)){ + // Reset the keyboard + reset_keyboard(); + leader_succeed = true; + } + +// pick color depending of success /fail +// fade leader_start from 100 to 0 +// fade new color from 0 to 100 to 0 +// fade old color from 0 to 100 +#ifdef RGBLIGHT_ENABLE + if (leader_succeed) { + fadeflash_leds(HSV_GREEN); + } else { + fadeflash_leds(HSV_RED); + } +#endif +} -- cgit v1.2.3