mirror of
https://github.com/qmk/qmk_userspace.git
synced 2026-07-29 20:54:18 -04:00
Made caps word/caps lock a tap dance that can be overridden by alt
This commit is contained in:
parent
9ace66abc1
commit
675c9787eb
6 changed files with 30 additions and 38 deletions
|
|
@ -27,9 +27,6 @@ enum CustomKeycodes {
|
|||
#define TAB_FORWARD C(KC_TAB)
|
||||
#define TAB_BACKWARD (C(S(KC_TAB)))
|
||||
|
||||
// weird tap holds
|
||||
#define CW_CL SFT_T(CAPS_WORD)
|
||||
|
||||
// layers
|
||||
#define NUM_SPC LT(_NUM, KC_SPC)
|
||||
#define NAV_ENT LT(_NAV, KC_ENT)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
#include QMK_KEYBOARD_H
|
||||
#include "caps_word.h"
|
||||
#include "../alias.h"
|
||||
#include "../tap_dance/tap_dance.h"
|
||||
|
||||
bool caps_word_press_user(uint16_t keycode) {
|
||||
switch (keycode) {
|
||||
|
|
@ -18,6 +19,7 @@ bool caps_word_press_user(uint16_t keycode) {
|
|||
case KC_RGHT:
|
||||
case KC_MINS:
|
||||
case KC_UNDS:
|
||||
case TD(TD_CW_CL): // this makes toggling work
|
||||
return true;
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
[_BASE] = LAYOUT_ortho_4x12(
|
||||
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||
KC_TAB, GUI_A, ALT_S, SFT_D, CTL_F, CTL_G, CTL_H, CTL_J, SFT_K, ALT_L, GUI_SCLN, KC_QUOT,
|
||||
CW_CL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_DEL,
|
||||
TD(TD_CW_CL), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_DEL,
|
||||
KC_NO, FUNC_PLAY, KC_LALT, TD(TD_CAD_LOCK_SLEEP), LAUNCH, NUM_SPC, NAV_ENT, KC_RALT, KC_LEFT, DOWN, UP, KC_RGHT
|
||||
),
|
||||
// gamer
|
||||
|
|
@ -61,35 +61,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
|||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t* record) {
|
||||
switch (keycode) {
|
||||
case CW_CL: { // caps word is really complicated, eek
|
||||
static bool tab_backward_held = false;
|
||||
if (record->tap.count) {
|
||||
if (record->event.pressed) {
|
||||
uint8_t mods = get_mods();
|
||||
if (mods & TABBING_TRIGGER_MODS) { // tabbing
|
||||
del_mods(TABBING_TRIGGER_MODS);
|
||||
register_code16(TAB_BACKWARD);
|
||||
set_mods(mods);
|
||||
tab_backward_held = true; // set the flag
|
||||
} else { // caps word
|
||||
caps_word_toggle();
|
||||
}
|
||||
} else {
|
||||
if (tab_backward_held) {
|
||||
tab_backward_held = false; // clear the flag
|
||||
unregister_code16(TAB_BACKWARD);
|
||||
neutralize_flashing_mods();
|
||||
}
|
||||
}
|
||||
} else { // hold; caps lock
|
||||
if (record->event.pressed) {
|
||||
tap_code(KC_CAPS);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
|
||||
// make it possible to go from layer 3 to layer 2
|
||||
case NUM_SPC:
|
||||
if (!record->tap.count) {
|
||||
|
|
@ -235,6 +206,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t* record) {
|
|||
return true;
|
||||
}
|
||||
|
||||
const key_override_t CW_CL_TO_TAB_BACKWARDS =
|
||||
ko_make_basic(TABBING_TRIGGER_MODS, TD(TD_CW_CL), TAB_BACKWARD);
|
||||
|
||||
const key_override_t Q_TO_KILL = ko_make_with_layers(MOD_MASK_GUI, KC_Q, A(KC_F4), 1 << _BASE);
|
||||
|
||||
const key_override_t COMM_TO_TAB_BACKWARDS =
|
||||
|
|
@ -328,6 +302,7 @@ const key_override_t F2_TO_M = ko_make_with_layers(MOD_MASK_CTRL, KC_F2, C(KC_M)
|
|||
|
||||
// this globally defines all key overrides to be used
|
||||
const key_override_t* key_overrides[] = {
|
||||
&CW_CL_TO_TAB_BACKWARDS,
|
||||
&COMM_TO_TAB_BACKWARDS,
|
||||
&TILDE_TO_TAB_BACKWARDS,
|
||||
&Q_TO_KILL,
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
#include "./tap_dance.h"
|
||||
#include "../alias.h"
|
||||
|
||||
void CAD_lock_sleep(tap_dance_state_t* state, void* user_data) {
|
||||
void CAD_lock_sleep(tap_dance_state_t* state, void*) {
|
||||
switch (state->count) {
|
||||
case 1:
|
||||
tap_code16(CAD);
|
||||
|
|
@ -18,6 +18,27 @@ void CAD_lock_sleep(tap_dance_state_t* state, void* user_data) {
|
|||
}
|
||||
}
|
||||
|
||||
void caps_lock_caps_word_on_tap(tap_dance_state_t* state, void*) {
|
||||
switch (state->count) {
|
||||
case 1: // do nothing for the first tap
|
||||
break;
|
||||
default:
|
||||
tap_code(KC_CAPS);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void caps_lock_caps_word_on_finish(tap_dance_state_t* state, void*) {
|
||||
switch (state->count) {
|
||||
case 1:
|
||||
caps_word_toggle();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
tap_dance_action_t tap_dance_actions[] = {
|
||||
[TD_CAD_LOCK_SLEEP] = ACTION_TAP_DANCE_FN(CAD_lock_sleep),
|
||||
[TD_CW_CL] = ACTION_TAP_DANCE_FN_ADVANCED(
|
||||
caps_lock_caps_word_on_tap, caps_lock_caps_word_on_finish, NULL
|
||||
),
|
||||
};
|
||||
|
|
|
|||
|
|
@ -2,4 +2,5 @@
|
|||
|
||||
enum {
|
||||
TD_CAD_LOCK_SLEEP,
|
||||
TD_CW_CL,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -137,10 +137,6 @@ uint16_t get_tapping_term(uint16_t keycode, keyrecord_t* record) {
|
|||
case ALT_UP:
|
||||
return 400;
|
||||
break;
|
||||
|
||||
case CW_CL: // have to hold for caps lock a little longer
|
||||
return 300;
|
||||
break;
|
||||
}
|
||||
return TAPPING_TERM;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue