New feature: DYNAMIC_TAPPING_TERM_ENABLE
(#11036)
* New feature: `DYNAMIC_TAPPING_TERM_ENABLE` 3 new quantum keys to configure the tapping term on the fly. * Replace sprintf call in tapping_term_report by get_u16_str * Replace tab with 4 spaces
This commit is contained in:
parent
5e9c29da0d
commit
4bac5f53d8
13 changed files with 191 additions and 4 deletions
|
@ -24,12 +24,14 @@
|
|||
# define IS_TAPPING_RECORD(r) (IS_TAPPING() && KEYEQ(tapping_key.event.key, (r->event.key)) && tapping_key.keycode == r->keycode)
|
||||
# endif
|
||||
|
||||
__attribute__((weak)) uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { return TAPPING_TERM; }
|
||||
uint16_t g_tapping_term = TAPPING_TERM;
|
||||
|
||||
__attribute__((weak)) uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { return g_tapping_term; }
|
||||
|
||||
# ifdef TAPPING_TERM_PER_KEY
|
||||
# define WITHIN_TAPPING_TERM(e) (TIMER_DIFF_16(e.time, tapping_key.event.time) < get_tapping_term(get_record_keycode(&tapping_key, false), &tapping_key))
|
||||
# else
|
||||
# define WITHIN_TAPPING_TERM(e) (TIMER_DIFF_16(e.time, tapping_key.event.time) < TAPPING_TERM)
|
||||
# define WITHIN_TAPPING_TERM(e) (TIMER_DIFF_16(e.time, tapping_key.event.time) < g_tapping_term)
|
||||
# endif
|
||||
|
||||
# ifdef TAPPING_FORCE_HOLD_PER_KEY
|
||||
|
@ -158,7 +160,7 @@ bool process_tapping(keyrecord_t *keyp) {
|
|||
# ifdef TAPPING_TERM_PER_KEY
|
||||
get_tapping_term(tapping_keycode, keyp)
|
||||
# else
|
||||
TAPPING_TERM
|
||||
g_tapping_term
|
||||
# endif
|
||||
>= 500
|
||||
)
|
||||
|
|
|
@ -33,10 +33,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
uint16_t get_record_keycode(keyrecord_t *record, bool update_layer_cache);
|
||||
uint16_t get_event_keycode(keyevent_t event, bool update_layer_cache);
|
||||
void action_tapping_process(keyrecord_t record);
|
||||
#endif
|
||||
|
||||
uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record);
|
||||
bool get_permissive_hold(uint16_t keycode, keyrecord_t *record);
|
||||
bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record);
|
||||
bool get_tapping_force_hold(uint16_t keycode, keyrecord_t *record);
|
||||
bool get_retro_tapping(uint16_t keycode, keyrecord_t *record);
|
||||
|
||||
#ifdef DYNAMIC_TAPPING_TERM_ENABLE
|
||||
extern uint16_t g_tapping_term;
|
||||
#endif
|
||||
|
|
50
quantum/process_keycode/process_dynamic_tapping_term.c
Normal file
50
quantum/process_keycode/process_dynamic_tapping_term.c
Normal file
|
@ -0,0 +1,50 @@
|
|||
/* Copyright 2020 Vladislav Kucheriavykh
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "quantum.h"
|
||||
#include "process_dynamic_tapping_term.h"
|
||||
|
||||
#ifndef DYNAMIC_TAPPING_TERM_INCREMENT
|
||||
# define DYNAMIC_TAPPING_TERM_INCREMENT 5
|
||||
#endif
|
||||
|
||||
static void tapping_term_report(void) {
|
||||
const char *tapping_term_str = get_u16_str(g_tapping_term, ' ');
|
||||
// Skip padding spaces
|
||||
while (*tapping_term_str == ' ') {
|
||||
tapping_term_str++;
|
||||
}
|
||||
send_string(tapping_term_str);
|
||||
}
|
||||
|
||||
bool process_dynamic_tapping_term(uint16_t keycode, keyrecord_t *record) {
|
||||
if (record->event.pressed) {
|
||||
switch (keycode) {
|
||||
case DT_PRNT:
|
||||
tapping_term_report();
|
||||
return false;
|
||||
|
||||
case DT_UP:
|
||||
g_tapping_term += DYNAMIC_TAPPING_TERM_INCREMENT;
|
||||
return false;
|
||||
|
||||
case DT_DOWN:
|
||||
g_tapping_term -= DYNAMIC_TAPPING_TERM_INCREMENT;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
26
quantum/process_keycode/process_dynamic_tapping_term.h
Normal file
26
quantum/process_keycode/process_dynamic_tapping_term.h
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* Copyright 2020 Vladislav Kucheriavykh
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdbool.h>
|
||||
#include "action.h"
|
||||
|
||||
#ifndef DYNAMIC_TAPPING_TERM_INCREMENT
|
||||
# define DYNAMIC_TAPPING_TERM_INCREMENT 5
|
||||
#endif
|
||||
|
||||
bool process_dynamic_tapping_term(uint16_t keycode, keyrecord_t *record);
|
|
@ -275,6 +275,9 @@ bool process_record_quantum(keyrecord_t *record) {
|
|||
#ifdef AUTO_SHIFT_ENABLE
|
||||
process_auto_shift(keycode, record) &&
|
||||
#endif
|
||||
#ifdef DYNAMIC_TAPPING_TERM_ENABLE
|
||||
process_dynamic_tapping_term(keycode, record) &&
|
||||
#endif
|
||||
#ifdef TERMINAL_ENABLE
|
||||
process_terminal(keycode, record) &&
|
||||
#endif
|
||||
|
|
|
@ -125,6 +125,10 @@ extern layer_state_t layer_state;
|
|||
# include "process_auto_shift.h"
|
||||
#endif
|
||||
|
||||
#ifdef DYNAMIC_TAPPING_TERM_ENABLE
|
||||
# include "process_dynamic_tapping_term.h"
|
||||
#endif
|
||||
|
||||
#ifdef COMBO_ENABLE
|
||||
# include "process_combo.h"
|
||||
#endif
|
||||
|
|
|
@ -524,6 +524,11 @@ enum quantum_keycodes {
|
|||
// Additional magic key
|
||||
MAGIC_TOGGLE_GUI,
|
||||
|
||||
// Adjust tapping term on the fly
|
||||
DT_PRNT,
|
||||
DT_UP,
|
||||
DT_DOWN,
|
||||
|
||||
// Programmable Button
|
||||
PROGRAMMABLE_BUTTON_1,
|
||||
PROGRAMMABLE_BUTTON_2,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue