~ruther/qmk_firmware

e2117564c54044c809903627c0061b5a9d129815 — Ryan 2 years ago 49b81a9
Leader: remove `qk_` prefix (#19304)

M docs/feature_leader_key.md => docs/feature_leader_key.md +6 -6
@@ 93,18 93,18 @@ While, this may be fine for most, if you want to specify the whole keycode (eg, 

## Customization 

The Leader Key feature has some additional customization to how the Leader Key feature works. It has two functions that can be called at certain parts of the process. Namely `leader_start()` and `leader_end()`.
The Leader Key feature has some additional customization to how the Leader Key feature works. It has two functions that can be called at certain parts of the process. Namely `leader_start_user()` and `leader_end_user()`.

The `leader_start()` function is called when you tap the `QK_LEAD` key, and the `leader_end()` function is called when either the leader sequence is completed, or the leader timeout is hit. 
The `leader_start_user()` function is called when you tap the `QK_LEAD` key, and the `leader_end_user()` function is called when either the leader sequence is completed, or the leader timeout is hit. 

You can add these functions to your code (`keymap.c` usually) to add feedback to the Leader sequences (such as beeping or playing music).

```c
void leader_start(void) {
void leader_start_user(void) {
  // sequence started
}

void leader_end(void) {
void leader_end_user(void) {
  // sequence ended (no success/failure detection)
}
```


@@ 139,13 139,13 @@ void matrix_scan_user(void) {
  }
}

void leader_start(void) {
void leader_start_user(void) {
#ifdef AUDIO_ENABLE
    PLAY_SONG(leader_start);
#endif
}

void leader_end(void) {
void leader_end_user(void) {
  if (did_leader_succeed) {
#ifdef AUDIO_ENABLE
    PLAY_SONG(leader_succeed);

M keyboards/dz60/keymaps/jdelkins/keymap.c => keyboards/dz60/keymaps/jdelkins/keymap.c +1 -1
@@ 38,7 38,7 @@ int ctl_state = 0;
void ctl_finished(qk_tap_dance_state_t *state, void *user_data) {
    ctl_state = cur_dance(state);
    switch (ctl_state) {
        case SINGLE_TAP:    qk_leader_start(); break;
        case SINGLE_TAP:    leader_start(); break;
        case SINGLE_HOLD:   register_code(KC_LCTL); break;
        case DOUBLE_TAP:    tap_code(KC_RCTL); break;
        case DOUBLE_HOLD:   register_code(KC_RCTL); break;

M keyboards/dztech/dz65rgb/keymaps/drootz/keymap.c => keyboards/dztech/dz65rgb/keymaps/drootz/keymap.c +2 -2
@@ 708,11 708,11 @@ void matrix_scan_user(void)
    }
}

void leader_start(void) {
void leader_start_user(void) {
    isLeader = true;
}

void leader_end(void) {
void leader_end_user(void) {
    isLeader = false;
}


M keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/none_lead.c => keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/none_lead.c +1 -1
@@ 17,7 17,7 @@ void none_lead_finished(qk_tap_dance_state_t *state, void *user_data) {
            break;

        case DOUBLE_TAP:
            qk_leader_start();
            leader_start();
            break;
    }
}

M keyboards/massdrop/alt/keymaps/jdelkins/keymap.c => keyboards/massdrop/alt/keymaps/jdelkins/keymap.c +1 -1
@@ 45,7 45,7 @@ int ctl_state = 0;
void ctl_finished(qk_tap_dance_state_t *state, void *user_data) {
    ctl_state = cur_dance(state);
    switch(ctl_state) {
        case SINGLE_TAP:    qk_leader_start(); break;
        case SINGLE_TAP:    leader_start(); break;
        case SINGLE_HOLD:   register_code(KC_LCTL); break;
        case DOUBLE_TAP:    tap_code(KC_RCTL); break;
        case DOUBLE_HOLD:   register_code(KC_RCTL); break;

M keyboards/planck/keymaps/jdelkins/keymap.c => keyboards/planck/keymaps/jdelkins/keymap.c +1 -1
@@ 43,7 43,7 @@ int ctl_state = 0;
void ctl_finished(qk_tap_dance_state_t *state, void *user_data) {
    ctl_state = cur_dance(state);
    switch (ctl_state) {
        case SINGLE_TAP:    qk_leader_start(); break;
        case SINGLE_TAP:    leader_start(); break;
        case SINGLE_HOLD:   register_code(KC_LCTL); break;
        case DOUBLE_TAP:    tap_code(KC_RCTL); break;
        case DOUBLE_HOLD:   register_code(KC_RCTL); break;

M keyboards/planck/keymaps/rootiest/keymap.c => keyboards/planck/keymaps/rootiest/keymap.c +2 -2
@@ 1397,13 1397,13 @@ bool get_permissive_hold(uint16_t keycode, keyrecord_t* record) {
 * by playing sound at different stages of the leader chord
 */
// Called when you tap the Leader key
void leader_start(void) {
void leader_start_user(void) {
#ifdef AUDIO_ENABLE
    PLAY_SONG(leader_started);
#endif
}
// Called when either the leader sequence is completed, or the leader timeout is hit
void leader_end(void) {
void leader_end_user(void) {
    if (did_leader_succeed) {
#ifdef AUDIO_ENABLE
        PLAY_SONG(leader_succeed);

M keyboards/planck/keymaps/yhaliaw/keymap.c => keyboards/planck/keymaps/yhaliaw/keymap.c +1 -1
@@ 187,7 187,7 @@ void matrix_scan_user(void) {
    }
}

void leader_end(void) {
void leader_end_user(void) {
    // Plays sound on if leader sequence found.
    if (leader_found) {
#ifdef AUDIO_ENABLE

M keyboards/preonic/keymaps/pcurt854/keymap.c => keyboards/preonic/keymaps/pcurt854/keymap.c +2 -2
@@ 469,13 469,13 @@ void matrix_scan_user(void) {
  }
}

void leader_start(void) {
void leader_start_user(void) {
#ifdef AUDIO_ENABLE
    PLAY_SONG(leader_start_song);
#endif
}

void leader_end(void) {
void leader_end_user(void) {
  if (did_leader_succeed) {
#ifdef AUDIO_ENABLE
    PLAY_SONG(leader_succeed_song);

M keyboards/preonic/keymaps/yhaliaw/keymap.c => keyboards/preonic/keymaps/yhaliaw/keymap.c +1 -1
@@ 197,7 197,7 @@ void matrix_scan_user(void) {
    }
}

void leader_end(void) {
void leader_end_user(void) {
    // Plays sound on if leader sequence found.
    if (leader_found) {
#ifdef AUDIO_ENABLE

M quantum/process_keycode/process_leader.c => quantum/process_keycode/process_leader.c +21 -21
@@ 14,18 14,16 @@
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifdef LEADER_ENABLE
#include "process_leader.h"
#include <string.h>

#    include "process_leader.h"
#    include <string.h>

#    ifndef LEADER_TIMEOUT
#        define LEADER_TIMEOUT 300
#    endif
#ifndef LEADER_TIMEOUT
#    define LEADER_TIMEOUT 300
#endif

__attribute__((weak)) void leader_start(void) {}
__attribute__((weak)) void leader_start_user(void) {}

__attribute__((weak)) void leader_end(void) {}
__attribute__((weak)) void leader_end_user(void) {}

// Leader key stuff
bool     leading     = false;


@@ 34,52 32,54 @@ uint16_t leader_time = 0;
uint16_t leader_sequence[5]   = {0, 0, 0, 0, 0};
uint8_t  leader_sequence_size = 0;

void qk_leader_start(void) {
void leader_start(void) {
    if (leading) {
        return;
    }
    leader_start();
    leader_start_user();
    leading              = true;
    leader_time          = timer_read();
    leader_sequence_size = 0;
    memset(leader_sequence, 0, sizeof(leader_sequence));
}

void leader_end(void) {
    leader_end_user();
}

bool process_leader(uint16_t keycode, keyrecord_t *record) {
    // Leader key set-up
    if (record->event.pressed) {
        if (leading) {
#    ifndef LEADER_NO_TIMEOUT
#ifndef LEADER_NO_TIMEOUT
            if (timer_elapsed(leader_time) < LEADER_TIMEOUT)
#    endif // LEADER_NO_TIMEOUT
#endif // LEADER_NO_TIMEOUT
            {
#    ifndef LEADER_KEY_STRICT_KEY_PROCESSING
#ifndef LEADER_KEY_STRICT_KEY_PROCESSING
                if (IS_QK_MOD_TAP(keycode)) {
                    keycode = QK_MOD_TAP_GET_TAP_KEYCODE(keycode);
                } else if (IS_QK_LAYER_TAP(keycode)) {
                    keycode = QK_LAYER_TAP_GET_TAP_KEYCODE(keycode);
                }
#    endif // LEADER_KEY_STRICT_KEY_PROCESSING
#endif // LEADER_KEY_STRICT_KEY_PROCESSING
                if (leader_sequence_size < ARRAY_SIZE(leader_sequence)) {
                    leader_sequence[leader_sequence_size] = keycode;
                    leader_sequence_size++;
                } else {
                    leading = false;
                    leader_end();
                    leader_end_user();
                    return true;
                }
#    ifdef LEADER_PER_KEY_TIMING
#ifdef LEADER_PER_KEY_TIMING
                leader_time = timer_read();
#    endif
#endif
                return false;
            }
        } else {
            if (keycode == QK_LEADER) {
                qk_leader_start();
                leader_start();
            }
        }
    }
    return true;
}

#endif

M quantum/process_keycode/process_leader.h => quantum/process_keycode/process_leader.h +3 -1
@@ 20,9 20,11 @@

bool process_leader(uint16_t keycode, keyrecord_t *record);

void leader_start_user(void);
void leader_end_user(void);

void leader_start(void);
void leader_end(void);
void qk_leader_start(void);

#define SEQ_ONE_KEY(key) if (leader_sequence[0] == (key) && leader_sequence[1] == 0 && leader_sequence[2] == 0 && leader_sequence[3] == 0 && leader_sequence[4] == 0)
#define SEQ_TWO_KEYS(key1, key2) if (leader_sequence[0] == (key1) && leader_sequence[1] == (key2) && leader_sequence[2] == 0 && leader_sequence[3] == 0 && leader_sequence[4] == 0)

M users/danielo515/danielo515.c => users/danielo515/danielo515.c +2 -2
@@ 7,9 7,9 @@ bool onMac = true;
LEADER_EXTERNS();
#    ifdef RGBLIGHT_ENABLE

void leader_start() { rgblight_setrgb_range(5, 100, 199, 10, 15); };
void leader_start_user() { rgblight_setrgb_range(5, 100, 199, 10, 15); };

void leader_end() { rgblight_setrgb_range(200, 200, 255, 10, 15); };
void leader_end_user() { rgblight_setrgb_range(200, 200, 255, 10, 15); };
#    endif

void matrix_scan_user(void) {

M users/kuchosauronad0/leader.c => users/kuchosauronad0/leader.c +2 -2
@@ 93,7 93,7 @@ void matrix_scan_user(void) {
//  matrix_scan_keymap();
}

void leader_start(void) {
void leader_start_user(void) {
#ifdef RGBLIGHT_ENABLE
 rgblight_savebase();
 rgblight_mode_noeeprom(1);


@@ 101,7 101,7 @@ void leader_start(void) {
#endif
}

void leader_end(void) {
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