diff --git a/keyboards/boardsource/unicorne/keymaps/markstos/config.h b/keyboards/boardsource/unicorne/keymaps/markstos/config.h index 29121360..02f636ee 100644 --- a/keyboards/boardsource/unicorne/keymaps/markstos/config.h +++ b/keyboards/boardsource/unicorne/keymaps/markstos/config.h @@ -15,6 +15,9 @@ #define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define SPLIT_ACTIVITY_ENABLE + + #define I2C_DRIVER I2CD1 #define I2C1_SDA_PIN GP22 #define I2C1_SCL_PIN GP23 @@ -24,6 +27,7 @@ #define AUDIO_INIT_DELAY #define AUDIO_PWM_CHANNEL RP2040_PWM_CHANNEL_A #define STARTUP_SONG SONG(ODE_TO_JOY) +//#define AUDIO_CLICKY #define ANALOG_JOYSTICK_Y_AXIS_PIN GP26 #define ANALOG_JOYSTICK_X_AXIS_PIN GP27 diff --git a/keyboards/boardsource/unicorne/keymaps/markstos/keymap.c b/keyboards/boardsource/unicorne/keymaps/markstos/keymap.c index b9d95498..3c3ecd23 100644 --- a/keyboards/boardsource/unicorne/keymaps/markstos/keymap.c +++ b/keyboards/boardsource/unicorne/keymaps/markstos/keymap.c @@ -1,6 +1,15 @@ #include QMK_KEYBOARD_H extern uint8_t is_master; + +bool is_mouse_jiggle_active = false; +bool mouse_jiggle_direction = false; // used to alternate direction +uint16_t mouse_jiggle_frequency = 3000; // how often to move the mouse (15 seconds) +uint16_t mouse_jiggle_timer = 0; + +bool is_alt_tab_active = false; // ADD this near the beginning of keymap.c +uint16_t alt_tab_timer = 0; // we will be using them soon. + void keyboard_post_init_user(void) { #ifdef RGB_MATRIX_ENABLE rgb_matrix_enable(); @@ -15,7 +24,11 @@ enum custom_keycodes { LOWER, RAISE, FUNC, - LOCKWIN + MOUSE, + SHORTCUT, + LOCKWIN, + M_JIGL, + CTL_ATL_DEL }; enum combos { @@ -37,56 +50,99 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) { // when keycode LOCKWIN is pressed register_code(KC_LGUI); // press the Windows key - register_code(KC_L); // press the L key + register_code(KC_L); // press the L key } else { // when keycode LOCKWIN is released - unregister_code(KC_LGUI); // release the Windows key + unregister_code(KC_LGUI); // release the Windows key unregister_code(KC_L); // release the L key } break; + case M_JIGL: + if (record->event.pressed) { + is_mouse_jiggle_active = !is_mouse_jiggle_active; + } + break; + case CTL_ATL_DEL: + if(record->event.pressed) { + register_code(KC_LCTL); + register_code(KC_LALT); + register_code(KC_DEL); + } else { + unregister_code(KC_LCTL); + unregister_code(KC_LALT); + unregister_code(KC_DEL); + } + break; } return true; } +void matrix_scan_user(void) { + if (is_keyboard_master()) { + // initialize timer on master half only, remove if statement above for non-split + if (mouse_jiggle_timer == 0) mouse_jiggle_timer = timer_read(); + } + + if (is_mouse_jiggle_active) { + if (timer_elapsed(mouse_jiggle_timer) > mouse_jiggle_frequency) { + mouse_jiggle_timer = timer_read(); + if (mouse_jiggle_direction) { + tap_code(KC_MS_L); + } else { + tap_code(KC_MS_R); + } + mouse_jiggle_direction = !mouse_jiggle_direction; + } + } + + if (is_alt_tab_active) { + if (timer_elapsed(alt_tab_timer) > 1000) { + unregister_code(KC_LALT); + is_alt_tab_active = false; + } + } +} + // Each layer gets a name for readability, which is then used in the keymap matrix below. // The underscores don't mean anything - you can have a layer called STUFF or any other name. // Layer names don't all need to be of the same length, obviously, and you can also skip them // entirely and just use numbers. #define _QWERTY 0 -#define _LOWER 1 -#define _RAISE 2 -#define _FUNC 3 +#define _LOWER 1 +#define _RAISE 2 +#define _FUNC 3 +#define _MOUSE 4 +#define _SHORTCUT 5 // For _QWERTY layer #define OSL_FUN OSL(_FUNC) #define LOW_TAB LT(_LOWER, KC_TAB) #define RSE_BSP LT(_RAISE, KC_BSPC) +#define MOU_GUI LT(_MOUSE, KC_GUI) +#define SHR_SFT LT(_SHORTCUT, OSM_SFT) #define OSM_SFT OSM(MOD_LSFT) -#define OSM_ALT OSM(MOD_LALT) -#define OSM_CTL OSM(MOD_LCTL) +#define OSM_ALT OSM(MOD_LALT) +#define OSM_CTL OSM(MOD_LCTL) - - -// For _RAISE layer -#define CTL_COPY LCTL_T(KC_C) -#define CTL_PSTE LCTL_T(KC_V) +// For _LOWER layer +#define ALT_TAB LALT(KC_TAB) const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_QWERTY] = LAYOUT_split_3x6_3( \ //,-----------------------------------------------------. ,-----------------------------------------------------. - OSM(MOD_LALT), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y ,KC_U ,KC_I ,KC_O ,KC_P , KC_BSLS,\ + OSM_ALT, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y ,KC_U ,KC_I ,KC_O ,KC_P , KC_BSLS,\ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - OSM_SFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H ,KC_J ,KC_K ,KC_L , KC_SCLN, KC_QUOT,\ + OSM_SFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H ,KC_J ,KC_K ,KC_L , KC_SCLN, KC_QUOT,\ //|---- ----+--------+--------+--------+--------+-------| |--------+--------+--------+--------+--------+--------| - OSM(MOD_LCTL), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,OSL_FUN,\ + OSM_CTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,OSL_FUN,\ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| - KC_LGUI,LOW_TAB, KC_SPC, KC_ENT, RSE_BSP, OSM_SFT \ + MOU_GUI,LOW_TAB, KC_SPC, KC_ENT, RSE_BSP, SHR_SFT \ //`--------------------------' `--------------------------' ), - [_LOWER] = LAYOUT_split_3x6_3( \ +[_LOWER] = LAYOUT_split_3x6_3( \ //,-----------------------------------------------------. ,-----------------------------------------------------. KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,\ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| @@ -98,7 +154,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //`--------------------------' `--------------------------' ), - [_RAISE] = LAYOUT_split_3x6_3( \ +[_RAISE] = LAYOUT_split_3x6_3( \ //,-----------------------------------------------------. ,-----------------------------------------------------. _______, KC_DEL, KC_HOME, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, _______,\ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| @@ -110,13 +166,37 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { //`--------------------------' `--------------------------' ), - [_FUNC] = LAYOUT_split_3x6_3( \ +[_FUNC] = LAYOUT_split_3x6_3( \ //,-----------------------------------------------------. ,-----------------------------------------------------. _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , RGB_VAI, RGB_HUI, RGB_SAI, RGB_MOD, RGB_TOG, _______,\ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - _______, KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10, RGB_VAD, RGB_HUD, RGB_SAD, RGB_RMOD, CK_TOGG, QK_RBT,\ + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F12, RGB_VAD, RGB_HUD, RGB_SAD, RGB_RMOD,XXXXXXX, _______,\ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| - _______, KC_F11, KC_F12, XXXXXXX, XXXXXXX, KC_CAPS, XXXXXXX, LOCKWIN, QK_BOOT, EE_CLR, KC_SLEP, _______,\ + _______, XXXXXXX, XXXXXXX,CTL_ATL_DEL,M_JIGL,KC_NUM, LOCKWIN, QK_RBT, QK_BOOT, EE_CLR, KC_SLEP, _______,\ + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS\ + //`--------------------------' `--------------------------' + ), + +[_MOUSE] = LAYOUT_split_3x6_3( \ + //,-----------------------------------------------------. ,-----------------------------------------------------. + _______, KC_MS_L, KC_MS_U, KC_MS_D, KC_MS_R, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,\ + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, XXXXXXX, XXXXXXX, XXXXXXX, KC_CALC, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,\ + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, XXXXXXX, XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,\ + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS\ + //`--------------------------' `--------------------------' + ), + +[_SHORTCUT] = LAYOUT_split_3x6_3( \ + //,-----------------------------------------------------. ,-----------------------------------------------------. + CTL_ATL_DEL,XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX, KC_CALC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,\ + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,\ + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,\ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS\ //`--------------------------' `--------------------------' @@ -129,6 +209,10 @@ uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { return TAPPING_TERM_THUMB; case LT(_LOWER, KC_TAB): return TAPPING_TERM_THUMB; + case LT(_MOUSE, KC_GUI): + return TAPPING_TERM_THUMB; + case LT(_SHORTCUT, OSM_SFT): + return TAPPING_TERM_THUMB; default: return TAPPING_TERM; } @@ -143,7 +227,6 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { #ifdef OLED_ENABLE bool oled_task_user(void) { // Host Keyboard Layer Status - // oled_write_P(PSTR("Layer: "), false); if (is_keyboard_master()) { switch (get_highest_layer(layer_state)) { @@ -159,6 +242,12 @@ bool oled_task_user(void) { case _FUNC: oled_write_P(PSTR("FN\n"), false); break; + case _MOUSE: + oled_write_P(PSTR("FN\n"), false); + break; + case _SHORTCUT: + oled_write_P(PSTR("FN\n"), false); + break; default: // Or use the write_ln shortcut over adding '\n' to the end of your string oled_write_ln_P(PSTR("Undefined"), false); diff --git a/keyboards/boardsource/unicorne/keymaps/markstos/rules.mk b/keyboards/boardsource/unicorne/keymaps/markstos/rules.mk index dc3ddcd2..b6ef2c6f 100644 --- a/keyboards/boardsource/unicorne/keymaps/markstos/rules.mk +++ b/keyboards/boardsource/unicorne/keymaps/markstos/rules.mk @@ -4,6 +4,7 @@ POINTING_DEVICE_DRIVER = analog_joystick VIA_ENABLE = yes OLED_ENABLE = yes AUDIO_ENABLE = yes +MOUSEKEY_ENABLE = yes # markstos: enable media keys EXTRAKEY_ENABLE = yes