Advertisement
jamesonBradfield

features folder

Nov 8th, 2024
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.71 KB | None | 0 0
  1.  
  2.  
  3. //key_overrides.h
  4. #pragma once
  5.  
  6. #include QMK_KEYBOARD_H
  7.  
  8. extern const key_override_t *key_overrides[];
  9.  
  10.  
  11. //socd.h
  12. #pragma once
  13.  
  14. #include QMK_KEYBOARD_H
  15.  
  16. enum jamies_keycodes {
  17.     SOCD_W = SAFE_RANGE,
  18.     SOCD_A,
  19.     SOCD_S,
  20.     SOCD_D,
  21.     COLEMAK_TG    // New keycode for Colemak toggle
  22. };
  23.  
  24. bool process_record_user(uint16_t keycode, keyrecord_t *record);
  25.  
  26.  
  27. //layers.h
  28. #pragma once
  29.  
  30. enum layer_names {
  31.     _QWERTY,
  32.     _SYM,
  33.     _NUM,
  34.     _GAME,
  35.     _COLEMAK
  36. };
  37.  
  38. //key_overrides.c
  39.  
  40. #include "key_overrides.h"
  41. const key_override_t delete_key_override = ko_make_basic(MOD_MASK_SHIFT, KC_BSPC, KC_DEL);
  42. const key_override_t bspc_key_override = ko_make_basic(MOD_MASK_ALT,KC_BSPC, KC_BSLS);
  43. const key_override_t right_parenthesis_key_override = ko_make_basic(MOD_MASK_SHIFT,KC_RPRN, KC_0);
  44. const key_override_t exclamation_key_override = ko_make_basic(MOD_MASK_SHIFT,KC_EXLM, KC_1);
  45. const key_override_t at_key_override = ko_make_basic(MOD_MASK_SHIFT,KC_AT, KC_2);
  46. const key_override_t hash_key_override = ko_make_basic(MOD_MASK_SHIFT,KC_HASH, KC_3);
  47. const key_override_t dollar_key_override = ko_make_basic(MOD_MASK_SHIFT,KC_DLR, KC_4);
  48. const key_override_t percentage_key_override = ko_make_basic(MOD_MASK_SHIFT,KC_PERC, KC_5);
  49. const key_override_t circ_key_override = ko_make_basic(MOD_MASK_SHIFT,KC_CIRC, KC_6);
  50. const key_override_t ampr_key_override = ko_make_basic(MOD_MASK_SHIFT,KC_AMPR, KC_7);
  51. const key_override_t astr_key_override = ko_make_basic(MOD_MASK_SHIFT,KC_ASTR, KC_8);
  52. const key_override_t lprn_key_override = ko_make_basic(MOD_MASK_SHIFT,KC_LPRN, KC_9);
  53. const key_override_t mins_key_override = ko_make_basic(MOD_MASK_SHIFT,KC_MINS, KC_UNDS);
  54. const key_override_t eql_key_override = ko_make_basic(MOD_MASK_SHIFT,KC_EQL,KC_PLUS);
  55. const key_override_t lbrc_key_override = ko_make_basic(MOD_MASK_SHIFT,KC_LBRC,KC_LCBR);
  56. const key_override_t rbrc_key_override = ko_make_basic(MOD_MASK_SHIFT,KC_RBRC,KC_RCBR);
  57. const key_override_t bsls_key_override = ko_make_basic(MOD_MASK_SHIFT,KC_BSLS, KC_PIPE);
  58.  
  59. const key_override_t *key_overrides[] = {
  60.     &delete_key_override,
  61.     &right_parenthesis_key_override,
  62.     &exclamation_key_override,
  63.     &at_key_override,
  64.     &hash_key_override,
  65.     &dollar_key_override,
  66.     &percentage_key_override,
  67.     &circ_key_override,
  68.     &ampr_key_override,
  69.     &astr_key_override,
  70.     &lprn_key_override,
  71.     &mins_key_override,
  72.     &eql_key_override,
  73.     &lbrc_key_override,
  74.     &rbrc_key_override,
  75.     &bsls_key_override,
  76.     &bspc_key_override,
  77.     NULL
  78. };
  79.  
  80. //socd.c
  81. #include "socd.h"
  82. #include "layers.h"
  83. static bool w_down = false;
  84. static bool a_down = false;
  85. static bool s_down = false;
  86. static bool d_down = false;
  87.  
  88. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  89.     switch (keycode) {
  90.      case COLEMAK_TG:
  91.         if (record->event.pressed) {
  92.             if (get_highest_layer(layer_state) == _COLEMAK) {
  93.                 layer_clear();  // Return to base layer
  94.             } else {
  95.                 layer_move(_COLEMAK);
  96.             }
  97.         }
  98.         return false;
  99.     case SOCD_W:
  100.         if (record->event.pressed) {
  101.             if (s_down) {
  102.                 unregister_code(KC_S);
  103.             }
  104.             register_code(KC_W);
  105.             w_down = true;
  106.         } else {
  107.             unregister_code(KC_W);
  108.             w_down = false;
  109.  
  110.             if (s_down) {
  111.                 register_code(KC_S);
  112.             }
  113.         }
  114.         return false;
  115.         break;
  116.     case SOCD_A:
  117.         if (record->event.pressed) {
  118.             if (d_down) {
  119.                 unregister_code(KC_D);
  120.             }
  121.             register_code(KC_A);
  122.             a_down = true;
  123.         } else {
  124.             unregister_code(KC_A);
  125.             a_down = false;
  126.  
  127.             if (d_down) {
  128.                 register_code(KC_D);
  129.             }
  130.         }
  131.         return false;
  132.         break;
  133.     case SOCD_S:
  134.         if (record->event.pressed) {
  135.             if (w_down) {
  136.                 unregister_code(KC_W);
  137.             }
  138.             register_code(KC_S);
  139.             s_down = true;
  140.         } else {
  141.             unregister_code(KC_S);
  142.             s_down = false;
  143.  
  144.             if (w_down) {
  145.                 register_code(KC_W);
  146.             }
  147.         }
  148.         return false;
  149.         break;
  150.     case SOCD_D:
  151.         if (record->event.pressed) {
  152.             if (a_down) {
  153.                 unregister_code(KC_A);
  154.             }
  155.             register_code(KC_D);
  156.             d_down = true;
  157.         } else {
  158.             unregister_code(KC_D);
  159.             d_down = false;
  160.  
  161.             if (a_down) {
  162.                 register_code(KC_A);
  163.             }
  164.         }
  165.         return false;
  166.         break;
  167.     }
  168.     return true;
  169. }
  170.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement