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 void timer_timeout_keymap(void);
80 bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
82 #define CTRLX LCTL(KC_X)
83 #define CTRLC LCTL(KC_C)
84 #define CTRLV LCTL(KC_V)
86 #define ALTF4 LALT(KC_F4)
88 #define GUIU LGUI(KC_UP)
89 #define GUID LGUI(KC_DOWN)
90 #define GUIL LGUI(KC_LEFT)
91 #define GUIR RGUI(KC_RIGHT)
93 #define CTLENT CTL_T(KC_ENT)
95 #define EMOJI LWIN(KC_DOT)
98 Templates for Keys, with custom shifted and non shifted Characters
101 // Normal shift status
102 #define SHIFT_NORM(kc1, kc2) \
103 if (record->event.pressed) { \
105 if (lshift || rshift) { \
106 register_code(KC_LSFT); \
107 unregister_code(kc2); \
108 register_code(kc2); \
111 unregister_code(KC_LSFT); \
112 unregister_code(kc1); \
113 register_code(kc1); \
116 unregister_code(kc1); \
117 unregister_code(kc2); \
121 // Inverted shift status
122 #define SHIFT_SWITCH(kc1, kc2) \
123 if (record->event.pressed) { \
125 if (lshift || rshift) { \
126 unregister_code(KC_LSFT); \
127 unregister_code(kc2); \
128 register_code(kc2); \
131 register_code(KC_LSFT); \
132 unregister_code(kc1); \
133 register_code(kc1); \
137 unregister_code(kc1); \
138 unregister_code(kc2); \
140 if (lshift || rshift) \
141 register_code(KC_LSFT); \
143 unregister_code(KC_LSFT); \
148 #define SHIFT_ALL(kc1, kc2) \
149 if (record->event.pressed) { \
151 register_code(KC_LSFT); \
152 if (lshift || rshift) { \
153 unregister_code(kc2); \
154 register_code(kc2); \
157 unregister_code(kc1); \
158 register_code(kc1); \
162 unregister_code(kc1); \
163 unregister_code(kc2); \
165 if (lshift || rshift) \
166 register_code(KC_LSFT); \
168 unregister_code(KC_LSFT); \
173 #define SHIFT_NO(kc1, kc2) \
174 if (record->event.pressed) { \
176 unregister_code(KC_LSFT); \
177 if (lshift || rshift) { \
178 unregister_code(kc2); \
179 register_code(kc2); \
182 unregister_code(kc1); \
183 register_code(kc1); \
186 unregister_code(kc1); \
187 unregister_code(kc2); \
189 if (lshift || rshift) \
190 register_code(KC_LSFT); \
192 unregister_code(KC_LSFT); \
197 #define SHIFT_ALGR(kc1, kc2) \
198 if (record->event.pressed) { \
200 unregister_code(KC_LSFT); \
201 register_code(KC_ALGR); \
202 if (lshift || rshift) { \
203 unregister_code(kc2); \
204 register_code(kc2); \
205 unregister_code(kc2); \
206 register_code(KC_LSFT); \
208 unregister_code(kc1); \
209 register_code(kc1); \
210 unregister_code(kc1); \
212 unregister_code(KC_ALGR); \
216 // Different keycode when Ctrl is pressed
217 #define CTRL(kc1, kc2) \
218 if(record->event.pressed) { \
220 if (lshift || rshift) \
221 register_code(KC_LSFT); \
223 unregister_code(KC_LSFT); \
224 if (keyboard_report->mods & (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL))){ \
225 register_code(kc2); \
227 register_code(kc1); \
230 unregister_code(kc1); \
231 unregister_code(kc2); \
235 // Template for keys on deadkey layer (mostly Umlaute)
237 if(record->event.pressed) { \
239 if (lshift || rshift) \
240 register_code(KC_LSFT); \
242 unregister_code(KC_LSFT); \
244 unregister_code(kc); \
245 layer_off(_DEADKEY); \