keymap.c 7.1 KB

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