diff options
author | Konstantin Đorđević <vomindoraan@gmail.com> | 2019-01-14 18:09:47 +0100 |
---|---|---|
committer | MechMerlin <30334081+mechmerlin@users.noreply.github.com> | 2019-01-14 09:09:47 -0800 |
commit | 9105bf2434c54c40362173e1734a24485cfbe702 (patch) | |
tree | 5a31a50767ad464b5d3d75341f6f0d9686a116f4 /users/konstantin/konstantin.c | |
parent | ee96b7a89dd2de78b9372d3b8ce899757e3190c4 (diff) |
Add personal userspace, update keymaps (#4845)
* Add kbd6x:konstantin keymap
* Prevent tap dance from sending LShift as a weak mod in KBD6X
* Move config.h and rules.mk definitions into userspace
* Add UC_WIN to UNICODE_SELECTED_MODES
* Temporarily use Bootmagic until Command is fixed
* Move common behavior from keyboards into userspace
* Update kbd6x:konstantin keymap and userspace
* Make a RCTRL layer in kbd6x:konstantin
* Make KC_ESC turn off layers
* KC_ESC turns L_FN off only if it was locked on
* Add missing record->event.pressed checks
* Move numpad toggling logic into function
* Disable Bootmagic, enable KEYBOARD_SHARED_EP with Command
Diffstat (limited to 'users/konstantin/konstantin.c')
-rw-r--r-- | users/konstantin/konstantin.c | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/users/konstantin/konstantin.c b/users/konstantin/konstantin.c new file mode 100644 index 0000000000..977111c1f9 --- /dev/null +++ b/users/konstantin/konstantin.c @@ -0,0 +1,77 @@ +#include "konstantin.h" + +#ifdef LAYER_NUMPAD +static void toggle_numpad(void) { + layer_invert(L_NUMPAD); + bool num_lock = host_keyboard_leds() & 1<<USB_LED_NUM_LOCK; + if (num_lock != (bool)IS_LAYER_ON(L_NUMPAD)) { + tap_code(KC_NLCK); // Toggle Num Lock to match layer state + } +} +#endif + +__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) { + case CLEAR: + if (record->event.pressed) { + SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE)); + } + return false; + +#ifdef LAYER_FN + static bool fn_lock; + + 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 + +#ifdef LAYER_NUMPAD + case NUMPAD: + if (record->event.pressed) { + toggle_numpad(); + } + return false; +#endif + + case KC_ESC: + if (record->event.pressed) { +#ifdef LAYER_NUMPAD + if (IS_LAYER_ON(L_NUMPAD)) { + toggle_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; + + 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) { + return layer_state_set_keymap(state); +} |