keymap_nathan.c 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. // Author: Nathan Ross Powell <nathanrospowell@gmail.com>
  2. // https://github.com/nathanrosspowell/tmk_keyboard/blob/planck-jack/keyboard/planck/keymap_nathan.c
  3. #include "keymap_common.h"
  4. #ifndef KEYMAP_GRID
  5. /* Planck keymap definition macro for the 'grid' layout
  6. * ,-----------------------------------------------------------------------.
  7. * | | | | | | | | | | | | |
  8. * |-----------------------------------------------------------------------|
  9. * | | | | | | | | | | | | |
  10. * |-----------------------------------------------------------------------|
  11. * | | | | | | | | | | | | |
  12. * |-----------------------------------------------------------------------|
  13. * | | | | | | | | | | | | |
  14. * `-----------------------------------------------------------------------'
  15. */
  16. #define KEYMAP_GRID( \
  17. K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
  18. K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
  19. K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
  20. K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B \
  21. ) { \
  22. { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0A, KC_##K0B }, \
  23. { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B }, \
  24. { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B }, \
  25. { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B } \
  26. }
  27. #endif
  28. const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  29. /* 0: main layer
  30. * ,-----------------------------------------------------------------------.
  31. * |Tab | q | w | e | r | t | y | u | i | o | p | BS |
  32. * |-----------------------------------------------------------------------|
  33. * |Ctrl | a | s | d | f | g | h | j | k | l | ; | Ret |
  34. * |-----------------------------------------------------------------------|
  35. * |Shift| z | x | c | v | b | n | m | [ | ( | { | < |
  36. * |-----------------------------------------------------------------------|
  37. * |Meta | \ | / | Alt |Lower|Space|Space|Upper|Left |Down | Up |Right|
  38. * `-----------------------------------------------------------------------'
  39. */
  40. [0] = KEYMAP_GRID(
  41. TAB, Q, W, E, R, T, Y, U, I, O, P, BSPC,
  42. LCTL, A, S, D, F, G, H, J, K, L, SCLN, ENT,
  43. RSFT, Z, X, C, V, B, N, M, LBRC, FN10, FN11, FN12,
  44. LGUI, BSLS, SLSH, LALT, FN0, SPC, SPC, FN1, LEFT, DOWN, UP, RGHT),
  45. /* 1: fn left/lower layer
  46. * The top row are Visual Studio combos:
  47. * 'Run', 'Breakpoint', 'Step over', 'Step into', 'Set cursor to line'
  48. * 2nd row are key combos:
  49. * 'ctrl-alt-delete', 'ctrl-shift-escape'
  50. * 3rd row are macros keys:
  51. * 'P0' - 'P5' execute a script on Windows machines
  52. * ,-----------------------------------------------------------------------.
  53. * | ESC | F5 | F9 | F10 | F11 |S+F11|CSF10|NLock|Num7 |Num8 |Num9 | Del |
  54. * |-----------------------------------------------------------------------|
  55. * | |C/A/D|C/S/E| Ins |Print|Pause|SLock|Num0 |Num4 |Num5 |Num6 |Num= |
  56. * |-----------------------------------------------------------------------|
  57. * | | P0 | P1 | P2 | P3 | P4 | P5 |Num. |Num1 |Num2 |Num3 |Num/ |
  58. * |-----------------------------------------------------------------------|
  59. * | |User | | | | | | |Home |PgDn |PgUp | End |
  60. * `-----------------------------------------------------------------------'
  61. */
  62. [1] = KEYMAP_GRID(
  63. ESC, F5, F9, F10, F11, FN30, FN31, NLCK, P7, P8, P9, DEL,
  64. TRNS, FN16, FN17, INS, PSCR, PAUS, SLCK, P0, P4, P5, P6, PEQL,
  65. TRNS, FN2, FN3, FN4, FN5, FN6, FN7, PDOT, P1, P2, P3, PSLS,
  66. TRNS, FN8, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, HOME, PGDN, PGUP, END ),
  67. /* 2: fn right/raise layer
  68. * ,-----------------------------------------------------------------------.
  69. * | F1 | F2 | F3 | F4 |F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
  70. * |-----------------------------------------------------------------------|
  71. * | | ! | @ | # | $ | % | ^ | & | * | - | + | = |
  72. * |-----------------------------------------------------------------------|
  73. * | | _ | ' | " | ` | ~ | , | . | ] | ) | } | > |
  74. * |-----------------------------------------------------------------------|
  75. * | |NextT|PrevT| | | | Esc | |Mute |Vol- |Vol+ | P/P |
  76. * `-----------------------------------------------------------------------'
  77. */
  78. [2] = KEYMAP_GRID(
  79. F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12,
  80. TRNS, FN18, FN19, FN20, FN21, FN22, FN23, FN24, FN25, MINS, FN26, PAST,
  81. TRNS, FN27, QUOT, FN28, GRV, FN29, COMM, DOT, RBRC, FN13, FN14, FN15,
  82. TRNS, MNXT, MPRV, TRNS, TRNS, TRNS, ESC, TRNS, MUTE, VOLD, VOLU, MPLY ),
  83. };
  84. enum macro_id {
  85. M_P0,
  86. M_P1,
  87. M_P2,
  88. M_P3,
  89. M_P4,
  90. M_P5,
  91. M_USERNAME
  92. };
  93. const uint16_t PROGMEM fn_actions[] = {
  94. [0] = ACTION_LAYER_MOMENTARY(1), // left/lower layer
  95. [1] = ACTION_LAYER_MOMENTARY(2), // right/raise layer
  96. // Program macros
  97. [2] = ACTION_MACRO(M_P0),
  98. [3] = ACTION_MACRO(M_P1),
  99. [4] = ACTION_MACRO(M_P2),
  100. [5] = ACTION_MACRO(M_P3),
  101. [6] = ACTION_MACRO(M_P4),
  102. [7] = ACTION_MACRO(M_P5),
  103. [8] = ACTION_MACRO(M_USERNAME),
  104. // Braces
  105. [10] = ACTION_MODS_KEY(MOD_LSFT, KC_9), // (
  106. [11] = ACTION_MODS_KEY(MOD_LSFT, KC_LBRC), // {
  107. [12] = ACTION_MODS_KEY(MOD_LSFT, KC_COMMA), // <
  108. [13] = ACTION_MODS_KEY(MOD_LSFT, KC_0), // )
  109. [14] = ACTION_MODS_KEY(MOD_LSFT, KC_RBRC), // {
  110. [15] = ACTION_MODS_KEY(MOD_LSFT, KC_DOT), // >
  111. // Combo
  112. [16] = ACTION_MODS_KEY(MOD_LALT | MOD_LCTL, KC_DEL), // Ctrl+Alt+Delete
  113. [17] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_ESC), // Ctrl+Shft+Escape
  114. // Symbols
  115. [18] = ACTION_MODS_KEY(MOD_LSFT, KC_1), // !
  116. [19] = ACTION_MODS_KEY(MOD_LSFT, KC_2), // @
  117. [20] = ACTION_MODS_KEY(MOD_LSFT, KC_3), // #
  118. [21] = ACTION_MODS_KEY(MOD_LSFT, KC_4), // $
  119. [22] = ACTION_MODS_KEY(MOD_LSFT, KC_5), // %
  120. [23] = ACTION_MODS_KEY(MOD_LSFT, KC_6), // ^
  121. [24] = ACTION_MODS_KEY(MOD_LSFT, KC_7), // &
  122. [25] = ACTION_MODS_KEY(MOD_LSFT, KC_8), // *
  123. [26] = ACTION_MODS_KEY(MOD_LSFT, KC_EQL), // +
  124. [27] = ACTION_MODS_KEY(MOD_LSFT, KC_MINUS), // _
  125. [28] = ACTION_MODS_KEY(MOD_LSFT, KC_QUOTE), // "
  126. [29] = ACTION_MODS_KEY(MOD_LSFT, KC_GRAVE), // ~
  127. // Debugging
  128. [30] = ACTION_MODS_KEY(MOD_LSFT, KC_F11), // Step into
  129. [31] = ACTION_MODS_KEY(MOD_LSFT | MOD_LCTL, KC_F10), // Set cursor to line
  130. };
  131. // Run a script and pass a key number to it. This is Windows specific and the script needs to be on your path.
  132. // *open run dialog* keypress.py [PRG_NUM]
  133. #define ADD_PYTHON_PROGRAM_ON_WIN( PRG_NUM ) MACRO( D(LGUI), T(R), U(LGUI), W(100), T(K), T(E), T(Y), T(P), T(R), T(E), T(S), T(S), T(DOT), T(P), T(Y), T(SPC), T(PRG_NUM), END )
  134. // *return*
  135. #define RUN_PYTHON_PROGRAM_ON_WIN MACRO( T(ENT), END )
  136. const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
  137. {
  138. keyevent_t event = record->event;
  139. switch (id) {
  140. case M_P0:
  141. return event.pressed ?
  142. ADD_PYTHON_PROGRAM_ON_WIN( 0 ) :
  143. RUN_PYTHON_PROGRAM_ON_WIN;
  144. case M_P1:
  145. return event.pressed ?
  146. ADD_PYTHON_PROGRAM_ON_WIN( 1 ) :
  147. RUN_PYTHON_PROGRAM_ON_WIN;
  148. case M_P2:
  149. return event.pressed ?
  150. ADD_PYTHON_PROGRAM_ON_WIN( 2 ) :
  151. RUN_PYTHON_PROGRAM_ON_WIN;
  152. case M_P3:
  153. return event.pressed ?
  154. ADD_PYTHON_PROGRAM_ON_WIN( 3 ) :
  155. RUN_PYTHON_PROGRAM_ON_WIN;
  156. case M_P4:
  157. return event.pressed ?
  158. ADD_PYTHON_PROGRAM_ON_WIN( 4 ) :
  159. RUN_PYTHON_PROGRAM_ON_WIN;
  160. case M_P5:
  161. return event.pressed ?
  162. ADD_PYTHON_PROGRAM_ON_WIN( 5 ) :
  163. RUN_PYTHON_PROGRAM_ON_WIN;
  164. case M_USERNAME:
  165. return event.pressed ?
  166. MACRO( T(N), T(A), T(T), T(H), T(A), T(N), T(R), T(O), T(S), T(S), T(P), T(O), T(W), T(E), T(L), T(L), END ) :
  167. MACRO_NONE;
  168. }
  169. return MACRO_NONE;
  170. }