Refactor Leader key feature (#19632)
Co-authored-by: Drashna Jaelre <drashna@live.com>
This commit is contained in:
parent
d10350cd2c
commit
bbf7a20b33
77 changed files with 2457 additions and 1968 deletions
|
@ -1,116 +0,0 @@
|
|||
#include "leader.h"
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
extern rgblight_config_t rgblight_config;
|
||||
#endif
|
||||
bool leader_succeed;
|
||||
|
||||
LEADER_EXTERNS();
|
||||
|
||||
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
|
||||
LEADER_DICTIONARY() {
|
||||
leader_succeed = leading = false;
|
||||
|
||||
SEQ_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
|
||||
SEQ_ONE_KEY(KC_T) {
|
||||
// Send the Tmux Prefix
|
||||
tmux_prefix();
|
||||
leader_succeed = true;
|
||||
} else
|
||||
SEQ_ONE_KEY(KC_A) {
|
||||
// tmux: Send the prefix and press 'right' arrow
|
||||
tmux_prefix();
|
||||
tap_code(KC_RIGHT);
|
||||
leader_succeed = true;
|
||||
} else
|
||||
SEQ_TWO_KEYS(KC_T, KC_T) {
|
||||
// tmux: Send the prefix to a nested session
|
||||
tmux_prefix();
|
||||
tmux_prefix();
|
||||
leader_succeed = true;
|
||||
} else
|
||||
SEQ_TWO_KEYS(KC_T, KC_R) {
|
||||
// tmux: Switch pane and repeat last action
|
||||
tmux_pane_switch_repeat();
|
||||
leader_succeed = true;
|
||||
} else
|
||||
SEQ_TWO_KEYS(KC_V, KC_Z){
|
||||
// vim: Zoom pane
|
||||
tap_code16(LCTL(KC_W));
|
||||
tap_code16(LSFT(KC_BSLS));
|
||||
leader_succeed = true;
|
||||
} else
|
||||
SEQ_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
|
||||
SEQ_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
|
||||
SEQ_ONE_KEY(KC_R){
|
||||
// Toggle RGB Layer indicator
|
||||
tap_code16(KC_RGB_T);
|
||||
leader_succeed = true;
|
||||
} else
|
||||
SEQ_ONE_KEY(KC_SPC){
|
||||
// One Shot Unicode layer
|
||||
//TODO tap_code16(OS_UNI);
|
||||
leader_succeed = true;
|
||||
} else
|
||||
SEQ_TWO_KEYS(KC_SPC, KC_SPC){
|
||||
// Toggle _MODS
|
||||
tap_code16(TG_MODS);
|
||||
leader_succeed = true;
|
||||
} else
|
||||
SEQ_THREE_KEYS(KC_BSPC, KC_BSPC, KC_BSPC){
|
||||
// Reset the keyboard
|
||||
reset_keyboard();
|
||||
leader_succeed = true;
|
||||
}
|
||||
leader_end();
|
||||
}
|
||||
// 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) {
|
||||
// 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
|
||||
}
|
113
users/kuchosauronad0/leader_user.c
Normal file
113
users/kuchosauronad0/leader_user.c
Normal file
|
@ -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
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
#pragma once
|
||||
#include "kuchosauronad0.h"
|
||||
|
||||
#include "leader.h"
|
||||
#include "leader_user.h"
|
||||
|
||||
void matrix_scan_user(void);
|
|
@ -38,7 +38,7 @@ TODO: Make use of `TD_SPC` and `TD_QT{1..3}`
|
|||
## [Leader Key](#leader-key)
|
||||
To enable set `LEADER_ENABLE = yes` in file *rules.mk*
|
||||
|
||||
|LEADER_DICTIONARY()|program| description |
|
||||
|Leader sequence|program| description |
|
||||
|---|---|---|
|
||||
| W |vim/tmux| save file, switch pane and repeat last command |
|
||||
| T |tmux| send default prefix |
|
||||
|
@ -50,7 +50,7 @@ To enable set `LEADER_ENABLE = yes` in file *rules.mk*
|
|||
|V + T|vim | move current split to its own tab|
|
||||
|3x Backspace|keyboard| Reset Keyboard |
|
||||
|
||||
`LEADER_DICTIONARY()` is defined in *leader.c*
|
||||
Leader sequences are defined in *leader_user.c*
|
||||
|
||||
## [Combo Keys](#combo-keys)
|
||||
To enable set `COMBO_ENABLE = yes` in file *rules.mk*.
|
||||
|
|
|
@ -145,7 +145,7 @@ void rgblight_fade_helper(bool direction){
|
|||
void fadeflash_leds(uint8_t hue, uint8_t sat, uint8_t val){
|
||||
// indicate success / fail of a leader sequence
|
||||
// fade out, set new hue and saturation, fade in, fade out, set old color, fade in
|
||||
// this is used in leader.c
|
||||
// this is used in leader_user.c
|
||||
// TODO: come up with a better name maybe
|
||||
rgblight_fade_helper(false);
|
||||
rgblight_sethsv_noeeprom(hue, sat, 0);
|
||||
|
|
|
@ -21,7 +21,7 @@ ifeq ($(strip $(COMBO_ENABLE)), yes)
|
|||
endif
|
||||
|
||||
ifeq ($(strip $(LEADER_ENABLE)), yes)
|
||||
SRC += leader.c
|
||||
SRC += leader_user.c
|
||||
endif
|
||||
|
||||
ifneq ("$(wildcard $(USER_PATH)/secrets.c)","")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue