123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- // Copyright 2022 Google LLC
- // SPDX-License-Identifier: Apache-2.0
- #pragma once
- #include "gourdo1.h"
- static bool process_capsnum(uint16_t keycode, keyrecord_t * record) {
- static bool toggled = false;
- static bool tapped = false;
- static uint16_t tap_timer = 0;
- if (keycode == CAPSNUM) {
- if (user_config.double_tap_shift_for_capslock) {
- // Act as TT(_NUMPADMOUSE)
- if (record -> event.pressed) { // CAPSNUM key was pressed
- // Check whether the key was recently tapped
- if (tapped && !timer_expired(record -> event.time, tap_timer)) {
- // This is a double tap (or possibly a triple tap or more)
- // Toggle the layer on.
- toggled = true;
- } else if (toggled) {
- // Otherwise if currently toggled, turn it off
- toggled = false;
- tapped = false;
- layer_off(_NUMPADMOUSE);
- }
- // Set that the first tap occurred in a potential double tap
- tapped = true;
- tap_timer = record -> event.time + TAPPING_TERM;
- layer_on(_NUMPADMOUSE);
- } else if (!toggled) {
- // If not currently toggled, turn off on key release
- layer_off(_NUMPADMOUSE);
- return false;
- }
- } else { // When double_tap_shift_for_capslock == false
- // Act as KC_CAPS
- if (record -> event.pressed) {
- register_code(KC_CAPS);
- } else {
- unregister_code(KC_CAPS);
- }
- }
- return false;
- } else {
- // On an event with any other key, reset the double tap state
- tapped = false;
- }
- return true;
- }
- static bool process_esc_to_base(uint16_t keycode, keyrecord_t * record) {
- static bool tapped = false;
- static uint16_t tap_timer = 0;
- if (keycode == KC_ESC) {
- if (user_config.esc_double_tap_to_baselyr) {
- if (record -> event.pressed) {
- if (tapped && !timer_expired(record -> event.time, tap_timer)) {
- // The key was double tapped.
- layer_clear();
- }
- tapped = true;
- tap_timer = record -> event.time + TAPPING_TERM;
- }
- }
- } else {
- // On an event with any other key, reset the double tap state.
- tapped = false;
- }
- return true;
- }
- static bool process_lsft_for_caps(uint16_t keycode, keyrecord_t * record) {
- static bool tapped = false;
- static uint16_t tap_timer = 0;
- if (keycode == KC_LSFT) {
- if (user_config.double_tap_shift_for_capslock) {
- if (!keymap_config.no_gui) {
- if (record->event.pressed) {
- if (tapped && !timer_expired(record->event.time, tap_timer)) {
- // The key was double tapped.
- //clear_mods(); // If needed, clear the mods.
- // Do something interesting...
- register_code(KC_CAPS);
- }
- tapped = true;
- tap_timer = record->event.time + TAPPING_TERM;
- } else {
- unregister_code(KC_CAPS);
- }
- }
- }
- } else {
- // On an event with any other key, reset the double tap state.
- tapped = false;
- }
- return true;
- }
|