keychron_qmk_firmware/users/konstantin/konstantin.c
Konstantin Đorđević 36d3902504 [User] Update personal userspace and keymaps, add reactive underglow (#6410)
* Update MODERN_DOLCH_RED color

* Remove unused RAL_LAL tap dance

* Disable Space Cadet on all boards

* Rework SEND_STRING_CLEAN into CLEAN_MODS, fix DST_P_R/DST_N_A

* Disable unnecessary underglow animations

* Rearrange feature flags in rules.mk files

* Change custom colors from structs to defines

* Add some explicit initializers

* Add MODERN_DOLCH_CYAN color

* Add IS_LAYER_ON_STATE()/IS_LAYER_OFF_STATE() macros

* Add led_set_keymap() template function

* Change underglow color based on Caps/Fn state

* Preserve val when changing underglow colors

* Only trigger Fn light for Fn layer

* Refactor fn_light() and caps_light() slightly

* Add comments to fn_light() and caps_light()
2019-07-25 12:31:40 -07:00

115 lines
2.6 KiB
C

#include "konstantin.h"
__attribute__((weak))
void keyboard_pre_init_keymap(void) {}
void keyboard_pre_init_user(void) {
keyboard_pre_init_keymap();
}
__attribute__((weak))
void eeconfig_init_keymap(void) {}
void eeconfig_init_user(void) {
eeconfig_init_keymap();
}
__attribute__((weak))
void keyboard_post_init_keymap(void) {}
void keyboard_post_init_user(void) {
keyboard_post_init_keymap();
}
__attribute__((weak))
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
return true;
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (!process_record_keymap(keycode, record)) {
return false;
}
switch (keycode) {
uint16_t kc;
#ifdef LAYER_FN
static bool fn_lock = false;
case FN_FNLK:
if (record->event.pressed && record->tap.count == TAPPING_TOGGLE) {
fn_lock = !IS_LAYER_ON(L_FN); // Fn layer will be toggled after this
}
return true;
#endif
case KC_ESC:
if (record->event.pressed) {
#ifdef LAYER_NUMPAD // Disable Numpad layer before Fn layer
if (IS_LAYER_ON(L_NUMPAD)) {
layer_off(L_NUMPAD);
return false;
}
#endif
#ifdef LAYER_FN
if (IS_LAYER_ON(L_FN) && fn_lock) {
layer_off(L_FN);
return fn_lock = false;
}
#endif
}
return true;
case CLEAR:
if (record->event.pressed) {
CLEAN_MODS(
SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
)
}
return false;
case DST_P_R:
kc = (get_mods() & DST_MOD_MASK) ? DST_REM : DST_PRV;
CLEAN_MODS(
(record->event.pressed ? register_code16 : unregister_code16)(kc);
)
return false;
case DST_N_A:
kc = (get_mods() & DST_MOD_MASK) ? DST_ADD : DST_NXT;
CLEAN_MODS(
(record->event.pressed ? register_code16 : unregister_code16)(kc);
)
return false;
default:
return true;
}
}
__attribute__((weak))
uint32_t layer_state_set_keymap(uint32_t state) {
return state;
}
uint32_t layer_state_set_user(uint32_t state) {
state = layer_state_set_keymap(state);
#ifdef LAYER_NUMPAD
bool numpad = IS_LAYER_ON_STATE(state, L_NUMPAD);
bool num_lock = IS_HOST_LED_ON(USB_LED_NUM_LOCK);
if (numpad != num_lock) {
tap_code(KC_NLCK); // Toggle Num Lock to match Numpad layer state
}
#endif
return state;
}
__attribute__((weak))
void led_set_keymap(uint8_t usb_led) {}
void led_set_user(uint8_t usb_led) {
led_set_keymap(usb_led);
}