2
0

keymap.c 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. /*
  2. Copyright 2018 listofoptions <listofoptions@gmail.com>
  3. This program is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation, either version 2 of the License, or
  6. (at your option) any later version.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with this program. If not, see <http://www.gnu.org/licenses/>.
  13. */
  14. #include QMK_KEYBOARD_H
  15. /*
  16. enum xt_keycodes
  17. { XT_PAST = SAFE_RANGE // XT pad asterisk / print screen
  18. , XT_SLCK // XT scroll lock / break
  19. , XT_F6 // F6 / app key
  20. , XT_F5 // F5 / gui
  21. , XT_F9 // F9 / F11
  22. , XT_F10 // F10 / F12
  23. } ;
  24. static bool shift_pressed = false ,
  25. alt_pressed = false ,
  26. ctrl_pressed = false ,
  27. xt_pscr_pressed = false ,
  28. xt_brk_pressed = false ,
  29. xt_app_pressed = false ,
  30. xt_gui_pressed = false ,
  31. xt_lout_pressed = false ,
  32. xt_f11_pressed = false ,
  33. xt_f12_pressed = false ;
  34. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  35. switch (keycode) {
  36. case KC_LSFT:
  37. case KC_RSFT:
  38. if (record->event.pressed) {
  39. shift_pressed = true ;
  40. } else {
  41. shift_pressed = false ;
  42. }
  43. return true;
  44. break;
  45. case KC_LALT:
  46. if (record->event.pressed) {
  47. alt_pressed = true ;
  48. } else {
  49. alt_pressed = false ;
  50. }
  51. return true;
  52. break;
  53. case KC_LCTL:
  54. if (record->event.pressed) {
  55. ctrl_pressed = true ;
  56. } else {
  57. ctrl_pressed = false ;
  58. }
  59. return true;
  60. break;
  61. case XT_PAST:
  62. if (record->event.pressed) {
  63. if (shift_pressed) {
  64. xt_pscr_pressed = true ;
  65. register_code(KC_PSCR);
  66. } else {
  67. register_code(KC_PAST);
  68. }
  69. } else {
  70. if (xt_pscr_pressed) {
  71. xt_pscr_pressed = false ;
  72. unregister_code(KC_PSCR);
  73. } else {
  74. unregister_code(KC_PAST);
  75. }
  76. }
  77. return false;
  78. break;
  79. case XT_SLCK:
  80. if (record->event.pressed) {
  81. if (ctrl_pressed) {
  82. xt_brk_pressed = true ;
  83. register_code(KC_BRK);
  84. } else {
  85. register_code(KC_SLCK);
  86. }
  87. } else {
  88. if (xt_brk_pressed) {
  89. xt_brk_pressed = false ;
  90. unregister_code(KC_BRK);
  91. } else {
  92. unregister_code(KC_SLCK);
  93. }
  94. }
  95. return false;
  96. break;
  97. case XT_F6:
  98. if (record->event.pressed) {
  99. if (shift_pressed) {
  100. xt_app_pressed = true ;
  101. register_code(KC_APP);
  102. } else {
  103. register_code(KC_F6);
  104. }
  105. } else {
  106. if (xt_app_pressed) {
  107. xt_app_pressed = false ;
  108. unregister_code(KC_APP);
  109. } else {
  110. unregister_code(KC_F6);
  111. }
  112. }
  113. return false;
  114. break;
  115. case XT_F5:
  116. if (record->event.pressed) {
  117. if (shift_pressed) {
  118. xt_gui_pressed = true ;
  119. register_code(KC_LGUI);
  120. } else if (ctrl_pressed) {
  121. xt_lout_pressed = true ;
  122. register_code (KC_LGUI) ;
  123. register_code (KC_L) ;
  124. } else {
  125. register_code(KC_F5);
  126. }
  127. } else {
  128. if (xt_gui_pressed) {
  129. xt_gui_pressed = false ;
  130. unregister_code(KC_LGUI);
  131. } else if (xt_lout_pressed) {
  132. xt_lout_pressed = false ;
  133. unregister_code (KC_LGUI) ;
  134. unregister_code (KC_L) ;
  135. } else {
  136. unregister_code(KC_F5);
  137. }
  138. }
  139. return false;
  140. break;
  141. case XT_F9:
  142. if (record->event.pressed) {
  143. if (shift_pressed) {
  144. xt_f11_pressed = true ;
  145. register_code(KC_F11);
  146. } else {
  147. register_code(KC_F9);
  148. }
  149. } else {
  150. if (xt_f11_pressed) {
  151. xt_f11_pressed = false ;
  152. unregister_code(KC_F11);
  153. } else {
  154. unregister_code(KC_F9);
  155. }
  156. }
  157. return false;
  158. break;
  159. case XT_F10:
  160. if (record->event.pressed) {
  161. if (shift_pressed) {
  162. xt_f12_pressed = true ;
  163. register_code(KC_F12);
  164. } else {
  165. register_code(KC_F10);
  166. }
  167. } else {
  168. if (xt_f12_pressed) {
  169. xt_f12_pressed = false ;
  170. unregister_code(KC_F12);
  171. } else {
  172. unregister_code(KC_F10);
  173. }
  174. }
  175. return false;
  176. break;
  177. default:
  178. return true;
  179. break;
  180. }
  181. return true;
  182. }
  183. */
  184. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  185. // default layout is the standard XT layout
  186. /*
  187. * ,-------. ,--------------------------------------------------------------------------.
  188. * | F1| F2| |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS |NumLck |ScrLck |
  189. * |-------| |--------------------------------------------------------------------------|
  190. * | F3| F4| | Tab | Q| W| E| R| T| Y| U| I| O| P| [| ] | | 7| 8| 9| -|
  191. * |-------| |------------------------------------------------------|Ent|---------------|
  192. * | F5| F6| | Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| | 4| 5| 6| |
  193. * |-------| |----------------------------------------------------------------------| |
  194. * | F7| F8| |Shif| \| Z| X| C| V| B| N| M| ,| .| /|Shift| *| 1| 2| 3| +|
  195. * |-------| |----------------------------------------------------------------------| |
  196. * | F9|F10| | Alt | Space |CapsLck| 0 | . | |
  197. * `-------' `--------------------------------------------------------------------------'
  198. */
  199. /*
  200. [0] = LAYOUT (
  201. KC_F1,KC_F2, KC_ESC, KC_1, KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_NLCK, XT_SLCK,
  202. KC_F3,KC_F4, KC_TAB, KC_Q, KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O, KC_P, KC_LBRC,KC_RBRC, KC_P7,KC_P8, KC_P9, KC_PMNS,
  203. XT_F5,XT_F6, KC_LCTL,KC_A, KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L, KC_SCLN,KC_QUOT,KC_GRV, KC_ENT, KC_P4,KC_P5, KC_P6,
  204. KC_F7,KC_F8, KC_LSFT,KC_BSLS,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,XT_PAST,KC_P1,KC_P2, KC_P3, KC_PPLS,
  205. XT_F9,XT_F10,KC_LALT, KC_SPACE, KC_CAPS, KC_P0, KC_PDOT
  206. )
  207. */
  208. [0] = LAYOUT (
  209. KC_F1,KC_F2, KC_ESC, KC_1, KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_NLCK, KC_SLCK,
  210. KC_F3,KC_F4, KC_TAB, KC_Q, KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O, KC_P, KC_LBRC,KC_RBRC, KC_P7,KC_P8, KC_P9, KC_PMNS,
  211. KC_F5,KC_F6, KC_LCTL,KC_A, KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L, KC_SCLN,KC_QUOT,KC_GRV, KC_ENT, KC_P4,KC_P5, KC_P6,
  212. KC_F7,KC_F8, KC_LSFT,KC_BSLS,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,KC_PAST,KC_P1,KC_P2, KC_P3, KC_PPLS,
  213. KC_F9,KC_F10,KC_LALT, KC_SPACE, KC_CAPS, KC_P0, KC_PDOT
  214. )
  215. } ;