logo

qmk_firmware

custom branch of QMK firmware git clone https://anongit.hacktivis.me/git/qmk_firmware.git

keymap.c (3078B)


  1. #include QMK_KEYBOARD_H
  2. #include "led.h"
  3. enum layers {
  4. LAYER_BASE,
  5. LAYER_EDIT,
  6. LAYER_FUNCTION
  7. };
  8. enum custom_keycodes {
  9. M_COPY = SAFE_RANGE, // KC_FN5: MACRO_COPY_CUT
  10. M_SHFCT, // KC_FN6: MACRO_SHIFT_CONTROL
  11. M_CTALT // KC_FN7: MACRO_CONTROL_ALT
  12. };
  13. #define SC_UNDO LCTL(KC_Z)
  14. #define SC_REDO LCTL(KC_Y)
  15. #define SC_CUT LCTL(KC_X)
  16. #define SC_COPY LCTL(KC_C)
  17. #define SC_PSTE LCTL(KC_V)
  18. #define SC_SELA LCTL(KC_A)
  19. #define SC_SAVE LCTL(KC_S)
  20. #define SC_OPEN LCTL(KC_O)
  21. #define SC_ACLS LALT(KC_F4)
  22. #define SC_CCLS LCTL(KC_F4)
  23. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  24. [LAYER_BASE] = LAYOUT(
  25. KC_ESC, KC_TAB, KC_BSLS, MO(2),
  26. KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
  27. KC_P7, KC_P8, KC_P9, KC_PEQL,
  28. KC_P4, KC_P5, KC_P6, KC_PPLS,
  29. KC_P1, KC_P2, KC_P3, XXXXXXX,
  30. KC_P0, KC_PCMM, KC_PDOT, KC_PENT ),
  31. [LAYER_EDIT] = LAYOUT(
  32. KC_ESC, KC_TAB, KC_SPC, _______,
  33. TG(1), SC_PSTE, SC_REDO, SC_UNDO,
  34. KC_HOME, KC_UP, KC_PGUP, KC_LALT,
  35. KC_LEFT, M_COPY, KC_RGHT, KC_LCTL,
  36. KC_END, KC_DOWN, KC_PGDN, XXXXXXX,
  37. KC_BSPC, KC_PENT, KC_DEL, M_SHFCT ),
  38. [LAYER_FUNCTION] = LAYOUT(
  39. BL_TOGG, BL_UP, BL_DOWN, _______,
  40. TG(1), _______, _______, _______,
  41. _______, _______, _______, _______,
  42. _______, _______, _______, _______,
  43. _______, _______, _______, XXXXXXX,
  44. QK_BOOT, _______, _______, _______ ),
  45. };
  46. bool process_record_user(uint16_t keycode, keyrecord_t * record) {
  47. // MACRODOWN only works in this function
  48. switch (keycode) {
  49. case M_COPY:
  50. if (record->event.pressed) {
  51. register_code(KC_LCTL);
  52. if (record->tap.count == 1) {
  53. register_code(KC_C);
  54. unregister_code(KC_C);
  55. } else if (record->tap.count == 2) {
  56. register_code(KC_X);
  57. unregister_code(KC_X);
  58. }
  59. unregister_code(KC_LCTL);
  60. }
  61. break;
  62. case M_SHFCT:
  63. if (record->event.pressed) {
  64. if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
  65. if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
  66. if (record->tap.count == 3) register_code(KC_PENT);;
  67. } else {
  68. unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
  69. unregister_code(KC_PENT);
  70. }
  71. break;
  72. case M_CTALT:
  73. if (record->event.pressed) {
  74. if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
  75. if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
  76. } else {
  77. unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
  78. }
  79. break;
  80. }
  81. return true;
  82. }
  83. bool led_update_user(led_t led_state)
  84. {
  85. if (led_state.caps_lock) {
  86. // output high
  87. gpio_set_pin_output(D6);
  88. gpio_write_pin_high(D6);
  89. } else {
  90. // Hi-Z
  91. gpio_set_pin_input(D6);
  92. }
  93. if (led_state.num_lock) {
  94. // output low
  95. gpio_set_pin_output(C7);
  96. gpio_write_pin_low(C7);
  97. } else {
  98. // Hi-Z
  99. gpio_set_pin_input(C7);
  100. }
  101. return false;
  102. }