logo

qmk_firmware

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

keymap.c (3542B)


  1. // Copyright 2022 bwprobably
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include QMK_KEYBOARD_H
  4. bool is_alt_tab_active = false;
  5. uint16_t alt_tab_timer = 0;
  6. enum layer_names {
  7. _BASE,
  8. _MTG,
  9. _MAC
  10. };
  11. enum custom_keycodes {
  12. pvt = SAFE_RANGE,
  13. snap,
  14. ALT_TAB
  15. };
  16. const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  17. /*
  18. * ┌───┬───┬───┬───┐
  19. * │pvt│pst│ up│cpy│
  20. * ├───┼───┼───┤───│
  21. * │sft│ lf│ dn│rt │
  22. * ├───┼───┼───┼───┤───┤
  23. * │[1]│ctr│wtb│app│bt3│
  24. * ├───┴───┼───┤───│───│
  25. */
  26. [_BASE] = LAYOUT
  27. (pvt, LCTL(KC_V), KC_UP, LCTL(KC_C),
  28. LSFT_T(KC_ESC), KC_LEFT, KC_DOWN, KC_RGHT,
  29. TO(1), KC_LCTL, ALT_TAB, KC_APP, KC_BTN3),
  30. /*
  31. * ┌────┬────┬────┬────┐
  32. * │mte │ BI │ up │pgu │
  33. * ├────┼────┼────┤────│
  34. * │snp │ lf │ dn │ rt │
  35. * ├────┼────┼────┼────┤───┤
  36. * │[1] │mut │min │pgd │ply│
  37. * ├────┴────┼────┤────│───│
  38. */
  39. [_MTG] = LAYOUT (
  40. LCTL(LSFT(KC_H)), LCTL(KC_F6), KC_TRNS, KC_PGUP,
  41. snap, KC_TRNS, KC_TRNS, KC_TRNS,
  42. TO(2), KC_MUTE, LGUI(KC_M), KC_PGDN, KC_MPLY),
  43. /*
  44. * ┌────┬────┬────┬────┐
  45. * │sdbr│past│ up │ cpy│
  46. * ├────┼────┼────┤────│
  47. * │snp │ lf │ dn │ rt │
  48. * ├────┼────┼────┤─────│────┤
  49. * │[1] |qkfl│ min│focus│ ply│
  50. * ├────┴────┼────┤─────│────│
  51. */
  52. [_MAC] = LAYOUT (
  53. LSFT(LGUI(KC_L)), LGUI(KC_V), KC_TRNS, LGUI(KC_C),
  54. LGUI(LCTL(LSFT(KC_4))), KC_TRNS, KC_TRNS, KC_TRNS,
  55. TO(0), LSFT(LGUI(KC_O)), LCTL(LALT(KC_F3)), LCTL(LSFT(KC_1)), KC_TRNS)
  56. };
  57. bool encoder_update_user(uint8_t index, bool clockwise) {
  58. if (IS_LAYER_ON(_MTG)) {
  59. if (clockwise) {
  60. tap_code(KC_VOLU);
  61. } else {
  62. tap_code16(S(KC_VOLD));
  63. }
  64. } else {
  65. if (clockwise) {
  66. tap_code(KC_WH_D);
  67. } else {
  68. tap_code(KC_WH_U);
  69. }
  70. }
  71. return false;
  72. }
  73. bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  74. switch (keycode) {
  75. case pvt:
  76. if (record->event.pressed) {
  77. // creates pivot table in excel
  78. SEND_STRING(SS_LALT("nvt"));
  79. }
  80. break;
  81. case snap:
  82. if (record->event.pressed) {
  83. SEND_STRING(SS_TAP(X_LGUI)SS_DELAY(500)"snip"SS_DELAY(500)SS_TAP(X_ENTER)SS_LALT("n")); // opens snipping and creates new snip
  84. }
  85. break;
  86. case ALT_TAB:
  87. if (record->event.pressed) {
  88. if (!is_alt_tab_active) {
  89. is_alt_tab_active = true;
  90. register_code(KC_LALT);
  91. }
  92. alt_tab_timer = timer_read();
  93. register_code(KC_TAB);
  94. } else {
  95. unregister_code(KC_TAB);
  96. }
  97. break;
  98. }
  99. return true;
  100. }
  101. void housekeeping_task_user(void) {
  102. if (is_alt_tab_active) {
  103. if (timer_elapsed(alt_tab_timer) > 1000) {
  104. unregister_code(KC_LALT);
  105. is_alt_tab_active = false;
  106. }
  107. }
  108. }