2
0

keymap.c 7.0 KB

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