Commit | Line | Data |
---|---|---|
5fca9ff4 JC |
1 | // This is the personal keymap of Jeremy Cowgar (@jcowgar). It is written for the programmer. |
2 | ||
3 | // Configuration options | |
5fca9ff4 | 4 | |
26eef35f | 5 | #include QMK_KEYBOARD_H |
5fca9ff4 JC |
6 | |
7 | // Each layer gets a name for readability, which is then used in the keymap matrix below. | |
8 | enum my_layers { | |
9 | ALPH = 0, | |
10 | NUMS, | |
11 | CURS, | |
12 | SYMB, | |
13 | FKEY | |
14 | }; | |
15 | ||
16 | // Each macro gets a name for readability. | |
17 | enum my_keycodes { | |
18 | MY_ABVE = SAFE_RANGE, | |
19 | MY_BELW, | |
20 | MY_TERM, | |
21 | MY_DEQL, // /= | |
22 | MY_MEQL, // *= | |
23 | MY_SEQL, // -= | |
24 | MY_PEQL, // += | |
25 | MY_NEQL, // != | |
26 | MY_LTGT, // <> | |
27 | MY_DPIP, // || | |
28 | MY_DAMP, // && | |
29 | }; | |
30 | ||
31 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |
26eef35f JY |
32 | [ALPH] = LAYOUT_planck_grid( |
33 | KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, | |
34 | KC_A, KC_S, KC_D, KC_F, KC_G, KC_LPRN, KC_RPRN, KC_H, KC_J, KC_K, KC_L, KC_SCLN, | |
35 | SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_LCBR, KC_RCBR, KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH), | |
36 | CTL_T(KC_TAB), OSL(FKEY), OSL(NUMS), OSL(SYMB), KC_SPC, ALT_T(KC_BSPC), GUI_T(KC_DEL), KC_ENT, OSL(SYMB), OSL(CURS), TG(CURS), CTL_T(KC_ESC) | |
37 | ), | |
38 | [NUMS] = LAYOUT_planck_grid( | |
39 | KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_COMM, KC_7, KC_8, KC_9, KC_SLSH, | |
40 | KC_LSFT, KC_LGUI, KC_LALT, KC_LCTL, KC_NO, KC_TRNS, KC_TRNS, KC_LPRN, KC_4, KC_5, KC_6, KC_ASTR, | |
41 | KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_RPRN, KC_1, KC_2, KC_3, KC_MINS, | |
42 | KC_NO, KC_NO, KC_TRNS, TG(NUMS), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_DOT, KC_EQL, KC_PLUS | |
43 | ), | |
44 | [CURS] = LAYOUT_planck_grid( | |
45 | KC_MPLY, KC_BSPC, KC_UP, KC_DEL, KC_PGUP, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, | |
46 | KC_VOLU, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KC_TRNS, KC_NO, KC_LCTL, KC_LALT, KC_LGUI, KC_LSFT, | |
47 | KC_VOLD, KC_NO, MY_ABVE, MY_TERM, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_LSFT, | |
48 | KC_MUTE, KC_NO, MY_BELW, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_NO | |
49 | ), | |
50 | [SYMB] = LAYOUT_planck_grid( | |
51 | MY_DEQL, MY_MEQL, MY_SEQL, MY_PEQL, MY_NEQL, KC_NO, KC_NO, MY_LTGT, KC_LABK, KC_RABK, KC_COLN, KC_DLR, | |
52 | KC_SLSH, KC_ASTR, KC_MINS, KC_PLUS, KC_EQL, KC_NO, KC_PIPE, MY_DPIP, KC_GRV, KC_QUOT, KC_DQUO, KC_HASH, | |
53 | KC_BSLS, KC_CIRC, KC_PERC, KC_UNDS, KC_NO, KC_NO, KC_AMPR, MY_DAMP, KC_TILD, KC_AT, KC_EXLM, KC_QUES, | |
54 | KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO | |
55 | ), | |
56 | [FKEY] = LAYOUT_planck_grid( | |
57 | KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, | |
58 | KC_LSFT, KC_LGUI, KC_LALT, KC_LCTL, KC_NO, KC_NO, KC_NO, KC_NO, KC_F5, KC_F6, KC_F7, KC_F8, | |
59 | KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, | |
60 | KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO | |
61 | ) | |
5fca9ff4 JC |
62 | }; |
63 | ||
64 | void press_key(uint16_t key) { | |
65 | register_code(key); | |
66 | unregister_code(key); | |
67 | } | |
68 | ||
69 | void press_two_keys(uint16_t key1, uint16_t key2) { | |
70 | register_code(key1); | |
71 | register_code(key2); | |
72 | unregister_code(key2); | |
73 | unregister_code(key1); | |
74 | } | |
75 | ||
76 | void press_three_keys(uint16_t key1, uint16_t key2, uint16_t key3) { | |
77 | register_code(key1); | |
78 | register_code(key2); | |
79 | register_code(key3); | |
80 | unregister_code(key3); | |
81 | unregister_code(key2); | |
82 | unregister_code(key1); | |
83 | } | |
84 | ||
85 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |
86 | switch (keycode) { | |
87 | case MY_BELW: | |
88 | if (record->event.pressed) { | |
89 | press_two_keys(KC_LGUI, KC_RGHT); | |
90 | press_key(KC_ENT); | |
91 | } | |
92 | ||
93 | return false; | |
94 | ||
95 | case MY_ABVE: | |
96 | if (record->event.pressed) { | |
97 | press_two_keys(KC_LGUI, KC_LEFT); | |
98 | press_key(KC_ENT); | |
99 | press_key(KC_UP); | |
100 | } | |
101 | ||
102 | return false; | |
103 | ||
104 | case MY_TERM: | |
105 | if (record->event.pressed) { | |
106 | press_three_keys(KC_LGUI, KC_LSFT, KC_ENT); | |
107 | } | |
108 | ||
109 | return false; | |
110 | ||
111 | case MY_DEQL: // /= | |
112 | if (record->event.pressed) { | |
113 | press_key(KC_SLSH); | |
114 | press_key(KC_EQL); | |
115 | } | |
116 | ||
117 | return false; | |
118 | ||
119 | case MY_MEQL: // *= | |
120 | if (record->event.pressed) { | |
121 | press_two_keys(KC_LSFT, KC_ASTR); | |
122 | press_key(KC_EQL); | |
123 | } | |
124 | ||
125 | return false; | |
126 | ||
127 | case MY_SEQL: // -= | |
128 | if (record->event.pressed) { | |
129 | press_key(KC_MINS); | |
130 | press_key(KC_EQL); | |
131 | } | |
132 | ||
133 | return false; | |
134 | ||
135 | case MY_PEQL: // += | |
136 | if (record->event.pressed) { | |
137 | press_two_keys(KC_LSFT, KC_PLUS); | |
138 | press_key(KC_EQL); | |
139 | } | |
140 | ||
141 | return false; | |
142 | ||
143 | case MY_NEQL: // != | |
144 | if (record->event.pressed) { | |
145 | press_two_keys(KC_LSFT, KC_EXLM); | |
146 | press_key(KC_EQL); | |
147 | } | |
148 | ||
149 | return false; | |
150 | ||
151 | case MY_LTGT: // <> | |
152 | if (record->event.pressed) { | |
153 | press_two_keys(KC_LSFT, KC_LABK); | |
154 | press_two_keys(KC_LSFT, KC_RABK); | |
155 | } | |
156 | ||
157 | return false; | |
158 | ||
159 | case MY_DPIP: // || | |
160 | if (record->event.pressed) { | |
161 | press_two_keys(KC_LSFT, KC_PIPE); | |
162 | press_two_keys(KC_LSFT, KC_PIPE); | |
163 | } | |
164 | ||
165 | return false; | |
166 | ||
167 | case MY_DAMP: // && | |
168 | if (record->event.pressed) { | |
169 | press_two_keys(KC_LSFT, KC_AMPR); | |
170 | press_two_keys(KC_LSFT, KC_AMPR); | |
171 | } | |
172 | ||
173 | return false; | |
174 | } | |
175 | ||
176 | return true; | |
177 | } |