Add tap dance for symbol layer

This commit is contained in:
Björn Struckmeier 2024-12-07 07:50:51 -05:00
parent 066e3e7c72
commit fc0422415b
9 changed files with 628 additions and 52 deletions

333
users/struckmb/struckmb.c Normal file
View file

@ -0,0 +1,333 @@
#include "struckmb.h"
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// Return after running through all individual hooks
if (keycode <= NO_MODS && record->event.pressed) {
switch (keycode) {
case NO_MODS:
clear_oneshot_mods();
return false;
#ifdef QWERTY_ENABLE
case DL_QWER:
set_single_persistent_default_layer(LAYER_QWERTY);
return false;
#endif /* ifdef QWERTY_ENABLE */
#ifdef BONE_ENABLE
case DL_BONE:
set_single_persistent_default_layer(LAYER_BONE);
return false;
#endif /* ifdef BONE_ENABLE */
#ifdef COLEMAK_DH_ENABLE
case DL_CODH:
set_single_persistent_default_layer(LAYER_COLEMAK_DH);
return false;
#endif /* ifdef COLEMAK_DH_ENABLE */
case DL_PREV:
if (get_highest_layer(default_layer_state) > 0) {
set_single_persistent_default_layer(get_highest_layer(default_layer_state) - 1);
} else {
set_single_persistent_default_layer(LAYER_SYMBOL - 1);
}
return false;
case DL_NEXT:
// uint8_t next_default_layer = get_highest_layer(default_layer_state) + 1;
if (get_highest_layer(default_layer_state) + 1 < LAYER_SYMBOL) {
set_single_persistent_default_layer(get_highest_layer(default_layer_state) + 1);
} else {
set_single_persistent_default_layer(0);
}
return false;
}
}
#ifdef OS_DETECTION_ENABLE
switch (detected_host_os()) {
case OS_MACOS:
switch (keycode) {
case DE_RSQU: // '
if (record->event.pressed) {
register_code16(DE_QUOT);
} else {
unregister_code16(DE_QUOT);
}
return false;
case KC_CUT:
if (record->event.pressed) {
register_code16(G(KC_X));
} else {
unregister_code16(G(KC_X));
}
return false;
case KC_COPY:
if (record->event.pressed) {
register_code16(G(KC_C));
} else {
unregister_code16(G(KC_C));
}
return false;
case KC_PSTE:
if (record->event.pressed) {
register_code16(G(KC_V));
} else {
unregister_code16(G(KC_V));
}
return false;
case KC_BRIU:
if (record->event.pressed) {
register_code16(KC_BRMU);
} else {
unregister_code16(KC_BRMU);
}
return false;
case KC_BRID:
if (record->event.pressed) {
register_code16(KC_BRMD);
} else {
unregister_code16(KC_BRMD);
}
return false;
}
break;
case OS_LINUX:
switch (keycode) {
case DE_AT: // @
if (record->event.pressed) {
register_code16(ALGR(DE_Q));
} else {
unregister_code16(ALGR(DE_Q));
}
return false;
case DE_ELLP: // …
if (record->event.pressed) {
register_code16(ALGR(KC_DOT));
} else {
unregister_code16(ALGR(KC_DOT));
}
return false;
case DE_LBRC: // [
if (record->event.pressed) {
register_code16(ALGR(DE_8));
} else {
unregister_code16(ALGR(DE_8));
}
return false;
case DE_RBRC: // ]
if (record->event.pressed) {
register_code16(ALGR(DE_9));
} else {
unregister_code16(ALGR(DE_9));
}
return false;
case DE_BSLS: // "\"
if (record->event.pressed) {
register_code16(ALGR(DE_SS));
} else {
unregister_code16(ALGR(DE_SS));
}
return false;
case DE_LCBR: // {
if (record->event.pressed) {
register_code16(ALGR(DE_7));
} else {
unregister_code16(ALGR(DE_7));
}
return false;
case DE_RCBR: // }
if (record->event.pressed) {
register_code16(ALGR(DE_0));
} else {
unregister_code16(ALGR(DE_0));
}
return false;
case DE_PIPE: // |
if (record->event.pressed) {
register_code16(ALGR(KC_NUBS));
} else {
unregister_code16(ALGR(KC_NUBS));
}
return false;
case DE_TILD: // ~
if (record->event.pressed) {
register_code16(ALGR(DE_PLUS));
} else {
unregister_code16(ALGR(DE_PLUS));
}
return false;
case DE_LDAQ: // «
if (record->event.pressed) {
register_code16(ALGR(DE_X));
} else {
unregister_code16(ALGR(DE_X));
}
return false;
case DE_RDAQ: // »
if (record->event.pressed) {
register_code16(ALGR(DE_Y));
} else {
unregister_code16(ALGR(DE_Y));
}
return false;
case DE_LSAQ: //
if (record->event.pressed) {
register_code16(S(ALGR(DE_X)));
} else {
unregister_code16(S(ALGR(DE_X)));
}
return false;
case DE_RSAQ: //
if (record->event.pressed) {
register_code16(S(ALGR(DE_Y)));
} else {
unregister_code16(S(ALGR(DE_Y)));
}
return false;
case DE_PND: // £
if (record->event.pressed) {
register_code16(S(ALGR(DE_3)));
} else {
unregister_code16(S(ALGR(DE_3)));
}
return false;
case DE_CENT: // ¢
if (record->event.pressed) {
register_code16(ALGR(DE_C));
} else {
unregister_code16(ALGR(DE_C));
}
return false;
case DE_EURO: // €
if (record->event.pressed) {
register_code16(ALGR(DE_E));
} else {
unregister_code16(ALGR(DE_E));
}
return false;
case DE_IEXL: // ¡
if (record->event.pressed) {
register_code16(S(ALGR(DE_1)));
} else {
unregister_code16(S(ALGR(DE_1)));
}
return false;
case DE_SLQU: //
if (record->event.pressed) {
register_code16(S(ALGR(DE_V)));
} else {
unregister_code16(S(ALGR(DE_V)));
}
return false;
case DE_NDSH: //
if (record->event.pressed) {
register_code16(ALGR(DE_MINS));
} else {
unregister_code16(ALGR(DE_MINS));
}
return false;
case DE_MDSH: // —
if (record->event.pressed) {
register_code16(S(ALGR(DE_MINS)));
} else {
unregister_code16(S(ALGR(DE_MINS)));
}
return false;
case DE_LSQU: //
if (record->event.pressed) {
register_code16(S(ALGR(DE_B)));
} else {
unregister_code16(S(ALGR(DE_B)));
}
return false;
case DE_RSQU: //
if (record->event.pressed) {
register_code16(S(ALGR(DE_N)));
} else {
unregister_code16(S(ALGR(DE_N)));
}
return false;
case DE_IQUE: // ¿
if (record->event.pressed) {
register_code16(S(ALGR(DE_SS)));
} else {
unregister_code16(S(ALGR(DE_SS)));
}
return false;
case DE_MDDT: // •
if (record->event.pressed) {
register_code16(ALGR(DE_COMM));
} else {
unregister_code16(ALGR(DE_COMM));
}
return false;
case DE_DIV: // ÷
if (record->event.pressed) {
register_code16(S(ALGR(DE_DOT)));
} else {
unregister_code16(S(ALGR(DE_DOT)));
}
return false;
case DE_PLMN: // ±
if (record->event.pressed) {
register_code16(S(ALGR(DE_9)));
} else {
unregister_code16(S(ALGR(DE_9)));
}
return false;
case DE_DLQU: // „
if (record->event.pressed) {
register_code16(ALGR(DE_V));
} else {
unregister_code16(ALGR(DE_V));
}
return false;
case DE_LDQU: // “
if (record->event.pressed) {
register_code16(ALGR(DE_B));
} else {
unregister_code16(ALGR(DE_B));
}
return false;
case DE_RDQU: // ”
if (record->event.pressed) {
register_code16(ALGR(DE_N));
} else {
unregister_code16(ALGR(DE_N));
}
return false;
case KC_CUT:
if (record->event.pressed) {
register_code16(S(KC_DEL));
} else {
unregister_code16(S(KC_DEL));
}
return false;
case KC_COPY:
if (record->event.pressed) {
register_code16(C(KC_INS));
} else {
unregister_code16(C(KC_INS));
}
return false;
case KC_PSTE:
if (record->event.pressed) {
register_code16(S(KC_INS));
} else {
unregister_code16(S(KC_INS));
}
return false;
}
break;
default:
// ???
break;
}
#endif /* ifdef OS_DETECTION_ENABLE */
return
// process_record_keymap(keycode, record) &&
// #ifdef ENCODER_ENABLE
// process_record_encoder(keycode, record) &&
// #endif // ENCODER_ENABLE
true;
}