1 #include QMK_KEYBOARD_H
3 extern keymap_config_t keymap_config;
5 #ifdef BACKLIGHT_ENABLE
13 void backlight_toggle(void){
24 enum minivan_keycodes {
39 #include "dynamic_macro.h"
41 // Fillers to make keymaps cleaner looking
42 #define _______ KC_TRNS
46 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
47 [_NUMPAD] = LAYOUT_numpad_4x4( /* Numpad */
48 KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, \
49 KC_KP_4, KC_KP_5, KC_KP_6, \
50 KC_KP_1, KC_KP_2, KC_KP_3, NAVIGATION, \
53 [_EXCEL] = LAYOUT_numpad_4x4( /* Excel related */
54 KC_KP_SLASH, KC_KP_ASTERISK, KC_MINS, KC_TAB, \
55 KC_QUOT, KC_KP_EQUAL, PARENS, \
56 KC_DQT, BRACKETS, BRACES, _______, \
59 [_NAVIGATION] = LAYOUT_numpad_4x4( /* Navigation */
60 KC_HOME, _______, KC_PGUP, KC_TAB, \
61 KC_END, KC_UP, KC_PGDN, \
62 KC_LEFT, KC_DOWN, KC_RIGHT, _______, \
65 [_ADJUST] = LAYOUT_numpad_4x4( /* Adjustments */
66 KC_NUMLOCK, MACSLEEP, BACKLIT, _______, \
67 KC_BSPC, _______, KC_DEL, \
68 EXCEL_LOCK, NUMPAD_LOCK, NAVIGATION_LOCK, _______, \
71 [_DYN] = LAYOUT_numpad_4x4( /* DYNAMIC MACRO */
72 DYN_REC_START1, DYN_REC_START2, _______, _______, \
73 _______, _______, _______, \
74 DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, _______, _______, \
79 const uint16_t PROGMEM fn_actions[] = {
85 float tone_startup[][2] = SONG(STARTUP_SOUND);
86 float tone_numpad[][2] = SONG(QWERTY_SOUND);
87 float tone_excel[][2] = SONG(DVORAK_SOUND);
88 float tone_navigation[][2] = SONG(COLEMAK_SOUND);
89 float tone_plover[][2] = SONG(PLOVER_SOUND);
90 float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
91 float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
93 float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
96 void persistant_default_layer_set(uint16_t default_layer) {
97 eeconfig_update_default_layer(default_layer);
98 default_layer_set(default_layer);
101 bool fn_tap_used = false; // sets to false when space is pressed,
102 // sets to true when any other key is pressed,
103 //when space is lifted, if another key was prssed, don't send space.
104 uint16_t fn_keycode = 0; // stores which spacebar was used, either raise or lower...
106 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
107 if (!process_record_dynamic_macro(keycode, record)) {
112 case NAVIGATION: // This key is enter if tapped, navigation if held
113 if (record->event.pressed) {
114 fn_keycode = NAVIGATION; // these two lines figure out if the next action is
116 layer_on(_NAVIGATION);
117 update_tri_layer(_EXCEL, _NAVIGATION, _ADJUST);
119 layer_off(_NAVIGATION);
120 update_tri_layer(_EXCEL, _NAVIGATION, _ADJUST);
121 if(!fn_tap_used && fn_keycode == NAVIGATION ){
122 register_code(KC_KP_ENTER);
123 unregister_code(KC_KP_ENTER);
131 if (record->event.pressed) {
135 update_tri_layer(_EXCEL, _NAVIGATION, _ADJUST);
138 update_tri_layer(_EXCEL, _NAVIGATION, _ADJUST);
139 if(!fn_tap_used && fn_keycode == EXCEL ){
140 register_code(KC_KP_0);
141 unregister_code(KC_KP_0);
150 break; // don't return because this just handles the spacebars.
152 // this is the normal keycode processing switch from Planck default layout.
155 if (record->event.pressed) {
157 PLAY_NOTE_ARRAY(tone_numpad, false, 0);
159 persistant_default_layer_set(1UL<<_NUMPAD);
163 case NAVIGATION_LOCK:
164 if (record->event.pressed) {
166 PLAY_NOTE_ARRAY(tone_navigation, false, 0);
168 persistant_default_layer_set(1UL<<_NAVIGATION);
173 if (record->event.pressed) {
175 PLAY_NOTE_ARRAY(tone_excel, false, 0);
177 persistant_default_layer_set(1UL<<_EXCEL);
182 if (record->event.pressed) {
183 register_code(KC_RSFT);
185 unregister_code(KC_9);
187 unregister_code(KC_0);
188 register_code(KC_RSFT);
189 register_code(KC_LEFT);
190 unregister_code(KC_LEFT);
195 if (record->event.pressed) {
196 register_code(KC_LBRC);
197 unregister_code(KC_LBRC);
198 register_code(KC_RBRC);
199 unregister_code(KC_RBRC);
200 register_code(KC_LEFT);
201 unregister_code(KC_LEFT);
206 if (record->event.pressed) {
207 register_code(KC_RSFT);
208 register_code(KC_LBRC);
209 unregister_code(KC_LBRC);
210 register_code(KC_RBRC);
211 unregister_code(KC_RBRC);
212 unregister_code(KC_RSFT);
213 register_code(KC_LEFT);
214 unregister_code(KC_LEFT);
219 if (record->event.pressed) {
220 #ifdef BACKLIGHT_ENABLE
227 if (record->event.pressed) {
228 register_code(KC_RSFT);
229 register_code(KC_RCTL);
230 register_code(KC_POWER);
231 unregister_code(KC_POWER);
232 unregister_code(KC_RCTL);
233 unregister_code(KC_RSFT);