qmk_firmware

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

keymap.c (3542B)


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