 c3b4f65c64
			
		
	
	
		c3b4f65c64
		
	
	
	
	
		
			
			* Added info.json and minor fixes to walker keymap * Fix url * Update keyboards/mt980/info.json Co-Authored-By: walkerstop <walkerstop@gmail.com> * Update keyboards/mt980/info.json Co-Authored-By: walkerstop <walkerstop@gmail.com> * Update keyboards/mt980/info.json Co-Authored-By: walkerstop <walkerstop@gmail.com> * Update keyboards/mt980/info.json Co-Authored-By: walkerstop <walkerstop@gmail.com> * Update keyboards/mt980/info.json Co-Authored-By: walkerstop <walkerstop@gmail.com> * Update keyboards/mt980/info.json Co-Authored-By: walkerstop <walkerstop@gmail.com> * Update keyboards/mt980/info.json Co-Authored-By: walkerstop <walkerstop@gmail.com> * Fix user calling keymap functions * cancel oneshot layer on KC_TRNS * Fix to oneshot layer handling * Fix oneshot handling of reset * Move bootmagic key to Esc where it normally resides * Remove deprecated function * Treat shift-numlock as shift-insert in Walker layer
		
			
				
	
	
		
			168 lines
		
	
	
	
		
			6.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
	
		
			6.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "mt980.h"
 | |
| 
 | |
| bool numlock_on = true;
 | |
| 
 | |
| typedef struct {
 | |
|   bool is_press_action;
 | |
|   int state;
 | |
| } tap;
 | |
| 
 | |
| enum {
 | |
|   SINGLE_TAP = 1,
 | |
|   SINGLE_HOLD = 2,
 | |
|   DOUBLE_TAP = 3,
 | |
|   DOUBLE_HOLD = 4,
 | |
|   TRIPLE_TAP = 5,
 | |
|   TRIPLE_HOLD = 6
 | |
| };
 | |
| 
 | |
| enum {
 | |
|   ALT_L1 = 0
 | |
| };
 | |
| 
 | |
| int cur_dance (qk_tap_dance_state_t *state);
 | |
| void alt_finished (qk_tap_dance_state_t *state, void *user_data);
 | |
| void alt_reset (qk_tap_dance_state_t *state, void *user_data);
 | |
| 
 | |
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | |
| 
 | |
|   [0] = LAYOUT(
 | |
|     KC_ESC,   KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   KC_NO,              KC_INS,   KC_PSCR,  KC_PGUP,  KC_PGDN, 
 | |
|     KC_GRV,   KC_1,     KC_2,     KC_3,     KC_4,     KC_5,     KC_6,     KC_7,     KC_8,     KC_9,     KC_0,     KC_MINS,  KC_EQL,   KC_BSPC,  KC_BSPC,  KC_NLCK,  KC_PSLS,  KC_PAST,  KC_PMNS,
 | |
|     KC_TAB,   KC_Q,     KC_W,     KC_E,     KC_R,     KC_T,     KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,     KC_LBRC,  KC_RBRC,  KC_BSLS,            KC_P7,    KC_P8,    KC_P9,    KC_PPLS,
 | |
|     KC_CAPS,  KC_A,     KC_S,     KC_D,     KC_F,     KC_G,     KC_H,     KC_J,     KC_K,     KC_L,     KC_SCLN,  KC_QUOT,  KC_ENT,                       KC_P4,    KC_P5,    KC_P6,    KC_PPLS,
 | |
|     KC_LSFT,  KC_LSFT,  KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,  KC_RSFT,  KC_UP,              KC_P1,    KC_P2,    KC_P3,    KC_PENT,
 | |
|     KC_LCTL,  KC_LGUI,  TD(ALT_L1),                   KC_SPC,                                 KC_RALT,  MO(1),    KC_RCTL,  KC_LEFT,  KC_DOWN,  KC_RGHT,            KC_P0,    KC_PDOT,  KC_PENT),
 | |
| 
 | |
|   [1] = LAYOUT(
 | |
|     KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_PAUSE, KC_SLCK,  KC_HOME,  KC_END,   
 | |
|     KC_TRNS,  KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,   RGB_TOG,  RESET,    KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,   
 | |
|     KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,            KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,   
 | |
|     KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,                      KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,   
 | |
|     KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,  RGB_VAI,            KC_TRNS,  KC_TRNS,  KC_TRNS,  KC_TRNS,   
 | |
|     KC_TRNS,  KC_TRNS,  KC_TRNS,                      RESET,                                  KC_TRNS,  KC_TRNS,  KC_TRNS,  RGB_RMOD, RGB_VAD,  RGB_MOD,            KC_TRNS,  KC_TRNS,  KC_TRNS)  
 | |
| 
 | |
| };
 | |
| 
 | |
