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)
92 Templates for Keys, with custom shifted and non shifted Characters
95 // Normal shift status
96 #define SHIFT_NORM(kc1, kc2) \
97 if (record->event.pressed) { \
99 if (lshift || rshift) { \
100 register_code(KC_LSFT); \
101 unregister_code(kc2); \
102 register_code(kc2); \
105 unregister_code(KC_LSFT); \
106 unregister_code(kc1); \
107 register_code(kc1); \
110 unregister_code(kc1); \
111 unregister_code(kc2); \
115 // Inverted shift status
116 #define SHIFT_SWITCH(kc1, kc2) \
117 if (record->event.pressed) { \
119 if (lshift || rshift) { \
120 unregister_code(KC_LSFT); \
121 unregister_code(kc2); \
122 register_code(kc2); \
125 register_code(KC_LSFT); \
126 unregister_code(kc1); \
127 register_code(kc1); \
131 unregister_code(kc1); \
132 unregister_code(kc2); \
134 if (lshift || rshift) \
135 register_code(KC_LSFT); \
137 unregister_code(KC_LSFT); \
142 #define SHIFT_ALL(kc1, kc2) \
143 if (record->event.pressed) { \
145 register_code(KC_LSFT); \
146 if (lshift || rshift) { \
147 unregister_code(kc2); \
148 register_code(kc2); \
151 unregister_code(kc1); \
152 register_code(kc1); \
156 unregister_code(kc1); \
157 unregister_code(kc2); \
159 if (lshift || rshift) \
160 register_code(KC_LSFT); \
162 unregister_code(KC_LSFT); \
167 #define SHIFT_NO(kc1, kc2) \
168 if (record->event.pressed) { \
170 unregister_code(KC_LSFT); \
171 if (lshift || rshift) { \
172 unregister_code(kc2); \
173 register_code(kc2); \
176 unregister_code(kc1); \
177 register_code(kc1); \
180 unregister_code(kc1); \
181 unregister_code(kc2); \
183 if (lshift || rshift) \
184 register_code(KC_LSFT); \
186 unregister_code(KC_LSFT); \
191 #define SHIFT_ALGR(kc1, kc2) \
192 if (record->event.pressed) { \
194 unregister_code(KC_LSFT); \
195 register_code(DE_ALGR); \
196 if (lshift || rshift) { \
197 unregister_code(kc2); \
198 register_code(kc2); \
199 unregister_code(kc2); \
200 register_code(KC_LSFT); \
202 unregister_code(kc1); \
203 register_code(kc1); \
204 unregister_code(kc1); \
206 unregister_code(DE_ALGR); \
210 // Different keycode when Ctrl is pressed
211 #define CTRL(kc1, kc2) \
212 if(record->event.pressed) { \
214 if (lshift || rshift) \
215 register_code(KC_LSFT); \
217 unregister_code(KC_LSFT); \
218 if (keyboard_report->mods & (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL))){ \
219 register_code(kc2); \
221 register_code(kc1); \
224 unregister_code(kc1); \
225 unregister_code(kc2); \
229 // Template for keys on deadkey layer (mostly Umlaute)
231 if(record->event.pressed) { \
233 if (lshift || rshift) \
234 register_code(KC_LSFT); \
236 unregister_code(KC_LSFT); \
238 unregister_code(kc); \
239 layer_off(_DEADKEY); \