]> git.donarmstrong.com Git - qmk_firmware.git/blobdiff - keyboards/mt980/keymaps/walker/keymap.c
Added info.json for mt980 keyboard and fixes to walker keymap (#5391)
[qmk_firmware.git] / keyboards / mt980 / keymaps / walker / keymap.c
index c1db4f3d3d8e79767add72782a795c9a03452f2e..83a3fb8167daf87df07f9129d13a1710ef467f72 100644 (file)
@@ -99,35 +99,68 @@ void led_set_keymap(uint8_t usb_led) {
 }
 
 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 (get_oneshot_layer() == 1 || layer_state & 0x2) {
-          register_code(KC_HOME);
-          unregister_code(KC_HOME);
+        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 {
-          register_code(KC_PGUP);  
-          unregister_code(KC_PGUP);  
+          if (record->event.pressed)
+            register_code(KC_PGUP);
+          else
+            unregister_code(KC_PGUP);
         }
         return false;
       }
       return true;
     case KC_PENT:
       if (!numlock_on) {
-        if (get_oneshot_layer() == 1 || layer_state & 0x2) {
-          register_code(KC_END);
-          unregister_code(KC_END);
+        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 {
-          register_code(KC_PGDN);  
-          unregister_code(KC_PGDN);  
+          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;
   }