381 lines
14 KiB
C
381 lines
14 KiB
C
#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;
|
||
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_SYMBL - 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_SYMBL) {
|
||
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) {
|
||
tap_code16(S(DE_HASH));
|
||
}
|
||
return false;
|
||
case KC_CUT:
|
||
if (record->event.pressed) {
|
||
tap_code16(G(KC_X));
|
||
}
|
||
return false;
|
||
case KC_COPY:
|
||
if (record->event.pressed) {
|
||
tap_code16(G(KC_C));
|
||
}
|
||
return false;
|
||
case KC_PSTE:
|
||
if (record->event.pressed) {
|
||
tap_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;
|
||
# ifdef MOUSEKEY_ENABLE
|
||
case MS_CSB1:
|
||
if (record->event.pressed) {
|
||
tap_code16(S(G(KC_BTN1)));
|
||
}
|
||
return false;
|
||
# endif // MOUSEKEY_ENABLE
|
||
}
|
||
break;
|
||
|
||
case OS_LINUX:
|
||
case OS_WINDOWS:
|
||
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 DE_YEN:
|
||
if (record->event.pressed) {
|
||
register_code16(S(ALGR(DE_Z)));
|
||
} else {
|
||
unregister_code16(S(ALGR(DE_Z)));
|
||
}
|
||
return false;
|
||
case KC_CUT:
|
||
if (record->event.pressed) {
|
||
tap_code16(S(KC_DEL));
|
||
}
|
||
return false;
|
||
case KC_COPY:
|
||
if (record->event.pressed) {
|
||
tap_code16(C(KC_INS));
|
||
}
|
||
return false;
|
||
case KC_PSTE:
|
||
if (record->event.pressed) {
|
||
tap_code16(S(KC_INS));
|
||
}
|
||
return false;
|
||
# ifdef MOUSEKEY_ENABLE
|
||
case MS_CSB1:
|
||
if (record->event.pressed) {
|
||
tap_code16(S(C(KC_BTN1)));
|
||
}
|
||
return false;
|
||
# endif // MOUSEKEY_ENABLE
|
||
}
|
||
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;
|
||
}
|
||
|
||
#ifdef QUICK_TAP_TERM
|
||
# ifdef QUICK_TAP_TERM_PER_KEY
|
||
uint16_t get_quick_tap_term(uint16_t keycode, keyrecord_t *record) {
|
||
switch (keycode) {
|
||
case SFT_SPC:
|
||
return 0; // no repeat
|
||
default:
|
||
return QUICK_TAP_TERM;
|
||
}
|
||
}
|
||
# endif // QUICK_TAP_TERM_PER_KEY
|
||
#endif // QUICK_TAP_TERM
|
||
|
||
#ifdef HOLD_ON_OTHER_KEY_PRESS
|
||
# ifdef HOLD_ON_OTHER_KEY_PRESS_PER_KEY
|
||
bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
|
||
switch (keycode) {
|
||
case SFT_ENT:
|
||
// Immediately select the hold action when another key is pressed.
|
||
return true;
|
||
default:
|
||
// Do not select the hold action when another key is pressed.
|
||
return false;
|
||
}
|
||
}
|
||
# endif // HOLD_ON_OTHER_KEY_PRESS_PER_KEY
|
||
#endif // HOLD_ON_OTHER_KEY_PRESS
|
||
|
||
#ifdef CAPS_WORD_ENABLE
|
||
bool caps_word_press_user(uint16_t keycode) {
|
||
// adapt caps word to german layout
|
||
switch (keycode) {
|
||
// Keycodes that continue Caps Word, with shift applied.
|
||
case KC_A ... KC_Z:
|
||
case DE_ADIA:
|
||
case DE_ODIA:
|
||
case DE_UDIA:
|
||
case DE_MINS:
|
||
add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to next key.
|
||
return true;
|
||
|
||
// Keycodes that continue Caps Word, without shifting.
|
||
case KC_1 ... KC_0:
|
||
case KC_BSPC:
|
||
case KC_DEL:
|
||
case DE_UNDS:
|
||
case DE_SS:
|
||
return true;
|
||
|
||
default:
|
||
return false; // Deactivate Caps Word.
|
||
}
|
||
}
|
||
#endif /* ifdef CAPS_WORD_ENABLE */
|