#pragma once
#include "quantum.h"
#include "keymap_german.h"
enum userspace_layers {
_DEADKEY = 14, _NAV
};
enum userspace_custom_keycodes {
CU_GAME = SAFE_RANGE, CU_NAV, KC_P00,
#ifdef GERMAN_ENABLE
CU_LSFT, CU_RSFT, CU_COMM, CU_DOT, CU_SLSH, CU_SCLN, CU_QUOT, CU_GRV, CU_CIRC, CU_3, CU_6, CU_7, CU_8, CU_9, CU_0, CU_EQL, CU_LBRC, CU_RBRC, CU_BSLS, CU_Z, CU_Y, CU_ESCT, CU_AE, CU_OE, CU_UE, CU_SS, CU_DDQ, CU_ED, #endif
#ifdef RGBLIGHT_ENABLE
CU_RGBV, #endif
NEW_SAFE_RANGE };
#ifdef GERMAN_ENABLE
extern bool lshift;
extern bool rshift;
extern bool lshiftp;
extern bool rshiftp;
extern uint16_t lshift_timer;
extern uint16_t rshift_timer;
extern uint8_t prev_indx;
extern uint16_t prev_kcs[6];
void add_to_prev(uint16_t kc);
void unreg_prev(void);
extern bool esct;
#endif
extern bool navesc;
extern uint16_t navesc_timer;
extern bool game;
void timer_timeout(void);
void timer_timeout_keymap(void);
bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
#define CTRLX LCTL(KC_X)
#define CTRLC LCTL(KC_C)
#define CTRLV LCTL(KC_V)
#define ALTF4 LALT(KC_F4)
#define GUIU LGUI(KC_UP)
#define GUID LGUI(KC_DOWN)
#define GUIL LGUI(KC_LEFT)
#define GUIR RGUI(KC_RIGHT)
#define CTLENT CTL_T(KC_ENT)
#define EMOJI LWIN(KC_DOT)
#define SHIFT_NORM(kc1, kc2) \
if (record->event.pressed) { \
timer_timeout(); \
if (lshift || rshift) { \
register_code(KC_LSFT); \
unregister_code(kc2); \
register_code(kc2); \
add_to_prev(kc2); \
} else { \
unregister_code(KC_LSFT); \
unregister_code(kc1); \
register_code(kc1); \
} \
} else { \
unregister_code(kc1); \
unregister_code(kc2); \
} \
return false;
#define SHIFT_SWITCH(kc1, kc2) \
if (record->event.pressed) { \
timer_timeout(); \
if (lshift || rshift) { \
unregister_code(KC_LSFT); \
unregister_code(kc2); \
register_code(kc2); \
add_to_prev(kc2); \
} else { \
register_code(KC_LSFT); \
unregister_code(kc1); \
register_code(kc1); \
add_to_prev(kc1); \
} \
} else { \
unregister_code(kc1); \
unregister_code(kc2); \
unreg_prev(); \
if (lshift || rshift) \
register_code(KC_LSFT); \
else \
unregister_code(KC_LSFT); \
} \
return false;
#define SHIFT_ALL(kc1, kc2) \
if (record->event.pressed) { \
timer_timeout(); \
register_code(KC_LSFT); \
if (lshift || rshift) { \
unregister_code(kc2); \
register_code(kc2); \
add_to_prev(kc2); \
} else { \
unregister_code(kc1); \
register_code(kc1); \
add_to_prev(kc1); \
} \
} else { \
unregister_code(kc1); \
unregister_code(kc2); \
unreg_prev(); \
if (lshift || rshift) \
register_code(KC_LSFT); \
else \
unregister_code(KC_LSFT); \
} \
return false;
#define SHIFT_NO(kc1, kc2) \
if (record->event.pressed) { \
timer_timeout(); \
unregister_code(KC_LSFT); \
if (lshift || rshift) { \
unregister_code(kc2); \
register_code(kc2); \
add_to_prev(kc2); \
} else { \
unregister_code(kc1); \
register_code(kc1); \
} \
} else { \
unregister_code(kc1); \
unregister_code(kc2); \
unreg_prev(); \
if (lshift || rshift) \
register_code(KC_LSFT); \
else \
unregister_code(KC_LSFT); \
} \
return false;
#define SHIFT_ALGR(kc1, kc2) \
if (record->event.pressed) { \
timer_timeout(); \
unregister_code(KC_LSFT); \
register_code(KC_ALGR); \
if (lshift || rshift) { \
unregister_code(kc2); \
register_code(kc2); \
unregister_code(kc2); \
register_code(KC_LSFT); \
} else { \
unregister_code(kc1); \
register_code(kc1); \
unregister_code(kc1); \
} \
unregister_code(KC_ALGR); \
} \
return false;
#define CTRL(kc1, kc2) \
if(record->event.pressed) { \
timer_timeout(); \
if (lshift || rshift) \
register_code(KC_LSFT); \
else \
unregister_code(KC_LSFT); \
if (keyboard_report->mods & (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL))){ \
register_code(kc2); \
} else { \
register_code(kc1); \
} \
} else { \
unregister_code(kc1); \
unregister_code(kc2); \
} \
return false;
#define UML(kc) \
if(record->event.pressed) { \
timer_timeout(); \
if (lshift || rshift) \
register_code(KC_LSFT); \
else \
unregister_code(KC_LSFT); \
register_code(kc); \
unregister_code(kc); \
layer_off(_DEADKEY); \
} \
return false;