4 #include "keymap_german.h"
6 enum userspace_layers {
7 _DEADKEY = 14, // Change if more than 16 layers are required
11 enum userspace_custom_keycodes {
12 CU_GAME = SAFE_RANGE, // Toggle game mode on/off
14 KC_P00, // Numpad double zero
23 CU_QUOT, // ' | Enable deadkey layer
36 CU_Z, // Z | Y in conjunction with ctrl
37 CU_Y, // Y | Z in conjunction wiht ctrl
38 CU_ESCT, // Toggle escape of grv and circ on/off
45 CU_ED, // Escape deadkey layer
48 #ifdef RGBLIGHT_ENABLE
49 CU_RGBV, // Cycle through RGB brightness
52 NEW_SAFE_RANGE // Use for keymap specific keycodes
60 extern uint16_t lshift_timer;
61 extern uint16_t rshift_timer;
63 extern uint8_t prev_indx;
64 extern uint16_t prev_kcs[6];
65 void add_to_prev(uint16_t kc);
66 void unreg_prev(void);
72 extern uint16_t navesc_timer;
76 void timer_timeout(void);
78 bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
80 #define CTRLX LCTL(KC_X)
81 #define CTRLC LCTL(KC_C)
82 #define CTRLV LCTL(KC_V)
84 #define ALTF4 LALT(KC_F4)
86 #define GUIU LGUI(KC_UP)
87 #define GUID LGUI(KC_DOWN)
88 #define GUIL LGUI(KC_LEFT)
89 #define GUIR RGUI(KC_RIGHT)
91 #define CTLENT CTL_T(KC_ENT)
93 #define EMOJI LWIN(KC_DOT)
96 Templates for Keys, with custom shifted and non shifted Characters
99 // Normal shift status
100 #define SHIFT_NORM(kc1, kc2) \
101 if (record->event.pressed) { \
103 if (lshift || rshift) { \
104 register_code(KC_LSFT); \
105 unregister_code(kc2); \
106 register_code(kc2); \
109 unregister_code(KC_LSFT); \
110 unregister_code(kc1); \
111 register_code(kc1); \
114 unregister_code(kc1); \
115 unregister_code(kc2); \
119 // Inverted shift status
120 #define SHIFT_SWITCH(kc1, kc2) \
121 if (record->event.pressed) { \
123 if (lshift || rshift) { \
124 unregister_code(KC_LSFT); \
125 unregister_code(kc2); \
126 register_code(kc2); \
129 register_code(KC_LSFT); \
130 unregister_code(kc1); \
131 register_code(kc1); \
135 unregister_code(kc1); \
136 unregister_code(kc2); \
138 if (lshift || rshift) \
139 register_code(KC_LSFT); \
141 unregister_code(KC_LSFT); \
146 #define SHIFT_ALL(kc1, kc2) \
147 if (record->event.pressed) { \
149 register_code(KC_LSFT); \
150 if (lshift || rshift) { \
151 unregister_code(kc2); \
152 register_code(kc2); \
155 unregister_code(kc1); \
156 register_code(kc1); \
160 unregister_code(kc1); \
161 unregister_code(kc2); \
163 if (lshift || rshift) \
164 register_code(KC_LSFT); \
166 unregister_code(KC_LSFT); \
171 #define SHIFT_NO(kc1, kc2) \
172 if (record->event.pressed) { \
174 unregister_code(KC_LSFT); \
175 if (lshift || rshift) { \
176 unregister_code(kc2); \
177 register_code(kc2); \
180 unregister_code(kc1); \
181 register_code(kc1); \
184 unregister_code(kc1); \
185 unregister_code(kc2); \
187 if (lshift || rshift) \
188 register_code(KC_LSFT); \
190 unregister_code(KC_LSFT); \
195 #define SHIFT_ALGR(kc1, kc2) \
196 if (record->event.pressed) { \
198 unregister_code(KC_LSFT); \
199 register_code(KC_ALGR); \
200 if (lshift || rshift) { \
201 unregister_code(kc2); \
202 register_code(kc2); \
203 unregister_code(kc2); \
204 register_code(KC_LSFT); \
206 unregister_code(kc1); \
207 register_code(kc1); \
208 unregister_code(kc1); \
210 unregister_code(KC_ALGR); \
214 // Different keycode when Ctrl is pressed
215 #define CTRL(kc1, kc2) \
216 if(record->event.pressed) { \
218 if (lshift || rshift) \
219 register_code(KC_LSFT); \
221 unregister_code(KC_LSFT); \
222 if (keyboard_report->mods & (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL))){ \
223 register_code(kc2); \
225 register_code(kc1); \
228 unregister_code(kc1); \
229 unregister_code(kc2); \
233 // Template for keys on deadkey layer (mostly Umlaute)
235 if(record->event.pressed) { \
237 if (lshift || rshift) \
238 register_code(KC_LSFT); \
240 unregister_code(KC_LSFT); \
242 unregister_code(kc); \
243 layer_off(_DEADKEY); \