ajp10304.c 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. /* Copyright 2021 Alan Pocklington
  2. *
  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. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. */
  16. #include "ajp10304.h"
  17. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  18. switch (keycode) {
  19. case QWERTY:
  20. if (record->event.pressed) {
  21. set_single_persistent_default_layer(_QWERTY);
  22. }
  23. return false;
  24. case COLEMAK:
  25. if (record->event.pressed) {
  26. set_single_persistent_default_layer(_COLEMAK);
  27. }
  28. case LOWER:
  29. if (record->event.pressed) {
  30. layer_on(_LOWER);
  31. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  32. } else {
  33. layer_off(_LOWER);
  34. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  35. }
  36. return false;
  37. case RAISE:
  38. if (record->event.pressed) {
  39. layer_on(_RAISE);
  40. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  41. } else {
  42. layer_off(_RAISE);
  43. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  44. }
  45. return false;
  46. case MLWR:
  47. if (record->event.pressed) {
  48. layer_on(_LOWER);
  49. layer_on(_MLWR);
  50. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  51. } else {
  52. layer_off(_LOWER);
  53. layer_off(_MLWR);
  54. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  55. }
  56. return false;
  57. case MRSE:
  58. if (record->event.pressed) {
  59. layer_on(_RAISE);
  60. layer_on(_MRSE);
  61. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  62. } else {
  63. layer_off(_RAISE);
  64. layer_off(_MRSE);
  65. update_tri_layer(_LOWER, _RAISE, _ADJUST);
  66. }
  67. return false;
  68. case MFNC:
  69. if (record->event.pressed) {
  70. layer_on(_FUNC);
  71. layer_on(_MFNC);
  72. } else {
  73. layer_off(_FUNC);
  74. layer_off(_MFNC);
  75. }
  76. return false;
  77. case MFNC2:
  78. if (record->event.pressed) {
  79. layer_on(_FUNC2);
  80. layer_on(_MFNC2);
  81. } else {
  82. layer_off(_FUNC2);
  83. layer_off(_MFNC2);
  84. }
  85. return false;
  86. case M_CUSTOM:
  87. if (record->event.pressed) {
  88. SEND_STRING("Custom text here");
  89. }
  90. break;
  91. case M_WORD_SEL:
  92. if (record->event.pressed) {
  93. register_mods(MOD_LCTL);
  94. tap_code(KC_RGHT);
  95. tap_code16(S(KC_LEFT));
  96. unregister_mods(MOD_LCTL);
  97. }
  98. break;
  99. case M_WORD_SEL_MAC:
  100. if (record->event.pressed) {
  101. register_mods(MOD_LALT);
  102. tap_code(KC_RGHT);
  103. tap_code16(S(KC_LEFT));
  104. unregister_mods(MOD_LALT);
  105. }
  106. break;
  107. case M_LINE_SEL:
  108. if (record->event.pressed) {
  109. tap_code(KC_HOME);
  110. tap_code16(S(KC_END));
  111. }
  112. break;
  113. case M_LINE_SEL_MAC:
  114. if (record->event.pressed) {
  115. tap_code16(C(KC_A));
  116. tap_code16(C(S(KC_E)));
  117. }
  118. break;
  119. case M_LINE_DEL:
  120. if (record->event.pressed) {
  121. tap_code(KC_HOME);
  122. tap_code16(S(KC_END));
  123. tap_code(KC_BSPC);
  124. }
  125. break;
  126. case M_LINE_DEL_MAC:
  127. if (record->event.pressed) {
  128. tap_code16(C(KC_A));
  129. tap_code16(C(S(KC_E)));
  130. tap_code(KC_BSPC);
  131. }
  132. break;
  133. case M_DUP:
  134. if (record->event.pressed) {
  135. tap_code16(C(KC_C));
  136. tap_code(KC_RGHT);
  137. tap_code16(C(KC_V));
  138. }
  139. break;
  140. case M_DUP_MAC:
  141. if (record->event.pressed) {
  142. tap_code16(G(KC_C));
  143. tap_code(KC_RGHT);
  144. tap_code16(G(KC_V));
  145. }
  146. break;
  147. case M_JOIN:
  148. if (record->event.pressed) {
  149. tap_code(KC_END);
  150. tap_code(KC_DEL);
  151. }
  152. break;
  153. case M_JOIN_MAC:
  154. if (record->event.pressed) {
  155. tap_code16(C(KC_E));
  156. tap_code(KC_DEL);
  157. }
  158. break;
  159. case M_MODE:
  160. if (record->event.pressed) {
  161. send_string("PC ");
  162. send_string(get_highest_layer(default_layer_state) == _COLEMAK ? "COLEMAK" : "QWERTY");
  163. }
  164. break;
  165. case M_MODE_MAC:
  166. if (record->event.pressed) {
  167. send_string("OSX ");
  168. send_string(get_highest_layer(default_layer_state) == _COLEMAK ? "COLEMAK" : "QWERTY");
  169. }
  170. break;
  171. }
  172. return true;
  173. }