keymap.c (9547B)
1 /* Copyright 2020 obuwunkunubi 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 QMK_KEYBOARD_H 17 18 // Defines for shortcut macros 19 #define KC_CAD LALT(LCTL(KC_DEL)) // CTRL + ALT + DEL 20 #define KC_CPY LCTL(KC_C) // Copy 21 #define KC_PST LCTL(KC_V) // Paste 22 #define KC_AF4 LALT(KC_F4) // ALT + F4 23 24 enum custom_keycodes { 25 SELWN = SAFE_RANGE, 26 SELWP, 27 EM1, 28 EM2, 29 EM3, 30 EM4, 31 EM5, 32 EM6, 33 EM7, 34 EM8, 35 EM9, 36 MAKE1, 37 MAKE2, 38 MAIL1, 39 MAIL2, 40 OBUWUN, 41 DIR 42 }; 43 44 enum layer_names { 45 BASE, 46 ONE, 47 TWO 48 }; 49 50 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 51 52 /* Keymap BASE: Base Layer 53 * 54 * ,---. ,---. 55 * |NUM| |PLY| 56 * `---' `---' 57 * ,---------------. 58 * |CAL| UP|PRE|NXT| 59 * |---------------| 60 * | = | / | * | - | 61 * |---------------| 62 * | 7 | 8 | 9 | | 63 * |------------ + | 64 * | 4 | 5 | 6 | | 65 * |---------------| 66 * | 1 | 2 | 3 | | 67 * |------------ENT| 68 * | 0 | . | | 69 * `---------------' 70 */ 71 [BASE] = LAYOUT( 72 KC_NUM, KC_MPLY, 73 KC_CALC, TO(ONE), KC_MPRV, KC_MNXT, 74 KC_EQL, KC_PSLS, KC_PAST, KC_MINS, 75 KC_P7, KC_P8, KC_P9, 76 KC_P4, KC_P5, KC_P6, KC_PPLS, 77 KC_P1, KC_P2, KC_P3, 78 KC_P0, KC_PDOT, KC_PENT 79 ), 80 81 /* Keymap ONE: Util Layer 82 * 83 * ,---. ,---. 84 * |RST| |CAD| 85 * `---' `---' 86 * ,---------------. 87 * |BAS|TWO|MK1|MK2| 88 * |---------------| 89 * |DIR|@1 |@2 |OBU| 90 * |---------------| 91 * |SWP|AF4|SWN| | 92 * |------------PSC| 93 * |CPY| U |PST| | 94 * |---------------| 95 * | L | D | R | | 96 * |------------ NO| 97 * | NO | NO| | 98 * `---------------' 99 */ 100 [ONE] = LAYOUT( 101 QK_BOOT, KC_CAD, 102 TO(BASE), TO(TWO), MAKE1, MAKE2, 103 DIR, MAIL1, MAIL2, OBUWUN, 104 SELWP, KC_AF4, SELWN, 105 KC_CPY, KC_UP, KC_PST, KC_PSCR, 106 KC_LEFT, KC_DOWN, KC_RGHT, 107 KC_P0, KC_PDOT, KC_PENT 108 ), 109 110 /* Keymap TWO: Emoji Layer 111 * 112 * ,---. ,---. 113 * | NO| | NO| 114 * `---' `---' 115 * ,---------------. 116 * |ONE|BAS| [ | ] | 117 * |---------------| 118 * |F13|F14|F15|F16| 119 * |---------------| 120 * |EM7|EM8|EM9| | 121 * |------------ NO| 122 * |EM4|EM5|EM6| | 123 * |---------------| 124 * |EM1|EM2|EM3| | 125 * |------------ NO| 126 * | NO | NO| | 127 * `---------------' 128 */ 129 [TWO] = LAYOUT( 130 KC_NO, KC_NO, 131 TO(ONE), TO(BASE), KC_LBRC, KC_RBRC, 132 KC_F13, KC_F14, KC_F15, KC_F16, 133 EM7, EM8, EM9, 134 EM4, EM5, EM6, KC_NO, 135 EM1, EM2, EM3, 136 KC_NO, KC_NO, KC_NO 137 ), 138 139 }; 140 141 142 bool process_record_user(uint16_t keycode, keyrecord_t *record) { 143 switch (keycode) { 144 145 case SELWN: // select and copy next word 146 if (record->event.pressed) { 147 // when keycode SELWN is pressed 148 149 tap_code16(C(S(KC_RGHT))); 150 tap_code16(KC_CPY); 151 return false; break; 152 153 } else { 154 // when keycode SELWN is released 155 } 156 break; 157 158 case SELWP: // select and copy previous word 159 if (record->event.pressed) { 160 // when keycode SELWP is pressed 161 162 tap_code16(C(S(KC_LEFT))); 163 tap_code16(KC_CPY); 164 return false; break; 165 166 } else { 167 // when keycode SELWP is released 168 } 169 break; 170 171 case MAKE1: 172 if (record->event.pressed) { 173 // when keycode MAKE1 is pressed 174 175 send_string("make handwired/obuwunkunubi/spaget:default:avrdude"); 176 177 } else { 178 // when keycode MAKE1 is released 179 } 180 break; 181 182 case MAKE2: 183 if (record->event.pressed) { 184 // when keycode MAKE2 is pressed 185 186 send_string("make preonic/rev3:obuwunkunubi:dfu-util"); 187 188 } else { 189 // when keycode MAKE2 is released 190 } 191 break; 192 193 case DIR: 194 if (record->event.pressed) { 195 // when keycode DIR is pressed 196 197 send_string("cd /d/Keyboards/qmk/qmk_firmware/"); 198 199 } else { 200 // when keycode DIR is released 201 } 202 break; 203 204 case OBUWUN: 205 if (record->event.pressed) { 206 // when keycode OBUWUN is pressed 207 208 send_string("obuwunkunubi"); 209 210 } else { 211 // when keycode OBUWUN is released 212 } 213 break; 214 215 case MAIL1: 216 if (record->event.pressed) { 217 // when keycode MAIL1 is pressed 218 219 send_string("marko.bakan7"); 220 221 } else { 222 // when keycode MAIL1 is released 223 } 224 break; 225 226 case MAIL2: 227 if (record->event.pressed) { 228 // when keycode MAIL2 is pressed 229 230 send_string("bakan.marko7"); 231 232 } else { 233 // when keycode MAIL2 is released 234 } 235 break; 236 237 case EM1: 238 if (record->event.pressed) { 239 // when keycode EM1 is pressed 240 241 send_unicode_string("ʕ•ᴥ•ʔ"); 242 243 } else { 244 // when keycode EM1 is released 245 } 246 break; 247 248 case EM2: 249 if (record->event.pressed) { 250 // when keycode EM2 is pressed 251 252 send_unicode_string("༼ つ ◕_◕ ༽つ"); 253 254 } else { 255 // when keycode EM2 is released 256 } 257 break; 258 259 case EM3: 260 if (record->event.pressed) { 261 // when keycode EM3 is pressed 262 263 send_unicode_string("( ⌐■_■)"); 264 265 } else { 266 // when keycode EM3 is released 267 } 268 break; 269 270 case EM4: 271 if (record->event.pressed) { 272 // when keycode EM4 is pressed 273 274 send_unicode_string("(╯°□°)╯彡 ┻━┻"); 275 276 } else { 277 // when keycode EM4 is released 278 } 279 break; 280 281 case EM5: 282 if (record->event.pressed) { 283 // when keycode EM5 is pressed 284 285 send_unicode_string("ಠ_ಠ"); 286 287 } else { 288 // when keycode EM5 is released 289 } 290 break; 291 292 case EM6: 293 if (record->event.pressed) { 294 // when keycode EM6 is pressed 295 296 send_unicode_string("( ͡° ͜ʖ ͡°)"); 297 298 } else { 299 // when keycode EM6 is released 300 } 301 break; 302 303 case EM7: 304 if (record->event.pressed) { 305 // when keycode EM7 is pressed 306 307 send_unicode_string("(☞゚ヮ゚)☞"); 308 309 } else { 310 // when keycode EM7 is released 311 } 312 break; 313 314 case EM8: 315 if (record->event.pressed) { 316 // when keycode EM8 is pressed 317 318 send_unicode_string("(^‿^)"); 319 320 } else { 321 // when keycode EM8 is released 322 } 323 break; 324 325 case EM9: 326 if (record->event.pressed) { 327 // when keycode EM9 is pressed 328 329 send_unicode_string("¯\\_(ツ)_/¯"); 330 331 } else { 332 // when keycode EM9 is released 333 } 334 break; 335 336 } 337 return true; 338 }; 339 340 // Unicode input mode set to Windows using WinCompose 341 void matrix_init_user(void) { 342 set_unicode_input_mode(UNICODE_MODE_WINCOMPOSE); 343 }; 344 #ifdef OLED_ENABLE 345 bool oled_task_user(void) { 346 oled_write_P(PSTR(" spaget v1\n\n"), false); 347 348 // Host Keyboard Layer Status 349 oled_write_P(PSTR("Layer: "), false); 350 351 switch (get_highest_layer(layer_state)) { 352 case BASE: 353 oled_write_P(PSTR("Base\n"), false); 354 break; 355 case ONE: 356 oled_write_P(PSTR("Util\n"), false); 357 break; 358 case TWO: 359 oled_write_P(PSTR("Emoji\n"), false); 360 break; 361 default: 362 oled_write_ln_P(PSTR("Undefined"), false); 363 } 364 365 // Host Keyboard LED Status 366 led_t led_state = host_keyboard_led_state(); 367 oled_write_P(PSTR("Lock: "), false); 368 oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false); 369 oled_write_P(led_state.caps_lock ? PSTR("CAPS ") : PSTR(" "), false); 370 oled_write_P(led_state.scroll_lock ? PSTR("SCROLL ") : PSTR(" "), false); 371 return false; 372 } 373 #endif 374 375 bool encoder_update_user(uint8_t index, bool clockwise) { 376 if(IS_LAYER_ON(BASE)) { 377 if (index == 0) { /* First encoder */ 378 if (clockwise) { 379 tap_code(KC_PGDN); 380 } else { 381 tap_code(KC_PGUP); 382 } 383 } else if (index == 1) { /* Second encoder */ 384 if (clockwise) { 385 tap_code(KC_VOLU); 386 } else { 387 tap_code(KC_VOLD); 388 } 389 } 390 } 391 else if(IS_LAYER_ON(ONE)) { 392 if (index == 0) { /* First encoder */ 393 if (clockwise) { 394 tap_code(MS_WHLR); 395 } else { 396 tap_code(MS_WHLL); 397 } 398 } else if (index == 1) { /* Second encoder */ 399 if (clockwise) { 400 tap_code(MS_WHLD); 401 } else { 402 tap_code(MS_WHLU); 403 } 404 } 405 } 406 else if(IS_LAYER_ON(TWO)) { 407 if (index == 0) { /* First encoder */ 408 if (clockwise) { 409 tap_code(KC_DEL); 410 } else { 411 tap_code(KC_BSPC); 412 } 413 } else if (index == 1) { /* Second encoder */ 414 if (clockwise) { 415 tap_code(KC_DOWN); 416 } else { 417 tap_code(KC_UP); 418 } 419 } 420 } 421 else { 422 if (index == 0) { /* First encoder */ 423 if (clockwise) { 424 tap_code(KC_PGDN); 425 } else { 426 tap_code(KC_PGUP); 427 } 428 } else if (index == 1) { /* Second encoder */ 429 if (clockwise) { 430 tap_code(KC_VOLU); 431 } else { 432 tap_code(KC_VOLD); 433 } 434 } 435 } 436 return true; 437 }