qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

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 }