~ruther/qmk_firmware

04b9b62bdc5ed394a06c5c73acdce0b261220e85 — tsankuanglee 7 years ago b2bbbc2
RETRO_TAPPING (#1922)

* add RETRO_TAP: tap anyway, even after TAP_TERM, if no interruption

* consistent variable name

* add option doc

* change name for consistency

* make RETRO_TAPPING default to off
3 files changed, 40 insertions(+), 3 deletions(-)

M docs/config_options.md
M tmk_core/common/action.c
M tmk_core/common/action_tapping.h
M docs/config_options.md => docs/config_options.md +2 -0
@@ 109,6 109,8 @@ If you define these options you will enable the associated feature, which may in

* `#define TAPPING_TERM 200`
  * how long before a tap becomes a hold
* `#define RETRO_TAPPING`
  * tap anyway, even after TAPPING_TERM, if there was no other key interruption between press and release
* `#define TAPPING_TOGGLE 2`
  * how many taps before triggering the toggle
* `#define PERMISSIVE_HOLD`

M tmk_core/common/action.c => tmk_core/common/action.c +36 -3
@@ 36,6 36,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.

int tp_buttons;

#ifdef RETRO_TAPPING
int retro_tapping_counter = 0;
#endif

#ifdef FAUXCLICKY_ENABLE
#include <fauxclicky.h>
#endif


@@ 45,6 49,9 @@ void action_exec(keyevent_t event)
    if (!IS_NOEVENT(event)) {
        dprint("\n---- action_exec: start -----\n");
        dprint("EVENT: "); debug_event(event); dprintln();
#ifdef RETRO_TAPPING
        retro_tapping_counter++;
#endif
    }

#ifdef FAUXCLICKY_ENABLE


@@ 586,6 593,32 @@ void process_action(keyrecord_t *record, action_t action)
    }
#endif

#ifndef NO_ACTION_TAPPING
  #ifdef RETRO_TAPPING
  if (!is_tap_key(record->event.key)) {
    retro_tapping_counter = 0;
  } else {
    if (event.pressed) {
        if (tap_count > 0) {
          retro_tapping_counter = 0;
        } else {

        }
    } else {
      if (tap_count > 0) {
        retro_tapping_counter = 0;
      } else {
        if (retro_tapping_counter == 2) {
          register_code(action.layer_tap.code);
          unregister_code(action.layer_tap.code);
        }
        retro_tapping_counter = 0;
      }
    }
  }
  #endif
#endif

#ifndef NO_ACTION_ONESHOT
    /* Because we switch layers after a oneshot event, we need to release the
     * key before we leave the layer or no key up event will be generated.


@@ 619,7 652,7 @@ void register_code(uint8_t code)
#endif
        add_key(KC_CAPSLOCK);
        send_keyboard_report();
        wait_ms(100);        
        wait_ms(100);
        del_key(KC_CAPSLOCK);
        send_keyboard_report();
    }


@@ 630,7 663,7 @@ void register_code(uint8_t code)
#endif
        add_key(KC_NUMLOCK);
        send_keyboard_report();
        wait_ms(100);        
        wait_ms(100);
        del_key(KC_NUMLOCK);
        send_keyboard_report();
    }


@@ 641,7 674,7 @@ void register_code(uint8_t code)
#endif
        add_key(KC_SCROLLLOCK);
        send_keyboard_report();
        wait_ms(100);        
        wait_ms(100);
        del_key(KC_SCROLLLOCK);
        send_keyboard_report();
    }

M tmk_core/common/action_tapping.h => tmk_core/common/action_tapping.h +2 -0
@@ 24,6 24,8 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
#define TAPPING_TERM    200
#endif

//#define RETRO_TAPPING // Tap anyway, even after TAPPING_TERM, as long as there was no interruption

/* tap count needed for toggling a feature */
#ifndef TAPPING_TOGGLE
#define TAPPING_TOGGLE  5