keymap.c 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. // this is the style you want to emulate.
  2. // This is the canonical layout file for the Quantum project. If you want to add another keyboard,
  3. #include QMK_KEYBOARD_H
  4. #include "keymap_jis2us.h"
  5. #include "action_pseudo_lut.h"
  6. // Each layer gets a name for readability, which is then used in the keymap matrix below.
  7. // The underscores don't mean anything - you can have a layer called STUFF or any other name.
  8. // Layer names don't all need to be of the same length, obviously, and you can also skip them
  9. // entirely and just use numbers.
  10. enum comet46_layers {
  11. _QWERTY,
  12. _LOWER,
  13. _RAISE,
  14. _PSEUDO_US,
  15. _PSEUDO_US_LOWER,
  16. _PSEUDO_US_RAISE,
  17. _ADJUST
  18. };
  19. enum custom_keycodes {
  20. QWERTY = SAFE_RANGE,
  21. PSEUDO_US,
  22. };
  23. #define KC_LWR MO(_LOWER)
  24. #define KC_RSE MO(_RAISE)
  25. #define KC_P_LW MO(_PSEUDO_US_LOWER)
  26. #define KC_P_RS MO(_PSEUDO_US_RAISE)
  27. #define KC_QWRT QWERTY
  28. #define KC_P_US PSEUDO_US
  29. #define KC_SPCT CTL_T(KC_SPC)
  30. #define KC_ENSF SFT_T(KC_ENT)
  31. #define KC_SFTA SFT_T(KC_A)
  32. #define KC_CTSF S(KC_LCTL)
  33. #define KC_IMON ALT_T(KC_F13)
  34. #define KC_IMOF GUI_T(KC_F14)
  35. #define KC_SRO S(KC_RO)
  36. #define KC_SYEN S(KC_JYEN)
  37. #define KC_CAD LCA(KC_DEL)
  38. #define KC_RST RESET
  39. #define LONGPRESS_DELAY 150
  40. // Fillers to make layering more clear
  41. #define KC_ KC_TRNS
  42. #define KC_XXXX KC_NO
  43. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  44. [_QWERTY] = LAYOUT_kc(
  45. //,----+----+----+----+----+----+ +----+----+----+----+----+----.
  46. ESC , Q , W , E , R , T , Y , U , I , O , P ,DEL ,
  47. //|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
  48. TAB ,SFTA, S , D , F , G ,LPRN, RPRN, H , J , K , L ,SCLN,BSPC,
  49. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  50. CTSF, Z , X , C , V , B ,LBRC, RBRC, N , M ,COMM,DOT ,SLSH,QUOT,
  51. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  52. IMOF,LWR ,SPCT, ENSF,RSE ,IMON
  53. // +----+----+---/ \---+----+----+
  54. ),
  55. [_LOWER] = LAYOUT_kc(
  56. //,----+----+----+----+----+----+ +----+----+----+----+----+----.
  57. ,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN, ,
  58. //|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
  59. , F1 , F2 , F3 , F4 , F5 , F6 , GRV ,BSLS,MINS,EQL ,LBRC,RBRC, ,
  60. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  61. , F7 , F8 , F9 , F10, F11, F12, TILD,PIPE,UNDS,PLUS,LCBR,RCBR, ,
  62. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  63. , , , , ,
  64. // +----+----+---/ \---+----+----+
  65. ),
  66. [_RAISE] = LAYOUT_kc(
  67. //,----+----+----+----+----+----+ +----+----+----+----+----+----.
  68. , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , ,
  69. //|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
  70. , , , , , , , XXXX,LEFT,DOWN, UP ,RGHT,END , ,
  71. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  72. , , , , , , , HOME,XXXX,XXXX,XXXX,XXXX,XXXX, ,
  73. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  74. , , , , ,
  75. // +----+----+---/ \---+----+----+
  76. ),
  77. [_PSEUDO_US] = LAYOUT_kc(
  78. //,----+----+----+----+----+----+ +----+----+----+----+----+----.
  79. ESC , Q , W , E , R , T , Y , U , I , O , P ,DEL ,
  80. //|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
  81. TAB ,SFTA, S , D , F , G ,ASTR, LPRN, H , J , K , L ,FN0 ,BSPC,
  82. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  83. CTSF, Z , X , C , V , B ,FN0 , FN0 , N , M ,COMM,DOT ,SLSH,FN0 ,
  84. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  85. IMOF,P_LW,SPCT, ENSF,P_RS,IMON
  86. // +----+----+---/ \---+----+----+
  87. ),
  88. [_PSEUDO_US_LOWER] = LAYOUT_kc(
  89. //,----+----+----+----+----+----+ +----+----+----+----+----+----.
  90. ,EXLM,LBRC,HASH,DLR ,PERC, EQL ,CIRC, DQT,ASTR,LPRN, ,
  91. //|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
  92. , F1 , F2 , F3 , F4 , F5 , F6 , LCBR,JYEN,MINS,UNDS,RBRC,BSLS, ,
  93. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  94. , F7 , F8 , F9 , F10, F11, F12, PLUS,SYEN,SRO ,COLN,RCBR,PIPE, ,
  95. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  96. , , , , ,
  97. // +----+----+---/ \---+----+----+
  98. ),
  99. [_PSEUDO_US_RAISE] = LAYOUT_kc(
  100. //,----+----+----+----+----+----+ +----+----+----+----+----+----.
  101. , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , ,
  102. //|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
  103. , , , , , , GRV, XXXX,LEFT,DOWN, UP ,RGHT,END , ,
  104. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  105. , , , , , , , HOME,XXXX,XXXX,XXXX,XXXX,XXXX, ,
  106. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  107. , , , , ,
  108. // +----+----+---/ \---+----+----+
  109. ),
  110. [_ADJUST] = LAYOUT_kc(
  111. //,----+----+----+----+----+----+ +----+----+----+----+----+----.
  112. , , , , , , , , , , , ,
  113. //|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
  114. , , , , , ,CAD , QWRT, , , , , , ,
  115. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  116. , , , , , ,RST , P_US, , , , , , ,
  117. //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
  118. , , , , ,
  119. // +----+----+---/ \---+----+----+
  120. )
  121. };
  122. /*
  123. * user defined action function
  124. */
  125. enum function_id {
  126. PSEUDO_US_FUNCTION,
  127. };
  128. void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
  129. switch (id)
  130. {
  131. case PSEUDO_US_FUNCTION:
  132. action_pseudo_lut(record, _QWERTY, keymap_jis2us);
  133. break;
  134. }
  135. }
  136. /*
  137. * Fn action definition
  138. */
  139. const uint16_t PROGMEM fn_actions[] = {
  140. [0] = ACTION_FUNCTION(PSEUDO_US_FUNCTION),
  141. };
  142. void matrix_scan_user(void) {
  143. uint8_t layer = biton32(layer_state);
  144. switch (layer) {
  145. case _LOWER:
  146. set_led_red;
  147. break;
  148. case _RAISE:
  149. set_led_blue;
  150. break;
  151. case _PSEUDO_US_LOWER:
  152. set_led_yellow;
  153. break;
  154. case _PSEUDO_US_RAISE:
  155. set_led_cyan;
  156. break;
  157. case _ADJUST:
  158. set_led_magenta;
  159. break;
  160. default:
  161. set_led_green;
  162. break;
  163. }
  164. };
  165. uint32_t layer_state_set_user(uint32_t state) {
  166. switch (biton32(state)) {
  167. case _PSEUDO_US:
  168. return update_tri_layer_state(state, _PSEUDO_US_RAISE, _PSEUDO_US_LOWER, _ADJUST);
  169. break;
  170. case _PSEUDO_US_LOWER:
  171. return update_tri_layer_state(state, _PSEUDO_US_RAISE, _PSEUDO_US_LOWER, _ADJUST);
  172. break;
  173. case _PSEUDO_US_RAISE:
  174. return update_tri_layer_state(state, _PSEUDO_US_RAISE, _PSEUDO_US_LOWER, _ADJUST);
  175. break;
  176. default:
  177. return update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
  178. break;
  179. }
  180. }
  181. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  182. switch (keycode) {
  183. case QWERTY:
  184. if (record->event.pressed) {
  185. set_single_persistent_default_layer(_QWERTY);
  186. }
  187. return false;
  188. break;
  189. case PSEUDO_US:
  190. if (record->event.pressed) {
  191. set_single_persistent_default_layer(_PSEUDO_US);
  192. }
  193. return false;
  194. break;
  195. }
  196. return true;
  197. }