2
0

keymap.c 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. #include "satan.h"
  2. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  3. // general keydefs
  4. #define norm 0 // Default layer
  5. #define elev 1 // Layer directional keys
  6. #define supr 2 // F-keys and mediakeys
  7. #define spac 3
  8. #define FNO1 4 //
  9. #define FNO2 5 //
  10. #define FNO3 6 //
  11. #define MAC0 M(0) //
  12. #define MAC1 M(1) //
  13. #define MAC2 M(2) //
  14. #define MAC3 M(3) //
  15. #define MAC4 M(4) //
  16. #define MAC5 M(5) //
  17. #define MAC6 M(6) //
  18. #define MAC7 M(7) //
  19. #define MAC8 M(8) //
  20. #define MAC9 M(9) //
  21. #define GRAV KC_GRV //
  22. #define MEDI F(FNO1)//
  23. // General shortenings
  24. #define ESCA KC_ESC
  25. #define MINS KC_MINS
  26. #define EQUL KC_EQL
  27. #define BSPC KC_BSPC
  28. #define DELE KC_DEL
  29. #define LBRC KC_LBRC
  30. #define RBRC KC_RBRC
  31. #define ALTR KC_RALT
  32. #define SCLN KC_SCLN
  33. #define QUOT KC_QUOT
  34. #define NUHS KC_NUHS
  35. #define ENTE KC_ENT
  36. #define NUBS KC_NUBS // Less/ greater sign
  37. #define COMM KC_COMM // Comma
  38. #define FSTO KC_DOT // Full stop
  39. #define SLSH KC_SLSH
  40. #define ALTL KC_LALT
  41. #define GUIL KC_LGUI
  42. #define GUIR KC_RGUI
  43. #define MENO KC_MENU
  44. // The F-row/layer:
  45. #define FK01 KC_F1
  46. #define FK02 KC_F2
  47. #define FK03 KC_F3
  48. #define FK04 KC_F4
  49. #define FK05 KC_F5
  50. #define FK06 KC_F6
  51. #define FK07 KC_F7
  52. #define FK08 KC_F8
  53. #define FK09 KC_F9
  54. #define FK10 KC_F10
  55. #define FK11 KC_F11
  56. #define FK12 KC_F12
  57. #define FK13 KC_F13
  58. #define FK14 KC_F14
  59. // Special Actions and Media Keys
  60. #define INSE KC_INS // Insert here
  61. #define HOME KC_HOME // Go to beginning of line
  62. #define ENDI KC_END // go to end of line
  63. #define PSCR KC_PSCR // Print Screen
  64. #define SLCK KC_SLCK // go to end of line
  65. #define PGDN KC_PGDN // go to end of line
  66. #define PGUP KC_PGUP // go to end of line
  67. #define PLPS KC_MPLY // Play/Pause
  68. #define PAUS KC_PAUS // Pause button
  69. #define MUTE KC_MUTE // Mute sound
  70. #define VOLU KC_VOLU // Volume increase
  71. #define VOLD KC_VOLD // Volume decrease
  72. #define MNXT KC_MNXT // next track
  73. #define MPRV KC_MPRV // prev track
  74. #define MSTP KC_MSTP // stop playing
  75. #define MSEL KC_MSEL // Select media (Start playing it)
  76. #define MAIL KC_MAIL // Open default mail app
  77. #define CALC KC_CALC // Open default calculator app
  78. #define MYCM KC_MYCM // Open default file manager
  79. //#define LILO KC_XXXXXX // Reserved for later
  80. //#define LIHI KC_XXXXXX // Reserved for later
  81. // dual-role shortcuts
  82. #define DUTB LT(elev, KC_TAB) // `tabs` layer on hold and tab on tap
  83. #define DUSP LT(spac, KC_SPACE) // `spce` layer on hold and space on tap
  84. #define LOCK LGUI(KC_L) // lock computer (win)
  85. // Space Admiral Strokers
  86. #define SADL MAC0 // Hold for lshift and { on tap
  87. #define SADR MAC1 // Hold for rshift and } on tap
  88. #define CADL MAC2 // Hold for lctrl and [ on tap
  89. #define CADR MAC3 // Hold for rctrl and ] on tap
  90. // arrow cluster duality bottom right corner
  91. #define ARLF ALT_T(KC_LEFT) // Left arrow
  92. #define ARRT CTL_T(KC_RIGHT)// Right arrow
  93. #define ARUP SFT_T(KC_UP) // Up arrow
  94. #define ARDN GUI_T(KC_DOWN) // Down arrow
  95. // brackets
  96. #define NOCL RALT(KC_7) // [
  97. #define NOCR RALT(KC_0) // ]
  98. #define NOPL LSFT(KC_8) // (
  99. #define NOPR LSFT(KC_9) // )
  100. #define NOAL KC_NUBS // <
  101. #define NOAR LSFT(KC_NUBS) // >
  102. #define NOBL RALT(KC_8) // [
  103. #define NOBR RALT(KC_9) // ]
  104. // increase readability
  105. #define XXXX KC_TRNS
  106. #define DEAD KC_NO
  107. #define SCAN KC_TRNS // Scandinavian keys, the Row 5 key 5 is actually Row 1 key 15 on the PCB
  108. [ norm ] = KEYMAP( // Normal scandinavian mapping (danish has QUOT and SCLN wapped)
  109. GRAV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, MINS, EQUL, BSPC, DELE,\
  110. DUTB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, LBRC, RBRC, DEAD,\
  111. ALTR, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SCLN, QUOT, NUHS, ENTE,\
  112. SADL, NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, COMM, FSTO, SLSH, SADR, DEAD,\
  113. CADL, ALTL, GUIL, DUSP, GUIR, MEDI, MENO, CADR),
  114. [ elev ] = KEYMAP( // The f-Row (with f13-14), Special keys and media keys
  115. LOCK, FK01, FK02, FK03, FK04, FK05, FK06, FK07, FK08, FK09, FK10, FK11, FK12, FK13, FK14,\
  116. XXXX, XXXX, XXXX, XXXX, MAIL, XXXX, XXXX, HOME, INSE, PSCR, SLCK, PAUS, PGUP, XXXX,\
  117. XXXX, XXXX, XXXX, XXXX, MYCM, XXXX, XXXX, MPRV, PAUS, MNXT, XXXX, XXXX, PGDN, ENDI,\
  118. XXXX, XXXX, XXXX, XXXX, CALC, XXXX, XXXX, XXXX, MUTE, VOLD, VOLU, XXXX, ARUP, DEAD,\
  119. XXXX, XXXX, XXXX, PLPS, XXXX, ARLF, ARDN, ARRT),
  120. [ spac ] = KEYMAP( // The space controls (by pressing space)
  121. XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX,\
  122. XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX,\
  123. XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX,\
  124. XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, DEAD,\
  125. XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX),
  126. [ supr ] = KEYMAP( // Additional layer for later use.
  127. XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX,\
  128. XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX,\
  129. XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX,\
  130. XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, DEAD,\
  131. XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX),
  132. };
  133. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function
  134. static uint16_t key_timer;
  135. switch(id) {
  136. case 0: //MAC0 - Hold for lshift and { on tap
  137. if (record->event.pressed) {
  138. key_timer = timer_read();
  139. return MACRO(D(LSFT), END );
  140. } else {
  141. return (timer_elapsed(key_timer) < 150) ? MACRO(U(LSFT),D(RALT),T(7),U(RALT),END): MACRO(U(LSFT),END);
  142. }; break;
  143. case 1: //MAC1 - Hold for rshift and } on tap
  144. if (record->event.pressed) {
  145. key_timer = timer_read();
  146. return MACRO(D(RSFT), END );
  147. } else {
  148. return (timer_elapsed(key_timer) < 150) ? MACRO(U(RSFT),D(RALT),T(0),U(RALT),END): MACRO(U(RSFT),END);
  149. }; break;
  150. case 2: //MAC2 - Hold for lctrl and [ on tap
  151. if (record->event.pressed) {
  152. key_timer = timer_read();
  153. return MACRO(D(LCTL), END );
  154. } else {return (timer_elapsed(key_timer) < 150) ? MACRO(U(LCTL),D(RALT),T(8),U(RALT),END):MACRO(U(LCTL),END);
  155. }; break;
  156. case 3: //MAC3 - Hold for rctrl and ] on tap
  157. if (record->event.pressed) {
  158. key_timer = timer_read();
  159. return MACRO(D(RCTL), END );
  160. } else {
  161. return (timer_elapsed(key_timer) < 150) ? MACRO(U(RCTL),D(RALT),T(9),U(RALT),END):MACRO(U(RCTL),END);
  162. }; break;
  163. case 4: //MAC4
  164. if (record->event.pressed) { } else { }; break;
  165. case 5: //MAC5
  166. if (record->event.pressed) { } else { }; break;
  167. case 6: //MAC6
  168. if (record->event.pressed) { } else { }; break;
  169. } return MACRO_NONE;
  170. };
  171. /*
  172. Later use:
  173. void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { }
  174. enum function_id { };
  175. const uint16_t PROGMEM fn_actions[] = { };
  176. */