From 374924047aef11c6643671728127d41a92b3274b Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Tue, 1 Feb 2022 17:54:36 -0800 Subject: [PATCH 01/54] Initial commits using @Jonavin firmware as baseline Commits on Feb 1, 2022 * Expanded RGB definitions of LED_LIST_NUMPAD to include most active numpad layer keys * Reverted color.h back to QMK default * Moved RGB custom color defs to gourdo1.h * Numpad enter added to bottom right corner keys Commits on Jan 31, 2022 * Simplified numpad layer; mapped regular numbers as numpad versions Commits on Jan 27, 2022 * Invader = Home; Fn+11,F12,Invader = Print,Scroll,Pause * Del key moved to right of Backspace Commits on Jan 24, 2022 * CTRL & SHIFT-Space work like Space * Make Ctrl-Space act like Space; RGB Hue step more granular Commits on Jan 23, 2022 * Created GMMK Pro Cheatsheet.pdf * Moved Pause to Fn + P * moved DEL to func row & added INS as SHIFT-DEL Commits on Jan 22, 2022 * My latest firmware as of 01-22-2022 Commits on Jan 21, 2022 * VIA disabled; RGB gaming mode + gordotest keymap Commits on Jan 19, 2022 * Enabled LTO + some cosmetics Commits on Jan 18, 2022 * More rgb tweaks and fixes; default RGB timeout increase * Many RGB Tweaks & customizations; FN layer RGB tweaks * Added RGB test definitions Commits on Jan 12, 2022 * Merge branch 'Jonavin:master' into master Commits on Jan 11, 2022 * RGB tweaks * Attempt to fix left shift sticking after capslock triggered * Moved dance_LSFT_finished to first arg * Removed tap dance test Commits on Jan 10, 2022 * Fix tap dance declaration location * Testing Escape TapDance idea Commits on Jan 5, 2022 * Various tweaks * Sorted dueling config.h files * Update config.h again * Test longer tapping_term in config.h Commits on Jan 4, 2022 * Added solartempest's keymap for reference * fixed more references * Added gourdo1 folder and fixed references * Fixed include reference * Reverted changes to jonavin keymap.c * Folder cleanup * Create tmp * Delete gourdo1 * Create gourdo1 * Added Solartemp * Update keymap.c --- .../gmmk/pro/ansi/keymaps/gourdo1/config.h | 46 +++ .../gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 335 ++++++++++++++++++ .../pro/ansi/keymaps/gourdo1/rgb_matrix_map.h | 150 ++++++++ .../gmmk/pro/ansi/keymaps/gourdo1/rules.mk | 16 + users/gourdo1/gourdo1.c | 329 +++++++++++++++++ users/gourdo1/gourdo1.h | 158 +++++++++ users/gourdo1/gourdo1_encoder.c | 220 ++++++++++++ users/gourdo1/rules.mk | 29 ++ 8 files changed, 1283 insertions(+) create mode 100644 keyboards/gmmk/pro/ansi/keymaps/gourdo1/config.h create mode 100644 keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c create mode 100644 keyboards/gmmk/pro/ansi/keymaps/gourdo1/rgb_matrix_map.h create mode 100644 keyboards/gmmk/pro/ansi/keymaps/gourdo1/rules.mk create mode 100644 users/gourdo1/gourdo1.c create mode 100644 users/gourdo1/gourdo1.h create mode 100644 users/gourdo1/gourdo1_encoder.c create mode 100644 users/gourdo1/rules.mk diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/config.h b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/config.h new file mode 100644 index 000000000000..d5caf4a683a5 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/config.h @@ -0,0 +1,46 @@ +/* Copyright 2021 Jonavin Eng + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#define TAPPING_TOGGLE 2 +// TT set to two taps + +/* Handle GRAVESC combo keys */ +#define GRAVE_ESC_ALT_OVERRIDE + //Always send Escape if Alt is pressed +#define GRAVE_ESC_CTRL_OVERRIDE + //Always send Escape if Control is pressed + +// #define TAPPING_TERM 180 +#define TAPPING_TERM 300 +#define TAPPING_TERM_PER_KEY + +#ifdef RGB_MATRIX_ENABLE + #define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR + #define RGB_DISABLE_WHEN_USB_SUSPENDED +#endif + +// RGB step values +#define RGBLIGHT_HUE_STEP 32 // The number of steps to cycle through the hue by (default 10) +#define RGBLIGHT_SAT_STEP 17 // The number of steps to increment the saturation by (default 17) +#define RGBLIGHT_VAL_STEP 17 // The number of steps to increment the brightness by (default 17) + +// add fifth layer for colemak -- set "COLEMAK_LAYER_ENABLE = yes" in rules.mk to enable +#if defined COLEMAK_LAYER_ENABLE + #define DYNAMIC_KEYMAP_LAYER_COUNT 5 + #define _COLEMAK 4 +#endif // COLEMAK_LAYER_ENABLE diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c new file mode 100644 index 000000000000..7096109e349f --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c @@ -0,0 +1,335 @@ +/* Copyright 2021 Glorious, LLC + Copyright 2021 Jonavin + Copyright 2022 @gourdo1 + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +// Note: Several advanced functions referenced in this file (like Tap Dance functions) are defined in users/gourdo1/gourdo1.c + +#include QMK_KEYBOARD_H +#include "rgb_matrix_map.h" +#include "gourdo1.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* Base Layout + * + * ,-------------------------------------------------------------------------------------------------------------. + * | Esc || F1 | F2 | F3 | F4 || F5 | F6 | F7 | F8 || F9 | F10 | F11 | F12 || Home || Mute | + * |=============================================================================================================| + * | ` ~ | 1 ! | 2 @ | 3 # | 4 $ | 5 % | 6 ^ | 7 & | 8 * | 9 ( | 0 ) | - _ | = + | Backspc || Del | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ } | ] } | \ | || PgUp | + * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| + * | Capslock | A | S | D | F | G | H | J | K | L | ; : | ' " | Enter || PgDn | + * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| + * | LShift | Z | X | C | V | B | N | M | , < | . > | / ? | RShift || Up || End | + * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| + * | Ctrl | Win | LAlt | Space | RAlt | Fn | Ctrl || Left | Down | Rght | + * `------------------------------------------------------------------------------------------------------------' + */ + + [_BASE] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_MUTE, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, + TT(_LOWER), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, + KC_LSFTCAPSWIN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [_FN1] = LAYOUT( + _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_VOLD, KC_VOLU, KC_PSCR, KC_SLCK, KC_PAUS, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, + _______, _______, RGB_VAI, _______, _______, _______, _______, KC_PSCR, KC_SLCK, _______, KC_PAUS, _______, _______, RESET, KC_HOME, + KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, + _______, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, RGB_TOD, RGB_TOI, _______, _______, RGB_MOD, _______, + _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI + ), + +/* _LOWER (Numpad) Layout + * + * Note: A symbol preceeded by "P" is a Numpad-encoded version of the key -- any app that differentiates will recognize the char as coming from a physical numpad. + * + * ,-------------------------------------------------------------------------------------------------------------. + * | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ || ____ | + * |=============================================================================================================| + * | ____ | P1 | P2 | P3 | P4 | P5 | P6 | P7 | P8 | P9 | P0 | P- | P+ | ________ || ____ | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| + * | ______ | None | Up | None | None | None | None | P4 | P5 | P6 | P+ | ____ | ____ | _____ || ____ | + * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| + * | ________ | Left | Down | Rght | None| None | None | P1 | P2 | P3 | P* | ____ | P-Enter || ____ | + * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| + * | __________ | None | ____ | ____ | ____ | None | None | 0 | 00 | P. | P/ | ______ || ____ || ____ | + * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| + * | Ctrl | Win | LAlt | _____ | RAlt | Fn | Ctrl || ____ | ____ | ____ | + * `------------------------------------------------------------------------------------------------------------' + */ + + [_LOWER] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, KC_PMNS, KC_PPLS, _______, _______, + _______, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_P4, KC_P5, KC_P6, KC_PPLS, _______, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_P1, KC_P2, KC_P3, KC_PAST, _______, KC_PENT, _______, + _______, KC_NO, _______, _______, _______, KC_NO, KC_NO, KC_P0, KC_00, KC_PDOT, KC_PSLS, _______, _______, KC_PENT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PENT + ), + + [_RAISE] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + +#ifdef COLEMAK_LAYER_ENABLE + [_COLEMAK] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, + TT(_LOWER), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_PGDN, + KC_LSFTCAPSWIN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), +#endif // COLEMAK_LAYER_ENABLE +}; + +#if defined(ENCODER_ENABLE) && !defined(ENCODER_DEFAULTACTIONS_ENABLE) // Encoder Functionality when not using userspace defaults + void encoder_action_rgbhue(bool clockwise) { + if (clockwise) + rgblight_increase_hue_noeeprom(); + else + rgblight_decrease_hue_noeeprom(); + } + + bool encoder_update_user(uint8_t index, bool clockwise) { + uint8_t mods_state = get_mods(); + if (mods_state & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, encoder changes layers + encoder_action_layerchange(clockwise); + } else if (mods_state & MOD_BIT(KC_RSFT) ) { // If you are holding R shift, Page up/dn + unregister_mods(MOD_BIT(KC_RSFT)); + encoder_action_navpage(clockwise); + register_mods(MOD_BIT(KC_RSFT)); + } else if (mods_state & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next/prev word + encoder_action_navword(clockwise); + } else if (mods_state & MOD_BIT(KC_RCTL)) { // if holding Right Ctrl, change rgb hue/colour + encoder_action_rgbhue(clockwise); + } else if (mods_state & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next/prev track + encoder_action_mediatrack(clockwise); + } else { + switch(get_highest_layer(layer_state)) { + case _FN1: + #ifdef IDLE_TIMEOUT_ENABLE + timeout_update_threshold(clockwise); + #endif + break; + default: + encoder_action_volume(clockwise); // Otherwise it just changes volume + break; + } + } + return true; + } +#endif // ENCODER_ENABLE && !ENCODER_DEFAULTACTIONS_ENABLE + +#ifdef RGB_MATRIX_ENABLE + // Capslock, Scroll lock and Numlock indicator on Left side lights. + void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + if (get_rgb_nightmode()) rgb_matrix_set_color_all(RGB_OFF); + +// Scroll Lock RGB setup + if (IS_HOST_LED_ON(USB_LED_SCROLL_LOCK)) { + rgb_matrix_set_color(LED_L3, RGB_RED); + rgb_matrix_set_color(LED_L4, RGB_RED); + rgb_matrix_set_color(LED_TAB, RGB_RED); + } + +// System NumLock warning indicator RGB setup + #ifdef INVERT_NUMLOCK_INDICATOR + if (!IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // on if NUM lock is OFF to bring attention to overlay numpad not functional when enabled + rgb_matrix_set_color(LED_GRV, RGB_ORANGE2); + rgb_matrix_set_color(LED_L1, RGB_ORANGE2); + rgb_matrix_set_color(LED_L2, RGB_ORANGE2); + rgb_matrix_set_color(LED_N, RGB_ORANGE2); + rgb_matrix_set_color(LED_FN, RGB_ORANGE2); + } + #else + if (IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // Normal, on if NUM lock is ON + rgb_matrix_set_color(LED_GRV, RGB_ORANGE2); + rgb_matrix_set_color(LED_L1, RGB_ORANGE2); + rgb_matrix_set_color(LED_L2, RGB_ORANGE2); + rgb_matrix_set_color(LED_N, RGB_ORANGE2); + rgb_matrix_set_color(LED_FN, RGB_ORANGE2); + } + #endif // INVERT_NUMLOCK_INDICATOR + +// CapsLock RGB setup + if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) { + for (uint8_t i=0; i= 140 minutes, just show these 3 lights + rgb_matrix_set_color(LED_LIST_NUMROW[10], RGB_CYAN); + rgb_matrix_set_color(LED_LIST_NUMROW[11], RGB_CYAN); + rgb_matrix_set_color(LED_LIST_NUMROW[12], RGB_CYAN); + } + break; + +// Numpad overlay RGB + case _LOWER: + for (uint8_t i=0; i. + */ + +#ifdef RGB_MATRIX_ENABLE + + // Custom RGB Colours + #define RGB_GODSPEED 0x00, 0xE4, 0xFF // colour for matching keycaps + #define RGB_NAUTILUS 0x00, 0xA4, 0xA9 // Nautilus Font colours + + // RGB LED locations + enum led_location_map { + LED_ESC, // 0, ESC, k13 + LED_GRV, // 1, ~, k16 + LED_TAB, // 2, Tab, k11 + LED_CAPS, // 3, Caps, k21 + LED_LSFT, // 4, Sh_L, k00 + LED_LCTL, // 5, Ct_L, k06 + LED_F1, // 6, F1, k26 + LED_1, // 7, 1, k17 + LED_Q, // 8, Q, k10 + LED_A, // 9, A, k12 + LED_Z, // 10, Z, k14 + LED_LWIN, // 11, Win_L, k90 + LED_F2, // 12, F2, k36 + LED_2, // 13, 2, k27 + LED_W, // 14, W, k20 + LED_S, // 15, S, k22 + LED_X, // 16, X, k24 + LED_LALT, // 17, Alt_L, k93 + LED_F3, // 18, F3, k31 + LED_3, // 19, 3, k37 + LED_E, // 20, E, k30 + LED_D, // 21, D, k32 + LED_C, // 22, C, k34 + LED_F4, // 23, F4, k33 + LED_4, // 24, 4, k47 + LED_R, // 25, R, k40 + LED_F, // 26, F, k42 + LED_V, // 27, V, k44 + LED_F5, // 28, F5, k07 + LED_5, // 29, 5, k46 + LED_T, // 30, T, k41 + LED_G, // 31, G, k43 + LED_B, // 32, B, k45 + LED_SPC, // 33, SPACE, k94 + LED_F6, // 34, F6, k63 + LED_6, // 35, 6, k56 + LED_Y, // 36, Y, k51 + LED_H, // 37, H, k53 + LED_N, // 38, N, k55 + LED_F7, // 39, F7, k71 + LED_7, // 40, 7, k57 + LED_U, // 41, U, k50 + LED_J, // 42, J, k52 + LED_M, // 43, M, k54 + LED_F8, // 44, F8, k76 + LED_8, // 45, 8, k67 + LED_I, // 46, I, k60 + LED_K, // 47, K, k62 + LED_COMM, // 48, ,, k64 + LED_RALT, // 49, Alt_R, k95 + LED_F9, // 50, F9, ka6 + LED_9, // 51, 9, k77 + LED_O, // 52, O, k70 + LED_L, // 53, L, k72 + LED_DOT, // 54, ., k74 + LED_FN, // 55, FN, k92 + LED_F10, // 56, F10, ka7 + LED_0, // 57, 0, k87 + LED_P, // 58, P, k80 + LED_SCLN, // 59, ;, k82 + LED_SLSH, // 60, ?, k85 + LED_F11, // 61, F11, ka3 + LED_MINS, // 62, -, k86 + LED_LBRC, // 63, [, k81 + LED_QUOT, // 64, ", k83 + LED_RCTL, // 65, Ct_R, k04 + LED_F12, // 66, F12, ka5 + LED_L1, // 67, LED, l01 + LED_R1, // 68, LED, l11 + LED_INS, // 69, Prt, k97 -- remapped to INS + LED_L2, // 70, LED, l02 + LED_R2, // 71, LED, l12 + LED_DEL, // 72, Del, k65 + LED_L3, // 73, LED, l03 + LED_R3, // 74, LED, l13 + LED_PGUP, // 75, PgUp, k15 + LED_L4, // 76, LED, l04 + LED_R4, // 77, LED, l14 + LED_EQL, // 78, =, k66 + LED_RIGHT, // 79, Right, k05 + LED_L5, // 80, LED, l05 + LED_R5, // 81, LED, l15 + LED_END, // 82, End, k75 + LED_L6, // 83, LED, l06 + LED_R6, // 84, LED, l16 + LED_BSPC, // 85, BSpc, ka1 + LED_PGDN, // 86, PgDn, k25 + LED_L7, // 87, LED, l07 + LED_R7, // 88, LED, l17 + LED_RBRC, // 89, ], k61 + LED_RSFT, // 90, Sh_R, k91 + LED_L8, // 91, LED, l08 + LED_R8, // 92, LED, l18 + LED_BSLS, // 93, \, ka2 + LED_UP, // 94, Up, k35 + LED_LEFT, // 95, Left, k03 + LED_ENT, // 96, Enter, ka4 + LED_DOWN // 97, Down, k73 + }; + + const uint8_t LED_LIST_WASD[] = { LED_W, LED_A, LED_S, LED_D }; + + const uint8_t LED_LIST_ARROWS[] = { LED_LEFT, LED_RIGHT, LED_UP, LED_DOWN }; + + const uint8_t LED_LIST_FUNCROW[] = { LED_ESC, LED_F1, LED_F2, LED_F3, LED_F4, LED_F5, LED_F6, LED_F7, LED_F8, LED_F9, LED_F10, LED_F11, LED_F12, LED_INS}; + + const uint8_t LED_LIST_NUMROW[] = { LED_GRV, LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, LED_0, LED_MINS, LED_EQL, LED_BSPC, LED_DEL}; + + const uint8_t LED_LIST_LETTERS[] = { LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, LED_0, + LED_Q, LED_W, LED_E, LED_R, LED_T, LED_Y, LED_U, LED_I, LED_O, LED_P, + LED_A, LED_S, LED_D, LED_F, LED_G, LED_H, LED_J, LED_K, LED_L, + LED_Z, LED_X, LED_C, LED_V, LED_B, LED_N, LED_M}; + + const uint8_t LED_LIST_NUMPAD[] = { + LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, LED_0, LED_MINS, LED_EQL, + LED_U, LED_I, LED_O, LED_P, + LED_J, LED_K, LED_L, LED_SCLN, LED_ENT, + LED_M, LED_COMM, LED_DOT, LED_SLSH, LED_END, + LED_RIGHT + }; + + const uint8_t LED_SIDE_LEFT[] = { LED_L1, LED_L2, LED_L3, LED_L4, LED_L5, LED_L6, LED_L7, LED_L8}; + + const uint8_t LED_SIDE_RIGHT[] = { LED_R1, LED_R2, LED_R3, LED_R4, LED_R5, LED_R6, LED_R7, LED_R8}; + +#endif diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rules.mk b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rules.mk new file mode 100644 index 000000000000..99791f505a30 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rules.mk @@ -0,0 +1,16 @@ +LTO_ENABLE = yes # link time optimization -- achieves a smaller compiled size +CONSOLE_ENABLE = no +COMMAND_ENABLE = no +MOUSEKEY_ENABLE = no + +VIA_ENABLE = no +TAP_DANCE_ENABLE = yes +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite + +TD_LSFT_CAPSLOCK_ENABLE = yes +IDLE_TIMEOUT_ENABLE = yes +STARTUP_NUMLOCK_ON = yes +ENCODER_DEFAULTACTIONS_ENABLE = no + +COLEMAK_LAYER_ENABLE = yes # Enable Colemak layer / set to no to disable +INVERT_NUMLOCK_INDICATOR = yes diff --git a/users/gourdo1/gourdo1.c b/users/gourdo1/gourdo1.c new file mode 100644 index 000000000000..e40cacefddb2 --- /dev/null +++ b/users/gourdo1/gourdo1.c @@ -0,0 +1,329 @@ + +/* Copyright 2021 Jonavin Eng @Jonavin + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + + +#include QMK_KEYBOARD_H +#include "gourdo1.h" + + +#ifdef TD_LSFT_CAPSLOCK_ENABLE + // Tap once for shift, twice for Caps Lock but only if Win Key in not disabled + void dance_LSFT_each_tap(qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1 || keymap_config.no_gui) { + register_code16(KC_LSFT); + } else { + register_code(KC_CAPS); + } + } + + void dance_LSFT_reset(qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1 || keymap_config.no_gui) { + unregister_code16(KC_LSFT); + } else { + unregister_code(KC_CAPS); + unregister_code16(KC_LSFT); + } + } + // Tap Dance definitions + qk_tap_dance_action_t tap_dance_actions[] = { + // Tap once for shift, twice for Caps Lock + [TD_LSFT_CAPSLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS), + [TD_LSFT_CAPS_WIN] = ACTION_TAP_DANCE_FN_ADVANCED(dance_LSFT_each_tap, NULL, dance_LSFT_reset), + }; +#endif // TD_LSFT_CAPSLOCK_ENABLE + +// RGB NIGHT MODE +#ifdef RGB_MATRIX_ENABLE + static bool rgb_nightmode = false; + + // Turn on/off NUM LOCK if current state is different + void activate_rgb_nightmode (bool turn_on) { + if (rgb_nightmode != turn_on) { + rgb_nightmode = !rgb_nightmode; + } + } + + bool get_rgb_nightmode(void) { + return rgb_nightmode; + } +#endif // RGB_MATRIX_ENABLE + +// TIMEOUTS +#ifdef IDLE_TIMEOUT_ENABLE + static uint16_t timeout_timer = 0; + static uint16_t timeout_counter = 0; //in minute intervals + static uint16_t timeout_threshold = TIMEOUT_THRESHOLD_DEFAULT; + + uint16_t get_timeout_threshold(void) { + return timeout_threshold; + } + + void timeout_reset_timer(void) { + timeout_timer = timer_read(); + timeout_counter = 0; + }; + + void timeout_update_threshold(bool increase) { + if (increase && timeout_threshold < TIMEOUT_THRESHOLD_MAX) timeout_threshold++; + if (!increase && timeout_threshold > 0) timeout_threshold--; + }; + + void timeout_tick_timer(void) { + if (timeout_threshold > 0) { + if (timer_elapsed(timeout_timer) >= 60000) { // 1 minute tick + timeout_counter++; + timeout_timer = timer_read(); + } + #ifdef RGB_MATRIX_ENABLE + if (timeout_threshold > 0 && timeout_counter >= timeout_threshold) { + rgb_matrix_disable_noeeprom(); + } + #endif + } // timeout_threshold = 0 will disable timeout + } + +#endif // IDLE_TIMEOUT_ENABLE + +#if defined(ALTTAB_SCROLL_ENABLE) || defined(IDLE_TIMEOUT_ENABLE) // timer features + __attribute__((weak)) void matrix_scan_keymap(void) {} + + void matrix_scan_user(void) { + #ifdef ALTTAB_SCROLL_ENABLE + encoder_tick_alttabscroll(); + #endif + #ifdef IDLE_TIMEOUT_ENABLE + timeout_tick_timer(); + #endif + matrix_scan_keymap(); + } +#endif // ALTTAB_SCROLL_ENABLE or IDLE_TIMEOUT_ENABLE + +// Initialize variable holding the binary representation of active modifiers. +uint8_t mod_state; + +// ============================================= PROCESS KEY CODES ============================================= + +__attribute__ ((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; } + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + mod_state = get_mods(); + if (!process_record_keymap(keycode, record)) { return false; } + switch (keycode) { + +// Double Zero + case KC_00: + if (record->event.pressed) { + // when keycode KC_00 is pressed + SEND_STRING("00"); + } else unregister_code16(keycode); + break; + +// Windows key lock + case KC_WINLCK: + if (record->event.pressed) { + keymap_config.no_gui = !keymap_config.no_gui; //toggle status + } else unregister_code16(keycode); + break; + +// Treat Control+Space as if regular Space + case KC_SPC: + { + // Initialize a boolean variable that keeps track of the space key status: registered or not? + static bool spckey_registered; + if (record->event.pressed) { + // Detect the activation of either ctrl keys + if (mod_state & MOD_MASK_CTRL) { + // First temporarily canceling both ctrls so that + // ctrl isn't applied to the KC_SPC keycode + del_mods(MOD_MASK_CTRL); + register_code(KC_SPC); + // Update the boolean variable to reflect the status of KC_SPC + spckey_registered = true; + // Reapplying modifier state so that the held ctrl key(s) + // still work even after having tapped the Space key. + set_mods(mod_state); + return false; + } + } else { // on release of KC_SPC + // In case KC_SPC is still being sent even after the release of KC_SPC + if (spckey_registered) { + unregister_code(KC_SPC); + spckey_registered = false; + return false; + } + } + } + +// Treat Shift+Space as if regular Space + case KC_SHIFTSPC: + { + // Initialize a boolean variable that keeps track of the space key status: registered or not? + static bool spc2key_registered; + if (record->event.pressed) { + // Detect the activation of either shift keys + if (mod_state & MOD_MASK_SHIFT) { + // First temporarily canceling both shifts so that + // shift isn't applied to the KC_SPC keycode + del_mods(MOD_MASK_SHIFT); + register_code(KC_SPC); + // Update the boolean variable to reflect the status of KC_SPC + spc2key_registered = true; + // Reapplying modifier state so that the held shift key(s) + // still work even after having tapped the Space key. + set_mods(mod_state); + return false; + } + } else { // on release of KC_SPC + // In case KC_SPC is still being sent even after the release of KC_SPC + if (spc2key_registered) { + unregister_code(KC_SPC); + spc2key_registered = false; + return false; + } + } + } + +// Add INS as SHIFT-modified DEL key + case KC_DEL: + { + // Initialize a boolean variable that keeps track of the delete key status: registered or not? + static bool inskey_registered; + if (record->event.pressed) { + // Detect the activation of either shift keys + if (mod_state & MOD_MASK_SHIFT) { + // First temporarily canceling both shifts so that + // shift isn't applied to the KC_INS keycode + del_mods(MOD_MASK_SHIFT); + register_code(KC_INS); + // Update the boolean variable to reflect the status of KC_INS + inskey_registered = true; + // Reapplying modifier state so that the held shift key(s) + // still work even after having tapped the Delete/Insert key. + set_mods(mod_state); + return false; + } + } else { // on release of KC_DEL + // In case KC_INS is still being sent even after the release of KC_DEL + if (inskey_registered) { + unregister_code(KC_INS); + inskey_registered = false; + return false; + } + } + } +#ifdef IDLE_TIMEOUT_ENABLE + case RGB_TOI: + if(record->event.pressed) { + timeout_update_threshold(true); + } else unregister_code16(keycode); + break; + case RGB_TOD: + if(record->event.pressed) { + timeout_update_threshold(false); //decrease timeout + } else unregister_code16(keycode); + break; +#endif // IDLE_TIMEOUT_ENABLE +#ifdef RGB_MATRIX_ENABLE + case RGB_NITE: + if(record->event.pressed) { + rgb_nightmode = !rgb_nightmode; + } else unregister_code16(keycode); + break; +#endif // RGB_MATRIX_ENABLE + +#ifdef EMOTICON_ENABLE + case EMO_SHRUG: + if (record->event.pressed) SEND_STRING("`\\_(\"/)_/`"); + else unregister_code16(keycode); + break; + case EMO_CONFUSE: + if (record->event.pressed) SEND_STRING("(*_*)"); + else unregister_code16(keycode); + break; + case EMO_TEARS: + if (record->event.pressed) SEND_STRING("(T_T)"); + else unregister_code16(keycode); + break; + case EMO_NERVOUS: + if (record->event.pressed) SEND_STRING("(~_~;)"); + else unregister_code16(keycode); + break; + case EMO_JOY: + if (record->event.pressed) SEND_STRING("(^o^)"); + else unregister_code16(keycode); + break; + case EMO_SAD: + if (record->event.pressed) SEND_STRING(":'-("); + else unregister_code16(keycode); + break; + #endif // EMOTICON_ENABLE + + #ifdef ALTTAB_SCROLL_ENABLE + case KC_TSTOG: + if (record->event.pressed) encoder_toggle_alttabscroll(); + else unregister_code16(keycode); + break; + #endif // ALTTAB_SCROLL_ENABLE + + default: + if (record->event.pressed) { + #ifdef RGB_MATRIX_ENABLE + rgb_matrix_enable(); + #endif + #ifdef IDLE_TIMEOUT_ENABLE + timeout_reset_timer(); //reset activity timer + #endif + } + break; + } + return true; +}; + + +uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_SFTUP: + return 300; + case KC_RAISESPC: + case KC_LOWERSPC: + return 450; + default: + return TAPPING_TERM; + } +} + +// Turn on/off NUM LOCK if current state is different +void activate_numlock(bool turn_on) { + if (IS_HOST_LED_ON(USB_LED_NUM_LOCK) != turn_on) { + tap_code(KC_NUMLOCK); + } +} + + +// INITIAL STARTUP + +__attribute__ ((weak)) void keyboard_post_init_keymap(void) {} + +void keyboard_post_init_user(void) { + keyboard_post_init_keymap(); + #ifdef STARTUP_NUMLOCK_ON + activate_numlock(true); // turn on Num lock by default so that the numpad layer always has predictable results + #endif // STARTUP_NUMLOC_ON + #ifdef IDLE_TIMEOUT_ENABLE + timeout_timer = timer_read(); // set inital time for ide timeout + #endif +} diff --git a/users/gourdo1/gourdo1.h b/users/gourdo1/gourdo1.h new file mode 100644 index 000000000000..c976436b3fb1 --- /dev/null +++ b/users/gourdo1/gourdo1.h @@ -0,0 +1,158 @@ + +/* Copyright 2021 Jonavin Eng @Jonavin + Copyright 2022 @gourdo1 + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#pragma once + +// DEFINE MACROS +#define ARRAYSIZE(arr) sizeof(arr)/sizeof(arr[0]) + + +// LAYERS +enum custom_user_layers { + _BASE, + _FN1, + _LOWER, + _RAISE, +}; + +// KEYCODES +enum custom_user_keycodes { + KC_00 = SAFE_RANGE, + ENCFUNC, + KC_WINLCK, //Toggles Win key on and off + RGB_TOI, // Timeout idle time up + RGB_TOD, // Timeout idle time down + RGB_NITE, // Turns off all rgb but allow rgb indicators to work + + EMO_SHRUG, // `\_("/)_/` + EMO_CONFUSE, // (*_*) + EMO_SAD, // :'-( + EMO_NERVOUS, // (~_~;) + EMO_JOY, // (^o^) + EMO_TEARS, // (T_T) + + KC_TSTOG, // Tab Scroll Toggle + + NEW_SAFE_RANGE // new safe range for keymap level custom keycodes +}; + +#define KC_CAD LALT(LCTL(KC_DEL)) +#define KC_AF4 LALT(KC_F4) +#define KC_TASK LCTL(LSFT(KC_ESC)) +#define CT_PGUP RCTL(KC_PGUP) +#define CT_PGDN RCTL(KC_PGDN) +#define CT_HOME RCTL(KC_HOME) +#define CT_END RCTL(KC_END) +#define KC_SFTUP RSFT_T(KC_UP) // Shift when held, Up arrow when tapped +#define KC_RAISESPC LT(_RAISE,KC_SPC) // _RAISE layer mod when held, space when tapped +#define KC_LOWERSPC LT(_LOWER,KC_SPC) // _LOWER layer mod when held, space when tapped +#define KC_SHIFTSPC LSFT(KC_SPC) + + +#ifdef TD_LSFT_CAPSLOCK_ENABLE + // Tap Dance Definitions + enum custom_tapdance { + TD_LSFT_CAPSLOCK, + TD_LSFT_CAPS_WIN + }; + + #define KC_LSFTCAPS TD(TD_LSFT_CAPSLOCK) + #define KC_LSFTCAPSWIN TD(TD_LSFT_CAPS_WIN) +#else // regular Shift + #define KC_LSFTCAPS KC_LSFT +#endif // TD_LSFT_CAPSLOCK_ENABLE + + +// ENCODER ACTIONS +#ifdef ENCODER_ENABLE + void encoder_action_volume(bool clockwise); + void encoder_action_mediatrack(bool clockwise); + void encoder_action_navword(bool clockwise); + void encoder_action_navpage(bool clockwise); + + uint8_t get_selected_layer(void); + void encoder_action_layerchange(bool clockwise); + + #if defined(RGB_MATRIX_ENABLE) || defined(RGBLIGHT_ENABLE) + void encoder_action_rgb_speed(bool clockwise); + void encoder_action_rgb_hue(bool clockwise); + void encoder_action_rgb_saturation(bool clockwise); + void encoder_action_rgb_brightness(bool clockwise); + void encoder_action_rgb_mode(bool clockwise); + #endif // RGB_MATRIX_ENABLE / RGBLIGHT_ENABLE + + #ifdef ALTTAB_SCROLL_ENABLE + void encoder_action_alttabscroll(bool clockwise); + void encoder_toggle_alttabscroll(void); + void encoder_tick_alttabscroll(void); + #endif // ALTTAB_SCROLL_ENABLE +#endif // ENCODER_ENABLE + + +#ifdef RGB_MATRIX_ENABLE +//RGB custom colours + #define RGB_GODSPEED 0x00, 0xE4, 0xFF // color for matching keycaps + #define RGB_NAUTILUS 0x00, 0xA4, 0xA9 // Nautilus Font colors + + void activate_rgb_nightmode (bool turn_on); + bool get_rgb_nightmode(void); +#endif + + +// IDLE TIMEOUTS +#ifdef IDLE_TIMEOUT_ENABLE + #define TIMEOUT_THRESHOLD_DEFAULT 15 // default timeout minutes + #define TIMEOUT_THRESHOLD_MAX 140 // upper limits (2 hours and 10 minutes -- no rgb indicators above this value) + + //prototype functions + uint16_t get_timeout_threshold(void); + void timeout_reset_timer(void); + void timeout_update_threshold(bool increase); + void timeout_tick_timer(void); +#endif //IDLE_TIMEOUT_ENABLE + + +// OTHER FUNCTION PROTOTYPE +void activate_numlock(bool turn_on); + + +/* + * GMMK Pro-specific RGB color customizations (defaults found in quantum/color.h) + */ +#define RGB_ORANGE2 0xFF, 0x28, 0x00 //fix: reduced green from 80 to 28 +#define RGB_PURPLE2 0x80, 0x00, 0xFF //fix: increased red from 7A to 80 +#define RGB_SPRINGGREEN2 0x00, 0xFF, 0x10 //fix: blue was 80, now 10 +#define RGB_YELLOW2 0xFF, 0xB0, 0x00 //fix: green was FF, now B0 +#define RGB_OFFBLUE 0x00, 0x80, 0xFF //new color: blue with a hint of green +#define RGB_DKRED 0x28, 0x00, 0x00 //new color: dark red +#define RGB_OFF RGB_BLACK + +// Added by gourdo1 (for _RAISE layer RGB testing) +// Red Green Blue Expected GMMK Pro result +#define RGB_TEST1 0xFF, 0x00, 0x00 //Q - red good! +#define RGB_TEST2 0x0F, 0xFF, 0x00 //W - green good! +#define RGB_TEST3 0x00, 0x00, 0xFF //E - blue good! +#define RGB_TEST4 0xFF, 0xB0, 0x00 //R - yellow slightly green heavy - reduced green LED by quite a bit +#define RGB_TEST5 0x00, 0xFF, 0xFF //T - cyan good! +#define RGB_TEST6 0xFF, 0x00, 0xFF //Y - magenta very slightly blue heavy? +#define RGB_TEST7 0xFF, 0x28, 0x00 //U - orange very green heavy at default +#define RGB_TEST8 0xFF, 0x00, 0x80 //I - pink good! +#define RGB_TEST9 0x80, 0xFF, 0x00 //O - chartreus good! +#define RGB_TEST10 0x00, 0xFF, 0x10 //P - springgrn fixed: was too blue because green LED has blue in it already +#define RGB_TEST11 0x00, 0x80, 0xFF //A - grn blue good! +#define RGB_TEST12 0x80, 0x00, 0xFF //S - purple good! \ No newline at end of file diff --git a/users/gourdo1/gourdo1_encoder.c b/users/gourdo1/gourdo1_encoder.c new file mode 100644 index 000000000000..a582e2db9673 --- /dev/null +++ b/users/gourdo1/gourdo1_encoder.c @@ -0,0 +1,220 @@ + +/* Copyright 2021 Jonavin Eng @Jonavin + Copyright 2022 @gourdo1 + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + + +#include QMK_KEYBOARD_H +#include "gourdo1.h" + +#ifdef ENCODER_ENABLE + #ifndef DYNAMIC_KEYMAP_LAYER_COUNT + #define DYNAMIC_KEYMAP_LAYER_COUNT 4 //default in case this is not already defined elsewhere + #endif + #ifndef ENCODER_DEFAULTACTIONS_INDEX + #define ENCODER_DEFAULTACTIONS_INDEX 0 // can select encoder index if there are multiple encoders + #endif + + void encoder_action_volume(bool clockwise) { + if (clockwise) + tap_code(KC_VOLU); + else + tap_code(KC_VOLD); + } + + void encoder_action_mediatrack(bool clockwise) { + if (clockwise) + tap_code(KC_MEDIA_NEXT_TRACK); + else + tap_code(KC_MEDIA_PREV_TRACK); + } + + void encoder_action_navword(bool clockwise) { + if (clockwise) + tap_code16(LCTL(KC_RGHT)); + else + tap_code16(LCTL(KC_LEFT)); + } + + void encoder_action_navpage(bool clockwise) { + if (clockwise) + tap_code16(KC_PGUP); + else + tap_code16(KC_PGDN); + } + + // LAYER HANDLING + uint8_t selected_layer = 0; + + uint8_t get_selected_layer(void) { + return selected_layer; + } + + void encoder_action_layerchange(bool clockwise) { + if (clockwise) { + if(selected_layer < (DYNAMIC_KEYMAP_LAYER_COUNT - 1)) { + selected_layer ++; + layer_move(selected_layer); + } + } else { + if (selected_layer > 0) { + selected_layer --; + layer_move(selected_layer); + } + } + } + + #ifdef RGB_MATRIX_ENABLE + void encoder_action_rgb_speed(bool clockwise) { + if (clockwise) + rgb_matrix_increase_speed_noeeprom(); + else + rgb_matrix_decrease_speed_noeeprom(); + } + void encoder_action_rgb_hue(bool clockwise) { + if (clockwise) + rgb_matrix_increase_hue_noeeprom(); + else + rgb_matrix_decrease_hue_noeeprom(); + } + void encoder_action_rgb_saturation(bool clockwise) { + if (clockwise) + rgb_matrix_increase_sat_noeeprom(); + else + rgb_matrix_decrease_sat_noeeprom(); + } + void encoder_action_rgb_brightness(bool clockwise) { + if (clockwise) + rgb_matrix_increase_val_noeeprom(); + else + rgb_matrix_decrease_val_noeeprom(); + } + void encoder_action_rgb_mode(bool clockwise) { + if (clockwise) + rgb_matrix_step_noeeprom(); + else + rgb_matrix_step_reverse_noeeprom(); + } + #elif defined(RGBLIGHT_ENABLE) + void encoder_action_rgb_speed(bool clockwise) { + if (clockwise) + rgblight_increase_speed_noeeprom(); + else + rgblight_decrease_speed_noeeprom(); + } + void encoder_action_rgb_hue(bool clockwise) { + if (clockwise) + rgblight_increase_hue_noeeprom(); + else + rgblight_decrease_hue_noeeprom(); + } + void encoder_action_rgb_saturation(bool clockwise) { + if (clockwise) + rgblight_increase_sat_noeeprom(); + else + rgblight_decrease_sat_noeeprom(); + } + void encoder_action_rgb_brightness(bool clockwise) { + if (clockwise) + rgblight_increase_val_noeeprom(); + else + rgblight_decrease_val_noeeprom(); + } + void encoder_action_rgb_mode(bool clockwise) { + if (clockwise) + rgblight_step_noeeprom(); + else + rgblight_step_reverse_noeeprom(); + } + #endif // RGB_MATRIX_ENABLE || RGBLIGHT_ENABLE + + #ifdef ALTTAB_SCROLL_ENABLE + bool is_tab_scrolling = false; + bool is_alt_tab_active = false; + uint16_t alt_tab_timer = 0; + + + void encoder_toggle_alttabscroll(void) { + is_tab_scrolling = !is_tab_scrolling; + } + + void encoder_action_alttabscroll(bool clockwise) { + if (clockwise) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_mods(MOD_RALT); + } + tap_code16(KC_TAB); + } + else { + tap_code16(S(KC_TAB)); + } + alt_tab_timer = timer_read(); + } + + void encoder_tick_alttabscroll(void) { + if (is_alt_tab_active) { + if (timer_elapsed(alt_tab_timer) > 600) { + unregister_mods(MOD_RALT); + is_alt_tab_active = false; + } + } + } + #endif // ALTTAB_SCROLL_ENABLE +#endif // ENCODER_ENABLE + +#if defined(ENCODER_ENABLE) && defined(ENCODER_DEFAULTACTIONS_ENABLE) // Encoder Functionality + + __attribute__((weak)) bool encoder_update_keymap(uint8_t index, bool clockwise) { return true; } + + bool encoder_update_user(uint8_t index, bool clockwise) { + if (!encoder_update_keymap(index, clockwise)) { return false; } + if (index != ENCODER_DEFAULTACTIONS_INDEX) {return true;} // exit if the index doesn't match + uint8_t mods_state = get_mods(); + if (mods_state & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, encoder changes layers + encoder_action_layerchange(clockwise); + } else if (mods_state & MOD_BIT(KC_RSFT) ) { // If you are holding R shift, Page up/dn + unregister_mods(MOD_BIT(KC_RSFT)); + encoder_action_navpage(clockwise); + register_mods(MOD_BIT(KC_RSFT)); + } else if (mods_state & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next/prev word + encoder_action_navword(clockwise); + } else if (mods_state & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next/prev track + encoder_action_mediatrack(clockwise); + } else { + switch(get_highest_layer(layer_state)) { + case _FN1: + #ifdef IDLE_TIMEOUT_ENABLE + timeout_update_threshold(clockwise); + #endif + break; + default: + #ifdef ALTTAB_SCROLL_ENABLE + if (is_tab_scrolling) + encoder_action_alttabscroll(clockwise); + else + encoder_action_volume(clockwise); // Otherwise it just changes volume + #else + encoder_action_volume(clockwise); // Otherwise it just changes volume + #endif // ALTTAB_SCROLL_ENABLE + break; + } + } + return false; + } +#endif // ENCODER_ENABLE + + diff --git a/users/gourdo1/rules.mk b/users/gourdo1/rules.mk new file mode 100644 index 000000000000..e02f9e8e08b7 --- /dev/null +++ b/users/gourdo1/rules.mk @@ -0,0 +1,29 @@ +SRC += gourdo1.c +ifdef ENCODER_ENABLE + # include encoder related code when enabled + ifeq ($(strip $(ENCODER_DEFAULTACTIONS_ENABLE)), yes) + OPT_DEFS += -DENCODER_DEFAULTACTIONS_ENABLE + endif + ifeq ($(strip $(ALTTAB_SCROLL_ENABLE)), yes) + OPT_DEFS += -DALTTAB_SCROLL_ENABLE + endif + SRC += gourdo1_encoder.c +endif +ifeq ($(strip $(TD_LSFT_CAPSLOCK_ENABLE)), yes) + OPT_DEFS += -DTD_LSFT_CAPSLOCK_ENABLE +endif +ifeq ($(strip $(IDLE_TIMEOUT_ENABLE)), yes) + OPT_DEFS += -DIDLE_TIMEOUT_ENABLE +endif +ifeq ($(strip $(STARTUP_NUMLOCK_ON)), yes) + OPT_DEFS += -DSTARTUP_NUMLOCK_ON +endif +ifeq ($(strip $(COLEMAK_LAYER_ENABLE)), yes) + OPT_DEFS += -DCOLEMAK_LAYER_ENABLE +endif +ifeq ($(strip $(EMOTICON_ENABLE)), yes) + OPT_DEFS += -DEMOTICON_ENABLE +endif +ifeq ($(strip $(INVERT_NUMLOCK_INDICATOR)), yes) + OPT_DEFS += -DINVERT_NUMLOCK_INDICATOR +endif From 470ba9def43fab5ac69cef27ef255855d31ac5c0 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Tue, 1 Feb 2022 17:59:22 -0800 Subject: [PATCH 02/54] Added latest firmware binary and cheatsheet PDF --- GMMK Pro Cheatsheet.pdf | Bin 0 -> 98898 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 GMMK Pro Cheatsheet.pdf diff --git a/GMMK Pro Cheatsheet.pdf b/GMMK Pro Cheatsheet.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9a7c5502a11d45e30d0151bf4766a61183e195f1 GIT binary patch literal 98898 zcmb@tWmp_hwk`|=4-O%C8h3Yh2=4CExVvi;+=5HcUi}3^t@Hr@ZuffVzuAFv0ef=!M>5JlXM0yC zuwQVf;vO!NDlSGYK(H*S!VX}6MFdM60FGA)9KM9ToeTJ+1T%p1&p8Pez(0azRCKa8 zQ31N>FoJ8!s0#FOVU)537fs~vM)dDS>NP%a5lk(OMC?6uz!*#bPHq+e2Q!Nv0GyAV z3pg@o0NWpMNhf<(2e7w4jrg;}sKTh~WMt>;@S1^%C!?qeqZrW5(gdh1DFVh-H8OSv ztNd-r-z=R0O#fbxSKxmZM8eX>1?a>mVFONB3}|9+3S^W8+L^mp05~|A*k7%jU7UbM zw#bMcnRQ=m6P7q)0ydr}^Tpo1OCqf}#PpzN|F- z*o4at!5~JA7Ga3QW=5TJ9##m*AdGXgyyAoPp@Ry4-@A?T28C}sr~Va0{GPh}J~xA^ z_JYeDv#R!|tB2`c#fc{eB?m1l&ux5iI3=Y4*6;=yRVQT0C5SCb1m59Y~!x|kB0lK zA5N#sTZ*r4OHs_(zT!2uUbsCgAK$-i^ZupJ*3$K|o$0H3!()dq*<@7L zemX&WkVE{pcwwCrf;pX6$^^x7X z1_dhVZIm1)%gO2dJOVC6RgCX$Q-)NjYPPms9Juv-GM75z_81{2hM&9Es zF+ATFu9$`#i86XOG4#CRT7+i@6`B3+aT%Vzb2@sgF1D=Sf4jGPfwA*`IK7?q&p{U) zCuO~IZE>6W;OFXn`+RYo(Q<$;8+<9Ja#(&atmxj1SJZ5~lR*SJFZB6OtJ?_RQXE%=hEG;RFWTIs_PFednwd+yGG`=F3S;%fYotXbcA+?l zM)^L|a9&1T*BTWsmQ>(lmdWecrUhSnNSkLt=`C!J$|Iylokw_YsS4hg*ezV=9v;aF zpj-xA4?casE6s7mu*6ADm4afe>rxS;7ZipNzNDz24Y3BxJ-e_5h48HnmPlk@mO{G%{5`UpRMYF|@l_d-P)qlOKxD&?5^EQrrEfB}7sg_363@|@H< zX225M9l|hzUBq4VMvSdI6>kmxQ3w*js4k>ERditRBvAJlPScpwprfh&$6?SFZQRMK zE_QQ}=k?}@^#kSO)hfXom946g54PcDr&WRqqju)syrYjh$(;m({GUQG9tOf7+00WLK0@k_L#D5BaizRRhBG zTaQ@(J_}%~Sey3faFUicc{+PJM^KH-&z5bWzK&=Hnu>x*kO*cD$mHhO996*)FPjF@ zR+;j`T(r`;?AXvj9&erTw%gAAW-&{D{%23~>Y1KKWwpNG) zg%%@VHGEE{{21QP2rq4XHr(Nng;V4r5?=<^pm=q_VYs7cJp?`c3sB5hBQH#r!Ry8lOT~9|j#iVlZIRmfoXBoZMt4+jq*6KmdkIMo z3xQ`Oxl1DTK;<9{5wUyrmhk$H+si&CsB%H>y?_4XvxK_~?-bAbwgK}7(^IUZ79s2i zBJnVRX*h3DA$qUAIt;Bo9lEtlS;&aVBw_RD8Y8@0SQ$l16(8dy;EeDIQ74Muj`O#9 zAzs=%tV>lK>@;_m!r@+;q0Zo?r(66Mz98Ne{^yp3Mej9K_r(_{Z(IM3=aZSVhc5>V zc6w|*B;9k=!Nz&fb~h(d`i_bkVe5h@Q=$lk8!fO_5NvVp@sMkl8jcl4tPO2p zwP9*J1|FUTS`x67z=L+V&YS{!Ro$!gByyK(oAF!R^nJQvG@P30wXc~}9G;$TGGD&W z8OvZJ4nztjm^MylSruvnhxzAAb~X-o%{hyXu`-w`FLN3i6=9rnfrG%-dRfqqb^CSg zmW7c^zr!M5q+gWYOm$3)6=9lW`1Xzz_!Nd|7pULqoX7Fpds>g_8KS!GGD;xN7g%tK zLs5SelmE1+Sq_k(g?d+`jFXOwpDF~j5^k+WlKipWv~V&5XJ>nctDg8_W9-y$L`dUP zJ&!4m-uFyVYp#zyM*~K2m}pdCc4S%@)Zu|U>RiwmATw%3jHM4`&Ss~v3wm^;}s{{)#fvLq3zYmILHShoKGYMY+;)ufDAy>+nl zP?J$}+w?On;diHwt}-7tQrb6!BHGC=JoBE+9b^j6*2rx~<(W8@7X)8H`%B2W#Uv@*@?e|QoAdeZb520nr*+#TViPS;fMMm@xqPI? zWotD&^3UC(TI{zb8;qM#)QXX4_HvNgG9`zSgek$kv$De{FF74x$6{99YPCVeR_XM~8d4Y=i6pLS41FEvc4Z(h@^Y+SGLS&f3CBzwi+iKAmk(sVa^M(wQvG0V;N z)e$}R*IkC11+%2>tEiQUvh9H_$5!^Z4EMi#%tQ&k_#i{MowfeQAU^>_(a+c!vu zpIZ=J{MrKq8QljvKCinQwuST|4ZD9h-r~e}sjz-*CEYhPv0roxxNV=>$&-cC zGb z7~)BF%A(St3`fUttw|C>23WL;wwipC|+5gT*BnmUtrzcfKxMAP(YwCqNEubWZBkb!$IB}$_RxTS4<0LT; z=+Jc%B$T*-!`K11FTbU>Hx}ODIf;LUi1#KMi$zN{%~!zVSTB8RBwM?Zm-$t$kf>{a zP|6GZOE`EA`}T9~&nZ$(Ah%S_ZLbQ8qb?yY&%{#1Nbfcqqgu}q0 zn0|hgU{CnvpK_wZg(f{==w2DUrf4MvDxDfG)N8h17oz%^BCCQ>=DOb=@+Oz8%nj}V z8zp~#^LQYg7)BZJ$pSq`Dlj3Of7jGF#SAwMYf6(-d=U+~JhZYIgW3XSu($M%R2&gs z?puH7c4YM6*ERa&IFUj?H_g!3fF<93cq6}$>-sl7b#GxJ7d_TM{xDxiLZSsM%W_?+ zNrIT?y@O$L;*j5Ktp2cZ_LDK;m;K&P zD!;xC6(^NDHifJSOv8$6;a0wjXTY{$vu}o!uc3)i$40Y3WICda6b@RQ`@x=2$`^Gt zV?2RUQ>B!c?l}FCkpWST9Nzq^#`~1Q#^`9jQd}VbjByw?Bpw=9+MKgIg_~t^JY??v z=UJ^ee6$n{O+5s(bjZZ;`M8bXXzZe@tn^H|3%Ri9Pl?lq4^hOpVy%5pX#1?>Z`HM6 z(Fsy!-EJOQGp&WX`qf(;+$$oKp<(S6KSc|uB(1ps=QKBMQh&B~LCx*4sv)RreL}vu zF*Y>$J`aKaI;Lf8&@g~A&LR1maq+)0Mh}!;RCgW!G)1JQ>!Al(d^Hus!o1lMn(YAEY`w&% zyq?SqXpoQ{MMn1x>chC|V#m?f68ms;lHc=mo^7XpIwclzBt}_#utc0jYm9A3p-Bfp ztm|szDvqYTU78&j)P;f8t@d7D3!3=3z7l}d?((T-qvVDchWEoPh<3Qz(Z^IC*Fg!S zfz1um;ypMygz3womvL(;XKcUlJ6bePd4n7zjW9Xfier^<+fyR_a{@(!I{qt^aKrjB zuw1#DlRaMp-(UhrL+-31TR;}Y{$iPaidTY{$2X0Y}wKO3(s*1W=V=vCf0-6>@f ztgp79o^Pszn%j3-_(lai4`3hv_}kPb?3q`EvOksVDZPzgZ>bFX48!#3xJ_Z!6bxsEDbg z=O*wK8DtObD$Fa3T;H5FR>u$}LLnw@e{JtxKI_{uRQkR@7@y%M)5!weqNyn2I$?t|rTBA4xCuWoV{EJm6pY4s&|l$1%|Z*3j#>>U-t7+5e1w@nFObDA_-r4vbAi4(6@{ck zlVQbk2kJb+j#8c^&GmFM&yX&<9c?uCyDZvKQ&^@saPTsJx4Q`KTc)cuYnU`HhqkrF z@%uTAd`$A>$yY{WUG%_VZug7-9Lxvh2LIM)w3o}#j?z!FNg2MAJ@DC5z3o41ni_D- zOc^5Z#&$Bx`7-cf1S--;+PbzyFKZjYGnEpPx-A#UzBS)+_HGUa{5QV zc1#16pf;YjF5HI8wxt7jUeyJ@w#Fv+Luv$q=fhUR!^F02f00-OyqxVAG@TNDv8p9p3(;HRcehx}xD(cCN>(=$O!(NMTO=cG zxsH-ie&2nX$+k6 z6Y`ix!?wiApskDu&Y%P z@XwVudd`PFCzh(+OxdFeI#R)ixqhAns^<3qqzrTSJ-=q_ex#>cF9cD%=yBOTHvt{o0mr6` zcr?%NZDoDPJ1Og%EV~I6nBB+VLw?^8RiqMno~V|5j@9&VK~I<9*IHHOWs&mmESMdK z|EpmkbkqOSyY)d5y~U4X(5;}e#uQ7law@i}tg*E@@Lh}IXH`uyZt8VM#?`4-X$#}^ z%)tC6YLu8qO;!gn#9lOdC^iDef0d(0$;4mlN@CR%ji9O-gMgi%N`;a{V<^5g8B$-V zw08Ur5EF_IN!s6b*^8C)CXAIrP3Ms%lkwkP*O zJ9lLgb))zNmS#2N9nXT*s{EBm?8phdiaKTW3$_CiPdY=2I>)zu8q*QhOcYHHOuO47yko&Jc4EKh*i+2s+}o+d#&8 zJcqT|eW8247z+2hJtNf<$k7^9;h(zX9=ybW+GZXZwlg;YI{V^F>!YwJ(utA1c*BJUlXACi^Mh|*>USn--Owj^tC$qU{-;o2F3S?CtYWq z3(sc=fu1`2iVL>(0|H^G@9D4&v#cECqGqwVQ6DlKR(S8|%Dt_sleg==U>4;T)P#|^ zu#pC-itu#bnui^0#|L#mC95DaM4c~?3ni=`}hCVxVVX5k`isRz?@j6~V2bL!V*_VsYizk#jwElkN8BYx?v%x)EQ& zSv;-&#I+w6x1hC;B(a;ERbNMfddr@r;Fyu|_T1K`;n1F6+4f5QHd;ruJj|?@#J&nt z;@}&lmYil4-9Q}Z6)Y|r^47GqepvO#>aM}>8u+6RTde&f636Uu?DuO&$+e>fe6%uZ z8OQhyF!m$cXi@-Oe{z>#Yc=p13g?g2$525#yW5T)|1B#C?12w1FxjHZ2j9|`1gM%%*pd#GpG3YBKI)|={U*tJoN8$#0sl{EP;GuPdamzv7Xd~ zz8?(GrEktLp=-xkfjo0D;l2q7KXmAb0ZG&pRSPVT#QvC2UdTq*_FS#)!KlUUvAc4e zy&Aqj^C!VCN=o96c7Wv{j9FGh)f~j*^17th#p;7* zRe@Sd+=g!GUyK7^V9CUppJTXs&JUa-bk-eZm5IepICA{FE}vc6 z7?XjI6f8`GKCJzW?JvXIRHu114`-8=lptz}4Y`c@KX6?3oI0n}IG?>h0Hjy9|1fv|WRLzy;=QtI|Ky(jP+I?@+ZaXU80GDq zY>jLfO^g7{|4vxF5^w)kBT?c1G|{wVVsB&0C~gO4#w_j388s~JgzcOy|F!>WAqI3dak6x9 zv3COeWiur#ot#}nEsUH1tSn%j^dB-a3p3c<)WzbJ-2B7s{dRT1U}xn3^Rym+cbGZ3nEyD{_=hGF6QkxotX?rxT!6OfV3R*OB7bO1dUj@Rz^el= z|I5Mp>K4pqz7`0~F#=h@N&jI||2^qf*7Uz6{lB${J? zT)lsF=O0Axe^JkWEdN`i|4V!RJ+%LyIs+a$|JE6{zg7Q7XW0Jd&anJPXP8+3*%>x4 z*Zki)^M}X&_s%f?`!fK-t}Yh#PE^wNPNqh701+D_Yap2O7X{P8;4x42`~o2dVF_UZ z;RIn1;S7G8LAXGaLjWK&z_JsBDOfW5BLV&gJpcqN1P28BKjAFx?Zm)DG?f?+3lj?q z6Eh1ZGZPaxI|n@z7bO!DC0I?)-t_;X0jA(hT}^=he+Bj*RrzlNR>9ax#l@CU9srK? z@4y1Eu(5D~#s7^~XXRk$e#QLfh0!DPOXgw(fh5MKQ)ItTui%m>zF_8~avL{hY!QsR z?xQ}|O2Wh~pPSe9a&NpaIQuxX|3fPwXq;MSKwqv#hD(FP%{Pc_jeiyD!ZO}f`TTDM& zDVwe=@IAEPyeZSDht|@~qFOy;UI|U)e0&cbM7?hC<7;zBm^a4#dtU8*osT8CZ}(17 z-a7b?x(+>HBYMR!gannF*J`{e?|IN>rAIDX^Qv7P7oWrP>bhp~4MjzKQd&$l@(J(@ z49T4?1Ia<(!`#R);tzj@KaaY#9MkD~D%te%pzWbzqi)*t@`J!&LCf603}8N zR1k_%s}PnW``0t6Pn$tGUzC4CX(y2fRyf;A%98*M?K_K_y52$-#PLp|Na?xNqAM~0 zB{v9u_i*f0V$i6h;f9bP&?SDPUCYC;gh8STSFcROC==@HOh_w9f|f+UvKFd9g{LfF>`{ki*(PBQH)a3!n96vItITjhLOZZj3>pxaZXK?!y2D>4L|i9Jt4ZApVfBI00_J`h z9G6bn1Y#n~ql*LNwh*l$ga~5zph(U;st$QNm?@2-1Sl093mBf+5cM2r@2~InRAOtP z#OE-}gw$@uXn%=~)k3*Wye$(F&uIsYYs!L?gC$XSLYN09XVW%`sA_Ur3$^_TF&{TY zJD)H*n>iQC3T0bDMv>kFMrBLcJf6=SS>j6UCLew>kZ*>dBlj#TyzR^JyIM+Kc4-q@ zn+l5h?n9b|l+K$4NcjV|)|C8DKUEM)>0DqdG;4VY;B%^d;#V;=>)B+wl^VkFS{X!C zpbpuNAL|KwAlnN@ehB%{((TGt5@AtMaiU|p2-}Fw>5J#WzX|x52PcA2D+^L-I6ZfIJk|n5 zK?J=4Pu+niq>u(m4HNz#5jW@+cl(f|y=mJs*O`Gy+Y9eL$VjWZ4dJQE4Wg0uZ3qcPLR+Vk=!YLTIgdb_Fkp#8Wu? zZ$r2UcHYQ_geI$06lM&Eedv}?G#=SS(?-#5W)!kLs zOVvsGF}RcW4p%d3Y)(Hn32uwVIl3={#<@(nf%){Xi+c*g1g^A8VFG31+!L-KMuT7l zUrSQNS+|cCrSE#}!^Q~P4`>cn`pa-h&DkcVv7c=smv?&nd16b10p#0rlRkVYXaHzH z`QuJT#`{*+RsEIL=HJgfEn~Mu8MFS+Zq1(84lln)dfY!KWZU`Oc`m-REw_3!i0j`S zHyHR|&pzmDHh^AUu&eBZ&A1xGE|b~pJf9R)cJ@G?CfBtS?Ao^9ruoZ!La;TNCL_Ey zWoi;aBSWwAP0Uy?#9v${X7i8!X^^cZqHR zb*wb(rtu|$U1L~mUD`(b(9^w77Mr2>g3U}zml^XDZIuUbM(@I0%#i6?KWa>M28;k^3+N$4cTjtB; z{t~94W1*Z9f^u&k2dEQV$y>BE3h$^H{CZ87^HYz@sr|l1eqh#WK>M!psQO;exY~}K zBU;OKfD(KRBO^v3vb1GuEbQp)_gVj5k!9eku0~{rt7}B|!G@&l41Yx0iIvJD+dnM( z6fVzA{z6>(i>H<9gpYiPdHO#fvMs91)i@6qumqR;6xg(Gsmz+cE1Xa2J&L`CP3_kl z3D)=%hWkL#ABiv)7iltS|;z#pGXfG?FGOkM;DTc$x81p@Q+pU`d15J>))jmMk|_b|~W{ zY{3ranvm)#J<({ea37Hmk1R5sh)bBaqZrIo*tnoh^$&`8iqgE&<%oH#1(QG9SObstjqK=~&%RaLW<@1;{qBL!0d|h-a`i1pdQ`EQD6l_O}cUZnH{3*%o5_8$Bq}QU) z@~__5%IHd{WrU9ya3K6s*XB9Vf6rOM^%ZX8wWueogRcTn$4QLk$lq!t{$~vHvPaL# z(tDSBCM`q7W~@~YLlD&pxa5C!9827o=H zAqO{0w%F=yRhMKWCau*-?Kp3fFl03U?56aphXamMIL=QU6aJEEqs|ap+AXrP&(;SI z3d)m9w+4jzsTQ{p_pb?`w3aLE#!nWK?^^6^IU+i)XjiapQ`DBt^6!R{Fm_8X+|ArG zqGj5+zdtU|FPm+GDeevd2nP85UjXS}E_Mfd>_nOG-*&QO)1_?L4=mf#Nci_D zPh=`b@-MbT_Z6%Ws6_fMwv6-@WpWfI7J5qZblbrpaMy`_(BFukc=iOFF4PB-% zxzPv&3Yaj=ldH|yvYGkMD_;<(MUE`BjPw_*WvWFYFSj5M`~gw9wVQM#=USa@lOEtJ zPKA3n;I_Apb6hb`?LWgeC#k+QByl;9Ud3G+flB)T`ia>Ue!5e6;qD3dkoZ&E0fpAT z$h}e_y%c7b`O4iJ?xFUlvP1j2cTx;cu?mSM#&@EJdBI>2>x24@7Iw+ASLN{TXu*AD zb!-+Ndgk3IH|c)QpnzXBc4p7uDiqNXDV0puZw80+hCsLnoI&lg1@`rL6+Elx03L}4 zYr$VuL;ivtPm@+YM?N@1qb4Kvbd6E-C(P4aJ5~LoY|HPzwy?O!>1vR<@_#hnbY)OA zUvME3@qgN{X%M*Dv&aXQKi8#XO${y@2&C_(44~w55nOk;%a5MQxrs$*WPMrnd3I^` zu1rDvl+^RXXcJ!ZQARLp>G}TI#miGbaH*BgpYO@zVUeRSQGaPgG;Gz*q-Cp$sgUUR z#qs6j2UNk#=cR6od+%CTcR#LWzFmXWHU!&WYnvy6UGY9*!Jhy zkr0RPL z*Dl4BMHgJzlp>e;k15VB%wq4UUCxDyHe4fgi^^T4wTir45!ERfTt$>9?_HqeDf?Zt zrHZ^=@Fa>PT^2nzc>bNQY<$qjo`@7ckXYE1uWu#*8#fn# zg`Eq)%ESR+;ot8-&f>UjKAm{U=(%^W&k@2H-H0-#0GxSpN;)h z<^;c)|9D^pZ`s+vo>*7`T%2qG@SQREsdKO$>uWsh;58&R&ew}_tjru>&A-Q4*#1Pv1&$LeaWRAOz}oDrf3=wa ztnBOnR&H(pD>#}zIAFh=Z0vs`24m;}{%a}d?=sdu*Mk1{`+RnA)SUl#mYx~F%mywp z+kf8oAANbNt2%viH!H9^jC2{a&d?2@wwIa zKCJ_PWc!XnA{s&%cA_HS4ay8!*@_CbAKa9E% z9a+&e2BuD9w5kHgqX4Dxr?4kPO&aM<5Ty_#WW*v?)82$EmO=0U3_Jw!NAj@GWQY^O zKdw#!dn139r9WgTnp6eAtTl?6DB7agU>oY|Q=BM4U!;koVtE*|9jWP_G!SDvr;z9& zeJ?;~I(Gpg(wClOzZb+$eIZA0=(G~YisJ9fJ`wXKHgag+YQ8mb`K^gx9L;rjWt+r5 zXa9SD2;rUfI;a~&fc=S{)x!vbw_^x5V9 zA`NZT>U((uinceST~Tcsy(gG{U%w`7{6Z=yvUNsJg}rKmDaWz#pHO6?UR2QYmV(M? zM6E5ls)Ln4{^5^m0=uY@eM-|PRvJ7wnN*T2TtEXslN6{Lx#HEh-#Y^ ztw3Eg@k+YGg;fl>uZ=NFNi?YUbu^!+SLU!R+ zG_YX966>Gu+dj=IaRHR4W701UuRRF~PCpxbpQYU}0EnEw(Nw4sgu*@-55p<_z|gG{ z$4C(3m5YQJC*J*5u~$DBXB~wJaUeH~zQFryCEVnDp*9zWnJ0v6Dy$1PCtSmJc!^4r zIg~~C+jRl9KyeTF>*trJw%=f4-52?2Q_u^`?>y4rQG{d(CHvWU-p9jLi0IU|Tk%KA zq`KyfcZ{eFq%hsisjKgAoZ(n3>~4qh;A>J{sNEcnEaQq`m}0pOb$dmVHk-5C^%v`S zA`mMG_002_Hx!p~ zNtI;2imzc1bm z;2Fu2a@*SPRN!$Vr+$5bSMs@gwmVHKKSByV}X6$@>BTC{>)r`HHOU2Ci;-n z-RNXH1=pJWL#I%b4L=30H0u!~wyuo1VjmJuf)ZB*K>J1Qkq>>0f6Bh`zT@t%`1}Cs zKpmXATY2w$n&xz`vBJ8|<32ui=ZWh-n`nENHUC05`G49x{xyHmGHQ4lCp`nV@xSo? zO@xj31vL*YHOdsrl<5@Bl+P4;`^Dqx)POFPP?;!UFb~RfjCM2+MjcXJT#>@+!o!;V z{^I}Q>;H%vTowcD(@p;?c(5d>DVE*;%iy!IpfQTd#w>vOxuL8-@D0|5!TGo-)K?K= zq|kUK1gkaK;!sPb588$ZHbIhx_(#U`Rr^(GRr6KiRiws|CNgwZkzLAWmQ{3hwL0Z8 zUcVc+l3uj2?yH3mzy55O=rMH|Y{y$Cut@Uty!Qe2?c`M`RpmeU&{yl)G-3Nf-W#vv zbIni}Q%GHmP)Q->gBqkfcyM9%aAG}o1{!Y-!CV1Q$R49kOGu;k-@AKH=fXWoDN;e z3*&WL4;Q(J#o>F>;V)PP!lgSOXg4|-l6_uIsoK+n-3NE>D=fILS3Sjp^Nn|+_9qKx zW}7nW*b}}}%JG?W-+gm5p&d|7Oi4I(n<2LqCGU}>)%)J?oy28>?&SNJY#lg0L zpRi^>fJjm%4u=Z9a%Y`BQ!CwZU>MBN-D5RIvQfhj>Rpna`}2{*-<|UQG++(Qd3rg zU(~c@Ov+*PerR#A!U?XZNu>;UGF1Q<&9%*a;$p4U#5)o(`igt56j_f zrd;$5eY8L%%TEU^kIxEKjIx?58L$NSF=)H*Ka34H$rZgZGwN^4TM+krJIvzQX{7Mo z`7Ls*se-*!V?s*l9{s-ciedDwjM~cDL$hJlc$;xDIVoX2qd)oj`(&M^yfP#8Nxsp3 z?&FzimI$4)p<}8ZQ2sdQ>_rS6?~J`or_}JSQL$Uo@eHlF`&@WoXZo_&9 zh1OM6G@&ACQD47*07z|bPn8epWH4hj%kblxXzxc&YW=nd(bTzPBdN5blFjyU`MmS8 zBXZ$;_j9LMC)&(KsXA}k%e3#Gq39U8$Y#!` zMS=^U1WU-afii~9rAXPS3B{n(H`+_c`2 zy=1LU;}kjg^Sv757LGk+kwZKK+U9-yTd7+c&YM-qvkl++wbk@aKWi*D$XLN`6}JXB z*@X>ktVAhBcvq5)Otq9c`9)=(4yk9U^3^xYO%NHDeY4yhEfWYe?4pIIEUS&SZ7l?l zp)!sj@-3IXi&k%qRIBB5^U@f$I(6V$&>6(vdFS|HrmAMKjJ+J4!m~6%Z%9_gQ-fHs z@0*nj%f$H+^?qfw+B6|b{kOuEx*-TdEw#f7cv&i2s*=Nxy)3f~Z?lf8)z;MQws7B$ zIVdDBV*+M5kDb<*OhN;O>L=1(sml_{f6jB z!98PNZ(wP&R2p-24UKExiJweN>|f6`Z``IeA8a^&mlG{>Z<@CBxS{>rZ`8)Di~oxc zJX}lSW8Y*ltf(ik)t8_&*j9*^vdol8pju_al`0W8tS_SDv#&3#K@A>j7=pD&^-}tI zT}LVs8fvDlO<4k2{^56sd0O{hyj| z5|B?yEOGZCDRr)^o7(t={O@70Dj64mu9T!7=%p)|* zXAoJAr3uH~K%)xaVqP9#a||m2Fq~5luS7Nzs$HE3=d(8%r(}jzsYcmhND2jV5o8*p zSEFeK5PTYzL=oR1c8*s!g<>JH?AqOAi#LeaJyUQbOER+KTEOVDDHeaXrJBX)4y_i% z#Ed(rh?*C{bzoX5nk-(dky9?Z9P0(m4iTCaKy+Ct`N@`Eb1|rnes4U8o^GxiN_w3# zmYbtod>H*oq8>oyhbQ81qiQj!bgIRa(HU}vn zyZ{KUQm4ZdsBW3pNfm71Hv%X*5YKZdXJYOG&IH!^yIWMZ2?yKcJR;91){(nc5grgK zFrOvvXxG`hzk@U^&>r9!G4)AWKQ2FqSUsnmL9KgsJA>Ll<_KeGSrkXaeBuJx;D1|- zQb2RVB%(YbalvrIAR;{i*ihP#dcYHAr4oQLDyK0MB0Un%;EmoIv922_$Z~8DcLz_M zKz2WY9^h{=PKcM}Movj=NNmV#083Jh!MdyRnhGQKq)XC`Ar7qT6jlu}mB|jI>#*I| zAa>B=fkIbIQ(99* zQ?@bA0WvqbGORN0mo!)QFA<9yF;wwPNlhWH6bF=bn{JgmL7lNU*%3Lc*ZBnM4GPsEA|ZWPT8vVpf}m4Vw)2 zW`2oE10jj<5JxkC;-o(klVRF`$P~65#7Mdh!ng2wx-hjsVU+nHXp&5r#t6*Nn8fL5 z;!GGM2((Og*U{E#yHh}n@Y$FG z`OgB^Vw&i$gGg)*)+8HE;6@A!AV5NJCYDGda3z*VEC6U#@EF5Xit(7mR0{M6J>yuX zcX|R3C8ryAr~2$Oo^|`Jql&4MKcfl$&tS@PWBh#Bf%YsL>>qf>cYT{lnFn2!g2yLA z$S<1jm!5eH9#kHm&nUYwLCc_lpVtgd%Tnd;pAQG%dEpmJ@@=6}bAy{*G3zmi$Y*2G z>d`nbi75EC5C)u6`1cS#M0*4{bWr+0Z3rmb;f8thuVbR$dUR8gp4@+@zN1OHmET?y@IrqeCeZTbD)*J0{bjl`6Wn$R9$7n z8etY~f!~OscRH(*r&?OSfv2OjVuh$)v={w>McrAA z15%+-rUL;t>c*Ut0#yeA<2mT8tS+qb7v^w-I_mST=1o^Y?Z4w$F19RmHuo+uAcizSs}bNphz z-xD4*6ldr9MckuK1s7-M_(k2Lm!Aksr6?JQ_@ZAk7W+&1LSB1L?JC~p2}CZ0H)Co% zGEWf}FDf=oiLlIqH)o+9*15_7~lV21!1j8Kd?a>JP-e|@w743iB5WGQ7y zWyz;758xTP(?HbFl)1@OnyObg>{ILl^O& zO}nq}>)@`Pk&f_-{Uw)U?|BYZ6<;Fm@eaNhR~Y8F=ayq7Y?Pz1ZZepsIi{$UJLori zhB$j}v+R;*q;S^_ePaBsO<|RihW4I*vGr&fI2cKr!o#@GIz>&7tV3gwtg64K+xlCi z=tiWlC8v5sYtgOp_+tjnjQS!+i>=aPbN!Qr;__mBo2`Au-2U<=yd^D;epTM_JqIz; z5R8S1@DjmlA#$mv>imIjW79Ns-A)~1Pi$@Vn=;uSR=@;pd~KN0x-xd=f}mNV1w3>; zBa0C$*V>3(4Gvx%4o+T54o*%+`<1yz)f!{Z%XBj%+Cpf_8f^nd{cWh-(6=~z#2#G% z&5~zcVse*uxo|i>q*q+6M+8Wn^EhF@)6BVdZ3Tw7Ii2gBM|b8&3x~Bv`-fq7hllq^ zaWjf|i-0q{MRw)xGr;CdbK@uKv^x3S9c^ z>D{@Jq*19P8(FiE8r|X89$xs=^Y4AF-9B@4miWdx#v#dbZ>mB~`jS(7n7f@Y-$v*Y zwNYpzb)yCf^`xHx&>2h0#i)`2*1nx&zw>pc%9#*Cp~RJttaN zC%89Um^HW^;R04lCwOkAv*`Z=JwU?00$&XjCkD<8Yz`EI0(o9EI07@XD}wZKddC>M zUL0Z97waeL#Wi~7&}ZgUIP{6h6~(%Vx|uq0qmDUrw$zGmG+vG1&|twgYOh-Gsu_sP z!Wb|ELJYvQ+0Me_D#SlA{)1KpFm^rErd4&SypyZk0h6Y>*(!HZ4gYjh*SnRg+~BOA z>gr(Zy1EV~l-9b#`1jW3{L0m* z$W?yH$A46QaVGx>VSi-j|9=bMM&`SEVgHTDHv{g|g~pjP=Y|gOz&6;9YexCrTqo>-$6zON7p~@R zcmn{eAbu#%vat8U&A+WRQ@~+-{N`lJsiRO4`?}zxl^qtTmFgveuSUk7_Q*Y z(A_WBeNss`^xzuf0|pbA2t6lKC#|RrUfuH(=Z*=vq1UxtW+nJX!}ZnPbtxz zrc5ncLRcsZ!}Btd8Cf(l;kg;h%q)(@vxI(SQGF#AEU~ggmgFmokXuIewT;6Xk^SnX zvMhEXe)8YvvST`%<*}h`7%N0e2Ig}xUxZ~@GD~0*%z|^_nBsHcW%M70r%K1adul5l zhH%*A{n1;}b9eU>;$y6qy^IkF1TU`CdCUQu6f@u)MT_?bmf-zXF~)mHI_5pZvb{$@ zBW@Ds;&t$mG#)O-r$FdgD87p)wg@UHgb8p4)II@vb|)U|MeL>RWn}>wswXikfQ7vT z0l0j3IzlBuZ!#5IhbpfXtAocDtF9Glp}6~l_n*g)eIbSRea!xT*Bf1i?&pIG?Opr3 zva(rle6Xxxfr3h8U&kZpPS!$yg@Ic7l&>$Qv$c%F&x z{yb4E?@kn!#1F5@R;C=p#>~!sdMDOR@ zwLxsWwbT2#BbKL$}SosXw$(m;+4hdI?YJ;9h-GQN6Nf|lBDqS2L zt`$XXMCkL~@8Dis4It&?t~5g$6u_Omv5gbf?ugcghiifV%rV`T%YO=|jZVfF?`_%H zs>Dv;yc6+d-Jv#A=NWk}kH6MCRJAz2=&rQlt~8unS0S@^<=DG$e})v|{xo&`dtS1# z>u^g;*7yY5(BQoM+;|K~IN#%Dk>zCyR%G1(w-Dv zfIu*^Mu-QSZGm@(nou!!tX;3s1xS0NtWhD6iSZGW?>Tb!eGDG04~eyzLSk$& z<{{BKYnrvV?f!YK51czRKE)DXOyj>R&v)4#++`sU2h9|vryx|g9Z%S3;YLt{(Kkn9 zC(CrG1FKE)^i2HwN)E+|oxtdf!wYYa4QSU019pv~-yYdB{n4Mc^t>eRknxXvd*76v z!)Y^bTC(!$bJsOx3+p}Io2qCtRB!z9o@pBvjsE%ig7Y85RmT~L*W!%Q;Zd3o-`2v7 zjv#fYCDej5iZ<$TK+%umI|MG^V|q5hW>ZG>?)WHq*!t>ZdDzMPJ7x~$fE}O4XN#9i zq1|raXM^dn-@zko4dIlF$QmDfQW7Vp2~u}oz#}7EsSeaA6u2RJa@bYsAf66V_bg$5 zdgd$o~xGq6Q!de&-<$^0r=?L8(oVZ4%Ir!QWr&`x2UBSIew z=2%rq5SySf>hx^9%Am#M? zRl3`pYSi`It1+gS%_-5^9<$bMVKkZLEmPi;9wO*|+ zYFO!-aqGE7!_U5{K7C5k(U35{G1(47RH!C=bi-Nmhu(hl;ra&mPq)>!pH*hkN#(Ia zqBMy^5=US7z?|lXT8qNMSb9c&j4e{Djfe~D?lxyc$AoF>9{PU$#_o<8k@2>eT-vYF za(v>j!@k~oqMde2l5f`}`l$6$<0BxqBdt3A`! zjOT-NaXLYVj|u}G4&`RTr`H$Py!y(42c>3hc$m&3<%ViYHO#@l162V zOEh%KYJ6v>Gzw>u3yr<^&MaXaJ{f3)wHV9<;rVUp>EY^5;bljl1HzLh$7>9x$%Ydf zppb8(XntAan?eqsokM%NT7B`h*^=35wukRIG(1eHVk{y;8l{cPPaRztrRrI7${x8$ z6=umvPRWbYg+%q-$u5sjCu@VXN)39Q+r7T;(0f)(E2iy!Td?VaH4<7i!HLN|_U@gj zCh*;9YjO6`Ft&Fc!|}$U1$EHmaCvRQ`A@G--0YZrpFG81Dj#?g?A!YM0I%gC@7@}p z;hTn@-NF~*Jaei^hqt&}dbii{Z?sXVv@*)`@vb%k-lVZPwEC>9NV{E=X*5Q63bVH- zX6tksOzecj{OTy3*0`Hx;3b>sJ-ppu6~<@dk?OGURHT7_>gh8Q&)-aCTuODEv+p|Q zFAV(p$2WzX96A+(a}E3>xNxLBH#ayJC%xl$?PS39XJ!0#1Yb;;b-Qua8be2#kbnvq%~zGS~H_H!%|k;@=_B+e~w5?v4t>E)Wu{bCS*owrbXgyBQU8rN0^?!YYwUKtd1!J^a#~Hzq?C$V%Y~U5gHEB);aMucB<~lBC`A&4;`3YI^Lv=^ z3_ib`@lyj)C!Rv5;e}UYHPTx#zwi`OPV@Xe$OiqM6nalt`SHEqYm6dl(uOZ?yXB*s ztB~v0ess%(o>jw{@LqzKZhR zL+`ym^bQgPD_8`8AiyfBQ&b@(S+Xq2DwJipTZ-*8$7ND|;&GBqGP@}fDT)zkdIB|9ds~)L-Uz zeQ~C{|HS7u@BQ-euENPLz#0Wu5e|IWjQEi|s~FWSxBx<|0(E2<;wnp$GXOw&G@PPUpm}g*;)6W4@ILwUFYOoJNh;R=t{q{W4t==GMINW(uaJS zpZA-<_-r5p7tUHDXXgOU_fK4yyd!RXX=018k#y)<| zop2`@6J%EqCIaJi8llkeydn)A+V+}6+85ApmgzQ;{xL0QL|WK}vE(5zngkVmktn|e zO^&M=FLCri+JNr=Z^TAR}tkJti6+TnBP z0-bEAD;|t>j2{`9`0zwTs<*18I+xMnGcsm}N#jXbg8aW922%gfl{bj50Mrmf#(Akf zgV?c$fjw&h8fPeWR6bg#47M~(y{i_Yvh?boX^cus2tvIa0TN%yJ@C)>p7{3ZJXZw* zIKk$3c69FO^DqEjuyKHr{`<@`_x5$1eEK9_x2r{>e5mMQ`}g(XbREuu8EJu^{wFXa zH!@h|nGgej809&)fidV{Elp=72HU8fR94}$65u{VRL>zl`Om-~Fs<{;J^&qy%j*P8 zKO9+9%jOBKRv^R`q}<(^@MU}kg_x+^#gK;f=19s+lV}@?HW7@aIT}f-giHkTiYOss z6cXZgNIVjhT6Wop|4N}@IOY+~A$a92p&HDgy%u4!;wZ%+?XegGvUE91wKF=s#N%=? z&IRo8tTL--(xZXVn2W}jQKwx?Q!_*}8D&NkEbrbptH!iYvLxiUrXY&Ms?YN|5&A$kc339zU;$) zD%VL!QXBL@nI!@K{St`Je&n87{E%b+W8SU>4}^uAhQv-q&9fB?=y;YgjWBf@X#El& zmH-Jg0qpxl-m_saemCE2#Ldw0)2O4CmO%j4aN!pPS75Y|IwE~RlF=#9KUbuT0@5K0 z2K#~EOG>ngiW0M^)O##G0~HB{)DEZ5jGJk_&usM@r~n%`c|Bg!<^K(LqEWE+Awt0F zeaOH$z0S+9k_Bw!yp9F$&@6z~Pn|VUFcJFeYo#1))AT83irQL4M{9*(PoG&(3yxI2^nHopI>qyV@Iv;imnNx6z5P(sKkm@iaH@Z5^i;Lq;~w#v1SpJ9_1u$vJYv0+ct z$@U*+)gjt=mlyT^;)n5H#<2r&G#(dvV7IA!D!G7)&IorSU6;CGF*kAO(nJQve4bn9 zz{d4Ca?LW19RIzmYu)s%xyo6q-)}`nrav~-tnp>s(cv~{C(&Tc_1POk5F7q);Z=cDniI2I2rp!?1UZ$i2j zU!J(c{i!nIo@I>CYNR&)L9r!S*xYpV+0%vcga3FWIF@fQGo(l&V%)8xna*w9PGA3Y zXR6%dWrUOf|GYnDG3#Z054`Y!2VVL}zf@;6#}gJ-Pnqnd_@+Bco9-L)8Y~8p)(^RC zphcn;Xc2PRUdUp9j$^U!f-E)~J1d<6*&=?1p!@ba3qRUFXGi zm0g91jSHxBUe2N%Ka48QN~VB!D9#A#mU9RU?8Q2@yb2|(SxyOup$Heh4F`&~f=hw` ze=7H&YeZ5pL5QWI$_4a3@D{n<<*hHAO0v&SQc@t=voTAEWSRSa%qXZo`$|5>}!eRMGvj zRx4y*Z$FFpWY1ww0yFMHl?aKrQ1QG0ltqRZ1^d%mcc~Z9_A{}YszR<~GRUYZAfvhx z=h@_HjG+p(K*;B#I_qg7#k4??9K2;<;N-?cY~As^t;cjh2&4?OAw*AD9U84`?Z&O) z)BpDP@Y+xR@*1Ua8;x#_*ypGW8azUYRxU0) z^n-iud+Cv~%4|`Gt6Cwn1U#W7bp|q+ck>M96LW|zFwHEW`?F%Vds&QapeS#cUep2z z*S@515f}E-TsW+4 zNj`_&jyMq-yBpCW6!uzHf@poyPFi7}R@C*!k%JsB7=_AQ64do6K$z@ND~|sZ03M$| zWmgC*FI=NZpHOLwvA&c|LWt#(%5TxMh!NtPlyQ+0xtcI9U!?TDszk}>L40aK3UeV%*b73y#;n*WiBjRPGX;Rh zo~#0KHcf@KG;U$1EPLctk#ZoDa|vap1FqodAxj5AX(O3dMIS4XX*}!%xKl$uPn%*M zHfE-<%8!VaE_>K4!z-_1;9ZuDny3i-wQx3KV}3&XLShTHdcWcgEtzoq^7j=o0LVpn z^W}f7zkAjnk~=fL#fw-b(CU(f{57xd22yQ9B4->*xUtbp#K03U7<2P99nirrjPGtV zn3}%}TmUN@A+fOpEt3P7IkII&?5!c@aV7`{m0t! zB*@g`Acmg;F&wg1UdUH{k>jhr1oK6Xp8E1*#cDH10rIrD2@hE-PXs!#V>*6l1D7--&< zZ<15iaEJFNW()QMbIhf#{JYwdg8tEa<+peMSkeG8@-)(eojk{;*p$=)H|ZnN*aZ}J zbWs4nsxsiA?_5CXbCzB*xJwUV7jIxy-uGIfX2lF~J#Hn?dEiqMO*@7&D!8sBVkjn> z-`44A4d{G5Yd5Uz_O+~k_+kr$( zz!tUvTd*UxGYA0y!mL(C$QRJ`tZ9nk3>H+H7Z+dTky?Xx8}JT*l-m^YD=_(b;}*#k zkpyZ)BEm5d0}{lyTEdr~uWPA;?=OSBVP0_m`+;x!K*S0nZpiGMQS)AfYR$%in5@i~$BSwshNM`q5cqjZ`D>|~arb(U!@Sp_FGmS%~h z@vKHkKq3PB0V#8KCOdMhoUHs4O={BdShIyD{)+vDkXTZoa6%=bgK{;6LNa2|fdbp1FR922KEX#zaSw>}>RyCq1Lo^xH0~K;w%y7Ls zJbl{G)8`f9b+Q3pl7}u`7Xyxe%Yd4@g7Fr+RIor(bEMSLC~0);DxUPM3d_NxHGk~5W8tya`6 zRf2y}`<<0ZFmoEr{CSRDi9U_!uv^Yb7$ZD^!mUR@G|!3|+q7PwoEFsVG`g7K<_FtM z>mIeTnO4(|SyH*ElBnC$k+e-hei#2HDX}Dj&8-?niJq=}vJUWfW8H2aP?bo=RE_~) zE)(ITnzPhSQ00z*NaIJEAoKNydAk}sAoKO+S;`JVPG;6HMX?KLD_?XcxX`mia$Un& zHT0M)aaJP$ZHgARdHn>VR-lhn_G?sdEf~9Bu9pi5S}m^}LFX09Y1r8s^aiyKyW5Br zqG>aTo|Muc>(JV)F2mw^$XVsDyn!FXUxj%R^;WrBu@0ok&2xy?i?l9aYqD|$u0#K% zLv;&G3cZ{{Q*cM07~bDI;FIc-jiA)HRavT)^> zSt%n!OBTHxEnD7-6yYLDRt#Qryq;ys1fq{tm(YTI1IWb02i!!e7{MOdJvYRfXzQL?FuzN+sKT$~p2nNSPMXZ)Bt7zq0n=?|~V&#aGi+%`9} zUg7PIb?q!Aq@Wt;f@Ub7AoCfV(-+ z6;PX{*%5b!525x)KlI7Y;0_@DwWvaLis$%{<{zSu) zgjaKIvg5;T4a^D^S}g}=k<^ZlZVnIT*SKjzz-sdwD8>@=cw!dD+1FR_?R;pxukyAc z(3>>GlFinp?M?B%up0f{%yXv;3bxh1om(5DWHjljEhJY|&X`R)bb9t^X76ZR>TLE^ ze%zN&4DSM-TmUG_fxm(@)z%r$ni21F*b%N%)`r;X-PCTlty@(jzJV5yI50(;M$7RK zH~SFW8=e)Ht9>}Zdduv^M73r1ef`i?y|Xp^CE($g;3|&Mfs;agYjJ&K_h)ZT_a6WJ z4qv&qNh>CCwOqlb3W*(ijLC8`HPFIJ#GttUy3wVV=^RFR_KvwDr=P#OQ>wRWWqOyP zH44n`DSB+IjWPugUQ$AWJdPYi4$tnM9N7y)M=U*pm>00gS+93e{Tw!lhyW5j zf=nVo)RLtSnOmdI znB#6w+{`H17B;@Ux%N_Qrc?b9t=U5faJ542Ost7lWm#-;16hg)oD^wW`qy!i&+ff{ zjoc|U>6;IqJ(1qj6HwqAvR&ao(spu_0W$+QkVr>#@Z9?y`ZAsgyGye>{sj8egCNN@>gXa>1=cHLlh zBh-+M&1#Q42jamr!T|kfkzLsQ{6Q^v3{n@c^8lj8u_NFCv+tN5~(SW zBY`>9aV=Z&?|^uJQ2|}8E_MJ$sxpVwlD0ujM6GaQuTF|LtXuT5L6_R|sohhLOh z<*HUaA8AwD^-7_D5)rh*9?4isw-lUHDm4`OPL(I)akY3gI=7g_)N;8q))!wE&l;m& zcJC>mTzuZp9qK+b7K?7Wf88LZ^I6i-%AtvVp;#!?xXq!MLdpo)q2s&IbJ4WLr=wEg zH6g9mn{fp@-7+1Fgmu;OkNxgTLc&HZRKkI<&f1q|-@jbgWE zDU~BfXS^mt8mMJa0Ac#GVtui`!K8mKD=h;jF-M!bb)UQhtF9%_)PS5 zwy6IzB9%)q1uhlq8MG|cgAa)Rnl)FmYw%@&`7TxA-^8J<6TwScCmAiVbnU z8>C=&@0x;d2anPHeF;N6k+wAhjJ_tc5=JLZ3j`t|uJp9~S5-xM(}SDCgitJI#9|Pw zuMg;XZHb;EPasOt2Dtc{3NUJh|94VzB!t!ae37)Qv|w-!Zh#N1RSec1K*ZdPth9Tg2G=d zrcyhaVn9)EclbHYrbBuOfr?CVU%mR;@xk@J#`?@=t=bCf<7`FtI3=Y?jq>kmkgReJ zTzML;##25z9LgCO;ENKOP^ovQTNCJO%M^(jhBiOIsa+(YuTlHXnj!6=Wss`@hV+mC zxHPU{+x+9#8q&2!)wAh=%@Ocj;NX_H57=P;Se}o4#4mvDY)3ZF<@3%lH#{;m!e}A> zqSiW5_Mnup=Hs!|(L-3+2=h8-jt(?yk{3UaVDIiM*zz4#M&;XL$>QvRCm!$u` zROeWFoA?C~rov#?v?f6egev%ag9?^8?usfHV9Q5Gf_Vci6A{FlF(4E{VeCB%lT#n~ zeW~8Z%T>@1BItf(YA%^fPpe_v++?-((on$r!)fp|U(WYVs|<2b70&G`PUgHYa*pNG zz0eP-a-pLXE*Pps$WqLNCCH0Oegy~0n9JRs)r-XU9677?r=Xt`Ys^Y3J+MSf*QCq` z%%JY7fVs@{R|=RtAL!q5vg~wTr!ai4L6WaI5nleHhk;!`jyyc~zymuUn}Tuh;MiDa zc|FWzJ0IVf;^JW^)43Bo4hEqy6}dbNgJdlXLSA;YAb4#ETv^c9DfItlq0fQ+pOqqA_XqkpF2EAwxd2awjqPZv zu~0zKVpnMOXqUJFS0iLAMYkK_2>u3Pj?0m7U%?4Pg^VM^XVxGWux}s~VgtT7K4OQq z(Hskn6w1&8+w=Ai(EMC;Ooqx9(A($9<^o$XaBleWr3v|^nvMZ-236(1T)SM2-+*SW zqO>%y?TEl7_O##M;*dxjEq;I6E>T@4r<9HiX~RA%EhI5oE|6)=nx+`~7RwUf_ato+ zi7n}IC+t$GJ@Izxdh+6vj)F~I;Qv6INXbHl^o<4{g>p^4DV z06aW1PldoE!=1E!a!VNI3vq8p=6InhwONwvJpw&xXMRgz1H9_GRxxj>^qRc0f(H2d2S46>Mt!n{0KWEswVQmZaf~kCAEr$oU76wb5g+NK* zW~?QqAIa60+NwFJA=+`VZZUDG9_d!vuc%ppCVLM#3O@{U2};2Yjvf}sQvvy_D9zB8 z1jmvImsm2K7SZldP;+&rN?Z%=J6Z$POhq1q5$f_ER^Y7|S_-iIa)RvLr>tt0x()c) z-yu&tjhw>f&wX@qvTa{Gj7NoFQ0w8UuC|-o9=!lGcRxbIjHSIz+Xfy53aBf~Afu(i z{WSSd|DEu#XUp8J`F(}m@M1%*Jz9VYWJU`;rKXanpr}KMy3=)aRpG=^x&rFEI$^EW zjP{;$(#o#5ln$5Ki|96}QGe2*5>#HTIU~?0<>57Y!zsygbw=XzV1`$?k7mULm=77ImJe67Hr`6`-vd7$MtbLLHdl^<5OUby zf@YFQMh9{#=&)URR~?ia3S=$1)^pX%Rj2g4Z)Ax7{`!u!0t8%gEDi!X--p{kNmUV^ zpauBO4020WJT?}K+H5p0lWoyx`+ivNo}HPD!8dZ*_FFk2&F#uh7B<6+QZD9d=Wuqe z&|GSe*phG5#m3`oAUuWgT?z0#yMUmj4!tNb<^EgPIe_4emF?fqkXI;MIqm!o)RmAy znmm&&LUh1PyIe?WdYZ{?NFp$p4J;TkrrbZo>s;F5}PNWKXa28RxAmPSYU z+Q`Dx82xa2mC+ZHw8|N6HbX`qdvg`OjnCwb^xStTIozcqr@mX|?kD<}xO=6H7O+Fd zN73)`5*D(+{vSp@IM>-}9E61BIq#M&lAEOvrx}Ngx7`Qju957Q7{SAP7ZMM8Z!6qf zID9z13rc!CKUe@M!g4O1yU!%`LXI+CaFo=g4*<2C5mw1MZV!4Dp>^@KO~WF}^5Ukx zJLJY;*-9#UcbXHjP}XVl0FZU%YpeSQ)7@6ejz zKaA2A{haB9kam-M=>^iwW@-S20<9zKGk3Xz^FyV^BSVGT$3Rtz)Qu3?2K! ziyBm?K@p8ygUK|SZ7uj;+Y14EsOOm;4Cz68UTi7KHluQU^9xz~5ZBc(xpkuJ(!>O) zY`G>8*e?QJPQ1cBam@~O8AAid*((LmXOniQJKv%~$K7LRf`&$f6} zZH2B`qfI54-jW%Nsqt;Gh`z%yc-vS|BbB(d77r%EJ-u7odycM4xU(CZ9PR0ZPB#>7 z+wOJk=pVd&JWPp0mA@8-4Z)19Z%7|VFRly6FjD2RTjhzAj*W6FaKI8?z+dJ5U*yTN z3G46zwsj7XN|78~Mw0j}$Y@J{qI1|vxVqut{o&%k0=gzkxk}WZ)hf3NQ!QNi<$0y1 zpwj=99D@72f`=~E7+pm&+1Q)pS*bg=>8d?4n6B=l*DkGf-}cp;+in_bQov;!0V8BW zh3Vebwaq3^clR1^ZMDsp&lUW%!DqAi_0%=%ZNY<|*%qReYKdHD(^y%JP^nXD6C;^* z&V)@ic5dKmv zeyQA7u`spgDpzwI`mC`JsK$t4$i6FYp&up(5e?!%dTXagXt8f1X09Tn5F2{?xvW9n z&kz0;dSUzr5=i2eMj`6ka^^xNz0MG^F1apX$T3h-{ zZ5due=n4Egwf#fe<|yvItM4DW=1xmDI9Wfyhu8cCp!w9&`8{zkZzsZlzgonF&CiCz zTCS>+W)ZEECVlzf}k`3K-o5U3{;Mv3x5n0 z*Cse&nytON@?lV`t6*th)iDUfAZ86CU#_0*0bn_Rf>vvSFKRlyu#+!=$Q!)s>_D;c zjLI@lPj|617jEefmkf=9Upn3-!|ld}$5jI3eLuhT4!*mZGi$1?xHUX4X3TH{k%d;c znmpkx%^cAR#H4UGyCYlbE>0Q!HhVxv6(1c=Z&;I1_{swV-i;>)>~(QsitsXLzxJIa ztKU65tP8e#f}LJf`|gLz_4o%gkU;LLY9OG3BDZp35V6YP>2fq$=HePti)%E9YXO71 zzb+yrC!p%-Dm5{`i!a_-Ow_znOsos+lVk4?6R#2q5XN>85erw|AP69fW#{P}<@P5X zz4|;IV^%CH){noHO8oI2 zoXJnZUYm79U4QX-2Lu)xi7!djlDl#H77P# zHK#ofS5HX{kNqqQ7ZK)tbvBPIK-Q53gjnl_Ys4E-Z7z#g@8)Ny*3AmI?N{JE7>}zY z{D&2ZK(!G|1#d>h^sK8#!zy&tGP_09QRJt4V9&vAOY!Q#?M^+vtY?AF;s4#648uPgD0e1zPG zJ%By*3YG&g>{@IDv|}yU7-*aJ1hq%*6ukhPiQCh1ZHt!Uv@O?4dT+yekDz8vLS8u7 zksI0B;eS82^8KM0d|g%ZGvCe?SAE#gdnbn?w@qDlBYyxb`U6CVV$FOG9jYfK`pVuq z5A``7M+rBj=*stybttEPP?ry$1dA!Ezaj^!LS!%F3?Lr?l#Fx5kn5$>y+flXS&rVW z_1Agb^+Dbw(1eUdZ0MMW`7NiN+z&+?088_UsS6V z4MEI}PUR*IifF|wN0D32-DOo&K2RY38oH7wa5gV3X$Q2-7sN%aW+rt$rLI(=js6Ya zQCj6Mjhwv_`@m6F<1YJhc9kMwcP{qAps-m)c9tS=VrRN~BRxVFkIww5&az(&dB%`W z3{vWR*&lYH9PxtAz7~42%3I>gxQVYEXj~x|k@fc8Fy!m>qj(h=O-bEBUI>^JRpBq9 z=e@Y6ia?jACh_Wg%%A9&QqY%)5Uh4WUV+@$>@1?Mq@C;oKKv;NqolwqM%;^Zmn5K! zwqVVZ@fH>GP=;-`Fo(h}h;+E6OBF_f)sXJeL3&Slduh@4+kD|7s zZN^Veyq|}hbDqJyRRm%*p34%*yKsCI+j6p87S@-nTeNGLdY zPNBRU5kIOFUHj-V7Ek*3P>YXZcTH|N(1z%{@ispas@8+8Dl;Oq!FRiFur=-Dd0)D9 zki@ocy#C1bN4BGI-aPa9&fB^UbhY`-8xi5RcXcAdukD3w=sexnD@N&-G`!^fZZ21n zL7HA#E9!7HF9I~mXaALM*^3nd`}e@7_Db1t}+_$ zC-M~kA~HMPEd?tHf6eGQ^;h+rclp7E!&A* zH)&tiFCH@OOzl+e939=MBrJVMELxN3tZC9~8AeA<%B{U!J;CDeM*g)oP19cb0K^o`8JFHE+!p9Xgfx41Rx^ zv!lyX{qp9n`sfK#{zjDjLA;KoupQ++5$i9de%K)sIBm4s&yuF@a(#3ZGPfX0qg1^F zZkok21m&mr-%Dk5EGi<9$kpLs(k|6 z@7@OHJ}AmMLl{i7o%fQoT0XPSWCHig)ifz#I5;o& z?4QXu;k=e(50&wwVAaGT5ml%F+VZSbl~bxDM18%gu>it(MV?T#bk}sN5-itMUzmMk z3SJ}dnpdJX^(w;P?Kbq#J(W_A;c$3Cok+1XL8VSXsScne&!Mke;+M;1J}GIXenBO9 zAHAL53RF?5>Mi*uCHoDjayBKC%iJo-Ljc?(;XKQdsU~>$Ynp^&;SHn&mY4wGNkUJ!nd zos&HAghXkr4Ml2=IQ`MjXxv*)-I~AiW+jEiOZM#zi{SGqGUm`T2x`*S6fv#0qrn( zofLd_H$BiBNEm_ikU~!uFDQ(4@o-8|O21FMN@*k6aGga~Ja6KqDx(??Qzj)*>-Oqp zgxqA9c@}Iot7S6YYr+7Q0q4NAqz#M0-Py89slL8|KR=D3NQeUdTwcpL92Wh(@i=4o zQea>9LFNE4jy0Fd10ol;SVEzE2#1%BS1yy9Kff!k&ddkb`odASb6r!cuihExzo9?P z7(O{z3 zvhk+$Q0`ut+N81C1Od)&J)GTHN{;!kELJJYpnoILoY}89!k(Qmq`jYPtoOR|$8f>+R2=7UterOEu6Rcid7Fu1? zvcAsrZQ9@!gc^@6ZL@fdEb)h~@u3LIyNzjR!ep$JP*Ds;5b#IweYZ0)w5!9G37Z_@ zFL^wsP%V_i9QbEoCIu{kr6-M;w}79?D;fQx-$gYtzsl_+o`9C_Rdi|^2|O)5AfB2o zsE#RC{+we*mAi;4aYURHFcYNAwYKiQ2ciRGZQ79E%d@2-LNbLTY0WKbY;h&CbY7*l?=jIt;A{N8)N}GG8LP^+ET?FEx_n6}SYL6)jdq@EVgXO z;tE&hau3uRFBZdECSnkwotn0&)fQg?|61OFS(Hjza^ET6t3KfK8G~PR?4utx9+)qy zDJo87%UG^bIhSR~>ld(SKF1K;W3d#U;@r7lu%*Tc4HskaWjdlKPlN`>SFG68?l?!( z)LH^&B_KYs+pG~AN6Q(5+hbKiz8!zK>)=2*(7CzJkZaP|LjXlUy1!;9O9J=?{yJsG zGFW_CqrsGX0iVdLLq3=6vBdSRC-^5qdxdf3UU92&u@u}ilR7^i>^$c(;FpTb%go2n z;I9KxN>WaZ+Q3m8l$=sAO7mW;)oY+zmGHL3R6Ce8rOXTk$X9hH1MRpjx>`{6lb%G-Hie54Hh2+`?jm_!qDMrooS4VQe{m zKbFLr@MC#K8cs^3$uQyVg{+#yEUS=pb9g0Rs@oeFd{EzYoQp|`%qjV+av+yG^2am# zt~%zpVUA;Pp}+Xv#k%Hloz4>IR*C*YvCPdUMtNi|3G#q{rI!YIP*nL298|K6EbY#Z z-hZ8|36*V}cB-RIt7 zR@bInAu}WSmfJ43aIvnGNhXu2SxyZ|U<@{Tf*onA-j{ZI+syK$;A%4Hnqu+pS_?(l zzw8bu^j6O8lj|+TtvruQ^n%J{U^E7_8m}KZ9kOwFtkA^#=vn7qL}}JL&xw_FEaN3GO5PIA-{J?k-xdY zWvc@SY_z^4!qB9{tDaWGTJq6&b4zr7R6r+VAVQHcvX|4rKuv8hP@&&(NWWUF0ZMEV ze->5WgjD1)H~unQi5dJC2x6hL`!QjUxS%@=b2lYh$X0)oj=2uYIzCNz87_0D5@nf^0G$&ku zb1FqeKy%2b_K4%g<4ckf7Z#6Wo@(>YDpO0MhPJi?%THw7NPT0C>XOiP;4kELjB=u7 zpJSqKUt=bi8Vimas_0cN*%-fAI&8m!_$|IiEH0hz@|9C^iJI2?1SFFFfGK6Ku-_Xr zr{?6-9Z$Fto6}uujHYBfWojHu>Mt*&i|>J63IF60u~f+DGO(Vep}MlPoPhI>V9^PW zdS2UkP0_sHssKfM3B5s$E2n1TjR0pd;pkZkcxIm2O zXm}|IY`(h56!JmDU6u=()^13+<6E2Z8**k51X?mKTN+XtfxzzZ!3eE3tN$Av)S%E$ z@V*qP0ijk2!hlHE-V-sqZ^~uHIH(hOxtaMF|2`L|w~gt?v9j>v z@tO0Qx`ocaOXZ+c&K`dckc?EyDAWpt(QH#!OEmBIx-?3wPD9h&Up0QvrWw8k2{PCQ%6o4R7j7W{#Qa zNbf%8n3_LEijY+-WP_0F5*0A3&fPL_cOhALj8R6iHVGgD%Qw}zmL=_SI9eG++d^5l zJK}F#-VpHQ*JbRvh!v8Ul97}pP-FEuLrq;xLE=cfGht$toZM>D8kHocRvHC^S#Joo zWFoCmgN#+Mf?aD+NaQNHpfj5Fe4s@{Qs?m3$rD%#i%el|yB~2xrR7-rUjGv&_6hCY z@H5hq)i~b(zBG@@cQzlvgU0%4Vdf$o}k8!rT33 zr^!x|QfM}>`N_~QUVQ$O~43=W*dzRqn-n3h+9(7mnDEB_}mbdjX%E);eWQxFS3c z@txDDFpnw5v9XdJL_6*(rxr@|s`kAOJK}0UYS6tIP_fM%q2Whi)ZA& z{N$?M5)WHN4SkSc&2gVUVUdGXIOsu@qWyumMNS-(N*IIRYWEvyFbeR^fY!lP&aI=t zb^z7_)=;JaZ>*w$U7;xcWS$}h!#qXg@)AYFZPf9~ok*W=fX|DaGl$P%F8mkB&xF>A zc|Q~W!8FgtS*C#h60UV_HaO;HN$Z$;Zmkn3^o@BoS9z82itorTt@w`ozA{k^Wo#ss zg4-#;M}6+FkpZhW5OPz{>W}e&diXvH*GGKrkdYyVh7jZJ-mo4g?*PAI;l>WNCV$}t ziiWe2DOgkogsMc4e zDVjiq6W+T}25?o#7r(C(Dq9?ve5V{4TYMIMkHm)`A)lK6p6`j@v-L9HbEIKlpuTZn zpssi)8STtvmczfrY4|<=d-k^gBe$a-pqL%vbWp$?m>wKG!;)T0uL`AjzWeVL5K)o) z`7qywr~>~9&X~e>N65tBX1P5bK$Yf6g)<}OFpD|O8K(k&suFcY+^f(jD5*lL_)C8< z=i)e5E*PqFbDUe;LwtAk1N?tVt{2CK_7LDPacqyBVO1eGx*ZrCn(F*wghR~R$wj04 zI%5broFM~kriFAkTw|r>wi>^$l!5E>*VyFvHd=w4{1BVJrPRWq$+gOlYrUo1T(7Sd zT@fxY6n}(2i90b1rk_w@1#omq!x{uk^%kQ2>!sLa>6}8$4d6+cM$mswsy4dJR*woN zZ&JBxz3!BgD+F5Vv({G`rHm9cTlc6d#7m`o2>A_*KgM4sUVun1jyWehy0hSJh_NtG zIL+9@36jI&7fR243q5%;&{Hoxl9!c;DH*3+Ub-q}YC(599GTN3xZubRs+_fMSJJ@| zd?@GPI8QDVuJ@=^p8AqR@K~CaqQ;V-$A+rpj6V6G|_`KUnrHNpA*C< zTUM>gx2zt{9~;d#uicn$M(YhIeveo~ei!oDbPn>j7ydd1`X(6_iJ_BLapSKoPoW$# zE&Z5OS;Nj?twlnCH4>E&b%bin60$g>P%)%TWl~f3E7YZTqQ{*lq>`Ujo=_(~p>E+5 z$VE@UH3TPw9HA8aTKvByN+Ap%VIs)$$TCSe14r&a6<8?v4&jpGJH&4CmC_S1uo7e7 zbGj$l1y7i(J3L>am)If$hEybw6y)U08M^Xb@J^|lbSjoLcK`9}m97A@R1SNr5zrm+8;P-@3y*?C_f| z0x7W{qMl>$yLS~&0D(M)xiQx(m>K^w{8)wm38OFq9GKGE**mdjIFXsRFTO2WWVk`m z7a0U==Fh|ECRY{~Sef!r8$cw$C^T>Dya^AF!CUh}%j zppqeAw*Ac?yt8lYogcilgOo`Lsgj4|*$l^{f#Y#v9%MzwCpCKVEF2bx+3~+j>CH@O zKyWy!x64+h+@7j7o6)3e!Q5)cYkihAt2!lt>=>hvM_6 zPZv*}Q1Nh8mD1GO=TA+Ij7*(+ZY@OdP!x1XH?M)?`K34>_e+=^@RNEDI}3JU8jJ+` zNzTla1n-l{VcXv2LScp@it$uydwUy28lzsD-^hYUD_r+~3!nb{TDZPL{o+-R z;)AD8<3s-d*9dX@u=crAQ&6UM6+ea&bP-U*XRuLtzZu?Z#QR&YQD`r3B({Pdl7}iQ znjTP4+nszLrHve>ZotupElJ{N<>(xLrE;8JY+3l3UJpmtH~WEPy`*Wr2gZaLV}45Pfzdk2jX;#$ zHbGwfSM|VH-*(40ZoB7SkL23!JTG30zqK}P%r}fQJ8h+_0~ilqcxcto1K&D?u7h9v z=4V&mu|6KX>XzZvpWP6Pti7dN{jOe;fVyCxFt7#i+!UskvjzOtDPaS-5z=kug4k)K zI`>9OQ6*1n)?0SofckQ~AmtmpRV_sz4d>xj$Y=M*Oj0MZnFP(r3F$aXslz_A+n|z8 zNGJj)WGt%G-w$Q|X-J`ESl3H%&Hw03jTgSKy0hRAw2dmZZ7;;Q9&tH;BVKtx(ft#<0ho@Ce*%v7UUL z#hP^MEDj55s-m;{{JcoFyKCGhUBve+jDr@8%T)s{;eA zfq{WQD}lON{9zJP(r59*P-;5yLuZ<_@MX*u@Pm^pQ9EPZX_t#!Ibtl}H%yS5OU*6f z7wc4u`dgIZS0LcMc$qXlv8%`2fnw#8rO2eW5yT_Qj-0)@WBjVDl1BS}R>~$;UfYrx zuD5zSx3}-&v}l*2R_v}{-{|1OZL#!*&J;_rG7_SCebdO{u8qgGq^u2B)iv+xiyRv~ zetnDHYE`PNQK!kFp#+CuNi7eDJ5v@J@3Y%Hda00F9&$BCOb)L@s`uFqPF}6^x=oSc z!@UjL`sn3APRRQds_DdvKv;e#>@?n*8L(Jlb)H2(zpw{n}o5S{o zbn#b!NN&0pa%|h|2XGJX!BSWU)-(}pg0^Q`ZZ^wn3gCIvkGFs?o66-#PXTY9)UInS z;4KvsIX};M^|^t?{)0BBVyQ$p3Wp1lF7bb)j+H&8|5(D9P$>g%)MoQ~S2hxpJ z8UEVL&rwNuUJL%DHgZzpMIqvGX+L&Dd@MounE0LC60$AJN{wN3($@=l@geDj>r)zA zj`f|xVqh<(!vbJ$p0ROmn-0F1%vta(T)6V!Ytu|k0~s#h+DX&8wgRr7XG~Rr?77w( z)k|5n1X$*b3Tle!D_2f7WHP8NW+fFnLwwkLA7_@9b0u^d3vP3O>lG#Zv^daJ-zLYOfqH)T{ko7ZAzysrkYHXyKiVv>>z;=KY|uI zfwf`{6V@aYOEJN^;VgI#5-JbH)8&$8ka$Lr9d4PBZmtr~a{6?|4Y^PYvkQ}_7cTA@ z;z!!}@U5qB3a?$6)kA(M8F?_jCcElzuTK=o;Lb0O2A3V47{BA$t%2g7OsSQrWLMnC zN0uiVcj52!J^R=L*XQLLUhnrfLPlDxRW)tDt6OQ-$unE;U$^Cn8{5`D_LEJ!?}yU3 zY&enWPnq24bOFl1+tn!L1repZAfl9mC6sc*Ux`wPw`=!J-Fo+_YyCC*r*47QK=C7O zw70HyWrEkldf+w51OD)L9)u|6+lLQd_&bDFZeRD=wUOZJTi3vAIItR_l)r;QdP-6Q zZF}M+EC`;0U4v;?u#2`Z=z89twN~*l3+y`_S$ilREK;q zvPLoAd@UUJIY`rbtOenk|8pkphA%ArbrIM2;OcIJ#65h5k5i!$Rk|9|AQ$~70UF;W zeL3dw%sCSEu{QD!9ZjiBx(^%RqO`KFZbL^x0R@Uun7g*#l;3iEQ^MSFX!JDx2SzQY z7Gar0Z%duEe!1WhP&%0}WcE1tK<`**%{4prx0G?rYKUXbz!|Q^w!DNT!GGixeZ#)K zysxj%mnW2P?fN6cG0P#oooZ;{GYGzP4@VGuaX85C5fR`lT*c;KO#Dg+Ci6D}m@_Nx zDC}uHu&zN30gOt;Bzv~CWLGs<-OG1$jwv*9u|@K}`t?l^zO=_`N4jg|GO>(4t!f^< zdBw)#*VNeRuc~X`y)y8{%@19d(OGP2jWsAFycWA)Nwx=~-8FOI#ggibIO`F3u~Ryq z-Q?sswa;Uj2QN&z|5~VdX1E$$EMu44BJARZ*oAR!@LS+|c*C>=ffu+g)cozxg}A8K zjLWS_FA5%>ndP9|5;6siKQ1vx+G4d`VeL3)EbaisFXKBGLKjmk;E4O(8t@BRK}*nQ zAAh$5U7#FnnnfDA2)iI03$cr`9$^=VSIgLiIg8%_&5ZF=V3$k5s*AcTbUD?1=h^*@ zyVqpYGzk!RVS;U&+Ul=v_1N;;y6dkFiO}WRGIXhRFZbVw0R?yjl21cQhH(vMo9uZ`1Jvvs?o3Zr8G5MC(DQ zS7*ikjv~tX2}D_Xh_Ze>h3QERLRrQup{!V?QB@gZos~!-##)0gmOs7B3S{`VW`3;K z^Ev|87?n#wtZZXr8UZW7IS{43dj(JaKjjz?FL$0WK&!Oi6e+ z0&6XR+ozdy6Iq?rr_Ix*b<0IQLQAV(z{fHqLrJfTU>TH^d^g>O)2%q&g3IzaBf+Uo zoa(@-bm8Xk zsv&)(BhlS&Go=U8v5uJG+O1nQ;~UoAb9FMZ`sTqBU~K6f$@JYanu@JD*co3p&}kI` zW0O1Q*CEK5h?&D%X3ltHltBhfJHtlvgYi`d zx?CW3`>N}Xtq<1ke`aj`U7K6HT=6f)L{}o-9_6*c*0?>BisC=)d!_^*^@gz3<~K2% znrqs2SGP5s-FAFr^W%qFLw(oZ{b+L6{cAkV#-Swg!P06Yn*G|@4-6kB3p2yauns#6 zJ0pmI;06K$LDVFgxQ4hT<})#g3xOHX5sVm@#4JSfi_e$sOY+{!`%LsRF)_w`Mta`8 z)z!m*h#2!d`Po%Fu7MntECwU;lcTe7NP}PNfUhQOq}a&ga>0_lN{&T@_62)OpV|m*T&kC z@i}?%(oYcNGNDW3#WFXUU7||K+l5&D#-%qdPFg#z zShOE}-C$gYX*4Qh)aT7a0{W+NbGw^t*0@`+x~vE*`V3AZulKqPv4Qoig;ksO%-z+1 zo^-~<>tqjl(nZ8o7#Du+1Gw;K7#E%ZBGF7}K)J#QpKtzhGi(-`1q>6#3XgE&8@vZ> z@c;}JM@-`&Gr5dwdU)$(tZVqZ!7lKLp<++>j<2q0THT*TXoBQfZMbzoW4bqIvo$Vk z8^M!2UeMvPWM9t4`AVV8P$i+k1S3dkg@&QaDzo=4O4@RLNgRj;4fA#nMOmX&5N#1h z+-xG~?yQ;fAAOiXzhE;D3*q!uHHK5Gqfocb&GjY9yNVF-n|@ z7r{s4MHiF+<6#50k9KDK_?@Y0FK1wtNXZ#6jdrFw(}igaRfnv}H3- zYio3e)|i7(S1sf5uwvp3q$MHbVb6JzXoRLo)c8=v zK(K9p7XSaZN(^XiqHp0~uB{k^>krNZU~zw)~<`NJ8u(Wd|jKxF2X(wzA^c^euhIb<=W z9f=}CvAG@v+cZirXeh8xq*8jy?XCpI0Y9oAsf+_%eG-+cl78H1m`shH#A>&-Y&p1O z?(Su60iKWcZMko~zqcj9YcK(W_Gc^Mj^S1p&}Un^0t@%fkGY8LTf_(a5w4)jL-&f1S|tLNPukpR6uqD z?nEZ76Yi`C+Hz-WF%wZz@z<>*y|2q1A~75PnFv_T;!VXga^KwDvh}N%ti69zqpiHK zIn$rBl{Vb7cI1u~DNA-R-?X5~QGKI-PPi!~@}Z9OV5eChpI*u$({7A)B?~=K0XU{_ zn;G>Y|28r>t=(=eRt8d?8)w9VJ*(TJ)7#5tdsFue@M@-&cSS6wh~H-j^j2NYL?na& zKrCvqCp?0w_FhI0lF=R{qXN-`(2cu@RP-pp^F%w|i5iWzrV~JieArIF9t#9isS(>a z;Et#^d<42tet2X|afY*6E6%uwi}Y@}Z)0v@R}A|SIP6JBTW4k4m$!L~S-5XO zta;Y5%BXjpyywYo*!o!!?=3h{YV)+a4*3Sc90tt zMuOuYcYb`M_|OR1`t;f_ZJu$>;fU6e-L)#8I-{Pq+kuu+Vzs z>s&YHUx%Y)d>u_-xbwVZ3@#KRYd9-JR-v>y)#)Szd%|c(7zj-guc-~rxGR*f zsJ@}rX{Z(U0Osun?DmjJ3$IwC1*TNcHIyqX>)4J`e>swa##u@CCtF$Vur(vi$J6Lp>k@Mup#KNM@Xm`PIeM$K0 zm6l>){;jJEVDY>gSLSu1p5`q9ht(&l1f!@Aw?q*RGAI-Zs~7wN89NI$c2@d_5Qb-7 zh5K@vJbtjPYdsQg#?S=^Nsz6Zhio0P?(A49MTO9|X6KmtVEPCfcXmMHY}WYXI4iHe zb9nCV#mzpQE;Mb^y&FS)jS)trK#$I7)V@Mjq;qML9R{wQHE+kvz@G(wIhb4EHAe9C z5fZ`3!q2WP1v-{(-9NqUrUToTmee|)W<;Cl2^&>fTALhPTQUU_L)WYfH3khf1F~^8 zTdEcHd@s`Ad1rDxKa+DkugbZe&11HYwsBKZJ@YWDrFst~dh_98tCLiN1Jw);$cX|R z<%~L2-ORm1qy3thW9(69Qx+RKWa-MN7e-Jo_=zmhfh}DO&L>170OwV-4xQT}qJQe# z31t2Vq6J=B5!AVshIAmNB*U+pN7~;YFKp?Q=QVW73uk&pe)6LgcU@Al7UwpmdNbDC z>f2VXzGX>t*^1(vlD+zNcW+k@A83xXwHh&EzMbTG~m;_r&s;qK2d}!B_X20&gOws00v^mJ*RU``wVWst^ z1J^DqX?cDS%dZT^8L0s2xi&St=>R6Vz3f*9tsu2 zum;;NBfJOgy5Zf(KevH-qudZenDdWN3ohiJ8_z>TIq<#fZ+d1&x%0sH4t)CLj&k+S zp7y29oy%LD-rCjyZ@l-v9vfct@ZZ0D|9jsWUh?p}U((%pbW^Hv>%-g7Hd)^G%{mi> zvLFxL@g(7ew^uY~fo5pOTxvchq@I$hzkd=Mil64RxaI*vzP=69P=a>9nNuGnDFwiD z08!_mAPKb*1K29YmZoG9W z%Kz$|8|Tc4_GoEQXOhvd8Vahk`nKU~rmZ`;HftR?u<0Q9D^A~RbVhBo+MMuv(?P%S zt)44Z%no>)6INHiP21CclgA>6p`b0lba!9-b)SFuvU_m~2Xj#-{y^S`o_Z1HqGaLs zKH#grR`b;tO1}E?$A!9=KEIaCQAo+0A>^SikhSL{xhS99J-@GI=Tp~pZ(C5tnH-L% zGyNlzM3hT)dQ3JJn2nP}lqJ1cRwcRTYE#?rRoyG@STjjP0awqtbyK^+;o?L`!khHl zJ$74WT0Gv9bEr&Vw=-x^+jBiJ9}=ZI=vEs-PK(#fOFWc$I|iCZW|vu#%FLE|DDNqP zltIEPtu?%Ibv>6O%6Mh|Q3V1k@o}(j%sW?$wOd}y?VkcHil9+^gmLBqA-qhHW|E7t zA9GPsO_+-!8Zj5;QLq5)DQEtMD+uEn6@ROdQIbhJybo8ZP%?VvG?j+iPd_1z1*8?X zQY=C&_zfe-Od^)&kv6oAgCNf6py_e#Xlf4f$X81^rKSMq&FEY_O2H`|*&mnKDD4~P zW_h)e#3>z3xN}9v1^6g}$K%ywMhf`)#)r1H@FtUvvqs$ZkeN2y&9=haa%MmxrP#wT z7r~hwS4*k-CWHXwR@{OSsLV@&O7a=0&QKcJZ!8Ddet%!K-!EeOE#f}3&7tT23%MGK zFFWHwum1g@4td~8-Yk%R!CZ~jGU_gTe==7C-QTkWA@LM`PyPyxUd&U7jn!hzQ6fQ9 zK;#%QV2L4QyW&Sw3(oSw{=d@_;B&Jce(<(QT0+#K>ic2x8)uDM=E~3Dl$|?6oqh_Ihdp zP1^G+EH@Oipw^(2p9tbPtb$Zl%1=mnugPplEkh!rOK3bmqXp0aApUv#_&@i%wOZQf zSI<}dS24w;D#%xJTaWEOaA+i&-+Js*2fj5DslKZ-*wj^|_9ZVufPNB#>hd?s-R z&h3_q05#|EQGVMsHzgROZL#L1(^5L*T~ee{YwcQnbp?YO%iw3W9R$@2f|{V4aio1_ zw^^_R{T2z-TzktSTkn;5DR`}QjA=l-T-8e53$#6eUQ+L}B_KNvzkd$aIS&7TCX?SE z#V4?MiF2t7StLjdfEJtsfNJtA)#W(_5mkg5B*IgINfIqaM^mQ+86sinPJ$%dv9H9> zMoP8rwO4fV{iFNl$p7|xIn&pRKRHyZlWv;Ck43tXl2OZd_Dv<-fSs$pFjCYzT)YAK zw3u~cx23zH$-ev)sMZ_zHpdZE^Qa6Vm(^?H^`U?@F|=c_2G!KX+3TcC%6sJRWTf_I zd2}08DWHl2r30vVpkjei2WV+}q_G-gkmMyqcS#M=9fumiH1U^;4*k(&PlYAfhLLP1 z@!ipi1n{I%b{OKFjz5o3Li`NK!#yr%!tIq(m;>Py2**Ll0m3{8vmm4c=eZ^6PA>X_ zwZ1$%-@f>w!(qR}bRn7PToqVM7gFi8;C9Lq?@Z_W;)W}DGo}kY0v3WR^TpTe74u$K zS<_)pI^@&C7jSrjqIvrLce3#M(~s5oLVrLuiAA2)f5_vLDgml^)|A>Xj!b~DLk)_M>i==VVh)4S`rO(Cec1SdogU2rc2rIFiZuF000zLeW|YmIACoKv*U; zP>WJ-X@ft6yQOnfa!VO~Ypc|vmRtPr1^5H%=cq*^w{)R%wotF27OmVefLabo-=gJ~ z6#CZX(m9OW(t^$zmCn)0EhW@)x75PQEzKkW@1y!q3s?VTavj{Mz~=~Z%M4fndzG6} zizv7BqLv*}iypTiJ#3u_!nfgUiDe^Ifq6};0`nTK0&|Gl;Xg#}ni{|hp5tt&&WYc_ zx8n=1Up%~jZV+u3E#E&U^b=#C;0feCydh9@2l8J2+bh1fq1?Fs3&YC~URrM4aMzld zs~b&rG!4yMQ%2k6c)oB>WWYh#Pk0IElV|`xS$axCdhdWrlvTv8D={%>CH*z14}^UotYn8LTnYint+TJ645vLT?PH(f7^Vr_!E zbzIdZSXd>xNA7xm%Bsnv+=ZxHqtqfBX-IXqEtg!P-~MJlfG8`-;m&b?nd_7EF&}B{)N;o~-tAK{j>iTwGV0 z!k3r?bxMrs;MU^Oojs|6vR9*0K$=lGlP$saE-}&?Z>1T$kRqe0^z~#4-o}Jmt#E8U9cWB)`3{s4AQdE*Nlt!D;ru5hNXCH0t`7Tm7g`C)0n52H=% z&%!}u9{zx1R%y*4scKL4y9mrskW#DOB}HF85Gi}PRWx6H8hr0XOE9#ruB!Ve(dRV# z9X1`f8837zrEV%=u%h~6E$$kGTVOlFKtoRw4d9kK`vv@GMN6v)C{YsIsXmr}l?CDduz7?(~0lPwRliQ%C z1P{*owIGR)B8j_+1kplFe~Ji!BLq))z>$j9Mmudh`ln8w0C>HI1~6V>)bSkY|FUsM z(*xwL3%uMFtS9_R=j8iLCUQ!?@2qqm9R0@Kz1!x*2WGl5J~2G7rLTWeueYncckVB; znQVr!MV$)-&Ykw!LRO}sskuRW#Wr(pW^yIGxP@>87tA0^=(+Dk&y7)A9y4;m6B1{oc^n+8u;I!>_#LiqCU#i9 zuG)3Jx3_|m9F@|CL`hXCa%xqzyS2{3yldvTo3lX%4I-LVIigL$On2M}S$`yD>0a69 zM2grud`-9I`+&8F?e?&hp%GGdmw%a9yJ~TFM8$BlmNl>`56x)Z`Dr0FiZOB>tP z^@f|)-4rYK#r1+KVs=CvtcYil=828)J}`!Q*L}pH7zejhGzP|DF?>ahAWAxa>h!6+ zRMCENzEhr47^_yR41K`+^z?UviB#}Aw8-h64W<&oXLbDN!|v~}9LIjg9S-?U;=Pl; z+Bkk0?gX<59bqRdc+yfCwf88*dn^Qg*B)K+RJ{Oeou*|H&N_lSdA`c>tWE%b5xA-Q zfC+j$LBH2qeJ$kignV8vW|bm0b1(dPt&#)}K8GtMfZK4T1TcmxNnB5~KR>0Cgj6Z? z{G}3h6^o@j1%!YHSM((Pc^}XFaz3cld(4i2UICA6d*{Fn?_7zxg2Lrh+xPC>-_^B$ z-<}SVLJd;o^j>r~JEXe_;6*Y&C)G&+M{%75@VPP0rmfu$E|gG5VrL2^VB0#iP{I!0 zm-j>3;5K>uf}()_Qz%5g!{X6v0Qw96T-W}+d)qO8hN3y<%D>)t;GJ#Q*M<~DcI?@= zAN59h;!p4f_{B5G@Ti0gkJjn~?(siBed^-t1ELA@27mt*v*&N?cKD`WF=z1=own~X zmWbVo1|^F|rZZ&Lg6XsNEXm~-?;04`y)0i^c5Q#djEu>c9w@cVN($!8K#k)E9)x$` znxGgN9m9C<2F~iBSM0tv;-vMUT}L&{GDL zMkQ6j0zWPzoNl)Y7LlgbKnMY(lnQhg8KkaVNH!(RjWWQ{;}{zzF*t0lXf)fGZPrXef)VTdS{3gIhE)(+pWA&&)Bm)F?UNxU$hdCD)s*f_MvB(LtKp! z;ae45-;6+CQ=qRe&_pr_5k@LGf+-fGM262mL*`%?5e25`?QV`U5N_TL8{cw+!*1Yq zQ(b#b8eTF$!xtr$7{=IW>$c^?l674^jQ^LYdgn)siVK7SOJ@t{Odt?p#=g|hl|9kk zazs?qT8%y06muu+I@Z?^ZP)5l(gJDSm9|*US%|yTNMs}+m2|9acB*x_-7Wa?zF2$I z@Jw!I(V<}lG2r$Xbi9ty+c?o_&{C{bueazFQNKON2^_^*^qi4ZYmFjfidQ0zT*ReT zSi^ZVPWXxU;3jyBgdE$?L5`oT7))XN$<#|Jm^vuK$LqBF&cMgve+ECQ@^BN&R5TVD zKfa;mHMk~%>Sa>&=7O=3Pgl|M)!)LeJUH(2t*RGjT}5$jo6%)4>cDgbl7~WtK)_8d z;HV;P$Rcg%f;SRn>>p$idJH523C2DS-l)(7^KtZbl82Dy7C6F2|e+kI>u^ zZL=FVgBe_}V|8rx9WlkXtm+QDoF8iTsA-mQxzVUmGAyk%dQ9PniZgbV@j%aQ z+@6!=m&&kwSN%z`jt|!#^aEHDekhgMUrNxm(RttXN4#!*y){d~F3rT(xl00UN zbrGwcB4Xe$VITq+JGwY;jT@ai0ghqD7y|Gf?Xlzw$^VfglMU2Z__^>;!({mL);%wE zfTub@$8EKqsC7l-@Od%ihtQ=lstn7h5*H3Wiz{7%n}P$E5A8zdh*@{nIY( z>)X)f>1e3*{WO?KhEsXYW}q1i>_wMZhhNmq$Hr3Ab9Q6AD``zfL%hxvO1r|HS(_!% z7RvS8okM?j`aE`9(4ZC!rs^x4)nsI}Mzf98nMGPcL3Sjc8Av`cq?xmhSmSs)AsB`z zA{DI!y)QR`rrSbjIjNjeInw7&xo1b@K2X+o zhHv(PHTF`#Zm*ip+2sl|y~2r!YF_%-<`m6L12fyZ%8IPmz{ zHQ^d+5Uo^8h2S!f3XR?oaeBi7Nt5?zM5nZm1{1^KH$9D<;!k)8sd*EN$83RELB6Q) z5NRSfsw86LP<_lIx?%y>I0%h0O7RRH#~Znay;IhRs`st;O!ZeOp#7qf;WgFoYb_C% zD`KImKhSWD3MaimBVB9Lf+k!&4z@cGHmg21xxV_4)*N!!!w9d<)d~_bN?SdoHHVSz z4goXy5P7MD;GIV?fTy1VB%vS#^m)-Ro_xq`JWUzRMl<{e`k1m$(#1rgm`^0Cjip$u zlusrJy=IgFjg+^BU zLPYvh`jjBA@+L3pc;OF#zaf5{Z(vdSeZ@jP7nZkrd25!p^}nmmIX-uL?%!3WvyX%4 z{C@p<8UB11pM59ZBfpTtpeUQK{?B|q`x|rs4x*g}_}6x#5Af|=x_G(|?cJ5h6re{w zsj5OdzsFzuc_C9sp&c}OE$~P1AJp%mQawiCnE!V8GJKZ$9XdWHWvJ%C=iqbHUx-Gc zaV#F!Imf{$4jqm1snH0J{#iUHi{o%&)N+y+m*DL5~`>gGlL!!FK1D=@M?$Y}~Ach#Pg zG)d3-#N=~tm5#@y=iUxqf^(?fq4AnJLb2oETNRx_qah5sM<_~A9I_lo4=cb4nN|2E zE{1YuAr$|V^+cw^I5aMu=PG2MxslLQ=Iu^cQv-|KJ z&4-Lv2{VtajPnZ%opM=SE zWtz0g3OF-9a7nADy&21(s@w*K?`t)@(PIxe3>HJu>x&0Njq^Ji=Qldktf*Bog4Gam@p_&$Ss7p4 zA1DnWDQrek(n?Z&QIdi@o)C&FKVi1(Gz4J>PlHDZ4dF+I(2ne9b(Bzw$I){u@pzHy zCD*`Nt5hQ!J$tP(vhnO<-?A9Y;P%HzjUnjChLqHw6tp?&3#Dv~;w_2_7kv@4nk2st zJsO>wqz#l=cX}4XsvuNxI(V2dD~%fI9cf8hex%qT-S_vU`?kZMAjI%H!b{}F1VN=6 z2TzU?7GzDIJgTzm4jEB@jcHwn6txb^Noe@Ze}Dc>vBq-5W~x}DHcZ+pqco-g*84tz zu6lD2GsRQYpL2r1foF1<+gN=COrr(T?Txj6I!G5_}<{HK^P3G9LHHa zJVM7+^6;pwxYQ_nQ*TP^A4^hKA&^?1Uu2c3VRt+OmGt!;_-rYb*wpuu#pkm;cl#}+ zWc&YP?_9v!sIJ6+XGZUbCBGzDw&d|sen|5BZO4{v`H}b)`4xx6i7bz8IkF@qIgWvl zls4Jfjr5~?u3pCIc!j?FD?wye=I}ZP} z-|qf*zm-oS-I=*_@43Ho?m2fnvc~mxZEIdLkbalQvW*^2X{c!%as_NP&bhQ&5<(19j^_ilXg(FioUK>bLH+yQwo7vTT zW794YnMtHZxv2S!y<>1D-xEI?+jchCSR326ohQl0w!N`!+qSi_?c|AV`@i4c#hd%) z*7Vd&P1WhsnyNE%y8C0U{p4^atCO*q_scwv_42RbJ-z9=HCAzs;_vJRg|KDRAT@~G z%snja^P0L~QHaI56+n7I!?+=2IirP&N^_;%C-+Y=I*kcGx#H3yCQ}`xT0__L=x+Lr z5)Mk4m?L02xv1@8P|H?sx>gA|VQ+S*V$Kui<3vkR!$oL3ptAJw?JOZg0_RYgO`YxW z6-{XA9@@{aFV>rJgPvURa-Cc!m&fY7pjRh`|68@=s{OZVh}0gsxuKYh@8xPr){s^U z`Dq>no0^E!?4aUo!cAgxl?_O69m!XTjH5rE!CfmX$>em(!!F zqi2J*WmR^!jpH?{eqp+?4!=giBn0i`aG@tx)Kl8`ebIUa`%u5 zl);%<8pEL89}3UWK9!!1-s67@E70H`t|QLy>8^Fo@FODd&hlp!^+kK7gr#oJoL;iO zOq3lR=g+RG*?f;52XN8Uw>%{S7IDdi;1mO>P<%=hy!BQ2t_sTd*O_*H5aq||^gqi< zES(sd(}34RtH++^#F{c$SF|<#{A+b_&*>n>)3&9^GoPiNWrjh0Af=tIT`?)gX1bTp z^t>F?T8GvyTx0-mq<@|0J z2=}%42Wk^sYV2XLD(v@z@7?knwUjKfQyuydusUQjVcn8;lAofL4w+($+B)^#t&tbE zD?+F^4)>rvOfKQ@;DnrWV6V2<_f|+RMs<*iUYvOZ=jUlH9D2m3A>lNN_cmr<9Hj?D=)PNLCSjB^^f z)fUpC$TfD?P(@7}w8nMZNCx^(((I|Ip1P7c?(w8wDH(5%?G%MaNum_VVJCmi*0V?# zjKzIRqdSe$sCP}X>%t0lM&6uXxnvgl+`bOZ%m}@ zfv@!<`q)+>>zv45c3vU+pt+Ov@z5VM`tEv`dB^MdW|RrNBSde8t{t=M{c}Lmpd6f) z895$nDs$_tX2iCRA(`zXOse#6!MP9FMd}Mm{O#U)(%l)I9!b97CDTHTQ&!KqtaB$f za&9VPsgui!wXSlBNhnva(=z?9g^iFbVqStviB>A^(Ugphr$@tea?uCMJ4UOv+QLhf6?i+WC~$M$4V4Jw!iEruk}i`HKGMrS$Da z$Dg~Xh>{K@-cp7?b93Q3SRH9|PgYI0e-vK?@Xicg=jXz5g0xJa4V}EtPdQm8`F?oL&TTDv~OH zUFrpkOpq-ak#D!kTc6_>`I7(jHq?V}Z!M*lDIIS-ro}9yQ_xZ`nKT+dcZyb=Mqf#b z__b_Ijzxi)qc--^Di*7DMnVeQVN$*Q-Xof>AG73Td$P`G6MJ|2E0w;y`RC3$+T0eo zkS+B%@#ouMQ&|f|C(3dZG%}O4PkuW6JZ-vFt)cNLWL351-&tZy<>V+y*tJ)uN_eSq z>0gDiOY`~~MWcBIs)gEWir0P3(P8nFl^RQnUN88)hn`v)a9$daCdE2p=yk#qA|Vn= zPzwR9vOMDfZod{pOE!zI#H9;*m#n8;?YDIJrf^N6R~n}ll5X3{8>cq4gY`EiPDh^i zV#_>w>tx(>iFzBh-1q5?`ky8xit!8PjX1MG+NZF-ygBQ z@X;F{uzW!U2YgaUEgor_wF|qh-WD-}-&{>>eWg4l%S({zaB;130#e#l--HvTevu_o zVIDu@*N-$SA$7>IhF?&puOrT>6fYGq~H=O>J zWvfS)VAbtPL#YXXzb_!BD%&)M`3t^4602hazMb+xe@OS&BUm>>OE-IKi=(L%ke*d# z?);>|Zl<9n%N#6Rqjadzgf#=%YPWTnA5GucQde=H8a^497+)M0S(fF{)YeP3fvfpr~QE|z+wv4!j5MJ?0NwPt9#BH)&ye;7uKZHo)Z}`78 zqhYAObE8qdOcmU5P;Nn?{E(_Nc5+lSjkSHm3KAlh#&e}vhtaS`elA%()B^GoGix<| z{w%M-wvdI=35@9gWEY?m7uR5!DVM6d{a)WF^X?E_gpFta?p%evZDmRMz51Hj_XV>& zw_%UH6---ay|rR!LB}j@;@Ga660e`Kb$+&GNW)R|Q>zTMSv|4ot*1v;zqOG*mBH@G z8GAg*vVJwIbVjuz*=9>FTUrl_&3s~ff<-`(r6lCn2Nz!2U^I|ys0{Sn2E3ad%Yl8F z2lt^SJagjw@#s1Me$IExjrD|mQ`KtndUb*KFI&+V;<9Z`Wd#80RqyArDP|@OclD|2 zbWX)9Uv8BZjrq*HX{w3Y#-x<9&be%CvEkb=3I1`;36*lBF}G7bfF?EB^}1palY!XU zZlTmgcCoM74AIw;$fUGVj4#elr5E~F8F=yTnq=1x*XyXN`j_7IDiZrsOL0={Ui#M6 z2F>WSgj#-6W~Ci@8O-nnS*Y%}4-wC1+3c#kEj>cr(=v!Hk)OGj-L)t-9agm9^Kz*W0c)2Itcuvd8Kx zPmD{fi_7J*Pn+Y8E>>F|Dv_nf~QqiD(y2(lpt5W?ryJV3Bf(hlpt3%zC8Te59Q! zW=(aT<*9i4+%n6G$+?0ujjD7#|4543l8H>|YIs9PzO)bEJ?H3BSLChqboq!NQ%Y}1 zdsVF0a-Wwcdx%;(eJrgsvGU;OmWJv8q~N}$2>gnP1<gAnq7Q89? zw&swK2PY5nE{4#%`SR{AW~ymuYmRTtfT_8Sr}LTh#7=&k=2vsl{t7#O_Ql)kbi-YC zC{*xseYMxQOQgo*p2kfp>;q2qZ{E5+CL)ze=bgaqXi3=5NXhRwcVD#6Fe$owYgt~J zV#`MsOSOc%v%y!mCHjc0&4MP#;xju**&dAWnUth6MGFcAKglSW( zIK)_PNKd2u9cA}Yqe2Ev84ibB3lg3n=v27Vkm+g7L)KI6!Tv1e!iEO+g%rD_@nkr; zjuEZniit(6=f(H(f++aM4zNf)H#Qw3T3PC<*&<7Xs_nAHBjZ(V_|=q{%caJ=HFamk zY*;J{kzxs*yBL-yJ2TUW%c0mmwk~-_++9}v?DTbaplp?2^Uh=++c^px>BTzj!(HM! zEus`kqea65a870lJEG0Xh4Cw`cJy|vYCsIQ)b2MuAC;bfnsBKz`y~Up65&EjnT3Y= zhDAIVJuMR(ZBube5f7nccC|`2+$cx6>8HzT^fA&`s;>*oHzK`}3smN4F5=-QLW-3# z)jin-xP{`&nQ2y+j^&F#!fl$66A{Vdls~0#Q!Yvh)Pv8&&eo30z>`sfmCM7zR6`yH z?pQ4|rOC_^nkzxUUCbY4K3e6rWlDeT&&e8LGe;9LBhF;ReciLj0azD`FkKyNf}61d zRVflDj6-xY%PV`GSQly(q-gTE)$m;AL%DUdr!?VZwzS#iv&ht_#P$$WGKh|B^_)xs z>BJ;Vw3uZ}q8JyP#l?_g`01IfBKssFln8SzE`&?!MM^A!WgFSOz6)ekWUvogF0D^? zbTVlcQk^?CCajF{l9j2KO|_XP2!2{vj|3q(f)3yZhM?W$TkLXEXV$WpIVT*SfN@`?&85eEX^9D?q2x zva+Ibeca|OC8ndI?Jv@26DF zaLV&Mw&XO&G zM#a#~A_Ub>W+FJW=y_JJ0j{q5f(nV#ern*L=-7FVBR6)GhCkqDM#Ce&MNfIVs5Uy0 z!`%=`kFLOZ&PfT?FKYC5O7u6_E8M8vvZ!aQHM6{LNBih|nD=PpUVo(6m@Umpc>{Yg z<9$I112yzgZH<(2{SOXn(iw{oBgdpsMvl?idh-dvD+n#E#Djo?>l&$u2edtkJ2b}f zMu$5@q3s>n`Hlr&wB(2CQ~mHUVvo6QZ|XU}$-Kx!4(1%zukPDx79Ecs0+FRwDOJSr)6FXGwy@mczb34x+SdWrLc z|1cQ1>e^SC!#1ZQw>l|I?z@u6gnHC`e;2B%s&y&93Ll>17oSaA-k02+W~8Kjw6%Pp z-9>ZTYzc3%D0X%CFWKu4b|PN0Us-n5OKmrmp4J>;pwzq$rJSYAG<9|SY&dLQF8M}o zD1F?Al^XT?^Faq#pZpWm^hq|lpGtkrMJMXY&A-oidx6*?9i%^?lZN$vrKUv+p4GTe*RkgRd{UNLj^@olwj^?0uA+*$wJzJiYfBvM8vdL%B7WsK1$Zv7BR zL{C&ne3t#PomtIUd3L?_nbbSyKlw5k=WxLuogj*&1bU1*`FbLc*t2ZPu<)4n@ak~C zBR4)z5#{o+y%(;Tna)i1u)jZDygQlK+%+7E3lYhTev{wwzkesCcGb>w9=S~`Ozm)e zPrbe$6X$&Qf5aZ=ru#X3CBN=We-j-jygvo%c3vO91N!!8r6q;Y65@i$55Duf;SM-@ zcIcAm381)+uOGZV-Jp#F*88x*kHL=vZGLb-GeR)xwjYj%qW?F5oCH?t{~r7Q+@i!G zi#+CM3Lg(#?)HY~Ntzru#Xk#ZW1V9UMp8a+JTYE=zbY@GwK|^(62-fcCjNgI{3pju zoS-n;ou9_&PV(A`?nfM?Zc(!_vPe%RW4QINgI9Crxkll1A=kOqpavLRQ3V*2UrG9C z<7ia9lu5iKjMRS)pOT0(yG%c*G5QoUqJYGtA&Xya$(;Z^EXl=;<) zp`;z8(j`_{;}{8NJi*M-q9JxLCQzq{t*|Dj%D7i3Ccz-DwO!p0P9R>} z4Fi7_)I9j((`b$q6Fi0meNC{qja<8+s1og&#|r7i*#yA`mCuH>jw3Wt^tXWD+yi%A zkDTu0v0kvU@#;jAkoY$*l8Y@btLEXT&%QT~Yfm&;B!poENTmvn`e zg-_~*mA}lIKRoco)lf_P_(wi1CN=ArQa5w-m7u&oAMylUC5NK6Do?42LFOqmT&_D$ zX3^7Xzi)&rFBp3o0X!Iq8IKV+oP!;S<3rz{#U1hWwoQt-%D{@TDNM&jgl}`1*_vL6 zTKEDbAA0O1%zl~Q^ zlZo>yGC&}oq5O?*)e_jEi^w->!y#o$%p2QG)OB!cp+1g=e_b{y+X`z8F=~mcf7VE> zC$aU$*k*KVNpMq(ptdFj0amaU-VD!~k8gkC?TbfeP#A}(PZC+na1MS{bjXT>dKr31 zb!E^p857*L@Vk+^BRX+Ei-F-*TS5E?ct)GlH&MRdI|XXRZGpqy8m|AP1uKQS+~T=a zez0^H-ud~)??=YVPt<}D)?4|ig`PCMWz+MadMEXpM}sQ%C(~{C55-)vuZJD~U z+*vU%)89sQ0CjR8%Mhy}-oL$n0fATF>Uv-H82{KRnV`hb$-}Ts+*>UYGl{T6-gC#}Vbm&<@n}!Bp;r(hSOF|w zNYv=${8dZii~}QqaI!0zn51XEXYSg)eIY^jLy4hO>@n}%{RP%B8vsem%_T5{AMKOz zvd|mj89qhJijP~Q%YinU3+=iK%#2`Zi5%cKfKyNzLv{EFu=$zdka))$QPa*o+#b!6 zZ!V$>l*|HQ@v*S83VS>7KTmrhJVSucmM zzZKZjm85aZ4DxTwE7k65(D9Q*R(U*2n6#B?0JtX%ClH5Bj;eSyEk znSzQuh)ARy9I{}N132Vb=^o{WP%^lQ@{89 zO@Fa!G0$10E2$EomHiEAS4nNSnR%@H{F4qZBAQ>eYf(Y_*lcb{W6-Z0TJ&BA*)gFo zunfLsm_(;zGzYLcB8=hEAOCChET}uXZUl@iBzPa|cez7CsAt|b)tG}fK7%`<|0OKi zeg}$7%k46InE;5*u2Z%-^ywgMHDY20!@R4&#buydsUmXj9H^JLA%1G76vn|jzJKG3 zRTzMT@-8E$&zGHj;8FWAfv7O!aWDmb{TelfJMR)OPqa+@ydyRa{)?{@LXI#9)fTsP z4HWM&p1#WsV>>i&o9T2%Xn4|!NAO>T-^gn{XE;=wStpZv577||1wlXiz}sU$RrI(J z&I5|g@{3E~JBoSC#&t*`8Mz3;Kzg=u(O^)Hib06PhD6J<_>fLTU=)Hg~KIp?h?W%=O` zGNKp{N$gty;JwW4&Ie)GV&FN{2ESHjv2raojm(>NZolwPG2_vnavm7;sulaHW0__I zr+eF$hOUB~%V$sF0DA+90apm&e!)?~Tc{7$<=y*whU*Jm^2v@iChYYYxs4^hP1P`+ z-_U_se#Ts*^*&dJeZPYqAx*o9meFAtLT_;CY}>mc=>OWes4pKrK_0IXweFzbTm*LO zfIIoNm^pAqz2m0ehiK`0^RNV}nsfX!0lBhiKM5=1WPIfin&&IwEf zuZ|LoJUz$M`2diQk)7nM)AluO4I?shj!LwMdsDNI26Ey!!a^n9(vC=NYZjd;RJgD-*i-vYGj*WS*N*B zAS43Va2speFg%0pWRWBclOdcq!5m;d?gQ%VT|lTBA~%%rm!x1Z{lEA@6rYjsx-ga@ z?JyQUCZR+?>!6mgw4YzWWG)E$OuFHPS}6xSKdm7ep{9TsIEBP-aFcZ^+gkHXJ4!)3 zC;^Gx@0>ie2n%SY*qdJ_%Z)G;hmXTAA0S)@A@xCBhO$XcjCGMhn}|)E@LmJkm3f}z zAmHn_eY+>ronqyPUAfpl@vzKu}(~byv4rPpBP3Bl{Dq-KbE)CdEkm?Txh7ocqvQ7)58A z24PL&4-E|150IwmQ`<}XR_xWvPIVsI23bG_1Vgp0vV*Y$g>td8potqB(F4TtS|%C( z;EUA_?rq_OKu_ZDR$Vl45I|5KMdKlO?3O`S*xy`1sW|3C+L41z$<}P9zRYFS+qc8dwvq_kiL9pJb?) z<>EOkuN?pkf6yrxu>;F6CA_WP{P&2ex%mMAnyHiGMVN%j0WNq6M-h1fw>PG zBttH$yN(k=>4AS~HihBkOWr_E+v(q3-9xqi>)J~MGnKMi&0N+l5k@;?0NBGaCIXtW zBL`(d*5$&pz1c^bF&({vM8OsYydDGs#qDd6lW`6^49eA!4flh_ME^K|gCR|WjX*Ik zsJl`?1RyJ*rbRU}nNH$p28iuCvok@0&cx=oN!7)?tsTaK(H&i|(SjLN^{m*MFJZs-Eb4IX0+|Uc47foYl1`XsJV=$Gb?%MqzbqKj-J`oAMQ}D| zhJNb#{rFRgKs?($zOIl4Hjw@9JJ> zWxToT*w8(A5ocvz)w-}YrcE$dXH(y>-%Z9BSV%^6au-}apFq^V(= zP=w+5hKc9ox7T~+^tYkhlbt)@J^!YONCv$MUta z%R^sDVRvh-oAJQ7>thT8ki9cc37Y4?KKj8m>WNGDVz$i6+Ai5Es}(V`xhFSqy=E%)tVRySyeEzt{`oy_s|71CGdytvbdTX8JdEh$I6QBIZkuv=1 zGiLEKu9|$81$T-$HQ+aR6QiGO8|`oFU*3M~N(=s`0BrS5Kz2QW)%x^V;kx_4xo<&r zeIdE~z`OH-b$#KwcY|~Rzya4_wfBpt29F@wNL`vhHMp*f01b{CJWzm2pB3>9H%J!} zXl*YPzzw9f7Q7bPe`UY#oU-p668H#p^9JselAq?5Mh;Ad?TYZ%K)kVp1_bt5fw_D5 zuYlcXgYkzh-zRk8j>sT)!TD=o-Z+BP3IUt(-7mob6Mg5Nz()_D3*`+rTvrYlUB~2nO(j?1}-Y?F?9P06vo6cw)JC|I!$^fR*OHb5o!Tg!|UNSwU;j`_5s3 zk50hHJx@Rc<-WTKNG&N)4Z5qte}(F1Al1|m=t6k&MtAduchiCVpM7({0cLZYKP7mm z!EYKsYPErf5P-x!E7 z{h#CgS8#4JKmqRoD`o*J0{>H*^@ba~Yg<%aI-*6Xy{{6|{Smx&tIz76JRtuuj|KTp zn8?0!Ip8CxNeQMZYISLd|CD@3&br()SS>7&4Y{iZ3eXBt+Y1W#hUp>#11Nyi>Vwp3 z_^)UIU2;7CNag1Qr8Oo~8;Pg0n?{{NlI};vrb7TUz-kphYBT*;2>Z_enE=c^8w$_N zeGPs4zYEj||SV8;G$UcPbKG5!b;9b)N zB25_ur)bjPx=j!2)&v5gG`ai>zJhA*f`vHC*KbCK6N>i?r z#(oCFBFNV#tIV`trZPDau!0J7!M^b%aOZ>W`fpZHz;Rk0RXA+;UAmQ6@g#{7zEh`p zl7~uDsD})O@ivxE)NA&M`cc)1Jn-?Kw>bY7=Ad2Ezpf(>C%GKB?*sk;uaLHc6YPnP zcFT9g#7QxZ7D0(PeN8sAurR|~=koaAeP#1g{=*z4e_51z@t~nfBu&5AJf#Fma5`Qc zNWHi@ZVgK*UuInA^1eQxE9i=_1B2AOQ=-I~kBV-{jN)XQQop&RxcRyp9G@=6$1T!f z#{LRdH!^c2P|FkgLLPh$emlOThWh=hp?rHgpW%OhSWvk6vj3iFB=!DeA$8QA{O#1N?lLdBes5H2~9*BI6=$nv*r5)u{z zWdNTw+FVhWTHLW-wq&V+Ze!W?g=vl7yR90rrCB>Y>i1V++j)!?&FT7c35TEJby#KoWA{b&(Cq|ueY#9@@`4H^Aw;LHAj$^E0BI2m|DLm{*^N=oXGLoEfv zH&c^x!p>W6JJ+$F-EKd&Sz|J zwG}Gx9fWODT6aKu#B-;Fnwi}de;xJl_C8UKl1tQimsIQEvEm|Rh;MeOY-UT2nZvEt zq;=%UXJTi^0tO8AA^Jl>I&fv#x8uOkY03$sa6sVMg0QY4@T=6SO2>h$SMG}FgCq8Z zi^rwHMHfQjUC3=zBo7U1ZT5m8n$>RvKtb@$HZ9ZYG^czZ&Ni9$%T$RFru8b0?itbn zekw_khy51BrJ@uR+9*5{DjHjY5;S6AVn^2wPx%XCA=$rwORh*_2qO7wNV-{eu*fDm^|S%0HKOnag=PXvK- zJ|C$?BjE`@F9xyB2iAI!-U1E_bbQA!R<3`I{OJpff4vn5j&3$9`9N|blnz1smna&7 z7@NBe%NxZANcp&%r3iGI%sEVSUyUZ&g&u@A*_wNLSx9+%{Akab46_YT>5I7qe%Nq=M`cbmwBO2c zrB`0A{9}wv8nl)Q`O_GMX`>V>9+t-p%(wzA7$n1(5pK)L-UetXnwK0v3!xEVgV2M) z3t3CU!_Cpc&?28kB})#&jxH!U2qXzvV#38ixBUf@A2isBXX=i zomXU*=Fr^0MxUE3>42%jv&~f&Z+cM}dy56dwLhdk?k8F^sZ8*{oCjBN**YX`Pb0@) z6s-i->RsM3-toFWFeRnf6o-e^9T76X7(>O+V|ZbPa3FJ{53Fg1MX8nta7z8laepx} zfcr<*Mk}o2wG%YJ3i*2yA(!s4c0@>kZw-jRclf73&kCg$nx1HJMI&J$XLJ3aj&PBU zCa2GWWh*DUrL#*#DTx2OB7`SJUgW|}U()Q8kQdTajIU6&l0Vnnb~Nw&?{sMscLV+f zD}ZSf2}Q!Ykuw6jS~N%t8SLjIATou8rR(SuK z6C)9WV-z%qEjC%d)64)(;QRFMH}1{gUkw_UW)-UM(A}olHK`nWqxP>vt%Abe_Z|c# zhqssQ)4&yp$BZW|j#5S{yZ=|$@d}X(tYbo|td6#@W{_14@I(Ex2(oJln;P!4X7Bkp zn&vqQA^VGaC@ek(v?f@xHBK}iPZ88T28msp3JQb_70R^FxLAZTKCp3wW9tvDj~tXD zV!1FN9Hu!zroSDk^Uq1&Nlw#L98w>MwT;~g;7?S7{ljC1=L@-ULx(yzw|RVI-*f?b z;Iei-ii>{-SmSR)SuEf(6*4k^V(72t(rgI(Wn8N7T`O)TbGRGO>gBn9f%|}8==;BL zp`!At=h49Sz@Y+#hfbZ7$J3xXD6|3(AW#hv@{4~W(-(qh14*?(c!vz7Mu!5dz&=CG zEl50ss+UZE{a`U?^;Alj9{mFkBkF`4yQ*0%KDbY!R0#T2GiTL3uVzlxOlmC-<@4Ew z77lB>L%M|(ZYH6#Fj+qMHV?b=EtT`%* zf5(BmpW)9a$q_*($)Pl^i9s1G{Ab3*P&dK;CCp)zKr$O~8skip2>lq>KCmQbvcjM1 z&aoNC;;{&vH+<5JH5uqd>R3`f;pmGyxeh46|XEsK+5 z-*R%sZiJk+^#hSM?^iivjUaDmgf|OlN&6Voal8{sg)R~GQ2ERI;}k@e=jWC=F#F1P z_tpE*;$8#zD-YBTUE7oBoNyyqQALm8QsdTrlt7O7bES8;JCfGL;rbAUR ztV23XnXO#N-@&c7Cqo*OiN3)pEtinWRh$Po!y^|iD*a<+4>fOwK!HB|ATEZFU@1PU zfEcduH?aH%(2ou-$$1hSJwT(4$R-V90r}Z$!{`oJwq?$TJZ^~oH|cG^1{IRyZ5;c+ znrNE+H3g0q);OcbtULe2c|0(|H=zzWZTjpbPSyosk+${tT8jCuOQ$dl$a0;*lbv(vDTtsDXIhtg!)wtT_xCAswWxnz=!WPx>p=$yir zOE0zobPsiW{q5Yk*U0OE4@?(v0tS|?9UnP0!}hkPrloRKck_2uQ2PlRY!}58*z=7F z=hJfGK*IjFUv)epX9Kvm&Ox9bPa=iZ0Sa@Z9D-|am46koIA@~rk48K`}YWh87{y+#{~*uaR8l ze&aH~U>Fv)VjUpk#Q&Krk}vutON|}~St2SyRVT}pIB+x*6CNusABOGxBg*jSLJ}@3 zEi(fNzp{Z;+8|y``I?)+7tM)~rV!s!(oRh-3OdIG2`3jF!<^@49Z8Uh23bGI?;pDi z_HO7M9deKbvx4Nzv7fXlxTv~i#~JhDv4q&qFmPjxcwE&1#9oCD z>+yO`bAELZ@m(^1|T<6KZ$C40z{JeW_W+x#xDB;FG3o@s}<$bB@>$faN+@)@Wj4hOG1F;tk34;K?~?H=L3C4O)l(cpaI^A(PF;q_z#!t!2sJ zCbRX{9<8%bATCzOMzQZ;cRcBbmO$sucA<`I-=u)T@o-Cd*-g+G(Tkl)8C&1Z(VSoW z-2ZK_{P#wWISWxeNM6(bXERfYOTNptJ&8^FxZg%d&@0r0b%<FyY_?N*J+=sT-pU9olt!}e zOut(~sJPdgcixwz5W{I4iWT;EhqV(Am0Y`%74~gj_HO#ohPRP*vSu#3+$Xfq+&K26 z0Yk7C_F^|Yy~}f<_o3leh+!Ln9FST)PA&?>H-@uL8RqSBW-Wi0Yw69p=aTNwUpZDD zwnFLc-x^AvpNd-v6rRvDvYrLx7&Z+_98|pJY`@eCJ&E?%=Y+1HOfaXr zn9I2jmO#dwN-O1MKYDlKY#;!TCZ>NS#{IGvG@3y$uliUUUv8Rom>G>zv~9Ee5lJ!s zjoDB~=9!q+%DgBs-GCGmE=~*qi4Xq`=MPe!&O?F$lLf1&E5&Yw9e&_9#9y8B#_{H7 zT!>jIzebaG-Xf(kwb(6oR)qPKyL~yXRqygLrl($kE zhK{EZlbf$)vm#;37@D&I1Ih%9jyi(wLawR#XNKp zc`$NTszS`@<>!?dzO>GVDASp;)stlxpy30%YSl6KvsA+0>0E3hdv)%1$p4s|%jHe~A9%zO28+BKaTJC^64PuMQy-223DJ-z2=A1;Yo zm`0P4UVtn6X8C2qUY&{EoTYQ?XX6^**^w@i@!!R%MjPa3Ck-z@A^%~q5If;vGiNLP zPSLYLb#UarzP)VPrub}myL18UH7{8y8$?V=%SnY+s3~Zg?$f?0Ul5leUOGiy$PdTmK zc%h!Tr#cPNGTi8-WqbU2M|Vi8wH6TGGWbFXmJ;4r<5#t{`#HEZO^d&BFw>&<%j@Qg z<}__Px{BzZZ$8?_teYmnQRY^8$mHQyTDZ0u)7!mPH)ZxR66V{_Q~ok2yuEtN9e=!U z*&?e-03z;x^TpFqb2+=Nq>HiXh`5%@^~{e6bhV7oHcPbozxR*PHjMHKu};4iUBA^s zZY~`!P=0G+cJp3rE3_Xjt!bcr5RVgbaHM{C1cg~;ptoJGEe9_hYaV9wUn9@BnGqnC zzwVlzzE7p5X7g^_|z`tu+(t0zuDGtb_TR6 z9z9lcP3OmnYvJGAF8N3!x=_M^$)Z32;)VRtmrYt|_k8c|V(VB?vmICQy=pffhWXLH z^Wibw3xUuD=Nie@-Hl)z7YcVJHavDvKgmJvAZqZ@G0{;|cqcqZ{~WBrO8puukK2TG z8%VZC87QFRy3;Ck-onefk_poO)FcKKk9U&&l@p@<@wds zA6d=l`f$0fEkyc>zD%gkWGA=!8>_ATeKtDOsT8%_Z}8}={zP{{x?~L6NZWQox_Ai_ zd*hI2yDO5tRfEw|*YLK>VX|g`ITJWx#s9igS35)1<7-T1b3DRVpILCdy7cc`H^JpI ze9L}>AG&c^9$}A7@ls$$t2ZZ1|H~DweqZJ7GRw&CVN}Yln$2f|8OJpd7rUBX^s5ZZ=Rra2a*?7TmI2rnO< zr81H`SQM;yH@$QP;DOcAu%?_<{b7^337IS_=;>BP+0n@3qWmO2jyVs^YR_Jyu-nYV zhHi#`uj>4^_)G|ukzJ?>loXxK7eB_X(@J6*!yJqiVaNpuXmHe-$S2-=1+dSTZWspy zX(T`m{|E`f{0KqsfdUnJ`Q}0&^gtl<`ed9LG^pk|s8W_Kd_!vczIe$`@>)?Ii5-?9 zNIVW6zLiDR<>@uwq8`c2b~POd&dm^QXC7X6*4_SO&6P-$j-<3>@iPxFBc#LZ)$-}K zVEVe7dvzi3e9Z8dpzk+*9wAy?oozFnrngvIn6kr>pD3GQe`vf+e|c4K3FMraI|08} z+SB?O81vdGh^xarB`?jZ?1(ToVY_`Q)8zw80&D z=ogb;T~FaD?dZX2*N`{cU*F+A?s?`U zWP42uRM{Uf(Hg%c@w<@RB=E8amSy^t0AA8_v9_O=rZ0W;aH+Qj7(KLywZ^pD)Simj z24nbMSDRk`?r*&(Y{^HLr^A!oCqbm6! zT(TDGJSy;c=@LIxeK*d#fl9w;x=hb2b-zQdPG`OG9xUbT+`H-$CD}7HDlixBPXzNZ zSf?gGrr*en5zHh9!w<%cU}s#l-!%Hklm;$;V?TgzizF z%dm7fE^pHT#z#x2|k;Z9DQx6Yu%ey@kwOYvCblQvg>E z@4<(wG8+J>3VvWCnz|#l#)zswv|kU$aYmk9ri0i?Q^(vE{5e0@=fNds{lunBNoNlV zvnd`)Vd%MV!0nqh23*-r31~X)7bcA>1q@o8&o{ncix~tM3VYCW(1swhIf7t;zyIDh zuTi|x7ak84ldGcO1xOmt>>YJ^VEcZ4$4jmWp?GJG$Nj_s(W^-3bLPACSzE5cub{1e zQN)bFJMn(yM9Z_}pc90Bk0Vh5y*(e;O-ttn~N1QvAqx5dzb)yv1 zUGQ@C^%c6XI^@opU9%bA0qnbI)!5rc%1~cD z+`3_*F+Avhk>t3|`2&L1PRDIY;8k zvyh;g4V8_MrL?liYdx6I85zSce&)MUN$&MVOgqAG`BXA%AwBrkj})p$p^^14&$+`X z{z%8A-KCTU=oGR1_LUtCA+qhp0N*EL`7`rj?sx*7S*)?0oo`zG%G7x1IU9U2H8C^p zMgE*I*7`2CHX^@D>jn%1WlKni4xO@jx{9@gYs|QxWw0Na#EkWn>zy+y(olR2m)dSw zOwnHu&bD3SmCv$e_H`exSHIX@3&dEP^m1%8I_}uX;%sm*$RA_L>}&i`=|SraVHQ)) zpedhw>JQ%az^rA+Q0QnimRmRx{CyqJjGQ5SAG!1#E6PVRF{Zod-RWU$WU$j+;_CIp z5R<~MhsluRv1oCcEhQk|8TZ@lxr0mIuyxuuJNA9GA#}o9Bc)M7ZIce~D5>jE#Jh6U zv!VOcc`n5UV5FDwpq3#0oA=?-aCVk5jOzM6PNqS$MnAv~lz3ud@P?Ec{e{K~SQ_9dMcZJ=oAj=H(biS+SK!3>-Wa%mz=m2dc5B$g1 zCtSi3`ymnbZBOkTLgIf|nJ%1gjB_klCrr#$RYKVGKmEFIc?gmiT-Z49i`IF_tt~NF z4qI|e;5kbv^>aLSynJCbGvAr7i?vhtIiIqcac_OL)ujBu?~rucc|)B&8p3&hzV;<> zV>u94=_tuNZON!N?)81?jP~e_PuXy!nA!D3G9+^U_?g+2*q4`}8VdQ=vCN=pd zB(Xrs=j|4@N+?d75wxw!py+Iu36?rU9UsA^B)o0 zYUfVu*I&1TA$jt%qmvSmg@k>6bM~X&0~6xMJ^|g9X}#yaUVA=B&$G5l)wO05RM!01 zb@wH#FNWUMeI|O9WMo{9#-#^>I+=$BhwPhncfwWv5um)VtMD8>IQ0SQ4$QQW(wdfm&ux945*D?_Q z@S#$N^QV9?`~GAU!lk3)_{yjHJ=vinaedn8ru8M&_YtxF!Do8UjB7!WpzUcW6xs!y zKrm<y3(Q z;KIOQD^Ee}UMYTY%n<7*NCpn?k`#J8dYb9$eDLw319CHn7nr1rG9hz5VqX(%{gR4f zBGog3g^L-X$MK`$Lo5eORllB{p4zK^_ZYSB-kA8wfNL=m=qN9VFZcs93=I?ERqnF? ztumha{V^zy_JXPHL*GJW{wrPT+{uhXDZ<<^M*c4KHg4(LxF+5H-`H4w5Pw4*{iS|@ z>GM#HbY|{?Qu%CeV9c*b=9aA)2WH>8ZGSz-AY0$TkbI&KhOj^>WjAdvKflka$iH(| zn0-)oj#oIWlZGn|D3~nGrn=Y0XY@r^*LZVaA~x7 z{yTP(rf*HH)mk4bnCGoMaoYclmeBL?Wv_pm;7+eTO86r2FOar$E#xrT;fMY8@?edEe{p(X@1Igc&e~8Cj&hbqJ$%VDkNCGFTh$jISZYvM^Cg&9=@gWb?2b#7j z-Ad@g;d&#KO}wqcSsakdE^5eHmewK`(ml(0`_-SeaWXaHzI>DRaK4J2S&)A5U08INEg57$PZ||Z`zsM1+V5YD$Ljta zV`VvVskE8(u=f%uR~2vdcwxti1;-qP-`|-S7=G09_WVkqvJt}sYzWbtjc%0(A_}+|&O=$Kj|d1`qnfzJuc`dk{CM#C0j`?t9Mn z1H8Fu6Ggf_!9J6{w#1d~(B2l+@9lwdhUZe(Mq$k~hTq;%&$K&yyxRKJrq|jLaes-- zFLgUljCn1S#W5L9>G+$NPE9B^XkF2oU0^RY1zF~T&Ik+cYjyj zZO?HrW?!^stkYlg-VSLv=6Ire)$eTfSf6Zn1K-C?euiOMKafc{FPIloz?gzqWe|5w>n;*{r(Xmap_W+14Dr~4v>!Uh4IX~75d|_ zOTyd8bfsQbPMqNxdDHpUZE$2e2wttYD zVR{6RYorFquQ?Gm`MaIiSgYPjJV>ql?5ms9bYWeMI(Gh#!TNBUT%}K?kW_jy#RFc( zZ@AFpmwkDDpH$=kgz%^>JSzI8*;# z{dVKVdh~2REdopo8rJ(<4v5yBHp6bo`Z%mGn3)mD(w=(yqItV>V{6OGzgK@Ivto<= zH{mHU_eyQ$fh6b;hUZSuYxaK_|E(Hj{7)Ra<*Nt#jgRBMwf_NRjb03FdS7%bnExO1 z|Bo5}dzb&a^;4nN?^$I#^xu{=+*~nnCtsAyA%L{zoYOU6nR*rxF{Fmz`3!Y4O#3&7 zDaOY!OOegGk2#eazpu%;o`JEyuZTUFm0qhs&6Yuh&&pBlg)gf@s^is}9FSic3IRUv zU!d|260L_XW4ep+_-D}dt|?ZKifO?oh0pP4i{W3?+*cNdOOfuDZ!O$~>+P7O-vPP~=ewNtl=c&RjtpZvUM zzPz@>Mx8YYOqfqAwxhk{8Av4-zg(z7HQ2q&C_DTjTlRfE`qBfPUb+wlI%4N?^pN}7 zei$DjU#~t$DxJHwN(y2Klh}GQ7|vkrur@quMSR!d@zPk)D(X{??blK z5t^Z8!!|3m)HkNEJ1H1-(5m1W+Q^U5vk#G?^E|WN%6#i~X)xnKLb*RdRp_h!x$ z*H`;nZsYx(bY`jzRd*RX>zjs+)x_?(OZf?FgW*=B#`V^9b%O6a+Hgn6*^t%04?};h zI5!6Yu!4sfR!kNiZ0qD(^?17kr)|$m+kQZ&W0e^1OeSm~oE3qlMB03D2$ntqt&>;# z%+VOkxJpR&(_9(ll`UmFB-Gc`&m9Lp?eDaD0`^UiD;ma(w{U6K}C zWhSEQ)>P>Uk6nJhP5zM0+*%MmZ5gg0c39u%U8M1yMfHrAk41TW)Z*59IN4*1KPx4Q zYk%r^tB&f562|3HG~*lp$;d@OgCh(*17dE9VRp(=y489k_}~h>DBer6W#eXB-FQtX zydn|t&}wVnSTJNi%mN%`s?tyU|IC0dC-iHi-^-Y)DVMQ3rI=tFw@gf54_s(SNQh9b zu!^m_xcZ$lpINAmSwL8I8;Jw;F1#?;`@Mz#FFz?G$0QW3k? z+A~AXv0m$$ssvgCx&|W6U)kZkXNE>&-*U9kjrIZX4YE-g6=bH1lRaM0cy_C<9yt;U zt6nY@e-#(UbptZRg$0CYW&BjpI#OSmiH@KwZHWA-@7mN)w?H3Kl6I z>}*3~Ey5s#G3Yw^-fwhR^>BhcYTOAeL|Vji+xZ~3oIh6wm-#MY&&+k@HVY}2v~>QL zGX5uBv@4}#f{8H1{QTeMYtM+ZBA(h*(r~Gedghnogu^V-(SePsZB=&D#QMge zZgd2a$xZvbt!Ow7;8ZoO{0F`N`inm4D&Q54iWI=4n z6^xJi+npzkY~{t78f{v=p5g7r%S?iNpbt{$kK%i^H&;UTFj8=c#vW|BG)44H`(;jF zip47M6QAMr+cnck4ee_c$jTNc_m6SxJRN^sn}wt&udtsz(T=0WE=1yhq!xEHDJZ(V zDY93Z&6VK~5n1u~H?6OUe&UEVvYkM)FSci9LJh57F1-|j0!gd8?!7!lZeH$L2Vb7h zIV|e$=qq{ho_*d7!J`qso^m^Yz4RZ4{ONMw@m*s?hwt8@wCfO^Csn+{!cG$LwBgJu z3uf!6*at!g(W|X1-jM-WinpK`>=ugNn>CC3WQ%k#=Fs)O?vaD4lC`5ox)&%NCf1YW zW>URGMm<4Q#{Qsm8N?;C=Svpq2U;Xz&9?aG1eWTn=dzhjvy$&;)UuPz{wo zruBMjMhGUpGkN3_&?)}VNv;u-&|qcO2b58e`nFKc^Q~qDER_bZAgY?CuF(5(*YOKV zVK2<4qD?`XQnf*4o89NPwUW;^}&4Se~G6ZfC5P=H}4$o5d$;ATa0DFwG1^ZX{5B_jL**cO9{m7@FMQn~G3ONsB0CA%B zMD}|-44dzs-ufcW?bbzSUJ01TJZb}MRdA^R5R|Wxj{4FmC!6I1XcU^XVz_{{8D{AK z2ViZQSr?!V$e3zY4NxcpB_B}IVJkGr##qr|%P&w$l>(4~OA1Y*G5mD4i6 z*<@nYfzv4^(lNGl%4ud505Uo&SvJEM8=zvkSqvbxJd1Kvl8#!I%_znN7?*Aq2PiGC zN+|)xAka;g<5G>v(tQJ_$+3yYV3y%BkFwH5$g9yyMFS+ta2chV08&7t6tf}#WEpK* ziD-;J-CfxUi_**uaNh$*nNaw4tpZbF#Tqec{Xd$0W7Oo%TPPbU* zESF3#6$4PFODUI4Ay-3)1bEWf11V+ES;93DVgXik2W6~srfEM&!;KK~0X2XafB^zF zRU6@% z2Z=y`#!(sIyI2fr`AZ*wMD|vIE|6hVm~JQYK!|Q9{eXxrkYaQb*h@8<3+yEuJqPwu zkA4UCl8;USdnrd_fxV=o_rQzv13tQf^aDJ)f{cSzpdi&~Do~JY^bmNFe4q^!q#i8= z3X+cw0|hBZLxF;%qaVPF46{stA#jUkv=6vNF{(`GDT|(5q8`%-@KSKe1bE52L;^O; zI}Kxu>i*J|d^yP&1!NnE!tS{-5h? z?%%Z!A2~!$ZK7m$5HULm80>g<_Fg*sZ0;Wkgq;9qqaN`0hw}Lrr{MYXft6Ce$k1)- zXBs8($wpf9F!FUY{NW&?g^A?pk~KmsCoQLr|qC$B#OT#ztF4U&ffB$&q>d1GGh1urJY-L_nV*%~AeWich})D4CE?J|Kq0SJJ?8Nrcsu-og~c zl01?urFEiQM#M;0>qD2MK|`)g8IFnoJ_1WHO2{NbqhqR@$V(32>Q9SA)Xo@6SfcxjdgtgK z@fHG0ROqfTOGHxc%}WxaK1CnMu>J~_3l}Y2(?05#1V~=1@Ayexr`!{j?4tE4Jz!(` zqynAL`iSL(&>!?DJ*ZDKOSFIfWnWN`WWneYl`5dwP?$ZADxmU>II*F>vn#3m`ImA5 zQ!)|rlI#^L-9HYPh#@5Yzhp|OqUJr|p*YAV-og;zsdkdus!##Zb5=Z#A()HOS@ zOQKZg|HBzW3lxNMB{*|ogkp2*i(xe}^JTa59`_5oP6KOCkVvSlYcW6#mL@O7v0Ia3V<{y zn-DltXk|5|ImuI^o&`igfWs6C`17nK#psc1_~nvR=;NUIq^MGSPTqqoX!?rYe}0QD z6ErVM&qsQI2FVb|JF?D5I$3$<^APqa32s|UqGoK%_|JpYP}Dp}$gJpMf2uejidooq4N0G0}?>4Jo0V39hx{~xZQV-Oh5FP^x=6Bd{5w|Km3|y zkY{jpuyFqi^9Jj#U-A`k&ux#xMC82?qLB1DQ8oz4ALO{&n;v_!xT6$Asms zF!Xx;g{r{1s4(J_>p}fCR!C)x)>=WTq2u2VAs)uCgcz94^Fm&ap z0JfGv@L6Bm*HeE}uqT*#Px$2;`bum^`S)co3xqp_>7L`%L_rVZxuBQcir-bE{f&Kx z{lgZ@J4PpRCsrqP=X%O<7yLWop7c@|c<+pB%CYasc~Jv&eMmpPgJF1ky`;YOpckJr zo->^@yfd3K`k7(W6EmyIU7l0H1>aone9N+b%dx?IT>;0k{T!Zcv^6HnZ62{LYJPj4 zkh?8N0(AI!njaLqiC`@r?* zk2>?K#y9ki9FW3u8AE`BO|QQzzHx@9?Z#i5nwiI51^DjQr-tTo;lfv=v*YUSG85a~ zclr!7mD`FcWw!RTXpS0A=I^A$sU9%-60j=jRn_mwqUV z^Xk3>qceov&b2c5Z2fuNd_5$$+nL-nW?r0o=7)+Zdcv(}ftXnxuFI369yd^bymxQI zB|L=fgLdlI?6<7W+v&sz_?;APC}|H$1;mi4k#K>QvCkt6|1={d__1M%vDI;YOX>8P zgC^Qy_9=^4jMlVtZD=N+aLpjDSt7H%hu@-`g8tL`>)7-C$u;}mCD}=P5Bw|%77y&w zGps^LxaeVW1~68r^BqKt&Ih(%RJKD32Ns;};x4piO^_$4_uTh5i->r!*5K^HRv;_E z&Vy4!+6M7WxEc{akXjH^AzCJQjQ|~pRxldy*bpgEjz%;P1bzri5wQ-~5_sF7zX>rb zP8Q@ej1@SSD3>!iD<&K`NAT$&rwKhPbQY2#1T_R^@a-V42_q{EF0uxAx+t_NN*shV zgjf+0E_fao66`;M)(~J36fOi3OiT#52^uRJE*Jm;T2wd*_5l_`RHTR{3Go5kHQ1gM z@dmOFoMaDLP?Uuf^C#GrD1Q=6XRrn-v@^tnC`J+-FPMM{Bu23JAc77U2O4Y^7=;Pg zL$IR-kFcgFIPahiWMm=<3<@}G$aM(hpx0o>pmDHMa6^a)WDrC@L_btNm@up`4x*hZjWwHZV!IX#RT<+VUKN3Z4Z6VbdPLLY!7@d(1fQE@dV-u z@(TJ2+!I0|7;YXuETku-Cs-gvAoz0da*!otGgv=FKR7oeH`o}A2Z9G|Gx$8@JlHP8 zF8F)M_h5z)hTy4?sbGZ=h2Yqb*kHsE#Nhjo`{264u0cLgSZ8i$>_+G{q`V1y>2|lg zpoIH5mruS~k@3IBykCUJg@^C|7o#><6gVMUFa?bB2v`E{AUY(k8JG;xzfAo9C*%J< zHz1*9&gF@3R(O2p)y72JAE$^T4OMQI5uxt5!iRdMpK)z02E z#n^w^I8M|!>9Ow5CdpduqMNPw#`p~a{?GgRiMgTG_Sm^Ie;T`LGnP%?k!!P=eoW_$=&fP2 zYbY>D?TGtxlW~!hqZx4qv@Wr)Ak>;T*kkF(H)x%tFQom{uP@hb;(F1WQnor@qq7&< zMEfu(^;w~?&d)GHw6~}f565CzP%Jrp^+9yH`=#$(RpxSVEjw*?Wv(1UFK=GmVAFVj-mT}j>_yIoyp zkmb<~w>ji#Ms;oZ+{8TdW$qI+H9&EeNcfL~q-XtOjSRI(2F-?eIP*aeZg*Jins`R$ zbbPHL3A>#35y}q({mkYG$uC1_j#$RF;pr~`$kLd(Hg(}ajQU9ahFci9hWLuA13?f? z^5tb-&|rGM)*EE$F0k`(Iz7?u5wzJ?@uu&AWOu;f9MTK%dR-+5hms{uMA9QCDMbk2ANaYqb@#>9bz!g?h=v`*8I+ zviR+zcP~HS`l=B<(gz*V2hNE}OQ8)_7!$o=AX%rF|@3WJKz=^O?$NISgFF9P+K z3`s~=g~B`mmn=^4ilaESjrn;M^8J4n**|2?5SCr1J1QjboTMXZo9*1#zdfw458rdd z*DMsBDUEHBmHH++RbPB$EF_;QPAGC_V{oYFWuqJxcRa$w_Ak=-8`sz(99QHT2-blINS4i1THe;veukFHeLvir5isEL^Q?@;ymmFIs+J;2} zpZ;`y%E@{x>hqL5hokCmWNj-N%)53i_wop89iFB6Hn3(I>)JcEd(mk7zJL;IGKzkY z&NXPu)uXy)-w}-p;LKH61J|&Qx;97{35SG&bknn%wauzu=XWTlq@AGfKVKeD7hYZhQY81aZ z4;)6d$krOMP^F_D=&+OJM+DQYr)Hcfu+v4tR%2URHMeLtOYsTjUSzCZPh>;^7MD8R|semvtSU10V6XLfp_MNahcsEA4SRIu)cSX|a-vmK7rl=;_K7~q#Dgoa#H;@GZuv%4aG%n=hW(5qznx@C`?NNA*gX_!k!4A zLF_&0{Try!T?r-=?KvM%P-D0p!T1wpHYo5*mEgpx5Dv(CuIklfjN@aDtCtw}5*0P^zA zC>yQr+D|)zY-n$ypF-lI{K|6PY^XQl{UNaKq z^`LC6bM)_twEKO5@RZ+XUY}k*Lt_0&rXNO|+SoJOwGCg+*MQFW5PAI~{n<-w%xo2p zuDx<3)9|^J-vW`xftE!&uvnkO#;eha&PkLzMg@d*_JEgdpEvCDZU ztu#bI1HSXLS3G#p(y%;yA9#)fztYe$GtO@xJocqFRu3nXVh_J7YBhbYrS|CHTBzaC zAzHas2mtRGJwSQ!_p!lN&?|_#f9rX^@A0^ABhHxjxN^?KeJoy`0anA&lSh zx+UtMwJpZPWcAn;GCpnFDl&E`NT+O>I#iI8b<&InoSEp?=#@Bl*=HJmL2z4|an<{K z4(GOzBue=vo%hhs1=UAOQg&z-|Qs66Jn&=3~$3uVk- z++r^+x43-WKX=pLeC_bDBWT7~G^f^~X*3D1|6!z)X0X)UUuP;VrKUC-7SaC5G!}Qp zS0CrXprxWGWV=096Ay{QLe$F{u+nREk5M_Jm|cxTWQuEgm06fH;Cr~}!y)tgI5CUQ z>2z#)EUyB(&rN5@4SJ3bsDSv>`PtubFEPkjjpFvYnoQYzLS$vY1jP-j?5odkDPw)N zrxP?kD6FO&<7%5`*?-&laO>~i&vvxt{^W8wbzI#5z{bKdA{YK-2Mrd1>wf*(@fzgv zXhYr24HLprlT3=O3XX8b6jeQoLL;4IM;awc0ZV2~ZM1I-Mtr7?DW&hM!>nFj2`}+z z*VC@ka&gM@X!zng-U$m{TkRh(9_YV*qe`T-7Cc@*_L)73V6g8)JPKKTC1vJ`BKvmj zw7m~zUW@*G3B#T>ZkOm58rt;&&imJq)jtTONx?Lh52rV|==o~3h}4nkWY4lF8KF7= zW#=ZpcQC1gt%xg>m#1iF@BqMDw?k7@pX85*c^g92s&JBPk(PMF2H;djo0OE4_2jW>StDI zN!nRYNld3|%^2$QT$`VpISqH(f-4j4ZJ7?8JbJ=n8u+s7W-!jzvn3R|ctKO<^aV^i zgRZVDY)p5ji-%J4E{dr(iaJ_3F?3EpP_;O4%a+xhp`8rjfvP5G6PCU`zA|jCyUOjp zIp8Z7pL1ZnCj$_HfBk}!pK$iZM3ATXzTO7!UQxsT20=JYn?!seH%8fkeg6#IE61C@ z89>%j`{EwS9YV5V4aNHht9(oSPYH%2YY6Gf+S}f_T+$ z1(Ozt`xLpvn+1hM|7(wq{%DdL!q?2b;6S}n&=%|1qUg-X%Cmyi?O?<17=F}jwBTS@ zn>vcy?GTEtHR`^Zq2@T!F$}EBSak5KOzQ|usf8RgHRGLvfm_`Ym*}7qPaiy?iq*f7JwPY*;ofHatX&&{sSYTiu-hCN<=A zNC(Qd8Sl}bgAF%1Gy~x<7*DtYOw@#&H6z+GgpcTKVz3g)39xvJTCg@aMr>7PFn2dJ8EB9txg6Y0sq`GoFMJ;~>1;VhxK@6AzhYd1TO3FP z{9pyJezQT?#Uzt;PDhgYDTq>MZrGod9A~L<1*#Pi82*X{NEWaV=g6<8CNK#x$yoSj zvI}azaxkJ4P_oiV1CUo{Ann>fl&~gp$;)u81>s`{tYk^>dNK(s)k%iK3%+MdH5G4k5^k%agDj zh|TwBK*l81;O>d(K^JAh>iPbLeYxmypVuPIZvBa^YW!l~r?>$GXbLSxA5@Fu%O#c3 zk4QznQ%V|5fKiw|*z+(gCW{uPvHX^$nZ)J?VDXD;DvmQeWJM73IIBVMBUq3iGnFI6 z(V}a|RG{eA7(x703w37`d`oO*qUwQ=LXHb#l2-X9jfzW(nDclq~~6iB9o}ks|_Y znW^}jf%o3D|LiGbrP}>BF8Kgr(GSS%!^7ly8NqT|46;o7Qq(iAKaoD{sR?%R=mgTt zM=n@{nZ;{=gHoLwX7HW|s1L^=7fc&my29lE^oIq)(!j zL`sYskb-cEa3>|zpaRsvr1vqE=?Dm_fSg#eFtlPYDH)S)fVv7ZjmQIoQ1{AO6CK#T zoCt5#>q4G8WmBEo3h~f_1P1o0BTmnP2!8+F1D{wDj!VEER6eNR|M; z#iSHwq6yO*SM$WvQ!I^l&_B{o*0aISGDT5MXu9U=f_mYl&$5^1cz=95QOgCvSGj6k zk|tf^x@y8pPUsEwrP;6fCud|$-FLA5pinr+9Db_d0XzL)A7Ywb-|FXlfAh(O@~`WJ zzSgYi)H|o*2Ir`Dt5!lw)Gy(y5Cb**G-(r~L~7`;{0?B$q>doDK9p^w+T7*?i|LJZvU`7m0BA4dG z3sOis&{^>sbIrQNdwnx5?Io4);YZD<{r&T8{<|3~3{x6BE0S9X=ZtB*Yo$n^-+7DF zhs_}AjB&Mcp$;-!qBN%&GAEphIp;79x_ThHB(ev;+Pr3&aQ9d354@7QLroN4=7ml- zcWP_&$z2V=PmqzunASp|HAQ}#`y*Q(LzSBv^`*50p}I?X@tgnvmW$sjHn|`|7Tx?& zv)|<(JF&lMYZC4$$|ZHBTVLAFcZ}ECI`QV56-7S&_;XeJMfSk0j-vdf##urVM%T$(l+0jtI2Na)`O-rc3q^u>BkHX*P^!EzMFcC4U zbz<0+%H~~F+e_8@;kIGLlUYWEcxRI8eC7M}M3Y!)4U0B?x%FKKiQXD^OGc3;8sSyy zJtxBqyFokJ4DiTapK|G6GQUE1x?3)UBJgl~4 za57*%@)DE=O&54;g5`lsR%S;|Wy6k36Nk^8CLhI%PZX^V&%fqrLpuf%H?oen=roz2Wqyx{f~bE??Y4C~EZX0Bp^S@3CGVyg`x4M5 z+}R!K6(?PylFRKZeI&n0SI9HZ|BTXc3E`JfpKv_6UK9M!Ytu((WiJGE21vTx?LLb`hLj&j%)%OluMgTC%{PQ0l~W@eu*9SQE0} zRg)SGq3Fy~z7a?T4KrV3p+^*nb{374ty5TPwTH2VwbFwSMT!09O&6BPr#Bf!a_IMY$_a26uq>N3D|gO2z?YS}t+ zzd@t~qHLIPC%;Rtq&dfrmoY`dW1p z#!HjIhCm+kO6Ksx>eL4R1Sczt972dJCZil|^To?en)JX&8%&en(&NiY2Ls@}03dlL zTjjfqP=A)=kk%pX!zn@^NY`<3vXjC-MRtesCjF6pu*Xg4GGQX9XJZBXoR~^cXjY`0 zf>b=Bk0ys53G92Y#fk!mbcwVvDb9n3i=<|3NRh6D?0Wdt8Hhudg@DIMK-M{1fQ#_$ zK|DbzQt5TNm7NKui!)_#w-#ivV?{9*p*WM+|32X&MU=HvRfbQA(GUMMAM<-IPr?}Xw4W`xX zI3P_~&`eND-C{(XSr8CgVM((qQcct+&Y|Mb5!sZ*ITBSN^NVZ-jex-;5!2hOO5*C= zvS}zN(er%#tv!8Ut-PbVx>`P zCEO$Hm3H9J80YS`(FRC|kQW?D%^JRJ=_*GECU_#UO(E@)82QyIuN2W`v;@FF5C-az zF0Va?qdost(L;nyIN=E0D8b?)Fde~JG#AeHXGE7l0l0|ePtqL1q9kTS2OUvR%Z;+-aE*?3lW+-8d z1s+-I2{O1A$vEjtxohifw;CDBqE7vE*MFI1#@Kw8y4L^CUC@+PXwY!`|Q$2qh)X z8#vLBk2FfLKE`B-K*pkUD4bk!H^S)-=zrt$o5Re%Z~rDl`^mV!-QK|c3fPg*{U!K+ zkC3tTE&te}eI|%dkLeEh{~Vu(j+nuHavycz5q)06)Fw)OxDPycY+I=Q%?mtlUl&*t zj4d7G;3x&})h{S0a055$xA}Q!pWP~>UY^n~)*}Dj-E&0EnFP@H$082G7UI4mLSz4k zv||cZVBI2e8>}?Dnikf94IY9#+{WL3Vjc2;?i2>ggk%*CT_V`W&fRN==p+JXMm4z^ z@-CF_lu>flhcpNZCV*gtG7;=2V;-y;cYt(W2kT%MJb@fb#own_aux!2Bptj&VZ|8q z#*f3Xv)kHeudsslo+)&42+`Nq)j!S**6ydm?65GT4`Z<-?64}nfNX<5I?nIT89m}$1LjdhXEqRCl*Dtph;E^?D!1GRw|r7B~N z+zLGvJPy*tI(qnPtVzzylXrMlG_JxbvTB`g&r^BXaoO=G@FgSoxE zw+FR%3pxLm7Y9Xo`-4sQacQIkmKYVu-lY#y%f0U}=TfWY%}q zU`m1KObPpPYXBjvuS)Kdkvv*pth?c!gT}Gn1?f0S%ko4B8-akwJKIL#z{tcez>ar? zjZ4?wdTAfsa&w>xGfS^R{+4W?ik?{RfG9L59hww8D`D#%4ly?;M4GfiJ)*;u!6wrn zl>hE@}S@#(%rkp6wYY1oHRP!cBBY1Ytjh?jvh44a`ElBbE-{tk36>@C*3}R|$z9;@@DtIcCXa zGS zWOl!7+yHNd)SyH1m|r*CjYUIL0@cCI{N!Ci@M`q&r^g4}t)T6e&S$0J?9Y$SYNx{l zM&!Sr-7m6Mh|=GG;-ngsPC?pRn-C-_)?QHv0ou>+mS(+dsi6W^yEX!TDeOXLlu_4u zM*eFJW*!hRN8t158t;2P?YN+wce!G#0F!7#vhV#TS952G>Uia7rZ;f?G`2xc=_Y&S z^>;|JNWFJEU2>nr-a<(34P^P~+s$e{(z?)cy_U|PWUOv#q%vZ@ZHtBW7*+b+L;0QX zKXO85Vy@SY47_FU%0Z}IZODcJ@83SF$&ZZs^X;Q2wx?V7;{!n?kM~jA{46k-7p0b? zo&Ww=L7&1ao}K=*ov?MWedgGyz^MNfzfzv)d-10qf5f?2jP3X7uq%Z=cKZ!{;B79g zyt)4BxyRLc&1|l%cun3STP7>c))A9p9NLt${QM!AyTLGGbisZ5cjArE!RhD8hU z^RYjpN$L5(!U;`mkhv?u!?6-t%qD~_;)+$+sr{uneojr<#e^un(WE_=A*OXeP8GCr zC0Xe4Y$Pe-Qr*Lt4v6Sra~$cJtxhjKEuZ1__%3@IP9)@x80D{oS_>SU>Ibmh-Ns?F340kT@o)QXIJeQWif8ux%*iN9AL{M}ctXU1{U1{6jA=-Ru0E8(CiJ<>UUDD1ZEf1hOJa zudWKe-npjkZ@o94FEy|dIeM<2|5tnG9oIy*FYvv(Hn6S=sFVl_A|;s#X_R20tn30S zML>E9MIeDt5}K@{Ac~+^P(ctZC?HLG2LTlXlp@kWgou<-q!|KlaLaW!=e~FMem?KL ze>VRRew=gW_dO>w-!n7ej91|pYx=5TO;l&$=b+(c#i&)g1)nOs_&Dx2yb6EMts!;C zdw-5Zen{-_VAe|xrDmpa<(vM{f}G^Tq8B^;jzmn~_J22P!f1G38a;D@J03ZvR65&! z$s)&ZDX-?{u6made|X;Od48NmeaY(?Zt>+d&62G87EAh=pvT88-WW;mn}*M)6+&_? z{R76U%aZ%!VoiGA;{pb<-5<}ykcuj|s*dCBuhov+f!RXc7m7!tY@!)^MMRS)#SA{7 zel(o3@JtuNVP1? zuBM1epKhu%MhVJANUpjlqm6kHWX>N|UxbQ$KdJab#q-`zn{N_PdCtCW2QcV;vMAYy z{OAKa1uE(`Pce6w?}%J2jnUX!9P8+wITw8_K7KT3pOIL-^~-rCp9_5W5l->ys)Kny z6IUNyze1>*jhPcT5WM=5^}bc-we_s{*6GMdO8+#D-XWCP8<+m-%FIu0Zsn7)Rj3S& zj+-Vg%b?op7Ay{1TlvG4^eoH8G%s}bV%C)B^xY^|z2V4>HFxE7*h+MEP4s-w;Cg3) zK_l1QZuwbv?$~Kow@-DjVLksG@7WhD8A1{B%m&%ps%`xb>tg!(mBnA+WR8o@?e=}u zR9~)t{iV?6<6GIt(uvlrxOxGlv~@mt@m=LRMvVltA5Bl^UGF13TEhwmwC@ycc}wr^ zq9w1`svlx}tUyQQgLGTclTu%M1IBubF|@2 zY4#0IkM_uvnY|``&KtK?Gm4x>MPz(9(?+T82Tk=tq!!v)ob(|!NpOFNT*Pzo)xZ?G z-%MD>`OtRSSPHZF{b|n4RNB3et12mJflv;e8%|O6Kj}jKIC*qsxI%=EY9F_^&ViHX z-LTT{d!sW+AyPA)J4x91PHIgmv@%xYdCWd?DYLsINI&A?U9^#h*6{u~SMh7J8f%dU z#7FzNB~F(x`g92&4#^P`MV$jqaGDyQZdDN#MAlI*an`?=tVnuj-auX1dE$pLhq0}x zd<(@-uZ|s#=;05K8OXQ29zaF@M}Skm+8|x1$<~6LS4ONh<2(QJ_I)chJruW+q2Amc zMlaRuml(lZ)p2#TXT*GJvCY{=>xx{LaJl1_ON-U3YM~U=dL@0ICjkN7+a9%`d``c* z=J0&4O>tN+>%)`gm`HoiY}otWxgL%mjAf=ayqBscKnjzNlU%>hbbyz z*uo~kwwO0j42%4Nz>}(RmD8%0ZWm~5&!s5C(#q7h-giOs!5U5-i|~UoyEDx4SjID{q46xE)3*3$ zAynm(M+E1g+H2?2;J|5)%6_M&GySdH1Y*gsTwT8IV&QgTwJ0XSc4+w#=FQf$$XIQg~Y=H(JX#KziRGq^upqO z^*W1+`b#~nD=wsn-wxaH?6lqKO;`N8-w%EFfTk-Yz+c((ZDU(waO%2LqHy{11Rn#c z{H-Gb+A=PEd8tfhnn6$Iu!vc=XMsz!g4AgHB;O1AM2~1}RsE`A(_^2cEi=f+2)&zR z1jECAym$WerEk3+DksFK#qf$8Rt(~hz`uW81QDNWGgW>o48!2X;gc0&by&afn9GtQWvhGXG1(i3tVQq zMDC9I2AP(ZaW_Vm?RSxQD%>I1Q37ca+RZ>D}vVM^}|3V;fE~e7! ze)O^T$O15N(fx}ZBcbx7(G@<)j|~Tc9(cbsU$pA9W@8y0lETN`ESW(Fx z91s3jpOhJwzsMGu-L%smpQ>HeW_0R;A6@Uby%^nO=DKXoPIUp(d%Ltw^}pQua2sZq z$9?oCwQ|ZCG-O$a-TXp*!9` ztK`n~$vl3t#(`_nLa3^DFIQDwr2ae`+3l)G=@Gp#SBI~~Fs_e>pq)oLEY{X7X3U!u zhFJTtOsR@*rxm(ScW~bC30W~z3Eh9%A%m9}I2oYi{2{dc?2%~KHr%d2(7IO0me)z?ffh*J?nd6IFrk~!&3@Khy z*b_*}uaxe!OG~pbD|Q@k^K~odi(k?XF&~ikDby-dWd>wV9dJm?Gbp`(H!JEEqhr6Y zZ%(Sb&6~G9X56WY}(8Lj7PPgbZu)k^ggqBj=OHoY#9;AC1Z) zbhM6z-zr@yw}@C|J<}-^l-gtT__l=~?N#JOn!HO*US?v-hp7UrR{)KVYm`6t*bJxm zWW4(Qrv>ZimCv~COT*=bQws~CEz-^l_UR6v__W`8`1rrS7l6;;=srHTwz z-ug+@sGD(m9L;T9Gh&+VTyBrExVl~YD ze7fo9Yn~_QWjbDe{k^cHiNf^}C#z>=rmMNhwX$H5SIfYr#)Q*m8RNzto_PPHTVL%Np}4N3{ptDs(s7Mhyo`?P#7mh`-+`P@KiSPL z93|_TX{5zG5>pzDkPz8%^!AL7cXx^Z#k1Usf)pc@7}CIPU+)@G)KzBNbHkOax?=oH z#K#@F35u5fTTl8sJYQ)TvZ0mm`He{Fc%^&4e`%(VdwAEVsHv`Ezu{Al!b!KlvW6gm zK$(#foV%mlVy(2ilKI@J)VSnN1$##k>9APbYn^>NzWo{lcbp9IoBIzeoac~ z1Lr@-inLx9xA(7?xGovJ8>7QUgykZ>~{#~jHPna^-g3~#zt#NMltq( za-K{sd?7~GzMo)g&50NrvFo?ovgP6lY_ia^$b`f+VNRFL^a0D-sm}O>vQa~BiZ5M6 zMbq{91s%~MC55-r&GUA88k}vl9tkF?xr1_!(ybe9Xb%gjCm3VBLKMz%vb%TIyJu~U zC9GK;`xbkZUY)t=cex?04N1{CnLSY-7jQ)9XB{G@rK-%rvC+lQxB1Z>f=8lmuT{N6 z#EeXjwyNfdqWSfky>k2)P`)-#7W!k^oRB3?%7Kn%(=}Qt(QNZaH*v$ z%><`hl@|B04V9=_L`Ceo={tC@b@|i}58VbZcJk zvw@mFpLA1b&Re9xRKa#$Ecs5f@I{R$mk=ysTCHn(%`pqfUf zs9*{4HM^`UT;JR z<=Jehv1!38mH_(6yg5gPrK5X+jY;UwY+rTuFl$ZB2iV|^O&!gM5bpG-=qb(1EU>Tm z^C@k0c2xu?Y$5ZCW3NpbCoJh3Yo~j&k2vVjluCv^U$wDdm~>O#dYPyVlTXHLi0SiI z)d~8uRf6;RuT6U_lo?#tiNfK?EL&BxF0(;Y55wktjHa%KL}_VOT5l9X72RW>d&c>) zr;2yS47*q_*g$y)!*8a_NeSP!z01p_`ED&TZ;sg5w?y}wADXI7qTW`bskT$f+PX*d zlSWHFheQ;1bj16n7?##{#inRq=u##L2By2GE%nE2zmjhr7$*?Q6}#NqPW=~)h7rG7 z7|g)Oje^#ucv{<8ds?IQy=**}1IF4v{}AuLe9g7>S@iCqk2gE)`A+v! zs)&oDer?z7t9Gd#@?R2@x23tFkw2gzc`SOlA>_T{Pjs4{mo0@()^@U`(>!SQo)xJm zBO2WfWly7{eh;Fsc%1Tb<$qRCMlWypt3-Z<`ziuV&Cd3BVmB|k%NJfdTQtRm;!2@< zdLY?BU$V2aRkTIchV!J+$zM86pW^<@8y6?C7LuSf6?MqP+L`i89!T()H(!dOzpnfr z=825%?}`4Q3z^n#NRpT@Ng{<55C4*-0gdMJZ}sAz>nQ&opr|2h*^yxkGVB;g4kj2t z7)1<85r>z<5EU^PW%Qp)eyOQVvvacd`FCo5Rq{U_JR|{a?f<@8TwQU@0R@|*(0VkQC-Msh zrH4L3wWpz=U*D^lD&rIgkQx#BS}h(%rb-Hjm*+}fPnF33a|vVv|9Yil9Fg?(i4Zde z*W%;f>LI*loXwElUEAK6on3e4O~!SdZTW}jdo)Ss-yG83dpY6ImFO7l{QWl@4@ybb z9Nki2d=|I=UXZ%9$#CoJ{M3B^lz)*JyMZ&sT$<%O{q|AHdRvCxX5n}t$`+){PW(eM zevkNLOhVuIxlbwQ!mgseKX*|or7bJ+w@^4(HYXh#0a5$5(Y-@j5iKJWxZW^7Bk zvok3{@#WbG3s+Cs5CsK$ z{XMJC<_QVL^UIfK=dCw)UnQ?eFbf^a<7@3b(Ro@lZ)59SDQe}04`-v@u)cS{@%a$s z|EcQnhma2UU90b?23w=X%B|RF#P%x zlIJG`9`v~u1r6N@-Ekv=0qyb_7ag>gCzl_REnCAB6SLWJ-3lUCYZ?dNpW7MNr!V`A zWgNPF?mNp~nUo5Rlxl+U1)On&*WAV)o0VGW+k0%co~+#THcW5f4D3?gFt@VQYS+o9 zX>%eS8C#XocNLDKYbK-?D?~@Cdgj(}+`i#RR4|WmLxPBB_;lYn89zFo81J%vz;fSG z#m9`fm(mv-3AyuIDk_!3!ata7yKK4T+mL^pExKC++>4lWiv0#Y46+MA$d6xN5RAg( za9A8_`A@&akfpwtUnt~^|F;kxIm`c342BhWVhSXlx&)ZO8^dCeee{p*5wJuoPYj3S ztxLqfJmp9PWXJtudqfyv`%?^qfv^Bx1waf3h~WV-0w6{N#7Mj`7z2nwfEZwmU;qa) z9z0_S12|v+2MpkV0UR)Z0~t%6?P38OSO5nWz<~vDAfHg)Z2&m101hmG0}J3#0B|S( zIFRpT^W>rc;7|Z?C;&JV02~Sc4g~;*0)PVt;J^VmZ~zV*fCC5MzyUaL01jmT<>@ON zfCC5Mzymn&01iBW0}tT9132&i4m^MZ58yzKi9Bq000#lUfgG=R>Jk7P1ONvCz(D|T z5C9y=v6y$e01g6xg9zXt0yu~O4&>O*vt1&9g9zY29!tSn7r;RTa1a3;$o!C}JraO} z1mGY6I7k2v5`cpQ;6QxIn+t%0#LEF8hW>M12*b+(A-?1-$IAg>csU>pF9(F-<$y4} z91w<=1Hu3}AOHt45$DMnFjs*9K8GLx2L#}N02~m20|IbB01kl9AsD~`1I7d3a|qyb z2;g%F;ByGza|qyb2;g%F;ByGza|qyb2;g%F;ByGza|jC<4}i}hfX^X-&mn-%A%M>z zfX^X-&mn-%A%M>zfX^X-&mn-%A%M>zfX^X-&mn-%A%M@3TL8TK7Qp8az~>Oa=Mcc> z5WwdUz~{(w9C&j9_#6WG90K?p0{9#P_#6WG90K?p0{9#P_#6WG90K?p0{9$xMiOry z0DKMsd=3G84iNyyD}c`-fX^X-&mn-%A%M>zfX^X-&mn-%AtK0DKMud=3MAj@+Z<$r;A*a=-we!vLSd0H4DE zpThv3!vLSd0H4DEpD&-E|Jm^{z~?Z)=P<9z~?Z)=P<9z~?Z)=P&1A|^0AXAhU_1Ij1h?h_rhEQ!8J&cTJZS^p-o5I&8XNe2yR?qk!1w=>9Qr3Z#T)e{C-m~YE`3i|6w;9j Pgg Date: Tue, 1 Feb 2022 18:05:38 -0800 Subject: [PATCH 03/54] Allow .bin file syncing --- .gitignore | 2 +- gmmk_pro_ansi_gourdo1.bin | Bin 0 -> 39812 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 gmmk_pro_ansi_gourdo1.bin diff --git a/.gitignore b/.gitignore index 768f40b1918c..9ff2aeac9176 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,7 @@ api_data/v1 doxygen/ quantum/version.h -*.bin +# *.bin *.eep *.hex *.qmk diff --git a/gmmk_pro_ansi_gourdo1.bin b/gmmk_pro_ansi_gourdo1.bin new file mode 100644 index 0000000000000000000000000000000000000000..be1a04e05197a74cd149ab4fbc6ac26f44417c19 GIT binary patch literal 39812 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 literal 0 HcmV?d00001 From abd9e991ee9913db62bdc15ee35a66bf306ad564 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Wed, 2 Feb 2022 01:13:35 -0800 Subject: [PATCH 04/54] Moved Insert to Shift-Backspace so Shift-Delete still works in Windows Explorer. --- GMMK Pro Cheatsheet.pdf | Bin 98898 -> 98436 bytes gmmk_pro_ansi_gourdo1.bin | Bin 39812 -> 39812 bytes users/gourdo1/gourdo1.c | 33 ++++++++++++++++++++++++++++++++- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/GMMK Pro Cheatsheet.pdf b/GMMK Pro Cheatsheet.pdf index 9a7c5502a11d45e30d0151bf4766a61183e195f1..1afe611cfc0174950159b541dcaedf6027dedd3c 100644 GIT binary patch delta 64683 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 K)6&YS%l$7r9k~Yp delta 65143 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.pressed) { + // Detect the activation of either shift keys + if (mod_state & MOD_MASK_SHIFT) { + // First temporarily canceling both shifts so that + // shift isn't applied to the KC_INS keycode + del_mods(MOD_MASK_SHIFT); + register_code(KC_INS); + // Update the boolean variable to reflect the status of KC_INS + inskey_registered = true; + // Reapplying modifier state so that the held shift key(s) + // still work even after having tapped the Delete/Insert key. + set_mods(mod_state); + return false; + } + } else { // on release of KC_BSPC + // In case KC_INS is still being sent even after the release of KC_BSPC + if (inskey_registered) { + unregister_code(KC_INS); + inskey_registered = false; + return false; + } + } + } + +/* Add INS as SHIFT-modified DEL key case KC_DEL: { // Initialize a boolean variable that keeps track of the delete key status: registered or not? @@ -225,6 +254,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } } } +*/ + #ifdef IDLE_TIMEOUT_ENABLE case RGB_TOI: if(record->event.pressed) { From a194d904db67c6bb1048e7a4329430e45dd63d10 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Wed, 2 Feb 2022 01:23:46 -0800 Subject: [PATCH 05/54] Update kt60_m.c --- keyboards/keyten/kt60_m/kt60_m.c | 34 ++++++++++++++++---------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/keyboards/keyten/kt60_m/kt60_m.c b/keyboards/keyten/kt60_m/kt60_m.c index 63a7f8d6b6d8..7d4f7614c839 100644 --- a/keyboards/keyten/kt60_m/kt60_m.c +++ b/keyboards/keyten/kt60_m/kt60_m.c @@ -1,18 +1,18 @@ - /* Copyright 2022 Ivan Gromov (@key10iq) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - - + /* Copyright 2022 Ivan Gromov (@key10iq) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + #include "kt60_m.h" \ No newline at end of file From 0743ffbc62dad68d4d57f56f8dee136b873fab93 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Wed, 2 Feb 2022 02:03:31 -0800 Subject: [PATCH 06/54] Create readme.md --- .../gmmk/pro/ansi/keymaps/gourdo1/readme.md | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md new file mode 100644 index 000000000000..305311149d9c --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -0,0 +1,55 @@ +# gourdo1's GMMK Pro layout + +This layout is based on Jonavin's GMMK Pro layout with some modifications to functionality and RGB. + +Features: + * Most default Glorious shortcuts enabled + * Re-worked/simplified overlay numpad upon Capslock key hold (temp) or double press (locked) with RGB highlighting + * Capslock toggled by double press of left Shift key or FN+Capslock + * RGB backlit Capslock mode (under all alpha keys) + * Winkey-locked/gaming mode with RGB highlights under WSAD and nearby gaming keys + * Fn & N keys light up orange if system numlock is on indicating interference with numpad overlay (Fn+N to disable) + * Keyboard RGB backlights custom timeout value controlled via Fn + Encoder or "," and "." (default 15 minutes) + - setting to zero disables timeout + - indicators in FN layer using RGB in F-key and number rows to show the current timeout in minutes + * Home key on F-key row, Del key next to Backspace + * Insert accessible via Shift-Backspace + * Numpad layer (capslock key) disables much of keyboard, except X, C, V for cut, copy, paste, WASD become cursor keys and all number keys become numpad versions (so Alt character codes work regardless of which number keys you use) + * Numpad turns both (bottom right) right arrow and End keys into Numpad Enter for convenience. + * Encoder functionality: + - default is change volume + - FN Layer - change rgb idle timeout + - holding Left shift, change layers + - holding right shift, Navigate page up/down + - holding Left Ctrl, navigate prev/next word + - holding Right Ctrl, changes RGB hue/colour + - holding Left Alt, change media prev/next track + * PrtScrn, Scroll Lock, Pause/Break are top right on the keyboard: Fn+F11, Fn+F12, Fn+Home + * Capslock, Scroll Lock, and Num Lock (not set) indicators on left side LEDs + * Fn + Z to turn off all RGB lights except rgb indicators; press again to toggle + +Link to latest firmware binary: https://github.com/gourdo1/qmk_firmware/blob/master/gmmk_pro_ansi_gourdo1.bin + +rules.mk Options +================ + +STARTUP_NUMLOCK_ON = yes - turns on NUMLOCK by default +ENCODER_DEFAULTACTIONS_ENABLE = yes - Enabled default encoder funtions +TD_LSFT_CAPSLOCK_ENABLE = yes - This will enable double tap on Left Shift to toggle CAPSLOCK when using KC_LSFTCAPS +IDLE_TIMEOUT_ENABLE = yes - Enables Timer functionality; for RGB idle timeouts that can be changed dynamically +INVERT_NUMLOCK_INDICATOR - inverts the Numlock indicator, LED is on when numlock is off -- numlock interferes with numpad keys, so should generally be off when numpad layer is active. +COLEMAK_LAYER_ENABLE = yes - Enabled optional 5th layer for COLEMAK layout. Use Shift and encoder to enter 5th layer. + + +## All layers diagram +Default layer +![image](https://user-images.githubusercontent.com/71780717/124177658-82324880-da7e-11eb-9421-b69100131062.png) + +Fn Layer +![image](https://user-images.githubusercontent.com/71780717/131255937-06c9691b-835f-4c94-93e6-6d1dc3de272b.png) + +Layer 2 (Caps Lock Mod) +![image](https://user-images.githubusercontent.com/71780717/124177683-8b231a00-da7e-11eb-9434-e2475f679a54.png) + +Optional COLEMAK layer +![image](https://user-images.githubusercontent.com/71780717/131235050-980d2f54-2d23-4ae8-a83f-9fcdbe60d6cb.png) From 3789a4de45733bcd5fe85b05ff9c82c63fde5a1a Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Wed, 2 Feb 2022 07:39:15 -0800 Subject: [PATCH 07/54] Update readme.md --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index 305311149d9c..adf02954c512 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -3,6 +3,7 @@ This layout is based on Jonavin's GMMK Pro layout with some modifications to functionality and RGB. Features: + * Most default Glorious shortcuts enabled * Re-worked/simplified overlay numpad upon Capslock key hold (temp) or double press (locked) with RGB highlighting * Capslock toggled by double press of left Shift key or FN+Capslock From aa9eafd5858c46e8a8320bdc0ca9baf070d27475 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Wed, 2 Feb 2022 07:40:34 -0800 Subject: [PATCH 08/54] Update readme.md --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index adf02954c512..d54d4f1962fe 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -1,6 +1,6 @@ # gourdo1's GMMK Pro layout -This layout is based on Jonavin's GMMK Pro layout with some modifications to functionality and RGB. +This layout is based on Jonavin's GMMK Pro layout with some modifications to keymap, functionality and RGB. Features: From 809bf65e2ecaac8f2b143099f86ca3f86e5606ad Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Wed, 2 Feb 2022 16:01:30 -0800 Subject: [PATCH 09/54] GPL Copyright text updates --- .../gmmk/pro/ansi/keymaps/gourdo1/config.h | 32 ++++++++++--------- .../gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 6 ++-- .../pro/ansi/keymaps/gourdo1/rgb_matrix_map.h | 32 ++++++++++--------- users/gourdo1/gourdo1.c | 4 +-- users/gourdo1/gourdo1.h | 4 +-- users/gourdo1/gourdo1_encoder.c | 5 ++- 6 files changed, 43 insertions(+), 40 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/config.h b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/config.h index d5caf4a683a5..c0ec0b86130e 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/config.h +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/config.h @@ -1,18 +1,20 @@ -/* Copyright 2021 Jonavin Eng - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ +/* Copyright 2021 Jonavin Eng @Jonavin + Copyright 2022 gourdo1 + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + #pragma once diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c index 7096109e349f..05fdbbebab18 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c @@ -1,7 +1,7 @@ /* Copyright 2021 Glorious, LLC - Copyright 2021 Jonavin - Copyright 2022 @gourdo1 - + Copyright 2021 Jonavin Eng @Jonavin + Copyright 2022 gourdo1 + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rgb_matrix_map.h b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rgb_matrix_map.h index 333b67738e76..b17a35d0b672 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rgb_matrix_map.h +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rgb_matrix_map.h @@ -1,18 +1,20 @@ -/* Copyright 2021 Jonavin Eng - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ +/* Copyright 2021 Jonavin Eng @Jonavin + Copyright 2022 gourdo1 + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + #ifdef RGB_MATRIX_ENABLE diff --git a/users/gourdo1/gourdo1.c b/users/gourdo1/gourdo1.c index 2655b1fce2b0..5b9ef6cd79f1 100644 --- a/users/gourdo1/gourdo1.c +++ b/users/gourdo1/gourdo1.c @@ -1,6 +1,6 @@ - /* Copyright 2021 Jonavin Eng @Jonavin - + Copyright 2022 gourdo1 + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or diff --git a/users/gourdo1/gourdo1.h b/users/gourdo1/gourdo1.h index c976436b3fb1..a3274a83a439 100644 --- a/users/gourdo1/gourdo1.h +++ b/users/gourdo1/gourdo1.h @@ -1,6 +1,5 @@ - /* Copyright 2021 Jonavin Eng @Jonavin - Copyright 2022 @gourdo1 + Copyright 2022 gourdo1 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -16,6 +15,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ + #pragma once // DEFINE MACROS diff --git a/users/gourdo1/gourdo1_encoder.c b/users/gourdo1/gourdo1_encoder.c index a582e2db9673..3cc36513dc9c 100644 --- a/users/gourdo1/gourdo1_encoder.c +++ b/users/gourdo1/gourdo1_encoder.c @@ -1,7 +1,6 @@ - /* Copyright 2021 Jonavin Eng @Jonavin - Copyright 2022 @gourdo1 - + Copyright 2022 gourdo1 + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or From e41bb1e30ac7603117c4dfc3a2545927f33cdbea Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Wed, 2 Feb 2022 21:26:54 -0800 Subject: [PATCH 10/54] readme updates --- .../gmmk/pro/ansi/keymaps/gourdo1/readme.md | 55 +++++++++++-------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index d54d4f1962fe..07e42e7e7169 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -1,33 +1,44 @@ # gourdo1's GMMK Pro layout -This layout is based on Jonavin's GMMK Pro layout with some modifications to keymap, functionality and RGB. +This Windows-centric layout is based on Jonavin's GMMK Pro layout with some modifications to keymap, functionality and RGB. Features: +Basic Shortcuts * Most default Glorious shortcuts enabled - * Re-worked/simplified overlay numpad upon Capslock key hold (temp) or double press (locked) with RGB highlighting - * Capslock toggled by double press of left Shift key or FN+Capslock - * RGB backlit Capslock mode (under all alpha keys) - * Winkey-locked/gaming mode with RGB highlights under WSAD and nearby gaming keys - * Fn & N keys light up orange if system numlock is on indicating interference with numpad overlay (Fn+N to disable) - * Keyboard RGB backlights custom timeout value controlled via Fn + Encoder or "," and "." (default 15 minutes) - - setting to zero disables timeout - - indicators in FN layer using RGB in F-key and number rows to show the current timeout in minutes + * Fn-Backslash for Bootloader mode + * Capslock toggled by double tap of Left Shift key or FN + Capslock (RGB highlighted) + * Gaming mode (FN + Win-key) locks out Win-key as well as double-tap Shift Capslock; Also RGB highlights WSAD and nearby gaming related keys * Home key on F-key row, Del key next to Backspace - * Insert accessible via Shift-Backspace - * Numpad layer (capslock key) disables much of keyboard, except X, C, V for cut, copy, paste, WASD become cursor keys and all number keys become numpad versions (so Alt character codes work regardless of which number keys you use) - * Numpad turns both (bottom right) right arrow and End keys into Numpad Enter for convenience. - * Encoder functionality: - - default is change volume - - FN Layer - change rgb idle timeout - - holding Left shift, change layers - - holding right shift, Navigate page up/down - - holding Left Ctrl, navigate prev/next word - - holding Right Ctrl, changes RGB hue/colour - - holding Left Alt, change media prev/next track + * Insert accessible via Shift-Backspace (so shift delete still works in Windows Explorer) * PrtScrn, Scroll Lock, Pause/Break are top right on the keyboard: Fn+F11, Fn+F12, Fn+Home - * Capslock, Scroll Lock, and Num Lock (not set) indicators on left side LEDs - * Fn + Z to turn off all RGB lights except rgb indicators; press again to toggle + +Numpad Overlay Layer + * Re-worked/simplified overlay numpad upon Capslock key hold (temp) or double press (locked) with RGB highlighting + * Numpad layer (capslock key) disables much of keyboard, except X, C, V for cut, copy, paste, WASD become cursor keys and all number keys become numpad versions (so Alt character codes work regardless of which number keys you use) + * Numpad turns both right arrow and End keys into Numpad-Enter for convenience. + * Fn & N keys light up orange if system numlock is off (inverted status), indicating numpad keys will not deliver expected output (FN + N to toggle) + +Encoder Functionality + * Default knob turn changes volume; button press toggles mute + * FN knob turn changes RGB idle timeout + * holding Left Shift changes layers + * holding Right Shift navigates page up/down + * holding Left Ctrl navigates prev/next word + * holding Right Ctrl changes RGB hue/color + * holding Left Alt changes media prev/next track + +RGB + * RGB backlight lighting effect: FN + up/down + * RGB backlight effect speed: FN + left/right + * RGB backlight hue cycle: FN + A/D + * RGB backlight brightness: FN + W/S + * RGB backlight night mode toggle: FN + Z (indicators still work) + * RGB backlight timeout: FN + Encoder or "," and "." (default 15 minutes) + - indicators in FN layer using RGB in F-key and number rows to show the current timeout in minutes + * RGB indicators on left side LEDs: Capslock (green), Scroll Lock (red), and Num Lock not set (orange) + * FN + Z to turn off all RGB lights except rgb indicators; press again to toggle + Link to latest firmware binary: https://github.com/gourdo1/qmk_firmware/blob/master/gmmk_pro_ansi_gourdo1.bin From d0330bdd9df8d2c063dabe5926bc6c09cd83547b Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Thu, 3 Feb 2022 19:07:04 -0800 Subject: [PATCH 11/54] Update readme.md --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index 07e42e7e7169..3a49057cbe52 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -5,6 +5,7 @@ This Windows-centric layout is based on Jonavin's GMMK Pro layout with some modi Features: Basic Shortcuts + * Most default Glorious shortcuts enabled * Fn-Backslash for Bootloader mode * Capslock toggled by double tap of Left Shift key or FN + Capslock (RGB highlighted) @@ -14,12 +15,14 @@ Basic Shortcuts * PrtScrn, Scroll Lock, Pause/Break are top right on the keyboard: Fn+F11, Fn+F12, Fn+Home Numpad Overlay Layer + * Re-worked/simplified overlay numpad upon Capslock key hold (temp) or double press (locked) with RGB highlighting * Numpad layer (capslock key) disables much of keyboard, except X, C, V for cut, copy, paste, WASD become cursor keys and all number keys become numpad versions (so Alt character codes work regardless of which number keys you use) * Numpad turns both right arrow and End keys into Numpad-Enter for convenience. * Fn & N keys light up orange if system numlock is off (inverted status), indicating numpad keys will not deliver expected output (FN + N to toggle) Encoder Functionality + * Default knob turn changes volume; button press toggles mute * FN knob turn changes RGB idle timeout * holding Left Shift changes layers @@ -29,6 +32,7 @@ Encoder Functionality * holding Left Alt changes media prev/next track RGB + * RGB backlight lighting effect: FN + up/down * RGB backlight effect speed: FN + left/right * RGB backlight hue cycle: FN + A/D From 04b9634b601874df2c9da0482f4a1f1deedb3008 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Thu, 3 Feb 2022 19:07:58 -0800 Subject: [PATCH 12/54] Update readme.md --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index 3a49057cbe52..0093ad830df9 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -9,7 +9,8 @@ Basic Shortcuts * Most default Glorious shortcuts enabled * Fn-Backslash for Bootloader mode * Capslock toggled by double tap of Left Shift key or FN + Capslock (RGB highlighted) - * Gaming mode (FN + Win-key) locks out Win-key as well as double-tap Shift Capslock; Also RGB highlights WSAD and nearby gaming related keys + * Gaming mode (FN + Win-key) locks out Win-key as well as double-tap Shift Capslock; Also RGB highlights WSAD and nearby gaming + related keys * Home key on F-key row, Del key next to Backspace * Insert accessible via Shift-Backspace (so shift delete still works in Windows Explorer) * PrtScrn, Scroll Lock, Pause/Break are top right on the keyboard: Fn+F11, Fn+F12, Fn+Home @@ -17,9 +18,11 @@ Basic Shortcuts Numpad Overlay Layer * Re-worked/simplified overlay numpad upon Capslock key hold (temp) or double press (locked) with RGB highlighting - * Numpad layer (capslock key) disables much of keyboard, except X, C, V for cut, copy, paste, WASD become cursor keys and all number keys become numpad versions (so Alt character codes work regardless of which number keys you use) + * Numpad layer (capslock key) disables much of keyboard, except X, C, V for cut, copy, paste, WASD become cursor keys and all number + keys become numpad versions (so Alt character codes work regardless of which number keys you use) * Numpad turns both right arrow and End keys into Numpad-Enter for convenience. - * Fn & N keys light up orange if system numlock is off (inverted status), indicating numpad keys will not deliver expected output (FN + N to toggle) + * Fn & N keys light up orange if system numlock is off (inverted status), indicating numpad keys will not deliver expected output + (FN + N to toggle) Encoder Functionality From 29ccc3d974cdaaa1b2bec53fde9a1336756808ae Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Thu, 3 Feb 2022 19:42:33 -0800 Subject: [PATCH 13/54] Update readme.md --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index 0093ad830df9..b51b8e9a476e 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -46,8 +46,9 @@ RGB * RGB indicators on left side LEDs: Capslock (green), Scroll Lock (red), and Num Lock not set (orange) * FN + Z to turn off all RGB lights except rgb indicators; press again to toggle +Link to latest firmware binary: https://github.com/gourdo1/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/gourdo1/gmmk_pro_ansi_gourdo1.bin +Link to cheatsheet: https://github.com/gourdo1/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/gourdo1/GMMK_Pro_Cheatsheet.pdf -Link to latest firmware binary: https://github.com/gourdo1/qmk_firmware/blob/master/gmmk_pro_ansi_gourdo1.bin rules.mk Options ================ From b9b50e63886283e591656d6f73befe9651e1c129 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Thu, 3 Feb 2022 19:45:07 -0800 Subject: [PATCH 14/54] changes to prepare for pull request --- .gitignore | 2 +- gmmk_pro_ansi_gourdo1.bin | Bin 39812 -> 0 bytes .../keymaps/gourdo1/GMMK Pro Cheatsheet.pdf | Bin 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 gmmk_pro_ansi_gourdo1.bin rename GMMK Pro Cheatsheet.pdf => keyboards/gmmk/pro/ansi/keymaps/gourdo1/GMMK Pro Cheatsheet.pdf (100%) diff --git a/.gitignore b/.gitignore index 9ff2aeac9176..768f40b1918c 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,7 @@ api_data/v1 doxygen/ quantum/version.h -# *.bin +*.bin *.eep *.hex *.qmk diff --git a/gmmk_pro_ansi_gourdo1.bin b/gmmk_pro_ansi_gourdo1.bin deleted file mode 100644 index 8893f47f4945266c44f449dd21bc035d311a5ae4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39812 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 f@vzYRn=sN?ff*yN(C^mbP^=k-oDj Date: Thu, 3 Feb 2022 19:48:52 -0800 Subject: [PATCH 15/54] Update readme.md --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index b51b8e9a476e..311a7858ebb6 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -47,6 +47,7 @@ RGB * FN + Z to turn off all RGB lights except rgb indicators; press again to toggle Link to latest firmware binary: https://github.com/gourdo1/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/gourdo1/gmmk_pro_ansi_gourdo1.bin + Link to cheatsheet: https://github.com/gourdo1/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/gourdo1/GMMK_Pro_Cheatsheet.pdf From c41a27f8da50c1c56f273098ae8655bea44b9147 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Thu, 3 Feb 2022 19:50:27 -0800 Subject: [PATCH 16/54] pdf link fix --- ...K Pro Cheatsheet.pdf => GMMK_Pro_Cheatsheet.pdf} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename keyboards/gmmk/pro/ansi/keymaps/gourdo1/{GMMK Pro Cheatsheet.pdf => GMMK_Pro_Cheatsheet.pdf} (100%) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/GMMK Pro Cheatsheet.pdf b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/GMMK_Pro_Cheatsheet.pdf similarity index 100% rename from keyboards/gmmk/pro/ansi/keymaps/gourdo1/GMMK Pro Cheatsheet.pdf rename to keyboards/gmmk/pro/ansi/keymaps/gourdo1/GMMK_Pro_Cheatsheet.pdf From 2603f4454b150a3794463f83c58408b867b9b7ee Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Fri, 4 Feb 2022 09:52:53 -0800 Subject: [PATCH 17/54] Delete GMMK_Pro_Cheatsheet.pdf --- .../keymaps/gourdo1/GMMK_Pro_Cheatsheet.pdf | Bin 98436 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 keyboards/gmmk/pro/ansi/keymaps/gourdo1/GMMK_Pro_Cheatsheet.pdf diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/GMMK_Pro_Cheatsheet.pdf b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/GMMK_Pro_Cheatsheet.pdf deleted file mode 100644 index 1afe611cfc0174950159b541dcaedf6027dedd3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98436 zcmb@sWmp}{wl0hY3GO7wB)Ge~ySoK zX=6ewr)Og10AK)iE6_^mS(}gij1+8a90BxyRHXInEyS&j zZGbRuqLCp0sAj~&Lo03MsAmYo1Te6%{RUGpGjcJqm$NrAHnKOeHh3F^js2~MhX)?k z$lCC?H*cW-;nr_=Xa#MYtbs$)N}3ruXaX4Dth53Dw0mp%FFRl?z>ysP3P!=m!N$oR zI4;mtVOK{{MMphHBcLp*$P8e9Lj+1J0G2li=)Q=JwIi@ogdV{9yHA7x@Rzf+a`rX` zibjr_w7{IwDjB&t(u!LFlP2)zB>3kf{^lPr35I5R0yeIiKnywnD?0;#g`Pnh0F1}l z5$Kr%fay25sJ)GoEpW8oh4_6zt4OP4uV?LG`xb$L8?B%st&owknSqglr~nXGNl)Ja zsPd;If1-2%(ET$ZZ@_;iM8wR}(a4@w#1a^=kdc9np%JZ=k+q4VDS(BAj`hvT!O`AG z&k7#aHLW&XGj63W#&=CQ@3o_!-A)J@&?#vZOL6$2B2UO-;jp;&R*xz(MtN3?fum~f zmB(~Blo8$$oU2+~IL5eXV&t9Q%Q!^m?s@7it&iK&!!OmbloJ~tiwrK0MK14q73Nc3 zZqIS%Q+yt*CTH_NwBzN7?!s4|t77z#-`yM-o?#E!0!EF zfi&s@`shh}jrY>8S7>^ds$VH)F(YKT@=q_aBQxDlvTZYcpF>3oov~AGXgjY)4%V2I6-CCH^x!G$L?OxcJI*H+UG@8pi zz71JxLSu^?P-{TPIS@y%8K{cS$jjB>P}5$RxA`Pxe83u9$N+RkTSQMyB;~ zAFTi%5+hnbWkTK3-cJU;C$m+dHT`R#-UA zI1^r69@Ea%b4Wm8t)KEdwtETaQMiEgiWg_63y=D7`hC%#Ikd}$XRrQlGb0vkq1LVZ zJ;kLVv%neRxJY}Roy^%){zf2Dxv0-MpHod3FL8gD(=Ex6Qi-OImZ!Vb=X%uT6p9s)&d9`6JpbEK8d(qVLa3%6$jn~#fWM#nJTJL!`CyR3ZYuOlrr zUM3HYKZBei`r#`EWemFK{T@~sYujNd~CkZvoHSWo&;B$&6!ag=|75w z>Kp8AZ0V?3{oGyQ+@Q0>9(z}-hjeMdEoDsYNd%Hu7W(cil~=wunZsRU{N}s65FA4jDOS zzP6WV4Z;eT$uYhrA7=G^*xi|-REKBMrz>7K@V%b~sk{oPOKkc+87s}{!WBM0a2tqu z4i6v1U&pj~w%7YAU+-licHc>ecEkF;c-&okJa5(ddEB&R20Q<0`rfZA zQg}hx1uMJqWHpQql8i+cBi{r8?eskX?D1h!;@0Rg=+_nIr*NH*kvCqH1t}o+JqC|C zAkAofG!ltt%A~Qx$XRm_H|;}3taKa*k4secRu25+?@NL^f|OuBhh_vAqdC!0cNHk$J;J8s7I_5&O|Lu07fYuI+6E zA)RANhTch@f8uKVnWyZ4+_e53rfBGgBqHiCMMdFYH?}Ga$$c{UD1rnxE`bvs$$&24lr=>Ptyir%`jR61_;DrX zd3sRkDr2>om|H>U;GH_TyD`Co68@F1uZCl9>!y0I2Gx3+5a^f59sYtob=FAD0OG

uv?^ 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%0DjjSZ2@~3 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 a&Ivv9R+qWA2kLX9eV;WEISKrh^*;dD*GoJA From e9ef8a1baf7568d8dd9ca605a5ff775017dd03c1 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Fri, 4 Feb 2022 10:56:04 -0800 Subject: [PATCH 18/54] Update keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c Co-authored-by: Drashna Jaelre --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c index 05fdbbebab18..2c9d3be87842 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c @@ -314,13 +314,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { } } - void suspend_power_down_user(void) { - rgb_matrix_set_suspend_state(true); - } - - void suspend_wakeup_init_user(void) { - rgb_matrix_set_suspend_state(false); - } #endif From 7f69017c63528f0ec1d7a3b3eeb4a2dfc1f83285 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Fri, 4 Feb 2022 10:56:13 -0800 Subject: [PATCH 19/54] Update keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c Co-authored-by: Drashna Jaelre --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c index 2c9d3be87842..0f090a5de23e 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c @@ -320,7 +320,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { void keyboard_post_init_keymap(void) { // keyboard_post_init_user() moved to userspace #ifdef RGB_MATRIX_ENABLE - rgb_matrix_mode(RGB_MATRIX_SOLID_COLOR); + rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR); rgb_matrix_set_color_all(RGB_NAUTILUS); // Default startup colour activate_rgb_nightmode(false); // Set to true if you want to startup in nightmode, otherwise use Fn + Z to toggle #endif From 646b00f900b72208e9a729eb6e9e8e2c976a8c1a Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Fri, 4 Feb 2022 10:56:19 -0800 Subject: [PATCH 20/54] Update keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c Co-authored-by: Drashna Jaelre --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c index 0f090a5de23e..bb6fee854afa 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c @@ -321,7 +321,7 @@ void keyboard_post_init_keymap(void) { // keyboard_post_init_user() moved to userspace #ifdef RGB_MATRIX_ENABLE rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR); - rgb_matrix_set_color_all(RGB_NAUTILUS); // Default startup colour + rgb_matrix_sethsv_noeeprom(129, 255, 170); // Default startup colour activate_rgb_nightmode(false); // Set to true if you want to startup in nightmode, otherwise use Fn + Z to toggle #endif } From 9c3bfdcadadec146b3a1652c7f88f18b967b3a56 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Fri, 4 Feb 2022 11:09:14 -0800 Subject: [PATCH 21/54] Made recommended changes to keymap.c --- .../keymaps/gourdo1/GMMK_Pro_Cheatsheet.pdf | Bin 98436 -> 0 bytes .../gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 463 +++++++++--------- 2 files changed, 226 insertions(+), 237 deletions(-) delete mode 100644 keyboards/gmmk/pro/ansi/keymaps/gourdo1/GMMK_Pro_Cheatsheet.pdf diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/GMMK_Pro_Cheatsheet.pdf b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/GMMK_Pro_Cheatsheet.pdf deleted file mode 100644 index 1afe611cfc0174950159b541dcaedf6027dedd3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98436 zcmb@sWmp}{wl0hY3GO7wB)Ge~ySoK zX=6ewr)Og10AK)iE6_^mS(}gij1+8a90BxyRHXInEyS&j zZGbRuqLCp0sAj~&Lo03MsAmYo1Te6%{RUGpGjcJqm$NrAHnKOeHh3F^js2~MhX)?k z$lCC?H*cW-;nr_=Xa#MYtbs$)N}3ruXaX4Dth53Dw0mp%FFRl?z>ysP3P!=m!N$oR zI4;mtVOK{{MMphHBcLp*$P8e9Lj+1J0G2li=)Q=JwIi@ogdV{9yHA7x@Rzf+a`rX` zibjr_w7{IwDjB&t(u!LFlP2)zB>3kf{^lPr35I5R0yeIiKnywnD?0;#g`Pnh0F1}l z5$Kr%fay25sJ)GoEpW8oh4_6zt4OP4uV?LG`xb$L8?B%st&owknSqglr~nXGNl)Ja zsPd;If1-2%(ET$ZZ@_;iM8wR}(a4@w#1a^=kdc9np%JZ=k+q4VDS(BAj`hvT!O`AG z&k7#aHLW&XGj63W#&=CQ@3o_!-A)J@&?#vZOL6$2B2UO-;jp;&R*xz(MtN3?fum~f zmB(~Blo8$$oU2+~IL5eXV&t9Q%Q!^m?s@7it&iK&!!OmbloJ~tiwrK0MK14q73Nc3 zZqIS%Q+yt*CTH_NwBzN7?!s4|t77z#-`yM-o?#E!0!EF zfi&s@`shh}jrY>8S7>^ds$VH)F(YKT@=q_aBQxDlvTZYcpF>3oov~AGXgjY)4%V2I6-CCH^x!G$L?OxcJI*H+UG@8pi zz71JxLSu^?P-{TPIS@y%8K{cS$jjB>P}5$RxA`Pxe83u9$N+RkTSQMyB;~ zAFTi%5+hnbWkTK3-cJU;C$m+dHT`R#-UA zI1^r69@Ea%b4Wm8t)KEdwtETaQMiEgiWg_63y=D7`hC%#Ikd}$XRrQlGb0vkq1LVZ zJ;kLVv%neRxJY}Roy^%){zf2Dxv0-MpHod3FL8gD(=Ex6Qi-OImZ!Vb=X%uT6p9s)&d9`6JpbEK8d(qVLa3%6$jn~#fWM#nJTJL!`CyR3ZYuOlrr zUM3HYKZBei`r#`EWemFK{T@~sYujNd~CkZvoHSWo&;B$&6!ag=|75w z>Kp8AZ0V?3{oGyQ+@Q0>9(z}-hjeMdEoDsYNd%Hu7W(cil~=wunZsRU{N}s65FA4jDOS zzP6WV4Z;eT$uYhrA7=G^*xi|-REKBMrz>7K@V%b~sk{oPOKkc+87s}{!WBM0a2tqu z4i6v1U&pj~w%7YAU+-licHc>ecEkF;c-&okJa5(ddEB&R20Q<0`rfZA zQg}hx1uMJqWHpQql8i+cBi{r8?eskX?D1h!;@0Rg=+_nIr*NH*kvCqH1t}o+JqC|C zAkAofG!ltt%A~Qx$XRm_H|;}3taKa*k4secRu25+?@NL^f|OuBhh_vAqdC!0cNHk$J;J8s7I_5&O|Lu07fYuI+6E zA)RANhTch@f8uKVnWyZ4+_e53rfBGgBqHiCMMdFYH?}Ga$$c{UD1rnxE`bvs$$&24lr=>Ptyir%`jR61_;DrX zd3sRkDr2>om|H>U;GH_TyD`Co68@F1uZCl9>!y0I2Gx3+5a^f59sYtob=FAD0OG

uv?^ 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%0DjjSZ2@~3 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 a&Ivv9R+qWA2kLX9eV;WEISKrh^*;dD*GoJA diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c index 05fdbbebab18..22dbb980c4f9 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c @@ -19,27 +19,29 @@ along with this program. If not, see . // Note: Several advanced functions referenced in this file (like Tap Dance functions) are defined in users/gourdo1/gourdo1.c #include QMK_KEYBOARD_H + #include "rgb_matrix_map.h" + #include "gourdo1.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Base Layout - * - * ,-------------------------------------------------------------------------------------------------------------. - * | Esc || F1 | F2 | F3 | F4 || F5 | F6 | F7 | F8 || F9 | F10 | F11 | F12 || Home || Mute | - * |=============================================================================================================| - * | ` ~ | 1 ! | 2 @ | 3 # | 4 $ | 5 % | 6 ^ | 7 & | 8 * | 9 ( | 0 ) | - _ | = + | Backspc || Del | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| - * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ } | ] } | \ | || PgUp | - * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| - * | Capslock | A | S | D | F | G | H | J | K | L | ; : | ' " | Enter || PgDn | - * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| - * | LShift | Z | X | C | V | B | N | M | , < | . > | / ? | RShift || Up || End | - * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| - * | Ctrl | Win | LAlt | Space | RAlt | Fn | Ctrl || Left | Down | Rght | - * `------------------------------------------------------------------------------------------------------------' - */ + /* Base Layout + * + * ,-------------------------------------------------------------------------------------------------------------. + * | Esc || F1 | F2 | F3 | F4 || F5 | F6 | F7 | F8 || F9 | F10 | F11 | F12 || Home || Mute | + * |=============================================================================================================| + * | ` ~ | 1 ! | 2 @ | 3 # | 4 $ | 5 % | 6 ^ | 7 & | 8 * | 9 ( | 0 ) | - _ | = + | Backspc || Del | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ } | ] } | \ | || PgUp | + * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| + * | Capslock | A | S | D | F | G | H | J | K | L | ; : | ' " | Enter || PgDn | + * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| + * | LShift | Z | X | C | V | B | N | M | , < | . > | / ? | RShift || Up || End | + * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| + * | Ctrl | Win | LAlt | Space | RAlt | Fn | Ctrl || Left | Down | Rght | + * `------------------------------------------------------------------------------------------------------------' + */ [_BASE] = LAYOUT( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_MUTE, @@ -59,24 +61,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI ), -/* _LOWER (Numpad) Layout - * - * Note: A symbol preceeded by "P" is a Numpad-encoded version of the key -- any app that differentiates will recognize the char as coming from a physical numpad. - * - * ,-------------------------------------------------------------------------------------------------------------. - * | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ || ____ | - * |=============================================================================================================| - * | ____ | P1 | P2 | P3 | P4 | P5 | P6 | P7 | P8 | P9 | P0 | P- | P+ | ________ || ____ | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| - * | ______ | None | Up | None | None | None | None | P4 | P5 | P6 | P+ | ____ | ____ | _____ || ____ | - * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| - * | ________ | Left | Down | Rght | None| None | None | P1 | P2 | P3 | P* | ____ | P-Enter || ____ | - * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| - * | __________ | None | ____ | ____ | ____ | None | None | 0 | 00 | P. | P/ | ______ || ____ || ____ | - * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| - * | Ctrl | Win | LAlt | _____ | RAlt | Fn | Ctrl || ____ | ____ | ____ | - * `------------------------------------------------------------------------------------------------------------' - */ + /* _LOWER (Numpad) Layout + * Note: A symbol preceeded by "P" is a Numpad-encoded version of the key -- any app that differentiates will recognize the char as coming from a physical numpad. + * ,-------------------------------------------------------------------------------------------------------------. + * | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ || ____ | + * |=============================================================================================================| + * | ____ | P1 | P2 | P3 | P4 | P5 | P6 | P7 | P8 | P9 | P0 | P- | P+ | ________ || ____ | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| + * | ______ | None | Up | None | None | None | None | P4 | P5 | P6 | P+ | ____ | ____ | _____ || ____ | + * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| + * | ________ | Left | Down | Rght | None| None | None | P1 | P2 | P3 | P* | ____ | P-Enter || ____ | + * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| + * | __________ | None | ____ | ____ | ____ | None | None | 0 | 00 | P. | P/ | ______ || ____ || PEnt | + * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| + * | ____ | ____ | ____ | _____ | ____ | ____ | ____ || ____ | ____ | PEnt | + * `------------------------------------------------------------------------------------------------------------' + */ [_LOWER] = LAYOUT( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, @@ -96,240 +96,229 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), -#ifdef COLEMAK_LAYER_ENABLE - [_COLEMAK] = LAYOUT( + #ifdef COLEMAK_LAYER_ENABLE[_COLEMAK] = LAYOUT( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, TT(_LOWER), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_PGDN, KC_LSFTCAPSWIN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT - ), -#endif // COLEMAK_LAYER_ENABLE + ), + #endif // COLEMAK_LAYER_ENABLE }; -#if defined(ENCODER_ENABLE) && !defined(ENCODER_DEFAULTACTIONS_ENABLE) // Encoder Functionality when not using userspace defaults - void encoder_action_rgbhue(bool clockwise) { - if (clockwise) - rgblight_increase_hue_noeeprom(); - else - rgblight_decrease_hue_noeeprom(); - } +#if defined(ENCODER_ENABLE) && !defined(ENCODER_DEFAULTACTIONS_ENABLE) // Encoder Functionality when not using userspace defaults +void encoder_action_rgbhue(bool clockwise) { + if (clockwise) + rgblight_increase_hue_noeeprom(); + else + rgblight_decrease_hue_noeeprom(); +} - bool encoder_update_user(uint8_t index, bool clockwise) { - uint8_t mods_state = get_mods(); - if (mods_state & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, encoder changes layers - encoder_action_layerchange(clockwise); - } else if (mods_state & MOD_BIT(KC_RSFT) ) { // If you are holding R shift, Page up/dn - unregister_mods(MOD_BIT(KC_RSFT)); - encoder_action_navpage(clockwise); - register_mods(MOD_BIT(KC_RSFT)); - } else if (mods_state & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next/prev word - encoder_action_navword(clockwise); - } else if (mods_state & MOD_BIT(KC_RCTL)) { // if holding Right Ctrl, change rgb hue/colour - encoder_action_rgbhue(clockwise); - } else if (mods_state & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next/prev track - encoder_action_mediatrack(clockwise); - } else { - switch(get_highest_layer(layer_state)) { - case _FN1: - #ifdef IDLE_TIMEOUT_ENABLE - timeout_update_threshold(clockwise); - #endif - break; - default: - encoder_action_volume(clockwise); // Otherwise it just changes volume - break; - } +bool encoder_update_user(uint8_t index, bool clockwise) { + uint8_t mods_state = get_mods(); + if (mods_state & MOD_BIT(KC_LSFT)) { // If you are holding L shift, encoder changes layers + encoder_action_layerchange(clockwise); + } else if (mods_state & MOD_BIT(KC_RSFT)) { // If you are holding R shift, Page up/dn + unregister_mods(MOD_BIT(KC_RSFT)); + encoder_action_navpage(clockwise); + register_mods(MOD_BIT(KC_RSFT)); + } else if (mods_state & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next/prev word + encoder_action_navword(clockwise); + } else if (mods_state & MOD_BIT(KC_RCTL)) { // if holding Right Ctrl, change rgb hue/colour + encoder_action_rgbhue(clockwise); + } else if (mods_state & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next/prev track + encoder_action_mediatrack(clockwise); + } else { + switch (get_highest_layer(layer_state)) { + case _FN1: + #ifdef IDLE_TIMEOUT_ENABLE + timeout_update_threshold(clockwise); + #endif + break; + default: + encoder_action_volume(clockwise); // Otherwise it just changes volume + break; } - return true; } + return true; +} #endif // ENCODER_ENABLE && !ENCODER_DEFAULTACTIONS_ENABLE #ifdef RGB_MATRIX_ENABLE - // Capslock, Scroll lock and Numlock indicator on Left side lights. - void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { - if (get_rgb_nightmode()) rgb_matrix_set_color_all(RGB_OFF); +// Capslock, Scroll lock and Numlock indicator on Left side lights. +void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + if (get_rgb_nightmode()) rgb_matrix_set_color_all(RGB_OFF); -// Scroll Lock RGB setup - if (IS_HOST_LED_ON(USB_LED_SCROLL_LOCK)) { - rgb_matrix_set_color(LED_L3, RGB_RED); - rgb_matrix_set_color(LED_L4, RGB_RED); - rgb_matrix_set_color(LED_TAB, RGB_RED); - } + // Scroll Lock RGB setup + if (IS_HOST_LED_ON(USB_LED_SCROLL_LOCK)) { + rgb_matrix_set_color(LED_L3, RGB_RED); + rgb_matrix_set_color(LED_L4, RGB_RED); + rgb_matrix_set_color(LED_TAB, RGB_RED); + } -// System NumLock warning indicator RGB setup - #ifdef INVERT_NUMLOCK_INDICATOR - if (!IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // on if NUM lock is OFF to bring attention to overlay numpad not functional when enabled - rgb_matrix_set_color(LED_GRV, RGB_ORANGE2); - rgb_matrix_set_color(LED_L1, RGB_ORANGE2); - rgb_matrix_set_color(LED_L2, RGB_ORANGE2); - rgb_matrix_set_color(LED_N, RGB_ORANGE2); - rgb_matrix_set_color(LED_FN, RGB_ORANGE2); - } - #else - if (IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // Normal, on if NUM lock is ON - rgb_matrix_set_color(LED_GRV, RGB_ORANGE2); - rgb_matrix_set_color(LED_L1, RGB_ORANGE2); - rgb_matrix_set_color(LED_L2, RGB_ORANGE2); - rgb_matrix_set_color(LED_N, RGB_ORANGE2); - rgb_matrix_set_color(LED_FN, RGB_ORANGE2); - } - #endif // INVERT_NUMLOCK_INDICATOR + // System NumLock warning indicator RGB setup + #ifdef INVERT_NUMLOCK_INDICATOR + if (!IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // on if NUM lock is OFF to bring attention to overlay numpad not functional when enabled + rgb_matrix_set_color(LED_GRV, RGB_ORANGE2); + rgb_matrix_set_color(LED_L1, RGB_ORANGE2); + rgb_matrix_set_color(LED_L2, RGB_ORANGE2); + rgb_matrix_set_color(LED_N, RGB_ORANGE2); + rgb_matrix_set_color(LED_FN, RGB_ORANGE2); + } + #else + if (IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // Normal, on if NUM lock is ON + rgb_matrix_set_color(LED_GRV, RGB_ORANGE2); + rgb_matrix_set_color(LED_L1, RGB_ORANGE2); + rgb_matrix_set_color(LED_L2, RGB_ORANGE2); + rgb_matrix_set_color(LED_N, RGB_ORANGE2); + rgb_matrix_set_color(LED_FN, RGB_ORANGE2); + } + #endif // INVERT_NUMLOCK_INDICATOR -// CapsLock RGB setup - if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) { - for (uint8_t i=0; i= 140 minutes, just show these 3 lights - rgb_matrix_set_color(LED_LIST_NUMROW[10], RGB_CYAN); - rgb_matrix_set_color(LED_LIST_NUMROW[11], RGB_CYAN); - rgb_matrix_set_color(LED_LIST_NUMROW[12], RGB_CYAN); - } - break; + //NEW RGB LIGHTING TO CORRESPOND TO ACTIVE FN LAYER KEYS: + rgb_matrix_set_color(LED_F1, RGB_RED); + rgb_matrix_set_color(LED_F2, RGB_RED); + rgb_matrix_set_color(LED_F3, RGB_RED); + rgb_matrix_set_color(LED_F4, RGB_RED); + rgb_matrix_set_color(LED_F5, RGB_RED); + rgb_matrix_set_color(LED_F6, RGB_RED); + rgb_matrix_set_color(LED_F7, RGB_RED); + rgb_matrix_set_color(LED_F8, RGB_RED); + rgb_matrix_set_color(LED_F9, RGB_RED); + rgb_matrix_set_color(LED_F10, RGB_RED); + rgb_matrix_set_color(LED_F11, RGB_RED); + rgb_matrix_set_color(LED_INS, RGB_RED); + rgb_matrix_set_color(LED_W, RGB_RED); + rgb_matrix_set_color(LED_A, RGB_RED); + rgb_matrix_set_color(LED_S, RGB_RED); + rgb_matrix_set_color(LED_D, RGB_RED); + rgb_matrix_set_color(LED_Z, RGB_RED); + rgb_matrix_set_color(LED_LWIN, RGB_RED); + rgb_matrix_set_color(LED_U, RGB_RED); + rgb_matrix_set_color(LED_I, RGB_RED); + rgb_matrix_set_color(LED_O, RGB_RED); + rgb_matrix_set_color(LED_BSLS, RGB_RED); + rgb_matrix_set_color(LED_CAPS, RGB_RED); + rgb_matrix_set_color(LED_N, RGB_RED); + rgb_matrix_set_color(LED_COMM, RGB_RED); + rgb_matrix_set_color(LED_DOT, RGB_RED); + rgb_matrix_set_color(LED_PGUP, RGB_RED); + rgb_matrix_set_color(LED_PGDN, RGB_RED); + rgb_matrix_set_color(LED_END, RGB_RED); + rgb_matrix_set_color(LED_UP, RGB_RED); + rgb_matrix_set_color(LED_DOWN, RGB_RED); + rgb_matrix_set_color(LED_LEFT, RGB_RED); + rgb_matrix_set_color(LED_RIGHT, RGB_RED); -// Numpad overlay RGB - case _LOWER: - for (uint8_t i=0; i= 140 minutes, just show these 3 lights + rgb_matrix_set_color(LED_LIST_NUMROW[10], RGB_CYAN); + rgb_matrix_set_color(LED_LIST_NUMROW[11], RGB_CYAN); + rgb_matrix_set_color(LED_LIST_NUMROW[12], RGB_CYAN); + } + break; -// Colemak layer RGB -#ifdef COLEMAK_LAYER_ENABLE - case _COLEMAK: - for (uint8_t i=0; i Date: Fri, 4 Feb 2022 11:11:07 -0800 Subject: [PATCH 22/54] Update keymap.c --- .../gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 459 +++++++++--------- 1 file changed, 232 insertions(+), 227 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c index bb6fee854afa..1ce9b48018d0 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c @@ -19,27 +19,29 @@ along with this program. If not, see . // Note: Several advanced functions referenced in this file (like Tap Dance functions) are defined in users/gourdo1/gourdo1.c #include QMK_KEYBOARD_H + #include "rgb_matrix_map.h" + #include "gourdo1.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { -/* Base Layout - * - * ,-------------------------------------------------------------------------------------------------------------. - * | Esc || F1 | F2 | F3 | F4 || F5 | F6 | F7 | F8 || F9 | F10 | F11 | F12 || Home || Mute | - * |=============================================================================================================| - * | ` ~ | 1 ! | 2 @ | 3 # | 4 $ | 5 % | 6 ^ | 7 & | 8 * | 9 ( | 0 ) | - _ | = + | Backspc || Del | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| - * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ } | ] } | \ | || PgUp | - * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| - * | Capslock | A | S | D | F | G | H | J | K | L | ; : | ' " | Enter || PgDn | - * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| - * | LShift | Z | X | C | V | B | N | M | , < | . > | / ? | RShift || Up || End | - * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| - * | Ctrl | Win | LAlt | Space | RAlt | Fn | Ctrl || Left | Down | Rght | - * `------------------------------------------------------------------------------------------------------------' - */ + /* Base Layout + * + * ,-------------------------------------------------------------------------------------------------------------. + * | Esc || F1 | F2 | F3 | F4 || F5 | F6 | F7 | F8 || F9 | F10 | F11 | F12 || Home || Mute | + * |=============================================================================================================| + * | ` ~ | 1 ! | 2 @ | 3 # | 4 $ | 5 % | 6 ^ | 7 & | 8 * | 9 ( | 0 ) | - _ | = + | Backspc || Del | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ } | ] } | \ | || PgUp | + * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| + * | Capslock | A | S | D | F | G | H | J | K | L | ; : | ' " | Enter || PgDn | + * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| + * | LShift | Z | X | C | V | B | N | M | , < | . > | / ? | RShift || Up || End | + * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| + * | Ctrl | Win | LAlt | Space | RAlt | Fn | Ctrl || Left | Down | Rght | + * `------------------------------------------------------------------------------------------------------------' + */ [_BASE] = LAYOUT( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_MUTE, @@ -59,24 +61,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI ), -/* _LOWER (Numpad) Layout - * - * Note: A symbol preceeded by "P" is a Numpad-encoded version of the key -- any app that differentiates will recognize the char as coming from a physical numpad. - * - * ,-------------------------------------------------------------------------------------------------------------. - * | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ || ____ | - * |=============================================================================================================| - * | ____ | P1 | P2 | P3 | P4 | P5 | P6 | P7 | P8 | P9 | P0 | P- | P+ | ________ || ____ | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| - * | ______ | None | Up | None | None | None | None | P4 | P5 | P6 | P+ | ____ | ____ | _____ || ____ | - * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| - * | ________ | Left | Down | Rght | None| None | None | P1 | P2 | P3 | P* | ____ | P-Enter || ____ | - * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| - * | __________ | None | ____ | ____ | ____ | None | None | 0 | 00 | P. | P/ | ______ || ____ || ____ | - * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| - * | Ctrl | Win | LAlt | _____ | RAlt | Fn | Ctrl || ____ | ____ | ____ | - * `------------------------------------------------------------------------------------------------------------' - */ + /* _LOWER (Numpad) Layout + * Note: A symbol preceeded by "P" is a Numpad-encoded version of the key -- any app that differentiates will recognize the char as coming from a physical numpad. + * ,-------------------------------------------------------------------------------------------------------------. + * | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ || ____ | + * |=============================================================================================================| + * | ____ | P1 | P2 | P3 | P4 | P5 | P6 | P7 | P8 | P9 | P0 | P- | P+ | ________ || ____ | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| + * | ______ | None | Up | None | None | None | None | P4 | P5 | P6 | P+ | ____ | ____ | _____ || ____ | + * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| + * | ________ | Left | Down | Rght | None| None | None | P1 | P2 | P3 | P* | ____ | P-Enter || ____ | + * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| + * | __________ | None | ____ | ____ | ____ | None | None | 0 | 00 | P. | P/ | ______ || ____ || PEnt | + * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| + * | ____ | ____ | ____ | _____ | ____ | ____ | ____ || ____ | ____ | PEnt | + * `------------------------------------------------------------------------------------------------------------' + */ [_LOWER] = LAYOUT( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, @@ -96,233 +96,238 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ), -#ifdef COLEMAK_LAYER_ENABLE - [_COLEMAK] = LAYOUT( + #ifdef COLEMAK_LAYER_ENABLE[_COLEMAK] = LAYOUT( KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, TT(_LOWER), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_PGDN, KC_LSFTCAPSWIN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT - ), -#endif // COLEMAK_LAYER_ENABLE + ), + #endif // COLEMAK_LAYER_ENABLE }; -#if defined(ENCODER_ENABLE) && !defined(ENCODER_DEFAULTACTIONS_ENABLE) // Encoder Functionality when not using userspace defaults - void encoder_action_rgbhue(bool clockwise) { - if (clockwise) - rgblight_increase_hue_noeeprom(); - else - rgblight_decrease_hue_noeeprom(); - } +#if defined(ENCODER_ENABLE) && !defined(ENCODER_DEFAULTACTIONS_ENABLE) // Encoder Functionality when not using userspace defaults +void encoder_action_rgbhue(bool clockwise) { + if (clockwise) + rgblight_increase_hue_noeeprom(); + else + rgblight_decrease_hue_noeeprom(); +} - bool encoder_update_user(uint8_t index, bool clockwise) { - uint8_t mods_state = get_mods(); - if (mods_state & MOD_BIT(KC_LSFT) ) { // If you are holding L shift, encoder changes layers - encoder_action_layerchange(clockwise); - } else if (mods_state & MOD_BIT(KC_RSFT) ) { // If you are holding R shift, Page up/dn - unregister_mods(MOD_BIT(KC_RSFT)); - encoder_action_navpage(clockwise); - register_mods(MOD_BIT(KC_RSFT)); - } else if (mods_state & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next/prev word - encoder_action_navword(clockwise); - } else if (mods_state & MOD_BIT(KC_RCTL)) { // if holding Right Ctrl, change rgb hue/colour - encoder_action_rgbhue(clockwise); - } else if (mods_state & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next/prev track - encoder_action_mediatrack(clockwise); - } else { - switch(get_highest_layer(layer_state)) { - case _FN1: - #ifdef IDLE_TIMEOUT_ENABLE - timeout_update_threshold(clockwise); - #endif - break; - default: - encoder_action_volume(clockwise); // Otherwise it just changes volume - break; - } +bool encoder_update_user(uint8_t index, bool clockwise) { + uint8_t mods_state = get_mods(); + if (mods_state & MOD_BIT(KC_LSFT)) { // If you are holding L shift, encoder changes layers + encoder_action_layerchange(clockwise); + } else if (mods_state & MOD_BIT(KC_RSFT)) { // If you are holding R shift, Page up/dn + unregister_mods(MOD_BIT(KC_RSFT)); + encoder_action_navpage(clockwise); + register_mods(MOD_BIT(KC_RSFT)); + } else if (mods_state & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next/prev word + encoder_action_navword(clockwise); + } else if (mods_state & MOD_BIT(KC_RCTL)) { // if holding Right Ctrl, change rgb hue/colour + encoder_action_rgbhue(clockwise); + } else if (mods_state & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next/prev track + encoder_action_mediatrack(clockwise); + } else { + switch (get_highest_layer(layer_state)) { + case _FN1: + #ifdef IDLE_TIMEOUT_ENABLE + timeout_update_threshold(clockwise); + #endif + break; + default: + encoder_action_volume(clockwise); // Otherwise it just changes volume + break; } - return true; } + return true; +} #endif // ENCODER_ENABLE && !ENCODER_DEFAULTACTIONS_ENABLE #ifdef RGB_MATRIX_ENABLE - // Capslock, Scroll lock and Numlock indicator on Left side lights. - void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { - if (get_rgb_nightmode()) rgb_matrix_set_color_all(RGB_OFF); +// Capslock, Scroll lock and Numlock indicator on Left side lights. +void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + if (get_rgb_nightmode()) rgb_matrix_set_color_all(RGB_OFF); -// Scroll Lock RGB setup - if (IS_HOST_LED_ON(USB_LED_SCROLL_LOCK)) { - rgb_matrix_set_color(LED_L3, RGB_RED); - rgb_matrix_set_color(LED_L4, RGB_RED); - rgb_matrix_set_color(LED_TAB, RGB_RED); - } + // Scroll Lock RGB setup + if (IS_HOST_LED_ON(USB_LED_SCROLL_LOCK)) { + rgb_matrix_set_color(LED_L3, RGB_RED); + rgb_matrix_set_color(LED_L4, RGB_RED); + rgb_matrix_set_color(LED_TAB, RGB_RED); + } -// System NumLock warning indicator RGB setup - #ifdef INVERT_NUMLOCK_INDICATOR - if (!IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // on if NUM lock is OFF to bring attention to overlay numpad not functional when enabled - rgb_matrix_set_color(LED_GRV, RGB_ORANGE2); - rgb_matrix_set_color(LED_L1, RGB_ORANGE2); - rgb_matrix_set_color(LED_L2, RGB_ORANGE2); - rgb_matrix_set_color(LED_N, RGB_ORANGE2); - rgb_matrix_set_color(LED_FN, RGB_ORANGE2); - } - #else - if (IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // Normal, on if NUM lock is ON - rgb_matrix_set_color(LED_GRV, RGB_ORANGE2); - rgb_matrix_set_color(LED_L1, RGB_ORANGE2); - rgb_matrix_set_color(LED_L2, RGB_ORANGE2); - rgb_matrix_set_color(LED_N, RGB_ORANGE2); - rgb_matrix_set_color(LED_FN, RGB_ORANGE2); - } - #endif // INVERT_NUMLOCK_INDICATOR + // System NumLock warning indicator RGB setup + #ifdef INVERT_NUMLOCK_INDICATOR + if (!IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // on if NUM lock is OFF to bring attention to overlay numpad not functional when enabled + rgb_matrix_set_color(LED_GRV, RGB_ORANGE2); + rgb_matrix_set_color(LED_L1, RGB_ORANGE2); + rgb_matrix_set_color(LED_L2, RGB_ORANGE2); + rgb_matrix_set_color(LED_N, RGB_ORANGE2); + rgb_matrix_set_color(LED_FN, RGB_ORANGE2); + } + #else + if (IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // Normal, on if NUM lock is ON + rgb_matrix_set_color(LED_GRV, RGB_ORANGE2); + rgb_matrix_set_color(LED_L1, RGB_ORANGE2); + rgb_matrix_set_color(LED_L2, RGB_ORANGE2); + rgb_matrix_set_color(LED_N, RGB_ORANGE2); + rgb_matrix_set_color(LED_FN, RGB_ORANGE2); + } + #endif // INVERT_NUMLOCK_INDICATOR -// CapsLock RGB setup - if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) { - for (uint8_t i=0; i= 140 minutes, just show these 3 lights - rgb_matrix_set_color(LED_LIST_NUMROW[10], RGB_CYAN); - rgb_matrix_set_color(LED_LIST_NUMROW[11], RGB_CYAN); - rgb_matrix_set_color(LED_LIST_NUMROW[12], RGB_CYAN); - } - break; + uint16_t timeout_threshold = get_timeout_threshold(); + if (timeout_threshold <= 10) rgb_matrix_set_color(LED_LIST_FUNCROW[timeout_threshold], RGB_CYAN); + else if (timeout_threshold < 140) { + rgb_matrix_set_color(LED_LIST_FUNCROW[(timeout_threshold / 10)], RGB_CYAN); + rgb_matrix_set_color(LED_LIST_NUMROW[(timeout_threshold % 10)], RGB_CYAN); + } else { // >= 140 minutes, just show these 3 lights + rgb_matrix_set_color(LED_LIST_NUMROW[10], RGB_CYAN); + rgb_matrix_set_color(LED_LIST_NUMROW[11], RGB_CYAN); + rgb_matrix_set_color(LED_LIST_NUMROW[12], RGB_CYAN); + } + break; -// Numpad overlay RGB - case _LOWER: - for (uint8_t i=0; i>>>>>> 646b00f900b72208e9a729eb6e9e8e2c976a8c1a #endif - void keyboard_post_init_keymap(void) { // keyboard_post_init_user() moved to userspace #ifdef RGB_MATRIX_ENABLE +<<<<<<< HEAD + rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR); + rgb_matrix_sethsv_noeeprom(129, 255, 170); // Default startup colour + activate_rgb_nightmode(false); // Set to true if you want to startup in nightmode, otherwise use Fn + Z to toggle +======= rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR); rgb_matrix_sethsv_noeeprom(129, 255, 170); // Default startup colour activate_rgb_nightmode(false); // Set to true if you want to startup in nightmode, otherwise use Fn + Z to toggle +>>>>>>> 646b00f900b72208e9a729eb6e9e8e2c976a8c1a #endif } - From 8d50ae2515e7abe96f72f3bf8e6dc47601f44a48 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Fri, 4 Feb 2022 11:13:59 -0800 Subject: [PATCH 23/54] Update keymap.c --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c index 1ce9b48018d0..a340d070f8f1 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c @@ -283,7 +283,6 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { rgb_matrix_set_color(LED_CAPS, RGB_OFFBLUE); break; -<<<<<<< HEAD // RAISE mode (RGB color mix testing) case _RAISE: rgb_matrix_set_color(LED_Q, RGB_TEST1); @@ -313,21 +312,13 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { break; } } -======= ->>>>>>> 646b00f900b72208e9a729eb6e9e8e2c976a8c1a #endif void keyboard_post_init_keymap(void) { // keyboard_post_init_user() moved to userspace #ifdef RGB_MATRIX_ENABLE -<<<<<<< HEAD rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR); rgb_matrix_sethsv_noeeprom(129, 255, 170); // Default startup colour activate_rgb_nightmode(false); // Set to true if you want to startup in nightmode, otherwise use Fn + Z to toggle -======= - rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR); - rgb_matrix_sethsv_noeeprom(129, 255, 170); // Default startup colour - activate_rgb_nightmode(false); // Set to true if you want to startup in nightmode, otherwise use Fn + Z to toggle ->>>>>>> 646b00f900b72208e9a729eb6e9e8e2c976a8c1a #endif } From c8425bdf0f34a0e42a8756c0448e156b3cb4af86 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Fri, 4 Feb 2022 14:34:31 -0800 Subject: [PATCH 24/54] Delete keymap.c --- .../gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 324 ------------------ 1 file changed, 324 deletions(-) delete mode 100644 keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c deleted file mode 100644 index a340d070f8f1..000000000000 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c +++ /dev/null @@ -1,324 +0,0 @@ -/* Copyright 2021 Glorious, LLC - Copyright 2021 Jonavin Eng @Jonavin - Copyright 2022 gourdo1 - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -// Note: Several advanced functions referenced in this file (like Tap Dance functions) are defined in users/gourdo1/gourdo1.c - -#include QMK_KEYBOARD_H - -#include "rgb_matrix_map.h" - -#include "gourdo1.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - /* Base Layout - * - * ,-------------------------------------------------------------------------------------------------------------. - * | Esc || F1 | F2 | F3 | F4 || F5 | F6 | F7 | F8 || F9 | F10 | F11 | F12 || Home || Mute | - * |=============================================================================================================| - * | ` ~ | 1 ! | 2 @ | 3 # | 4 $ | 5 % | 6 ^ | 7 & | 8 * | 9 ( | 0 ) | - _ | = + | Backspc || Del | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| - * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ } | ] } | \ | || PgUp | - * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| - * | Capslock | A | S | D | F | G | H | J | K | L | ; : | ' " | Enter || PgDn | - * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| - * | LShift | Z | X | C | V | B | N | M | , < | . > | / ? | RShift || Up || End | - * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| - * | Ctrl | Win | LAlt | Space | RAlt | Fn | Ctrl || Left | Down | Rght | - * `------------------------------------------------------------------------------------------------------------' - */ - - [_BASE] = LAYOUT( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_MUTE, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, - TT(_LOWER), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, - KC_LSFTCAPSWIN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT - ), - - [_FN1] = LAYOUT( - _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_VOLD, KC_VOLU, KC_PSCR, KC_SLCK, KC_PAUS, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, - _______, _______, RGB_VAI, _______, _______, _______, _______, KC_PSCR, KC_SLCK, _______, KC_PAUS, _______, _______, RESET, KC_HOME, - KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, - _______, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, RGB_TOD, RGB_TOI, _______, _______, RGB_MOD, _______, - _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI - ), - - /* _LOWER (Numpad) Layout - * Note: A symbol preceeded by "P" is a Numpad-encoded version of the key -- any app that differentiates will recognize the char as coming from a physical numpad. - * ,-------------------------------------------------------------------------------------------------------------. - * | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ || ____ | - * |=============================================================================================================| - * | ____ | P1 | P2 | P3 | P4 | P5 | P6 | P7 | P8 | P9 | P0 | P- | P+ | ________ || ____ | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| - * | ______ | None | Up | None | None | None | None | P4 | P5 | P6 | P+ | ____ | ____ | _____ || ____ | - * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| - * | ________ | Left | Down | Rght | None| None | None | P1 | P2 | P3 | P* | ____ | P-Enter || ____ | - * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| - * | __________ | None | ____ | ____ | ____ | None | None | 0 | 00 | P. | P/ | ______ || ____ || PEnt | - * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| - * | ____ | ____ | ____ | _____ | ____ | ____ | ____ || ____ | ____ | PEnt | - * `------------------------------------------------------------------------------------------------------------' - */ - - [_LOWER] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, KC_PMNS, KC_PPLS, _______, _______, - _______, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_P4, KC_P5, KC_P6, KC_PPLS, _______, _______, _______, _______, - _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_P1, KC_P2, KC_P3, KC_PAST, _______, KC_PENT, _______, - _______, KC_NO, _______, _______, _______, KC_NO, KC_NO, KC_P0, KC_00, KC_PDOT, KC_PSLS, _______, _______, KC_PENT, - _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PENT - ), - - [_RAISE] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ - ), - - #ifdef COLEMAK_LAYER_ENABLE[_COLEMAK] = LAYOUT( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, - TT(_LOWER), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_PGDN, - KC_LSFTCAPSWIN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT - ), - #endif // COLEMAK_LAYER_ENABLE -}; - -#if defined(ENCODER_ENABLE) && !defined(ENCODER_DEFAULTACTIONS_ENABLE) // Encoder Functionality when not using userspace defaults -void encoder_action_rgbhue(bool clockwise) { - if (clockwise) - rgblight_increase_hue_noeeprom(); - else - rgblight_decrease_hue_noeeprom(); -} - -bool encoder_update_user(uint8_t index, bool clockwise) { - uint8_t mods_state = get_mods(); - if (mods_state & MOD_BIT(KC_LSFT)) { // If you are holding L shift, encoder changes layers - encoder_action_layerchange(clockwise); - } else if (mods_state & MOD_BIT(KC_RSFT)) { // If you are holding R shift, Page up/dn - unregister_mods(MOD_BIT(KC_RSFT)); - encoder_action_navpage(clockwise); - register_mods(MOD_BIT(KC_RSFT)); - } else if (mods_state & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next/prev word - encoder_action_navword(clockwise); - } else if (mods_state & MOD_BIT(KC_RCTL)) { // if holding Right Ctrl, change rgb hue/colour - encoder_action_rgbhue(clockwise); - } else if (mods_state & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next/prev track - encoder_action_mediatrack(clockwise); - } else { - switch (get_highest_layer(layer_state)) { - case _FN1: - #ifdef IDLE_TIMEOUT_ENABLE - timeout_update_threshold(clockwise); - #endif - break; - default: - encoder_action_volume(clockwise); // Otherwise it just changes volume - break; - } - } - return true; -} -#endif // ENCODER_ENABLE && !ENCODER_DEFAULTACTIONS_ENABLE - -#ifdef RGB_MATRIX_ENABLE -// Capslock, Scroll lock and Numlock indicator on Left side lights. -void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { - if (get_rgb_nightmode()) rgb_matrix_set_color_all(RGB_OFF); - - // Scroll Lock RGB setup - if (IS_HOST_LED_ON(USB_LED_SCROLL_LOCK)) { - rgb_matrix_set_color(LED_L3, RGB_RED); - rgb_matrix_set_color(LED_L4, RGB_RED); - rgb_matrix_set_color(LED_TAB, RGB_RED); - } - - // System NumLock warning indicator RGB setup - #ifdef INVERT_NUMLOCK_INDICATOR - if (!IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // on if NUM lock is OFF to bring attention to overlay numpad not functional when enabled - rgb_matrix_set_color(LED_GRV, RGB_ORANGE2); - rgb_matrix_set_color(LED_L1, RGB_ORANGE2); - rgb_matrix_set_color(LED_L2, RGB_ORANGE2); - rgb_matrix_set_color(LED_N, RGB_ORANGE2); - rgb_matrix_set_color(LED_FN, RGB_ORANGE2); - } - #else - if (IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // Normal, on if NUM lock is ON - rgb_matrix_set_color(LED_GRV, RGB_ORANGE2); - rgb_matrix_set_color(LED_L1, RGB_ORANGE2); - rgb_matrix_set_color(LED_L2, RGB_ORANGE2); - rgb_matrix_set_color(LED_N, RGB_ORANGE2); - rgb_matrix_set_color(LED_FN, RGB_ORANGE2); - } - #endif // INVERT_NUMLOCK_INDICATOR - - // CapsLock RGB setup - if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) { - for (uint8_t i = 0; i < ARRAYSIZE(LED_LIST_LETTERS); i++) { - rgb_matrix_set_color(LED_LIST_LETTERS[i], RGB_CHARTREUSE); - } - rgb_matrix_set_color(LED_L7, RGB_CHARTREUSE); - rgb_matrix_set_color(LED_L8, RGB_CHARTREUSE); - rgb_matrix_set_color(LED_LSFT, RGB_CHARTREUSE); - //rgb_matrix_set_color(LED_END, RGB_CHARTREUSE); - //rgb_matrix_set_color(LED_R7, RGB_CHARTREUSE); - //rgb_matrix_set_color(LED_R8, RGB_CHARTREUSE); - } - - // Winkey disabled (gaming) mode RGB setup - if (keymap_config.no_gui) { - rgb_matrix_set_color(LED_LWIN, RGB_RED); //light up Winkey red when disabled - rgb_matrix_set_color(LED_W, RGB_CHARTREUSE); //light up gaming keys with WSAD higlighted - rgb_matrix_set_color(LED_S, RGB_CHARTREUSE); - rgb_matrix_set_color(LED_A, RGB_CHARTREUSE); - rgb_matrix_set_color(LED_D, RGB_CHARTREUSE); - rgb_matrix_set_color(LED_Q, RGB_ORANGE2); - rgb_matrix_set_color(LED_E, RGB_ORANGE2); - rgb_matrix_set_color(LED_R, RGB_ORANGE2); - rgb_matrix_set_color(LED_TAB, RGB_ORANGE2); - rgb_matrix_set_color(LED_F, RGB_ORANGE2); - rgb_matrix_set_color(LED_Z, RGB_ORANGE2); - rgb_matrix_set_color(LED_X, RGB_ORANGE2); - rgb_matrix_set_color(LED_C, RGB_ORANGE2); - rgb_matrix_set_color(LED_V, RGB_ORANGE2); - rgb_matrix_set_color(LED_SPC, RGB_ORANGE2); - rgb_matrix_set_color(LED_LCTL, RGB_ORANGE2); - rgb_matrix_set_color(LED_LSFT, RGB_ORANGE2); - } - - // Fn selector mode RGB setup - switch (get_highest_layer(layer_state)) { // special handling per layer - case _FN1: // on Fn layer select what the encoder does when pressed - rgb_matrix_set_color(LED_FN, RGB_RED); //FN key - - //NEW RGB LIGHTING TO CORRESPOND TO ACTIVE FN LAYER KEYS: - rgb_matrix_set_color(LED_F1, RGB_RED); - rgb_matrix_set_color(LED_F2, RGB_RED); - rgb_matrix_set_color(LED_F3, RGB_RED); - rgb_matrix_set_color(LED_F4, RGB_RED); - rgb_matrix_set_color(LED_F5, RGB_RED); - rgb_matrix_set_color(LED_F6, RGB_RED); - rgb_matrix_set_color(LED_F7, RGB_RED); - rgb_matrix_set_color(LED_F8, RGB_RED); - rgb_matrix_set_color(LED_F9, RGB_RED); - rgb_matrix_set_color(LED_F10, RGB_RED); - rgb_matrix_set_color(LED_F11, RGB_RED); - rgb_matrix_set_color(LED_INS, RGB_RED); - rgb_matrix_set_color(LED_W, RGB_RED); - rgb_matrix_set_color(LED_A, RGB_RED); - rgb_matrix_set_color(LED_S, RGB_RED); - rgb_matrix_set_color(LED_D, RGB_RED); - rgb_matrix_set_color(LED_Z, RGB_RED); - rgb_matrix_set_color(LED_LWIN, RGB_RED); - rgb_matrix_set_color(LED_U, RGB_RED); - rgb_matrix_set_color(LED_I, RGB_RED); - rgb_matrix_set_color(LED_O, RGB_RED); - rgb_matrix_set_color(LED_BSLS, RGB_RED); - rgb_matrix_set_color(LED_CAPS, RGB_RED); - rgb_matrix_set_color(LED_N, RGB_RED); - rgb_matrix_set_color(LED_COMM, RGB_RED); - rgb_matrix_set_color(LED_DOT, RGB_RED); - rgb_matrix_set_color(LED_PGUP, RGB_RED); - rgb_matrix_set_color(LED_PGDN, RGB_RED); - rgb_matrix_set_color(LED_END, RGB_RED); - rgb_matrix_set_color(LED_UP, RGB_RED); - rgb_matrix_set_color(LED_DOWN, RGB_RED); - rgb_matrix_set_color(LED_LEFT, RGB_RED); - rgb_matrix_set_color(LED_RIGHT, RGB_RED); - - /* FN layer for reference: - ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 DEL - _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_CALC, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, - _______, _______, RGB_VAI, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, RESET, KC_HOME, - KC_CAPS, _______, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, - _______, RGB_NITE,RGB_HUI, _______, _______, _______, KC_NLCK, _______, RGB_TOD, RGB_TOI, _______, _______, RGB_MOD, _______, - _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI - */ - - // Add RGB Timeout Indicator -- shows 0 to 139 using F row and num row; larger numbers using 16bit code - uint16_t timeout_threshold = get_timeout_threshold(); - if (timeout_threshold <= 10) rgb_matrix_set_color(LED_LIST_FUNCROW[timeout_threshold], RGB_CYAN); - else if (timeout_threshold < 140) { - rgb_matrix_set_color(LED_LIST_FUNCROW[(timeout_threshold / 10)], RGB_CYAN); - rgb_matrix_set_color(LED_LIST_NUMROW[(timeout_threshold % 10)], RGB_CYAN); - } else { // >= 140 minutes, just show these 3 lights - rgb_matrix_set_color(LED_LIST_NUMROW[10], RGB_CYAN); - rgb_matrix_set_color(LED_LIST_NUMROW[11], RGB_CYAN); - rgb_matrix_set_color(LED_LIST_NUMROW[12], RGB_CYAN); - } - break; - - // Numpad overlay RGB - case _LOWER: - for (uint8_t i = 0; i < ARRAYSIZE(LED_LIST_NUMPAD); i++) { - rgb_matrix_set_color(LED_LIST_NUMPAD[i], RGB_OFFBLUE); - } - rgb_matrix_set_color(LED_L5, RGB_OFFBLUE); - rgb_matrix_set_color(LED_L6, RGB_OFFBLUE); - rgb_matrix_set_color(LED_CAPS, RGB_OFFBLUE); - break; - - // RAISE mode (RGB color mix testing) - case _RAISE: - rgb_matrix_set_color(LED_Q, RGB_TEST1); - rgb_matrix_set_color(LED_W, RGB_TEST2); - rgb_matrix_set_color(LED_E, RGB_TEST3); - rgb_matrix_set_color(LED_R, RGB_TEST4); - rgb_matrix_set_color(LED_T, RGB_TEST5); - rgb_matrix_set_color(LED_Y, RGB_TEST6); - rgb_matrix_set_color(LED_U, RGB_TEST7); - rgb_matrix_set_color(LED_I, RGB_TEST8); - rgb_matrix_set_color(LED_O, RGB_TEST9); - rgb_matrix_set_color(LED_P, RGB_TEST10); - rgb_matrix_set_color(LED_A, RGB_TEST11); - rgb_matrix_set_color(LED_S, RGB_TEST12); - break; - - // Colemak layer RGB - #ifdef COLEMAK_LAYER_ENABLE - case _COLEMAK: - for (uint8_t i = 0; i < ARRAYSIZE(LED_SIDE_RIGHT); i++) { - rgb_matrix_set_color(LED_SIDE_RIGHT[i], RGB_MAGENTA); - rgb_matrix_set_color(LED_SIDE_LEFT[i], RGB_MAGENTA); - } - break; - #endif - default: - break; - } -} -#endif - -void keyboard_post_init_keymap(void) { - // keyboard_post_init_user() moved to userspace - #ifdef RGB_MATRIX_ENABLE - rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR); - rgb_matrix_sethsv_noeeprom(129, 255, 170); // Default startup colour - activate_rgb_nightmode(false); // Set to true if you want to startup in nightmode, otherwise use Fn + Z to toggle - #endif -} From 3bd3839359e96db2ea55333b490716ba90a6d512 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Fri, 4 Feb 2022 14:36:02 -0800 Subject: [PATCH 25/54] Delete keymap.c --- .../gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 324 ------------------ 1 file changed, 324 deletions(-) delete mode 100644 keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c deleted file mode 100644 index 22dbb980c4f9..000000000000 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c +++ /dev/null @@ -1,324 +0,0 @@ -/* Copyright 2021 Glorious, LLC - Copyright 2021 Jonavin Eng @Jonavin - Copyright 2022 gourdo1 - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -// Note: Several advanced functions referenced in this file (like Tap Dance functions) are defined in users/gourdo1/gourdo1.c - -#include QMK_KEYBOARD_H - -#include "rgb_matrix_map.h" - -#include "gourdo1.h" - -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - - /* Base Layout - * - * ,-------------------------------------------------------------------------------------------------------------. - * | Esc || F1 | F2 | F3 | F4 || F5 | F6 | F7 | F8 || F9 | F10 | F11 | F12 || Home || Mute | - * |=============================================================================================================| - * | ` ~ | 1 ! | 2 @ | 3 # | 4 $ | 5 % | 6 ^ | 7 & | 8 * | 9 ( | 0 ) | - _ | = + | Backspc || Del | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| - * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ } | ] } | \ | || PgUp | - * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| - * | Capslock | A | S | D | F | G | H | J | K | L | ; : | ' " | Enter || PgDn | - * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| - * | LShift | Z | X | C | V | B | N | M | , < | . > | / ? | RShift || Up || End | - * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| - * | Ctrl | Win | LAlt | Space | RAlt | Fn | Ctrl || Left | Down | Rght | - * `------------------------------------------------------------------------------------------------------------' - */ - - [_BASE] = LAYOUT( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_MUTE, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, - KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, - TT(_LOWER), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, - KC_LSFTCAPSWIN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT - ), - - [_FN1] = LAYOUT( - _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_VOLD, KC_VOLU, KC_PSCR, KC_SLCK, KC_PAUS, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, - _______, _______, RGB_VAI, _______, _______, _______, _______, KC_PSCR, KC_SLCK, _______, KC_PAUS, _______, _______, RESET, KC_HOME, - KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, - _______, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, RGB_TOD, RGB_TOI, _______, _______, RGB_MOD, _______, - _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI - ), - - /* _LOWER (Numpad) Layout - * Note: A symbol preceeded by "P" is a Numpad-encoded version of the key -- any app that differentiates will recognize the char as coming from a physical numpad. - * ,-------------------------------------------------------------------------------------------------------------. - * | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ || ____ | - * |=============================================================================================================| - * | ____ | P1 | P2 | P3 | P4 | P5 | P6 | P7 | P8 | P9 | P0 | P- | P+ | ________ || ____ | - * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| - * | ______ | None | Up | None | None | None | None | P4 | P5 | P6 | P+ | ____ | ____ | _____ || ____ | - * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| - * | ________ | Left | Down | Rght | None| None | None | P1 | P2 | P3 | P* | ____ | P-Enter || ____ | - * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| - * | __________ | None | ____ | ____ | ____ | None | None | 0 | 00 | P. | P/ | ______ || ____ || PEnt | - * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| - * | ____ | ____ | ____ | _____ | ____ | ____ | ____ || ____ | ____ | PEnt | - * `------------------------------------------------------------------------------------------------------------' - */ - - [_LOWER] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, KC_PMNS, KC_PPLS, _______, _______, - _______, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_P4, KC_P5, KC_P6, KC_PPLS, _______, _______, _______, _______, - _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_P1, KC_P2, KC_P3, KC_PAST, _______, KC_PENT, _______, - _______, KC_NO, _______, _______, _______, KC_NO, KC_NO, KC_P0, KC_00, KC_PDOT, KC_PSLS, _______, _______, KC_PENT, - _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PENT - ), - - [_RAISE] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ - ), - - #ifdef COLEMAK_LAYER_ENABLE[_COLEMAK] = LAYOUT( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE, - KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, - KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, - TT(_LOWER), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_PGDN, - KC_LSFTCAPSWIN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT - ), - #endif // COLEMAK_LAYER_ENABLE -}; - -#if defined(ENCODER_ENABLE) && !defined(ENCODER_DEFAULTACTIONS_ENABLE) // Encoder Functionality when not using userspace defaults -void encoder_action_rgbhue(bool clockwise) { - if (clockwise) - rgblight_increase_hue_noeeprom(); - else - rgblight_decrease_hue_noeeprom(); -} - -bool encoder_update_user(uint8_t index, bool clockwise) { - uint8_t mods_state = get_mods(); - if (mods_state & MOD_BIT(KC_LSFT)) { // If you are holding L shift, encoder changes layers - encoder_action_layerchange(clockwise); - } else if (mods_state & MOD_BIT(KC_RSFT)) { // If you are holding R shift, Page up/dn - unregister_mods(MOD_BIT(KC_RSFT)); - encoder_action_navpage(clockwise); - register_mods(MOD_BIT(KC_RSFT)); - } else if (mods_state & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next/prev word - encoder_action_navword(clockwise); - } else if (mods_state & MOD_BIT(KC_RCTL)) { // if holding Right Ctrl, change rgb hue/colour - encoder_action_rgbhue(clockwise); - } else if (mods_state & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next/prev track - encoder_action_mediatrack(clockwise); - } else { - switch (get_highest_layer(layer_state)) { - case _FN1: - #ifdef IDLE_TIMEOUT_ENABLE - timeout_update_threshold(clockwise); - #endif - break; - default: - encoder_action_volume(clockwise); // Otherwise it just changes volume - break; - } - } - return true; -} -#endif // ENCODER_ENABLE && !ENCODER_DEFAULTACTIONS_ENABLE - -#ifdef RGB_MATRIX_ENABLE -// Capslock, Scroll lock and Numlock indicator on Left side lights. -void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { - if (get_rgb_nightmode()) rgb_matrix_set_color_all(RGB_OFF); - - // Scroll Lock RGB setup - if (IS_HOST_LED_ON(USB_LED_SCROLL_LOCK)) { - rgb_matrix_set_color(LED_L3, RGB_RED); - rgb_matrix_set_color(LED_L4, RGB_RED); - rgb_matrix_set_color(LED_TAB, RGB_RED); - } - - // System NumLock warning indicator RGB setup - #ifdef INVERT_NUMLOCK_INDICATOR - if (!IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // on if NUM lock is OFF to bring attention to overlay numpad not functional when enabled - rgb_matrix_set_color(LED_GRV, RGB_ORANGE2); - rgb_matrix_set_color(LED_L1, RGB_ORANGE2); - rgb_matrix_set_color(LED_L2, RGB_ORANGE2); - rgb_matrix_set_color(LED_N, RGB_ORANGE2); - rgb_matrix_set_color(LED_FN, RGB_ORANGE2); - } - #else - if (IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // Normal, on if NUM lock is ON - rgb_matrix_set_color(LED_GRV, RGB_ORANGE2); - rgb_matrix_set_color(LED_L1, RGB_ORANGE2); - rgb_matrix_set_color(LED_L2, RGB_ORANGE2); - rgb_matrix_set_color(LED_N, RGB_ORANGE2); - rgb_matrix_set_color(LED_FN, RGB_ORANGE2); - } - #endif // INVERT_NUMLOCK_INDICATOR - - // CapsLock RGB setup - if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) { - for (uint8_t i = 0; i < ARRAYSIZE(LED_LIST_LETTERS); i++) { - rgb_matrix_set_color(LED_LIST_LETTERS[i], RGB_CHARTREUSE); - } - rgb_matrix_set_color(LED_L7, RGB_CHARTREUSE); - rgb_matrix_set_color(LED_L8, RGB_CHARTREUSE); - rgb_matrix_set_color(LED_LSFT, RGB_CHARTREUSE); - //rgb_matrix_set_color(LED_END, RGB_CHARTREUSE); - //rgb_matrix_set_color(LED_R7, RGB_CHARTREUSE); - //rgb_matrix_set_color(LED_R8, RGB_CHARTREUSE); - } - - // Winkey disabled (gaming) mode RGB setup - if (keymap_config.no_gui) { - rgb_matrix_set_color(LED_LWIN, RGB_RED); //light up Winkey red when disabled - rgb_matrix_set_color(LED_W, RGB_CHARTREUSE); //light up gaming keys with WSAD higlighted - rgb_matrix_set_color(LED_S, RGB_CHARTREUSE); - rgb_matrix_set_color(LED_A, RGB_CHARTREUSE); - rgb_matrix_set_color(LED_D, RGB_CHARTREUSE); - rgb_matrix_set_color(LED_Q, RGB_ORANGE2); - rgb_matrix_set_color(LED_E, RGB_ORANGE2); - rgb_matrix_set_color(LED_R, RGB_ORANGE2); - rgb_matrix_set_color(LED_TAB, RGB_ORANGE2); - rgb_matrix_set_color(LED_F, RGB_ORANGE2); - rgb_matrix_set_color(LED_Z, RGB_ORANGE2); - rgb_matrix_set_color(LED_X, RGB_ORANGE2); - rgb_matrix_set_color(LED_C, RGB_ORANGE2); - rgb_matrix_set_color(LED_V, RGB_ORANGE2); - rgb_matrix_set_color(LED_SPC, RGB_ORANGE2); - rgb_matrix_set_color(LED_LCTL, RGB_ORANGE2); - rgb_matrix_set_color(LED_LSFT, RGB_ORANGE2); - } - - // Fn selector mode RGB setup - switch (get_highest_layer(layer_state)) { // special handling per layer - case _FN1: // on Fn layer select what the encoder does when pressed - rgb_matrix_set_color(LED_FN, RGB_RED); //FN key - - //NEW RGB LIGHTING TO CORRESPOND TO ACTIVE FN LAYER KEYS: - rgb_matrix_set_color(LED_F1, RGB_RED); - rgb_matrix_set_color(LED_F2, RGB_RED); - rgb_matrix_set_color(LED_F3, RGB_RED); - rgb_matrix_set_color(LED_F4, RGB_RED); - rgb_matrix_set_color(LED_F5, RGB_RED); - rgb_matrix_set_color(LED_F6, RGB_RED); - rgb_matrix_set_color(LED_F7, RGB_RED); - rgb_matrix_set_color(LED_F8, RGB_RED); - rgb_matrix_set_color(LED_F9, RGB_RED); - rgb_matrix_set_color(LED_F10, RGB_RED); - rgb_matrix_set_color(LED_F11, RGB_RED); - rgb_matrix_set_color(LED_INS, RGB_RED); - rgb_matrix_set_color(LED_W, RGB_RED); - rgb_matrix_set_color(LED_A, RGB_RED); - rgb_matrix_set_color(LED_S, RGB_RED); - rgb_matrix_set_color(LED_D, RGB_RED); - rgb_matrix_set_color(LED_Z, RGB_RED); - rgb_matrix_set_color(LED_LWIN, RGB_RED); - rgb_matrix_set_color(LED_U, RGB_RED); - rgb_matrix_set_color(LED_I, RGB_RED); - rgb_matrix_set_color(LED_O, RGB_RED); - rgb_matrix_set_color(LED_BSLS, RGB_RED); - rgb_matrix_set_color(LED_CAPS, RGB_RED); - rgb_matrix_set_color(LED_N, RGB_RED); - rgb_matrix_set_color(LED_COMM, RGB_RED); - rgb_matrix_set_color(LED_DOT, RGB_RED); - rgb_matrix_set_color(LED_PGUP, RGB_RED); - rgb_matrix_set_color(LED_PGDN, RGB_RED); - rgb_matrix_set_color(LED_END, RGB_RED); - rgb_matrix_set_color(LED_UP, RGB_RED); - rgb_matrix_set_color(LED_DOWN, RGB_RED); - rgb_matrix_set_color(LED_LEFT, RGB_RED); - rgb_matrix_set_color(LED_RIGHT, RGB_RED); - - /* FN layer for reference: - ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 DEL - _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_CALC, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, - _______, _______, RGB_VAI, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, RESET, KC_HOME, - KC_CAPS, _______, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, - _______, RGB_NITE,RGB_HUI, _______, _______, _______, KC_NLCK, _______, RGB_TOD, RGB_TOI, _______, _______, RGB_MOD, _______, - _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI - */ - - // Add RGB Timeout Indicator -- shows 0 to 139 using F row and num row; larger numbers using 16bit code - uint16_t timeout_threshold = get_timeout_threshold(); - if (timeout_threshold <= 10) rgb_matrix_set_color(LED_LIST_FUNCROW[timeout_threshold], RGB_CYAN); - else if (timeout_threshold < 140) { - rgb_matrix_set_color(LED_LIST_FUNCROW[(timeout_threshold / 10)], RGB_CYAN); - rgb_matrix_set_color(LED_LIST_NUMROW[(timeout_threshold % 10)], RGB_CYAN); - } else { // >= 140 minutes, just show these 3 lights - rgb_matrix_set_color(LED_LIST_NUMROW[10], RGB_CYAN); - rgb_matrix_set_color(LED_LIST_NUMROW[11], RGB_CYAN); - rgb_matrix_set_color(LED_LIST_NUMROW[12], RGB_CYAN); - } - break; - - // Numpad overlay RGB - case _LOWER: - for (uint8_t i = 0; i < ARRAYSIZE(LED_LIST_NUMPAD); i++) { - rgb_matrix_set_color(LED_LIST_NUMPAD[i], RGB_OFFBLUE); - } - rgb_matrix_set_color(LED_L5, RGB_OFFBLUE); - rgb_matrix_set_color(LED_L6, RGB_OFFBLUE); - rgb_matrix_set_color(LED_CAPS, RGB_OFFBLUE); - break; - - // RAISE mode (RGB color mix testing) - case _RAISE: - rgb_matrix_set_color(LED_Q, RGB_TEST1); - rgb_matrix_set_color(LED_W, RGB_TEST2); - rgb_matrix_set_color(LED_E, RGB_TEST3); - rgb_matrix_set_color(LED_R, RGB_TEST4); - rgb_matrix_set_color(LED_T, RGB_TEST5); - rgb_matrix_set_color(LED_Y, RGB_TEST6); - rgb_matrix_set_color(LED_U, RGB_TEST7); - rgb_matrix_set_color(LED_I, RGB_TEST8); - rgb_matrix_set_color(LED_O, RGB_TEST9); - rgb_matrix_set_color(LED_P, RGB_TEST10); - rgb_matrix_set_color(LED_A, RGB_TEST11); - rgb_matrix_set_color(LED_S, RGB_TEST12); - break; - - // Colemak layer RGB - #ifdef COLEMAK_LAYER_ENABLE - case _COLEMAK: - for (uint8_t i = 0; i < ARRAYSIZE(LED_SIDE_RIGHT); i++) { - rgb_matrix_set_color(LED_SIDE_RIGHT[i], RGB_MAGENTA); - rgb_matrix_set_color(LED_SIDE_LEFT[i], RGB_MAGENTA); - } - break; - #endif - default: - break; - } -} -#endif - -void keyboard_post_init_keymap(void) { - // keyboard_post_init_user() moved to userspace - #ifdef RGB_MATRIX_ENABLE - rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR); - rgb_matrix_sethsv_noeeprom(129, 255, 170); // Default startup colour - activate_rgb_nightmode(false); // Set to true if you want to startup in nightmode, otherwise use Fn + Z to toggle - #endif -} \ No newline at end of file From 9d37801669e7c42b7396ab1ef80f0b0981833376 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Fri, 4 Feb 2022 17:17:57 -0800 Subject: [PATCH 26/54] PR recommendations, formatting changes and default hsv updated in keymap.c --- .../gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 325 ++++++++++++++++++ 1 file changed, 325 insertions(+) create mode 100644 keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c new file mode 100644 index 000000000000..148ca7f6bd4a --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c @@ -0,0 +1,325 @@ +/* Copyright 2021 Glorious, LLC + Copyright 2021 Jonavin Eng @Jonavin + Copyright 2022 gourdo1 + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +// Note: Several advanced functions referenced in this file (like Tap Dance functions) are defined in users/gourdo1/gourdo1.c + +#include QMK_KEYBOARD_H + +#include "rgb_matrix_map.h" + +#include "gourdo1.h" + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* Base Layout + * + * ,-------------------------------------------------------------------------------------------------------------. + * | Esc || F1 | F2 | F3 | F4 || F5 | F6 | F7 | F8 || F9 | F10 | F11 | F12 || Home || Mute | + * |=============================================================================================================| + * | ` ~ | 1 ! | 2 @ | 3 # | 4 $ | 5 % | 6 ^ | 7 & | 8 * | 9 ( | 0 ) | - _ | = + | Backspc || Del | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| + * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ } | ] } | \ | || PgUp | + * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| + * | Capslock | A | S | D | F | G | H | J | K | L | ; : | ' " | Enter || PgDn | + * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| + * | LShift | Z | X | C | V | B | N | M | , < | . > | / ? | RShift || Up || End | + * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| + * | Ctrl | Win | LAlt | Space | RAlt | Fn | Ctrl || Left | Down | Rght | + * `------------------------------------------------------------------------------------------------------------' + */ + + [_BASE] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_MUTE, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, + TT(_LOWER), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, + KC_LSFTCAPSWIN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [_FN1] = LAYOUT( + _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_VOLD, KC_VOLU, KC_PSCR, KC_SLCK, KC_PAUS, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, + _______, _______, RGB_VAI, _______, _______, _______, _______, KC_PSCR, KC_SLCK, _______, KC_PAUS, _______, _______, RESET, KC_HOME, + KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, + _______, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, RGB_TOD, RGB_TOI, _______, _______, RGB_MOD, _______, + _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI + ), + + /* _LOWER (Numpad) Layout + * Note: A symbol preceeded by "P" is a Numpad-encoded version of the key -- any app that differentiates will recognize the char as coming from a physical numpad. + * ,-------------------------------------------------------------------------------------------------------------. + * | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ || ____ | + * |=============================================================================================================| + * | ____ | P1 | P2 | P3 | P4 | P5 | P6 | P7 | P8 | P9 | P0 | P- | P+ | ________ || ____ | + * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| + * | ______ | None | Up | None | None | None | None | P4 | P5 | P6 | P+ | ____ | ____ | _____ || ____ | + * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| + * | ________ | Left | Down | Rght | None| None | None | P1 | P2 | P3 | P* | ____ | P-Enter || ____ | + * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| + * | __________ | None | ____ | ____ | ____ | None | None | 0 | 00 | P. | P/ | ______ || ____ || PEnt | + * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| + * | ____ | ____ | ____ | _____ | ____ | ____ | ____ || ____ | ____ | PEnt | + * `------------------------------------------------------------------------------------------------------------' + */ + + [_LOWER] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, KC_PMNS, KC_PPLS, _______, _______, + _______, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_P4, KC_P5, KC_P6, KC_PPLS, _______, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_P1, KC_P2, KC_P3, KC_PAST, _______, KC_PENT, _______, + _______, KC_NO, _______, _______, _______, KC_NO, KC_NO, KC_P0, KC_00, KC_PDOT, KC_PSLS, _______, _______, KC_PENT, + _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PENT + ), + + [_RAISE] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + #ifdef COLEMAK_LAYER_ENABLE + [_COLEMAK] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, + KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, + TT(_LOWER), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_PGDN, + KC_LSFTCAPSWIN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + #endif // COLEMAK_LAYER_ENABLE +}; + +#if defined(ENCODER_ENABLE) && !defined(ENCODER_DEFAULTACTIONS_ENABLE) // Encoder Functionality when not using userspace defaults +void encoder_action_rgbhue(bool clockwise) { + if (clockwise) + rgblight_increase_hue_noeeprom(); + else + rgblight_decrease_hue_noeeprom(); +} + +bool encoder_update_user(uint8_t index, bool clockwise) { + uint8_t mods_state = get_mods(); + if (mods_state & MOD_BIT(KC_LSFT)) { // If you are holding L shift, encoder changes layers + encoder_action_layerchange(clockwise); + } else if (mods_state & MOD_BIT(KC_RSFT)) { // If you are holding R shift, Page up/dn + unregister_mods(MOD_BIT(KC_RSFT)); + encoder_action_navpage(clockwise); + register_mods(MOD_BIT(KC_RSFT)); + } else if (mods_state & MOD_BIT(KC_LCTL)) { // if holding Left Ctrl, navigate next/prev word + encoder_action_navword(clockwise); + } else if (mods_state & MOD_BIT(KC_RCTL)) { // if holding Right Ctrl, change rgb hue/colour + encoder_action_rgbhue(clockwise); + } else if (mods_state & MOD_BIT(KC_LALT)) { // if holding Left Alt, change media next/prev track + encoder_action_mediatrack(clockwise); + } else { + switch (get_highest_layer(layer_state)) { + case _FN1: + #ifdef IDLE_TIMEOUT_ENABLE + timeout_update_threshold(clockwise); + #endif + break; + default: + encoder_action_volume(clockwise); // Otherwise it just changes volume + break; + } + } + return true; +} +#endif // ENCODER_ENABLE && !ENCODER_DEFAULTACTIONS_ENABLE + +#ifdef RGB_MATRIX_ENABLE +// Capslock, Scroll lock and Numlock indicator on Left side lights. +void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + if (get_rgb_nightmode()) rgb_matrix_set_color_all(RGB_OFF); + + // Scroll Lock RGB setup + if (IS_HOST_LED_ON(USB_LED_SCROLL_LOCK)) { + rgb_matrix_set_color(LED_L3, RGB_RED); + rgb_matrix_set_color(LED_L4, RGB_RED); + rgb_matrix_set_color(LED_TAB, RGB_RED); + } + + // System NumLock warning indicator RGB setup + #ifdef INVERT_NUMLOCK_INDICATOR + if (!IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // on if NUM lock is OFF to bring attention to overlay numpad not functional when enabled + rgb_matrix_set_color(LED_GRV, RGB_ORANGE2); + rgb_matrix_set_color(LED_L1, RGB_ORANGE2); + rgb_matrix_set_color(LED_L2, RGB_ORANGE2); + rgb_matrix_set_color(LED_N, RGB_ORANGE2); + rgb_matrix_set_color(LED_FN, RGB_ORANGE2); + } + #else + if (IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // Normal, on if NUM lock is ON + rgb_matrix_set_color(LED_GRV, RGB_ORANGE2); + rgb_matrix_set_color(LED_L1, RGB_ORANGE2); + rgb_matrix_set_color(LED_L2, RGB_ORANGE2); + rgb_matrix_set_color(LED_N, RGB_ORANGE2); + rgb_matrix_set_color(LED_FN, RGB_ORANGE2); + } + #endif // INVERT_NUMLOCK_INDICATOR + + // CapsLock RGB setup + if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) { + for (uint8_t i = 0; i < ARRAYSIZE(LED_LIST_LETTERS); i++) { + rgb_matrix_set_color(LED_LIST_LETTERS[i], RGB_CHARTREUSE); + } + rgb_matrix_set_color(LED_L7, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_L8, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_LSFT, RGB_CHARTREUSE); + //rgb_matrix_set_color(LED_END, RGB_CHARTREUSE); + //rgb_matrix_set_color(LED_R7, RGB_CHARTREUSE); + //rgb_matrix_set_color(LED_R8, RGB_CHARTREUSE); + } + + // Winkey disabled (gaming) mode RGB setup + if (keymap_config.no_gui) { + rgb_matrix_set_color(LED_LWIN, RGB_RED); //light up Winkey red when disabled + rgb_matrix_set_color(LED_W, RGB_CHARTREUSE); //light up gaming keys with WSAD higlighted + rgb_matrix_set_color(LED_S, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_A, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_D, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_Q, RGB_ORANGE2); + rgb_matrix_set_color(LED_E, RGB_ORANGE2); + rgb_matrix_set_color(LED_R, RGB_ORANGE2); + rgb_matrix_set_color(LED_TAB, RGB_ORANGE2); + rgb_matrix_set_color(LED_F, RGB_ORANGE2); + rgb_matrix_set_color(LED_Z, RGB_ORANGE2); + rgb_matrix_set_color(LED_X, RGB_ORANGE2); + rgb_matrix_set_color(LED_C, RGB_ORANGE2); + rgb_matrix_set_color(LED_V, RGB_ORANGE2); + rgb_matrix_set_color(LED_SPC, RGB_ORANGE2); + rgb_matrix_set_color(LED_LCTL, RGB_ORANGE2); + rgb_matrix_set_color(LED_LSFT, RGB_ORANGE2); + } + + // Fn selector mode RGB setup + switch (get_highest_layer(layer_state)) { // special handling per layer + case _FN1: // on Fn layer select what the encoder does when pressed + rgb_matrix_set_color(LED_FN, RGB_RED); //FN key + + //NEW RGB LIGHTING TO CORRESPOND TO ACTIVE FN LAYER KEYS: + rgb_matrix_set_color(LED_F1, RGB_RED); + rgb_matrix_set_color(LED_F2, RGB_RED); + rgb_matrix_set_color(LED_F3, RGB_RED); + rgb_matrix_set_color(LED_F4, RGB_RED); + rgb_matrix_set_color(LED_F5, RGB_RED); + rgb_matrix_set_color(LED_F6, RGB_RED); + rgb_matrix_set_color(LED_F7, RGB_RED); + rgb_matrix_set_color(LED_F8, RGB_RED); + rgb_matrix_set_color(LED_F9, RGB_RED); + rgb_matrix_set_color(LED_F10, RGB_RED); + rgb_matrix_set_color(LED_F11, RGB_RED); + rgb_matrix_set_color(LED_INS, RGB_RED); + rgb_matrix_set_color(LED_W, RGB_RED); + rgb_matrix_set_color(LED_A, RGB_RED); + rgb_matrix_set_color(LED_S, RGB_RED); + rgb_matrix_set_color(LED_D, RGB_RED); + rgb_matrix_set_color(LED_Z, RGB_RED); + rgb_matrix_set_color(LED_LWIN, RGB_RED); + rgb_matrix_set_color(LED_U, RGB_RED); + rgb_matrix_set_color(LED_I, RGB_RED); + rgb_matrix_set_color(LED_O, RGB_RED); + rgb_matrix_set_color(LED_BSLS, RGB_RED); + rgb_matrix_set_color(LED_CAPS, RGB_RED); + rgb_matrix_set_color(LED_N, RGB_RED); + rgb_matrix_set_color(LED_COMM, RGB_RED); + rgb_matrix_set_color(LED_DOT, RGB_RED); + rgb_matrix_set_color(LED_PGUP, RGB_RED); + rgb_matrix_set_color(LED_PGDN, RGB_RED); + rgb_matrix_set_color(LED_END, RGB_RED); + rgb_matrix_set_color(LED_UP, RGB_RED); + rgb_matrix_set_color(LED_DOWN, RGB_RED); + rgb_matrix_set_color(LED_LEFT, RGB_RED); + rgb_matrix_set_color(LED_RIGHT, RGB_RED); + + /* FN layer for reference: + ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 DEL + _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_CALC, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, + _______, _______, RGB_VAI, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, RESET, KC_HOME, + KC_CAPS, _______, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, + _______, RGB_NITE,RGB_HUI, _______, _______, _______, KC_NLCK, _______, RGB_TOD, RGB_TOI, _______, _______, RGB_MOD, _______, + _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI + */ + + // Add RGB Timeout Indicator -- shows 0 to 139 using F row and num row; larger numbers using 16bit code + uint16_t timeout_threshold = get_timeout_threshold(); + if (timeout_threshold <= 10) rgb_matrix_set_color(LED_LIST_FUNCROW[timeout_threshold], RGB_CYAN); + else if (timeout_threshold < 140) { + rgb_matrix_set_color(LED_LIST_FUNCROW[(timeout_threshold / 10)], RGB_CYAN); + rgb_matrix_set_color(LED_LIST_NUMROW[(timeout_threshold % 10)], RGB_CYAN); + } else { // >= 140 minutes, just show these 3 lights + rgb_matrix_set_color(LED_LIST_NUMROW[10], RGB_CYAN); + rgb_matrix_set_color(LED_LIST_NUMROW[11], RGB_CYAN); + rgb_matrix_set_color(LED_LIST_NUMROW[12], RGB_CYAN); + } + break; + + // Numpad overlay RGB + case _LOWER: + for (uint8_t i = 0; i < ARRAYSIZE(LED_LIST_NUMPAD); i++) { + rgb_matrix_set_color(LED_LIST_NUMPAD[i], RGB_OFFBLUE); + } + rgb_matrix_set_color(LED_L5, RGB_OFFBLUE); + rgb_matrix_set_color(LED_L6, RGB_OFFBLUE); + rgb_matrix_set_color(LED_CAPS, RGB_OFFBLUE); + break; + + // RAISE mode (RGB color mix testing) + case _RAISE: + rgb_matrix_set_color(LED_Q, RGB_TEST1); + rgb_matrix_set_color(LED_W, RGB_TEST2); + rgb_matrix_set_color(LED_E, RGB_TEST3); + rgb_matrix_set_color(LED_R, RGB_TEST4); + rgb_matrix_set_color(LED_T, RGB_TEST5); + rgb_matrix_set_color(LED_Y, RGB_TEST6); + rgb_matrix_set_color(LED_U, RGB_TEST7); + rgb_matrix_set_color(LED_I, RGB_TEST8); + rgb_matrix_set_color(LED_O, RGB_TEST9); + rgb_matrix_set_color(LED_P, RGB_TEST10); + rgb_matrix_set_color(LED_A, RGB_TEST11); + rgb_matrix_set_color(LED_S, RGB_TEST12); + break; + + // Colemak layer RGB + #ifdef COLEMAK_LAYER_ENABLE + case _COLEMAK: + for (uint8_t i = 0; i < ARRAYSIZE(LED_SIDE_RIGHT); i++) { + rgb_matrix_set_color(LED_SIDE_RIGHT[i], RGB_MAGENTA); + rgb_matrix_set_color(LED_SIDE_LEFT[i], RGB_MAGENTA); + } + break; + #endif + default: + break; + } +} +#endif + +void keyboard_post_init_keymap(void) { + // keyboard_post_init_user() moved to userspace + #ifdef RGB_MATRIX_ENABLE + rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR); + rgb_matrix_sethsv_noeeprom(24, 255, 127); // Default startup colour (AKA RGB_NAUTILUS) + activate_rgb_nightmode(false); // Set to true if you want to startup in nightmode, otherwise use Fn + Z to toggle + #endif +} \ No newline at end of file From 1309a600901f290687b0e0f558185363103be5cb Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Fri, 4 Feb 2022 17:40:26 -0800 Subject: [PATCH 27/54] Re-formatting & RGB cleanup --- .../gmmk/pro/ansi/keymaps/gourdo1/config.h | 23 +- .../pro/ansi/keymaps/gourdo1/rgb_matrix_map.h | 381 ++++++++++++------ users/gourdo1/gourdo1.c | 325 ++++++++------- users/gourdo1/gourdo1.h | 170 +++----- 4 files changed, 497 insertions(+), 402 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/config.h b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/config.h index c0ec0b86130e..08cc5d8d2536 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/config.h +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/config.h @@ -15,34 +15,33 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ - #pragma once #define TAPPING_TOGGLE 2 // TT set to two taps -/* Handle GRAVESC combo keys */ +/* Handle GRAVESC combo keys */ #define GRAVE_ESC_ALT_OVERRIDE - //Always send Escape if Alt is pressed +// Always send Escape if Alt is pressed #define GRAVE_ESC_CTRL_OVERRIDE - //Always send Escape if Control is pressed +// Always send Escape if Control is pressed // #define TAPPING_TERM 180 #define TAPPING_TERM 300 #define TAPPING_TERM_PER_KEY #ifdef RGB_MATRIX_ENABLE - #define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR - #define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR +#define RGB_DISABLE_WHEN_USB_SUSPENDED #endif // RGB step values -#define RGBLIGHT_HUE_STEP 32 // The number of steps to cycle through the hue by (default 10) -#define RGBLIGHT_SAT_STEP 17 // The number of steps to increment the saturation by (default 17) -#define RGBLIGHT_VAL_STEP 17 // The number of steps to increment the brightness by (default 17) +#define RGBLIGHT_HUE_STEP 32 // The number of steps to cycle through the hue by (default 10) +#define RGBLIGHT_SAT_STEP 17 // The number of steps to increment the saturation by (default 17) +#define RGBLIGHT_VAL_STEP 17 // The number of steps to increment the brightness by (default 17) // add fifth layer for colemak -- set "COLEMAK_LAYER_ENABLE = yes" in rules.mk to enable #if defined COLEMAK_LAYER_ENABLE - #define DYNAMIC_KEYMAP_LAYER_COUNT 5 - #define _COLEMAK 4 -#endif // COLEMAK_LAYER_ENABLE +#define DYNAMIC_KEYMAP_LAYER_COUNT 5 +#define _COLEMAK 4 +#endif // COLEMAK_LAYER_ENABLE \ No newline at end of file diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rgb_matrix_map.h b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rgb_matrix_map.h index b17a35d0b672..97cc6202fd5b 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rgb_matrix_map.h +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rgb_matrix_map.h @@ -15,138 +15,273 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ - #ifdef RGB_MATRIX_ENABLE +// Custom GMMK Pro-specific RGB color customizations (defaults found in quantum/color.h) +#define RGB_GODSPEED 0x00, 0xE4, 0xFF // color for matching keycaps +#define RGB_NAUTILUS 0x00, 0xA4, 0xA9 // Nautilus Font colours +#define RGB_OFFBLUE 0x00, 0x80, 0xFF // new color: blue with a hint of green +#define RGB_DKRED 0x28, 0x00, 0x00 // new color: dark red +#define RGB_ORANGE2 0xFF, 0x28, 0x00 // fix: reduced green from 80 to 28 +#define RGB_PURPLE2 0x80, 0x00, 0xFF // fix: increased red from 7A to 80 +#define RGB_SPRINGGREEN2 0x00, 0xFF, 0x10 // fix: blue was 80, now 10 +#define RGB_YELLOW2 0xFF, 0xB0, 0x00 // fix: green was FF, now B0 +#define RGB_OFF RGB_BLACK - // Custom RGB Colours - #define RGB_GODSPEED 0x00, 0xE4, 0xFF // colour for matching keycaps - #define RGB_NAUTILUS 0x00, 0xA4, 0xA9 // Nautilus Font colours +// Added by gourdo1 for _RAISE layer RGB testing +// Red Green Blue Expected GMMK Pro result +#define RGB_TEST1 0xFF, 0x00, 0x00 // Q - red good! +#define RGB_TEST2 0x0F, 0xFF, 0x00 // W - green good! +#define RGB_TEST3 0x00, 0x00, 0xFF // E - blue good! +#define RGB_TEST4 0xFF, 0xB0, 0x00 // R - yellow slightly green heavy - reduced green LED by quite a bit +#define RGB_TEST5 0x00, 0xFF, 0xFF // T - cyan good! +#define RGB_TEST6 0xFF, 0x00, 0xFF // Y - magenta very slightly blue heavy? +#define RGB_TEST7 0xFF, 0x28, 0x00 // U - orange very green heavy at default +#define RGB_TEST8 0xFF, 0x00, 0x80 // I - pink good! +#define RGB_TEST9 0x80, 0xFF, 0x00 // O - chartreus good! +#define RGB_TEST10 0x00, 0xFF, 0x10 // P - springgrn fixed: was too blue because green LED has blue in it already +#define RGB_TEST11 0x00, 0x80, 0xFF // A - grn blue good! +#define RGB_TEST12 0x80, 0x00, 0xFF // S - purple good! - // RGB LED locations - enum led_location_map { - LED_ESC, // 0, ESC, k13 - LED_GRV, // 1, ~, k16 - LED_TAB, // 2, Tab, k11 - LED_CAPS, // 3, Caps, k21 - LED_LSFT, // 4, Sh_L, k00 - LED_LCTL, // 5, Ct_L, k06 - LED_F1, // 6, F1, k26 - LED_1, // 7, 1, k17 - LED_Q, // 8, Q, k10 - LED_A, // 9, A, k12 - LED_Z, // 10, Z, k14 - LED_LWIN, // 11, Win_L, k90 - LED_F2, // 12, F2, k36 - LED_2, // 13, 2, k27 - LED_W, // 14, W, k20 - LED_S, // 15, S, k22 - LED_X, // 16, X, k24 - LED_LALT, // 17, Alt_L, k93 - LED_F3, // 18, F3, k31 - LED_3, // 19, 3, k37 - LED_E, // 20, E, k30 - LED_D, // 21, D, k32 - LED_C, // 22, C, k34 - LED_F4, // 23, F4, k33 - LED_4, // 24, 4, k47 - LED_R, // 25, R, k40 - LED_F, // 26, F, k42 - LED_V, // 27, V, k44 - LED_F5, // 28, F5, k07 - LED_5, // 29, 5, k46 - LED_T, // 30, T, k41 - LED_G, // 31, G, k43 - LED_B, // 32, B, k45 - LED_SPC, // 33, SPACE, k94 - LED_F6, // 34, F6, k63 - LED_6, // 35, 6, k56 - LED_Y, // 36, Y, k51 - LED_H, // 37, H, k53 - LED_N, // 38, N, k55 - LED_F7, // 39, F7, k71 - LED_7, // 40, 7, k57 - LED_U, // 41, U, k50 - LED_J, // 42, J, k52 - LED_M, // 43, M, k54 - LED_F8, // 44, F8, k76 - LED_8, // 45, 8, k67 - LED_I, // 46, I, k60 - LED_K, // 47, K, k62 - LED_COMM, // 48, ,, k64 - LED_RALT, // 49, Alt_R, k95 - LED_F9, // 50, F9, ka6 - LED_9, // 51, 9, k77 - LED_O, // 52, O, k70 - LED_L, // 53, L, k72 - LED_DOT, // 54, ., k74 - LED_FN, // 55, FN, k92 - LED_F10, // 56, F10, ka7 - LED_0, // 57, 0, k87 - LED_P, // 58, P, k80 - LED_SCLN, // 59, ;, k82 - LED_SLSH, // 60, ?, k85 - LED_F11, // 61, F11, ka3 - LED_MINS, // 62, -, k86 - LED_LBRC, // 63, [, k81 - LED_QUOT, // 64, ", k83 - LED_RCTL, // 65, Ct_R, k04 - LED_F12, // 66, F12, ka5 - LED_L1, // 67, LED, l01 - LED_R1, // 68, LED, l11 - LED_INS, // 69, Prt, k97 -- remapped to INS - LED_L2, // 70, LED, l02 - LED_R2, // 71, LED, l12 - LED_DEL, // 72, Del, k65 - LED_L3, // 73, LED, l03 - LED_R3, // 74, LED, l13 - LED_PGUP, // 75, PgUp, k15 - LED_L4, // 76, LED, l04 - LED_R4, // 77, LED, l14 - LED_EQL, // 78, =, k66 - LED_RIGHT, // 79, Right, k05 - LED_L5, // 80, LED, l05 - LED_R5, // 81, LED, l15 - LED_END, // 82, End, k75 - LED_L6, // 83, LED, l06 - LED_R6, // 84, LED, l16 - LED_BSPC, // 85, BSpc, ka1 - LED_PGDN, // 86, PgDn, k25 - LED_L7, // 87, LED, l07 - LED_R7, // 88, LED, l17 - LED_RBRC, // 89, ], k61 - LED_RSFT, // 90, Sh_R, k91 - LED_L8, // 91, LED, l08 - LED_R8, // 92, LED, l18 - LED_BSLS, // 93, \, ka2 - LED_UP, // 94, Up, k35 - LED_LEFT, // 95, Left, k03 - LED_ENT, // 96, Enter, ka4 - LED_DOWN // 97, Down, k73 - }; +// RGB LED locations +enum led_location_map { + LED_ESC, // 0, ESC, k13 + LED_GRV, // 1, ~, k16 + LED_TAB, // 2, Tab, k11 + LED_CAPS, // 3, Caps, k21 + LED_LSFT, // 4, Sh_L, k00 + LED_LCTL, // 5, Ct_L, k06 + LED_F1, // 6, F1, k26 + LED_1, // 7, 1, k17 + LED_Q, // 8, Q, k10 + LED_A, // 9, A, k12 + LED_Z, // 10, Z, k14 + LED_LWIN, // 11, Win_L, k90 + LED_F2, // 12, F2, k36 + LED_2, // 13, 2, k27 + LED_W, // 14, W, k20 + LED_S, // 15, S, k22 + LED_X, // 16, X, k24 + LED_LALT, // 17, Alt_L, k93 + LED_F3, // 18, F3, k31 + LED_3, // 19, 3, k37 + LED_E, // 20, E, k30 + LED_D, // 21, D, k32 + LED_C, // 22, C, k34 + LED_F4, // 23, F4, k33 + LED_4, // 24, 4, k47 + LED_R, // 25, R, k40 + LED_F, // 26, F, k42 + LED_V, // 27, V, k44 + LED_F5, // 28, F5, k07 + LED_5, // 29, 5, k46 + LED_T, // 30, T, k41 + LED_G, // 31, G, k43 + LED_B, // 32, B, k45 + LED_SPC, // 33, SPACE, k94 + LED_F6, // 34, F6, k63 + LED_6, // 35, 6, k56 + LED_Y, // 36, Y, k51 + LED_H, // 37, H, k53 + LED_N, // 38, N, k55 + LED_F7, // 39, F7, k71 + LED_7, // 40, 7, k57 + LED_U, // 41, U, k50 + LED_J, // 42, J, k52 + LED_M, // 43, M, k54 + LED_F8, // 44, F8, k76 + LED_8, // 45, 8, k67 + LED_I, // 46, I, k60 + LED_K, // 47, K, k62 + LED_COMM, // 48, ,, k64 + LED_RALT, // 49, Alt_R, k95 + LED_F9, // 50, F9, ka6 + LED_9, // 51, 9, k77 + LED_O, // 52, O, k70 + LED_L, // 53, L, k72 + LED_DOT, // 54, ., k74 + LED_FN, // 55, FN, k92 + LED_F10, // 56, F10, ka7 + LED_0, // 57, 0, k87 + LED_P, // 58, P, k80 + LED_SCLN, // 59, ;, k82 + LED_SLSH, // 60, ?, k85 + LED_F11, // 61, F11, ka3 + LED_MINS, // 62, -, k86 + LED_LBRC, // 63, [, k81 + LED_QUOT, // 64, ", k83 + LED_RCTL, // 65, Ct_R, k04 + LED_F12, // 66, F12, ka5 + LED_L1, // 67, LED, l01 + LED_R1, // 68, LED, l11 + LED_INS, // 69, Prt, k97 -- remapped to INS + LED_L2, // 70, LED, l02 + LED_R2, // 71, LED, l12 + LED_DEL, // 72, Del, k65 + LED_L3, // 73, LED, l03 + LED_R3, // 74, LED, l13 + LED_PGUP, // 75, PgUp, k15 + LED_L4, // 76, LED, l04 + LED_R4, // 77, LED, l14 + LED_EQL, // 78, =, k66 + LED_RIGHT, // 79, Right, k05 + LED_L5, // 80, LED, l05 + LED_R5, // 81, LED, l15 + LED_END, // 82, End, k75 + LED_L6, // 83, LED, l06 + LED_R6, // 84, LED, l16 + LED_BSPC, // 85, BSpc, ka1 + LED_PGDN, // 86, PgDn, k25 + LED_L7, // 87, LED, l07 + LED_R7, // 88, LED, l17 + LED_RBRC, // 89, ], k61 + LED_RSFT, // 90, Sh_R, k91 + LED_L8, // 91, LED, l08 + LED_R8, // 92, LED, l18 + LED_BSLS, // 93, \, ka2 + LED_UP, // 94, Up, k35 + LED_LEFT, // 95, Left, k03 + LED_ENT, // 96, Enter, ka4 + LED_DOWN // 97, Down, k73 +}; - const uint8_t LED_LIST_WASD[] = { LED_W, LED_A, LED_S, LED_D }; +const uint8_t LED_LIST_WASD[] = { + LED_W, + LED_A, + LED_S, + LED_D +}; - const uint8_t LED_LIST_ARROWS[] = { LED_LEFT, LED_RIGHT, LED_UP, LED_DOWN }; +const uint8_t LED_LIST_ARROWS[] = { + LED_LEFT, + LED_RIGHT, + LED_UP, + LED_DOWN +}; - const uint8_t LED_LIST_FUNCROW[] = { LED_ESC, LED_F1, LED_F2, LED_F3, LED_F4, LED_F5, LED_F6, LED_F7, LED_F8, LED_F9, LED_F10, LED_F11, LED_F12, LED_INS}; +const uint8_t LED_LIST_FUNCROW[] = { + LED_ESC, + LED_F1, + LED_F2, + LED_F3, + LED_F4, + LED_F5, + LED_F6, + LED_F7, + LED_F8, + LED_F9, + LED_F10, + LED_F11, + LED_F12, + LED_INS +}; - const uint8_t LED_LIST_NUMROW[] = { LED_GRV, LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, LED_0, LED_MINS, LED_EQL, LED_BSPC, LED_DEL}; +const uint8_t LED_LIST_NUMROW[] = { + LED_GRV, + LED_1, + LED_2, + LED_3, + LED_4, + LED_5, + LED_6, + LED_7, + LED_8, + LED_9, + LED_0, + LED_MINS, + LED_EQL, + LED_BSPC, + LED_DEL +}; - const uint8_t LED_LIST_LETTERS[] = { LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, LED_0, - LED_Q, LED_W, LED_E, LED_R, LED_T, LED_Y, LED_U, LED_I, LED_O, LED_P, - LED_A, LED_S, LED_D, LED_F, LED_G, LED_H, LED_J, LED_K, LED_L, - LED_Z, LED_X, LED_C, LED_V, LED_B, LED_N, LED_M}; +const uint8_t LED_LIST_LETTERS[] = { + LED_1, + LED_2, + LED_3, + LED_4, + LED_5, + LED_6, + LED_7, + LED_8, + LED_9, + LED_0, + LED_Q, + LED_W, + LED_E, + LED_R, + LED_T, + LED_Y, + LED_U, + LED_I, + LED_O, + LED_P, + LED_A, + LED_S, + LED_D, + LED_F, + LED_G, + LED_H, + LED_J, + LED_K, + LED_L, + LED_Z, + LED_X, + LED_C, + LED_V, + LED_B, + LED_N, + LED_M +}; - const uint8_t LED_LIST_NUMPAD[] = { - LED_1, LED_2, LED_3, LED_4, LED_5, LED_6, LED_7, LED_8, LED_9, LED_0, LED_MINS, LED_EQL, - LED_U, LED_I, LED_O, LED_P, - LED_J, LED_K, LED_L, LED_SCLN, LED_ENT, - LED_M, LED_COMM, LED_DOT, LED_SLSH, LED_END, - LED_RIGHT - }; +const uint8_t LED_LIST_NUMPAD[] = { + LED_1, + LED_2, + LED_3, + LED_4, + LED_5, + LED_6, + LED_7, + LED_8, + LED_9, + LED_0, + LED_MINS, + LED_EQL, + LED_U, + LED_I, + LED_O, + LED_P, + LED_J, + LED_K, + LED_L, + LED_SCLN, + LED_ENT, + LED_M, + LED_COMM, + LED_DOT, + LED_SLSH, + LED_END, + LED_RIGHT +}; - const uint8_t LED_SIDE_LEFT[] = { LED_L1, LED_L2, LED_L3, LED_L4, LED_L5, LED_L6, LED_L7, LED_L8}; +const uint8_t LED_SIDE_LEFT[] = { + LED_L1, + LED_L2, + LED_L3, + LED_L4, + LED_L5, + LED_L6, + LED_L7, + LED_L8 +}; - const uint8_t LED_SIDE_RIGHT[] = { LED_R1, LED_R2, LED_R3, LED_R4, LED_R5, LED_R6, LED_R7, LED_R8}; +const uint8_t LED_SIDE_RIGHT[] = { + LED_R1, + LED_R2, + LED_R3, + LED_R4, + LED_R5, + LED_R6, + LED_R7, + LED_R8 +}; -#endif +#endif \ No newline at end of file diff --git a/users/gourdo1/gourdo1.c b/users/gourdo1/gourdo1.c index 5b9ef6cd79f1..4a2784c608dc 100644 --- a/users/gourdo1/gourdo1.c +++ b/users/gourdo1/gourdo1.c @@ -15,136 +15,139 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ - #include QMK_KEYBOARD_H + #include "gourdo1.h" #ifdef TD_LSFT_CAPSLOCK_ENABLE - // Tap once for shift, twice for Caps Lock but only if Win Key in not disabled - void dance_LSFT_each_tap(qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1 || keymap_config.no_gui) { - register_code16(KC_LSFT); - } else { - register_code(KC_CAPS); - } +// Tap once for shift, twice for Caps Lock but only if Win Key in not disabled +void dance_LSFT_each_tap(qk_tap_dance_state_t * state, void * user_data) { + if (state -> count == 1 || keymap_config.no_gui) { + register_code16(KC_LSFT); + } else { + register_code(KC_CAPS); } +} - void dance_LSFT_reset(qk_tap_dance_state_t *state, void *user_data) { - if (state->count == 1 || keymap_config.no_gui) { - unregister_code16(KC_LSFT); - } else { - unregister_code(KC_CAPS); - unregister_code16(KC_LSFT); - } +void dance_LSFT_reset(qk_tap_dance_state_t * state, void * user_data) { + if (state -> count == 1 || keymap_config.no_gui) { + unregister_code16(KC_LSFT); + } else { + unregister_code(KC_CAPS); + unregister_code16(KC_LSFT); } - // Tap Dance definitions - qk_tap_dance_action_t tap_dance_actions[] = { +} +// Tap Dance definitions +qk_tap_dance_action_t tap_dance_actions[] = { // Tap once for shift, twice for Caps Lock - [TD_LSFT_CAPSLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS), - [TD_LSFT_CAPS_WIN] = ACTION_TAP_DANCE_FN_ADVANCED(dance_LSFT_each_tap, NULL, dance_LSFT_reset), - }; -#endif // TD_LSFT_CAPSLOCK_ENABLE + [TD_LSFT_CAPSLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS), + [TD_LSFT_CAPS_WIN] = ACTION_TAP_DANCE_FN_ADVANCED(dance_LSFT_each_tap, NULL, dance_LSFT_reset), +}; +#endif // TD_LSFT_CAPSLOCK_ENABLE // RGB NIGHT MODE #ifdef RGB_MATRIX_ENABLE - static bool rgb_nightmode = false; +static bool rgb_nightmode = false; - // Turn on/off NUM LOCK if current state is different - void activate_rgb_nightmode (bool turn_on) { - if (rgb_nightmode != turn_on) { - rgb_nightmode = !rgb_nightmode; - } +// Turn on/off NUM LOCK if current state is different +void activate_rgb_nightmode(bool turn_on) { + if (rgb_nightmode != turn_on) { + rgb_nightmode = !rgb_nightmode; } +} - bool get_rgb_nightmode(void) { - return rgb_nightmode; - } +bool get_rgb_nightmode(void) { + return rgb_nightmode; +} #endif // RGB_MATRIX_ENABLE // TIMEOUTS #ifdef IDLE_TIMEOUT_ENABLE - static uint16_t timeout_timer = 0; - static uint16_t timeout_counter = 0; //in minute intervals - static uint16_t timeout_threshold = TIMEOUT_THRESHOLD_DEFAULT; +static uint16_t timeout_timer = 0; +static uint16_t timeout_counter = 0; //in minute intervals +static uint16_t timeout_threshold = TIMEOUT_THRESHOLD_DEFAULT; - uint16_t get_timeout_threshold(void) { - return timeout_threshold; - } +uint16_t get_timeout_threshold(void) { + return timeout_threshold; +} - void timeout_reset_timer(void) { - timeout_timer = timer_read(); - timeout_counter = 0; - }; - - void timeout_update_threshold(bool increase) { - if (increase && timeout_threshold < TIMEOUT_THRESHOLD_MAX) timeout_threshold++; - if (!increase && timeout_threshold > 0) timeout_threshold--; - }; - - void timeout_tick_timer(void) { - if (timeout_threshold > 0) { - if (timer_elapsed(timeout_timer) >= 60000) { // 1 minute tick - timeout_counter++; - timeout_timer = timer_read(); - } - #ifdef RGB_MATRIX_ENABLE - if (timeout_threshold > 0 && timeout_counter >= timeout_threshold) { - rgb_matrix_disable_noeeprom(); - } - #endif - } // timeout_threshold = 0 will disable timeout - } +void timeout_reset_timer(void) { + timeout_timer = timer_read(); + timeout_counter = 0; +}; + +void timeout_update_threshold(bool increase) { + if (increase && timeout_threshold < TIMEOUT_THRESHOLD_MAX) timeout_threshold++; + if (!increase && timeout_threshold > 0) timeout_threshold--; +}; + +void timeout_tick_timer(void) { + if (timeout_threshold > 0) { + if (timer_elapsed(timeout_timer) >= 60000) { // 1 minute tick + timeout_counter++; + timeout_timer = timer_read(); + } + #ifdef RGB_MATRIX_ENABLE + if (timeout_threshold > 0 && timeout_counter >= timeout_threshold) { + rgb_matrix_disable_noeeprom(); + } + #endif + } // timeout_threshold = 0 will disable timeout +} #endif // IDLE_TIMEOUT_ENABLE -#if defined(ALTTAB_SCROLL_ENABLE) || defined(IDLE_TIMEOUT_ENABLE) // timer features - __attribute__((weak)) void matrix_scan_keymap(void) {} +#if defined(ALTTAB_SCROLL_ENABLE) || defined(IDLE_TIMEOUT_ENABLE) // timer features +__attribute__((weak)) void matrix_scan_keymap(void) {} - void matrix_scan_user(void) { - #ifdef ALTTAB_SCROLL_ENABLE - encoder_tick_alttabscroll(); - #endif - #ifdef IDLE_TIMEOUT_ENABLE - timeout_tick_timer(); - #endif - matrix_scan_keymap(); - } -#endif // ALTTAB_SCROLL_ENABLE or IDLE_TIMEOUT_ENABLE +void matrix_scan_user(void) { + #ifdef ALTTAB_SCROLL_ENABLE + encoder_tick_alttabscroll(); + #endif + #ifdef IDLE_TIMEOUT_ENABLE + timeout_tick_timer(); + #endif + matrix_scan_keymap(); +} +#endif // ALTTAB_SCROLL_ENABLE or IDLE_TIMEOUT_ENABLE // Initialize variable holding the binary representation of active modifiers. uint8_t mod_state; // ============================================= PROCESS KEY CODES ============================================= -__attribute__ ((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; } +__attribute__((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t * record) { + return true; +} -bool process_record_user(uint16_t keycode, keyrecord_t *record) { +bool process_record_user(uint16_t keycode, keyrecord_t * record) { mod_state = get_mods(); - if (!process_record_keymap(keycode, record)) { return false; } + if (!process_record_keymap(keycode, record)) { + return false; + } switch (keycode) { -// Double Zero - case KC_00: - if (record->event.pressed) { + // Double Zero + case KC_00: + if (record -> event.pressed) { // when keycode KC_00 is pressed SEND_STRING("00"); } else unregister_code16(keycode); break; -// Windows key lock + // Windows key lock case KC_WINLCK: - if (record->event.pressed) { + if (record -> event.pressed) { keymap_config.no_gui = !keymap_config.no_gui; //toggle status - } else unregister_code16(keycode); + } else unregister_code16(keycode); break; - -// Treat Control+Space as if regular Space - case KC_SPC: - { + + // Treat Control+Space as if regular Space + case KC_SPC: { // Initialize a boolean variable that keeps track of the space key status: registered or not? static bool spckey_registered; - if (record->event.pressed) { + if (record -> event.pressed) { // Detect the activation of either ctrl keys if (mod_state & MOD_MASK_CTRL) { // First temporarily canceling both ctrls so that @@ -166,14 +169,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return false; } } - } + } -// Treat Shift+Space as if regular Space - case KC_SHIFTSPC: - { + // Treat Shift+Space as if regular Space + case KC_SHIFTSPC: { // Initialize a boolean variable that keeps track of the space key status: registered or not? static bool spc2key_registered; - if (record->event.pressed) { + if (record -> event.pressed) { // Detect the activation of either shift keys if (mod_state & MOD_MASK_SHIFT) { // First temporarily canceling both shifts so that @@ -195,14 +197,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return false; } } - } + } -// Add INS as SHIFT-modified BackSpace key - case KC_BSPC: - { + // Add INS as SHIFT-modified BackSpace key + case KC_BSPC: { // Initialize a boolean variable that keeps track of the delete key status: registered or not? static bool inskey_registered; - if (record->event.pressed) { + if (record -> event.pressed) { // Detect the activation of either shift keys if (mod_state & MOD_MASK_SHIFT) { // First temporarily canceling both shifts so that @@ -224,99 +225,99 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return false; } } - } + } -/* Add INS as SHIFT-modified DEL key - case KC_DEL: - { - // Initialize a boolean variable that keeps track of the delete key status: registered or not? - static bool inskey_registered; - if (record->event.pressed) { - // Detect the activation of either shift keys - if (mod_state & MOD_MASK_SHIFT) { - // First temporarily canceling both shifts so that - // shift isn't applied to the KC_INS keycode - del_mods(MOD_MASK_SHIFT); - register_code(KC_INS); - // Update the boolean variable to reflect the status of KC_INS - inskey_registered = true; - // Reapplying modifier state so that the held shift key(s) - // still work even after having tapped the Delete/Insert key. - set_mods(mod_state); - return false; - } - } else { // on release of KC_DEL - // In case KC_INS is still being sent even after the release of KC_DEL - if (inskey_registered) { - unregister_code(KC_INS); - inskey_registered = false; - return false; + /* Add INS as SHIFT-modified DEL key + case KC_DEL: + { + // Initialize a boolean variable that keeps track of the delete key status: registered or not? + static bool inskey_registered; + if (record->event.pressed) { + // Detect the activation of either shift keys + if (mod_state & MOD_MASK_SHIFT) { + // First temporarily canceling both shifts so that + // shift isn't applied to the KC_INS keycode + del_mods(MOD_MASK_SHIFT); + register_code(KC_INS); + // Update the boolean variable to reflect the status of KC_INS + inskey_registered = true; + // Reapplying modifier state so that the held shift key(s) + // still work even after having tapped the Delete/Insert key. + set_mods(mod_state); + return false; + } + } else { // on release of KC_DEL + // In case KC_INS is still being sent even after the release of KC_DEL + if (inskey_registered) { + unregister_code(KC_INS); + inskey_registered = false; + return false; + } } - } - } -*/ + } + */ -#ifdef IDLE_TIMEOUT_ENABLE + #ifdef IDLE_TIMEOUT_ENABLE case RGB_TOI: - if(record->event.pressed) { + if (record -> event.pressed) { timeout_update_threshold(true); - } else unregister_code16(keycode); + } else unregister_code16(keycode); break; case RGB_TOD: - if(record->event.pressed) { - timeout_update_threshold(false); //decrease timeout - } else unregister_code16(keycode); + if (record -> event.pressed) { + timeout_update_threshold(false); //decrease timeout + } else unregister_code16(keycode); break; -#endif // IDLE_TIMEOUT_ENABLE -#ifdef RGB_MATRIX_ENABLE + #endif // IDLE_TIMEOUT_ENABLE + #ifdef RGB_MATRIX_ENABLE case RGB_NITE: - if(record->event.pressed) { + if (record -> event.pressed) { rgb_nightmode = !rgb_nightmode; - } else unregister_code16(keycode); + } else unregister_code16(keycode); break; -#endif // RGB_MATRIX_ENABLE + #endif // RGB_MATRIX_ENABLE -#ifdef EMOTICON_ENABLE + #ifdef EMOTICON_ENABLE case EMO_SHRUG: - if (record->event.pressed) SEND_STRING("`\\_(\"/)_/`"); - else unregister_code16(keycode); + if (record -> event.pressed) SEND_STRING("`\\_(\"/)_/`"); + else unregister_code16(keycode); break; case EMO_CONFUSE: - if (record->event.pressed) SEND_STRING("(*_*)"); - else unregister_code16(keycode); + if (record -> event.pressed) SEND_STRING("(*_*)"); + else unregister_code16(keycode); break; case EMO_TEARS: - if (record->event.pressed) SEND_STRING("(T_T)"); - else unregister_code16(keycode); + if (record -> event.pressed) SEND_STRING("(T_T)"); + else unregister_code16(keycode); break; case EMO_NERVOUS: - if (record->event.pressed) SEND_STRING("(~_~;)"); - else unregister_code16(keycode); + if (record -> event.pressed) SEND_STRING("(~_~;)"); + else unregister_code16(keycode); break; case EMO_JOY: - if (record->event.pressed) SEND_STRING("(^o^)"); - else unregister_code16(keycode); + if (record -> event.pressed) SEND_STRING("(^o^)"); + else unregister_code16(keycode); break; case EMO_SAD: - if (record->event.pressed) SEND_STRING(":'-("); - else unregister_code16(keycode); + if (record -> event.pressed) SEND_STRING(":'-("); + else unregister_code16(keycode); break; - #endif // EMOTICON_ENABLE + #endif // EMOTICON_ENABLE - #ifdef ALTTAB_SCROLL_ENABLE + #ifdef ALTTAB_SCROLL_ENABLE case KC_TSTOG: - if (record->event.pressed) encoder_toggle_alttabscroll(); - else unregister_code16(keycode); + if (record -> event.pressed) encoder_toggle_alttabscroll(); + else unregister_code16(keycode); break; - #endif // ALTTAB_SCROLL_ENABLE + #endif // ALTTAB_SCROLL_ENABLE default: - if (record->event.pressed) { + if (record -> event.pressed) { #ifdef RGB_MATRIX_ENABLE - rgb_matrix_enable(); + rgb_matrix_enable(); #endif #ifdef IDLE_TIMEOUT_ENABLE - timeout_reset_timer(); //reset activity timer + timeout_reset_timer(); //reset activity timer #endif } break; @@ -324,8 +325,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { return true; }; - -uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { +uint16_t get_tapping_term(uint16_t keycode, keyrecord_t * record) { switch (keycode) { case KC_SFTUP: return 300; @@ -344,17 +344,16 @@ void activate_numlock(bool turn_on) { } } - // INITIAL STARTUP -__attribute__ ((weak)) void keyboard_post_init_keymap(void) {} +__attribute__((weak)) void keyboard_post_init_keymap(void) {} void keyboard_post_init_user(void) { keyboard_post_init_keymap(); #ifdef STARTUP_NUMLOCK_ON - activate_numlock(true); // turn on Num lock by default so that the numpad layer always has predictable results + activate_numlock(true); // turn on Num lock by default so that the numpad layer always has predictable results #endif // STARTUP_NUMLOC_ON #ifdef IDLE_TIMEOUT_ENABLE - timeout_timer = timer_read(); // set inital time for ide timeout + timeout_timer = timer_read(); // set inital time for ide timeout #endif -} +} \ No newline at end of file diff --git a/users/gourdo1/gourdo1.h b/users/gourdo1/gourdo1.h index a3274a83a439..c15de8ccf027 100644 --- a/users/gourdo1/gourdo1.h +++ b/users/gourdo1/gourdo1.h @@ -15,12 +15,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ - #pragma once // DEFINE MACROS -#define ARRAYSIZE(arr) sizeof(arr)/sizeof(arr[0]) - +#define ARRAYSIZE(arr) sizeof(arr) / sizeof(arr[0]) // LAYERS enum custom_user_layers { @@ -32,127 +30,91 @@ enum custom_user_layers { // KEYCODES enum custom_user_keycodes { - KC_00 = SAFE_RANGE, - ENCFUNC, - KC_WINLCK, //Toggles Win key on and off - RGB_TOI, // Timeout idle time up - RGB_TOD, // Timeout idle time down - RGB_NITE, // Turns off all rgb but allow rgb indicators to work - - EMO_SHRUG, // `\_("/)_/` - EMO_CONFUSE, // (*_*) - EMO_SAD, // :'-( - EMO_NERVOUS, // (~_~;) - EMO_JOY, // (^o^) - EMO_TEARS, // (T_T) - - KC_TSTOG, // Tab Scroll Toggle - - NEW_SAFE_RANGE // new safe range for keymap level custom keycodes + KC_00 = SAFE_RANGE, + ENCFUNC, + KC_WINLCK, //Toggles Win key on and off + RGB_TOI, // Timeout idle time up + RGB_TOD, // Timeout idle time down + RGB_NITE, // Turns off all rgb but allow rgb indicators to work + + EMO_SHRUG, // `\_("/)_/` + EMO_CONFUSE, // (*_*) + EMO_SAD, // :'-( + EMO_NERVOUS, // (~_~;) + EMO_JOY, // (^o^) + EMO_TEARS, // (T_T) + + KC_TSTOG, // Tab Scroll Toggle + + NEW_SAFE_RANGE // new safe range for keymap level custom keycodes }; -#define KC_CAD LALT(LCTL(KC_DEL)) -#define KC_AF4 LALT(KC_F4) -#define KC_TASK LCTL(LSFT(KC_ESC)) +#define KC_CAD LALT(LCTL(KC_DEL)) +#define KC_AF4 LALT(KC_F4) +#define KC_TASK LCTL(LSFT(KC_ESC)) #define CT_PGUP RCTL(KC_PGUP) #define CT_PGDN RCTL(KC_PGDN) #define CT_HOME RCTL(KC_HOME) -#define CT_END RCTL(KC_END) -#define KC_SFTUP RSFT_T(KC_UP) // Shift when held, Up arrow when tapped -#define KC_RAISESPC LT(_RAISE,KC_SPC) // _RAISE layer mod when held, space when tapped -#define KC_LOWERSPC LT(_LOWER,KC_SPC) // _LOWER layer mod when held, space when tapped +#define CT_END RCTL(KC_END) +#define KC_SFTUP RSFT_T(KC_UP) // Shift when held, Up arrow when tapped +#define KC_RAISESPC LT(_RAISE, KC_SPC) // _RAISE layer mod when held, space when tapped +#define KC_LOWERSPC LT(_LOWER, KC_SPC) // _LOWER layer mod when held, space when tapped #define KC_SHIFTSPC LSFT(KC_SPC) - #ifdef TD_LSFT_CAPSLOCK_ENABLE - // Tap Dance Definitions - enum custom_tapdance { - TD_LSFT_CAPSLOCK, - TD_LSFT_CAPS_WIN - }; - - #define KC_LSFTCAPS TD(TD_LSFT_CAPSLOCK) - #define KC_LSFTCAPSWIN TD(TD_LSFT_CAPS_WIN) +// Tap Dance Definitions +enum custom_tapdance { + TD_LSFT_CAPSLOCK, + TD_LSFT_CAPS_WIN +}; + +#define KC_LSFTCAPS TD(TD_LSFT_CAPSLOCK) +#define KC_LSFTCAPSWIN TD(TD_LSFT_CAPS_WIN) #else // regular Shift - #define KC_LSFTCAPS KC_LSFT +#define KC_LSFTCAPS KC_LSFT #endif // TD_LSFT_CAPSLOCK_ENABLE - // ENCODER ACTIONS #ifdef ENCODER_ENABLE - void encoder_action_volume(bool clockwise); - void encoder_action_mediatrack(bool clockwise); - void encoder_action_navword(bool clockwise); - void encoder_action_navpage(bool clockwise); - - uint8_t get_selected_layer(void); - void encoder_action_layerchange(bool clockwise); - - #if defined(RGB_MATRIX_ENABLE) || defined(RGBLIGHT_ENABLE) - void encoder_action_rgb_speed(bool clockwise); - void encoder_action_rgb_hue(bool clockwise); - void encoder_action_rgb_saturation(bool clockwise); - void encoder_action_rgb_brightness(bool clockwise); - void encoder_action_rgb_mode(bool clockwise); - #endif // RGB_MATRIX_ENABLE / RGBLIGHT_ENABLE - - #ifdef ALTTAB_SCROLL_ENABLE - void encoder_action_alttabscroll(bool clockwise); - void encoder_toggle_alttabscroll(void); - void encoder_tick_alttabscroll(void); - #endif // ALTTAB_SCROLL_ENABLE +void encoder_action_volume(bool clockwise); +void encoder_action_mediatrack(bool clockwise); +void encoder_action_navword(bool clockwise); +void encoder_action_navpage(bool clockwise); + +uint8_t get_selected_layer(void); +void encoder_action_layerchange(bool clockwise); + +#if defined(RGB_MATRIX_ENABLE) || defined(RGBLIGHT_ENABLE) +void encoder_action_rgb_speed(bool clockwise); +void encoder_action_rgb_hue(bool clockwise); +void encoder_action_rgb_saturation(bool clockwise); +void encoder_action_rgb_brightness(bool clockwise); +void encoder_action_rgb_mode(bool clockwise); +#endif // RGB_MATRIX_ENABLE / RGBLIGHT_ENABLE + +#ifdef ALTTAB_SCROLL_ENABLE +void encoder_action_alttabscroll(bool clockwise); +void encoder_toggle_alttabscroll(void); +void encoder_tick_alttabscroll(void); +#endif // ALTTAB_SCROLL_ENABLE #endif // ENCODER_ENABLE - #ifdef RGB_MATRIX_ENABLE -//RGB custom colours - #define RGB_GODSPEED 0x00, 0xE4, 0xFF // color for matching keycaps - #define RGB_NAUTILUS 0x00, 0xA4, 0xA9 // Nautilus Font colors - - void activate_rgb_nightmode (bool turn_on); - bool get_rgb_nightmode(void); +void activate_rgb_nightmode(bool turn_on); +bool get_rgb_nightmode(void); #endif - // IDLE TIMEOUTS #ifdef IDLE_TIMEOUT_ENABLE - #define TIMEOUT_THRESHOLD_DEFAULT 15 // default timeout minutes - #define TIMEOUT_THRESHOLD_MAX 140 // upper limits (2 hours and 10 minutes -- no rgb indicators above this value) - - //prototype functions - uint16_t get_timeout_threshold(void); - void timeout_reset_timer(void); - void timeout_update_threshold(bool increase); - void timeout_tick_timer(void); -#endif //IDLE_TIMEOUT_ENABLE +#define TIMEOUT_THRESHOLD_DEFAULT 15 // default timeout minutes +#define TIMEOUT_THRESHOLD_MAX 140 // upper limits (2 hours and 10 minutes -- no rgb indicators above this value) +//prototype functions +uint16_t get_timeout_threshold(void); +void timeout_reset_timer(void); +void timeout_update_threshold(bool increase); +void timeout_tick_timer(void); +#endif //IDLE_TIMEOUT_ENABLE // OTHER FUNCTION PROTOTYPE -void activate_numlock(bool turn_on); - - -/* - * GMMK Pro-specific RGB color customizations (defaults found in quantum/color.h) - */ -#define RGB_ORANGE2 0xFF, 0x28, 0x00 //fix: reduced green from 80 to 28 -#define RGB_PURPLE2 0x80, 0x00, 0xFF //fix: increased red from 7A to 80 -#define RGB_SPRINGGREEN2 0x00, 0xFF, 0x10 //fix: blue was 80, now 10 -#define RGB_YELLOW2 0xFF, 0xB0, 0x00 //fix: green was FF, now B0 -#define RGB_OFFBLUE 0x00, 0x80, 0xFF //new color: blue with a hint of green -#define RGB_DKRED 0x28, 0x00, 0x00 //new color: dark red -#define RGB_OFF RGB_BLACK - -// Added by gourdo1 (for _RAISE layer RGB testing) -// Red Green Blue Expected GMMK Pro result -#define RGB_TEST1 0xFF, 0x00, 0x00 //Q - red good! -#define RGB_TEST2 0x0F, 0xFF, 0x00 //W - green good! -#define RGB_TEST3 0x00, 0x00, 0xFF //E - blue good! -#define RGB_TEST4 0xFF, 0xB0, 0x00 //R - yellow slightly green heavy - reduced green LED by quite a bit -#define RGB_TEST5 0x00, 0xFF, 0xFF //T - cyan good! -#define RGB_TEST6 0xFF, 0x00, 0xFF //Y - magenta very slightly blue heavy? -#define RGB_TEST7 0xFF, 0x28, 0x00 //U - orange very green heavy at default -#define RGB_TEST8 0xFF, 0x00, 0x80 //I - pink good! -#define RGB_TEST9 0x80, 0xFF, 0x00 //O - chartreus good! -#define RGB_TEST10 0x00, 0xFF, 0x10 //P - springgrn fixed: was too blue because green LED has blue in it already -#define RGB_TEST11 0x00, 0x80, 0xFF //A - grn blue good! -#define RGB_TEST12 0x80, 0x00, 0xFF //S - purple good! \ No newline at end of file +void activate_numlock(bool turn_on); \ No newline at end of file From 1f504a2f7eb2fd4fda3a9f782923588751492eee Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Fri, 4 Feb 2022 22:06:42 -0800 Subject: [PATCH 28/54] fixed missing breaks in gourdo1.c + some cosmetic fixes --- .../gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 7 +- .../pro/ansi/keymaps/gourdo1/rgb_matrix_map.h | 2 +- users/gourdo1/gourdo1.c | 65 ++++++++++--------- users/gourdo1/gourdo1.h | 26 ++++---- 4 files changed, 50 insertions(+), 50 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c index 148ca7f6bd4a..eeb630d5f843 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c @@ -110,7 +110,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #if defined(ENCODER_ENABLE) && !defined(ENCODER_DEFAULTACTIONS_ENABLE) // Encoder Functionality when not using userspace defaults void encoder_action_rgbhue(bool clockwise) { - if (clockwise) + if (clockwise) rgblight_increase_hue_noeeprom(); else rgblight_decrease_hue_noeeprom(); @@ -185,9 +185,6 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { rgb_matrix_set_color(LED_L7, RGB_CHARTREUSE); rgb_matrix_set_color(LED_L8, RGB_CHARTREUSE); rgb_matrix_set_color(LED_LSFT, RGB_CHARTREUSE); - //rgb_matrix_set_color(LED_END, RGB_CHARTREUSE); - //rgb_matrix_set_color(LED_R7, RGB_CHARTREUSE); - //rgb_matrix_set_color(LED_R8, RGB_CHARTREUSE); } // Winkey disabled (gaming) mode RGB setup @@ -319,7 +316,7 @@ void keyboard_post_init_keymap(void) { // keyboard_post_init_user() moved to userspace #ifdef RGB_MATRIX_ENABLE rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR); - rgb_matrix_sethsv_noeeprom(24, 255, 127); // Default startup colour (AKA RGB_NAUTILUS) + rgb_matrix_sethsv_noeeprom(20, 255, 127); // Default startup color (Hue:amber Saturation:full Value(bright):mid) activate_rgb_nightmode(false); // Set to true if you want to startup in nightmode, otherwise use Fn + Z to toggle #endif } \ No newline at end of file diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rgb_matrix_map.h b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rgb_matrix_map.h index 97cc6202fd5b..7fc60e781d68 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rgb_matrix_map.h +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rgb_matrix_map.h @@ -18,7 +18,7 @@ along with this program. If not, see . #ifdef RGB_MATRIX_ENABLE // Custom GMMK Pro-specific RGB color customizations (defaults found in quantum/color.h) #define RGB_GODSPEED 0x00, 0xE4, 0xFF // color for matching keycaps -#define RGB_NAUTILUS 0x00, 0xA4, 0xA9 // Nautilus Font colours +#define RGB_NAUTILUS 0x00, 0xA4, 0xA9 // Nautilus Font colors #define RGB_OFFBLUE 0x00, 0x80, 0xFF // new color: blue with a hint of green #define RGB_DKRED 0x28, 0x00, 0x00 // new color: dark red #define RGB_ORANGE2 0xFF, 0x28, 0x00 // fix: reduced green from 80 to 28 diff --git a/users/gourdo1/gourdo1.c b/users/gourdo1/gourdo1.c index 4a2784c608dc..1d755f5fafc6 100644 --- a/users/gourdo1/gourdo1.c +++ b/users/gourdo1/gourdo1.c @@ -169,8 +169,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) { return false; } } - } - + } + break; + // Treat Shift+Space as if regular Space case KC_SHIFTSPC: { // Initialize a boolean variable that keeps track of the space key status: registered or not? @@ -197,8 +198,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) { return false; } } - } - + } + break; + // Add INS as SHIFT-modified BackSpace key case KC_BSPC: { // Initialize a boolean variable that keeps track of the delete key status: registered or not? @@ -225,36 +227,37 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) { return false; } } - } - + } + break; + /* Add INS as SHIFT-modified DEL key - case KC_DEL: - { - // Initialize a boolean variable that keeps track of the delete key status: registered or not? - static bool inskey_registered; - if (record->event.pressed) { - // Detect the activation of either shift keys - if (mod_state & MOD_MASK_SHIFT) { - // First temporarily canceling both shifts so that - // shift isn't applied to the KC_INS keycode - del_mods(MOD_MASK_SHIFT); - register_code(KC_INS); - // Update the boolean variable to reflect the status of KC_INS - inskey_registered = true; - // Reapplying modifier state so that the held shift key(s) - // still work even after having tapped the Delete/Insert key. - set_mods(mod_state); - return false; - } - } else { // on release of KC_DEL - // In case KC_INS is still being sent even after the release of KC_DEL - if (inskey_registered) { - unregister_code(KC_INS); - inskey_registered = false; - return false; - } + case KC_DEL: { + // Initialize a boolean variable that keeps track of the delete key status: registered or not? + static bool inskey_registered; + if (record->event.pressed) { + // Detect the activation of either shift keys + if (mod_state & MOD_MASK_SHIFT) { + // First temporarily canceling both shifts so that + // shift isn't applied to the KC_INS keycode + del_mods(MOD_MASK_SHIFT); + register_code(KC_INS); + // Update the boolean variable to reflect the status of KC_INS + inskey_registered = true; + // Reapplying modifier state so that the held shift key(s) + // still work even after having tapped the Delete/Insert key. + set_mods(mod_state); + return false; } + } else { // on release of KC_DEL + // In case KC_INS is still being sent even after the release of KC_DEL + if (inskey_registered) { + unregister_code(KC_INS); + inskey_registered = false; + return false; + } + } } + break; */ #ifdef IDLE_TIMEOUT_ENABLE diff --git a/users/gourdo1/gourdo1.h b/users/gourdo1/gourdo1.h index c15de8ccf027..09241a2556d9 100644 --- a/users/gourdo1/gourdo1.h +++ b/users/gourdo1/gourdo1.h @@ -32,19 +32,19 @@ enum custom_user_layers { enum custom_user_keycodes { KC_00 = SAFE_RANGE, ENCFUNC, - KC_WINLCK, //Toggles Win key on and off - RGB_TOI, // Timeout idle time up - RGB_TOD, // Timeout idle time down - RGB_NITE, // Turns off all rgb but allow rgb indicators to work - - EMO_SHRUG, // `\_("/)_/` - EMO_CONFUSE, // (*_*) - EMO_SAD, // :'-( - EMO_NERVOUS, // (~_~;) - EMO_JOY, // (^o^) - EMO_TEARS, // (T_T) - - KC_TSTOG, // Tab Scroll Toggle + KC_WINLCK, // Toggles Win key on and off + RGB_TOI, // Timeout idle time up + RGB_TOD, // Timeout idle time down + RGB_NITE, // Turns off all rgb but allow rgb indicators to work + + EMO_SHRUG, // `\_("/)_/` + EMO_CONFUSE, // (*_*) + EMO_SAD, // :'-( + EMO_NERVOUS, // (~_~;) + EMO_JOY, // (^o^) + EMO_TEARS, // (T_T) + + KC_TSTOG, // Tab Scroll Toggle NEW_SAFE_RANGE // new safe range for keymap level custom keycodes }; From 47457741c263fc3041b09373b6ca11b2c42de669 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Fri, 4 Feb 2022 23:01:57 -0800 Subject: [PATCH 29/54] added RGB saturation shortcuts to FN layer --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c index eeb630d5f843..837132a67659 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c @@ -55,7 +55,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_FN1] = LAYOUT( _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_VOLD, KC_VOLU, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, - _______, _______, RGB_VAI, _______, _______, _______, _______, KC_PSCR, KC_SLCK, _______, KC_PAUS, _______, _______, RESET, KC_HOME, + _______, RGB_SAD, RGB_VAI, RGB_SAI, _______, _______, _______, KC_PSCR, KC_SLCK, _______, KC_PAUS, _______, _______, RESET, KC_HOME, KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, _______, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, RGB_TOD, RGB_TOI, _______, _______, RGB_MOD, _______, _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI From 3236182b064f844565016a4def48ffea3e7e9784 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Fri, 4 Feb 2022 23:58:34 -0800 Subject: [PATCH 30/54] Updated FN layer RGB lighting --- .../gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 57 +++++++++---------- 1 file changed, 27 insertions(+), 30 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c index 837132a67659..c7601536401b 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c @@ -213,41 +213,38 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { case _FN1: // on Fn layer select what the encoder does when pressed rgb_matrix_set_color(LED_FN, RGB_RED); //FN key - //NEW RGB LIGHTING TO CORRESPOND TO ACTIVE FN LAYER KEYS: - rgb_matrix_set_color(LED_F1, RGB_RED); - rgb_matrix_set_color(LED_F2, RGB_RED); - rgb_matrix_set_color(LED_F3, RGB_RED); - rgb_matrix_set_color(LED_F4, RGB_RED); - rgb_matrix_set_color(LED_F5, RGB_RED); - rgb_matrix_set_color(LED_F6, RGB_RED); - rgb_matrix_set_color(LED_F7, RGB_RED); - rgb_matrix_set_color(LED_F8, RGB_RED); - rgb_matrix_set_color(LED_F9, RGB_RED); - rgb_matrix_set_color(LED_F10, RGB_RED); - rgb_matrix_set_color(LED_F11, RGB_RED); - rgb_matrix_set_color(LED_INS, RGB_RED); - rgb_matrix_set_color(LED_W, RGB_RED); - rgb_matrix_set_color(LED_A, RGB_RED); - rgb_matrix_set_color(LED_S, RGB_RED); - rgb_matrix_set_color(LED_D, RGB_RED); - rgb_matrix_set_color(LED_Z, RGB_RED); + //NEW RGB LIGHTING TO RING KEYBOARD ON FN LAYER ACTIVATION: + for (uint8_t j = 0; j < ARRAYSIZE(LED_LIST_FUNCROW); j++) { + rgb_matrix_set_color(LED_LIST_FUNCROW[j], RGB_RED); + } + rgb_matrix_set_color(LED_LCTL, RGB_RED); + rgb_matrix_set_color(LED_LALT, RGB_RED); + rgb_matrix_set_color(LED_SPC, RGB_RED); rgb_matrix_set_color(LED_LWIN, RGB_RED); - rgb_matrix_set_color(LED_U, RGB_RED); - rgb_matrix_set_color(LED_I, RGB_RED); - rgb_matrix_set_color(LED_O, RGB_RED); + rgb_matrix_set_color(LED_RALT, RGB_RED); + rgb_matrix_set_color(LED_FN, RGB_OFFBLUE); + rgb_matrix_set_color(LED_RCTL, RGB_RED); rgb_matrix_set_color(LED_BSLS, RGB_RED); - rgb_matrix_set_color(LED_CAPS, RGB_RED); - rgb_matrix_set_color(LED_N, RGB_RED); - rgb_matrix_set_color(LED_COMM, RGB_RED); - rgb_matrix_set_color(LED_DOT, RGB_RED); - rgb_matrix_set_color(LED_PGUP, RGB_RED); - rgb_matrix_set_color(LED_PGDN, RGB_RED); - rgb_matrix_set_color(LED_END, RGB_RED); - rgb_matrix_set_color(LED_UP, RGB_RED); + rgb_matrix_set_color(LED_L1, RGB_RED); + rgb_matrix_set_color(LED_L2, RGB_RED); + rgb_matrix_set_color(LED_L3, RGB_RED); + rgb_matrix_set_color(LED_L4, RGB_RED); + rgb_matrix_set_color(LED_L5, RGB_RED); + rgb_matrix_set_color(LED_L6, RGB_RED); + rgb_matrix_set_color(LED_L7, RGB_RED); + rgb_matrix_set_color(LED_L8, RGB_RED); rgb_matrix_set_color(LED_DOWN, RGB_RED); rgb_matrix_set_color(LED_LEFT, RGB_RED); rgb_matrix_set_color(LED_RIGHT, RGB_RED); - + rgb_matrix_set_color(LED_R1, RGB_RED); + rgb_matrix_set_color(LED_R2, RGB_RED); + rgb_matrix_set_color(LED_R3, RGB_RED); + rgb_matrix_set_color(LED_R4, RGB_RED); + rgb_matrix_set_color(LED_R5, RGB_RED); + rgb_matrix_set_color(LED_R6, RGB_RED); + rgb_matrix_set_color(LED_R7, RGB_RED); + rgb_matrix_set_color(LED_R8, RGB_RED); + /* FN layer for reference: ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 DEL _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_CALC, _______, From 8812d08252456ef95e43831fac240516eccaeaa3 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Mon, 7 Feb 2022 00:54:26 -0800 Subject: [PATCH 31/54] Update readme.md --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index 311a7858ebb6..21823eef7fd3 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -64,10 +64,10 @@ COLEMAK_LAYER_ENABLE = yes - Enabled optional 5th layer for COLEMAK layout. ## All layers diagram Default layer -![image](https://user-images.githubusercontent.com/71780717/124177658-82324880-da7e-11eb-9421-b69100131062.png) +![image](https://github.com/gourdo1/media/blob/main/base.png) Fn Layer -![image](https://user-images.githubusercontent.com/71780717/131255937-06c9691b-835f-4c94-93e6-6d1dc3de272b.png) +![image](https://github.com/gourdo1/media/blob/main/fn1.png) Layer 2 (Caps Lock Mod) ![image](https://user-images.githubusercontent.com/71780717/124177683-8b231a00-da7e-11eb-9434-e2475f679a54.png) From f93d2be6cc43edcdecf2a21e6d4daa785d014b1d Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Mon, 7 Feb 2022 10:43:34 -0800 Subject: [PATCH 32/54] Update readme.md --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index 21823eef7fd3..885f3e6d0f60 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -55,22 +55,22 @@ rules.mk Options ================ STARTUP_NUMLOCK_ON = yes - turns on NUMLOCK by default -ENCODER_DEFAULTACTIONS_ENABLE = yes - Enabled default encoder funtions +ENCODER_DEFAULTACTIONS_ENABLE = yes - Enabled default encoder functions TD_LSFT_CAPSLOCK_ENABLE = yes - This will enable double tap on Left Shift to toggle CAPSLOCK when using KC_LSFTCAPS IDLE_TIMEOUT_ENABLE = yes - Enables Timer functionality; for RGB idle timeouts that can be changed dynamically INVERT_NUMLOCK_INDICATOR - inverts the Numlock indicator, LED is on when numlock is off -- numlock interferes with numpad keys, so should generally be off when numpad layer is active. COLEMAK_LAYER_ENABLE = yes - Enabled optional 5th layer for COLEMAK layout. Use Shift and encoder to enter 5th layer. -## All layers diagram -Default layer -![image](https://github.com/gourdo1/media/blob/main/base.png) +## Layer Diagrams +Base layer +![image](https://raw.githubusercontent.com/gourdo1/media/main/base.png) Fn Layer -![image](https://github.com/gourdo1/media/blob/main/fn1.png) +![image](https://raw.githubusercontent.com/gourdo1/media/main/fn1.png) -Layer 2 (Caps Lock Mod) -![image](https://user-images.githubusercontent.com/71780717/124177683-8b231a00-da7e-11eb-9434-e2475f679a54.png) +Layer 2 (Numpad) +![image](https://raw.githubusercontent.com/gourdo1/media/main/numpad.png) Optional COLEMAK layer ![image](https://user-images.githubusercontent.com/71780717/131235050-980d2f54-2d23-4ae8-a83f-9fcdbe60d6cb.png) From 9ffc70741da51e480f2153517088c4fa018fb639 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Wed, 16 Feb 2022 16:45:01 -0800 Subject: [PATCH 33/54] first attempt to create exponential encoder volume --- users/gourdo1/gourdo1_encoder.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/users/gourdo1/gourdo1_encoder.c b/users/gourdo1/gourdo1_encoder.c index 3cc36513dc9c..bab65456cbe1 100644 --- a/users/gourdo1/gourdo1_encoder.c +++ b/users/gourdo1/gourdo1_encoder.c @@ -27,13 +27,27 @@ along with this program. If not, see . #define ENCODER_DEFAULTACTIONS_INDEX 0 // can select encoder index if there are multiple encoders #endif + static uint16_t key_timer; + void encoder_action_volume(bool clockwise) { if (clockwise) tap_code(KC_VOLU); + key_timer = timer_read(); + if (timer_elapsed(key_timer) < 100) { + tap_code(KC_VOLU); // if less than 100ms have passed, hit vol up again. + } else { + // do nothing if 100ms or more have passed + } else tap_code(KC_VOLD); - } - + key_timer = timer_read(); + if (timer_elapsed(key_timer) < 100) { + tap_code(KC_VOLD); // if less than 100ms have passed, hit vol down again. + } else { + // do nothing if 100ms or more have passed + } + } + void encoder_action_mediatrack(bool clockwise) { if (clockwise) tap_code(KC_MEDIA_NEXT_TRACK); From 323c0608a8918a0a9f32fc4d75cd639cf819cd93 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Wed, 16 Feb 2022 17:33:34 -0800 Subject: [PATCH 34/54] fixes to encoder --- users/gourdo1/gourdo1_encoder.c | 37 +++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/users/gourdo1/gourdo1_encoder.c b/users/gourdo1/gourdo1_encoder.c index bab65456cbe1..72f8c3c35416 100644 --- a/users/gourdo1/gourdo1_encoder.c +++ b/users/gourdo1/gourdo1_encoder.c @@ -27,26 +27,31 @@ along with this program. If not, see . #define ENCODER_DEFAULTACTIONS_INDEX 0 // can select encoder index if there are multiple encoders #endif - static uint16_t key_timer; + static uint16_t key_timer; void encoder_action_volume(bool clockwise) { - if (clockwise) + if (clockwise) { tap_code(KC_VOLU); - key_timer = timer_read(); - if (timer_elapsed(key_timer) < 100) { - tap_code(KC_VOLU); // if less than 100ms have passed, hit vol up again. - } else { - // do nothing if 100ms or more have passed - } - else + if (timer_elapsed(key_timer) < 50) { + tap_code(KC_VOLU); // if less than 50ms have passed, hit vol up again. + key_timer = timer_read(); + } else { + key_timer = timer_read(); + // do nothing if 50ms or more have passed + } + } + else { tap_code(KC_VOLD); - key_timer = timer_read(); - if (timer_elapsed(key_timer) < 100) { - tap_code(KC_VOLD); // if less than 100ms have passed, hit vol down again. - } else { - // do nothing if 100ms or more have passed - } - } + if (timer_elapsed(key_timer) < 100) { + tap_code(KC_VOLD); // if less than 100ms have passed, hit vol down twice. + tap_code(KC_VOLD); + key_timer = timer_read(); + } else { + key_timer = timer_read(); + // do nothing if 100ms or more have passed + } + } + } void encoder_action_mediatrack(bool clockwise) { if (clockwise) From 9520f480de27b3f53a815b7bd6ba1c73610836c2 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Wed, 16 Feb 2022 17:40:45 -0800 Subject: [PATCH 35/54] Update readme.md --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index 885f3e6d0f60..d5cb7c7298a7 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -27,6 +27,7 @@ Numpad Overlay Layer Encoder Functionality * Default knob turn changes volume; button press toggles mute + * Exponential encoder - quick repeated volume up doubles increase; quick repeated volume down triples decrease * FN knob turn changes RGB idle timeout * holding Left Shift changes layers * holding Right Shift navigates page up/down From 3482f7cb4f0404bc704f26999781889aa49fae48 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Thu, 17 Feb 2022 00:30:24 -0800 Subject: [PATCH 36/54] Update readme.md --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index d5cb7c7298a7..8cc1934d8ef9 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -47,9 +47,9 @@ RGB * RGB indicators on left side LEDs: Capslock (green), Scroll Lock (red), and Num Lock not set (orange) * FN + Z to turn off all RGB lights except rgb indicators; press again to toggle -Link to latest firmware binary: https://github.com/gourdo1/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/gourdo1/gmmk_pro_ansi_gourdo1.bin +Link to latest firmware binary: https://github.com/gourdo1/media/raw/main/gmmk_pro_ansi_gourdo1.bin -Link to cheatsheet: https://github.com/gourdo1/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/gourdo1/GMMK_Pro_Cheatsheet.pdf +Link to cheatsheet: https://github.com/gourdo1/media/raw/main/GMMK_Pro_Cheatsheet.pdf rules.mk Options From b2adb743620bde8dcf3a03c9a0c2d54a1ac9cffd Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Thu, 17 Feb 2022 00:41:44 -0800 Subject: [PATCH 37/54] Update readme.md --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index 885f3e6d0f60..ec88016f935e 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -27,6 +27,7 @@ Numpad Overlay Layer Encoder Functionality * Default knob turn changes volume; button press toggles mute + * Exponential encoder - quick repeated volume up doubles increase; quick repeated volume down triples decrease * FN knob turn changes RGB idle timeout * holding Left Shift changes layers * holding Right Shift navigates page up/down @@ -46,19 +47,24 @@ RGB * RGB indicators on left side LEDs: Capslock (green), Scroll Lock (red), and Num Lock not set (orange) * FN + Z to turn off all RGB lights except rgb indicators; press again to toggle -Link to latest firmware binary: https://github.com/gourdo1/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/gourdo1/gmmk_pro_ansi_gourdo1.bin +Link to latest firmware binary: https://github.com/gourdo1/media/raw/main/gmmk_pro_ansi_gourdo1.bin -Link to cheatsheet: https://github.com/gourdo1/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/gourdo1/GMMK_Pro_Cheatsheet.pdf +Link to cheatsheet: https://github.com/gourdo1/media/raw/main/GMMK_Pro_Cheatsheet.pdf rules.mk Options ================ STARTUP_NUMLOCK_ON = yes - turns on NUMLOCK by default + ENCODER_DEFAULTACTIONS_ENABLE = yes - Enabled default encoder functions + TD_LSFT_CAPSLOCK_ENABLE = yes - This will enable double tap on Left Shift to toggle CAPSLOCK when using KC_LSFTCAPS + IDLE_TIMEOUT_ENABLE = yes - Enables Timer functionality; for RGB idle timeouts that can be changed dynamically + INVERT_NUMLOCK_INDICATOR - inverts the Numlock indicator, LED is on when numlock is off -- numlock interferes with numpad keys, so should generally be off when numpad layer is active. + COLEMAK_LAYER_ENABLE = yes - Enabled optional 5th layer for COLEMAK layout. Use Shift and encoder to enter 5th layer. From f954ad409edee8465013c45cb1cee3b839193a8e Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Fri, 25 Feb 2022 00:05:27 -0800 Subject: [PATCH 38/54] Caps Word added --- .../gmmk/pro/ansi/keymaps/gourdo1/caps_word.c | 150 ++++++++++++++++++ .../gmmk/pro/ansi/keymaps/gourdo1/caps_word.h | 127 +++++++++++++++ .../gmmk/pro/ansi/keymaps/gourdo1/readme.md | 1 + .../gmmk/pro/ansi/keymaps/gourdo1/rules.mk | 2 + users/gourdo1/gourdo1.c | 14 +- 5 files changed, 290 insertions(+), 4 deletions(-) create mode 100644 keyboards/gmmk/pro/ansi/keymaps/gourdo1/caps_word.c create mode 100644 keyboards/gmmk/pro/ansi/keymaps/gourdo1/caps_word.h diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/caps_word.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/caps_word.c new file mode 100644 index 000000000000..d2f7b6ee7fc1 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/caps_word.c @@ -0,0 +1,150 @@ +// Copyright 2021-2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// For full documentation, see +// https://getreuer.info/posts/keyboards/caps-word + +#include "caps_word.h" + +static bool caps_word_active = false; + +#if CAPS_WORD_IDLE_TIMEOUT > 0 +#if CAPS_WORD_IDLE_TIMEOUT < 100 || CAPS_WORD_IDLE_TIMEOUT > 30000 +// Constrain timeout to a sensible range. With the 16-bit timer, the longest +// representable timeout is 32768 ms, rounded here to 30000 ms = half a minute. +#error "caps_word: CAPS_WORD_IDLE_TIMEOUT must be between 100 and 30000 ms" +#endif + +static uint16_t idle_timer = 0; + +void caps_word_task(void) { + if (caps_word_active && timer_expired(timer_read(), idle_timer)) { + caps_word_set(false); + } +} +#endif // CAPS_WORD_IDLE_TIMEOUT > 0 + +bool process_caps_word(uint16_t keycode, keyrecord_t* record) { +#ifndef NO_ACTION_ONESHOT + const uint8_t mods = get_mods() | get_oneshot_mods(); +#else + const uint8_t mods = get_mods(); +#endif // NO_ACTION_ONESHOT + + if (!caps_word_active) { + // Pressing both shift keys at the same time enables caps word. + if ((mods & MOD_MASK_SHIFT) == MOD_MASK_SHIFT) { + caps_word_set(true); // Activate Caps Word. + return false; + } + return true; + } else { +#if CAPS_WORD_IDLE_TIMEOUT > 0 + idle_timer = record->event.time + CAPS_WORD_IDLE_TIMEOUT; +#endif // CAPS_WORD_IDLE_TIMEOUT > 0 + } + + if (!record->event.pressed) { return true; } + + if (!(mods & ~MOD_MASK_SHIFT)) { + switch (keycode) { + // Ignore MO, TO, TG, TT, and OSL layer switch keys. + case QK_MOMENTARY ... QK_MOMENTARY_MAX: + case QK_TO ... QK_TO_MAX: + case QK_TOGGLE_LAYER ... QK_TOGGLE_LAYER_MAX: + case QK_LAYER_TAP_TOGGLE ... QK_LAYER_TAP_TOGGLE_MAX: + case QK_ONE_SHOT_LAYER ... QK_ONE_SHOT_LAYER_MAX: + return true; + +#ifndef NO_ACTION_TAPPING + case QK_MOD_TAP ... QK_MOD_TAP_MAX: + if (record->tap.count == 0) { + // Deactivate if a mod becomes active through holding a mod-tap key. + caps_word_set(false); + return true; + } + keycode &= 0xff; + break; + +#ifndef NO_ACTION_LAYER + case QK_LAYER_TAP ... QK_LAYER_TAP_MAX: +#endif // NO_ACTION_LAYER + if (record->tap.count == 0) { return true; } + keycode &= 0xff; + break; +#endif // NO_ACTION_TAPPING + +#ifdef SWAP_HANDS_ENABLE + case QK_SWAP_HANDS ... QK_SWAP_HANDS_MAX: + if (keycode > 0x56F0 || record->tap.count == 0) { return true; } + keycode &= 0xff; + break; +#endif // SWAP_HANDS_ENABLE + } + + if (caps_word_press_user(keycode)) { + return true; + } + } + + caps_word_set(false); // Deactivate Caps Word. + return true; +} + +void caps_word_set(bool active) { + if (active != caps_word_active) { + if (active) { + clear_mods(); +#ifndef NO_ACTION_ONESHOT + clear_oneshot_mods(); +#endif // NO_ACTION_ONESHOT +#if CAPS_WORD_IDLE_TIMEOUT > 0 + idle_timer = timer_read() + CAPS_WORD_IDLE_TIMEOUT; +#endif // CAPS_WORD_IDLE_TIMEOUT > 0 + } else if ((get_weak_mods() & MOD_BIT(KC_LSFT)) != 0) { + // If the weak shift mod is still on, turn it off and send an update to + // the host computer. + del_weak_mods(MOD_BIT(KC_LSFT)); + send_keyboard_report(); + } + + caps_word_active = active; + caps_word_set_user(active); + } +} + +bool caps_word_get(void) { return caps_word_active; } + +__attribute__((weak)) void caps_word_set_user(bool active) {} + +__attribute__((weak)) bool caps_word_press_user(uint16_t keycode) { + switch (keycode) { + // Keycodes that continue Caps Word, with shift applied. + case KC_A ... KC_Z: + add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to the next key. + return true; + + // Keycodes that continue Caps Word, without shifting. + case KC_1 ... KC_0: + case KC_BSPC: + case KC_MINS: + case KC_UNDS: + return true; + + default: + return false; // Deactivate Caps Word. + } +} + diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/caps_word.h b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/caps_word.h new file mode 100644 index 000000000000..7f58dd3f17e8 --- /dev/null +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/caps_word.h @@ -0,0 +1,127 @@ +// Copyright 2021-2022 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +// Caps Word, activated by pressing both shift keys at the same time. +// +// This library implements "Caps Word", which is like conventional Caps Lock, +// but automatically disables itself at the end of the word. This is useful for +// typing all-caps identifiers like `MOD_MASK_ALT`. +// +// Caps Word is activated by pressing the left and right shift keys at the same +// time. This way you don't need a dedicated key for using Caps Word. I've +// tested that this works as expected with one-shot mods and Space Cadet Shift. +// If your shift keys are mod-taps, activate Caps Word by holding both shift +// mod-tap keys until the tapping term, release them, then begin typing. +// +// Optionally, Caps Word may be configured to deactivate if the keyboard is idle +// for some time. This is useful to mitigate unintended shifting when you get +// interrupted or switch to the mouse while Caps Word is active. In your +// config.h, define `CAPS_WORD_IDLE_TIMEOUT` with a time in milliseconds: +// +// #define CAPS_WORD_IDLE_TIMEOUT 5000 // Turn off Caps Word after 5 seconds. +// +// and in your keymap.c, define (or add to) `matrix_scan_user()` as +// +// void matrix_scan_user(void) { +// caps_word_task(); +// // Other tasks... +// } +// +// For full documentation, see +// https://getreuer.info/posts/keyboards/caps-word + +#pragma once + +#include QMK_KEYBOARD_H + +// Call this function from `process_record_user()` to implement Caps Word. +bool process_caps_word(uint16_t keycode, keyrecord_t* record); + +// If CAPS_WORD_IDLE_TIMEOUT is set, call `caps_word_task()` from +// `matrix_scan_user()` as described above. +// +// If CAPS_WORD_IDLE_TIMEOUT isn't set, calling this function has no effect (but +// will still compile). +#if CAPS_WORD_IDLE_TIMEOUT > 0 +void caps_word_task(void); +#else +static inline void caps_word_task(void) {} +#endif + +// Activates or deactivates Caps Word. For instance activate Caps Word with a +// combo by defining a `COMBO_ACTION` that calls `caps_word_set(true)`: +// +// void process_combo_event(uint16_t combo_index, bool pressed) { +// switch(combo_index) { +// case CAPS_COMBO: +// if (pressed) { +// caps_word_set(true); // Activate Caps Word. +// } +// break; +// +// // Other combos... +// } +// } +void caps_word_set(bool active); + +// Returns whether Caps Word is currently active. +bool caps_word_get(void); + +// An optional callback that gets called when Caps Word turns on or off. This is +// useful to represent the current Caps Word state, e.g. by setting an LED or +// playing a sound. In your keymap, define +// +// void caps_word_set_user(bool active) { +// if (active) { +// // Do something when Caps Word activates. +// } else { +// // Do something when Caps Word deactivates. +// } +// } +void caps_word_set_user(bool active); + +// An optional callback which is called on every key press while Caps Word is +// active. When the key should be shifted (that is, a letter key), the callback +// should call `add_weak_mods(MOD_BIT(KC_LSFT))` to shift the key. The callback +// also determines whether the key should continue Caps Word. Returning true +// continues the current "word", while returning false is "word breaking" and +// deactivates Caps Word. The default callback is +// +// bool caps_word_press_user(uint16_t keycode) { +// switch (keycode) { +// // Keycodes that continue Caps Word, with shift applied. +// case KC_A ... KC_Z: +// add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to the next key. +// return true; +// +// // Keycodes that continue Caps Word, without shifting. +// case KC_1 ... KC_0: +// case KC_BSPC: +// case KC_MINS: +// case KC_UNDS: +// return true; +// +// default: +// return false; // Deactivate Caps Word. +// } +// } +// +// To customize, copy the above function into your keymap and add/remove +// keycodes to the above cases. +// +// NOTE: Outside of this callback, you can use `caps_word_set(false)` to +// deactivate Caps Word. +bool caps_word_press_user(uint16_t keycode); + diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index ec88016f935e..f9576f44fec9 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -14,6 +14,7 @@ Basic Shortcuts * Home key on F-key row, Del key next to Backspace * Insert accessible via Shift-Backspace (so shift delete still works in Windows Explorer) * PrtScrn, Scroll Lock, Pause/Break are top right on the keyboard: Fn+F11, Fn+F12, Fn+Home + * Caps Word enabled: To capitalize the next word only, press and release both left and right shift keys at the same time. Details: https://getreuer.info/posts/keyboards/caps-word/index.html Numpad Overlay Layer diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rules.mk b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rules.mk index 99791f505a30..7cb5fa718d49 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rules.mk +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rules.mk @@ -1,3 +1,5 @@ +SRC += caps_word.c + LTO_ENABLE = yes # link time optimization -- achieves a smaller compiled size CONSOLE_ENABLE = no COMMAND_ENABLE = no diff --git a/users/gourdo1/gourdo1.c b/users/gourdo1/gourdo1.c index 1d755f5fafc6..4bdc5ad92252 100644 --- a/users/gourdo1/gourdo1.c +++ b/users/gourdo1/gourdo1.c @@ -19,6 +19,7 @@ along with this program. If not, see . #include "gourdo1.h" +#include "caps_word.h" #ifdef TD_LSFT_CAPSLOCK_ENABLE // Tap once for shift, twice for Caps Lock but only if Win Key in not disabled @@ -126,9 +127,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) { if (!process_record_keymap(keycode, record)) { return false; } - switch (keycode) { - // Double Zero + if (!process_caps_word(keycode, record)) { + return false; + } + // Your macros ... + + switch (keycode) { + // Double Zero case KC_00: if (record -> event.pressed) { // when keycode KC_00 is pressed @@ -136,14 +142,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) { } else unregister_code16(keycode); break; - // Windows key lock + // Windows key lock case KC_WINLCK: if (record -> event.pressed) { keymap_config.no_gui = !keymap_config.no_gui; //toggle status } else unregister_code16(keycode); break; - // Treat Control+Space as if regular Space + // Treat Control+Space as if regular Space case KC_SPC: { // Initialize a boolean variable that keeps track of the space key status: registered or not? static bool spckey_registered; From e3da1e667a4d726bcb96f5f17dfd1ed60037de1e Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Sat, 26 Feb 2022 22:32:30 -0800 Subject: [PATCH 39/54] Added double tap ESC to revert to base layer --- .../gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 22 +++++-------------- .../gmmk/pro/ansi/keymaps/gourdo1/readme.md | 3 ++- users/gourdo1/gourdo1.c | 18 ++++++++------- users/gourdo1/gourdo1.h | 6 ++++- 4 files changed, 23 insertions(+), 26 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c index c7601536401b..17825aa9ddc5 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c @@ -44,7 +44,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_BASE] = LAYOUT( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_MUTE, + KC_ESCLYR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_MUTE, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, TT(_LOWER), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, @@ -97,14 +97,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), #ifdef COLEMAK_LAYER_ENABLE - [_COLEMAK] = LAYOUT( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE, + [_COLEMAK] = LAYOUT( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, TT(_LOWER), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_PGDN, KC_LSFTCAPSWIN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT - ), + ), #endif // COLEMAK_LAYER_ENABLE }; @@ -217,7 +217,7 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { for (uint8_t j = 0; j < ARRAYSIZE(LED_LIST_FUNCROW); j++) { rgb_matrix_set_color(LED_LIST_FUNCROW[j], RGB_RED); } - rgb_matrix_set_color(LED_LCTL, RGB_RED); + rgb_matrix_set_color(LED_LCTL, RGB_RED); rgb_matrix_set_color(LED_LALT, RGB_RED); rgb_matrix_set_color(LED_SPC, RGB_RED); rgb_matrix_set_color(LED_LWIN, RGB_RED); @@ -244,16 +244,6 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { rgb_matrix_set_color(LED_R6, RGB_RED); rgb_matrix_set_color(LED_R7, RGB_RED); rgb_matrix_set_color(LED_R8, RGB_RED); - - /* FN layer for reference: - ESC F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 DEL - _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_CALC, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, - _______, _______, RGB_VAI, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, RESET, KC_HOME, - KC_CAPS, _______, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, - _______, RGB_NITE,RGB_HUI, _______, _______, _______, KC_NLCK, _______, RGB_TOD, RGB_TOI, _______, _______, RGB_MOD, _______, - _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI - */ // Add RGB Timeout Indicator -- shows 0 to 139 using F row and num row; larger numbers using 16bit code uint16_t timeout_threshold = get_timeout_threshold(); @@ -313,7 +303,7 @@ void keyboard_post_init_keymap(void) { // keyboard_post_init_user() moved to userspace #ifdef RGB_MATRIX_ENABLE rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR); - rgb_matrix_sethsv_noeeprom(20, 255, 127); // Default startup color (Hue:amber Saturation:full Value(bright):mid) + rgb_matrix_sethsv_noeeprom(20, 255, 127); // Default startup color (Hue:amber Saturation:full Value(brightness):mid) activate_rgb_nightmode(false); // Set to true if you want to startup in nightmode, otherwise use Fn + Z to toggle #endif } \ No newline at end of file diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index f9576f44fec9..ff0f76bf9a46 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -4,7 +4,7 @@ This Windows-centric layout is based on Jonavin's GMMK Pro layout with some modi Features: -Basic Shortcuts +Basic Features * Most default Glorious shortcuts enabled * Fn-Backslash for Bootloader mode @@ -15,6 +15,7 @@ Basic Shortcuts * Insert accessible via Shift-Backspace (so shift delete still works in Windows Explorer) * PrtScrn, Scroll Lock, Pause/Break are top right on the keyboard: Fn+F11, Fn+F12, Fn+Home * Caps Word enabled: To capitalize the next word only, press and release both left and right shift keys at the same time. Details: https://getreuer.info/posts/keyboards/caps-word/index.html + * Double tap ESC any time to revert to base layer Numpad Overlay Layer diff --git a/users/gourdo1/gourdo1.c b/users/gourdo1/gourdo1.c index 4bdc5ad92252..21fccc69a132 100644 --- a/users/gourdo1/gourdo1.c +++ b/users/gourdo1/gourdo1.c @@ -44,6 +44,8 @@ qk_tap_dance_action_t tap_dance_actions[] = { // Tap once for shift, twice for Caps Lock [TD_LSFT_CAPSLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS), [TD_LSFT_CAPS_WIN] = ACTION_TAP_DANCE_FN_ADVANCED(dance_LSFT_each_tap, NULL, dance_LSFT_reset), + // Tap once for Escape, twice to reset to base layer + [TD_ESC_BASELYR] = ACTION_TAP_DANCE_DUAL_ROLE(KC_ESC, _BASE), }; #endif // TD_LSFT_CAPSLOCK_ENABLE @@ -133,7 +135,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) { } // Your macros ... - switch (keycode) { + switch (keycode) { // Double Zero case KC_00: if (record -> event.pressed) { @@ -175,9 +177,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) { return false; } } - } + } break; - + // Treat Shift+Space as if regular Space case KC_SHIFTSPC: { // Initialize a boolean variable that keeps track of the space key status: registered or not? @@ -204,9 +206,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) { return false; } } - } + } break; - + // Add INS as SHIFT-modified BackSpace key case KC_BSPC: { // Initialize a boolean variable that keeps track of the delete key status: registered or not? @@ -233,9 +235,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) { return false; } } - } + } break; - + /* Add INS as SHIFT-modified DEL key case KC_DEL: { // Initialize a boolean variable that keeps track of the delete key status: registered or not? @@ -262,7 +264,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) { return false; } } - } + } break; */ diff --git a/users/gourdo1/gourdo1.h b/users/gourdo1/gourdo1.h index 09241a2556d9..5c2f87ed0726 100644 --- a/users/gourdo1/gourdo1.h +++ b/users/gourdo1/gourdo1.h @@ -65,13 +65,17 @@ enum custom_user_keycodes { // Tap Dance Definitions enum custom_tapdance { TD_LSFT_CAPSLOCK, - TD_LSFT_CAPS_WIN + TD_LSFT_CAPS_WIN, + TD_ESC_BASELYR }; #define KC_LSFTCAPS TD(TD_LSFT_CAPSLOCK) #define KC_LSFTCAPSWIN TD(TD_LSFT_CAPS_WIN) +#define KC_ESCLYR TD(TD_ESC_BASELYR) #else // regular Shift #define KC_LSFTCAPS KC_LSFT +// regular Escape +#define KC_ESCLYR KC_ESC #endif // TD_LSFT_CAPSLOCK_ENABLE // ENCODER ACTIONS From 703ff6ece719215e85e760aecce23d53c2938799 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Tue, 1 Mar 2022 07:57:05 -0800 Subject: [PATCH 40/54] Update readme.md --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index ff0f76bf9a46..b66231620bc1 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -4,7 +4,7 @@ This Windows-centric layout is based on Jonavin's GMMK Pro layout with some modi Features: -Basic Features +Basics * Most default Glorious shortcuts enabled * Fn-Backslash for Bootloader mode From b18a70125caa8dddc22fe8932d3baf86a61c3101 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Tue, 15 Mar 2022 12:10:30 -0700 Subject: [PATCH 41/54] Squashed commit of the following: commit 9bb63302e1464824f76799120ab7707539532a29 Merge: e6d0373c41 c068878383 Author: gourdo1 Date: Tue Mar 15 12:07:09 2022 -0700 Merge branch 'mousekey-test' of https://github.com/gourdo1/qmk_firmware into mousekey-test commit e6d0373c419c998216e9a1aa645ac625c450e749 Author: gourdo1 Date: Tue Mar 15 12:06:58 2022 -0700 kinetic speed tweaks commit c068878383dbf0512107bc07b72e26f50ae62a28 Merge: fbf2ce83a0 764dc18a81 Author: gourdo1 Date: Tue Mar 15 11:57:42 2022 -0700 Merge branch 'qmk:master' into mousekey-test commit fbf2ce83a0f84613807ddf15ab028b6e6f8afeff Author: gourdo1 Date: Sun Mar 13 22:58:53 2022 -0700 Update readme.md commit 89ddd55f491b7b73d5f104c5135f41e91ce54a4f Author: gourdo1 Date: Sun Mar 13 22:54:09 2022 -0700 MouseKeys incorporated into Numpad Overlay commit 9351862b26ca281e9a17d2d0954539acdf3395aa Author: gourdo1 Date: Sat Mar 12 23:43:26 2022 -0800 Mouse keys mode bound to Win key commit da1de05e91511a4046449daeed6c841856223ecc Author: gourdo1 Date: Sat Mar 12 22:25:53 2022 -0800 mousekeys enable first test --- .../gmmk/pro/ansi/keymaps/gourdo1/config.h | 30 +++++++- .../gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 77 ++++++++++--------- .../gmmk/pro/ansi/keymaps/gourdo1/readme.md | 21 ++--- .../pro/ansi/keymaps/gourdo1/rgb_matrix_map.h | 2 +- .../gmmk/pro/ansi/keymaps/gourdo1/rules.mk | 2 +- users/gourdo1/gourdo1.h | 8 +- 6 files changed, 89 insertions(+), 51 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/config.h b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/config.h index 08cc5d8d2536..582e473cb283 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/config.h +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/config.h @@ -44,4 +44,32 @@ along with this program. If not, see . #if defined COLEMAK_LAYER_ENABLE #define DYNAMIC_KEYMAP_LAYER_COUNT 5 #define _COLEMAK 4 -#endif // COLEMAK_LAYER_ENABLE \ No newline at end of file +#endif // COLEMAK_LAYER_ENABLE + +/* +// Mouse Keys Accelerated Mode Definitions +#define MOUSEKEY_DELAY 3 // Delay between pressing a movement key and cursor movement (default: 10) +#define MOUSEKEY_INTERVAL 13 // Time between cursor movements in milliseconds (default: 20); Try setting to 1000/monitor refresh for smooth movement. +#define MOUSEKEY_MOVE_DELTA 8 // Step size (default: 8) +#define MOUSEKEY_MAX_SPEED 9 // Maximum cursor speed at which acceleration stops (default: 10) +#define MOUSEKEY_TIME_TO_MAX 150 // Time until maximum cursor speed is reached (default: 30) +#define MOUSEKEY_WHEEL_DELAY 0 // Delay between pressing a wheel key and wheel movement (default: 10) +#define MOUSEKEY_WHEEL_INTERVAL 80 // Time between wheel movements (default: 80) +#define MOUSEKEY_WHEEL_MAX_SPEED 8 // Maximum number of scroll steps per scroll action (default: 8) +#define MOUSEKEY_WHEEL_TIME_TO_MAX 40 // Time until maximum scroll speed is reached (default: 40) +*/ + +// Mouse Keys Kinetic Mode Definitions +#define MK_KINETIC_SPEED // Enable Kinetic mode: Uses a quadratic curve on cursor speed to allow precise movements at the beginning and increases speed thereafter. +#define MOUSEKEY_DELAY 3 // Delay between pressing a movement key and cursor movement (default: 10) +#define MOUSEKEY_INTERVAL 13 // Time between cursor movements in milliseconds (default: 20); Try setting to 1000/monitor refresh for smooth movement. +#define MOUSEKEY_MOVE_DELTA 5 // Step size for accelerating from initial to base speed (default: 8) +#define MOUSEKEY_MOVE_MAX 50 // use instead of BASE SPEED to limit speed in Kinetic mode +#define MOUSEKEY_INITIAL_SPEED 100 // Initial speed of the cursor in pixels per second (default: 100) +//#define MOUSEKEY_BASE_SPEED 800 // (broken in QMK 0.16.0) Maximum cursor speed at which acceleration stops (default: 1000) +#define MOUSEKEY_DECELERATED_SPEED 400 // Decelerated cursor speed (default: 400) +#define MOUSEKEY_ACCELERATED_SPEED 2000 // Accelerated cursor speed (default: 3000) +#define MOUSEKEY_WHEEL_INITIAL_MOVEMENTS 16 // Initial number of movements of the mouse wheel (default: 16) +#define MOUSEKEY_WHEEL_BASE_MOVEMENTS 32 // Maximum number of movements at which acceleration stops (default: 32) +#define MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS 48 // Accelerated wheel movements (default: 48) +#define MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS 8 // Decelerated wheel movements (default: 8) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c index 17825aa9ddc5..f551eaa13800 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c @@ -47,7 +47,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_ESCLYR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_MUTE, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, - TT(_LOWER), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, + TT(_NUMPADMOUSE), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, KC_LSFTCAPSWIN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ), @@ -61,39 +61,39 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI ), - /* _LOWER (Numpad) Layout + /* _NUMPADMOUSE Layout * Note: A symbol preceeded by "P" is a Numpad-encoded version of the key -- any app that differentiates will recognize the char as coming from a physical numpad. * ,-------------------------------------------------------------------------------------------------------------. * | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ || ____ | * |=============================================================================================================| * | ____ | P1 | P2 | P3 | P4 | P5 | P6 | P7 | P8 | P9 | P0 | P- | P+ | ________ || ____ | * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| - * | ______ | None | Up | None | None | None | None | P4 | P5 | P6 | P+ | ____ | ____ | _____ || ____ | + * | ______ | PGUP | Up | PGDN | None | None | None | P4 | P5 | P6 | P+ | ____ | ____ | _____ || WhUp | * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| - * | ________ | Left | Down | Rght | None| None | None | P1 | P2 | P3 | P* | ____ | P-Enter || ____ | + * | ________ | Left | Down | Rght | None| None | None | P1 | P2 | P3 | P* | ____ | P-Enter || WhDn | * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| - * | __________ | None | ____ | ____ | ____ | None | None | 0 | 00 | P. | P/ | ______ || ____ || PEnt | + * | __________ | None | ____ | ____ | ____ | None | None | 0 | 00 | P. | P/ | MBt1 ||MS_UP || MBt2 | * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| - * | ____ | ____ | ____ | _____ | ____ | ____ | ____ || ____ | ____ | PEnt | + * | ____ | ____ | ____ | _____ | ____ | ____ | MBt3 ||MS_LT |MS_DN |MS_RT | * `------------------------------------------------------------------------------------------------------------' */ - [_LOWER] = LAYOUT( + [_NUMPADMOUSE] = LAYOUT( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, KC_PMNS, KC_PPLS, _______, _______, - _______, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_P4, KC_P5, KC_P6, KC_PPLS, _______, _______, _______, _______, - _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_P1, KC_P2, KC_P3, KC_PAST, _______, KC_PENT, _______, - _______, KC_NO, _______, _______, _______, KC_NO, KC_NO, KC_P0, KC_00, KC_PDOT, KC_PSLS, _______, _______, KC_PENT, - _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PENT + _______, KC_PGUP, KC_UP, KC_PGDN, KC_NO, KC_NO, KC_NO, KC_P4, KC_P5, KC_P6, KC_PPLS, _______, _______, _______, KC_WH_U, + _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_P1, KC_P2, KC_P3, KC_PAST, _______, KC_PENT, KC_WH_D, + _______, KC_NO, _______, _______, _______, KC_NO, KC_NO, KC_P0, KC_00, KC_PDOT, KC_PSLS, KC_BTN1, KC_MS_U, KC_BTN2, + _______, _______, _______, _______, _______, _______, KC_BTN3, KC_MS_L, KC_MS_D, KC_MS_R ), - [_RAISE] = LAYOUT( + [_MOUSEKEY] = LAYOUT( _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WH_U, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WH_D, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_BTN2, + _______, _______, _______, _______, _______, _______, KC_BTN3, KC_MS_L, KC_MS_D, KC_MS_R ), #ifdef COLEMAK_LAYER_ENABLE @@ -101,9 +101,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_MUTE, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, - TT(_LOWER), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_PGDN, - KC_LSFTCAPSWIN, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + _______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_PGDN, + _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, + _______, _______, _______, KC_SPC, KC_RALT, _______,KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ), #endif // COLEMAK_LAYER_ENABLE }; @@ -258,30 +258,37 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { } break; - // Numpad overlay RGB - case _LOWER: + // Numpad & Mouse Keys overlay RGB + case _NUMPADMOUSE: for (uint8_t i = 0; i < ARRAYSIZE(LED_LIST_NUMPAD); i++) { rgb_matrix_set_color(LED_LIST_NUMPAD[i], RGB_OFFBLUE); } rgb_matrix_set_color(LED_L5, RGB_OFFBLUE); rgb_matrix_set_color(LED_L6, RGB_OFFBLUE); rgb_matrix_set_color(LED_CAPS, RGB_OFFBLUE); + rgb_matrix_set_color(LED_UP, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_DOWN, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_LEFT, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_RIGHT, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_RCTL, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_RSFT, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_END, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_PGUP, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_PGDN, RGB_CHARTREUSE); break; - // RAISE mode (RGB color mix testing) - case _RAISE: - rgb_matrix_set_color(LED_Q, RGB_TEST1); - rgb_matrix_set_color(LED_W, RGB_TEST2); - rgb_matrix_set_color(LED_E, RGB_TEST3); - rgb_matrix_set_color(LED_R, RGB_TEST4); - rgb_matrix_set_color(LED_T, RGB_TEST5); - rgb_matrix_set_color(LED_Y, RGB_TEST6); - rgb_matrix_set_color(LED_U, RGB_TEST7); - rgb_matrix_set_color(LED_I, RGB_TEST8); - rgb_matrix_set_color(LED_O, RGB_TEST9); - rgb_matrix_set_color(LED_P, RGB_TEST10); - rgb_matrix_set_color(LED_A, RGB_TEST11); - rgb_matrix_set_color(LED_S, RGB_TEST12); + // MOUSEKEYS mode RGB + case _MOUSEKEY: + rgb_matrix_set_color(LED_UP, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_DOWN, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_LEFT, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_RIGHT, RGB_CHARTREUSE); + rgb_matrix_set_color(LED_RCTL, RGB_CYAN); + rgb_matrix_set_color(LED_RSFT, RGB_CYAN); + rgb_matrix_set_color(LED_END, RGB_CYAN); + rgb_matrix_set_color(LED_PGUP, RGB_OFFBLUE); + rgb_matrix_set_color(LED_PGDN, RGB_OFFBLUE); + break; // Colemak layer RGB diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index b66231620bc1..d4dadfc8b45d 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -4,7 +4,7 @@ This Windows-centric layout is based on Jonavin's GMMK Pro layout with some modi Features: -Basics +Core Functionality * Most default Glorious shortcuts enabled * Fn-Backslash for Bootloader mode @@ -14,17 +14,20 @@ Basics * Home key on F-key row, Del key next to Backspace * Insert accessible via Shift-Backspace (so shift delete still works in Windows Explorer) * PrtScrn, Scroll Lock, Pause/Break are top right on the keyboard: Fn+F11, Fn+F12, Fn+Home - * Caps Word enabled: To capitalize the next word only, press and release both left and right shift keys at the same time. Details: https://getreuer.info/posts/keyboards/caps-word/index.html + * Caps Word enabled: To capitalize the next word only, press and release both left and right shift keys at the same time. + Details: https://getreuer.info/posts/keyboards/caps-word/index.html * Double tap ESC any time to revert to base layer -Numpad Overlay Layer +Numpad + Mouse Keys Layer (Capslock key) - * Re-worked/simplified overlay numpad upon Capslock key hold (temp) or double press (locked) with RGB highlighting - * Numpad layer (capslock key) disables much of keyboard, except X, C, V for cut, copy, paste, WASD become cursor keys and all number - keys become numpad versions (so Alt character codes work regardless of which number keys you use) - * Numpad turns both right arrow and End keys into Numpad-Enter for convenience. + * Overlay numpad + mouse keys are accessed through Capslock key hold (temp) or double press (locked) with RGB highlighting + * Mouse Keys allow you to use the mouse without taking your hand off the keyboard. + * Numpad layer disables much of keyboard, except X/C/V for cut/copy/paste, WASD for cursor, Q/E for PgUp/PgDn, cursor keys + become mouse keys and all number keys become numpad versions (so Alt char codes work regardless of which set you use) * Fn & N keys light up orange if system numlock is off (inverted status), indicating numpad keys will not deliver expected output (FN + N to toggle) + * Mouse Keys can also be accessed as a standalone layer by Left Shift-turning the Encoder until the cursor keys light up green + * Mouse controls are: Cursor keys = move mouse; RShift = button1, End = button2, RCtrl = button3, PgUp/PgDn = Scroll wheel Encoder Functionality @@ -37,7 +40,7 @@ Encoder Functionality * holding Right Ctrl changes RGB hue/color * holding Left Alt changes media prev/next track -RGB +Global RGB Controls * RGB backlight lighting effect: FN + up/down * RGB backlight effect speed: FN + left/right @@ -53,7 +56,7 @@ Link to latest firmware binary: https://github.com/gourdo1/media/raw/main/gmmk_p Link to cheatsheet: https://github.com/gourdo1/media/raw/main/GMMK_Pro_Cheatsheet.pdf - + rules.mk Options ================ diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rgb_matrix_map.h b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rgb_matrix_map.h index 7fc60e781d68..38da50754b4c 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rgb_matrix_map.h +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rgb_matrix_map.h @@ -27,7 +27,7 @@ along with this program. If not, see . #define RGB_YELLOW2 0xFF, 0xB0, 0x00 // fix: green was FF, now B0 #define RGB_OFF RGB_BLACK -// Added by gourdo1 for _RAISE layer RGB testing +// Added by gourdo1 for RGB testing // Red Green Blue Expected GMMK Pro result #define RGB_TEST1 0xFF, 0x00, 0x00 // Q - red good! #define RGB_TEST2 0x0F, 0xFF, 0x00 // W - green good! diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rules.mk b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rules.mk index 7cb5fa718d49..cd23d7584ce5 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rules.mk +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rules.mk @@ -3,7 +3,7 @@ SRC += caps_word.c LTO_ENABLE = yes # link time optimization -- achieves a smaller compiled size CONSOLE_ENABLE = no COMMAND_ENABLE = no -MOUSEKEY_ENABLE = no +MOUSEKEY_ENABLE = yes VIA_ENABLE = no TAP_DANCE_ENABLE = yes diff --git a/users/gourdo1/gourdo1.h b/users/gourdo1/gourdo1.h index 5c2f87ed0726..ac42293de58e 100644 --- a/users/gourdo1/gourdo1.h +++ b/users/gourdo1/gourdo1.h @@ -24,8 +24,8 @@ along with this program. If not, see . enum custom_user_layers { _BASE, _FN1, - _LOWER, - _RAISE, + _NUMPADMOUSE, + _MOUSEKEY, }; // KEYCODES @@ -57,8 +57,8 @@ enum custom_user_keycodes { #define CT_HOME RCTL(KC_HOME) #define CT_END RCTL(KC_END) #define KC_SFTUP RSFT_T(KC_UP) // Shift when held, Up arrow when tapped -#define KC_RAISESPC LT(_RAISE, KC_SPC) // _RAISE layer mod when held, space when tapped -#define KC_LOWERSPC LT(_LOWER, KC_SPC) // _LOWER layer mod when held, space when tapped +#define KC_RAISESPC LT(_MOUSEKEY, KC_SPC) // _MOUSEKEY layer mod when held, space when tapped +#define KC_LOWERSPC LT(_NUMPADMOUSE, KC_SPC) // _NUMPAD-MOUSE layer mod when held, space when tapped #define KC_SHIFTSPC LSFT(KC_SPC) #ifdef TD_LSFT_CAPSLOCK_ENABLE From 8049c1d8f6c53e32625f578d5ef5ec25b27defaf Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Wed, 16 Mar 2022 08:42:43 -0700 Subject: [PATCH 42/54] Added back VIA support --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md | 1 + keyboards/gmmk/pro/ansi/keymaps/gourdo1/rules.mk | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index d4dadfc8b45d..de2bd032600b 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -6,6 +6,7 @@ Features: Core Functionality + * VIA support enabled * Most default Glorious shortcuts enabled * Fn-Backslash for Bootloader mode * Capslock toggled by double tap of Left Shift key or FN + Capslock (RGB highlighted) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rules.mk b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rules.mk index cd23d7584ce5..553d9d0d5fda 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rules.mk +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rules.mk @@ -5,7 +5,7 @@ CONSOLE_ENABLE = no COMMAND_ENABLE = no MOUSEKEY_ENABLE = yes -VIA_ENABLE = no +VIA_ENABLE = yes TAP_DANCE_ENABLE = yes BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite From f3f36d7c100895aaafc5e51b586abb8c850bc73a Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Thu, 24 Mar 2022 13:14:18 -0700 Subject: [PATCH 43/54] Update readme.md --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index de2bd032600b..195aa44e67b4 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -8,6 +8,7 @@ Core Functionality * VIA support enabled * Most default Glorious shortcuts enabled + * N-key Rollover (NKRO) enabled * Fn-Backslash for Bootloader mode * Capslock toggled by double tap of Left Shift key or FN + Capslock (RGB highlighted) * Gaming mode (FN + Win-key) locks out Win-key as well as double-tap Shift Capslock; Also RGB highlights WSAD and nearby gaming From ec14a442d8ed5139824d5d36d31b0689bd2f02e1 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Wed, 30 Mar 2022 14:52:15 -0700 Subject: [PATCH 44/54] Update readme.md --- .../gmmk/pro/ansi/keymaps/gourdo1/readme.md | 117 +++++++++--------- 1 file changed, 56 insertions(+), 61 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index 195aa44e67b4..1fd251ecc7fb 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -1,66 +1,61 @@ -# gourdo1's GMMK Pro layout - -This Windows-centric layout is based on Jonavin's GMMK Pro layout with some modifications to keymap, functionality and RGB. - -Features: - -Core Functionality - - * VIA support enabled - * Most default Glorious shortcuts enabled - * N-key Rollover (NKRO) enabled - * Fn-Backslash for Bootloader mode - * Capslock toggled by double tap of Left Shift key or FN + Capslock (RGB highlighted) - * Gaming mode (FN + Win-key) locks out Win-key as well as double-tap Shift Capslock; Also RGB highlights WSAD and nearby gaming - related keys - * Home key on F-key row, Del key next to Backspace - * Insert accessible via Shift-Backspace (so shift delete still works in Windows Explorer) - * PrtScrn, Scroll Lock, Pause/Break are top right on the keyboard: Fn+F11, Fn+F12, Fn+Home - * Caps Word enabled: To capitalize the next word only, press and release both left and right shift keys at the same time. - Details: https://getreuer.info/posts/keyboards/caps-word/index.html - * Double tap ESC any time to revert to base layer - -Numpad + Mouse Keys Layer (Capslock key) - - * Overlay numpad + mouse keys are accessed through Capslock key hold (temp) or double press (locked) with RGB highlighting - * Mouse Keys allow you to use the mouse without taking your hand off the keyboard. - * Numpad layer disables much of keyboard, except X/C/V for cut/copy/paste, WASD for cursor, Q/E for PgUp/PgDn, cursor keys - become mouse keys and all number keys become numpad versions (so Alt char codes work regardless of which set you use) - * Fn & N keys light up orange if system numlock is off (inverted status), indicating numpad keys will not deliver expected output - (FN + N to toggle) - * Mouse Keys can also be accessed as a standalone layer by Left Shift-turning the Encoder until the cursor keys light up green - * Mouse controls are: Cursor keys = move mouse; RShift = button1, End = button2, RCtrl = button3, PgUp/PgDn = Scroll wheel - -Encoder Functionality - - * Default knob turn changes volume; button press toggles mute - * Exponential encoder - quick repeated volume up doubles increase; quick repeated volume down triples decrease - * FN knob turn changes RGB idle timeout - * holding Left Shift changes layers - * holding Right Shift navigates page up/down - * holding Left Ctrl navigates prev/next word - * holding Right Ctrl changes RGB hue/color - * holding Left Alt changes media prev/next track - -Global RGB Controls - - * RGB backlight lighting effect: FN + up/down - * RGB backlight effect speed: FN + left/right - * RGB backlight hue cycle: FN + A/D - * RGB backlight brightness: FN + W/S - * RGB backlight night mode toggle: FN + Z (indicators still work) - * RGB backlight timeout: FN + Encoder or "," and "." (default 15 minutes) - - indicators in FN layer using RGB in F-key and number rows to show the current timeout in minutes - * RGB indicators on left side LEDs: Capslock (green), Scroll Lock (red), and Num Lock not set (orange) - * FN + Z to turn off all RGB lights except rgb indicators; press again to toggle +# gourdo1's GMMK Pro ANSI layout + +This Windows-centric layout is based on [Jonavin's](https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/jonavin) GMMK Pro layout with several additions, modifications, a tweaked keymap, updated layers and expanded RGB controls. + +## Features: + +### Core Functionality + +* [VIA](https://www.caniusevia.com/) support enabled +* Most [default Glorious shortcuts](https://cdn.shopify.com/s/files/1/0549/2681/files/GMMK_Pro_User_Guide.pdf) enabled +* [N-key Rollover](https://en.wikipedia.org/wiki/Rollover_(keyboard)#n-key_rollover) (NKRO) enabled +* Fn-Backslash for [Bootloader mode](https://github.com/qmk/qmk_firmware/blob/master/docs/newbs_flashing.md) +* Capslock toggled by double tap of Left Shift key or FN + Capslock (RGB green highlighted) +* Gaming mode (FN + Win-key) locks out Win-key as well as double-tap Shift Capslock; Also RGB highlights WSAD and nearby gaming related keys +* Home key on F-key row, Del key next to Backspace +* Insert accessible via Shift-Backspace (so shift delete still works in Windows Explorer) +* PrtScrn, Scroll Lock, Pause/Break are top right on the keyboard: Fn+F11, Fn+F12, Fn+Home +* [Caps Word](https://getreuer.info/posts/keyboards/caps-word/index.html) enabled: To capitalize the next word only, press and release both left and right shift keys at the same time. +* Double tap ESC any time to revert to base layer + +### Numpad + Mouse Keys (Capslock key) + +* Overlay numpad + [Mouse Keys](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_mouse_keys.md) are accessed through Capslock key hold (temp) or double press (locked) with RGB highlighting +* [Mouse Keys](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_mouse_keys.md) allow you to use the mouse without taking your hand off the keyboard. +* Numpad layer disables much of keyboard, except X/C/V for cut/copy/paste, WASD for cursor, Q/E for PgUp/PgDn, cursor keys become mouse keys and all number keys become numpad versions (so Alt char codes work regardless of which set you use) +* Fn & N keys light up orange if system numlock is off (inverted status), indicating numpad keys will not deliver expected output (FN + N to toggle) +* Mouse Keys can also be accessed as a standalone layer by Left Shift-turning the Encoder until the cursor keys light up green +* Mouse controls are: Cursor keys = move mouse; RShift = button1, End = button2, RCtrl = button3, PgUp/PgDn = Scroll wheel + +### Encoder Functionality + +* Default knob turn changes volume; button press toggles mute +* Exponential encoder - quick repeated volume up doubles increase; quick repeated volume down triples decrease +* FN knob turn changes RGB idle timeout +* holding Left Shift changes layers +* holding Right Shift navigates page up/down +* holding Left Ctrl navigates prev/next word +* holding Right Ctrl changes RGB hue/color +* holding Left Alt changes media prev/next track + +### Global RGB Controls + +* RGB backlight lighting effect: FN + up/down +* RGB backlight effect speed: FN + left/right +* RGB backlight hue cycle: FN + A/D +* RGB backlight brightness: FN + W/S +* RGB backlight night mode toggle: FN + Z (indicators still work) +* RGB backlight timeout: FN + Encoder or "," and "." (default 15 minutes) + * indicators in FN layer using RGB in F-key and number rows to show the current timeout in minutes +* RGB indicators on left side LEDs: Capslock (green), Scroll Lock (red), and Num Lock not set (orange) +* FN + Z to turn off RGB backlighting; press again to toggle Link to latest firmware binary: https://github.com/gourdo1/media/raw/main/gmmk_pro_ansi_gourdo1.bin Link to cheatsheet: https://github.com/gourdo1/media/raw/main/GMMK_Pro_Cheatsheet.pdf -rules.mk Options -================ +## rules.mk Options STARTUP_NUMLOCK_ON = yes - turns on NUMLOCK by default @@ -76,14 +71,14 @@ COLEMAK_LAYER_ENABLE = yes - Enabled optional 5th layer for COLEMAK layout. ## Layer Diagrams -Base layer +### Base layer ![image](https://raw.githubusercontent.com/gourdo1/media/main/base.png) -Fn Layer +### Fn Layer ![image](https://raw.githubusercontent.com/gourdo1/media/main/fn1.png) -Layer 2 (Numpad) +### Layer 2 (Numpad) ![image](https://raw.githubusercontent.com/gourdo1/media/main/numpad.png) -Optional COLEMAK layer +### COLEMAK layer ![image](https://user-images.githubusercontent.com/71780717/131235050-980d2f54-2d23-4ae8-a83f-9fcdbe60d6cb.png) From 74446803d1f7a315f849cd79ae0d021e48c5a626 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Wed, 6 Apr 2022 17:10:29 -0700 Subject: [PATCH 45/54] Domain shortcuts added to keymap --- .../gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 27 ++++++++++++++++--- .../gmmk/pro/ansi/keymaps/gourdo1/readme.md | 11 ++++---- users/gourdo1/gourdo1.c | 27 +++++++++++++++++++ 3 files changed, 56 insertions(+), 9 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c index f551eaa13800..c0fd7313dcaf 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c @@ -52,12 +52,29 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN1),KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ), + /* FN1 Layout + * + * ,-------------------------------------------------------------------------------------------------------------. + * | Esc ||MyCmp |WbHom | Calc |MdSel ||MdPrv |MdNxt |MdPly |MdStp ||VolDn |VolUp |PrScr |ScrLk ||Pause || ____ | + * |=============================================================================================================| + * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |RGBTOD|RGBTOI| ________ ||RGBTOG| + * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| + * | ______ |RGBSAD|RGBVAI|RGBSAI| ____ | ____ |YAHOO | ____ | ____ |OUTLK |Pause | ____ | ____ | Reset || Home | + * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| + * | Capslock |RGBHUD|RGBVAD|RGBHUI| ____|GMAIL |HTMAIL| ____ | ____ | ____ | ____ | ____ | __________ || End | + * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| + * | __________ |RGBNIT| ____ | ____ | ____ | ____ |NumLk | ____ |DOTCOM| ____ | ____ | ______ ||RGBMOD|| ____ | + * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| + * | ____ | WinKyLk | ____ | _____ | ____ | ____ | ____ ||RGBSPD|RGBRMD|RGBSPI| + * `------------------------------------------------------------------------------------------------------------' + */ + [_FN1] = LAYOUT( _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_VOLD, KC_VOLU, KC_PSCR, KC_SLCK, KC_PAUS, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, - _______, RGB_SAD, RGB_VAI, RGB_SAI, _______, _______, _______, KC_PSCR, KC_SLCK, _______, KC_PAUS, _______, _______, RESET, KC_HOME, - KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, - _______, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, RGB_TOD, RGB_TOI, _______, _______, RGB_MOD, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOD, RGB_TOI, _______, RGB_TOG, + _______, RGB_SAD, RGB_VAI, RGB_SAI, _______, _______, YAHOO , _______, _______, OUTLOOK, KC_PAUS, _______, _______, RESET, KC_HOME, + KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, GMAIL , HOTMAIL, _______, _______, _______, _______, _______, _______, KC_END, + _______, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, DOTCOM , _______, _______, _______, RGB_MOD, _______, _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI ), @@ -244,6 +261,8 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { rgb_matrix_set_color(LED_R6, RGB_RED); rgb_matrix_set_color(LED_R7, RGB_RED); rgb_matrix_set_color(LED_R8, RGB_RED); + rgb_matrix_set_color(LED_MINS, RGB_OFFBLUE); + rgb_matrix_set_color(LED_EQL, RGB_OFFBLUE); // Add RGB Timeout Indicator -- shows 0 to 139 using F row and num row; larger numbers using 16bit code uint16_t timeout_threshold = get_timeout_threshold(); diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index 1fd251ecc7fb..19d9c5eedd82 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -8,14 +8,15 @@ This Windows-centric layout is based on [Jonavin's](https://github.com/qmk/qmk_f * [VIA](https://www.caniusevia.com/) support enabled * Most [default Glorious shortcuts](https://cdn.shopify.com/s/files/1/0549/2681/files/GMMK_Pro_User_Guide.pdf) enabled -* [N-key Rollover](https://en.wikipedia.org/wiki/Rollover_(keyboard)#n-key_rollover) (NKRO) enabled -* Fn-Backslash for [Bootloader mode](https://github.com/qmk/qmk_firmware/blob/master/docs/newbs_flashing.md) -* Capslock toggled by double tap of Left Shift key or FN + Capslock (RGB green highlighted) +* [N-key Rollover](https://en.wikipedia.org/wiki/Rollover_(keyboard)#n-key_rollover) (NKRO) enabled * Gaming mode (FN + Win-key) locks out Win-key as well as double-tap Shift Capslock; Also RGB highlights WSAD and nearby gaming related keys +* [Caps Word](https://getreuer.info/posts/keyboards/caps-word/index.html) enabled: To capitalize the next word only, press and release both left and right shift keys at the same time. +* Domain shortcuts: FN+.=".com", FN+O="outlook.com", FN+Y="yahoo.com", FN+H="hotmail.com", FN+G="gmail.com", +* Capslock toggled by double tap of Left Shift key or FN + Capslock (RGB green highlighted) +* Fn-Backslash for [Bootloader mode](https://github.com/qmk/qmk_firmware/blob/master/docs/newbs_flashing.md) * Home key on F-key row, Del key next to Backspace * Insert accessible via Shift-Backspace (so shift delete still works in Windows Explorer) * PrtScrn, Scroll Lock, Pause/Break are top right on the keyboard: Fn+F11, Fn+F12, Fn+Home -* [Caps Word](https://getreuer.info/posts/keyboards/caps-word/index.html) enabled: To capitalize the next word only, press and release both left and right shift keys at the same time. * Double tap ESC any time to revert to base layer ### Numpad + Mouse Keys (Capslock key) @@ -45,7 +46,7 @@ This Windows-centric layout is based on [Jonavin's](https://github.com/qmk/qmk_f * RGB backlight hue cycle: FN + A/D * RGB backlight brightness: FN + W/S * RGB backlight night mode toggle: FN + Z (indicators still work) -* RGB backlight timeout: FN + Encoder or "," and "." (default 15 minutes) +* RGB backlight timeout: FN + Encoder or "-" and "=" (default 15 minutes) * indicators in FN layer using RGB in F-key and number rows to show the current timeout in minutes * RGB indicators on left side LEDs: Capslock (green), Scroll Lock (red), and Num Lock not set (orange) * FN + Z to turn off RGB backlighting; press again to toggle diff --git a/users/gourdo1/gourdo1.c b/users/gourdo1/gourdo1.c index 21fccc69a132..cac6d850f8eb 100644 --- a/users/gourdo1/gourdo1.c +++ b/users/gourdo1/gourdo1.c @@ -136,6 +136,33 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) { // Your macros ... switch (keycode) { + + // DotCom domain shortcuts + case DOTCOM: + if (record -> event.pressed) SEND_STRING(".com"); + else unregister_code16(keycode); + break; + + case OUTLOOK: + if (record -> event.pressed) SEND_STRING("outlook.com"); + else unregister_code16(keycode); + break; + + case GMAIL: + if (record -> event.pressed) SEND_STRING("gmail.com"); + else unregister_code16(keycode); + break; + + case HOTMAIL: + if (record -> event.pressed) SEND_STRING("hotmail.com"); + else unregister_code16(keycode); + break; + + case YAHOO: + if (record -> event.pressed) SEND_STRING("yahoo.com"); + else unregister_code16(keycode); + break; + // Double Zero case KC_00: if (record -> event.pressed) { From a9ccdfe1115c7780caef95bbdc0dd6db908568a3 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Wed, 6 Apr 2022 19:26:06 -0700 Subject: [PATCH 46/54] domain macro fixes --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 8 ++++---- users/gourdo1/gourdo1.c | 13 +++++++------ users/gourdo1/gourdo1.h | 6 ++++++ 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c index c0fd7313dcaf..9fa9eaf1faff 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c @@ -63,7 +63,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| * | Capslock |RGBHUD|RGBVAD|RGBHUI| ____|GMAIL |HTMAIL| ____ | ____ | ____ | ____ | ____ | __________ || End | * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| - * | __________ |RGBNIT| ____ | ____ | ____ | ____ |NumLk | ____ |DOTCOM| ____ | ____ | ______ ||RGBMOD|| ____ | + * | __________ |RGBNIT| ____ | ____ | ____ | ____ |NumLk | ____ | ____ |DOTCOM| ____ | ______ ||RGBMOD|| ____ | * |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======| * | ____ | WinKyLk | ____ | _____ | ____ | ____ | ____ ||RGBSPD|RGBRMD|RGBSPI| * `------------------------------------------------------------------------------------------------------------' @@ -72,9 +72,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_FN1] = LAYOUT( _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_VOLD, KC_VOLU, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOD, RGB_TOI, _______, RGB_TOG, - _______, RGB_SAD, RGB_VAI, RGB_SAI, _______, _______, YAHOO , _______, _______, OUTLOOK, KC_PAUS, _______, _______, RESET, KC_HOME, - KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, GMAIL , HOTMAIL, _______, _______, _______, _______, _______, _______, KC_END, - _______, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, DOTCOM , _______, _______, _______, RGB_MOD, _______, + _______, RGB_SAD, RGB_VAI, RGB_SAI, _______, _______, YAHOO, _______, _______, OUTLOOK, KC_PAUS, _______, _______, RESET, KC_HOME, + KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, GMAIL, HOTMAIL, _______, _______, _______, _______, _______, _______, KC_END, + _______, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, _______, DOTCOM, _______, _______, RGB_MOD, _______, _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI ), diff --git a/users/gourdo1/gourdo1.c b/users/gourdo1/gourdo1.c index cac6d850f8eb..1a6450f5de84 100644 --- a/users/gourdo1/gourdo1.c +++ b/users/gourdo1/gourdo1.c @@ -138,8 +138,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) { switch (keycode) { // DotCom domain shortcuts - case DOTCOM: - if (record -> event.pressed) SEND_STRING(".com"); + case YAHOO: + if (record -> event.pressed) SEND_STRING("yahoo.com"); else unregister_code16(keycode); break; @@ -154,12 +154,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) { break; case HOTMAIL: - if (record -> event.pressed) SEND_STRING("hotmail.com"); - else unregister_code16(keycode); + if (record -> event.pressed) { + SEND_STRING("hotmail.com"); + } else unregister_code16(keycode); break; - case YAHOO: - if (record -> event.pressed) SEND_STRING("yahoo.com"); + case DOTCOM: + if (record -> event.pressed) SEND_STRING(".com"); else unregister_code16(keycode); break; diff --git a/users/gourdo1/gourdo1.h b/users/gourdo1/gourdo1.h index ac42293de58e..e20ab9728a32 100644 --- a/users/gourdo1/gourdo1.h +++ b/users/gourdo1/gourdo1.h @@ -37,6 +37,12 @@ enum custom_user_keycodes { RGB_TOD, // Timeout idle time down RGB_NITE, // Turns off all rgb but allow rgb indicators to work + YAHOO, // yahoo.com + OUTLOOK, // outlook.com + GMAIL, // gmail.com + HOTMAIL, // hotmail.com + DOTCOM, // .com + EMO_SHRUG, // `\_("/)_/` EMO_CONFUSE, // (*_*) EMO_SAD, // :'-( From 2a474bf340571c33a811da34893bc2bc0ac0030a Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Wed, 6 Apr 2022 20:37:38 -0700 Subject: [PATCH 47/54] Update gourdo1.c --- users/gourdo1/gourdo1.c | 60 ++++++++++++++++++++++++++++++++--------- 1 file changed, 47 insertions(+), 13 deletions(-) diff --git a/users/gourdo1/gourdo1.c b/users/gourdo1/gourdo1.c index 1a6450f5de84..b964729be953 100644 --- a/users/gourdo1/gourdo1.c +++ b/users/gourdo1/gourdo1.c @@ -133,49 +133,83 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) { if (!process_caps_word(keycode, record)) { return false; } - // Your macros ... + // Your macros ... switch (keycode) { - // DotCom domain shortcuts + // DotCom domain macros + case DOTCOM: + if (record -> event.pressed) { + SEND_STRING(".com"); + } else { + // when keycode is released + } + break; + case YAHOO: + if (record -> event.pressed) { + SEND_STRING("yahoo.com"); + } else { + // when keycode is released + } + break; + case OUTLOOK: + if (record -> event.pressed) { + SEND_STRING("outlook.com"); + } else { + // when keycode is released + } + break; + case GMAIL: + if (record -> event.pressed) { + SEND_STRING("gmail.com"); + } else { + // when keycode is released + } + break; + case HOTMAIL: + if (record -> event.pressed) { + SEND_STRING("hotmail.com"); + } else { + // when keycode is released + } + break; + +/* case YAHOO: if (record -> event.pressed) SEND_STRING("yahoo.com"); else unregister_code16(keycode); break; - case OUTLOOK: if (record -> event.pressed) SEND_STRING("outlook.com"); else unregister_code16(keycode); break; - case GMAIL: if (record -> event.pressed) SEND_STRING("gmail.com"); else unregister_code16(keycode); break; - case HOTMAIL: if (record -> event.pressed) { SEND_STRING("hotmail.com"); } else unregister_code16(keycode); break; - case DOTCOM: if (record -> event.pressed) SEND_STRING(".com"); else unregister_code16(keycode); break; +*/ - // Double Zero - case KC_00: + // Windows key lock + case KC_WINLCK: if (record -> event.pressed) { - // when keycode KC_00 is pressed - SEND_STRING("00"); + keymap_config.no_gui = !keymap_config.no_gui; //toggle status } else unregister_code16(keycode); break; - // Windows key lock - case KC_WINLCK: + // Double Zero + case KC_00: if (record -> event.pressed) { - keymap_config.no_gui = !keymap_config.no_gui; //toggle status + // when keycode KC_00 is pressed + SEND_STRING("00"); } else unregister_code16(keycode); break; From 112c327a755b653dd213a831be3c1c9b2c6fa681 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Wed, 6 Apr 2022 22:50:48 -0700 Subject: [PATCH 48/54] Update readme.md --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index 19d9c5eedd82..4dd9214c6426 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -8,7 +8,7 @@ This Windows-centric layout is based on [Jonavin's](https://github.com/qmk/qmk_f * [VIA](https://www.caniusevia.com/) support enabled * Most [default Glorious shortcuts](https://cdn.shopify.com/s/files/1/0549/2681/files/GMMK_Pro_User_Guide.pdf) enabled -* [N-key Rollover](https://en.wikipedia.org/wiki/Rollover_(keyboard)#n-key_rollover) (NKRO) enabled +* [N-key Rollover](https://en.wikipedia.org/wiki/Rollover_\(keyboard\)#n-key_rollover) (NKRO) enabled * Gaming mode (FN + Win-key) locks out Win-key as well as double-tap Shift Capslock; Also RGB highlights WSAD and nearby gaming related keys * [Caps Word](https://getreuer.info/posts/keyboards/caps-word/index.html) enabled: To capitalize the next word only, press and release both left and right shift keys at the same time. * Domain shortcuts: FN+.=".com", FN+O="outlook.com", FN+Y="yahoo.com", FN+H="hotmail.com", FN+G="gmail.com", From d995ee1fc60c5b1e0754906498c12823e5a8faa5 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Thu, 7 Apr 2022 07:00:51 -0700 Subject: [PATCH 49/54] counteract pro.c changes to resolve encoder issues --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c index 9fa9eaf1faff..3528c7702d63 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c @@ -159,7 +159,8 @@ bool encoder_update_user(uint8_t index, bool clockwise) { break; } } - return true; + //return true; //set to return false to counteract enabled encoder in pro.c + return false; } #endif // ENCODER_ENABLE && !ENCODER_DEFAULTACTIONS_ENABLE From 6bdfe1e04e112d71416e978d6ca9b719461e3d1b Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Thu, 7 Apr 2022 22:14:34 -0700 Subject: [PATCH 50/54] Update readme.md --- .../gmmk/pro/ansi/keymaps/gourdo1/readme.md | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index 4dd9214c6426..4c06fc210b11 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -2,36 +2,39 @@ This Windows-centric layout is based on [Jonavin's](https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/ansi/keymaps/jonavin) GMMK Pro layout with several additions, modifications, a tweaked keymap, updated layers and expanded RGB controls. +![image](https://raw.githubusercontent.com/gourdo1/media/main/susuwatari.jpg) + ## Features: ### Core Functionality -* [VIA](https://www.caniusevia.com/) support enabled +* [VIA](https://www.caniusevia.com/) support enabled (added Mar 16, 2022) * Most [default Glorious shortcuts](https://cdn.shopify.com/s/files/1/0549/2681/files/GMMK_Pro_User_Guide.pdf) enabled * [N-key Rollover](https://en.wikipedia.org/wiki/Rollover_\(keyboard\)#n-key_rollover) (NKRO) enabled * Gaming mode (FN + Win-key) locks out Win-key as well as double-tap Shift Capslock; Also RGB highlights WSAD and nearby gaming related keys -* [Caps Word](https://getreuer.info/posts/keyboards/caps-word/index.html) enabled: To capitalize the next word only, press and release both left and right shift keys at the same time. -* Domain shortcuts: FN+.=".com", FN+O="outlook.com", FN+Y="yahoo.com", FN+H="hotmail.com", FN+G="gmail.com", +* [Caps Word](https://getreuer.info/posts/keyboards/caps-word/index.html) enabled: To capitalize the next word only, press and release both left and right shift keys at the same time. (added Feb 25, 2022) +* Domain shortcuts: FN+.=".com", FN+O="outlook.com", FN+Y="yahoo.com", FN+H="hotmail.com", FN+G="gmail.com". (added Apr 7, 2022) * Capslock toggled by double tap of Left Shift key or FN + Capslock (RGB green highlighted) * Fn-Backslash for [Bootloader mode](https://github.com/qmk/qmk_firmware/blob/master/docs/newbs_flashing.md) -* Home key on F-key row, Del key next to Backspace +* Home key on F13, Del key right of Backspace * Insert accessible via Shift-Backspace (so shift delete still works in Windows Explorer) -* PrtScrn, Scroll Lock, Pause/Break are top right on the keyboard: Fn+F11, Fn+F12, Fn+Home -* Double tap ESC any time to revert to base layer +* PrtScrn, Scroll Lock, Pause/Break are top right on the keyboard: Fn+F11, Fn+F12, Fn+F13 +* Double tap ESC any time to revert to base layer (added Feb 26, 2022) ### Numpad + Mouse Keys (Capslock key) * Overlay numpad + [Mouse Keys](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_mouse_keys.md) are accessed through Capslock key hold (temp) or double press (locked) with RGB highlighting -* [Mouse Keys](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_mouse_keys.md) allow you to use the mouse without taking your hand off the keyboard. -* Numpad layer disables much of keyboard, except X/C/V for cut/copy/paste, WASD for cursor, Q/E for PgUp/PgDn, cursor keys become mouse keys and all number keys become numpad versions (so Alt char codes work regardless of which set you use) +* This layer disables much of the keyboard, except X/C/V for cut/copy/paste, WASD for cursor, Q/E for PgUp/PgDn, cursor keys become mouse keys, surrounding keys become mouse buttons and all number keys become numpad versions (so Alt char codes work regardless of which set you use) * Fn & N keys light up orange if system numlock is off (inverted status), indicating numpad keys will not deliver expected output (FN + N to toggle) -* Mouse Keys can also be accessed as a standalone layer by Left Shift-turning the Encoder until the cursor keys light up green +* Double zero on comma key. +* [Mouse Keys](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_mouse_keys.md) allow you to use the mouse without taking your hand off the keyboard. (added Mar 15, 2022) * Mouse controls are: Cursor keys = move mouse; RShift = button1, End = button2, RCtrl = button3, PgUp/PgDn = Scroll wheel +* Mouse Keys can also be accessed as a standalone layer by Left Shift-turning the Encoder until the cursor keys light up green ### Encoder Functionality * Default knob turn changes volume; button press toggles mute -* Exponential encoder - quick repeated volume up doubles increase; quick repeated volume down triples decrease +* Exponential encoder - quick repeated volume up doubles increase; quick repeated volume down triples decrease (added Feb 17, 2022) * FN knob turn changes RGB idle timeout * holding Left Shift changes layers * holding Right Shift navigates page up/down @@ -45,8 +48,9 @@ This Windows-centric layout is based on [Jonavin's](https://github.com/qmk/qmk_f * RGB backlight effect speed: FN + left/right * RGB backlight hue cycle: FN + A/D * RGB backlight brightness: FN + W/S +* RGB backlight saturation: FN + Q/E (added Feb 4, 2022) * RGB backlight night mode toggle: FN + Z (indicators still work) -* RGB backlight timeout: FN + Encoder or "-" and "=" (default 15 minutes) +* RGB backlight timeout: FN + Encoder or "-" and "=" (default 15 minutes) (updated Apr 7, 2022) * indicators in FN layer using RGB in F-key and number rows to show the current timeout in minutes * RGB indicators on left side LEDs: Capslock (green), Scroll Lock (red), and Num Lock not set (orange) * FN + Z to turn off RGB backlighting; press again to toggle From 9799729104094f196664635e52e32c4a98ab498f Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Mon, 11 Apr 2022 12:08:10 -0700 Subject: [PATCH 51/54] Add NKRO toggle on [Fn]+R --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c index 3528c7702d63..2b434ba3bfb3 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c @@ -59,7 +59,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |=============================================================================================================| * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |RGBTOD|RGBTOI| ________ ||RGBTOG| * |------+------+------+------+------+------+------+------+------+------+------+------+------+----------++------| - * | ______ |RGBSAD|RGBVAI|RGBSAI| ____ | ____ |YAHOO | ____ | ____ |OUTLK |Pause | ____ | ____ | Reset || Home | + * | ______ |RGBSAD|RGBVAI|RGBSAI| NKRO | ____ |YAHOO | ____ | ____ |OUTLK |Pause | ____ | ____ | Reset || Home | * |---------+------+------+------+------+------+------+------+------+------+------+------+------+-------++------| * | Capslock |RGBHUD|RGBVAD|RGBHUI| ____|GMAIL |HTMAIL| ____ | ____ | ____ | ____ | ____ | __________ || End | * |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------| @@ -72,7 +72,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_FN1] = LAYOUT( _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_VOLD, KC_VOLU, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOD, RGB_TOI, _______, RGB_TOG, - _______, RGB_SAD, RGB_VAI, RGB_SAI, _______, _______, YAHOO, _______, _______, OUTLOOK, KC_PAUS, _______, _______, RESET, KC_HOME, + _______, RGB_SAD, RGB_VAI, RGB_SAI, NK_TOGG, _______, YAHOO, _______, _______, OUTLOOK, KC_PAUS, _______, _______, RESET, KC_HOME, KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, GMAIL, HOTMAIL, _______, _______, _______, _______, _______, _______, KC_END, _______, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, _______, DOTCOM, _______, _______, RGB_MOD, _______, _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI From 21d835ff8ea4da5ae255dbebbb45e1cd76b2db05 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Mon, 11 Apr 2022 12:14:21 -0700 Subject: [PATCH 52/54] Update readme.md --- keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index 4c06fc210b11..08ba81ab4205 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -10,7 +10,7 @@ This Windows-centric layout is based on [Jonavin's](https://github.com/qmk/qmk_f * [VIA](https://www.caniusevia.com/) support enabled (added Mar 16, 2022) * Most [default Glorious shortcuts](https://cdn.shopify.com/s/files/1/0549/2681/files/GMMK_Pro_User_Guide.pdf) enabled -* [N-key Rollover](https://en.wikipedia.org/wiki/Rollover_\(keyboard\)#n-key_rollover) (NKRO) enabled +* [N-key Rollover](https://en.wikipedia.org/wiki/Rollover_\(keyboard\)#n-key_rollover) (NKRO) -- toggled with FN+R * Gaming mode (FN + Win-key) locks out Win-key as well as double-tap Shift Capslock; Also RGB highlights WSAD and nearby gaming related keys * [Caps Word](https://getreuer.info/posts/keyboards/caps-word/index.html) enabled: To capitalize the next word only, press and release both left and right shift keys at the same time. (added Feb 25, 2022) * Domain shortcuts: FN+.=".com", FN+O="outlook.com", FN+Y="yahoo.com", FN+H="hotmail.com", FN+G="gmail.com". (added Apr 7, 2022) From 3792215ddbc435eb3989e3fc7adbf574992b4485 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Mon, 11 Apr 2022 15:01:08 -0700 Subject: [PATCH 53/54] swap app test --- .../gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 6 ++--- users/gourdo1/gourdo1.h | 27 ++++++++++--------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c index 2b434ba3bfb3..b69b1eb86103 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c @@ -72,14 +72,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_FN1] = LAYOUT( _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_VOLD, KC_VOLU, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOD, RGB_TOI, _______, RGB_TOG, - _______, RGB_SAD, RGB_VAI, RGB_SAI, NK_TOGG, _______, YAHOO, _______, _______, OUTLOOK, KC_PAUS, _______, _______, RESET, KC_HOME, + _______, RGB_SAD, RGB_VAI, RGB_SAI, NK_TOGG, _______, YAHOO, _______, _______, OUTLOOK, KC_PAUS, SWAP_L, SWAP_R, RESET, KC_HOME, KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, GMAIL, HOTMAIL, _______, _______, _______, _______, _______, _______, KC_END, - _______, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, _______, DOTCOM, _______, _______, RGB_MOD, _______, + _______, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, _______, DOTCOM, KC_CAD, _______, RGB_MOD, _______, _______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI ), /* _NUMPADMOUSE Layout - * Note: A symbol preceeded by "P" is a Numpad-encoded version of the key -- any app that differentiates will recognize the char as coming from a physical numpad. + * Note: A symbol preceded by "P" is a Numpad-encoded version of the key -- any app that differentiates will recognize the char as coming from a physical numpad. * ,-------------------------------------------------------------------------------------------------------------. * | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ | ____ | ____ | ____ || ____ || ____ | * |=============================================================================================================| diff --git a/users/gourdo1/gourdo1.h b/users/gourdo1/gourdo1.h index e20ab9728a32..c6861ca0ca88 100644 --- a/users/gourdo1/gourdo1.h +++ b/users/gourdo1/gourdo1.h @@ -28,6 +28,20 @@ enum custom_user_layers { _MOUSEKEY, }; +#define KC_CAD LALT(LCTL(KC_DEL)) +#define KC_AF4 LALT(KC_F4) +#define KC_TASK LCTL(LSFT(KC_ESC)) +#define CT_PGUP RCTL(KC_PGUP) +#define CT_PGDN RCTL(KC_PGDN) +#define CT_HOME RCTL(KC_HOME) +#define CT_END RCTL(KC_END) +#define KC_SFTUP RSFT_T(KC_UP) // Shift when held, Up arrow when tapped +#define KC_RAISESPC LT(_MOUSEKEY, KC_SPC) // _MOUSEKEY layer mod when held, space when tapped +#define KC_LOWERSPC LT(_NUMPADMOUSE, KC_SPC) // _NUMPAD-MOUSE layer mod when held, space when tapped +#define KC_SHIFTSPC LSFT(KC_SPC) +#define SWAP_L SGUI(KC_LEFT) // Swap application to left display +#define SWAP_R SGUI(KC_RGHT) // Swap application to right display + // KEYCODES enum custom_user_keycodes { KC_00 = SAFE_RANGE, @@ -55,18 +69,6 @@ enum custom_user_keycodes { NEW_SAFE_RANGE // new safe range for keymap level custom keycodes }; -#define KC_CAD LALT(LCTL(KC_DEL)) -#define KC_AF4 LALT(KC_F4) -#define KC_TASK LCTL(LSFT(KC_ESC)) -#define CT_PGUP RCTL(KC_PGUP) -#define CT_PGDN RCTL(KC_PGDN) -#define CT_HOME RCTL(KC_HOME) -#define CT_END RCTL(KC_END) -#define KC_SFTUP RSFT_T(KC_UP) // Shift when held, Up arrow when tapped -#define KC_RAISESPC LT(_MOUSEKEY, KC_SPC) // _MOUSEKEY layer mod when held, space when tapped -#define KC_LOWERSPC LT(_NUMPADMOUSE, KC_SPC) // _NUMPAD-MOUSE layer mod when held, space when tapped -#define KC_SHIFTSPC LSFT(KC_SPC) - #ifdef TD_LSFT_CAPSLOCK_ENABLE // Tap Dance Definitions enum custom_tapdance { @@ -74,7 +76,6 @@ enum custom_tapdance { TD_LSFT_CAPS_WIN, TD_ESC_BASELYR }; - #define KC_LSFTCAPS TD(TD_LSFT_CAPSLOCK) #define KC_LSFTCAPSWIN TD(TD_LSFT_CAPS_WIN) #define KC_ESCLYR TD(TD_ESC_BASELYR) From 9a2c274f67df7b54327719d4157df6e903977102 Mon Sep 17 00:00:00 2001 From: gourdo1 Date: Mon, 11 Apr 2022 23:26:28 -0700 Subject: [PATCH 54/54] Add EEPROM Clear capability to Fn-ESC; Update readme.md --- .../gmmk/pro/ansi/keymaps/gourdo1/keymap.c | 2 +- .../gmmk/pro/ansi/keymaps/gourdo1/readme.md | 18 +++++++++++++----- .../gmmk/pro/ansi/keymaps/gourdo1/rules.mk | 2 +- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c index b69b1eb86103..97db98dd12bf 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/keymap.c @@ -70,7 +70,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [_FN1] = LAYOUT( - _______, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_VOLD, KC_VOLU, KC_PSCR, KC_SLCK, KC_PAUS, _______, + EE_CLR, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_VOLD, KC_VOLU, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOD, RGB_TOI, _______, RGB_TOG, _______, RGB_SAD, RGB_VAI, RGB_SAI, NK_TOGG, _______, YAHOO, _______, _______, OUTLOOK, KC_PAUS, SWAP_L, SWAP_R, RESET, KC_HOME, KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, GMAIL, HOTMAIL, _______, _______, _______, _______, _______, _______, KC_END, diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md index 08ba81ab4205..3db6923d76c0 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/readme.md @@ -13,12 +13,14 @@ This Windows-centric layout is based on [Jonavin's](https://github.com/qmk/qmk_f * [N-key Rollover](https://en.wikipedia.org/wiki/Rollover_\(keyboard\)#n-key_rollover) (NKRO) -- toggled with FN+R * Gaming mode (FN + Win-key) locks out Win-key as well as double-tap Shift Capslock; Also RGB highlights WSAD and nearby gaming related keys * [Caps Word](https://getreuer.info/posts/keyboards/caps-word/index.html) enabled: To capitalize the next word only, press and release both left and right shift keys at the same time. (added Feb 25, 2022) +* Multi-monitor app moving shortcuts: FN + [,] (square brackets) to move current app window to next monitor (added Apr 11, 2022) * Domain shortcuts: FN+.=".com", FN+O="outlook.com", FN+Y="yahoo.com", FN+H="hotmail.com", FN+G="gmail.com". (added Apr 7, 2022) * Capslock toggled by double tap of Left Shift key or FN + Capslock (RGB green highlighted) * Fn-Backslash for [Bootloader mode](https://github.com/qmk/qmk_firmware/blob/master/docs/newbs_flashing.md) * Home key on F13, Del key right of Backspace * Insert accessible via Shift-Backspace (so shift delete still works in Windows Explorer) * PrtScrn, Scroll Lock, Pause/Break are top right on the keyboard: Fn+F11, Fn+F12, Fn+F13 +* [Colemak](https://colemak.com/) key layout support (Layer accessible via Left Shift + turn Encoder clockwise until side LEDs light up purple) * Double tap ESC any time to revert to base layer (added Feb 26, 2022) ### Numpad + Mouse Keys (Capslock key) @@ -55,6 +57,12 @@ This Windows-centric layout is based on [Jonavin's](https://github.com/qmk/qmk_f * RGB indicators on left side LEDs: Capslock (green), Scroll Lock (red), and Num Lock not set (orange) * FN + Z to turn off RGB backlighting; press again to toggle +### Advanced Controls + +* FN + \ to get to bootloader mode +* FN + [ESC] to clear EEPROM (then unplug and re-plug) (added Apr 11, 2022) +* FN + R to toggle N-key Rollover (added Apr 11, 2022) + Link to latest firmware binary: https://github.com/gourdo1/media/raw/main/gmmk_pro_ansi_gourdo1.bin Link to cheatsheet: https://github.com/gourdo1/media/raw/main/GMMK_Pro_Cheatsheet.pdf @@ -62,17 +70,17 @@ Link to cheatsheet: https://github.com/gourdo1/media/raw/main/GMMK_Pro_Cheatshee ## rules.mk Options -STARTUP_NUMLOCK_ON = yes - turns on NUMLOCK by default +STARTUP_NUMLOCK_ON = yes - turns on NUMLOCK by default ENCODER_DEFAULTACTIONS_ENABLE = yes - Enabled default encoder functions -TD_LSFT_CAPSLOCK_ENABLE = yes - This will enable double tap on Left Shift to toggle CAPSLOCK when using KC_LSFTCAPS +TD_LSFT_CAPSLOCK_ENABLE = yes - This will enable double tap on Left Shift to toggle CAPSLOCK when using KC_LSFTCAPS -IDLE_TIMEOUT_ENABLE = yes - Enables Timer functionality; for RGB idle timeouts that can be changed dynamically +IDLE_TIMEOUT_ENABLE = yes - Enables Timer functionality; for RGB idle timeouts that can be changed dynamically -INVERT_NUMLOCK_INDICATOR - inverts the Numlock indicator, LED is on when numlock is off -- numlock interferes with numpad keys, so should generally be off when numpad layer is active. +INVERT_NUMLOCK_INDICATOR - inverts the Numlock indicator, LED is on when numlock is off -- numlock interferes with numpad keys, so should generally be off when numpad layer is active. -COLEMAK_LAYER_ENABLE = yes - Enabled optional 5th layer for COLEMAK layout. Use Shift and encoder to enter 5th layer. +COLEMAK_LAYER_ENABLE = yes - Enable optional 5th layer for COLEMAK layout. Use Shift + encoder to enter 5th layer. ## Layer Diagrams diff --git a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rules.mk b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rules.mk index 553d9d0d5fda..b236d9132c63 100644 --- a/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rules.mk +++ b/keyboards/gmmk/pro/ansi/keymaps/gourdo1/rules.mk @@ -1,6 +1,6 @@ SRC += caps_word.c -LTO_ENABLE = yes # link time optimization -- achieves a smaller compiled size +LTO_ENABLE = yes # link time optimization -- achieves a smaller compiled size CONSOLE_ENABLE = no COMMAND_ENABLE = no MOUSEKEY_ENABLE = yes