Updated gourdo1 GMMK Pro keymaps (#17873)
* Fixed Left Shift tapdance in general and for gaming mode. (#12) * update ISO readme * left shift fixed in general, including for gaming mode * fixed toggle menu rendering on ISO layouts * updated readme's and cosmetics * update readme's * update readme's again * readme cosmetics * consolidate readme's * more readme cosmetics * clarification for bootloader mode on ISO * Autocorrect added with 400 word English dictionary (#13) * autocorrect added with 400 word dictionary * update readme's for autocorrect * Add FN-B as shortcut to bootloader * Update .gitignore Co-authored-by: Joel Challis <git@zvecr.com> * RGB changes to system numlock and ISO extended alphas - hide system numlock off indicator (primarily for Mac users) by moving it to numpad and FN layers instead - give users with extended alpha ISO languages a config option to add RGB highlights for extras alphas on capslock * readme updates * Fixed [FN]B and [FN]N shortcuts not working on numpad layer Co-authored-by: Joel Challis <git@zvecr.com>
This commit is contained in:
@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
// Note: Several advanced functions referenced in this file (like Tap Dance functions) are defined in /users/gourdo1/gourdo1.c
|
||||
// Note: Many advanced functions referenced in this file are defined in /users/gourdo1/gourdo1.c
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
@ -52,7 +52,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
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, BELOWENC,
|
||||
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,
|
||||
CAPSNUM, 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,
|
||||
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_LSFT, 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
|
||||
),
|
||||
|
||||
@ -76,10 +76,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
#ifdef GAME_ENABLE
|
||||
[_FN1] = LAYOUT(
|
||||
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, KC_SLEP,
|
||||
PRNCONF, TG_CAPS, TG_PAD, TG_ESC, TG_DEL, TG_TDCAP,TG_ENC, TG_INS,TG_SPCMOD, _______, _______, RGB_TOD, RGB_TOI, _______, RGB_TOG,
|
||||
PRNCONF, TG_CAPS, TG_PAD, TG_ESC, TG_DEL, TG_TDCAP,TG_ENC, TG_INS,TG_SPCMOD,TG_AUTOCR, _______, RGB_TOD, RGB_TOI, _______, RGB_TOG,
|
||||
_______, RGB_SAD, RGB_VAI, RGB_SAI, NK_TOGG, _______, YAHOO, _______, _______, OUTLOOK, TG(_GAME),SWAP_L, SWAP_R, QK_BOOT, KC_HOME,
|
||||
KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, GMAIL, HOTMAIL, _______, _______, LOCKPC, _______, _______, _______, KC_END,
|
||||
_______, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, _______, DOTCOM, KC_CAD, _______, RGB_MOD, _______,
|
||||
_______, RGB_NITE,_______, _______, _______, QK_BOOT, KC_NLCK, _______, _______, DOTCOM, KC_CAD, _______, RGB_MOD, _______,
|
||||
_______, WINLOCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI
|
||||
),
|
||||
|
||||
@ -95,11 +95,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
#else
|
||||
[_FN1] = LAYOUT(
|
||||
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, KC_SLEP,
|
||||
PRNCONF, TG_CAPS, TG_PAD, TG_ESC, TG_DEL, TG_TDCAP,TG_ENC, TG_INS,TG_SPCMOD, _______, _______, RGB_TOD, RGB_TOI, _______, RGB_TOG,
|
||||
PRNCONF, TG_CAPS, TG_PAD, TG_ESC, TG_DEL, TG_TDCAP,TG_ENC, TG_INS,TG_SPCMOD,TG_AUTOCR, _______, RGB_TOD, RGB_TOI, _______, RGB_TOG,
|
||||
_______, RGB_SAD, RGB_VAI, RGB_SAI, NK_TOGG, _______, YAHOO, _______, _______, OUTLOOK, KC_PAUS, SWAP_L, SWAP_R, QK_BOOT, KC_HOME,
|
||||
KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, GMAIL, HOTMAIL, _______, _______, LOCKPC, _______, _______, _______, KC_END,
|
||||
_______, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, _______, DOTCOM, KC_CAD, _______, RGB_MOD, _______,
|
||||
_______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI
|
||||
_______, RGB_NITE,_______, _______, _______, QK_BOOT, KC_NLCK, _______, _______, DOTCOM, KC_CAD, _______, RGB_MOD, _______,
|
||||
_______, WINLOCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI
|
||||
),
|
||||
#endif //GAME_ENABLE
|
||||
|
||||
@ -125,7 +125,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_______, 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_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_NO, _______, _______, _______, _______, _______, KC_P0, KC_00, KC_PDOT, KC_PSLS, KC_BTN1, KC_MS_U, KC_BTN2,
|
||||
_______, _______, _______, KC_PENT, _______, _______, KC_BTN3, KC_MS_L, KC_MS_D, KC_MS_R
|
||||
),
|
||||
|
||||
@ -253,6 +253,7 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||
rgb_matrix_set_color(LED_F12, 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
|
||||
@ -271,6 +272,7 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||
rgb_matrix_set_color(LED_FN, RGB_ORANGE2);
|
||||
}
|
||||
#endif // INVERT_NUMLOCK_INDICATOR
|
||||
*/
|
||||
|
||||
// CapsLock RGB setup
|
||||
if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) {
|
||||
@ -348,12 +350,25 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||
rgb_matrix_set_color(LED_R8, RGB_RED);
|
||||
rgb_matrix_set_color(LED_MINS, RGB_OFFBLUE);
|
||||
rgb_matrix_set_color(LED_EQL, RGB_OFFBLUE);
|
||||
|
||||
// Indicator for paddle game enabled in build
|
||||
#ifdef GAME_ENABLE
|
||||
rgb_matrix_set_color(LED_P, RGB_CHARTREUSE);
|
||||
#else
|
||||
rgb_matrix_set_color(LED_P, RGB_RED);
|
||||
#endif // GAME_ENABLE
|
||||
|
||||
// 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_N, RGB_ORANGE2);
|
||||
}
|
||||
#else
|
||||
if (IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // Normal, on if NUM lock is ON
|
||||
rgb_matrix_set_color(LED_N, RGB_ORANGE2);
|
||||
}
|
||||
#endif // INVERT_NUMLOCK_INDICATOR
|
||||
|
||||
//Add RGB statuses for user.config toggles
|
||||
if (user_config.rgb_hilite_caps) {
|
||||
rgb_matrix_set_color(LED_1, RGB_GREEN);
|
||||
@ -395,6 +410,11 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_8, RGB_PURPLE);
|
||||
}
|
||||
if (user_config.autocorrect) {
|
||||
rgb_matrix_set_color(LED_9, RGB_GREEN);
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_9, RGB_PURPLE);
|
||||
}
|
||||
|
||||
// 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();
|
||||
@ -411,6 +431,15 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||
|
||||
// Numpad & Mouse Keys overlay RGB
|
||||
case _NUMPADMOUSE:
|
||||
#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_N, RGB_ORANGE2);
|
||||
}
|
||||
#else
|
||||
if (IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // Normal, on if NUM lock is ON
|
||||
rgb_matrix_set_color(LED_N, RGB_ORANGE2);
|
||||
}
|
||||
#endif // INVERT_NUMLOCK_INDICATOR
|
||||
if (user_config.rgb_hilite_numpad) {
|
||||
for (uint8_t i = 0; i < ARRAYSIZE(LED_LIST_NUMPAD); i++) {
|
||||
rgb_matrix_set_color(LED_LIST_NUMPAD[i], RGB_OFFBLUE);
|
||||
|
@ -1,69 +1,76 @@
|
||||
# [gourdo1's](mailto:gourdo1@outlook.com) GMMK Pro ANSI layout
|
||||
# [gourdo1's](mailto:gourdo1@outlook.com) GMMK Pro Keyboard Layouts
|
||||
|
||||
This Windows-centric ANSI layout is based on [Jonavin's](https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/rev1/ansi/keymaps/jonavin) GMMK Pro layout with many additions, fixes, a revamped keymap, persistent user customizations, updated layers, [Tomas Guinan's paddle game](https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame) and expanded RGB effects and controls.
|
||||
These Windows-centric layouts are based on Jonavin's GMMK Pro [layout](https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/rev1/ansi/keymaps/jonavin) with many additions, fixes, a revamped keymap, persistent user customizations, updated layers, Pascal Getreuer's [autocorrect](https://getreuer.info/posts/keyboards/autocorrection/), Tomas Guinan's [paddle game](https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame) and expanded RGB controls and effects.
|
||||
|
||||
![image](https://raw.githubusercontent.com/gourdo1/media/main/susuwatari.jpg)
|
||||
|
||||
## Features:
|
||||
* Up-to-date [Changelog](https://github.com/gourdo1/gmmkpro-media/blob/main/changelog.md)
|
||||
* Latest [ANSI firmware](https://github.com/gourdo1/gmmkpro-media/raw/main/gmmk_pro_rev1_ansi_gourdo1.bin) download. (Flash with [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases))
|
||||
* Latest [ISO firmware](https://github.com/gourdo1/gmmkpro-media/raw/main/gmmk_pro_rev1_iso_gourdo1.bin) download. (Flash with [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases))
|
||||
* Printable Keyboard [Cheatsheet](https://github.com/gourdo1/gmmkpro-media/raw/main/GMMK_Pro_Cheatsheet.pdf)
|
||||
|
||||
## Features
|
||||
|
||||
### Core Functionality
|
||||
|
||||
* Quick & Easy Customization: Open a text editor and hit [FN]` (tilde key) to view toggle-able features. (added Jun 29, 2022)
|
||||
* [VIA](https://www.caniusevia.com/) support enabled (added Mar 16, 2022)
|
||||
* Support for both [ANSI](https://keebnews.com/ansi-vs-iso/) and [ISO](https://keebnews.com/ansi-vs-iso/) keyboard layouts.
|
||||
* Quick & Easy Customization: Open a text editor and hit [FN]` (tilde on ANSI; the key left of '1' on ISO layouts) to view toggle-able settings.
|
||||
* [VIA](https://www.caniusevia.com/) support enabled.
|
||||
* AutoCorrection: Pascal Getreuer's AutoCorrect code incorporated with 400 word dictionary on words > 4 characters.
|
||||
* 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) -- toggled with [FN]R
|
||||
* 1000Hz polling rate with 5ms debounce time for quick response in games
|
||||
* Mouse Keys! Don't want to move your hands off the keyboard or you didn't bring it with you? Use cursor keys to move the mouse
|
||||
* Overlay numpad on 789-UIOP-JKL;-M,. & Space-bar mapped to Enter key for rapid number entry
|
||||
* Gaming mode ([FN]Win-key) locks out Win-key and double-tap Shift Capslock; Also RGB highlights WSAD and nearby gaming keys
|
||||
* Caps Word enabled: To capitalize the next word only, press and release left and right shift 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)
|
||||
* Capslock toggled by double tap of Left Shift key or FN + Capslock (RGB green highlighted)
|
||||
* Paddle game accessible via [FN]P. Hit [FN]P again or double tap [ESC] to exit (added May 5, 2022)
|
||||
* Single-handed shortcut for Ctrl-Alt-Delete: [FN]/ (added May 14, 2022)
|
||||
* Single-handed shortcut for WinKey-L (lock Windows): [FN]L (added May 17, 2022)
|
||||
* Domain shortcuts: [FN]. for .com, [FN]O for outlook.com, [FN]Y for yahoo.com, [FN]H for hotmail.com, [FN]G for gmail.com. (added Apr 7, 2022)
|
||||
* 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)
|
||||
* 1000Hz polling rate with 5ms debounce time for quick response in games.
|
||||
* Mouse Keys! Don't want to move your hands off the keyboard or you didn't bring it with you? Use cursor keys to move the mouse.
|
||||
* Overlay numpad on 789-UIOP-JKL;-M,. & Space-bar mapped to Enter key for rapid number entry.
|
||||
* Gaming mode ([FN]Win-key) locks out Win-key and double-tap Shift Capslock; Also RGB highlights WSAD and nearby gaming keys.
|
||||
* Caps Word enabled: To capitalize the next word only, press and release left and right shift at the same time.
|
||||
* Multi-monitor app moving shortcuts: [FN] ],[ (square brackets) to move current app window to next monitor.
|
||||
* Capslock toggled by double tap of Left Shift key or FN + Capslock (RGB green highlighted).
|
||||
* Paddle game accessible via [FN]P. Hit [FN]P again or double tap [ESC] to exit.
|
||||
* Single-handed shortcut for Ctrl-Alt-Delete: [FN]/
|
||||
* Single-handed shortcut for WinKey-L (lock Windows): [FN]L
|
||||
* Domain shortcuts: [FN]. for .com, [FN]O for outlook.com, [FN]Y for yahoo.com, [FN]H for hotmail.com, [FN]G for gmail.com.
|
||||
* [Bootloader mode](https://github.com/qmk/qmk_firmware/blob/master/docs/newbs_flashing.md) accessible via [FN]Backslash for ANSI and FN(key next to Left Shift) for ISO
|
||||
* PrtScrn, Scroll Lock, Pause/Break are top right on the keyboard: [FN]F11, [FN]F12, [FN]F13
|
||||
* [Colemak](https://colemak.com/) key layout support (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)
|
||||
* RGB backlight effects expanded to include framebuffer effects and reactive keypress modes (updated May 24, 2022)
|
||||
* RGB backlight now remembers last color & effect settings after power down (updated May 24, 2022)
|
||||
* Double tap ESC any time to revert to base layer.
|
||||
* RGB backlight effects expanded to include framebuffer effects and reactive keypress modes.
|
||||
* RGB backlight now remembers last color & effect settings after power down.
|
||||
|
||||
### Quick & Easy Customization
|
||||
* Below features can be toggled by holding [FN] and pressing the number corresponding to that feature. Changes are saved to EEPROM for persistence.
|
||||
* Print current settings by opening a text editor and pressing [FN]~ (CAUTION: verbose!)
|
||||
* Print current settings by opening a text editor and pressing [FN]~ (the key left of '1' on ISO layout keyboards)
|
||||
* Quick view current settings by holding [FN] and viewing RGB under number keys (green means ON, violet means OFF)
|
||||
|
||||
#### Toggle-able Settings:
|
||||
1. CapsLock RGB - highlight under alpha keys
|
||||
2. Numpad RGB - highlight under numpad layer keys
|
||||
1. CapsLock RGB - Highlight under alpha keys
|
||||
2. Numpad RGB - Highlight under numpad layer keys
|
||||
3. ESC key - Double tap ESC key to go to base layer
|
||||
4. Swap DEL and HOME - Default is DEL to the right of BKSPC & HOME is above BKSPC
|
||||
5. Capslock function - Toggle between double tap LShift for CapsLock with Numpad on CapsLock key (default) and standard CapsLock
|
||||
6. Encoder button - default mutes volume; alternate plays/pauses media
|
||||
6. Encoder button - Default mutes volume; alternate plays/pauses media
|
||||
7. Insert function - Toggle between SHIFT-BKSPC and SHIFT-DEL
|
||||
8. Modded-Space override - Use standard Space in place of modded-Space functions
|
||||
9. AutoCorrect - Internal (English) AutoCorrect; default is enabled
|
||||
0. (ISO layouts only) CapsLock highlights extended alpha keys
|
||||
|
||||
### 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
|
||||
* Numpad uses Space-bar as Enter for rapid number entry (added May 17, 2022)
|
||||
* Numpad uses Space-bar as Enter for rapid number entry.
|
||||
* 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 and N keys light up orange if system numlock is off (inverted status), indicating numpad keys will not deliver expected output ([FN]N to toggle)
|
||||
* 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 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.
|
||||
* 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 (added Feb 17, 2022)
|
||||
* Exponential encoder: quick repeated volume up doubles increase; quick repeated volume down triples decrease.
|
||||
* FN + knob turn changes RGB idle timeout
|
||||
* FN + knob push puts PC to Sleep (Added May 14, 2022)
|
||||
* FN + knob push puts PC to Sleep
|
||||
* holding Left Shift changes layers
|
||||
* holding Right Shift navigates page up/down
|
||||
* holding Left Ctrl navigates prev/next word
|
||||
@ -86,44 +93,24 @@ This Windows-centric ANSI layout is based on [Jonavin's](https://github.com/qmk/
|
||||
* 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 saturation: [FN]Q/E
|
||||
* RGB backlight night mode toggle: [FN]Z (indicators still work)
|
||||
* RGB backlight timeout: [FN]Encoder or "-" and "=" (default 15 minutes) (updated June 28, 2022)
|
||||
* RGB backlight timeout: [FN]Encoder or "-" and "=" (default 15 minutes)
|
||||
* F-key row indicator lights (cyan and blue) in FN layer display the current backlight timeout in minutes
|
||||
* [FN]Z to turn off RGB backlighting (indicator lights still work); press again to toggle
|
||||
* Left side RGB indicators in order from top: System NumLock off (orange), Scroll Lock (red), Numpad (blue), Capslock (green).
|
||||
* Left side RGB indicators in order from top: Scroll Lock (red), Numpad (blue), Capslock (green).
|
||||
|
||||
### Advanced Controls
|
||||
|
||||
* [FN]\ to get to bootloader mode
|
||||
* [FN][ESC] to clear EEPROM (added Apr 11, 2022)
|
||||
* [FN]R to toggle N-key Rollover (added Apr 11, 2022)
|
||||
* [FN]/ is single-handed shortcut to Ctrl-Alt-Delete (added May 14, 2022)
|
||||
* [FN]L is single-handed shortcut to Win-L (lock Windows) (added May 17, 2022)
|
||||
* [FN][Encoder press] to sleep Windows PC (added May 14, 2022)
|
||||
* [FN]\ or [FN]B to get to bootloader mode (use key next to Left Shift on ISO)
|
||||
* [FN][ESC] to clear EEPROM
|
||||
* [FN]R to toggle N-key Rollover
|
||||
* [FN]N to toggle system numlock
|
||||
* [FN]/ is single-handed shortcut to Ctrl-Alt-Delete
|
||||
* [FN]L is single-handed shortcut to Win-L (lock Windows)
|
||||
* [FN][Encoder press] to sleep Windows PC
|
||||
|
||||
Link to latest firmware binary: https://github.com/gourdo1/gmmkpro-media/raw/main/gmmk_pro_rev1_ansi_gourdo1.bin
|
||||
|
||||
Link to cheatsheet: https://github.com/gourdo1/gmmkpro-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 overlay numpad, so should be off when numpad layer is active unless you have an external numpad.
|
||||
|
||||
COLEMAK_LAYER_ENABLE = yes - Enables optional 5th layer for COLEMAK layout. Use Shift + encoder to enter 5th layer.
|
||||
|
||||
GAME_ENABLE ?= yes - Enables Paddle Game
|
||||
|
||||
## Layer Diagrams
|
||||
## Layer Diagrams (ANSI)
|
||||
### Base layer
|
||||
![image](https://raw.githubusercontent.com/gourdo1/gmmkpro-media/main/base.png)
|
||||
|
||||
|
@ -5,7 +5,7 @@ BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
|
||||
VIA_ENABLE = yes
|
||||
|
||||
MOUSEKEY_ENABLE = yes
|
||||
TAP_DANCE_ENABLE = yes
|
||||
TAP_DANCE_ENABLE = no
|
||||
CAPS_WORD_ENABLE = yes # Enable built-in Caps Word functionality
|
||||
IDLE_TIMEOUT_ENABLE = yes
|
||||
STARTUP_NUMLOCK_ON = yes
|
||||
|
@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
// Note: Several advanced functions referenced in this file (like Tap Dance functions) are defined in /users/gourdo1/gourdo1.c
|
||||
// Note: Many advanced functions referenced in this file are defined in /users/gourdo1/gourdo1.c
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
@ -53,7 +53,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
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, BELOWENC,
|
||||
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_PGUP,
|
||||
CAPSNUM, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGDN,
|
||||
LSFTCAPSWIN,KC_NUBS, 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_LSFT, KC_NUBS, 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
|
||||
),
|
||||
|
||||
@ -68,7 +68,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
* |---------+------+------+------+------+------+------+------+------+------+------+------+------+ ++------|
|
||||
* | Capslock |RGBHUD|RGBVAD|RGBHUI| ____|GMAIL |HTMAIL| ____ | ____ | ____ | ____ | ____ | ___ | ____ || End |
|
||||
* |------------+------+------+------+-----+------+------+------+------+------+------+------|----+========+------|
|
||||
* | ____ |RESET |RGBNIT| ____ | ____ | ____ | ____ |NumLk | ____ | ____ |DOTCOM| CAD | ______ ||RGBMOD|| ____ |
|
||||
* | ____ |QK_BOOT|RGBNIT| ____ | ____ | ____ | ____ |NumLk | ____ | ____ |DOTCOM| CAD | ______ ||RGBMOD|| ____ |
|
||||
* |--------------+------+------+------+------+------+------+------+------+------+------+--+=====++------++======|
|
||||
* | ____ | WinKyLk | ____ | _____ | ____ | ____ | ____ ||RGBSPD|RGBRMD|RGBSPI|
|
||||
* `------------------------------------------------------------------------------------------------------------'
|
||||
@ -77,10 +77,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
#ifdef GAME_ENABLE
|
||||
[_FN1] = LAYOUT(
|
||||
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, KC_SLEP,
|
||||
PRNCONF, TG_CAPS, TG_PAD, TG_ESC, TG_DEL, TG_TDCAP,TG_ENC, TG_INS,TG_SPCMOD, _______, _______, RGB_TOD, RGB_TOI, _______, RGB_TOG,
|
||||
PRNCONF, TG_CAPS, TG_PAD, TG_ESC, TG_DEL, TG_TDCAP,TG_ENC, TG_INS,TG_SPCMOD,TG_AUTOCR,TG_ENGCAP,RGB_TOD,RGB_TOI, _______, RGB_TOG,
|
||||
_______, RGB_SAD, RGB_VAI, RGB_SAI, NK_TOGG, _______, YAHOO, _______, _______, OUTLOOK, TG(_GAME),SWAP_L, SWAP_R, KC_HOME,
|
||||
KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, GMAIL, HOTMAIL, _______, _______, LOCKPC, _______, _______, _______, _______, KC_END,
|
||||
_______, RESET, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, _______, DOTCOM, KC_CAD, _______, RGB_MOD, _______,
|
||||
_______, QK_BOOT, RGB_NITE,_______, _______, _______, QK_BOOT, KC_NLCK, _______, _______, DOTCOM, KC_CAD, _______, RGB_MOD, _______,
|
||||
_______, WINLOCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI
|
||||
),
|
||||
|
||||
@ -96,11 +96,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
#else
|
||||
[_FN1] = LAYOUT(
|
||||
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, KC_SLEP,
|
||||
PRNCONF, TG_CAPS, TG_PAD, TG_ESC, TG_DEL, TG_TDCAP,TG_ENC, TG_INS,TG_SPCMOD, _______, _______, RGB_TOD, RGB_TOI, _______, RGB_TOG,
|
||||
PRNCONF, TG_CAPS, TG_PAD, TG_ESC, TG_DEL, TG_TDCAP,TG_ENC, TG_INS,TG_SPCMOD,TG_AUTOCR,TG_ENGCAP,RGB_TOD,RGB_TOI, _______, RGB_TOG,
|
||||
_______, RGB_SAD, RGB_VAI, RGB_SAI, NK_TOGG, _______, YAHOO, _______, _______, OUTLOOK, KC_PAUS, SWAP_L, SWAP_R, KC_HOME,
|
||||
KC_CAPS, RGB_HUD, RGB_VAD, RGB_HUI, _______, GMAIL, HOTMAIL, _______, _______, LOCKPC, _______, _______, _______, _______, KC_END,
|
||||
_______, RESET, RGB_NITE,_______, _______, _______, _______, KC_NLCK, _______, _______, DOTCOM, KC_CAD, _______, RGB_MOD, _______,
|
||||
_______, KC_WINLCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI
|
||||
_______, QK_BOOT, RGB_NITE,_______, _______, _______, QK_BOOT, KC_NLCK, _______, _______, DOTCOM, KC_CAD, _______, RGB_MOD, _______,
|
||||
_______, WINLOCK, _______, _______, _______, _______, _______, RGB_SPD, RGB_RMOD, RGB_SPI
|
||||
),
|
||||
#endif //GAME_ENABLE
|
||||
|
||||
@ -126,7 +126,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_______, 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_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_NO, _______, _______, _______, _______, _______, KC_P0, KC_00, KC_PDOT, KC_PSLS, KC_BTN1, KC_MS_U, KC_BTN2,
|
||||
_______, _______, _______, KC_PENT, _______, _______, KC_BTN3, KC_MS_L, KC_MS_D, KC_MS_R
|
||||
),
|
||||
|
||||
@ -254,6 +254,7 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||
rgb_matrix_set_color(LED_F12, 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
|
||||
@ -272,12 +273,20 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||
rgb_matrix_set_color(LED_FN, RGB_ORANGE2);
|
||||
}
|
||||
#endif // INVERT_NUMLOCK_INDICATOR
|
||||
*/
|
||||
|
||||
// CapsLock RGB setup
|
||||
if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) {
|
||||
if (user_config.rgb_hilite_caps) {
|
||||
for (uint8_t i = 0; i < ARRAYSIZE(LED_LIST_LETTERS); i++) {
|
||||
rgb_matrix_set_color(LED_LIST_LETTERS[i], RGB_CHARTREUSE);
|
||||
if (user_config.rgb_english_caps) {
|
||||
for (uint8_t i = 0; i < ARRAYSIZE(LED_LIST_LETTERS); i++) {
|
||||
rgb_matrix_set_color(LED_LIST_LETTERS[i], RGB_CHARTREUSE);
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (uint8_t i = 0; i < ARRAYSIZE(LED_LIST_LETTERS_DE); i++) {
|
||||
rgb_matrix_set_color(LED_LIST_LETTERS_DE[i], RGB_CHARTREUSE);
|
||||
}
|
||||
}
|
||||
rgb_matrix_set_color(LED_L7, RGB_CHARTREUSE);
|
||||
rgb_matrix_set_color(LED_L8, RGB_CHARTREUSE);
|
||||
@ -349,12 +358,25 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||
rgb_matrix_set_color(LED_R8, RGB_RED);
|
||||
rgb_matrix_set_color(LED_MINS, RGB_OFFBLUE);
|
||||
rgb_matrix_set_color(LED_EQL, RGB_OFFBLUE);
|
||||
|
||||
// Indicator for paddle game enabled in build
|
||||
#ifdef GAME_ENABLE
|
||||
rgb_matrix_set_color(LED_P, RGB_CHARTREUSE);
|
||||
#else
|
||||
rgb_matrix_set_color(LED_P, RGB_RED);
|
||||
#endif // GAME_ENABLE
|
||||
|
||||
// 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_N, RGB_ORANGE2);
|
||||
}
|
||||
#else
|
||||
if (IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // Normal, on if NUM lock is ON
|
||||
rgb_matrix_set_color(LED_N, RGB_ORANGE2);
|
||||
}
|
||||
#endif // INVERT_NUMLOCK_INDICATOR
|
||||
|
||||
//Add RGB statuses for user.config toggles
|
||||
if (user_config.rgb_hilite_caps) {
|
||||
rgb_matrix_set_color(LED_1, RGB_GREEN);
|
||||
@ -396,6 +418,16 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_8, RGB_PURPLE);
|
||||
}
|
||||
if (user_config.autocorrect) {
|
||||
rgb_matrix_set_color(LED_9, RGB_GREEN);
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_9, RGB_PURPLE);
|
||||
}
|
||||
if (user_config.rgb_english_caps) {
|
||||
rgb_matrix_set_color(LED_0, RGB_GREEN);
|
||||
} else {
|
||||
rgb_matrix_set_color(LED_0, RGB_PURPLE);
|
||||
}
|
||||
|
||||
// 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();
|
||||
@ -412,6 +444,15 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
|
||||
|
||||
// Numpad & Mouse Keys overlay RGB
|
||||
case _NUMPADMOUSE:
|
||||
#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_N, RGB_ORANGE2);
|
||||
}
|
||||
#else
|
||||
if (IS_HOST_LED_ON(USB_LED_NUM_LOCK)) { // Normal, on if NUM lock is ON
|
||||
rgb_matrix_set_color(LED_N, RGB_ORANGE2);
|
||||
}
|
||||
#endif // INVERT_NUMLOCK_INDICATOR
|
||||
if (user_config.rgb_hilite_numpad) {
|
||||
for (uint8_t i = 0; i < ARRAYSIZE(LED_LIST_NUMPAD); i++) {
|
||||
rgb_matrix_set_color(LED_LIST_NUMPAD[i], RGB_OFFBLUE);
|
||||
|
@ -1,54 +1,76 @@
|
||||
# [gourdo1's](mailto:gourdo1@outlook.com) GMMK Pro ISO layout
|
||||
# [gourdo1's](mailto:gourdo1@outlook.com) GMMK Pro Keyboard Layouts
|
||||
|
||||
This Windows-centric ISO layout is based on [Jonavin's](https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/rev1/iso/keymaps/jonavin) GMMK Pro layout with several additions, fixes, a tweaked keymap, updated layers, [Tomas Guinan's paddle game](https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame) and expanded RGB controls.
|
||||
These Windows-centric layouts are based on Jonavin's GMMK Pro [layout](https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/rev1/ansi/keymaps/jonavin) with many additions, fixes, a revamped keymap, persistent user customizations, updated layers, Pascal Getreuer's [autocorrect](https://getreuer.info/posts/keyboards/autocorrection/), Tomas Guinan's [paddle game](https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame) and expanded RGB controls and effects.
|
||||
|
||||
![image](https://raw.githubusercontent.com/gourdo1/media/main/susuwatari.jpg)
|
||||
|
||||
## Features:
|
||||
* Up-to-date [Changelog](https://github.com/gourdo1/gmmkpro-media/blob/main/changelog.md)
|
||||
* Latest [ANSI firmware](https://github.com/gourdo1/gmmkpro-media/raw/main/gmmk_pro_rev1_ansi_gourdo1.bin) download. (Flash with [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases))
|
||||
* Latest [ISO firmware](https://github.com/gourdo1/gmmkpro-media/raw/main/gmmk_pro_rev1_iso_gourdo1.bin) download. (Flash with [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases))
|
||||
* Printable Keyboard [Cheatsheet](https://github.com/gourdo1/gmmkpro-media/raw/main/GMMK_Pro_Cheatsheet.pdf)
|
||||
|
||||
## Features
|
||||
|
||||
### Core Functionality
|
||||
|
||||
* ISO layout (added July xx, 2022)
|
||||
* [VIA](https://www.caniusevia.com/) support enabled (added Mar 16, 2022)
|
||||
* Support for both [ANSI](https://keebnews.com/ansi-vs-iso/) and [ISO](https://keebnews.com/ansi-vs-iso/) keyboard layouts.
|
||||
* Quick & Easy Customization: Open a text editor and hit [FN]` (tilde on ANSI; the key left of '1' on ISO layouts) to view toggle-able settings.
|
||||
* [VIA](https://www.caniusevia.com/) support enabled.
|
||||
* AutoCorrection: Pascal Getreuer's AutoCorrect code incorporated with 400 word dictionary on words > 4 characters.
|
||||
* 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) -- toggled with Fn+R
|
||||
* 1000Hz polling rate with 5ms debounce time for quick response in games
|
||||
* Mouse Keys! Don't want to move your hands off the keyboard or you didn't bring it with you on the road? Use cursor keys to move the mouse.
|
||||
* Overlay numpad on 789-UIOP-JKL;-M,. & Space-bar mapped to Enter key for rapid number entry
|
||||
* 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)
|
||||
* Capslock toggled by double tap of Left Shift key or Fn + Capslock (RGB green highlighted)
|
||||
* Paddle game accessible via Fn+P; Hit Fn+P again or double tap ESC to exit (added May 5, 2022)
|
||||
* Single-handed shortcut for Ctrl-Alt-Delete: Fn+/ (added May 14, 2022)
|
||||
* Single-handed shortcut for Win-L (lock Windows): Fn+L (added May 17, 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)
|
||||
* 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)
|
||||
* RGB backlight effects expanded to include framebuffer effects and reactive keypress modes (updated May 24, 2022)
|
||||
* RGB backlight now remembers last color & effect settings after power down (updated May 24, 2022)
|
||||
* [N-key Rollover](https://en.wikipedia.org/wiki/Rollover_\(keyboard\)#n-key_rollover) (NKRO) -- toggled with [FN]R
|
||||
* 1000Hz polling rate with 5ms debounce time for quick response in games.
|
||||
* Mouse Keys! Don't want to move your hands off the keyboard or you didn't bring it with you? Use cursor keys to move the mouse.
|
||||
* Overlay numpad on 789-UIOP-JKL;-M,. & Space-bar mapped to Enter key for rapid number entry.
|
||||
* Gaming mode ([FN]Win-key) locks out Win-key and double-tap Shift Capslock; Also RGB highlights WSAD and nearby gaming keys.
|
||||
* Caps Word enabled: To capitalize the next word only, press and release left and right shift at the same time.
|
||||
* Multi-monitor app moving shortcuts: [FN] ],[ (square brackets) to move current app window to next monitor.
|
||||
* Capslock toggled by double tap of Left Shift key or FN + Capslock (RGB green highlighted).
|
||||
* Paddle game accessible via [FN]P. Hit [FN]P again or double tap [ESC] to exit.
|
||||
* Single-handed shortcut for Ctrl-Alt-Delete: [FN]/
|
||||
* Single-handed shortcut for WinKey-L (lock Windows): [FN]L
|
||||
* Domain shortcuts: [FN]. for .com, [FN]O for outlook.com, [FN]Y for yahoo.com, [FN]H for hotmail.com, [FN]G for gmail.com.
|
||||
* [Bootloader mode](https://github.com/qmk/qmk_firmware/blob/master/docs/newbs_flashing.md) accessible via [FN]Backslash for ANSI and FN(key next to Left Shift) for ISO
|
||||
* PrtScrn, Scroll Lock, Pause/Break are top right on the keyboard: [FN]F11, [FN]F12, [FN]F13
|
||||
* [Colemak](https://colemak.com/) key layout support (Accessible via Left Shift + turn Encoder clockwise until side LEDs light up purple)
|
||||
* Double tap ESC any time to revert to base layer.
|
||||
* RGB backlight effects expanded to include framebuffer effects and reactive keypress modes.
|
||||
* RGB backlight now remembers last color & effect settings after power down.
|
||||
|
||||
### Quick & Easy Customization
|
||||
* Below features can be toggled by holding [FN] and pressing the number corresponding to that feature. Changes are saved to EEPROM for persistence.
|
||||
* Print current settings by opening a text editor and pressing [FN]~ (the key left of '1' on ISO layout keyboards)
|
||||
* Quick view current settings by holding [FN] and viewing RGB under number keys (green means ON, violet means OFF)
|
||||
|
||||
#### Toggle-able Settings:
|
||||
1. CapsLock RGB - Highlight under alpha keys
|
||||
2. Numpad RGB - Highlight under numpad layer keys
|
||||
3. ESC key - Double tap ESC key to go to base layer
|
||||
4. Swap DEL and HOME - Default is DEL to the right of BKSPC & HOME is above BKSPC
|
||||
5. Capslock function - Toggle between double tap LShift for CapsLock with Numpad on CapsLock key (default) and standard CapsLock
|
||||
6. Encoder button - Default mutes volume; alternate plays/pauses media
|
||||
7. Insert function - Toggle between SHIFT-BKSPC and SHIFT-DEL
|
||||
8. Modded-Space override - Use standard Space in place of modded-Space functions
|
||||
9. AutoCorrect - Internal (English) AutoCorrect; default is enabled
|
||||
0. (ISO layouts only) CapsLock highlights extended alpha keys
|
||||
|
||||
### 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
|
||||
* Numpad uses Space-bar as Enter for rapid number entry (added May 17, 2022)
|
||||
* Numpad uses Space-bar as Enter for rapid number entry.
|
||||
* 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 and 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 and N keys light up orange if system numlock is off (inverted status), indicating numpad keys will not deliver expected output ([FN]N to toggle)
|
||||
* 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 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.
|
||||
* 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 (added Feb 17, 2022)
|
||||
* Fn + knob turn changes RGB idle timeout
|
||||
* Fn + knob push puts PC to Sleep (Added May 14, 2022)
|
||||
* Exponential encoder: quick repeated volume up doubles increase; quick repeated volume down triples decrease.
|
||||
* FN + knob turn changes RGB idle timeout
|
||||
* FN + knob push puts PC to Sleep
|
||||
* holding Left Shift changes layers
|
||||
* holding Right Shift navigates page up/down
|
||||
* holding Left Ctrl navigates prev/next word
|
||||
@ -58,65 +80,45 @@ This Windows-centric ISO layout is based on [Jonavin's](https://github.com/qmk/q
|
||||
### Paddle Game
|
||||
|
||||
* Based on [Tomas Guinan's excellent GMMK Pro paddle game](https://github.com/qmk/qmk_firmware/tree/master/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame)
|
||||
* Paddle Game playable by pressing Fn+P (P lights up green in Fn layer if game is enabled in firmware, otherwise it lights up red)
|
||||
* Paddle Game playable by pressing [FN]P (P lights up green in FN layer if game is enabled in firmware, otherwise it lights up red)
|
||||
* Use rotary encoder to control paddle
|
||||
* Contains 12 levels, indicated by blue LED on F-key row
|
||||
* Player has 4 lives, indicated by nav cluster
|
||||
* Deflect white balls while avoiding red ones
|
||||
* Use Fn+P, double tap ESC or otherwise change layer to quit game
|
||||
* Use [FN]P, double tap ESC or otherwise change layer to quit game
|
||||
|
||||
### 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 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) (updated Apr 7, 2022)
|
||||
* indicators in Fn layer using RGB in F-key and number rows to show the current timeout in minutes
|
||||
* Fn+Z to turn off RGB backlighting (indicator lights still work); press again to toggle
|
||||
* RGB indicators on left side LEDs in order from top: System NumLock off (orange), Scroll Lock (red), Numpad (blue), Capslock (green).
|
||||
* 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 saturation: [FN]Q/E
|
||||
* RGB backlight night mode toggle: [FN]Z (indicators still work)
|
||||
* RGB backlight timeout: [FN]Encoder or "-" and "=" (default 15 minutes)
|
||||
* F-key row indicator lights (cyan and blue) in FN layer display the current backlight timeout in minutes
|
||||
* [FN]Z to turn off RGB backlighting (indicator lights still work); press again to toggle
|
||||
* Left side RGB indicators in order from top: Scroll Lock (red), Numpad (blue), Capslock (green).
|
||||
|
||||
### 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)
|
||||
* Fn+/ is single-handed shortcut to Ctrl-Alt-Delete (added May 14, 2022)
|
||||
* Fn+L is single-handed shortcut to Win-L (lock Windows) (added May 17, 2022)
|
||||
* Fn+[Encoder press] to sleep Windows PC (added May 14, 2022)
|
||||
* [FN]\ or [FN]B to get to bootloader mode (use key next to Left Shift on ISO)
|
||||
* [FN][ESC] to clear EEPROM
|
||||
* [FN]R to toggle N-key Rollover
|
||||
* [FN]N to toggle system numlock
|
||||
* [FN]/ is single-handed shortcut to Ctrl-Alt-Delete
|
||||
* [FN]L is single-handed shortcut to Win-L (lock Windows)
|
||||
* [FN][Encoder press] to sleep Windows PC
|
||||
|
||||
Link to latest firmware binary: https://github.com/gourdo1/media/raw/main/gmmk_pro_rev1_ansi_gourdo1.bin
|
||||
|
||||
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 overlay numpad, so should be off when numpad layer is active unless you have an external numpad.
|
||||
|
||||
COLEMAK_LAYER_ENABLE = yes - Enables optional 5th layer for COLEMAK layout. Use Shift + encoder to enter 5th layer.
|
||||
|
||||
GAME_ENABLE ?= yes - Enables Paddle Game
|
||||
|
||||
## Layer Diagrams
|
||||
## Layer Diagrams (ANSI)
|
||||
### Base layer
|
||||
![image](https://raw.githubusercontent.com/gourdo1/media/main/base.png)
|
||||
![image](https://raw.githubusercontent.com/gourdo1/gmmkpro-media/main/base.png)
|
||||
|
||||
### Fn Layer
|
||||
![image](https://raw.githubusercontent.com/gourdo1/media/main/fn1.png)
|
||||
### FN Layer
|
||||
![image](https://raw.githubusercontent.com/gourdo1/gmmkpro-media/main/fn1.png)
|
||||
|
||||
### Layer 2 (Numpad)
|
||||
![image](https://raw.githubusercontent.com/gourdo1/media/main/numpad.png)
|
||||
![image](https://raw.githubusercontent.com/gourdo1/gmmkpro-media/main/numpad.png)
|
||||
|
||||
### COLEMAK layer
|
||||
![image](https://user-images.githubusercontent.com/71780717/131235050-980d2f54-2d23-4ae8-a83f-9fcdbe60d6cb.png)
|
||||
|
@ -200,16 +200,6 @@ const uint8_t LED_LIST_NUMROW[] = {
|
||||
};
|
||||
|
||||
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,
|
||||
@ -238,6 +228,38 @@ const uint8_t LED_LIST_LETTERS[] = {
|
||||
LED_M
|
||||
};
|
||||
|
||||
const uint8_t LED_LIST_LETTERS_DE[] = {
|
||||
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,
|
||||
LED_SCLN,
|
||||
LED_LBRC,
|
||||
LED_QUOT
|
||||
};
|
||||
|
||||
const uint8_t LED_LIST_NUMPAD[] = {
|
||||
LED_1,
|
||||
LED_2,
|
||||
|
@ -4,7 +4,7 @@ COMMAND_ENABLE = no
|
||||
MOUSEKEY_ENABLE = yes
|
||||
|
||||
VIA_ENABLE = yes
|
||||
TAP_DANCE_ENABLE = yes
|
||||
TAP_DANCE_ENABLE = no
|
||||
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
|
||||
CAPS_WORD_ENABLE = yes # Enable built-in Caps Word functionality
|
||||
|
||||
|
182
users/gourdo1/autocorrect/autocorrection.c
Normal file
182
users/gourdo1/autocorrect/autocorrection.c
Normal file
@ -0,0 +1,182 @@
|
||||
// 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/autocorrection
|
||||
|
||||
#include "autocorrection.h"
|
||||
|
||||
#include <string.h>
|
||||
#include "autocorrection_data.h"
|
||||
|
||||
#if AUTOCORRECTION_MIN_LENGTH < 4
|
||||
// Odd output or hard locks on the board have been observed when the min typo
|
||||
// length is 3 or lower (https://github.com/getreuer/qmk-keymap/issues/2).
|
||||
// Additionally, autocorrection entries for short typos are more likely to false
|
||||
// trigger, so it is suggested that typos be at least 5 characters.
|
||||
#error "Min typo length is less than 4. Autocorrection may behave poorly."
|
||||
#endif
|
||||
|
||||
bool process_autocorrection(uint16_t keycode, keyrecord_t* record) {
|
||||
if (user_config.autocorrect) {
|
||||
static uint8_t typo_buffer[AUTOCORRECTION_MAX_LENGTH] = {0};
|
||||
static uint8_t typo_buffer_size = 0;
|
||||
|
||||
// Ignore key release; we only process key presses.
|
||||
if (!record->event.pressed) { return true; }
|
||||
|
||||
#ifndef NO_ACTION_ONESHOT
|
||||
const uint8_t mods = get_mods() | get_oneshot_mods();
|
||||
#else
|
||||
const uint8_t mods = get_mods();
|
||||
#endif // NO_ACTION_ONESHOT
|
||||
// Disable autocorrection while a mod other than shift is active.
|
||||
if ((mods & ~MOD_MASK_SHIFT) != 0) {
|
||||
typo_buffer_size = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
// The following switch cases address various kinds of keycodes. This logic is
|
||||
// split over two switches rather than merged into one. The first switch may
|
||||
// extract a basic keycode which is then further handled by the second switch,
|
||||
// e.g. a layer-tap key with Caps Lock `LT(layer, KC_CAPS)`.
|
||||
switch (keycode) {
|
||||
#ifndef NO_ACTION_TAPPING
|
||||
case QK_MOD_TAP ... QK_MOD_TAP_MAX: // Tap-hold keys.
|
||||
#ifndef NO_ACTION_LAYER
|
||||
case QK_LAYER_TAP ... QK_LAYER_TAP_MAX:
|
||||
#endif // NO_ACTION_LAYER
|
||||
// Ignore when tap-hold keys are held.
|
||||
if (record->tap.count == 0) { return true; }
|
||||
// Otherwise when tapped, get the basic keycode.
|
||||
// Fallthrough intended.
|
||||
#endif // NO_ACTION_TAPPING
|
||||
|
||||
// Handle shifted keys, e.g. symbols like KC_EXLM = S(KC_1).
|
||||
case QK_LSFT ... QK_LSFT + 255:
|
||||
case QK_RSFT ... QK_RSFT + 255:
|
||||
keycode &= 0xff; // Get the basic keycode.
|
||||
break;
|
||||
|
||||
// NOTE: Space Cadet keys expose no info to check whether they are being
|
||||
// tapped vs. held. This makes autocorrection ambiguous, e.g. KC_LCPO might
|
||||
// be '(', which we would treat as a word break, or it might be shift, which
|
||||
// we would treat as having no effect. To behave cautiously, we allow Space
|
||||
// Cadet keycodes to fall to the logic below and clear autocorrection state.
|
||||
}
|
||||
|
||||
switch (keycode) {
|
||||
// Ignore shifts, Caps Lock, one-shot mods, and layer switch keys.
|
||||
case KC_NO:
|
||||
case KC_LSFT:
|
||||
case KC_RSFT:
|
||||
case KC_CAPS:
|
||||
case QK_ONE_SHOT_MOD ... QK_ONE_SHOT_MOD_MAX:
|
||||
case QK_TO ... QK_TO_MAX:
|
||||
case QK_MOMENTARY ... QK_MOMENTARY_MAX:
|
||||
case QK_DEF_LAYER ... QK_DEF_LAYER_MAX:
|
||||
case QK_TOGGLE_LAYER ... QK_TOGGLE_LAYER_MAX:
|
||||
case QK_ONE_SHOT_LAYER ... QK_ONE_SHOT_LAYER_MAX:
|
||||
case QK_LAYER_TAP_TOGGLE ... QK_LAYER_TAP_TOGGLE_MAX:
|
||||
case QK_LAYER_MOD ... QK_LAYER_MOD_MAX:
|
||||
return true; // Ignore these keys.
|
||||
}
|
||||
|
||||
if (keycode == KC_QUOT) {
|
||||
// Treat " (shifted ') as a word boundary.
|
||||
if ((mods & MOD_MASK_SHIFT) != 0) { keycode = KC_SPC; }
|
||||
} else if (!(KC_A <= keycode && keycode <= KC_Z)) {
|
||||
if (keycode == KC_BSPC) {
|
||||
// Remove last character from the buffer.
|
||||
if (typo_buffer_size > 0) { --typo_buffer_size; }
|
||||
return true;
|
||||
} else if (KC_1 <= keycode && keycode <= KC_SLSH && keycode != KC_ESC) {
|
||||
// Set a word boundary if space, period, digit, etc. is pressed.
|
||||
// Behave more conservatively for the enter key. Reset, so that enter
|
||||
// can't be used on a word ending.
|
||||
if (keycode == KC_ENT) { typo_buffer_size = 0; }
|
||||
keycode = KC_SPC;
|
||||
} else {
|
||||
// Clear state if some other non-alpha key is pressed.
|
||||
typo_buffer_size = 0;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// If the buffer is full, rotate it to discard the oldest character.
|
||||
if (typo_buffer_size >= AUTOCORRECTION_MAX_LENGTH) {
|
||||
memmove(typo_buffer, typo_buffer + 1, AUTOCORRECTION_MAX_LENGTH - 1);
|
||||
typo_buffer_size = AUTOCORRECTION_MAX_LENGTH - 1;
|
||||
}
|
||||
|
||||
// Append `keycode` to the buffer.
|
||||
// NOTE: `keycode` must be a basic keycode (0-255) by this point.
|
||||
typo_buffer[typo_buffer_size++] = (uint8_t) keycode;
|
||||
// Early return if not many characters have been buffered so far.
|
||||
if (typo_buffer_size < AUTOCORRECTION_MIN_LENGTH) { return true; }
|
||||
|
||||
// Check whether the buffer ends in a typo. This is done using a trie
|
||||
// stored in `autocorrection_data`.
|
||||
uint16_t state = 0;
|
||||
uint8_t code = pgm_read_byte(autocorrection_data + state);
|
||||
for (int i = typo_buffer_size - 1; i >= 0; --i) {
|
||||
const uint8_t key_i = typo_buffer[i];
|
||||
|
||||
if (code & 64) { // Check for match in node with multiple children.
|
||||
code &= 63;
|
||||
for (; code != key_i;
|
||||
code = pgm_read_byte(autocorrection_data + (state += 3))) {
|
||||
if (!code) { return true; }
|
||||
}
|
||||
|
||||
// Follow link to child node.
|
||||
state = (uint16_t)(
|
||||
(uint_fast16_t)pgm_read_byte(autocorrection_data + state + 1)
|
||||
| (uint_fast16_t)pgm_read_byte(autocorrection_data + state + 2) << 8);
|
||||
// Otherwise check for match in node with a single child.
|
||||
} else if (code != key_i) {
|
||||
return true;
|
||||
} else if (!(code = pgm_read_byte(autocorrection_data + (++state)))) {
|
||||
++state;
|
||||
}
|
||||
|
||||
// Stop if `state` becomes an invalid index. This should not normally
|
||||
// happen, it is a safeguard in case of a bug, data corruption, etc.
|
||||
if (state >= sizeof(autocorrection_data)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Read first byte of the next node.
|
||||
code = pgm_read_byte(autocorrection_data + state);
|
||||
|
||||
if (code & 128) { // A typo was found! Apply autocorrection.
|
||||
const int backspaces = code & 63;
|
||||
for (int i = 0; i < backspaces; ++i) { tap_code(KC_BSPC); }
|
||||
send_string_P((char const*)(autocorrection_data + state + 1));
|
||||
|
||||
if (keycode == KC_SPC) {
|
||||
typo_buffer[0] = KC_SPC;
|
||||
typo_buffer_size = 1;
|
||||
return true;
|
||||
} else {
|
||||
typo_buffer_size = 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
40
users/gourdo1/autocorrect/autocorrection.h
Normal file
40
users/gourdo1/autocorrect/autocorrection.h
Normal file
@ -0,0 +1,40 @@
|
||||
// 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.
|
||||
//
|
||||
//
|
||||
// Autocorrection on your keyboard.
|
||||
//
|
||||
// This library implements rudimentary autocorrection, automatically detecting
|
||||
// and fixing some misspellings. Beware that the autocorrection logic is
|
||||
// unaware of hotkey or mouse-based cursor movement.
|
||||
//
|
||||
// For full documentation, see
|
||||
// https://getreuer.info/posts/keyboards/autocorrection
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
#include "gourdo1.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
bool process_autocorrection(uint16_t keycode, keyrecord_t* record);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
722
users/gourdo1/autocorrect/autocorrection_data.h
Normal file
722
users/gourdo1/autocorrect/autocorrection_data.h
Normal file
File diff suppressed because it is too large
Load Diff
722
users/gourdo1/autocorrect/autocorrection_data.h (large)
Normal file
722
users/gourdo1/autocorrect/autocorrection_data.h (large)
Normal file
File diff suppressed because it is too large
Load Diff
152
users/gourdo1/autocorrect/autocorrection_data.h (small)
Normal file
152
users/gourdo1/autocorrect/autocorrection_data.h (small)
Normal file
@ -0,0 +1,152 @@
|
||||
// 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.
|
||||
|
||||
// Generated code.
|
||||
|
||||
// Autocorrection dictionary (71 entries):
|
||||
// :guage -> gauge
|
||||
// :the:the: -> the
|
||||
// :thier -> their
|
||||
// :ture -> true
|
||||
// accomodate -> accommodate
|
||||
// acommodate -> accommodate
|
||||
// aparent -> apparent
|
||||
// aparrent -> apparent
|
||||
// apparant -> apparent
|
||||
// apparrent -> apparent
|
||||
// aquire -> acquire
|
||||
// becuase -> because
|
||||
// cauhgt -> caught
|
||||
// cheif -> chief
|
||||
// choosen -> chosen
|
||||
// cieling -> ceiling
|
||||
// collegue -> colleague
|
||||
// concensus -> consensus
|
||||
// contians -> contains
|
||||
// cosnt -> const
|
||||
// dervied -> derived
|
||||
// dosen't -> doesn't
|
||||
// fales -> false
|
||||
// fasle -> false
|
||||
// fitler -> filter
|
||||
// flase -> false
|
||||
// foward -> forward
|
||||
// frequecy -> frequency
|
||||
// gaurantee -> guarantee
|
||||
// guaratee -> guarantee
|
||||
// heigth -> height
|
||||
// heirarchy -> hierarchy
|
||||
// inclued -> include
|
||||
// interator -> iterator
|
||||
// intput -> input
|
||||
// invliad -> invalid
|
||||
// lenght -> length
|
||||
// liasion -> liaison
|
||||
// libary -> library
|
||||
// listner -> listener
|
||||
// looses: -> loses
|
||||
// looup -> lookup
|
||||
// manefist -> manifest
|
||||
// namesapce -> namespace
|
||||
// namespcae -> namespace
|
||||
// occassion -> occasion
|
||||
// occured -> occurred
|
||||
// ouptut -> output
|
||||
// ouput -> output
|
||||
// overide -> override
|
||||
// postion -> position
|
||||
// priviledge -> privilege
|
||||
// psuedo -> pseudo
|
||||
// recieve -> receive
|
||||
// refered -> referred
|
||||
// relevent -> relevant
|
||||
// repitition -> repetition
|
||||
// retrun -> return
|
||||
// retun -> return
|
||||
// reuslt -> result
|
||||
// reutrn -> return
|
||||
// saftey -> safety
|
||||
// seperate -> separate
|
||||
// singed -> signed
|
||||
// stirng -> string
|
||||
// strign -> string
|
||||
// swithc -> switch
|
||||
// swtich -> switch
|
||||
// thresold -> threshold
|
||||
// udpate -> update
|
||||
// widht -> width
|
||||
|
||||
#define AUTOCORRECTION_MIN_LENGTH 5 // ":ture"
|
||||
#define AUTOCORRECTION_MAX_LENGTH 10 // "accomodate"
|
||||
|
||||
static const uint8_t autocorrection_data[1120] PROGMEM = {108, 43, 0, 6, 71, 0,
|
||||
7, 81, 0, 8, 199, 0, 9, 240, 1, 10, 250, 1, 11, 26, 2, 17, 53, 2, 18, 190, 2,
|
||||
19, 202, 2, 21, 212, 2, 22, 20, 3, 23, 67, 3, 28, 32, 4, 0, 72, 50, 0, 22, 60,
|
||||
0, 0, 11, 23, 44, 8, 11, 23, 44, 0, 132, 0, 8, 22, 18, 18, 15, 0, 132, 115,
|
||||
101, 115, 0, 11, 23, 12, 26, 22, 0, 129, 99, 104, 0, 68, 94, 0, 8, 106, 0, 15,
|
||||
174, 0, 21, 187, 0, 0, 12, 15, 25, 17, 12, 0, 131, 97, 108, 105, 100, 0, 74,
|
||||
119, 0, 12, 129, 0, 21, 140, 0, 24, 165, 0, 0, 17, 12, 22, 0, 131, 103, 110,
|
||||
101, 100, 0, 25, 21, 8, 7, 0, 131, 105, 118, 101, 100, 0, 72, 147, 0, 24, 156,
|
||||
0, 0, 9, 8, 21, 0, 129, 114, 101, 100, 0, 6, 6, 18, 0, 129, 114, 101, 100, 0,
|
||||
15, 6, 17, 12, 0, 129, 100, 101, 0, 18, 22, 8, 21, 11, 23, 0, 130, 104, 111,
|
||||
108, 100, 0, 4, 26, 18, 9, 0, 131, 114, 119, 97, 114, 100, 0, 68, 233, 0, 6,
|
||||
246, 0, 7, 4, 1, 8, 16, 1, 10, 52, 1, 15, 81, 1, 21, 90, 1, 22, 117, 1, 23,
|
||||
144, 1, 24, 215, 1, 25, 228, 1, 0, 6, 19, 22, 8, 16, 4, 17, 0, 130, 97, 99,
|
||||
101, 0, 19, 4, 22, 8, 16, 4, 17, 0, 131, 112, 97, 99, 101, 0, 12, 21, 8, 25,
|
||||
18, 0, 130, 114, 105, 100, 101, 0, 23, 0, 68, 25, 1, 17, 36, 1, 0, 21, 4, 24,
|
||||
10, 0, 130, 110, 116, 101, 101, 0, 4, 21, 24, 4, 10, 0, 135, 117, 97, 114, 97,
|
||||
110, 116, 101, 101, 0, 68, 59, 1, 7, 69, 1, 0, 24, 10, 44, 0, 131, 97, 117,
|
||||
103, 101, 0, 8, 15, 12, 25, 12, 21, 19, 0, 130, 103, 101, 0, 22, 4, 9, 0, 130,
|
||||
108, 115, 101, 0, 76, 97, 1, 24, 109, 1, 0, 24, 20, 4, 0, 132, 99, 113, 117,
|
||||
105, 114, 101, 0, 23, 44, 0, 130, 114, 117, 101, 0, 4, 0, 79, 126, 1, 24, 134,
|
||||
1, 0, 9, 0, 131, 97, 108, 115, 101, 0, 6, 8, 5, 0, 131, 97, 117, 115, 101, 0,
|
||||
4, 0, 71, 156, 1, 19, 193, 1, 21, 203, 1, 0, 18, 16, 0, 80, 166, 1, 18, 181,
|
||||
1, 0, 18, 6, 4, 0, 135, 99, 111, 109, 109, 111, 100, 97, 116, 101, 0, 6, 6, 4,
|
||||
0, 132, 109, 111, 100, 97, 116, 101, 0, 7, 24, 0, 132, 112, 100, 97, 116, 101,
|
||||
0, 8, 19, 8, 22, 0, 132, 97, 114, 97, 116, 101, 0, 10, 8, 15, 15, 18, 6, 0,
|
||||
130, 97, 103, 117, 101, 0, 8, 12, 6, 8, 21, 0, 131, 101, 105, 118, 101, 0, 12,
|
||||
8, 11, 6, 0, 130, 105, 101, 102, 0, 17, 0, 76, 3, 2, 21, 16, 2, 0, 15, 8, 12,
|
||||
6, 0, 133, 101, 105, 108, 105, 110, 103, 0, 12, 23, 22, 0, 131, 114, 105, 110,
|
||||
103, 0, 70, 33, 2, 23, 44, 2, 0, 12, 23, 26, 22, 0, 131, 105, 116, 99, 104, 0,
|
||||
10, 12, 8, 11, 0, 129, 104, 116, 0, 72, 69, 2, 10, 80, 2, 18, 89, 2, 21, 156,
|
||||
2, 24, 167, 2, 0, 22, 18, 18, 11, 6, 0, 131, 115, 101, 110, 0, 12, 21, 23, 22,
|
||||
0, 129, 110, 103, 0, 12, 0, 86, 98, 2, 23, 124, 2, 0, 68, 105, 2, 22, 114, 2,
|
||||
0, 12, 15, 0, 131, 105, 115, 111, 110, 0, 4, 6, 6, 18, 0, 131, 105, 111, 110,
|
||||
0, 76, 131, 2, 22, 146, 2, 0, 23, 12, 19, 8, 21, 0, 134, 101, 116, 105, 116,
|
||||
105, 111, 110, 0, 18, 19, 0, 131, 105, 116, 105, 111, 110, 0, 23, 24, 8, 21,
|
||||
0, 131, 116, 117, 114, 110, 0, 85, 174, 2, 23, 183, 2, 0, 23, 8, 21, 0, 130,
|
||||
117, 114, 110, 0, 8, 21, 0, 128, 114, 110, 0, 7, 8, 24, 22, 19, 0, 131, 101,
|
||||
117, 100, 111, 0, 24, 18, 18, 15, 0, 129, 107, 117, 112, 0, 72, 219, 2, 18, 3,
|
||||
3, 0, 76, 229, 2, 15, 238, 2, 17, 248, 2, 0, 11, 23, 44, 0, 130, 101, 105,
|
||||
114, 0, 23, 12, 9, 0, 131, 108, 116, 101, 114, 0, 23, 22, 12, 15, 0, 130, 101,
|
||||
110, 101, 114, 0, 23, 4, 21, 8, 23, 17, 12, 0, 135, 116, 101, 114, 97, 116,
|
||||
111, 114, 0, 72, 30, 3, 17, 38, 3, 24, 51, 3, 0, 15, 4, 9, 0, 129, 115, 101,
|
||||
0, 4, 12, 23, 17, 18, 6, 0, 131, 97, 105, 110, 115, 0, 22, 17, 8, 6, 17, 18,
|
||||
6, 0, 133, 115, 101, 110, 115, 117, 115, 0, 116, 89, 3, 10, 102, 3, 11, 112,
|
||||
3, 15, 134, 3, 17, 145, 3, 22, 234, 3, 24, 248, 3, 0, 17, 8, 22, 18, 7, 0,
|
||||
132, 101, 115, 110, 39, 116, 0, 11, 24, 4, 6, 0, 130, 103, 104, 116, 0, 71,
|
||||
119, 3, 10, 126, 3, 0, 12, 26, 0, 129, 116, 104, 0, 17, 8, 15, 0, 129, 116,
|
||||
104, 0, 22, 24, 8, 21, 0, 131, 115, 117, 108, 116, 0, 68, 155, 3, 8, 166, 3,
|
||||
22, 226, 3, 0, 21, 4, 19, 19, 4, 0, 130, 101, 110, 116, 0, 85, 173, 3, 25,
|
||||
216, 3, 0, 68, 180, 3, 21, 191, 3, 0, 19, 4, 0, 132, 112, 97, 114, 101, 110,
|
||||
116, 0, 4, 19, 0, 68, 201, 3, 19, 209, 3, 0, 133, 112, 97, 114, 101, 110, 116,
|
||||
0, 4, 0, 131, 101, 110, 116, 0, 8, 15, 8, 21, 0, 130, 97, 110, 116, 0, 18, 6,
|
||||
0, 130, 110, 115, 116, 0, 12, 9, 8, 17, 4, 16, 0, 132, 105, 102, 101, 115,
|
||||
116, 0, 83, 255, 3, 23, 22, 4, 0, 87, 6, 4, 24, 14, 4, 0, 17, 12, 0, 131, 112,
|
||||
117, 116, 0, 18, 0, 130, 116, 112, 117, 116, 0, 19, 24, 18, 0, 131, 116, 112,
|
||||
117, 116, 0, 70, 45, 4, 8, 57, 4, 11, 67, 4, 21, 85, 4, 0, 8, 24, 20, 8, 21,
|
||||
9, 0, 129, 110, 99, 121, 0, 23, 9, 4, 22, 0, 130, 101, 116, 121, 0, 6, 21, 4,
|
||||
21, 12, 8, 11, 0, 135, 105, 101, 114, 97, 114, 99, 104, 121, 0, 4, 5, 12, 15,
|
||||
0, 130, 114, 97, 114, 121, 0};
|
||||
|
473
users/gourdo1/autocorrect/autocorrection_dict.txt
Normal file
473
users/gourdo1/autocorrect/autocorrection_dict.txt
Normal file
File diff suppressed because it is too large
Load Diff
303
users/gourdo1/autocorrect/make_autocorrection_data.py
Normal file
303
users/gourdo1/autocorrect/make_autocorrection_data.py
Normal file
File diff suppressed because it is too large
Load Diff
@ -71,3 +71,31 @@ static bool process_esc_to_base(uint16_t keycode, keyrecord_t * record) {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool process_lsft_for_caps(uint16_t keycode, keyrecord_t * record) {
|
||||
static bool tapped = false;
|
||||
static uint16_t tap_timer = 0;
|
||||
|
||||
if (keycode == KC_LSFT) {
|
||||
if (user_config.double_tap_shift_for_capslock) {
|
||||
if (!keymap_config.no_gui) {
|
||||
if (record->event.pressed) {
|
||||
if (tapped && !timer_expired(record->event.time, tap_timer)) {
|
||||
// The key was double tapped.
|
||||
//clear_mods(); // If needed, clear the mods.
|
||||
// Do something interesting...
|
||||
register_code(KC_CAPS);
|
||||
}
|
||||
tapped = true;
|
||||
tap_timer = record->event.time + TAPPING_TERM;
|
||||
} else {
|
||||
unregister_code(KC_CAPS);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// On an event with any other key, reset the double tap state.
|
||||
tapped = false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -21,33 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "custom_double_taps.h"
|
||||
|
||||
// Tap once for shift, twice for Caps Lock but only if Win Key is not disabled (also disabled by user.config variable)
|
||||
void dance_LSFT_each_tap(qk_tap_dance_state_t * state, void * user_data) {
|
||||
if (user_config.double_tap_shift_for_capslock) {
|
||||
if (state -> count == 1 || keymap_config.no_gui) {
|
||||
register_code(KC_LSFT);
|
||||
} else {
|
||||
register_code(KC_CAPS);
|
||||
}
|
||||
} else {
|
||||
register_code(KC_LSFT);
|
||||
}
|
||||
}
|
||||
|
||||
void dance_LSFT_reset(qk_tap_dance_state_t * state, void * user_data) {
|
||||
if (state -> count == 1 || keymap_config.no_gui) {
|
||||
unregister_code(KC_LSFT);
|
||||
} else {
|
||||
unregister_code(KC_CAPS);
|
||||
unregister_code(KC_LSFT);
|
||||
}
|
||||
}
|
||||
|
||||
// Tap Dance definitions
|
||||
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||
// Tap once for shift, twice for Caps Lock
|
||||
[TD_LSFT_CAPS_WIN] = ACTION_TAP_DANCE_FN_ADVANCED(dance_LSFT_each_tap, NULL, dance_LSFT_reset)
|
||||
};
|
||||
#include "autocorrect/autocorrection.h"
|
||||
|
||||
// RGB NIGHT MODE
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
@ -129,6 +103,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) {
|
||||
if (!process_record_keymap(keycode, record)) { return false; }
|
||||
if (!process_capsnum(keycode, record)) { return false; }
|
||||
if (!process_esc_to_base(keycode, record)) { return false; }
|
||||
if (!process_lsft_for_caps(keycode, record)) { return false; }
|
||||
if (!process_autocorrection(keycode, record)) { return false; }
|
||||
|
||||
// Key macros ...
|
||||
switch (keycode) {
|
||||
@ -136,66 +112,77 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) {
|
||||
// User configuration toggles
|
||||
case PRNCONF: // Print verbose status of all user_config toggles (open a text editor before engaging!!)
|
||||
if (record->event.pressed) {
|
||||
//send_string("Left bracket with alt numcodes "SS_LALT(SS_TAP(X_KP_0) SS_TAP(X_KP_0) SS_TAP(X_KP_9) SS_TAP(X_KP_1))"\n");
|
||||
send_string("\n\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x3C\x3C\x3C\x3C\x3C\x3C\x3C\x3C\x3C");
|
||||
send_string(" gourdo1\x27s GMMK Pro User Settings ");
|
||||
send_string("\x3E\x3E\x3E\x3E\x3E\x3E\x3E\x3E\x3E\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\n");
|
||||
send_string("Hold \x5B \bFn\x5D and the number corresponding to a setting below to toggle.\n");
|
||||
send_string("Re-print this screen with \x5B \bFn\x5D \x5B`\x5D to see your changes reflected.\n");
|
||||
send_string("Config also visible as RGB under number keys by holding \x5B \bFn\x5D.\n");
|
||||
send_string("\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d");
|
||||
send_string("\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d");
|
||||
send_string("\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d");
|
||||
send_string("\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\n");
|
||||
send_string("\n"SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)"#########");
|
||||
send_string(" gourdo1" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_3)SS_TAP(X_KP_9))"s GMMK Pro User Settings ");
|
||||
send_string("#########"SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)"\n");
|
||||
send_string("Hold "SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"Fn"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))" and the number corresponding to a setting below to toggle.\n");
|
||||
send_string("Re"SS_TAP(X_KP_MINUS)"print this screen with "SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"Fn" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3)) SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"`" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))" to see your changes reflected.\n");
|
||||
send_string("Config also visible as RGB under number keys by holding "SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"Fn" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))".\n");
|
||||
send_string(SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS));
|
||||
send_string(SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS));
|
||||
send_string(SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS));
|
||||
send_string(SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)"\n");
|
||||
send_string("1. CapsLock RGB highlight alpha keys................ ");
|
||||
if (user_config.rgb_hilite_caps) {
|
||||
send_string("\x5BON\x5D\n");
|
||||
send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"ON" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
|
||||
} else {
|
||||
send_string("\x5BOFF\x5D\n");
|
||||
send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"OFF" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
|
||||
}
|
||||
send_string("2. Numpad RGB highlight layer keys.................. ");
|
||||
if (user_config.rgb_hilite_numpad) {
|
||||
send_string("\x5BON\x5D\n");
|
||||
send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"ON" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
|
||||
} else {
|
||||
send_string("\x5BOFF\x5D\n");
|
||||
send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"OFF" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
|
||||
}
|
||||
send_string("3. Double tap ESC to revert to BASE layer........... ");
|
||||
if (user_config.esc_double_tap_to_baselyr) {
|
||||
send_string("\x5BON\x5D\n");
|
||||
send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"ON" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
|
||||
} else {
|
||||
send_string("\x5BOFF\x5D\n");
|
||||
send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"OFF" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
|
||||
}
|
||||
send_string("4. DEL \x26 HOME key locations......................... ");
|
||||
send_string("4. DEL "SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_3)SS_TAP(X_KP_8))" HOME key locations......................... ");
|
||||
if (user_config.del_right_home_top) {
|
||||
send_string("\x5BHOME on F13\x3B DEL right of BKSPC\x5D\n");
|
||||
send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"HOME on F13"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_5)SS_TAP(X_KP_9))" DEL right of BKSPC" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
|
||||
} else {
|
||||
send_string("\x5B \bDEL on F13\x3B HOME right of BKSPC\x5D\n");
|
||||
send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"DEL on F13"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_5)SS_TAP(X_KP_9))" HOME right of BKSPC" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
|
||||
}
|
||||
send_string("5. Numpad on CapsLock\x3B double tap LSHIFT for Caps... ");
|
||||
send_string("5. Numpad on CapsLock"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_5)SS_TAP(X_KP_9))" double tap LSHIFT for Caps... ");
|
||||
if (user_config.double_tap_shift_for_capslock) {
|
||||
send_string("\x5BON\x5D\n");
|
||||
send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"ON" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
|
||||
} else {
|
||||
send_string("\x5BOFF\x5D\n");
|
||||
send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"OFF" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
|
||||
}
|
||||
send_string("6. Encoder button function.......................... ");
|
||||
if (user_config.encoder_press_mute_or_media) {
|
||||
send_string("\x5BMUTE\x5D\n");
|
||||
send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"MUTE" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
|
||||
} else {
|
||||
send_string("\x5BMEDIA PLAY\x2FPAUSE\x5D\n");
|
||||
send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"MEDIA PLAY"SS_TAP(X_KP_SLASH) "PAUSE" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
|
||||
}
|
||||
send_string("7. Insert function accessed with.................... ");
|
||||
if (user_config.ins_on_shft_bkspc_or_del) {
|
||||
send_string("\x5BSHIFT\x2D \bBKSPC\x5D\n");
|
||||
send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"SHIFT"SS_TAP(X_KP_MINUS)"BKSPC"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
|
||||
} else {
|
||||
send_string("\x5BSHIFT\x2D \bDEL\x5D\n");
|
||||
send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"SHIFT"SS_TAP(X_KP_MINUS)"DEL"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
|
||||
}
|
||||
send_string("8. Force SHIFT \x26 CTRL\x2DSPACE to function like SPACE.. ");
|
||||
send_string("8. Force SHIFT "SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_3)SS_TAP(X_KP_8))" CTRL"SS_TAP(X_KP_MINUS)"SPACE to function like SPACE.. ");
|
||||
if (user_config.disable_space_mods) {
|
||||
send_string("\x5BON\x5D\n");
|
||||
send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"ON"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
|
||||
} else {
|
||||
send_string("\x5BOFF\x5D\n");
|
||||
send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"OFF"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
|
||||
}
|
||||
send_string("\nThe latest firmware updates are always here\x3a https\x3a\x2F\x2Fgithub.com\x2Fgourdo1\x2Fgmmkpro\x2Dmedia\n");
|
||||
send_string("9. AutoCorrect...................................... ");
|
||||
if (user_config.autocorrect) {
|
||||
send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"ON"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
|
||||
} else {
|
||||
send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"OFF"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
|
||||
}
|
||||
send_string("0. CapsLock highlights extended alphas "SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_4)SS_TAP(X_KP_0))"ISO"SS_TAP(X_KP_MINUS)"only"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_4)SS_TAP(X_KP_1))"... ");
|
||||
if (user_config.rgb_english_caps) {
|
||||
send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"OFF"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
|
||||
} else {
|
||||
send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"ON"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
|
||||
}
|
||||
send_string("\nThe latest firmware updates are always here"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_5)SS_TAP(X_KP_8))" https" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_5)SS_TAP(X_KP_8))SS_TAP(X_KP_SLASH)SS_TAP(X_KP_SLASH) "github.com"SS_TAP(X_KP_SLASH) "gourdo1"SS_TAP(X_KP_SLASH)"gmmkpro"SS_TAP(X_KP_MINUS)"media\n");
|
||||
}
|
||||
break;
|
||||
|
||||
@ -247,6 +234,18 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) {
|
||||
eeconfig_update_user(user_config.raw); // Writes the new status to EEPROM
|
||||
}
|
||||
break;
|
||||
case TG_AUTOCR: // Toggle AutoCorrect
|
||||
if (record->event.pressed) {
|
||||
user_config.autocorrect ^= 1; // Toggles the status
|
||||
eeconfig_update_user(user_config.raw); // Writes the new status to EEPROM
|
||||
}
|
||||
break;
|
||||
case TG_ENGCAP: // Toggle highlighting Non-English letters during CAPSLOCK
|
||||
if (record->event.pressed) {
|
||||
user_config.rgb_english_caps ^= 1; // Toggles the status
|
||||
eeconfig_update_user(user_config.raw); // Writes the new status to EEPROM
|
||||
}
|
||||
break;
|
||||
//return false;
|
||||
|
||||
// Key to the left of encoder function (default HOME)
|
||||
@ -417,7 +416,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) {
|
||||
case KC_00:
|
||||
if (record -> event.pressed) {
|
||||
// when keycode KC_00 is pressed
|
||||
send_string("00");
|
||||
send_string(SS_TAP(X_KP_0)SS_TAP(X_KP_0));
|
||||
} else unregister_code16(keycode);
|
||||
break;
|
||||
|
||||
@ -572,7 +571,7 @@ bool caps_word_press_user(uint16_t keycode) {
|
||||
case KC_DQT:
|
||||
case KC_COLN:
|
||||
case KC_RSFT:
|
||||
case LSFTCAPSWIN:
|
||||
case KC_LSFT:
|
||||
add_weak_mods(MOD_BIT(KC_LSFT)); // Apply shift to next key.
|
||||
return true;
|
||||
|
||||
@ -625,6 +624,8 @@ void eeconfig_init_user(void) {
|
||||
user_config.esc_double_tap_to_baselyr = true;
|
||||
user_config.ins_on_shft_bkspc_or_del = true;
|
||||
user_config.disable_space_mods = true;
|
||||
user_config.autocorrect = true;
|
||||
user_config.rgb_english_caps = true;
|
||||
|
||||
eeconfig_update_user(user_config.raw);
|
||||
}
|
||||
|
@ -57,12 +57,14 @@ enum custom_user_keycodes {
|
||||
|
||||
TG_CAPS, // Toggles RGB highlighting of alphas during capslock
|
||||
TG_PAD, // Toggles RGB highlighting of keys on numpad+mousekeys layer
|
||||
TG_TDCAP, // Toggles double tap shift (tapdance) for CapsLock
|
||||
TG_TDCAP, // Toggles double tap shift for CapsLock
|
||||
TG_DEL, // Swaps DEL and HOME key locations
|
||||
TG_ENC, // Toggle Encoder functionality
|
||||
TG_ESC, // Toggle ESC tapdance for _BASE layer
|
||||
TG_ENC, // Toggle Encoder button functionality
|
||||
TG_ESC, // Toggle ESC double tap for _BASE layer
|
||||
TG_INS, // Toggle location of INS
|
||||
TG_SPCMOD, // Toggle disabling of modded-SPACE functions
|
||||
TG_AUTOCR, // Toggle AutoCorrect
|
||||
TG_ENGCAP, // Toggle highlighting Non-English letters during CAPSLOCK on ISO boards
|
||||
|
||||
YAHOO, // yahoo.com
|
||||
OUTLOOK, // outlook.com
|
||||
@ -82,12 +84,6 @@ enum custom_user_keycodes {
|
||||
NEW_SAFE_RANGE // New safe range for keymap level custom keycodes
|
||||
};
|
||||
|
||||
|
||||
// Tap Dance Definitions
|
||||
enum custom_tapdance {
|
||||
TD_LSFT_CAPS_WIN,
|
||||
};
|
||||
|
||||
// Set up boolean variables to track user customizable configuration options
|
||||
typedef union {
|
||||
uint32_t raw;
|
||||
@ -100,12 +96,14 @@ typedef union {
|
||||
bool encoder_press_mute_or_media :1;
|
||||
bool ins_on_shft_bkspc_or_del :1;
|
||||
bool disable_space_mods :1;
|
||||
bool autocorrect :1;
|
||||
bool rgb_english_caps :1;
|
||||
};
|
||||
} user_config_t;
|
||||
|
||||
user_config_t user_config;
|
||||
|
||||
#define LSFTCAPSWIN TD(TD_LSFT_CAPS_WIN)
|
||||
//#define LSFTCAPSWIN TD(TD_LSFT_CAPS_WIN)
|
||||
|
||||
// ENCODER ACTIONS
|
||||
#ifdef ENCODER_ENABLE
|
||||
|
@ -1,4 +1,6 @@
|
||||
SRC += gourdo1.c
|
||||
SRC += autocorrect/autocorrection.c
|
||||
|
||||
ifdef ENCODER_ENABLE
|
||||
# include encoder related code when enabled
|
||||
ifeq ($(strip $(ENCODER_DEFAULTACTIONS_ENABLE)), yes)
|
||||
|
Reference in New Issue
Block a user