| int cur_dance (qk_tap_dance_state_t *state) {
 | |
|   if (state->count == 1) {
 | |
|     if (state->pressed) return SINGLE_HOLD;
 | |
|     else return SINGLE_TAP;
 | |
|   }
 | |
|   else if (state->count == 2) {
 | |
|     if (state->pressed) return DOUBLE_HOLD;
 | |
|     else return DOUBLE_TAP;
 | |
|   }
 | |
|   else if (state->count == 3) {
 | |
|     if (state->interrupted || !state->pressed)  return TRIPLE_TAP;
 | |
|     else return TRIPLE_HOLD;
 | |
|   }
 | |
|   else return 8;
 | |
| }
 | |
| 
 | |
| static tap alttap_state = {
 | |
|   .is_press_action = true,
 | |
|   .state = 0
 | |
| };
 | |
| 
 | |
| void alt_finished (qk_tap_dance_state_t *state, void *user_data) {
 | |
|   alttap_state.state = cur_dance(state);
 | |
|   switch (alttap_state.state) {
 | |
|     case SINGLE_TAP: set_oneshot_layer(1, ONESHOT_START); clear_oneshot_layer_state(ONESHOT_PRESSED); break;
 | |
|     case SINGLE_HOLD: register_code(KC_LALT); break;
 | |
|     case DOUBLE_TAP: set_oneshot_layer(1, ONESHOT_START); set_oneshot_layer(1, ONESHOT_PRESSED); break;
 | |
|     case DOUBLE_HOLD: register_code(KC_LALT); layer_on(1); break;
 | |
|   }
 | |
| }
 | |
| 
 | |
| void alt_reset (qk_tap_dance_state_t *state, void *user_data) {
 | |
|   switch (alttap_state.state) {
 | |
|     case SINGLE_TAP: break;
 | |
|     case SINGLE_HOLD: unregister_code(KC_LALT); break;
 | |
|     case DOUBLE_TAP: break;
 | |
|     case DOUBLE_HOLD: layer_off(1); unregister_code(KC_LALT); break;
 | |
|   }
 | |
|   alttap_state.state = 0;
 | |
| }
 | |
| 
 | |
| qk_tap_dance_action_t tap_dance_actions[] = {
 | |
|   [ALT_L1] = ACTION_TAP_DANCE_FN_ADVANCED(NULL,alt_finished, alt_reset)
 | |
| };
 | |
| 
 | |
| void led_set_keymap(uint8_t usb_led) {
 | |
|   if (usb_led & (1<<USB_LED_NUM_LOCK)) {
 | |
|     numlock_on = true;
 | |
|   }
 | |
|   else {
 | |
|     numlock_on = false;
 | |
|   }
 | |
| }
 | |
| 
 | |
| bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
 | |
| 
 | |
|   switch (keycode) {
 | |
|     case KC_TRNS:
 | |
|     case KC_NO:
 | |
|       /* Always cancel one-shot layer when another key gets pressed */
 | |
|       if (record->event.pressed && is_oneshot_layer_active())
 | |
|       clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
 | |
|       return true;
 | |
|     case RESET:
 | |
|       /* Don't allow reset from oneshot layer state */
 | |
|       if (record->event.pressed && is_oneshot_layer_active()) {
 | |
|         clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
 | |
|         return false;
 | |
|       }
 | |
|       return true;
 | |
|     case KC_PPLS:
 | |
|       if (!numlock_on) {
 | |
|         if (is_oneshot_layer_active() || layer_state & 0x2) {
 | |
|           if (record->event.pressed)
 | |
|             register_code(KC_HOME);
 | |
|           else
 | |
|             unregister_code(KC_HOME);
 | |
|           clear_oneshot_layer_state(ONESHOT_START);
 | |
|         }
 | |
|         else {
 | |
|           if (record->event.pressed)
 | |
|             register_code(KC_PGUP);
 | |
|           else
 | |
|             unregister_code(KC_PGUP);
 | |
|         }
 | |
|         return false;
 | |
|       }
 | |
|       return true;
 | |
|     case KC_PENT:
 | |
|       if (!numlock_on) {
 | |
|         if (is_oneshot_layer_active() || layer_state & 0x2) {
 | |
|           if (record->event.pressed)
 | |
|             register_code(KC_END);
 | |
|           else
 | |
|             unregister_code(KC_END);
 | |
|           clear_oneshot_layer_state(ONESHOT_START);
 | |
|         }
 | |
|         else {
 | |
|           if (record->event.pressed)
 | |
|             register_code(KC_PGDN);
 | |
|           else
 | |
|             unregister_code(KC_PGDN);
 | |
|         }
 | |
|         return false;
 | |
|       }
 | |
|       return true;
 | |
|     case KC_NLCK:
 | |
|       /* Shift + NumLock will be treated as shift-Insert */
 | |
|       if ((keyboard_report->mods & MOD_BIT (KC_LSFT)) || (keyboard_report->mods & MOD_BIT (KC_RSFT))) {
 | |
|         if (record->event.pressed) {
 | |
|           register_code(KC_INS);
 | |
|           unregister_code(KC_INS);
 | |
|         }
 | |
|         return false;
 | |
|       }
 | |
|       else
 | |
|         return true;
 | |
|     default:
 | |
|       return true;
 | |
|   }
 | |
|   return true;
 | |
| }
 |