2 #include "action_layer.h"
5 extern keymap_config_t keymap_config;
7 #ifdef BACKLIGHT_ENABLE
15 void backlight_toggle(void){
26 enum minivan_keycodes {
41 #include "dynamic_macro.h"
43 // Fillers to make keymaps cleaner looking
44 #define _______ KC_TRNS
48 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
49 [_NUMPAD] = /* Numpad */
50 KEYMAP(KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, \
51 KC_KP_4, KC_KP_5, KC_KP_6, \
52 KC_KP_1, KC_KP_2, KC_KP_3, NAVIGATION, \
54 [_EXCEL] = /* Excel related */
55 KEYMAP(KC_KP_SLASH, KC_KP_ASTERISK, KC_MINS, KC_TAB, \
56 KC_QUOT, KC_KP_EQUAL, PARENS , \
57 KC_DQT, BRACKETS, BRACES, _______, \
59 [_NAVIGATION] = /* Navigation */
60 KEYMAP(KC_HOME, _______, KC_PGUP, KC_TAB, \
61 KC_END, KC_UP, KC_PGDN, \
62 KC_LEFT, KC_DOWN, KC_RIGHT, _______, \
64 [_ADJUST] = /* Adjustments */
65 KEYMAP(KC_NUMLOCK, MACSLEEP, BACKLIT, _______, \
66 KC_BSPC, _______, KC_DEL, \
67 EXCEL_LOCK, NUMPAD_LOCK, NAVIGATION_LOCK, _______, \
69 [_DYN] = /* DYNAMIC MACRO */
70 KEYMAP(DYN_REC_START1, DYN_REC_START2, _______, _______, \
71 _______, _______, _______, \
72 DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, _______, _______, \
76 const uint16_t PROGMEM fn_actions[] = {
82 float tone_startup[][2] = SONG(STARTUP_SOUND);
83 float tone_numpad[][2] = SONG(QWERTY_SOUND);
84 float tone_excel[][2] = SONG(DVORAK_SOUND);
85 float tone_navigation[][2] = SONG(COLEMAK_SOUND);
86 float tone_plover[][2] = SONG(PLOVER_SOUND);
87 float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
88 float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
90 float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
93 void persistant_default_layer_set(uint16_t default_layer) {
94 eeconfig_update_default_layer(default_layer);
95 default_layer_set(default_layer);
98 bool fn_tap_used = false; // sets to false when space is pressed,
99 // sets to true when any other key is pressed,
100 //when space is lifted, if another key was prssed, don't send space.
101 uint16_t fn_keycode = 0; // stores which spacebar was used, either raise or lower...
103 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
104 if (!process_record_dynamic_macro(keycode, record)) {
109 case NAVIGATION: // This key is enter if tapped, navigation if held
110 if (record->event.pressed) {
111 fn_keycode = NAVIGATION; // these two lines figure out if the next action is
113 layer_on(_NAVIGATION);
114 update_tri_layer(_EXCEL, _NAVIGATION, _ADJUST);
116 layer_off(_NAVIGATION);
117 update_tri_layer(_EXCEL, _NAVIGATION, _ADJUST);
118 if(!fn_tap_used && fn_keycode == NAVIGATION ){
119 register_code(KC_KP_ENTER);
120 unregister_code(KC_KP_ENTER);
128 if (record->event.pressed) {
132 update_tri_layer(_EXCEL, _NAVIGATION, _ADJUST);
135 update_tri_layer(_EXCEL, _NAVIGATION, _ADJUST);
136 if(!fn_tap_used && fn_keycode == EXCEL ){
137 register_code(KC_KP_0);
138 unregister_code(KC_KP_0);
147 break; // don't return because this just handles the spacebars.
149 // this is the normal keycode processing switch from Planck default layout.
152 if (record->event.pressed) {
154 PLAY_NOTE_ARRAY(tone_numpad, false, 0);
156 persistant_default_layer_set(1UL<<_NUMPAD);
160 case NAVIGATION_LOCK:
161 if (record->event.pressed) {
163 PLAY_NOTE_ARRAY(tone_navigation, false, 0);
165 persistant_default_layer_set(1UL<<_NAVIGATION);
170 if (record->event.pressed) {
172 PLAY_NOTE_ARRAY(tone_excel, false, 0);
174 persistant_default_layer_set(1UL<<_EXCEL);
179 if (record->event.pressed) {
180 register_code(KC_RSFT);
182 unregister_code(KC_9);
184 unregister_code(KC_0);
185 register_code(KC_RSFT);
186 register_code(KC_LEFT);
187 unregister_code(KC_LEFT);
192 if (record->event.pressed) {
193 register_code(KC_LBRC);
194 unregister_code(KC_LBRC);
195 register_code(KC_RBRC);
196 unregister_code(KC_RBRC);
197 register_code(KC_LEFT);
198 unregister_code(KC_LEFT);
203 if (record->event.pressed) {
204 register_code(KC_RSFT);
205 register_code(KC_LBRC);
206 unregister_code(KC_LBRC);
207 register_code(KC_RBRC);
208 unregister_code(KC_RBRC);
209 unregister_code(KC_RSFT);
210 register_code(KC_LEFT);
211 unregister_code(KC_LEFT);
216 if (record->event.pressed) {
217 #ifdef BACKLIGHT_ENABLE
224 if (record->event.pressed) {
225 register_code(KC_RSFT);
226 register_code(KC_RCTL);
227 register_code(KC_POWER);
228 unregister_code(KC_POWER);
229 unregister_code(KC_RCTL);
230 unregister_code(KC_RSFT);