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 GUIU LGUI(KC_UP)
85 #define GUID LGUI(KC_DOWN)
86 #define GUIL LGUI(KC_LEFT)
87 #define GUIR RGUI(KC_RIGHT)
90 Templates for Keys, with custom shifted and non shifted Characters
93 // Normal shift status
94 #define SHIFT_NORM(kc1, kc2) \
95 if (record->event.pressed) { \
97 if (lshift || rshift) { \
98 register_code(KC_LSFT); \
99 unregister_code(kc2); \
100 register_code(kc2); \
103 unregister_code(KC_LSFT); \
104 unregister_code(kc1); \
105 register_code(kc1); \
108 unregister_code(kc1); \
109 unregister_code(kc2); \
113 // Inverted shift status
114 #define SHIFT_SWITCH(kc1, kc2) \
115 if (record->event.pressed) { \
117 if (lshift || rshift) { \
118 unregister_code(KC_LSFT); \
119 unregister_code(kc2); \
120 register_code(kc2); \
123 register_code(KC_LSFT); \
124 unregister_code(kc1); \
125 register_code(kc1); \
129 unregister_code(kc1); \
130 unregister_code(kc2); \
132 if (lshift || rshift) \
133 register_code(KC_LSFT); \
135 unregister_code(KC_LSFT); \
140 #define SHIFT_ALL(kc1, kc2) \
141 if (record->event.pressed) { \
143 register_code(KC_LSFT); \
144 if (lshift || rshift) { \
145 unregister_code(kc2); \
146 register_code(kc2); \
149 unregister_code(kc1); \
150 register_code(kc1); \
154 unregister_code(kc1); \
155 unregister_code(kc2); \
157 if (lshift || rshift) \
158 register_code(KC_LSFT); \
160 unregister_code(KC_LSFT); \
165 #define SHIFT_NO(kc1, kc2) \
166 if (record->event.pressed) { \
168 unregister_code(KC_LSFT); \
169 if (lshift || rshift) { \
170 unregister_code(kc2); \
171 register_code(kc2); \
174 unregister_code(kc1); \
175 register_code(kc1); \
178 unregister_code(kc1); \
179 unregister_code(kc2); \
181 if (lshift || rshift) \
182 register_code(KC_LSFT); \
184 unregister_code(KC_LSFT); \
189 #define SHIFT_ALGR(kc1, kc2) \
190 if (record->event.pressed) { \
192 unregister_code(KC_LSFT); \
193 register_code(DE_ALGR); \
194 if (lshift || rshift) { \
195 unregister_code(kc2); \
196 register_code(kc2); \
197 unregister_code(kc2); \
198 register_code(KC_LSFT); \
200 unregister_code(kc1); \
201 register_code(kc1); \
202 unregister_code(kc1); \
204 unregister_code(DE_ALGR); \
208 // Different keycode when Ctrl is pressed
209 #define CTRL(kc1, kc2) \
210 if(record->event.pressed) { \
212 if (lshift || rshift) \
213 register_code(KC_LSFT); \
215 unregister_code(KC_LSFT); \
216 if (keyboard_report->mods & (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL))){ \
217 register_code(kc2); \
219 register_code(kc1); \
222 unregister_code(kc1); \
223 unregister_code(kc2); \
227 // Template for keys on deadkey layer (mostly Umlaute)
229 if(record->event.pressed) { \
231 if (lshift || rshift) \
232 register_code(KC_LSFT); \
234 unregister_code(KC_LSFT); \
236 unregister_code(kc); \
237 layer_off(_DEADKEY); \